Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.
 
 
 
 

157 строки
32 KiB

  1. <!doctype html>
  2. <html lang="zh-CN"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1">
  3. <title>真实场景与截图封面验证报告 · 2026-09-05</title>
  4. <style>
  5. .correction{margin:24px 0;padding:22px 24px;border:2px solid #c56b13;border-left-width:7px;border-radius:12px;background:#fff7e8}.correction h2{margin-top:0;color:#823b08}.correction h3{margin-top:18px}.correction li{white-space:pre-wrap;overflow-wrap:anywhere}
  6. :root{color-scheme:light;--ink:#172d35;--muted:#536872;--line:#dbe5e7;--accent:#10664e}*{box-sizing:border-box}body{margin:0;background:#f2f6f6;color:var(--ink);font:15px/1.7 system-ui,"Microsoft YaHei",sans-serif}main{max-width:1180px;margin:auto;padding:38px 28px 60px}header{padding-bottom:20px;border-bottom:1px solid var(--line)}.eyebrow{font-size:12px;letter-spacing:.12em;font-weight:700;color:var(--accent)}h1{font-size:32px;line-height:1.4;margin:7px 0 12px}h2{font-size:23px;margin:30px 0 14px}h3{font-size:17px;margin:0 0 8px}p{margin:8px 0 12px}.muted,figcaption{color:var(--muted)}a{color:var(--accent);text-underline-offset:3px}.stats{display:flex;flex-wrap:wrap;gap:12px;margin:22px 0}.stat{background:white;border:1px solid var(--line);border-radius:10px;padding:12px 18px;min-width:150px}.stat strong{display:block;font-size:25px}.covers,.checks{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:18px}.card,.check,.panel{background:white;border:1px solid var(--line);border-radius:12px;padding:20px;min-width:0}.meta{display:grid;grid-template-columns:auto 1fr;gap:4px 12px;font-size:13px}.meta dt{color:var(--muted)}.meta dd{margin:0;overflow-wrap:anywhere}figure{margin:12px 0 0}figure img{display:block;width:100%;height:auto;background:#edf1f1;border:1px solid var(--line);border-radius:7px}.cover-image img{aspect-ratio:16/9;object-fit:contain}figcaption{font-size:12px;margin-top:5px}.images{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.images.single{grid-template-columns:1fr}.badge{display:inline-block;padding:1px 9px;border-radius:12px;font-size:12px;font-weight:700;white-space:nowrap}.pass{background:#e1f3eb;color:#0c6144}.fail{background:#fde8e8;color:#ab2323}.neutral{background:#edf0f4;color:#425566}.check-title{display:flex;align-items:flex-start;justify-content:space-between;gap:10px}details{margin-top:12px}summary{cursor:pointer;color:var(--accent);font-size:13px}pre{white-space:pre-wrap;overflow-wrap:anywhere;background:#f4f7f8;border-radius:7px;padding:12px;font:12px/1.6 ui-monospace,Consolas,monospace;max-height:360px;overflow:auto}ul{padding-left:21px}.assertions{font-size:13px}.assertions li{margin:6px 0;white-space:pre-wrap;overflow-wrap:anywhere}table{width:100%;border-collapse:collapse;font-size:13px}th,td{padding:9px 11px;border-bottom:1px solid var(--line);text-align:left;vertical-align:top}th{background:#f4f7f8}td{overflow-wrap:anywhere}.command{margin-bottom:16px}.command h3{font-family:ui-monospace,Consolas,monospace;font-size:13px;overflow-wrap:anywhere}footer{margin-top:28px;color:var(--muted);font-size:12px}@media(max-width:760px){main{padding:24px 16px 40px}h1{font-size:26px}.covers,.checks{grid-template-columns:1fr}.stat{flex:1;min-width:115px}.panel,.card,.check{padding:15px}.table-wrap{overflow:auto}}@media print{body{background:white}main{max-width:none;padding:0}.card,.check,figure{break-inside:avoid}.checks{display:block}.check{margin-bottom:14px}pre{max-height:none}a{color:inherit}}
  7. </style></head><body><main>
  8. <header><div class="eyebrow">SCENE LIVE · 功能已实施</div><h1>真实场景与截图封面验证报告</h1><p>场景保存截图封面及列表按创建时间倒序的功能已实施。本报告记录使用现有模型创建真实场景、保存当前三维视口封面及异常回退的实际验证结果。</p><p class="muted">2026-09-05 · http://127.0.0.1:6180 · Microsoft Edge · 教员</p><a href="report.md">Markdown 报告</a></header>
  9. <section class="correction" aria-label="测试结论更正"><h2>狐狸场景验证更正:撤回原完整通过结论</h2><p>用户指出狐狸没有出现在场景中,经复现确认属实。原报告的 7/7 仅证明引用、保存、封面上传和发布等链路,漏掉了模型真正可见的视觉检查,因此撤回原“完整 E2E 通过”结论。下列修复后证据增加了真实画面和像素差异验证。</p><h3>原结论与漏验</h3><ul><li>原狐狸检查把对象树存在 fox、模型依赖有效以及接口返回成功当作模型已加载可见;旧截图实际没有显示狐狸。两项旧狐狸证据标记为已更正历史记录并移出当前通过率,原文件继续保留用于追溯。</li></ul><h3>根因</h3><ul><li>计算蒙皮模型包围盒前没有同步骨骼矩阵,得到失真的尺寸。</li><li>适配场景尺寸时使用 setScalar 覆盖模型已有的归一化缩放;两者叠加将狐狸放大到约 1000 个场景单位,使模型超出视锥。</li></ul><h3>修复内容</h3><ul><li>同步蒙皮矩阵后计算真实包围盒,并保留已有归一化缩放进行相对缩放;新导入模型与已保存模型均使用修正后的尺寸处理。</li><li>修复场景 160 的狐狸比例和默认镜头,保存并发布为版本 208;重新生成服务器 JPEG 封面资产 2084。狐狸包围盒约为 0.966 × 2.812 × 6 个场景单位。</li><li>同样复核并修正场景 159,保存并发布为版本 209,重新生成服务器 JPEG 封面资产 2087。未修改模型发布版本或数据库表结构。</li></ul><h3>修复后验证</h3><ul><li>真实 UI 从资源库新增狐狸后立即可见,最长边为 6;该新增操作仅在隔离浏览器会话中测试,未保存、无写请求。</li><li>两个场景修改、保存、发布后,通过独立新浏览器会话重新打开,使用保存的默认镜头验证;没有未完成模型加载,也没有产生写请求。</li><li>关闭模型投影后,对同一画面中模型显示与隐藏的像素进行比较:320 × 180 采样中狐狸改变 4472 像素、牛奶卡车改变 7515 像素,均超过 500 像素阈值。截图中可直接辨认狐狸与卡车。</li><li>牛奶卡车默认镜头下部分车身被场景立柱遮挡,但模型确实可见;报告保留这一限制。</li><li>最终列表显示狐狸在卡车之前,虽然卡车更新于 19:32、狐狸更新于 19:31,确认排序依据仍为创建时间。</li></ul><div class="images single"><figure class=""><a href="screenshots/26-fox-visual-regression.png" target="_blank" rel="noopener"><img src="screenshots/26-fox-visual-regression.png" alt="修复后独立浏览器重新打开场景 160:狐狸模型清晰可见,并完成像素差异验证。" loading="lazy"></a><figcaption>修复后独立浏览器重新打开场景 160:狐狸模型清晰可见,并完成像素差异验证。 · 点击查看原图</figcaption></figure></div><p class="muted">下方标为“历史记录(已更正)”的检查及截图保留用于追溯,不计入当前通过率,也不作为狐狸已经可见的证据。</p></section>
  10. <div class="stats"><div class="stat"><strong>7 / 7</strong>当前证据项通过</div><div class="stat"><strong>0</strong>失败</div><div class="stat"><strong>0</strong>其他或未标注</div><div class="stat"><strong>2</strong>已更正历史记录</div><div class="stat"><strong>22</strong>图片文件已校验</div></div>
  11. <h2>保留场景与封面证据</h2><div class="covers"><article class="card"><h3>实测场景-牛奶卡车检验区-20260905</h3><figure class="cover-image"><a href="screenshots/24-truck-final-cover.jpg" target="_blank" rel="noopener"><img src="screenshots/24-truck-final-cover.jpg" alt="场景 159 保存后封面回读证据" loading="lazy"></a><figcaption>场景 159 保存后封面回读证据 · 点击查看原图</figcaption></figure><dl class="meta"><dt>场景 / 状态</dt><dd>159 / PUBLISHED</dd><dt>当前工程版本</dt><dd>209</dd><dt>引用模型 / 版本</dt><dd>156 / 204</dd><dt>封面大小</dt><dd>32937 字节 · 640 × 408</dd></dl><details><summary>封面持久化与项目证据</summary><pre>{
  12. &quot;id&quot;: &quot;159&quot;,
  13. &quot;name&quot;: &quot;实测场景-牛奶卡车检验区-20260905&quot;,
  14. &quot;modelId&quot;: &quot;156&quot;,
  15. &quot;modelVersionId&quot;: &quot;204&quot;,
  16. &quot;finalStatus&quot;: &quot;PUBLISHED&quot;,
  17. &quot;finalVersionId&quot;: &quot;209&quot;,
  18. &quot;cover&quot;: {
  19. &quot;image&quot;: &quot;screenshots/24-truck-final-cover.jpg&quot;,
  20. &quot;width&quot;: 640,
  21. &quot;height&quot;: 408,
  22. &quot;sizeBytes&quot;: 32937,
  23. &quot;assetId&quot;: &quot;2087&quot;,
  24. &quot;versionId&quot;: &quot;209&quot;,
  25. &quot;mimeType&quot;: &quot;image/jpeg&quot;,
  26. &quot;sha256&quot;: &quot;e103a473b74f3809365890296180c42f6c37a8005f2fd4c27fb64c437c245786&quot;,
  27. &quot;storageUri&quot;: &quot;fsvc://unreal-tran/image/2026/09/05/d29810b273d75e43dff07622424f333f.jpg&quot;
  28. }
  29. }</pre></details></article><article class="card"><h3>实测场景-狐狸野外训练区-20260905</h3><figure class="cover-image"><a href="screenshots/22-fox-final-cover.jpg" target="_blank" rel="noopener"><img src="screenshots/22-fox-final-cover.jpg" alt="场景 160 保存后封面回读证据" loading="lazy"></a><figcaption>场景 160 保存后封面回读证据 · 点击查看原图</figcaption></figure><dl class="meta"><dt>场景 / 状态</dt><dd>160 / PUBLISHED</dd><dt>当前工程版本</dt><dd>208</dd><dt>引用模型 / 版本</dt><dd>157 / 201</dd><dt>封面大小</dt><dd>45706 字节 · 640 × 408</dd></dl><details><summary>封面持久化与项目证据</summary><pre>{
  30. &quot;id&quot;: &quot;160&quot;,
  31. &quot;name&quot;: &quot;实测场景-狐狸野外训练区-20260905&quot;,
  32. &quot;modelId&quot;: &quot;157&quot;,
  33. &quot;modelVersionId&quot;: &quot;201&quot;,
  34. &quot;finalStatus&quot;: &quot;PUBLISHED&quot;,
  35. &quot;finalVersionId&quot;: &quot;208&quot;,
  36. &quot;cover&quot;: {
  37. &quot;image&quot;: &quot;screenshots/22-fox-final-cover.jpg&quot;,
  38. &quot;width&quot;: 640,
  39. &quot;height&quot;: 408,
  40. &quot;sizeBytes&quot;: 45706,
  41. &quot;assetId&quot;: &quot;2084&quot;,
  42. &quot;versionId&quot;: &quot;208&quot;,
  43. &quot;mimeType&quot;: &quot;image/jpeg&quot;,
  44. &quot;sha256&quot;: &quot;1b6e4d1eb6e65ccc15ba820a8ae4bd40ab1bee900cf91d4ec3db9af82153618d&quot;,
  45. &quot;storageUri&quot;: &quot;fsvc://unreal-tran/image/2026/09/05/c176d359087fc9bea4235e43dd43a691.jpg&quot;
  46. }
  47. }</pre></details></article></div>
  48. <h2>最终列表与创建时间倒序</h2><section class="panel"><figure class=""><a href="screenshots/28-scene-list-fixed.png" target="_blank" rel="noopener"><img src="screenshots/28-scene-list-fixed.png" alt="保留场景的实际封面与创建时间倒序列表" loading="lazy"></a><figcaption>保留场景的实际封面与创建时间倒序列表 · 点击查看原图</figcaption></figure></section>
  49. <h2>逐项验证记录</h2><p class="muted">通过数仅统计未被更正且 status 明确为 PASS 的当前证据项;历史记录单独标注。checks 用于展示实际断言,不重复累加。故障注入中的预期错误响应不等于用例失败;缺少状态时不推断通过。图片文件存在校验不等于视觉内容验证。</p><div class="checks"><article class="check"><div class="check-title"><h3>1. 创建牛奶卡车检验区场景</h3><span class="badge pass">PASS</span></div><ul class="assertions"><li>通过列表新建并进入真实场景编辑器</li><li>首次加载认证服务短暂503,点击重新加载后成功;原创建记录159复用</li></ul><div class="images single"><figure class=""><a href="screenshots/03-truck-created-ready.png" target="_blank" rel="noopener"><img src="screenshots/03-truck-created-ready.png" alt="浏览器现场" loading="lazy"></a><figcaption>浏览器现场 · 点击查看原图</figcaption></figure></div></article><article class="check"><div class="check-title"><h3>2. 牛奶卡车场景保存并回读封面</h3><span class="badge pass">PASS</span></div><ul class="assertions"><li>场景资源库双击引用模型 156 的已发布版本 204</li><li>编辑对象坐标与设备绑定后,未保存状态 2.5 秒内无上传或项目写入</li><li>保存草稿发出 SCENE_COVER JPEG 上传与同一次项目 PUT</li><li>认证访问 /cover 返回 JPEG,封面尺寸 640×408,列表可用的 coverUri 已写入</li></ul><div class="images "><figure class=""><a href="screenshots/05-truck-model-imported.png" target="_blank" rel="noopener"><img src="screenshots/05-truck-model-imported.png" alt="浏览器现场" loading="lazy"></a><figcaption>浏览器现场 · 点击查看原图</figcaption></figure><figure class=""><a href="screenshots/06-truck-transformed-unsaved.png" target="_blank" rel="noopener"><img src="screenshots/06-truck-transformed-unsaved.png" alt="浏览器现场" loading="lazy"></a><figcaption>浏览器现场 · 点击查看原图</figcaption></figure><figure class=""><a href="screenshots/07-truck-scene-cover.png" target="_blank" rel="noopener"><img src="screenshots/07-truck-scene-cover.png" alt="浏览器现场" loading="lazy"></a><figcaption>浏览器现场 · 点击查看原图</figcaption></figure><figure class=""><a href="screenshots/08-truck-saved-with-cover.png" target="_blank" rel="noopener"><img src="screenshots/08-truck-saved-with-cover.png" alt="浏览器现场" loading="lazy"></a><figcaption>浏览器现场 · 点击查看原图</figcaption></figure></div></article><article class="check"><div class="check-title"><h3>3. 牛奶卡车场景刷新恢复并发布</h3><span class="badge pass">PASS</span></div><ul class="assertions"><li>整页刷新后模型 156/版本 204、对象名称、X=4.2 和设备编号均恢复</li><li>发布前校验 8 项全部通过</li><li>发布动作先成功保存再成功发布,最终状态为 PUBLISHED</li></ul><details><summary>检查详情</summary><pre>{
  50. &quot;details&quot;: {
  51. &quot;total&quot;: 8,
  52. &quot;warnings&quot;: 0,
  53. &quot;text&quot;: &quot;✓\n场景环境已配置\n真实装备车库\n✓\n模型资源加载完成\n全部受控模型已就绪\n✓\n场景用途配置有效\n1 个实训装备\n✓\n对象设备编号完整\n用于接收物理设备和消息事件\n✓\n物模型绑定完整\n用于训练步骤和动作映射\n✓\n设备编号不重复\n设备编号唯一\n✓\n物模型编号不重复\n物模型编号唯一\n✓\n受控资源引用正常\n2 个导入模型可跨刷新恢复&quot;
  54. }
  55. }</pre></details><div class="images "><figure class=""><a href="screenshots/09-truck-reloaded-persisted.png" target="_blank" rel="noopener"><img src="screenshots/09-truck-reloaded-persisted.png" alt="浏览器现场" loading="lazy"></a><figcaption>浏览器现场 · 点击查看原图</figcaption></figure><figure class=""><a href="screenshots/10-truck-published.png" target="_blank" rel="noopener"><img src="screenshots/10-truck-published.png" alt="浏览器现场" loading="lazy"></a><figcaption>浏览器现场 · 点击查看原图</figcaption></figure></div></article><article class="check"><div class="check-title"><h3>4. 狐狸野外场景保存并锁定已发布模型版本</h3><span class="badge neutral">历史记录(已更正)</span></div><ul class="assertions"><li>切换到真实野外训练场模板并导入模型 157</li><li>模型 157 当前草稿版本为 202,但场景严格依赖其已发布版本 201</li><li>保存草稿上传 SCENE_COVER JPEG,并在同次项目 PUT 写入 content、依赖和 coverUri</li><li>认证回读 /cover 返回 JPEG,尺寸 640×408</li></ul><details><summary>检查详情</summary><pre>{
  56. &quot;superseded&quot;: true
  57. }</pre></details><div class="images "><figure class=""><a href="screenshots/12-fox-outdoor-template.png" target="_blank" rel="noopener"><img src="screenshots/12-fox-outdoor-template.png" alt="历史截图(不作为修复后的视觉通过证据):原测试现场" loading="lazy"></a><figcaption>历史截图(不作为修复后的视觉通过证据):原测试现场 · 点击查看原图</figcaption></figure><figure class=""><a href="screenshots/13-fox-model-imported.png" target="_blank" rel="noopener"><img src="screenshots/13-fox-model-imported.png" alt="历史截图(不作为修复后的视觉通过证据):原测试现场" loading="lazy"></a><figcaption>历史截图(不作为修复后的视觉通过证据):原测试现场 · 点击查看原图</figcaption></figure><figure class=""><a href="screenshots/14-fox-scene-cover.png" target="_blank" rel="noopener"><img src="screenshots/14-fox-scene-cover.png" alt="历史截图(不作为修复后的视觉通过证据):原测试现场" loading="lazy"></a><figcaption>历史截图(不作为修复后的视觉通过证据):原测试现场 · 点击查看原图</figcaption></figure><figure class=""><a href="screenshots/15-fox-saved-with-cover.png" target="_blank" rel="noopener"><img src="screenshots/15-fox-saved-with-cover.png" alt="历史截图(不作为修复后的视觉通过证据):原测试现场" loading="lazy"></a><figcaption>历史截图(不作为修复后的视觉通过证据):原测试现场 · 点击查看原图</figcaption></figure></div></article><article class="check"><div class="check-title"><h3>5. 场景封面上传失败保留原封面</h3><span class="badge pass">PASS</span></div><ul class="assertions"><li>对 SCENE_COVER 上传实施浏览器网络故障注入</li><li>保存请求仍成功,场景内容继续提交</li><li>coverUri 保持为保存前的旧值,未产生空封面或错误替换</li></ul><details><summary>检查详情</summary><pre>{
  58. &quot;details&quot;: {
  59. &quot;sceneId&quot;: &quot;160&quot;,
  60. &quot;oldCoverUri&quot;: &quot;fsvc://unreal-tran/image/2026/09/05/bb1e8717cd2e7ba6ca10f16b817b1ec5.jpg&quot;,
  61. &quot;putRequests&quot;: 1
  62. }
  63. }</pre></details><div class="images single"><figure class=""><a href="screenshots/16-fox-cover-upload-failed-content-saved.png" target="_blank" rel="noopener"><img src="screenshots/16-fox-cover-upload-failed-content-saved.png" alt="浏览器现场" loading="lazy"></a><figcaption>浏览器现场 · 点击查看原图</figcaption></figure></div></article><article class="check"><div class="check-title"><h3>6. 狐狸野外场景刷新恢复并发布</h3><span class="badge neutral">历史记录(已更正)</span></div><ul class="assertions"><li>整页刷新后狐狸模型依赖仍为项目 157 的已发布版本 201</li><li>封面上传失败后的场景正文编辑 X=-7.5 已恢复</li><li>8 项发布校验全部通过,发布时重新保存并成功发布</li><li>发布后的 coverUri 有效;保存前封面与发布后封面均由当前场景视图生成</li></ul><details><summary>检查详情</summary><pre>{
  64. &quot;superseded&quot;: true,
  65. &quot;details&quot;: {
  66. &quot;validation&quot;: {
  67. &quot;total&quot;: 8,
  68. &quot;warnings&quot;: 0,
  69. &quot;text&quot;: &quot;✓\n场景环境已配置\n真实野外训练场\n✓\n模型资源加载完成\n全部受控模型已就绪\n✓\n场景用途配置有效\n3 个实训装备\n✓\n对象设备编号完整\n用于接收物理设备和消息事件\n✓\n物模型绑定完整\n用于训练步骤和动作映射\n✓\n设备编号不重复\n设备编号唯一\n✓\n物模型编号不重复\n物模型编号唯一\n✓\n受控资源引用正常\n2 个导入模型可跨刷新恢复&quot;
  70. },
  71. &quot;coverBeforePublish&quot;: &quot;fsvc://unreal-tran/image/2026/09/05/bb1e8717cd2e7ba6ca10f16b817b1ec5.jpg&quot;,
  72. &quot;coverAfterPublish&quot;: &quot;fsvc://unreal-tran/image/2026/09/05/62e5d4a05316badb631e252f44ecbec3.jpg&quot;
  73. }
  74. }</pre></details><div class="images "><figure class=""><a href="screenshots/17-fox-reloaded-persisted.png" target="_blank" rel="noopener"><img src="screenshots/17-fox-reloaded-persisted.png" alt="历史截图(不作为修复后的视觉通过证据):原测试现场" loading="lazy"></a><figcaption>历史截图(不作为修复后的视觉通过证据):原测试现场 · 点击查看原图</figcaption></figure><figure class=""><a href="screenshots/18-fox-published.png" target="_blank" rel="noopener"><img src="screenshots/18-fox-published.png" alt="历史截图(不作为修复后的视觉通过证据):原测试现场" loading="lazy"></a><figcaption>历史截图(不作为修复后的视觉通过证据):原测试现场 · 点击查看原图</figcaption></figure></div></article><article class="check"><div class="check-title"><h3>7. 场景列表创建时间倒序与封面展示</h3><span class="badge pass">PASS</span></div><ul class="assertions"><li>列表请求默认携带 sort=CREATED_DESC</li><li>较晚创建的狐狸野外场景显示在较早创建的牛奶卡车场景之前</li><li>卡车于 19:32 更新,晚于狐狸的 19:31,但狐狸仍排在卡车之前,证实没有按更新时间倒序</li><li>两条场景均通过受控 /cover 接口展示修复后服务器 JPEG 封面;列表中可辨认狐狸和卡车</li></ul><details><summary>检查详情</summary><pre>{
  75. &quot;details&quot;: {
  76. &quot;foxIndex&quot;: 0,
  77. &quot;truckIndex&quot;: 1,
  78. &quot;rows&quot;: [
  79. {
  80. &quot;name&quot;: &quot;狐狸野外场景&quot;,
  81. &quot;projectId&quot;: &quot;160&quot;,
  82. &quot;addTime&quot;: 1788605625,
  83. &quot;updateTime&quot;: &quot;2026-09-05T19:31:30&quot;,
  84. &quot;imageIsBlob&quot;: true
  85. },
  86. {
  87. &quot;name&quot;: &quot;牛奶卡车场景&quot;,
  88. &quot;projectId&quot;: &quot;159&quot;,
  89. &quot;addTime&quot;: 1788603808,
  90. &quot;updateTime&quot;: &quot;2026-09-05T19:32:28&quot;,
  91. &quot;imageIsBlob&quot;: true
  92. }
  93. ]
  94. }
  95. }</pre></details><div class="images single"><figure class=""><a href="screenshots/28-scene-list-fixed.png" target="_blank" rel="noopener"><img src="screenshots/28-scene-list-fixed.png" alt="浏览器现场" loading="lazy"></a><figcaption>浏览器现场 · 点击查看原图</figcaption></figure></div></article><article class="check"><div class="check-title"><h3>8. 修复后狐狸新增导入、保存发布与刷新可见性</h3><span class="badge pass">PASS</span></div><ul class="assertions"><li>从真实 UI 资源库新增模型 157 / 已发布版本 201,默认缩放约 0.0361637593,包围盒约 0.966 × 2.812 × 6,狐狸在视口中可见;该临时新增未保存、无写请求</li><li>场景 160 原狐狸修复尺寸和镜头后,保存并发布为版本 208;服务器封面资产 2084 为真实 JPEG,640 × 408,45706 字节</li><li>独立 Edge / Playwright 新会话按保存的镜头重新打开场景,狐狸网格已加载且可见,pendingLoads=0</li><li>显示/隐藏狐狸前后进行像素对比,禁用模型投影排除仅阴影可见:320 × 180 采样改变 4472 像素(7.764%),超过 500 像素阈值</li><li>实际检查发布截图、独立刷新截图及服务器 JPEG,均可辨认狐狸;模型 157 草稿 202 仍为 DRAFT,已发布版本仍为 201</li></ul><details><summary>检查详情</summary><pre>{
  96. &quot;details&quot;: {
  97. &quot;sceneId&quot;: &quot;160&quot;,
  98. &quot;currentVersionId&quot;: &quot;208&quot;,
  99. &quot;publishedVersionId&quot;: &quot;208&quot;,
  100. &quot;modelProjectId&quot;: &quot;157&quot;,
  101. &quot;modelVersionId&quot;: &quot;201&quot;,
  102. &quot;newImportWriteRequests&quot;: [],
  103. &quot;visibilityEvidence&quot;: &quot;visibility-evidence.json&quot;,
  104. &quot;changedPixels&quot;: 4472,
  105. &quot;changedPercentage&quot;: 7.764,
  106. &quot;pendingLoads&quot;: 0,
  107. &quot;boundsSize&quot;: [
  108. 0.9658796100519353,
  109. 2.811899945787403,
  110. 6
  111. ]
  112. }
  113. }</pre></details><div class="images "><figure class=""><a href="screenshots/25-fox-fresh-import-visible.png" target="_blank" rel="noopener"><img src="screenshots/25-fox-fresh-import-visible.png" alt="真实 UI 新增狐狸后尺寸正常且可见;临时测试未保存。" loading="lazy"></a><figcaption>真实 UI 新增狐狸后尺寸正常且可见;临时测试未保存。 · 点击查看原图</figcaption></figure><figure class=""><a href="screenshots/21-fox-corrected-published.png" target="_blank" rel="noopener"><img src="screenshots/21-fox-corrected-published.png" alt="场景 160 修复后保存发布为版本 208。" loading="lazy"></a><figcaption>场景 160 修复后保存发布为版本 208。 · 点击查看原图</figcaption></figure><figure class=""><a href="screenshots/22-fox-final-cover.jpg" target="_blank" rel="noopener"><img src="screenshots/22-fox-final-cover.jpg" alt="从服务器回读的最终狐狸 JPEG 封面,资产 2084。" loading="lazy"></a><figcaption>从服务器回读的最终狐狸 JPEG 封面,资产 2084。 · 点击查看原图</figcaption></figure><figure class=""><a href="screenshots/26-fox-visual-regression.png" target="_blank" rel="noopener"><img src="screenshots/26-fox-visual-regression.png" alt="独立浏览器重新打开后狐狸可见;像素差异 4472。" loading="lazy"></a><figcaption>独立浏览器重新打开后狐狸可见;像素差异 4472。 · 点击查看原图</figcaption></figure></div></article><article class="check"><div class="check-title"><h3>9. 修复后牛奶卡车保存发布与刷新可见性</h3><span class="badge pass">PASS</span></div><ul class="assertions"><li>场景 159 保持模型 156 / 已发布版本 204,修复比例和镜头后保存并发布为版本 209</li><li>独立 Edge / Playwright 新会话重新打开场景,按保存镜头确认卡车 5 个网格均可见、pendingLoads=0</li><li>显示/隐藏卡车前后对比,禁用模型投影:320 × 180 采样改变 7515 像素(13.047%),超过 500 像素阈值</li><li>服务器回读最终封面资产 2087 为真实 JPEG,640 × 408,32937 字节;封面及刷新截图可辨认卡车</li><li>默认镜头部分车身被立柱遮挡,属于本次可见画面的已知限制</li></ul><details><summary>检查详情</summary><pre>{
  114. &quot;details&quot;: {
  115. &quot;sceneId&quot;: &quot;159&quot;,
  116. &quot;currentVersionId&quot;: &quot;209&quot;,
  117. &quot;publishedVersionId&quot;: &quot;209&quot;,
  118. &quot;modelProjectId&quot;: &quot;156&quot;,
  119. &quot;modelVersionId&quot;: &quot;204&quot;,
  120. &quot;visibilityEvidence&quot;: &quot;visibility-evidence.json&quot;,
  121. &quot;changedPixels&quot;: 7515,
  122. &quot;changedPercentage&quot;: 13.047,
  123. &quot;pendingLoads&quot;: 0,
  124. &quot;boundsSize&quot;: [
  125. 3.4406057210321332,
  126. 3.390913184034896,
  127. 6.000000000000001
  128. ]
  129. }
  130. }</pre></details><div class="images "><figure class=""><a href="screenshots/23-truck-corrected-published.png" target="_blank" rel="noopener"><img src="screenshots/23-truck-corrected-published.png" alt="场景 159 修复后保存发布为版本 209。" loading="lazy"></a><figcaption>场景 159 修复后保存发布为版本 209。 · 点击查看原图</figcaption></figure><figure class=""><a href="screenshots/24-truck-final-cover.jpg" target="_blank" rel="noopener"><img src="screenshots/24-truck-final-cover.jpg" alt="从服务器回读的最终卡车 JPEG 封面,资产 2087;部分车身被立柱遮挡。" loading="lazy"></a><figcaption>从服务器回读的最终卡车 JPEG 封面,资产 2087;部分车身被立柱遮挡。 · 点击查看原图</figcaption></figure><figure class=""><a href="screenshots/27-truck-visual-regression.png" target="_blank" rel="noopener"><img src="screenshots/27-truck-visual-regression.png" alt="独立浏览器重新打开后卡车可见;像素差异 7515。" loading="lazy"></a><figcaption>独立浏览器重新打开后卡车可见;像素差异 7515。 · 点击查看原图</figcaption></figure></div></article></div>
  131. <h2>数据保留与清理</h2><section class="panel"><pre>保留开发环境场景 159(牛奶卡车检验区,PUBLISHED,当前及已发布版本 209,模型 156 / 已发布版本 204)和场景 160(狐狸野外训练区,PUBLISHED,当前及已发布版本 208,模型 157 / 已发布版本 201)。模型原发布版本未修改;模型 157 的当前草稿版本 202 继续保留,未发布或修改。本次无需 DDL 变更。</pre><div class="table-wrap"><table><thead><tr><th>场景</th><th>模型 / 发布版本</th><th>最终状态</th><th>当前版本</th></tr></thead><tbody><tr><td>159 · 实测场景-牛奶卡车检验区-20260905</td><td>156 / 204</td><td>PUBLISHED</td><td>209</td></tr><tr><td>160 · 实测场景-狐狸野外训练区-20260905</td><td>157 / 201</td><td>PUBLISHED</td><td>208</td></tr></tbody></table></div><pre>保留两条真实场景及历史截图用于后续测试和追溯。新增导入狐狸仅在隔离浏览器会话中测试,未保存、无写请求;测试结束后丢弃临时对象。</pre></section>
  132. <h2>本次问题记录</h2><section class="panel"><pre>{
  133. &quot;title&quot;: &quot;狐狸存在于对象树但不在真实视口中显示&quot;,
  134. &quot;status&quot;: &quot;FIXED_AND_VISUALLY_VERIFIED&quot;,
  135. &quot;details&quot;: &quot;原完整 E2E 通过结论已撤回。同步蒙皮矩阵并保留归一化缩放,修复场景数据和镜头后,新增导入、保存发布、独立刷新与像素可见性均通过;详见更正区。&quot;
  136. }</pre></section>
  137. <h2>后续独立事项</h2><section class="panel"><p>既存受控文件资产的 fsvc URI 分支未完整覆盖上传票据绑定校验,属于本次场景封面变更前已存在的问题。本次保留现有流程,后续应独立补齐校验并验证历史资产、版本复制与引用兼容性;不计入本次场景功能失败数。</p><pre>{
  138. &quot;scope&quot;: &quot;independent&quot;,
  139. &quot;title&quot;: &quot;fsvc 新资产上传票据绑定校验&quot;,
  140. &quot;details&quot;: &quot;既存流程的 fsvc URI 分支未完整覆盖上传票据绑定校验;本次未扩大修改范围,应单独补齐并验证历史资产、版本复制与引用兼容性。&quot;
  141. }</pre></section>
  142. <h2>实际命令与结果</h2><section class="panel"><div class="command"><h3>pnpm run build</h3><pre>{
  143. &quot;status&quot;: &quot;PASS&quot;,
  144. &quot;details&quot;: &quot;前端生产构建及遗留模型编辑器产物校验通过。&quot;
  145. }</pre></div><div class="command"><h3>node --test tools/scene-cover-api.test.mjs tools/scene-cover-capture.test.mjs tools/scene-model-placement.test.mjs</h3><pre>{
  146. &quot;status&quot;: &quot;PASS&quot;,
  147. &quot;details&quot;: &quot;33 / 33 通过:封面同次 PUT、异常回退、并发队列、项目切换、截图尺寸、渲染状态恢复,以及蒙皮模型包围盒与归一化缩放回归。&quot;
  148. }</pre></div><div class="command"><h3>原 Microsoft Edge 场景链路 E2E(更正说明)</h3><pre>{
  149. &quot;status&quot;: &quot;SUPERSEDED&quot;,
  150. &quot;details&quot;: &quot;原 7/7 只覆盖模型引用、保存、封面上传和发布等链路,未证明狐狸真实可见;完整通过结论已撤回,当前视觉验证见下列独立浏览器 E2E。&quot;
  151. }</pre></div><div class="command"><h3>node tools/scene-model-visibility.e2e.mjs</h3><pre>{
  152. &quot;status&quot;: &quot;PASS&quot;,
  153. &quot;details&quot;: &quot;独立 Edge / Playwright 会话重开 160/208 与 159/209,使用保存镜头,显示/隐藏模型并禁用投影进行像素比较;狐狸 4472 像素、卡车 7515 像素,均超过 500 阈值。证据保存在 visibility-evidence.json,截图 26 / 27;无写请求。&quot;
  154. }</pre></div></section>
  155. <h2>当前行为与限制</h2><section class="panel"><ul><li>手动保存从当前三维视口生成封面;新封面与场景内容、模型引用在同一次工程更新中关联保存。发布前的保存沿用该流程。</li><li>截图或封面上传失败时保留旧封面;工程是否保存成功以实际更新请求为准。版本冲突不覆盖其他已保存的内容。</li><li>自动恢复及重新打开工程不生成或上传新封面;恢复后的修改需由用户保存后更新封面。</li><li>列表按创建时间倒序展示。再次保存不会改变创建时间,也不应因此改变创建时间排序。</li><li>牛奶卡车场景保存的默认镜头中,车身部分被场景立柱遮挡;真实网格可见且像素差异验证通过。需要观察完整车身时可旋转镜头。</li></ul></section>
  156. <footer>报告来自 evidence.json,生成过程不修改原始证据。所有引用图片已校验存在且非空,点击可查看原图。通过数随证据更新,不固定用例数量。</footer>
  157. </main></body></html>