|
- <!doctype html>
- <html lang="zh-CN"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>训练编排真实测试报告 · 2026-09-05</title>
- <style>
- :root{color-scheme:light;--ink:#203544;--muted:#607789;--line:#dce6ec;--green:#137d6e;--soft:#eef6f7}*{box-sizing:border-box}body{margin:0;background:#f3f6f8;color:var(--ink);font:15px/1.75 system-ui,-apple-system,"Microsoft YaHei",sans-serif}main{max-width:1220px;margin:auto;padding:32px 24px 64px}header{padding:30px 34px;background:#103c45;color:white;border-radius:16px}h1{font-size:29px;margin:0 0 12px}header p{color:#d7e8eb;margin:7px 0}nav{display:flex;gap:10px;flex-wrap:wrap;margin:22px 0}nav a{color:var(--green);text-decoration:none;background:white;border:1px solid var(--line);padding:6px 13px;border-radius:7px}section{background:white;border:1px solid var(--line);border-radius:12px;padding:26px 30px;margin:20px 0}h2{font-size:21px;margin:0 0 16px}h3{font-size:17px;margin:0 0 12px}h4{font-size:15px;margin:0 0 7px}p{margin:10px 0}ul{padding-left:22px}li+li{margin-top:7px}.badge{display:inline-block;vertical-align:middle;font-size:12px;font-weight:600;line-height:1.7;border-radius:4px;padding:2px 8px;margin-left:5px}.pass{color:#11634f;background:#e3f5ed}.fail{color:#9e2a35;background:#ffe9ec}.pending{color:#7b6121;background:#fff2cc}.muted{color:var(--muted)}.pending-note{padding:12px 16px;background:#fff8e7;border-left:3px solid #c09a3b}.stages{display:grid;grid-template-columns:1fr 1fr;gap:18px}.stage{border:1px solid var(--line);border-radius:8px;padding:20px}.stage ul{margin-bottom:0}.test+.test{border-top:1px solid var(--line);margin-top:22px;padding-top:22px}.check{border-left:3px solid var(--line);padding:8px 16px;margin:12px 0}details{margin:12px 0}summary{cursor:pointer;color:var(--green)}pre{white-space:pre-wrap;overflow-wrap:anywhere;max-height:600px;overflow:auto;padding:16px;background:#f5f8fa;border:1px solid var(--line);border-radius:7px;font:12px/1.6 ui-monospace,Consolas,monospace}.gallery{display:grid;grid-template-columns:1fr 1fr;gap:20px}figure{margin:0;border:1px solid var(--line);border-radius:8px;overflow:hidden;background:#fafcfd}figure img{width:100%;height:auto;display:block}figcaption{padding:10px 13px;color:var(--muted);font-size:13px}.table-scroll{overflow:auto}table{border-collapse:collapse;width:100%;font-size:13px}th,td{border:1px solid var(--line);text-align:left;padding:10px;white-space:nowrap}th{background:var(--soft)}footer{color:var(--muted);font-size:13px;text-align:center}a{color:var(--green)}@media(max-width:800px){main{padding:16px 12px 40px}header,section{padding:20px}h1{font-size:24px}.stages,.gallery{grid-template-columns:1fr}}@media print{body{background:white}main{max-width:none;padding:0}header{color:var(--ink);background:white;border:1px solid var(--line)}header p{color:var(--muted)}nav{display:none}section{break-inside:avoid}.gallery{grid-template-columns:1fr}details{break-inside:avoid}}
- </style></head><body><main>
- <header><h1>训练编排真实测试报告 <span class="badge pass">通过</span></h1><p>狐狸与牛奶卡车 · 场景 → 任务步骤 → 保存与发布</p><p>2026-09-05 · http://127.0.0.1:6180 · Microsoft Edge / Playwright · 教员编排与独立浏览器只读重开</p><p>证据组:3/3 通过;明确检查:通过 9,失败 0,待验证 0;已校验截图 19 张。</p></header>
- <nav><a href="#method">资料与实施</a><a href="#projects">保留训练数据</a><a href="#tests">测试证据</a><a href="#screenshots">最终截图</a><a href="#history">过程记录</a><a href="#scope">范围与限制</a><a href="report.md">Markdown 报告</a></nav>
-
- <section id="method"><h2>资料 → 产品原型 → 设计 → 开发</h2><div class="stages"><article class="stage"><h3>1 · 资料</h3><ul><li>参考《文档/维修训练内容设计.pdf》(6 页)与已有场景制作成果。按“场景 → 任务步骤 → 学习 / 训练 / 评估”的资料结构检查实现。</li><li>本次使用已发布的狐狸场景和牛奶卡车场景验证训练编排,确认真实模型可见、步骤目标来自绑定场景、保存及发布使用服务端版本。</li></ul></article><article class="stage"><h3>2 · 产品原型</h3><ul><li>沿用现有三维训练编排工作台:选择场景、选择三维对象、配置任务步骤、保存草稿和发布。</li><li>新建时的液压模板仅作为现有界面起点;绑定新场景后不得继续选择该场景中不存在的液压设备。</li></ul></article><article class="stage"><h3>3 · 设计</h3><ul><li>两条独立训练分别绑定狐狸与卡车的明确发布版本;每条配置两步、每步 50 分,总计 100 分,并核验重新打开后的状态。</li><li>保存时以三维视口截图生成训练封面;模型可见性要通过实际截图及模型显示 / 隐藏的像素差异判断。</li><li>将正常流程、独立浏览器只读重开、资源失败、封面失败、版本冲突及并发切换分别留证。独立重开阻断所有业务写请求,核验模型像素可见性、封面哈希与发布依赖;不将其表述为只读角色权限测试。</li></ul></article><article class="stage"><h3>4 · 开发</h3><ul><li>场景目录对接已发布内容版本;GLB 通过受控下载读取;训练依赖固定到所选场景版本,恢复项目时保留来源元数据。</li><li>修复蒙皮模型缩放后的骨骼矩阵与包围盒刷新;场景恢复、部位覆盖和高亮使用一致的尺寸计算。</li><li>绑定场景后移除不存在的内置操作目标,过滤隐藏或已删除对象及其子目标。</li><li>保存和发布等待异步操作完成;封面与内容在同一次版本保存中持久化;失败、冲突及并发切换必须保留可恢复状态。最终实现效果以下方真实测试记录为准。</li><li>修复旧工程快照回写覆盖最新名称与训练形态;场景绑定进行中禁止保存和发布,避免模型尚未加载成功就写入新的场景依赖。</li></ul></article></div></section>
- <section id="projects"><h2>保留训练数据</h2><div class="table-scroll"><table><thead><tr><th>训练 ID</th><th>名称</th><th>状态</th><th>当前版本</th><th>发布版本</th><th>场景 ID</th><th>固定场景版本</th><th>步骤数</th><th>总分</th></tr></thead><tbody><tr><td>161</td><td>实测训练-狐狸野外巡检-已验证-20260905</td><td>PUBLISHED</td><td>213</td><td>213</td><td>160</td><td>210</td><td>2</td><td>100</td></tr><tr><td>162</td><td>实测训练-牛奶卡车进场检查-已验证-20260905</td><td>PUBLISHED</td><td>214</td><td>214</td><td>159</td><td>209</td><td>2</td><td>100</td></tr></tbody></table></div><details><summary>训练 161:版本、步骤、封面与依赖记录</summary><pre>{
- "id": "161",
- "name": "实测训练-狐狸野外巡检-已验证-20260905",
- "status": "PUBLISHED",
- "currentVersionId": "213",
- "publishedVersionId": "213",
- "sceneProjectId": "160",
- "sceneVersionId": "210",
- "stepCount": 2,
- "totalScore": 100,
- "cover": {
- "assetId": "2098",
- "sha256": "7b7c41e441e525e151ad4bd46fe3b01c249282368331f04cebe6a0eac0141267",
- "sizeBytes": 52518,
- "image": "screenshots/fox-final-cover.jpg"
- }
- }</pre></details><details><summary>训练 162:版本、步骤、封面与依赖记录</summary><pre>{
- "id": "162",
- "name": "实测训练-牛奶卡车进场检查-已验证-20260905",
- "status": "PUBLISHED",
- "currentVersionId": "214",
- "publishedVersionId": "214",
- "sceneProjectId": "159",
- "sceneVersionId": "209",
- "stepCount": 2,
- "totalScore": 100,
- "cover": {
- "assetId": "2100",
- "sha256": "efb7060464f840bde78744d89567c609dc7b7922216d1c948fe22c1eed3d41a4",
- "sizeBytes": 42163,
- "image": "screenshots/truck-final-cover.jpg"
- }
- }</pre></details><p class="muted">保留两条真实训练供后续查看;本报告生成器不创建、修改或删除业务数据。</p></section>
- <section id="tests"><h2>5 · 测试</h2><p>证据组:3/3 通过;明确检查:通过 9,失败 0,待验证 0;已校验截图 19 张。</p><p class="muted">过程检查记录执行当时的版本;最终数据以上方保留项目及同版本独立重开记录为准。</p><article class="test"><h3>真实UI训练编排与发布实测 <span class="badge pass">通过</span></h3><div class="check"><h4>使用真实已发布场景创建、编排并保留两条训练,列表显示截图封面 <span class="badge pass">通过</span></h4><details><summary>查看脱敏后的完整记录</summary><pre>{
- "title": "使用真实已发布场景创建、编排并保留两条训练,列表显示截图封面",
- "status": "PASS",
- "screenshots": [
- "screenshots/02-published-scenes.png",
- "screenshots/20-training-list-final.png"
- ],
- "details": {
- "projects": [
- {
- "id": "161",
- "status": "PUBLISHED",
- "sceneProjectId": "160",
- "sceneVersionId": "210",
- "stepCount": 2,
- "totalScore": 100
- },
- {
- "id": "162",
- "status": "PUBLISHED",
- "sceneProjectId": "159",
- "sceneVersionId": "209",
- "stepCount": 2,
- "totalScore": 100
- }
- ]
- }
- }</pre></details></div><div class="check"><h4>狐狸两步编排、复制删除、排序撤销、高级时间轴、项目名称保存及发布 <span class="badge pass">通过</span></h4><details><summary>查看脱敏后的完整记录</summary><pre>{
- "status": "PASS",
- "title": "狐狸两步编排、复制删除、排序撤销、高级时间轴、项目名称保存及发布",
- "id": "161",
- "name": "实测训练-狐狸野外巡检-已验证-20260905",
- "publishedVersionId": "211",
- "coverId": "2095",
- "steps": [
- {
- "title": "识别狐狸巡检目标",
- "target": "scene:OBJ-1788605916565-6",
- "stepCode": "VIRTUAL-S01",
- "actionCode": "VIRTUAL-A01",
- "score": 50
- },
- {
- "title": "检查狐狸外观并确认状态",
- "target": "scene:OBJ-1788605916565-6",
- "stepCode": "VIRTUAL-S02",
- "actionCode": "VIRTUAL-A02",
- "score": 50
- }
- ],
- "errors": [],
- "failed": [],
- "screenshots": [
- "screenshots/09-fox-advanced-timeline.png",
- "screenshots/10-fox-preflight.png"
- ]
- }</pre></details></div><div class="check"><h4>狐狸三维点击选目标、调整视角并截图发布、异常恢复 <span class="badge pass">通过</span></h4><details><summary>查看脱敏后的完整记录</summary><pre>{
- "status": "PASS",
- "title": "狐狸三维点击选目标、调整视角并截图发布、异常恢复",
- "id": "161",
- "publishedVersionId": "213",
- "pick": {
- "x": 1065.015625,
- "y": 750.5,
- "targetId": "scene:OBJ-1788605916565-6/part/interaction-a3d35c26"
- },
- "cameraBefore": [
- -0.04179225073787585,
- 6.099634646023559,
- 17.355036987378313
- ],
- "cameraAfter": [
- -0.9408733025235376,
- 5.534741198620379,
- 15.26632686671827
- ],
- "cover": {
- "id": "2098",
- "sizeBytes": 52518,
- "sha256": "7b7c41e441e525e151ad4bd46fe3b01c249282368331f04cebe6a0eac0141267",
- "equalsCurrentViewport": true
- },
- "errors": [],
- "screenshots": [
- "screenshots/16-fox-mesh-picking.png",
- "screenshots/17-fox-final-published.png"
- ]
- }</pre></details></div><div class="check"><h4>卡车三维拾取、项目名称及任务说明保存、隐藏外壳视角截图发布 <span class="badge pass">通过</span></h4><details><summary>查看脱敏后的完整记录</summary><pre>{
- "status": "PASS",
- "title": "卡车三维拾取、项目名称及任务说明保存、隐藏外壳视角截图发布",
- "id": "162",
- "name": "实测训练-牛奶卡车进场检查-已验证-20260905",
- "publishedVersionId": "214",
- "coverId": "2100",
- "pick": {
- "x": 1065.015625,
- "y": 750.5,
- "targetId": "scene:OBJ-1788605199171-2/part/interaction-5f7e4bee"
- },
- "stepCount": 2,
- "totalScore": 100,
- "errors": [],
- "screenshots": [
- "screenshots/18-truck-mesh-picking.png",
- "screenshots/19-truck-final-published.png"
- ]
- }</pre></details></div><details><summary>final-evidence.json · 完整记录</summary><pre>{
- "title": "真实UI训练编排与发布实测",
- "status": "PASS",
- "finishedAt": "2026-09-05T15:23:29.909Z",
- "projects": [
- {
- "id": "161",
- "name": "实测训练-狐狸野外巡检-已验证-20260905",
- "status": "PUBLISHED",
- "currentVersionId": "213",
- "publishedVersionId": "213",
- "sceneProjectId": "160",
- "sceneVersionId": "210",
- "stepCount": 2,
- "totalScore": 100,
- "cover": {
- "assetId": "2098",
- "sha256": "7b7c41e441e525e151ad4bd46fe3b01c249282368331f04cebe6a0eac0141267",
- "sizeBytes": 52518,
- "image": "screenshots/fox-final-cover.jpg"
- }
- },
- {
- "id": "162",
- "name": "实测训练-牛奶卡车进场检查-已验证-20260905",
- "status": "PUBLISHED",
- "currentVersionId": "214",
- "publishedVersionId": "214",
- "sceneProjectId": "159",
- "sceneVersionId": "209",
- "stepCount": 2,
- "totalScore": 100,
- "cover": {
- "assetId": "2100",
- "sha256": "efb7060464f840bde78744d89567c609dc7b7922216d1c948fe22c1eed3d41a4",
- "sizeBytes": 42163,
- "image": "screenshots/truck-final-cover.jpg"
- }
- }
- ],
- "checks": [
- {
- "title": "使用真实已发布场景创建、编排并保留两条训练,列表显示截图封面",
- "status": "PASS",
- "screenshots": [
- "screenshots/02-published-scenes.png",
- "screenshots/20-training-list-final.png"
- ],
- "details": {
- "projects": [
- {
- "id": "161",
- "status": "PUBLISHED",
- "sceneProjectId": "160",
- "sceneVersionId": "210",
- "stepCount": 2,
- "totalScore": 100
- },
- {
- "id": "162",
- "status": "PUBLISHED",
- "sceneProjectId": "159",
- "sceneVersionId": "209",
- "stepCount": 2,
- "totalScore": 100
- }
- ]
- }
- },
- {
- "status": "PASS",
- "title": "狐狸两步编排、复制删除、排序撤销、高级时间轴、项目名称保存及发布",
- "id": "161",
- "name": "实测训练-狐狸野外巡检-已验证-20260905",
- "publishedVersionId": "211",
- "coverId": "2095",
- "steps": [
- {
- "title": "识别狐狸巡检目标",
- "target": "scene:OBJ-1788605916565-6",
- "stepCode": "VIRTUAL-S01",
- "actionCode": "VIRTUAL-A01",
- "score": 50
- },
- {
- "title": "检查狐狸外观并确认状态",
- "target": "scene:OBJ-1788605916565-6",
- "stepCode": "VIRTUAL-S02",
- "actionCode": "VIRTUAL-A02",
- "score": 50
- }
- ],
- "errors": [],
- "failed": [],
- "screenshots": [
- "screenshots/09-fox-advanced-timeline.png",
- "screenshots/10-fox-preflight.png"
- ]
- },
- {
- "status": "PASS",
- "title": "狐狸三维点击选目标、调整视角并截图发布、异常恢复",
- "id": "161",
- "publishedVersionId": "213",
- "pick": {
- "x": 1065.015625,
- "y": 750.5,
- "targetId": "scene:OBJ-1788605916565-6/part/interaction-a3d35c26"
- },
- "cameraBefore": [
- -0.04179225073787585,
- 6.099634646023559,
- 17.355036987378313
- ],
- "cameraAfter": [
- -0.9408733025235376,
- 5.534741198620379,
- 15.26632686671827
- ],
- "cover": {
- "id": "2098",
- "sizeBytes": 52518,
- "sha256": "7b7c41e441e525e151ad4bd46fe3b01c249282368331f04cebe6a0eac0141267",
- "equalsCurrentViewport": true
- },
- "errors": [],
- "screenshots": [
- "screenshots/16-fox-mesh-picking.png",
- "screenshots/17-fox-final-published.png"
- ]
- },
- {
- "status": "PASS",
- "title": "卡车三维拾取、项目名称及任务说明保存、隐藏外壳视角截图发布",
- "id": "162",
- "name": "实测训练-牛奶卡车进场检查-已验证-20260905",
- "publishedVersionId": "214",
- "coverId": "2100",
- "pick": {
- "x": 1065.015625,
- "y": 750.5,
- "targetId": "scene:OBJ-1788605199171-2/part/interaction-5f7e4bee"
- },
- "stepCount": 2,
- "totalScore": 100,
- "errors": [],
- "screenshots": [
- "screenshots/18-truck-mesh-picking.png",
- "screenshots/19-truck-final-published.png"
- ]
- }
- ],
- "commands": [
- {
- "command": "pnpm run build",
- "status": "PASS",
- "details": "vue-tsc、Vite构建、iframe产物一致性验证通过;有既有chunk体积和DRACO路径构建提示。"
- },
- {
- "command": "pnpm run test:training-legacy",
- "status": "PASS",
- "details": "训练原型迁移和野外场景共享定义两个合同均通过。"
- },
- {
- "command": "node --test tools/training-cover.test.mjs tools/training-scene-api.test.mjs tools/training-model-placement.test.mjs tools/training-scene-targets.test.mjs tools/training-project-metadata.test.mjs",
- "status": "PASS",
- "details": "48/48通过。首次合跑1个测试夹具缺renderSaveState回调,修复夹具后全量复跑通过。"
- },
- {
- "command": "node tools/training-scene-visibility.e2e.mjs",
- "status": "PASS",
- "details": "独立浏览器只读重开验证,最终版本变更后再次运行;细项以readonly-evidence.json为准。"
- }
- ],
- "limitations": [
- "本次未创建教学下发任务,也未验证学员端完成训练;现有“预览训练”入口仍提示先发布再从虚实训练下发任务。",
- "未配置讲解音频和必选安全前置条件,编辑器校验给出非阻断提醒;两条为轻量素材功能测试,不作为正式维修教学内容。",
- "狐狸源场景实际已更新至V3(版本210),使用目录当时的真实发布版;未修改两个源场景或源模型。",
- "训练封面截取保存时的当前视角;卡车封面通过现有“隐藏外壳”按钮隐藏围护结构,立柱仍遮挡部分车身。这是继承的源场景及视角,不是模型未加载;重新打开时仍按固定场景还原相机。",
- "本轮没有新增需确认的功能变更,截图封面按本次明确授权实现;未改变数据库结构,无DDL变更。"
- ],
- "pageErrors": []
- }</pre></details></article><article class="test"><h3>独立浏览器重开、真实模型可见性及封面验证 <span class="badge pass">通过</span></h3><div class="check"><h4>狐狸野外巡检:发布重开、模型实际可见、截图封面 <span class="badge pass">通过</span></h4><details><summary>查看脱敏后的完整记录</summary><pre>{
- "title": "狐狸野外巡检:发布重开、模型实际可见、截图封面",
- "status": "PASS",
- "screenshots": [
- "screenshots/fox-independent-reopen.png",
- "screenshots/fox-final-cover.jpg"
- ],
- "details": {
- "state": "ready",
- "meshes": 1,
- "visibleMeshes": 1,
- "skinnedMeshes": 1,
- "position": [
- -7.5,
- 0.10930174852949677,
- 0.3440109341705351
- ],
- "scale": [
- 0.03616375932570189,
- 0.03616375932570189,
- 0.03616375932570189
- ],
- "finiteBounds": true,
- "size": [
- 0.9658796100519353,
- 2.811899945787403,
- 6
- ],
- "camera": {
- "position": [
- -0.04179225073787585,
- 6.099634646023559,
- 17.355036987378313
- ],
- "target": [
- -7.512232860974557,
- 1.4059499759307126,
- -2.2204460492503126e-16
- ]
- },
- "sample": {
- "width": 320,
- "height": 180,
- "changedPixels": 827
- },
- "scene": {
- "projectId": "160",
- "versionId": "210"
- },
- "targets": [
- {
- "id": "scene:OBJ-1788605873329-2",
- "name": "维修装备主体 02",
- "source": "scene"
- },
- {
- "id": "scene:OBJ-1788605916565-6",
- "name": "狐狸野外巡检目标",
- "source": "scene"
- },
- {
- "id": "scene:OBJ-1788605916565-6/part/interaction-a3d35c26",
- "name": "fox",
- "source": "scene"
- }
- ],
- "steps": [
- {
- "title": "识别狐狸巡检目标",
- "targetId": "scene:OBJ-1788605916565-6",
- "weight": 50
- },
- {
- "title": "检查狐狸外观并确认状态",
- "targetId": "scene:OBJ-1788605916565-6",
- "weight": 50
- }
- ],
- "cover": {
- "assetId": "2098",
- "bytes": 52518,
- "sha256": "7b7c41e441e525e151ad4bd46fe3b01c249282368331f04cebe6a0eac0141267",
- "width": 628,
- "height": 640
- },
- "pageErrors": [],
- "blockedWrites": []
- }
- }</pre></details></div><div class="check"><h4>牛奶卡车进场检查:发布重开、模型实际可见、截图封面 <span class="badge pass">通过</span></h4><details><summary>查看脱敏后的完整记录</summary><pre>{
- "title": "牛奶卡车进场检查:发布重开、模型实际可见、截图封面",
- "status": "PASS",
- "screenshots": [
- "screenshots/truck-independent-reopen.png",
- "screenshots/truck-final-cover.jpg"
- ],
- "details": {
- "state": "ready",
- "meshes": 5,
- "visibleMeshes": 5,
- "skinnedMeshes": 0,
- "position": [
- 4.2,
- 0.20617168998977797,
- -0.4356763541543951
- ],
- "scale": [
- 1.2323086149245381,
- 1.2323086149245381,
- 1.2323086149245381
- ],
- "finiteBounds": true,
- "size": [
- 3.4406057210321332,
- 3.390913184034896,
- 6.000000000000001
- ],
- "camera": {
- "position": [
- 10.565439077211714,
- 5.0456876852867705,
- 7.37050840519251
- ],
- "target": [
- 4.2,
- 1.695456592017448,
- 0
- ]
- },
- "sample": {
- "width": 320,
- "height": 180,
- "changedPixels": 11669
- },
- "scene": {
- "projectId": "159",
- "versionId": "209"
- },
- "targets": [
- {
- "id": "scene:OBJ-1788605199171-2",
- "name": "牛奶卡车检验主装备",
- "source": "scene"
- },
- {
- "id": "scene:OBJ-1788605199171-2/part/interaction-1ba581e6",
- "name": "Yup2Zup",
- "source": "scene"
- },
- {
- "id": "scene:OBJ-1788605199171-2/part/interaction-004dec41",
- "name": "Cesium_Milk_Truck",
- "source": "scene"
- },
- {
- "id": "scene:OBJ-1788605199171-2/part/interaction-5f7e4bee",
- "name": "Cesium_Milk_Truck_1",
- "source": "scene"
- },
- {
- "id": "scene:OBJ-1788605199171-2/part/interaction-607e4d81",
- "name": "Cesium_Milk_Truck_2",
- "source": "scene"
- },
- {
- "id": "scene:OBJ-1788605199171-2/part/interaction-5d7e48c8",
- "name": "Cesium_Milk_Truck_3",
- "source": "scene"
- },
- {
- "id": "scene:OBJ-1788605199171-2/part/interaction-5e7e4a5b",
- "name": "Node",
- "source": "scene"
- },
- {
- "id": "scene:OBJ-1788605199171-2/part/interaction-ce2feac4",
- "name": "Wheels",
- "source": "scene"
- },
- {
- "id": "scene:OBJ-1788605199171-2/part/interaction-637e523a",
- "name": "Node001",
- "source": "scene"
- },
- {
- "id": "scene:OBJ-1788605199171-2/part/interaction-f417f82d",
- "name": "Wheels001",
- "source": "scene"
- }
- ],
- "steps": [
- {
- "title": "识别牛奶卡车检验目标",
- "targetId": "scene:OBJ-1788605199171-2",
- "weight": 50
- },
- {
- "title": "检查卡车外观并确认状态",
- "targetId": "scene:OBJ-1788605199171-2",
- "weight": 50
- }
- ],
- "cover": {
- "assetId": "2100",
- "bytes": 42163,
- "sha256": "efb7060464f840bde78744d89567c609dc7b7922216d1c948fe22c1eed3d41a4",
- "width": 628,
- "height": 640
- },
- "pageErrors": [],
- "blockedWrites": []
- }
- }</pre></details></div><details><summary>readonly-evidence.json · 完整记录</summary><pre>{
- "title": "独立浏览器重开、真实模型可见性及封面验证",
- "status": "PASS",
- "startedAt": "2026-09-05T15:23:16.479Z",
- "checks": [
- {
- "title": "狐狸野外巡检:发布重开、模型实际可见、截图封面",
- "status": "PASS",
- "screenshots": [
- "screenshots/fox-independent-reopen.png",
- "screenshots/fox-final-cover.jpg"
- ],
- "details": {
- "state": "ready",
- "meshes": 1,
- "visibleMeshes": 1,
- "skinnedMeshes": 1,
- "position": [
- -7.5,
- 0.10930174852949677,
- 0.3440109341705351
- ],
- "scale": [
- 0.03616375932570189,
- 0.03616375932570189,
- 0.03616375932570189
- ],
- "finiteBounds": true,
- "size": [
- 0.9658796100519353,
- 2.811899945787403,
- 6
- ],
- "camera": {
- "position": [
- -0.04179225073787585,
- 6.099634646023559,
- 17.355036987378313
- ],
- "target": [
- -7.512232860974557,
- 1.4059499759307126,
- -2.2204460492503126e-16
- ]
- },
- "sample": {
- "width": 320,
- "height": 180,
- "changedPixels": 827
- },
- "scene": {
- "projectId": "160",
- "versionId": "210"
- },
- "targets": [
- {
- "id": "scene:OBJ-1788605873329-2",
- "name": "维修装备主体 02",
- "source": "scene"
- },
- {
- "id": "scene:OBJ-1788605916565-6",
- "name": "狐狸野外巡检目标",
- "source": "scene"
- },
- {
- "id": "scene:OBJ-1788605916565-6/part/interaction-a3d35c26",
- "name": "fox",
- "source": "scene"
- }
- ],
- "steps": [
- {
- "title": "识别狐狸巡检目标",
- "targetId": "scene:OBJ-1788605916565-6",
- "weight": 50
- },
- {
- "title": "检查狐狸外观并确认状态",
- "targetId": "scene:OBJ-1788605916565-6",
- "weight": 50
- }
- ],
- "cover": {
- "assetId": "2098",
- "bytes": 52518,
- "sha256": "7b7c41e441e525e151ad4bd46fe3b01c249282368331f04cebe6a0eac0141267",
- "width": 628,
- "height": 640
- },
- "pageErrors": [],
- "blockedWrites": []
- }
- },
- {
- "title": "牛奶卡车进场检查:发布重开、模型实际可见、截图封面",
- "status": "PASS",
- "screenshots": [
- "screenshots/truck-independent-reopen.png",
- "screenshots/truck-final-cover.jpg"
- ],
- "details": {
- "state": "ready",
- "meshes": 5,
- "visibleMeshes": 5,
- "skinnedMeshes": 0,
- "position": [
- 4.2,
- 0.20617168998977797,
- -0.4356763541543951
- ],
- "scale": [
- 1.2323086149245381,
- 1.2323086149245381,
- 1.2323086149245381
- ],
- "finiteBounds": true,
- "size": [
- 3.4406057210321332,
- 3.390913184034896,
- 6.000000000000001
- ],
- "camera": {
- "position": [
- 10.565439077211714,
- 5.0456876852867705,
- 7.37050840519251
- ],
- "target": [
- 4.2,
- 1.695456592017448,
- 0
- ]
- },
- "sample": {
- "width": 320,
- "height": 180,
- "changedPixels": 11669
- },
- "scene": {
- "projectId": "159",
- "versionId": "209"
- },
- "targets": [
- {
- "id": "scene:OBJ-1788605199171-2",
- "name": "牛奶卡车检验主装备",
- "source": "scene"
- },
- {
- "id": "scene:OBJ-1788605199171-2/part/interaction-1ba581e6",
- "name": "Yup2Zup",
- "source": "scene"
- },
- {
- "id": "scene:OBJ-1788605199171-2/part/interaction-004dec41",
- "name": "Cesium_Milk_Truck",
- "source": "scene"
- },
- {
- "id": "scene:OBJ-1788605199171-2/part/interaction-5f7e4bee",
- "name": "Cesium_Milk_Truck_1",
- "source": "scene"
- },
- {
- "id": "scene:OBJ-1788605199171-2/part/interaction-607e4d81",
- "name": "Cesium_Milk_Truck_2",
- "source": "scene"
- },
- {
- "id": "scene:OBJ-1788605199171-2/part/interaction-5d7e48c8",
- "name": "Cesium_Milk_Truck_3",
- "source": "scene"
- },
- {
- "id": "scene:OBJ-1788605199171-2/part/interaction-5e7e4a5b",
- "name": "Node",
- "source": "scene"
- },
- {
- "id": "scene:OBJ-1788605199171-2/part/interaction-ce2feac4",
- "name": "Wheels",
- "source": "scene"
- },
- {
- "id": "scene:OBJ-1788605199171-2/part/interaction-637e523a",
- "name": "Node001",
- "source": "scene"
- },
- {
- "id": "scene:OBJ-1788605199171-2/part/interaction-f417f82d",
- "name": "Wheels001",
- "source": "scene"
- }
- ],
- "steps": [
- {
- "title": "识别牛奶卡车检验目标",
- "targetId": "scene:OBJ-1788605199171-2",
- "weight": 50
- },
- {
- "title": "检查卡车外观并确认状态",
- "targetId": "scene:OBJ-1788605199171-2",
- "weight": 50
- }
- ],
- "cover": {
- "assetId": "2100",
- "bytes": 42163,
- "sha256": "efb7060464f840bde78744d89567c609dc7b7922216d1c948fe22c1eed3d41a4",
- "width": 628,
- "height": 640
- },
- "pageErrors": [],
- "blockedWrites": []
- }
- }
- ],
- "projects": [
- {
- "id": "161",
- "name": "实测训练-狐狸野外巡检-已验证-20260905",
- "status": "PUBLISHED",
- "currentVersionId": "213",
- "publishedVersionId": "213",
- "sceneProjectId": "160",
- "sceneVersionId": "210",
- "stepCount": 2,
- "totalScore": 100,
- "cover": {
- "assetId": "2098",
- "image": "screenshots/fox-final-cover.jpg"
- }
- },
- {
- "id": "162",
- "name": "实测训练-牛奶卡车进场检查-已验证-20260905",
- "status": "PUBLISHED",
- "currentVersionId": "214",
- "publishedVersionId": "214",
- "sceneProjectId": "159",
- "sceneVersionId": "209",
- "stepCount": 2,
- "totalScore": 100,
- "cover": {
- "assetId": "2100",
- "image": "screenshots/truck-final-cover.jpg"
- }
- }
- ],
- "finishedAt": "2026-09-05T15:24:01.659Z"
- }</pre></details></article><article class="test"><h3>真实浏览器异常分支验证(定向注入HTTP失败) <span class="badge pass">通过</span></h3><div class="check"><h4>封面上传503:训练内容仍保存并保留原封面 <span class="badge pass">通过</span></h4><details><summary>查看脱敏后的完整记录</summary><pre>{
- "title": "封面上传503:训练内容仍保存并保留原封面",
- "status": "PASS",
- "details": {
- "beforeVersion": 6,
- "afterVersion": 7,
- "sameCover": true,
- "stepCount": 2
- },
- "screenshot": "screenshots/12-cover-failure-preserves-old.png"
- }</pre></details></div><div class="check"><h4>保存409:不覆盖服务端内容和封面,并保持未保存提示 <span class="badge pass">通过</span></h4><details><summary>查看脱敏后的完整记录</summary><pre>{
- "title": "保存409:不覆盖服务端内容和封面,并保持未保存提示",
- "status": "PASS",
- "details": {
- "version": 7,
- "putAttempts": 1,
- "sameCover": true
- },
- "screenshot": "screenshots/13-save-conflict.png"
- }</pre></details></div><div class="check"><h4>切换场景下载失败:保持原场景、绑定期间禁止保存发布、零项目写入 <span class="badge pass">通过</span></h4><details><summary>查看脱敏后的完整记录</summary><pre>{
- "title": "切换场景下载失败:保持原场景、绑定期间禁止保存发布、零项目写入",
- "status": "PASS",
- "details": {
- "retainedSceneProjectId": "160",
- "blockedDownloads": 1,
- "putCount": 0
- },
- "screenshots": [
- "screenshots/14-binding-disables-save.png",
- "screenshots/15-binding-failure-retains-scene.png"
- ]
- }</pre></details></div><details><summary>error-evidence.json · 完整记录</summary><pre>{
- "title": "真实浏览器异常分支验证(定向注入HTTP失败)",
- "status": "PASS",
- "checks": [
- {
- "title": "封面上传503:训练内容仍保存并保留原封面",
- "status": "PASS",
- "details": {
- "beforeVersion": 6,
- "afterVersion": 7,
- "sameCover": true,
- "stepCount": 2
- },
- "screenshot": "screenshots/12-cover-failure-preserves-old.png"
- },
- {
- "title": "保存409:不覆盖服务端内容和封面,并保持未保存提示",
- "status": "PASS",
- "details": {
- "version": 7,
- "putAttempts": 1,
- "sameCover": true
- },
- "screenshot": "screenshots/13-save-conflict.png"
- },
- {
- "title": "切换场景下载失败:保持原场景、绑定期间禁止保存发布、零项目写入",
- "status": "PASS",
- "details": {
- "retainedSceneProjectId": "160",
- "blockedDownloads": 1,
- "putCount": 0
- },
- "screenshots": [
- "screenshots/14-binding-disables-save.png",
- "screenshots/15-binding-failure-retains-scene.png"
- ]
- }
- ]
- }</pre></details></article><h3>执行命令与验证结果</h3><div class="check"><h4>pnpm run build <span class="badge pass">通过</span></h4><p>vue-tsc、Vite构建、iframe产物一致性验证通过;有既有chunk体积和DRACO路径构建提示。</p></div><div class="check"><h4>pnpm run test:training-legacy <span class="badge pass">通过</span></h4><p>训练原型迁移和野外场景共享定义两个合同均通过。</p></div><div class="check"><h4>node --test tools/training-cover.test.mjs tools/training-scene-api.test.mjs tools/training-model-placement.test.mjs tools/training-scene-targets.test.mjs tools/training-project-metadata.test.mjs <span class="badge pass">通过</span></h4><p>48/48通过。首次合跑1个测试夹具缺renderSaveState回调,修复夹具后全量复跑通过。</p></div><div class="check"><h4>node tools/training-scene-visibility.e2e.mjs <span class="badge pass">通过</span></h4><p>独立浏览器只读重开验证,最终版本变更后再次运行;细项以readonly-evidence.json为准。</p></div></section>
- <section id="screenshots"><h2>最终及异常验证截图</h2><div class="gallery"><figure><a href="screenshots/fox-final-cover.jpg" target="_blank" rel="noopener"><img src="screenshots/fox-final-cover.jpg" alt="实测训练-狐狸野外巡检-已验证-20260905" loading="lazy"></a><figcaption>实测训练-狐狸野外巡检-已验证-20260905 · 点击查看原图</figcaption></figure><figure><a href="screenshots/truck-final-cover.jpg" target="_blank" rel="noopener"><img src="screenshots/truck-final-cover.jpg" alt="实测训练-牛奶卡车进场检查-已验证-20260905" loading="lazy"></a><figcaption>实测训练-牛奶卡车进场检查-已验证-20260905 · 点击查看原图</figcaption></figure><figure><a href="screenshots/20-training-list-final.png" target="_blank" rel="noopener"><img src="screenshots/20-training-list-final.png" alt="使用真实已发布场景创建、编排并保留两条训练,列表显示截图封面" loading="lazy"></a><figcaption>使用真实已发布场景创建、编排并保留两条训练,列表显示截图封面 · 点击查看原图</figcaption></figure><figure><a href="screenshots/09-fox-advanced-timeline.png" target="_blank" rel="noopener"><img src="screenshots/09-fox-advanced-timeline.png" alt="狐狸两步编排、复制删除、排序撤销、高级时间轴、项目名称保存及发布" loading="lazy"></a><figcaption>狐狸两步编排、复制删除、排序撤销、高级时间轴、项目名称保存及发布 · 点击查看原图</figcaption></figure><figure><a href="screenshots/10-fox-preflight.png" target="_blank" rel="noopener"><img src="screenshots/10-fox-preflight.png" alt="狐狸两步编排、复制删除、排序撤销、高级时间轴、项目名称保存及发布" loading="lazy"></a><figcaption>狐狸两步编排、复制删除、排序撤销、高级时间轴、项目名称保存及发布 · 点击查看原图</figcaption></figure><figure><a href="screenshots/16-fox-mesh-picking.png" target="_blank" rel="noopener"><img src="screenshots/16-fox-mesh-picking.png" alt="狐狸三维点击选目标、调整视角并截图发布、异常恢复" loading="lazy"></a><figcaption>狐狸三维点击选目标、调整视角并截图发布、异常恢复 · 点击查看原图</figcaption></figure><figure><a href="screenshots/17-fox-final-published.png" target="_blank" rel="noopener"><img src="screenshots/17-fox-final-published.png" alt="狐狸三维点击选目标、调整视角并截图发布、异常恢复" loading="lazy"></a><figcaption>狐狸三维点击选目标、调整视角并截图发布、异常恢复 · 点击查看原图</figcaption></figure><figure><a href="screenshots/18-truck-mesh-picking.png" target="_blank" rel="noopener"><img src="screenshots/18-truck-mesh-picking.png" alt="卡车三维拾取、项目名称及任务说明保存、隐藏外壳视角截图发布" loading="lazy"></a><figcaption>卡车三维拾取、项目名称及任务说明保存、隐藏外壳视角截图发布 · 点击查看原图</figcaption></figure><figure><a href="screenshots/19-truck-final-published.png" target="_blank" rel="noopener"><img src="screenshots/19-truck-final-published.png" alt="卡车三维拾取、项目名称及任务说明保存、隐藏外壳视角截图发布" loading="lazy"></a><figcaption>卡车三维拾取、项目名称及任务说明保存、隐藏外壳视角截图发布 · 点击查看原图</figcaption></figure><figure><a href="screenshots/fox-independent-reopen.png" target="_blank" rel="noopener"><img src="screenshots/fox-independent-reopen.png" alt="狐狸野外巡检:发布重开、模型实际可见、截图封面" loading="lazy"></a><figcaption>狐狸野外巡检:发布重开、模型实际可见、截图封面 · 点击查看原图</figcaption></figure><figure><a href="screenshots/truck-independent-reopen.png" target="_blank" rel="noopener"><img src="screenshots/truck-independent-reopen.png" alt="牛奶卡车进场检查:发布重开、模型实际可见、截图封面" loading="lazy"></a><figcaption>牛奶卡车进场检查:发布重开、模型实际可见、截图封面 · 点击查看原图</figcaption></figure><figure><a href="screenshots/12-cover-failure-preserves-old.png" target="_blank" rel="noopener"><img src="screenshots/12-cover-failure-preserves-old.png" alt="封面上传503:训练内容仍保存并保留原封面" loading="lazy"></a><figcaption>封面上传503:训练内容仍保存并保留原封面 · 点击查看原图</figcaption></figure><figure><a href="screenshots/13-save-conflict.png" target="_blank" rel="noopener"><img src="screenshots/13-save-conflict.png" alt="保存409:不覆盖服务端内容和封面,并保持未保存提示" loading="lazy"></a><figcaption>保存409:不覆盖服务端内容和封面,并保持未保存提示 · 点击查看原图</figcaption></figure><figure><a href="screenshots/14-binding-disables-save.png" target="_blank" rel="noopener"><img src="screenshots/14-binding-disables-save.png" alt="切换场景下载失败:保持原场景、绑定期间禁止保存发布、零项目写入" loading="lazy"></a><figcaption>切换场景下载失败:保持原场景、绑定期间禁止保存发布、零项目写入 · 点击查看原图</figcaption></figure><figure><a href="screenshots/15-binding-failure-retains-scene.png" target="_blank" rel="noopener"><img src="screenshots/15-binding-failure-retains-scene.png" alt="切换场景下载失败:保持原场景、绑定期间禁止保存发布、零项目写入" loading="lazy"></a><figcaption>切换场景下载失败:保持原场景、绑定期间禁止保存发布、零项目写入 · 点击查看原图</figcaption></figure></div></section>
- <section id="history"><h2>过程截图 · 不计入最终通过结论</h2><p class="muted">这些截图只记录测试中途状态;最终两步、总分、版本和封面以上方证据为准。</p><div class="gallery"><figure><a href="screenshots/01-before-scene-catalog.png" target="_blank" rel="noopener"><img src="screenshots/01-before-scene-catalog.png" alt="过程记录:初建训练仍显示默认液压模板,仅记录起点,不作为故障对照或最终通过证据。" loading="lazy"></a><figcaption>过程记录:初建训练仍显示默认液压模板,仅记录起点,不作为故障对照或最终通过证据。 · 点击查看原图</figcaption></figure><figure><a href="screenshots/02-published-scenes.png" target="_blank" rel="noopener"><img src="screenshots/02-published-scenes.png" alt="过程记录:打开已发布场景目录。最终版本和固定依赖以最终证据为准。" loading="lazy"></a><figcaption>过程记录:打开已发布场景目录。最终版本和固定依赖以最终证据为准。 · 点击查看原图</figcaption></figure><figure><a href="screenshots/03-truck-bound.png" target="_blank" rel="noopener"><img src="screenshots/03-truck-bound.png" alt="过程记录:首次绑定卡车时仍有 8 个旧模板步骤;不代表最终两步编排通过。" loading="lazy"></a><figcaption>过程记录:首次绑定卡车时仍有 8 个旧模板步骤;不代表最终两步编排通过。 · 点击查看原图</figcaption></figure><figure><a href="screenshots/04-truck-saved.png" target="_blank" rel="noopener"><img src="screenshots/04-truck-saved.png" alt="过程记录:卡车训练阶段性保存;最终步骤、状态、版本和封面以最终证据为准。" loading="lazy"></a><figcaption>过程记录:卡车训练阶段性保存;最终步骤、状态、版本和封面以最终证据为准。 · 点击查看原图</figcaption></figure></div></section>
- <section id="scope"><h2>范围、限制与功能确认结论</h2><ul><li>本次范围为训练编排、草稿保存、发布与重新打开,不包含创建教学任务、下发学员或完成学员训练。</li><li>“预览训练”仍提示需发布后在教学实施中下发;本报告不将该提示视作学员训练已运行。</li><li>本轮仅修复已实现功能的问题,无新增需要用户确认的功能改动。</li></ul><h3>实测限制与后续项</h3><ul><li>本次未创建教学下发任务,也未验证学员端完成训练;现有“预览训练”入口仍提示先发布再从虚实训练下发任务。</li><li>未配置讲解音频和必选安全前置条件,编辑器校验给出非阻断提醒;两条为轻量素材功能测试,不作为正式维修教学内容。</li><li>狐狸源场景实际已更新至V3(版本210),使用目录当时的真实发布版;未修改两个源场景或源模型。</li><li>训练封面截取保存时的当前视角;卡车封面通过现有“隐藏外壳”按钮隐藏围护结构,立柱仍遮挡部分车身。这是继承的源场景及视角,不是模型未加载;重新打开时仍按固定场景还原相机。</li><li>本轮没有新增需确认的功能变更,截图封面按本次明确授权实现;未改变数据库结构,无DDL变更。</li></ul></section>
- <footer>报告生成:2026/9/5 23:26:58(Asia/Shanghai) · 来源:final-evidence.json、readonly-evidence.json、error-evidence.json · 图片均经本地文件校验</footer>
- </main></body></html>
|