Non puoi selezionare più di 25 argomenti Gli argomenti devono iniziare con una lettera o un numero, possono includere trattini ('-') e possono essere lunghi fino a 35 caratteri.
 
 
 
 

869 righe
52 KiB

  1. <!doctype html>
  2. <html lang="zh-CN"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>训练编排真实测试报告 · 2026-09-05</title>
  3. <style>
  4. :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}}
  5. </style></head><body><main>
  6. <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>
  7. <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>
  8. <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>
  9. <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>{
  10. &quot;id&quot;: &quot;161&quot;,
  11. &quot;name&quot;: &quot;实测训练-狐狸野外巡检-已验证-20260905&quot;,
  12. &quot;status&quot;: &quot;PUBLISHED&quot;,
  13. &quot;currentVersionId&quot;: &quot;213&quot;,
  14. &quot;publishedVersionId&quot;: &quot;213&quot;,
  15. &quot;sceneProjectId&quot;: &quot;160&quot;,
  16. &quot;sceneVersionId&quot;: &quot;210&quot;,
  17. &quot;stepCount&quot;: 2,
  18. &quot;totalScore&quot;: 100,
  19. &quot;cover&quot;: {
  20. &quot;assetId&quot;: &quot;2098&quot;,
  21. &quot;sha256&quot;: &quot;7b7c41e441e525e151ad4bd46fe3b01c249282368331f04cebe6a0eac0141267&quot;,
  22. &quot;sizeBytes&quot;: 52518,
  23. &quot;image&quot;: &quot;screenshots/fox-final-cover.jpg&quot;
  24. }
  25. }</pre></details><details><summary>训练 162:版本、步骤、封面与依赖记录</summary><pre>{
  26. &quot;id&quot;: &quot;162&quot;,
  27. &quot;name&quot;: &quot;实测训练-牛奶卡车进场检查-已验证-20260905&quot;,
  28. &quot;status&quot;: &quot;PUBLISHED&quot;,
  29. &quot;currentVersionId&quot;: &quot;214&quot;,
  30. &quot;publishedVersionId&quot;: &quot;214&quot;,
  31. &quot;sceneProjectId&quot;: &quot;159&quot;,
  32. &quot;sceneVersionId&quot;: &quot;209&quot;,
  33. &quot;stepCount&quot;: 2,
  34. &quot;totalScore&quot;: 100,
  35. &quot;cover&quot;: {
  36. &quot;assetId&quot;: &quot;2100&quot;,
  37. &quot;sha256&quot;: &quot;efb7060464f840bde78744d89567c609dc7b7922216d1c948fe22c1eed3d41a4&quot;,
  38. &quot;sizeBytes&quot;: 42163,
  39. &quot;image&quot;: &quot;screenshots/truck-final-cover.jpg&quot;
  40. }
  41. }</pre></details><p class="muted">保留两条真实训练供后续查看;本报告生成器不创建、修改或删除业务数据。</p></section>
  42. <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>{
  43. &quot;title&quot;: &quot;使用真实已发布场景创建、编排并保留两条训练,列表显示截图封面&quot;,
  44. &quot;status&quot;: &quot;PASS&quot;,
  45. &quot;screenshots&quot;: [
  46. &quot;screenshots/02-published-scenes.png&quot;,
  47. &quot;screenshots/20-training-list-final.png&quot;
  48. ],
  49. &quot;details&quot;: {
  50. &quot;projects&quot;: [
  51. {
  52. &quot;id&quot;: &quot;161&quot;,
  53. &quot;status&quot;: &quot;PUBLISHED&quot;,
  54. &quot;sceneProjectId&quot;: &quot;160&quot;,
  55. &quot;sceneVersionId&quot;: &quot;210&quot;,
  56. &quot;stepCount&quot;: 2,
  57. &quot;totalScore&quot;: 100
  58. },
  59. {
  60. &quot;id&quot;: &quot;162&quot;,
  61. &quot;status&quot;: &quot;PUBLISHED&quot;,
  62. &quot;sceneProjectId&quot;: &quot;159&quot;,
  63. &quot;sceneVersionId&quot;: &quot;209&quot;,
  64. &quot;stepCount&quot;: 2,
  65. &quot;totalScore&quot;: 100
  66. }
  67. ]
  68. }
  69. }</pre></details></div><div class="check"><h4>狐狸两步编排、复制删除、排序撤销、高级时间轴、项目名称保存及发布 <span class="badge pass">通过</span></h4><details><summary>查看脱敏后的完整记录</summary><pre>{
  70. &quot;status&quot;: &quot;PASS&quot;,
  71. &quot;title&quot;: &quot;狐狸两步编排、复制删除、排序撤销、高级时间轴、项目名称保存及发布&quot;,
  72. &quot;id&quot;: &quot;161&quot;,
  73. &quot;name&quot;: &quot;实测训练-狐狸野外巡检-已验证-20260905&quot;,
  74. &quot;publishedVersionId&quot;: &quot;211&quot;,
  75. &quot;coverId&quot;: &quot;2095&quot;,
  76. &quot;steps&quot;: [
  77. {
  78. &quot;title&quot;: &quot;识别狐狸巡检目标&quot;,
  79. &quot;target&quot;: &quot;scene:OBJ-1788605916565-6&quot;,
  80. &quot;stepCode&quot;: &quot;VIRTUAL-S01&quot;,
  81. &quot;actionCode&quot;: &quot;VIRTUAL-A01&quot;,
  82. &quot;score&quot;: 50
  83. },
  84. {
  85. &quot;title&quot;: &quot;检查狐狸外观并确认状态&quot;,
  86. &quot;target&quot;: &quot;scene:OBJ-1788605916565-6&quot;,
  87. &quot;stepCode&quot;: &quot;VIRTUAL-S02&quot;,
  88. &quot;actionCode&quot;: &quot;VIRTUAL-A02&quot;,
  89. &quot;score&quot;: 50
  90. }
  91. ],
  92. &quot;errors&quot;: [],
  93. &quot;failed&quot;: [],
  94. &quot;screenshots&quot;: [
  95. &quot;screenshots/09-fox-advanced-timeline.png&quot;,
  96. &quot;screenshots/10-fox-preflight.png&quot;
  97. ]
  98. }</pre></details></div><div class="check"><h4>狐狸三维点击选目标、调整视角并截图发布、异常恢复 <span class="badge pass">通过</span></h4><details><summary>查看脱敏后的完整记录</summary><pre>{
  99. &quot;status&quot;: &quot;PASS&quot;,
  100. &quot;title&quot;: &quot;狐狸三维点击选目标、调整视角并截图发布、异常恢复&quot;,
  101. &quot;id&quot;: &quot;161&quot;,
  102. &quot;publishedVersionId&quot;: &quot;213&quot;,
  103. &quot;pick&quot;: {
  104. &quot;x&quot;: 1065.015625,
  105. &quot;y&quot;: 750.5,
  106. &quot;targetId&quot;: &quot;scene:OBJ-1788605916565-6/part/interaction-a3d35c26&quot;
  107. },
  108. &quot;cameraBefore&quot;: [
  109. -0.04179225073787585,
  110. 6.099634646023559,
  111. 17.355036987378313
  112. ],
  113. &quot;cameraAfter&quot;: [
  114. -0.9408733025235376,
  115. 5.534741198620379,
  116. 15.26632686671827
  117. ],
  118. &quot;cover&quot;: {
  119. &quot;id&quot;: &quot;2098&quot;,
  120. &quot;sizeBytes&quot;: 52518,
  121. &quot;sha256&quot;: &quot;7b7c41e441e525e151ad4bd46fe3b01c249282368331f04cebe6a0eac0141267&quot;,
  122. &quot;equalsCurrentViewport&quot;: true
  123. },
  124. &quot;errors&quot;: [],
  125. &quot;screenshots&quot;: [
  126. &quot;screenshots/16-fox-mesh-picking.png&quot;,
  127. &quot;screenshots/17-fox-final-published.png&quot;
  128. ]
  129. }</pre></details></div><div class="check"><h4>卡车三维拾取、项目名称及任务说明保存、隐藏外壳视角截图发布 <span class="badge pass">通过</span></h4><details><summary>查看脱敏后的完整记录</summary><pre>{
  130. &quot;status&quot;: &quot;PASS&quot;,
  131. &quot;title&quot;: &quot;卡车三维拾取、项目名称及任务说明保存、隐藏外壳视角截图发布&quot;,
  132. &quot;id&quot;: &quot;162&quot;,
  133. &quot;name&quot;: &quot;实测训练-牛奶卡车进场检查-已验证-20260905&quot;,
  134. &quot;publishedVersionId&quot;: &quot;214&quot;,
  135. &quot;coverId&quot;: &quot;2100&quot;,
  136. &quot;pick&quot;: {
  137. &quot;x&quot;: 1065.015625,
  138. &quot;y&quot;: 750.5,
  139. &quot;targetId&quot;: &quot;scene:OBJ-1788605199171-2/part/interaction-5f7e4bee&quot;
  140. },
  141. &quot;stepCount&quot;: 2,
  142. &quot;totalScore&quot;: 100,
  143. &quot;errors&quot;: [],
  144. &quot;screenshots&quot;: [
  145. &quot;screenshots/18-truck-mesh-picking.png&quot;,
  146. &quot;screenshots/19-truck-final-published.png&quot;
  147. ]
  148. }</pre></details></div><details><summary>final-evidence.json · 完整记录</summary><pre>{
  149. &quot;title&quot;: &quot;真实UI训练编排与发布实测&quot;,
  150. &quot;status&quot;: &quot;PASS&quot;,
  151. &quot;finishedAt&quot;: &quot;2026-09-05T15:23:29.909Z&quot;,
  152. &quot;projects&quot;: [
  153. {
  154. &quot;id&quot;: &quot;161&quot;,
  155. &quot;name&quot;: &quot;实测训练-狐狸野外巡检-已验证-20260905&quot;,
  156. &quot;status&quot;: &quot;PUBLISHED&quot;,
  157. &quot;currentVersionId&quot;: &quot;213&quot;,
  158. &quot;publishedVersionId&quot;: &quot;213&quot;,
  159. &quot;sceneProjectId&quot;: &quot;160&quot;,
  160. &quot;sceneVersionId&quot;: &quot;210&quot;,
  161. &quot;stepCount&quot;: 2,
  162. &quot;totalScore&quot;: 100,
  163. &quot;cover&quot;: {
  164. &quot;assetId&quot;: &quot;2098&quot;,
  165. &quot;sha256&quot;: &quot;7b7c41e441e525e151ad4bd46fe3b01c249282368331f04cebe6a0eac0141267&quot;,
  166. &quot;sizeBytes&quot;: 52518,
  167. &quot;image&quot;: &quot;screenshots/fox-final-cover.jpg&quot;
  168. }
  169. },
  170. {
  171. &quot;id&quot;: &quot;162&quot;,
  172. &quot;name&quot;: &quot;实测训练-牛奶卡车进场检查-已验证-20260905&quot;,
  173. &quot;status&quot;: &quot;PUBLISHED&quot;,
  174. &quot;currentVersionId&quot;: &quot;214&quot;,
  175. &quot;publishedVersionId&quot;: &quot;214&quot;,
  176. &quot;sceneProjectId&quot;: &quot;159&quot;,
  177. &quot;sceneVersionId&quot;: &quot;209&quot;,
  178. &quot;stepCount&quot;: 2,
  179. &quot;totalScore&quot;: 100,
  180. &quot;cover&quot;: {
  181. &quot;assetId&quot;: &quot;2100&quot;,
  182. &quot;sha256&quot;: &quot;efb7060464f840bde78744d89567c609dc7b7922216d1c948fe22c1eed3d41a4&quot;,
  183. &quot;sizeBytes&quot;: 42163,
  184. &quot;image&quot;: &quot;screenshots/truck-final-cover.jpg&quot;
  185. }
  186. }
  187. ],
  188. &quot;checks&quot;: [
  189. {
  190. &quot;title&quot;: &quot;使用真实已发布场景创建、编排并保留两条训练,列表显示截图封面&quot;,
  191. &quot;status&quot;: &quot;PASS&quot;,
  192. &quot;screenshots&quot;: [
  193. &quot;screenshots/02-published-scenes.png&quot;,
  194. &quot;screenshots/20-training-list-final.png&quot;
  195. ],
  196. &quot;details&quot;: {
  197. &quot;projects&quot;: [
  198. {
  199. &quot;id&quot;: &quot;161&quot;,
  200. &quot;status&quot;: &quot;PUBLISHED&quot;,
  201. &quot;sceneProjectId&quot;: &quot;160&quot;,
  202. &quot;sceneVersionId&quot;: &quot;210&quot;,
  203. &quot;stepCount&quot;: 2,
  204. &quot;totalScore&quot;: 100
  205. },
  206. {
  207. &quot;id&quot;: &quot;162&quot;,
  208. &quot;status&quot;: &quot;PUBLISHED&quot;,
  209. &quot;sceneProjectId&quot;: &quot;159&quot;,
  210. &quot;sceneVersionId&quot;: &quot;209&quot;,
  211. &quot;stepCount&quot;: 2,
  212. &quot;totalScore&quot;: 100
  213. }
  214. ]
  215. }
  216. },
  217. {
  218. &quot;status&quot;: &quot;PASS&quot;,
  219. &quot;title&quot;: &quot;狐狸两步编排、复制删除、排序撤销、高级时间轴、项目名称保存及发布&quot;,
  220. &quot;id&quot;: &quot;161&quot;,
  221. &quot;name&quot;: &quot;实测训练-狐狸野外巡检-已验证-20260905&quot;,
  222. &quot;publishedVersionId&quot;: &quot;211&quot;,
  223. &quot;coverId&quot;: &quot;2095&quot;,
  224. &quot;steps&quot;: [
  225. {
  226. &quot;title&quot;: &quot;识别狐狸巡检目标&quot;,
  227. &quot;target&quot;: &quot;scene:OBJ-1788605916565-6&quot;,
  228. &quot;stepCode&quot;: &quot;VIRTUAL-S01&quot;,
  229. &quot;actionCode&quot;: &quot;VIRTUAL-A01&quot;,
  230. &quot;score&quot;: 50
  231. },
  232. {
  233. &quot;title&quot;: &quot;检查狐狸外观并确认状态&quot;,
  234. &quot;target&quot;: &quot;scene:OBJ-1788605916565-6&quot;,
  235. &quot;stepCode&quot;: &quot;VIRTUAL-S02&quot;,
  236. &quot;actionCode&quot;: &quot;VIRTUAL-A02&quot;,
  237. &quot;score&quot;: 50
  238. }
  239. ],
  240. &quot;errors&quot;: [],
  241. &quot;failed&quot;: [],
  242. &quot;screenshots&quot;: [
  243. &quot;screenshots/09-fox-advanced-timeline.png&quot;,
  244. &quot;screenshots/10-fox-preflight.png&quot;
  245. ]
  246. },
  247. {
  248. &quot;status&quot;: &quot;PASS&quot;,
  249. &quot;title&quot;: &quot;狐狸三维点击选目标、调整视角并截图发布、异常恢复&quot;,
  250. &quot;id&quot;: &quot;161&quot;,
  251. &quot;publishedVersionId&quot;: &quot;213&quot;,
  252. &quot;pick&quot;: {
  253. &quot;x&quot;: 1065.015625,
  254. &quot;y&quot;: 750.5,
  255. &quot;targetId&quot;: &quot;scene:OBJ-1788605916565-6/part/interaction-a3d35c26&quot;
  256. },
  257. &quot;cameraBefore&quot;: [
  258. -0.04179225073787585,
  259. 6.099634646023559,
  260. 17.355036987378313
  261. ],
  262. &quot;cameraAfter&quot;: [
  263. -0.9408733025235376,
  264. 5.534741198620379,
  265. 15.26632686671827
  266. ],
  267. &quot;cover&quot;: {
  268. &quot;id&quot;: &quot;2098&quot;,
  269. &quot;sizeBytes&quot;: 52518,
  270. &quot;sha256&quot;: &quot;7b7c41e441e525e151ad4bd46fe3b01c249282368331f04cebe6a0eac0141267&quot;,
  271. &quot;equalsCurrentViewport&quot;: true
  272. },
  273. &quot;errors&quot;: [],
  274. &quot;screenshots&quot;: [
  275. &quot;screenshots/16-fox-mesh-picking.png&quot;,
  276. &quot;screenshots/17-fox-final-published.png&quot;
  277. ]
  278. },
  279. {
  280. &quot;status&quot;: &quot;PASS&quot;,
  281. &quot;title&quot;: &quot;卡车三维拾取、项目名称及任务说明保存、隐藏外壳视角截图发布&quot;,
  282. &quot;id&quot;: &quot;162&quot;,
  283. &quot;name&quot;: &quot;实测训练-牛奶卡车进场检查-已验证-20260905&quot;,
  284. &quot;publishedVersionId&quot;: &quot;214&quot;,
  285. &quot;coverId&quot;: &quot;2100&quot;,
  286. &quot;pick&quot;: {
  287. &quot;x&quot;: 1065.015625,
  288. &quot;y&quot;: 750.5,
  289. &quot;targetId&quot;: &quot;scene:OBJ-1788605199171-2/part/interaction-5f7e4bee&quot;
  290. },
  291. &quot;stepCount&quot;: 2,
  292. &quot;totalScore&quot;: 100,
  293. &quot;errors&quot;: [],
  294. &quot;screenshots&quot;: [
  295. &quot;screenshots/18-truck-mesh-picking.png&quot;,
  296. &quot;screenshots/19-truck-final-published.png&quot;
  297. ]
  298. }
  299. ],
  300. &quot;commands&quot;: [
  301. {
  302. &quot;command&quot;: &quot;pnpm run build&quot;,
  303. &quot;status&quot;: &quot;PASS&quot;,
  304. &quot;details&quot;: &quot;vue-tsc、Vite构建、iframe产物一致性验证通过;有既有chunk体积和DRACO路径构建提示。&quot;
  305. },
  306. {
  307. &quot;command&quot;: &quot;pnpm run test:training-legacy&quot;,
  308. &quot;status&quot;: &quot;PASS&quot;,
  309. &quot;details&quot;: &quot;训练原型迁移和野外场景共享定义两个合同均通过。&quot;
  310. },
  311. {
  312. &quot;command&quot;: &quot;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&quot;,
  313. &quot;status&quot;: &quot;PASS&quot;,
  314. &quot;details&quot;: &quot;48/48通过。首次合跑1个测试夹具缺renderSaveState回调,修复夹具后全量复跑通过。&quot;
  315. },
  316. {
  317. &quot;command&quot;: &quot;node tools/training-scene-visibility.e2e.mjs&quot;,
  318. &quot;status&quot;: &quot;PASS&quot;,
  319. &quot;details&quot;: &quot;独立浏览器只读重开验证,最终版本变更后再次运行;细项以readonly-evidence.json为准。&quot;
  320. }
  321. ],
  322. &quot;limitations&quot;: [
  323. &quot;本次未创建教学下发任务,也未验证学员端完成训练;现有“预览训练”入口仍提示先发布再从虚实训练下发任务。&quot;,
  324. &quot;未配置讲解音频和必选安全前置条件,编辑器校验给出非阻断提醒;两条为轻量素材功能测试,不作为正式维修教学内容。&quot;,
  325. &quot;狐狸源场景实际已更新至V3(版本210),使用目录当时的真实发布版;未修改两个源场景或源模型。&quot;,
  326. &quot;训练封面截取保存时的当前视角;卡车封面通过现有“隐藏外壳”按钮隐藏围护结构,立柱仍遮挡部分车身。这是继承的源场景及视角,不是模型未加载;重新打开时仍按固定场景还原相机。&quot;,
  327. &quot;本轮没有新增需确认的功能变更,截图封面按本次明确授权实现;未改变数据库结构,无DDL变更。&quot;
  328. ],
  329. &quot;pageErrors&quot;: []
  330. }</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>{
  331. &quot;title&quot;: &quot;狐狸野外巡检:发布重开、模型实际可见、截图封面&quot;,
  332. &quot;status&quot;: &quot;PASS&quot;,
  333. &quot;screenshots&quot;: [
  334. &quot;screenshots/fox-independent-reopen.png&quot;,
  335. &quot;screenshots/fox-final-cover.jpg&quot;
  336. ],
  337. &quot;details&quot;: {
  338. &quot;state&quot;: &quot;ready&quot;,
  339. &quot;meshes&quot;: 1,
  340. &quot;visibleMeshes&quot;: 1,
  341. &quot;skinnedMeshes&quot;: 1,
  342. &quot;position&quot;: [
  343. -7.5,
  344. 0.10930174852949677,
  345. 0.3440109341705351
  346. ],
  347. &quot;scale&quot;: [
  348. 0.03616375932570189,
  349. 0.03616375932570189,
  350. 0.03616375932570189
  351. ],
  352. &quot;finiteBounds&quot;: true,
  353. &quot;size&quot;: [
  354. 0.9658796100519353,
  355. 2.811899945787403,
  356. 6
  357. ],
  358. &quot;camera&quot;: {
  359. &quot;position&quot;: [
  360. -0.04179225073787585,
  361. 6.099634646023559,
  362. 17.355036987378313
  363. ],
  364. &quot;target&quot;: [
  365. -7.512232860974557,
  366. 1.4059499759307126,
  367. -2.2204460492503126e-16
  368. ]
  369. },
  370. &quot;sample&quot;: {
  371. &quot;width&quot;: 320,
  372. &quot;height&quot;: 180,
  373. &quot;changedPixels&quot;: 827
  374. },
  375. &quot;scene&quot;: {
  376. &quot;projectId&quot;: &quot;160&quot;,
  377. &quot;versionId&quot;: &quot;210&quot;
  378. },
  379. &quot;targets&quot;: [
  380. {
  381. &quot;id&quot;: &quot;scene:OBJ-1788605873329-2&quot;,
  382. &quot;name&quot;: &quot;维修装备主体 02&quot;,
  383. &quot;source&quot;: &quot;scene&quot;
  384. },
  385. {
  386. &quot;id&quot;: &quot;scene:OBJ-1788605916565-6&quot;,
  387. &quot;name&quot;: &quot;狐狸野外巡检目标&quot;,
  388. &quot;source&quot;: &quot;scene&quot;
  389. },
  390. {
  391. &quot;id&quot;: &quot;scene:OBJ-1788605916565-6/part/interaction-a3d35c26&quot;,
  392. &quot;name&quot;: &quot;fox&quot;,
  393. &quot;source&quot;: &quot;scene&quot;
  394. }
  395. ],
  396. &quot;steps&quot;: [
  397. {
  398. &quot;title&quot;: &quot;识别狐狸巡检目标&quot;,
  399. &quot;targetId&quot;: &quot;scene:OBJ-1788605916565-6&quot;,
  400. &quot;weight&quot;: 50
  401. },
  402. {
  403. &quot;title&quot;: &quot;检查狐狸外观并确认状态&quot;,
  404. &quot;targetId&quot;: &quot;scene:OBJ-1788605916565-6&quot;,
  405. &quot;weight&quot;: 50
  406. }
  407. ],
  408. &quot;cover&quot;: {
  409. &quot;assetId&quot;: &quot;2098&quot;,
  410. &quot;bytes&quot;: 52518,
  411. &quot;sha256&quot;: &quot;7b7c41e441e525e151ad4bd46fe3b01c249282368331f04cebe6a0eac0141267&quot;,
  412. &quot;width&quot;: 628,
  413. &quot;height&quot;: 640
  414. },
  415. &quot;pageErrors&quot;: [],
  416. &quot;blockedWrites&quot;: []
  417. }
  418. }</pre></details></div><div class="check"><h4>牛奶卡车进场检查:发布重开、模型实际可见、截图封面 <span class="badge pass">通过</span></h4><details><summary>查看脱敏后的完整记录</summary><pre>{
  419. &quot;title&quot;: &quot;牛奶卡车进场检查:发布重开、模型实际可见、截图封面&quot;,
  420. &quot;status&quot;: &quot;PASS&quot;,
  421. &quot;screenshots&quot;: [
  422. &quot;screenshots/truck-independent-reopen.png&quot;,
  423. &quot;screenshots/truck-final-cover.jpg&quot;
  424. ],
  425. &quot;details&quot;: {
  426. &quot;state&quot;: &quot;ready&quot;,
  427. &quot;meshes&quot;: 5,
  428. &quot;visibleMeshes&quot;: 5,
  429. &quot;skinnedMeshes&quot;: 0,
  430. &quot;position&quot;: [
  431. 4.2,
  432. 0.20617168998977797,
  433. -0.4356763541543951
  434. ],
  435. &quot;scale&quot;: [
  436. 1.2323086149245381,
  437. 1.2323086149245381,
  438. 1.2323086149245381
  439. ],
  440. &quot;finiteBounds&quot;: true,
  441. &quot;size&quot;: [
  442. 3.4406057210321332,
  443. 3.390913184034896,
  444. 6.000000000000001
  445. ],
  446. &quot;camera&quot;: {
  447. &quot;position&quot;: [
  448. 10.565439077211714,
  449. 5.0456876852867705,
  450. 7.37050840519251
  451. ],
  452. &quot;target&quot;: [
  453. 4.2,
  454. 1.695456592017448,
  455. 0
  456. ]
  457. },
  458. &quot;sample&quot;: {
  459. &quot;width&quot;: 320,
  460. &quot;height&quot;: 180,
  461. &quot;changedPixels&quot;: 11669
  462. },
  463. &quot;scene&quot;: {
  464. &quot;projectId&quot;: &quot;159&quot;,
  465. &quot;versionId&quot;: &quot;209&quot;
  466. },
  467. &quot;targets&quot;: [
  468. {
  469. &quot;id&quot;: &quot;scene:OBJ-1788605199171-2&quot;,
  470. &quot;name&quot;: &quot;牛奶卡车检验主装备&quot;,
  471. &quot;source&quot;: &quot;scene&quot;
  472. },
  473. {
  474. &quot;id&quot;: &quot;scene:OBJ-1788605199171-2/part/interaction-1ba581e6&quot;,
  475. &quot;name&quot;: &quot;Yup2Zup&quot;,
  476. &quot;source&quot;: &quot;scene&quot;
  477. },
  478. {
  479. &quot;id&quot;: &quot;scene:OBJ-1788605199171-2/part/interaction-004dec41&quot;,
  480. &quot;name&quot;: &quot;Cesium_Milk_Truck&quot;,
  481. &quot;source&quot;: &quot;scene&quot;
  482. },
  483. {
  484. &quot;id&quot;: &quot;scene:OBJ-1788605199171-2/part/interaction-5f7e4bee&quot;,
  485. &quot;name&quot;: &quot;Cesium_Milk_Truck_1&quot;,
  486. &quot;source&quot;: &quot;scene&quot;
  487. },
  488. {
  489. &quot;id&quot;: &quot;scene:OBJ-1788605199171-2/part/interaction-607e4d81&quot;,
  490. &quot;name&quot;: &quot;Cesium_Milk_Truck_2&quot;,
  491. &quot;source&quot;: &quot;scene&quot;
  492. },
  493. {
  494. &quot;id&quot;: &quot;scene:OBJ-1788605199171-2/part/interaction-5d7e48c8&quot;,
  495. &quot;name&quot;: &quot;Cesium_Milk_Truck_3&quot;,
  496. &quot;source&quot;: &quot;scene&quot;
  497. },
  498. {
  499. &quot;id&quot;: &quot;scene:OBJ-1788605199171-2/part/interaction-5e7e4a5b&quot;,
  500. &quot;name&quot;: &quot;Node&quot;,
  501. &quot;source&quot;: &quot;scene&quot;
  502. },
  503. {
  504. &quot;id&quot;: &quot;scene:OBJ-1788605199171-2/part/interaction-ce2feac4&quot;,
  505. &quot;name&quot;: &quot;Wheels&quot;,
  506. &quot;source&quot;: &quot;scene&quot;
  507. },
  508. {
  509. &quot;id&quot;: &quot;scene:OBJ-1788605199171-2/part/interaction-637e523a&quot;,
  510. &quot;name&quot;: &quot;Node001&quot;,
  511. &quot;source&quot;: &quot;scene&quot;
  512. },
  513. {
  514. &quot;id&quot;: &quot;scene:OBJ-1788605199171-2/part/interaction-f417f82d&quot;,
  515. &quot;name&quot;: &quot;Wheels001&quot;,
  516. &quot;source&quot;: &quot;scene&quot;
  517. }
  518. ],
  519. &quot;steps&quot;: [
  520. {
  521. &quot;title&quot;: &quot;识别牛奶卡车检验目标&quot;,
  522. &quot;targetId&quot;: &quot;scene:OBJ-1788605199171-2&quot;,
  523. &quot;weight&quot;: 50
  524. },
  525. {
  526. &quot;title&quot;: &quot;检查卡车外观并确认状态&quot;,
  527. &quot;targetId&quot;: &quot;scene:OBJ-1788605199171-2&quot;,
  528. &quot;weight&quot;: 50
  529. }
  530. ],
  531. &quot;cover&quot;: {
  532. &quot;assetId&quot;: &quot;2100&quot;,
  533. &quot;bytes&quot;: 42163,
  534. &quot;sha256&quot;: &quot;efb7060464f840bde78744d89567c609dc7b7922216d1c948fe22c1eed3d41a4&quot;,
  535. &quot;width&quot;: 628,
  536. &quot;height&quot;: 640
  537. },
  538. &quot;pageErrors&quot;: [],
  539. &quot;blockedWrites&quot;: []
  540. }
  541. }</pre></details></div><details><summary>readonly-evidence.json · 完整记录</summary><pre>{
  542. &quot;title&quot;: &quot;独立浏览器重开、真实模型可见性及封面验证&quot;,
  543. &quot;status&quot;: &quot;PASS&quot;,
  544. &quot;startedAt&quot;: &quot;2026-09-05T15:23:16.479Z&quot;,
  545. &quot;checks&quot;: [
  546. {
  547. &quot;title&quot;: &quot;狐狸野外巡检:发布重开、模型实际可见、截图封面&quot;,
  548. &quot;status&quot;: &quot;PASS&quot;,
  549. &quot;screenshots&quot;: [
  550. &quot;screenshots/fox-independent-reopen.png&quot;,
  551. &quot;screenshots/fox-final-cover.jpg&quot;
  552. ],
  553. &quot;details&quot;: {
  554. &quot;state&quot;: &quot;ready&quot;,
  555. &quot;meshes&quot;: 1,
  556. &quot;visibleMeshes&quot;: 1,
  557. &quot;skinnedMeshes&quot;: 1,
  558. &quot;position&quot;: [
  559. -7.5,
  560. 0.10930174852949677,
  561. 0.3440109341705351
  562. ],
  563. &quot;scale&quot;: [
  564. 0.03616375932570189,
  565. 0.03616375932570189,
  566. 0.03616375932570189
  567. ],
  568. &quot;finiteBounds&quot;: true,
  569. &quot;size&quot;: [
  570. 0.9658796100519353,
  571. 2.811899945787403,
  572. 6
  573. ],
  574. &quot;camera&quot;: {
  575. &quot;position&quot;: [
  576. -0.04179225073787585,
  577. 6.099634646023559,
  578. 17.355036987378313
  579. ],
  580. &quot;target&quot;: [
  581. -7.512232860974557,
  582. 1.4059499759307126,
  583. -2.2204460492503126e-16
  584. ]
  585. },
  586. &quot;sample&quot;: {
  587. &quot;width&quot;: 320,
  588. &quot;height&quot;: 180,
  589. &quot;changedPixels&quot;: 827
  590. },
  591. &quot;scene&quot;: {
  592. &quot;projectId&quot;: &quot;160&quot;,
  593. &quot;versionId&quot;: &quot;210&quot;
  594. },
  595. &quot;targets&quot;: [
  596. {
  597. &quot;id&quot;: &quot;scene:OBJ-1788605873329-2&quot;,
  598. &quot;name&quot;: &quot;维修装备主体 02&quot;,
  599. &quot;source&quot;: &quot;scene&quot;
  600. },
  601. {
  602. &quot;id&quot;: &quot;scene:OBJ-1788605916565-6&quot;,
  603. &quot;name&quot;: &quot;狐狸野外巡检目标&quot;,
  604. &quot;source&quot;: &quot;scene&quot;
  605. },
  606. {
  607. &quot;id&quot;: &quot;scene:OBJ-1788605916565-6/part/interaction-a3d35c26&quot;,
  608. &quot;name&quot;: &quot;fox&quot;,
  609. &quot;source&quot;: &quot;scene&quot;
  610. }
  611. ],
  612. &quot;steps&quot;: [
  613. {
  614. &quot;title&quot;: &quot;识别狐狸巡检目标&quot;,
  615. &quot;targetId&quot;: &quot;scene:OBJ-1788605916565-6&quot;,
  616. &quot;weight&quot;: 50
  617. },
  618. {
  619. &quot;title&quot;: &quot;检查狐狸外观并确认状态&quot;,
  620. &quot;targetId&quot;: &quot;scene:OBJ-1788605916565-6&quot;,
  621. &quot;weight&quot;: 50
  622. }
  623. ],
  624. &quot;cover&quot;: {
  625. &quot;assetId&quot;: &quot;2098&quot;,
  626. &quot;bytes&quot;: 52518,
  627. &quot;sha256&quot;: &quot;7b7c41e441e525e151ad4bd46fe3b01c249282368331f04cebe6a0eac0141267&quot;,
  628. &quot;width&quot;: 628,
  629. &quot;height&quot;: 640
  630. },
  631. &quot;pageErrors&quot;: [],
  632. &quot;blockedWrites&quot;: []
  633. }
  634. },
  635. {
  636. &quot;title&quot;: &quot;牛奶卡车进场检查:发布重开、模型实际可见、截图封面&quot;,
  637. &quot;status&quot;: &quot;PASS&quot;,
  638. &quot;screenshots&quot;: [
  639. &quot;screenshots/truck-independent-reopen.png&quot;,
  640. &quot;screenshots/truck-final-cover.jpg&quot;
  641. ],
  642. &quot;details&quot;: {
  643. &quot;state&quot;: &quot;ready&quot;,
  644. &quot;meshes&quot;: 5,
  645. &quot;visibleMeshes&quot;: 5,
  646. &quot;skinnedMeshes&quot;: 0,
  647. &quot;position&quot;: [
  648. 4.2,
  649. 0.20617168998977797,
  650. -0.4356763541543951
  651. ],
  652. &quot;scale&quot;: [
  653. 1.2323086149245381,
  654. 1.2323086149245381,
  655. 1.2323086149245381
  656. ],
  657. &quot;finiteBounds&quot;: true,
  658. &quot;size&quot;: [
  659. 3.4406057210321332,
  660. 3.390913184034896,
  661. 6.000000000000001
  662. ],
  663. &quot;camera&quot;: {
  664. &quot;position&quot;: [
  665. 10.565439077211714,
  666. 5.0456876852867705,
  667. 7.37050840519251
  668. ],
  669. &quot;target&quot;: [
  670. 4.2,
  671. 1.695456592017448,
  672. 0
  673. ]
  674. },
  675. &quot;sample&quot;: {
  676. &quot;width&quot;: 320,
  677. &quot;height&quot;: 180,
  678. &quot;changedPixels&quot;: 11669
  679. },
  680. &quot;scene&quot;: {
  681. &quot;projectId&quot;: &quot;159&quot;,
  682. &quot;versionId&quot;: &quot;209&quot;
  683. },
  684. &quot;targets&quot;: [
  685. {
  686. &quot;id&quot;: &quot;scene:OBJ-1788605199171-2&quot;,
  687. &quot;name&quot;: &quot;牛奶卡车检验主装备&quot;,
  688. &quot;source&quot;: &quot;scene&quot;
  689. },
  690. {
  691. &quot;id&quot;: &quot;scene:OBJ-1788605199171-2/part/interaction-1ba581e6&quot;,
  692. &quot;name&quot;: &quot;Yup2Zup&quot;,
  693. &quot;source&quot;: &quot;scene&quot;
  694. },
  695. {
  696. &quot;id&quot;: &quot;scene:OBJ-1788605199171-2/part/interaction-004dec41&quot;,
  697. &quot;name&quot;: &quot;Cesium_Milk_Truck&quot;,
  698. &quot;source&quot;: &quot;scene&quot;
  699. },
  700. {
  701. &quot;id&quot;: &quot;scene:OBJ-1788605199171-2/part/interaction-5f7e4bee&quot;,
  702. &quot;name&quot;: &quot;Cesium_Milk_Truck_1&quot;,
  703. &quot;source&quot;: &quot;scene&quot;
  704. },
  705. {
  706. &quot;id&quot;: &quot;scene:OBJ-1788605199171-2/part/interaction-607e4d81&quot;,
  707. &quot;name&quot;: &quot;Cesium_Milk_Truck_2&quot;,
  708. &quot;source&quot;: &quot;scene&quot;
  709. },
  710. {
  711. &quot;id&quot;: &quot;scene:OBJ-1788605199171-2/part/interaction-5d7e48c8&quot;,
  712. &quot;name&quot;: &quot;Cesium_Milk_Truck_3&quot;,
  713. &quot;source&quot;: &quot;scene&quot;
  714. },
  715. {
  716. &quot;id&quot;: &quot;scene:OBJ-1788605199171-2/part/interaction-5e7e4a5b&quot;,
  717. &quot;name&quot;: &quot;Node&quot;,
  718. &quot;source&quot;: &quot;scene&quot;
  719. },
  720. {
  721. &quot;id&quot;: &quot;scene:OBJ-1788605199171-2/part/interaction-ce2feac4&quot;,
  722. &quot;name&quot;: &quot;Wheels&quot;,
  723. &quot;source&quot;: &quot;scene&quot;
  724. },
  725. {
  726. &quot;id&quot;: &quot;scene:OBJ-1788605199171-2/part/interaction-637e523a&quot;,
  727. &quot;name&quot;: &quot;Node001&quot;,
  728. &quot;source&quot;: &quot;scene&quot;
  729. },
  730. {
  731. &quot;id&quot;: &quot;scene:OBJ-1788605199171-2/part/interaction-f417f82d&quot;,
  732. &quot;name&quot;: &quot;Wheels001&quot;,
  733. &quot;source&quot;: &quot;scene&quot;
  734. }
  735. ],
  736. &quot;steps&quot;: [
  737. {
  738. &quot;title&quot;: &quot;识别牛奶卡车检验目标&quot;,
  739. &quot;targetId&quot;: &quot;scene:OBJ-1788605199171-2&quot;,
  740. &quot;weight&quot;: 50
  741. },
  742. {
  743. &quot;title&quot;: &quot;检查卡车外观并确认状态&quot;,
  744. &quot;targetId&quot;: &quot;scene:OBJ-1788605199171-2&quot;,
  745. &quot;weight&quot;: 50
  746. }
  747. ],
  748. &quot;cover&quot;: {
  749. &quot;assetId&quot;: &quot;2100&quot;,
  750. &quot;bytes&quot;: 42163,
  751. &quot;sha256&quot;: &quot;efb7060464f840bde78744d89567c609dc7b7922216d1c948fe22c1eed3d41a4&quot;,
  752. &quot;width&quot;: 628,
  753. &quot;height&quot;: 640
  754. },
  755. &quot;pageErrors&quot;: [],
  756. &quot;blockedWrites&quot;: []
  757. }
  758. }
  759. ],
  760. &quot;projects&quot;: [
  761. {
  762. &quot;id&quot;: &quot;161&quot;,
  763. &quot;name&quot;: &quot;实测训练-狐狸野外巡检-已验证-20260905&quot;,
  764. &quot;status&quot;: &quot;PUBLISHED&quot;,
  765. &quot;currentVersionId&quot;: &quot;213&quot;,
  766. &quot;publishedVersionId&quot;: &quot;213&quot;,
  767. &quot;sceneProjectId&quot;: &quot;160&quot;,
  768. &quot;sceneVersionId&quot;: &quot;210&quot;,
  769. &quot;stepCount&quot;: 2,
  770. &quot;totalScore&quot;: 100,
  771. &quot;cover&quot;: {
  772. &quot;assetId&quot;: &quot;2098&quot;,
  773. &quot;image&quot;: &quot;screenshots/fox-final-cover.jpg&quot;
  774. }
  775. },
  776. {
  777. &quot;id&quot;: &quot;162&quot;,
  778. &quot;name&quot;: &quot;实测训练-牛奶卡车进场检查-已验证-20260905&quot;,
  779. &quot;status&quot;: &quot;PUBLISHED&quot;,
  780. &quot;currentVersionId&quot;: &quot;214&quot;,
  781. &quot;publishedVersionId&quot;: &quot;214&quot;,
  782. &quot;sceneProjectId&quot;: &quot;159&quot;,
  783. &quot;sceneVersionId&quot;: &quot;209&quot;,
  784. &quot;stepCount&quot;: 2,
  785. &quot;totalScore&quot;: 100,
  786. &quot;cover&quot;: {
  787. &quot;assetId&quot;: &quot;2100&quot;,
  788. &quot;image&quot;: &quot;screenshots/truck-final-cover.jpg&quot;
  789. }
  790. }
  791. ],
  792. &quot;finishedAt&quot;: &quot;2026-09-05T15:24:01.659Z&quot;
  793. }</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>{
  794. &quot;title&quot;: &quot;封面上传503:训练内容仍保存并保留原封面&quot;,
  795. &quot;status&quot;: &quot;PASS&quot;,
  796. &quot;details&quot;: {
  797. &quot;beforeVersion&quot;: 6,
  798. &quot;afterVersion&quot;: 7,
  799. &quot;sameCover&quot;: true,
  800. &quot;stepCount&quot;: 2
  801. },
  802. &quot;screenshot&quot;: &quot;screenshots/12-cover-failure-preserves-old.png&quot;
  803. }</pre></details></div><div class="check"><h4>保存409:不覆盖服务端内容和封面,并保持未保存提示 <span class="badge pass">通过</span></h4><details><summary>查看脱敏后的完整记录</summary><pre>{
  804. &quot;title&quot;: &quot;保存409:不覆盖服务端内容和封面,并保持未保存提示&quot;,
  805. &quot;status&quot;: &quot;PASS&quot;,
  806. &quot;details&quot;: {
  807. &quot;version&quot;: 7,
  808. &quot;putAttempts&quot;: 1,
  809. &quot;sameCover&quot;: true
  810. },
  811. &quot;screenshot&quot;: &quot;screenshots/13-save-conflict.png&quot;
  812. }</pre></details></div><div class="check"><h4>切换场景下载失败:保持原场景、绑定期间禁止保存发布、零项目写入 <span class="badge pass">通过</span></h4><details><summary>查看脱敏后的完整记录</summary><pre>{
  813. &quot;title&quot;: &quot;切换场景下载失败:保持原场景、绑定期间禁止保存发布、零项目写入&quot;,
  814. &quot;status&quot;: &quot;PASS&quot;,
  815. &quot;details&quot;: {
  816. &quot;retainedSceneProjectId&quot;: &quot;160&quot;,
  817. &quot;blockedDownloads&quot;: 1,
  818. &quot;putCount&quot;: 0
  819. },
  820. &quot;screenshots&quot;: [
  821. &quot;screenshots/14-binding-disables-save.png&quot;,
  822. &quot;screenshots/15-binding-failure-retains-scene.png&quot;
  823. ]
  824. }</pre></details></div><details><summary>error-evidence.json · 完整记录</summary><pre>{
  825. &quot;title&quot;: &quot;真实浏览器异常分支验证(定向注入HTTP失败)&quot;,
  826. &quot;status&quot;: &quot;PASS&quot;,
  827. &quot;checks&quot;: [
  828. {
  829. &quot;title&quot;: &quot;封面上传503:训练内容仍保存并保留原封面&quot;,
  830. &quot;status&quot;: &quot;PASS&quot;,
  831. &quot;details&quot;: {
  832. &quot;beforeVersion&quot;: 6,
  833. &quot;afterVersion&quot;: 7,
  834. &quot;sameCover&quot;: true,
  835. &quot;stepCount&quot;: 2
  836. },
  837. &quot;screenshot&quot;: &quot;screenshots/12-cover-failure-preserves-old.png&quot;
  838. },
  839. {
  840. &quot;title&quot;: &quot;保存409:不覆盖服务端内容和封面,并保持未保存提示&quot;,
  841. &quot;status&quot;: &quot;PASS&quot;,
  842. &quot;details&quot;: {
  843. &quot;version&quot;: 7,
  844. &quot;putAttempts&quot;: 1,
  845. &quot;sameCover&quot;: true
  846. },
  847. &quot;screenshot&quot;: &quot;screenshots/13-save-conflict.png&quot;
  848. },
  849. {
  850. &quot;title&quot;: &quot;切换场景下载失败:保持原场景、绑定期间禁止保存发布、零项目写入&quot;,
  851. &quot;status&quot;: &quot;PASS&quot;,
  852. &quot;details&quot;: {
  853. &quot;retainedSceneProjectId&quot;: &quot;160&quot;,
  854. &quot;blockedDownloads&quot;: 1,
  855. &quot;putCount&quot;: 0
  856. },
  857. &quot;screenshots&quot;: [
  858. &quot;screenshots/14-binding-disables-save.png&quot;,
  859. &quot;screenshots/15-binding-failure-retains-scene.png&quot;
  860. ]
  861. }
  862. ]
  863. }</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>
  864. <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>
  865. <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>
  866. <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>
  867. <footer>报告生成:2026/9/5 23:26:58(Asia/Shanghai) · 来源:final-evidence.json、readonly-evidence.json、error-evidence.json · 图片均经本地文件校验</footer>
  868. </main></body></html>