選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。
 
 
 
 

294 行
16 KiB

  1. {
  2. "date": "2026-09-05",
  3. "baseURL": "http://127.0.0.1:6180",
  4. "browser": "Microsoft Edge",
  5. "role": "教员",
  6. "correction": {
  7. "title": "狐狸场景验证更正:撤回原完整通过结论",
  8. "summary": "用户指出狐狸没有出现在场景中,经复现确认属实。原报告的 7/7 仅证明引用、保存、封面上传和发布等链路,漏掉了模型真正可见的视觉检查,因此撤回原“完整 E2E 通过”结论。下列修复后证据增加了真实画面和像素差异验证。",
  9. "previousConclusion": "原狐狸检查把对象树存在 fox、模型依赖有效以及接口返回成功当作模型已加载可见;旧截图实际没有显示狐狸。两项旧狐狸证据标记为已更正历史记录并移出当前通过率,原文件继续保留用于追溯。",
  10. "rootCauses": [
  11. "计算蒙皮模型包围盒前没有同步骨骼矩阵,得到失真的尺寸。",
  12. "适配场景尺寸时使用 setScalar 覆盖模型已有的归一化缩放;两者叠加将狐狸放大到约 1000 个场景单位,使模型超出视锥。"
  13. ],
  14. "fixes": [
  15. "同步蒙皮矩阵后计算真实包围盒,并保留已有归一化缩放进行相对缩放;新导入模型与已保存模型均使用修正后的尺寸处理。",
  16. "修复场景 160 的狐狸比例和默认镜头,保存并发布为版本 208;重新生成服务器 JPEG 封面资产 2084。狐狸包围盒约为 0.966 × 2.812 × 6 个场景单位。",
  17. "同样复核并修正场景 159,保存并发布为版本 209,重新生成服务器 JPEG 封面资产 2087。未修改模型发布版本或数据库表结构。"
  18. ],
  19. "verification": [
  20. "真实 UI 从资源库新增狐狸后立即可见,最长边为 6;该新增操作仅在隔离浏览器会话中测试,未保存、无写请求。",
  21. "两个场景修改、保存、发布后,通过独立新浏览器会话重新打开,使用保存的默认镜头验证;没有未完成模型加载,也没有产生写请求。",
  22. "关闭模型投影后,对同一画面中模型显示与隐藏的像素进行比较:320 × 180 采样中狐狸改变 4472 像素、牛奶卡车改变 7515 像素,均超过 500 像素阈值。截图中可直接辨认狐狸与卡车。",
  23. "牛奶卡车默认镜头下部分车身被场景立柱遮挡,但模型确实可见;报告保留这一限制。",
  24. "最终列表显示狐狸在卡车之前,虽然卡车更新于 19:32、狐狸更新于 19:31,确认排序依据仍为创建时间。"
  25. ],
  26. "screenshots": [
  27. {
  28. "path": "screenshots/26-fox-visual-regression.png",
  29. "caption": "修复后独立浏览器重新打开场景 160:狐狸模型清晰可见,并完成像素差异验证。"
  30. }
  31. ]
  32. },
  33. "evidence": [
  34. {
  35. "title": "创建牛奶卡车检验区场景",
  36. "status": "PASS",
  37. "checks": [
  38. "通过列表新建并进入真实场景编辑器",
  39. "首次加载认证服务短暂503,点击重新加载后成功;原创建记录159复用"
  40. ],
  41. "screenshot": "screenshots/03-truck-created-ready.png"
  42. },
  43. {
  44. "title": "牛奶卡车场景保存并回读封面",
  45. "status": "PASS",
  46. "checks": [
  47. "场景资源库双击引用模型 156 的已发布版本 204",
  48. "编辑对象坐标与设备绑定后,未保存状态 2.5 秒内无上传或项目写入",
  49. "保存草稿发出 SCENE_COVER JPEG 上传与同一次项目 PUT",
  50. "认证访问 /cover 返回 JPEG,封面尺寸 640×408,列表可用的 coverUri 已写入"
  51. ],
  52. "screenshots": [
  53. "screenshots/05-truck-model-imported.png",
  54. "screenshots/06-truck-transformed-unsaved.png",
  55. "screenshots/07-truck-scene-cover.png",
  56. "screenshots/08-truck-saved-with-cover.png"
  57. ]
  58. },
  59. {
  60. "title": "牛奶卡车场景刷新恢复并发布",
  61. "status": "PASS",
  62. "checks": [
  63. "整页刷新后模型 156/版本 204、对象名称、X=4.2 和设备编号均恢复",
  64. "发布前校验 8 项全部通过",
  65. "发布动作先成功保存再成功发布,最终状态为 PUBLISHED"
  66. ],
  67. "screenshots": [
  68. "screenshots/09-truck-reloaded-persisted.png",
  69. "screenshots/10-truck-published.png"
  70. ],
  71. "details": {
  72. "total": 8,
  73. "warnings": 0,
  74. "text": "✓\n场景环境已配置\n真实装备车库\n✓\n模型资源加载完成\n全部受控模型已就绪\n✓\n场景用途配置有效\n1 个实训装备\n✓\n对象设备编号完整\n用于接收物理设备和消息事件\n✓\n物模型绑定完整\n用于训练步骤和动作映射\n✓\n设备编号不重复\n设备编号唯一\n✓\n物模型编号不重复\n物模型编号唯一\n✓\n受控资源引用正常\n2 个导入模型可跨刷新恢复"
  75. }
  76. },
  77. {
  78. "title": "狐狸野外场景保存并锁定已发布模型版本",
  79. "status": "PASS",
  80. "superseded": true,
  81. "checks": [
  82. "切换到真实野外训练场模板并导入模型 157",
  83. "模型 157 当前草稿版本为 202,但场景严格依赖其已发布版本 201",
  84. "保存草稿上传 SCENE_COVER JPEG,并在同次项目 PUT 写入 content、依赖和 coverUri",
  85. "认证回读 /cover 返回 JPEG,尺寸 640×408"
  86. ],
  87. "screenshots": [
  88. "screenshots/12-fox-outdoor-template.png",
  89. "screenshots/13-fox-model-imported.png",
  90. "screenshots/14-fox-scene-cover.png",
  91. "screenshots/15-fox-saved-with-cover.png"
  92. ]
  93. },
  94. {
  95. "title": "场景封面上传失败保留原封面",
  96. "status": "PASS",
  97. "checks": [
  98. "对 SCENE_COVER 上传实施浏览器网络故障注入",
  99. "保存请求仍成功,场景内容继续提交",
  100. "coverUri 保持为保存前的旧值,未产生空封面或错误替换"
  101. ],
  102. "screenshot": "screenshots/16-fox-cover-upload-failed-content-saved.png",
  103. "details": {
  104. "sceneId": "160",
  105. "oldCoverUri": "fsvc://unreal-tran/image/2026/09/05/bb1e8717cd2e7ba6ca10f16b817b1ec5.jpg",
  106. "putRequests": 1
  107. }
  108. },
  109. {
  110. "title": "狐狸野外场景刷新恢复并发布",
  111. "status": "PASS",
  112. "superseded": true,
  113. "checks": [
  114. "整页刷新后狐狸模型依赖仍为项目 157 的已发布版本 201",
  115. "封面上传失败后的场景正文编辑 X=-7.5 已恢复",
  116. "8 项发布校验全部通过,发布时重新保存并成功发布",
  117. "发布后的 coverUri 有效;保存前封面与发布后封面均由当前场景视图生成"
  118. ],
  119. "screenshots": [
  120. "screenshots/17-fox-reloaded-persisted.png",
  121. "screenshots/18-fox-published.png"
  122. ],
  123. "details": {
  124. "validation": {
  125. "total": 8,
  126. "warnings": 0,
  127. "text": "✓\n场景环境已配置\n真实野外训练场\n✓\n模型资源加载完成\n全部受控模型已就绪\n✓\n场景用途配置有效\n3 个实训装备\n✓\n对象设备编号完整\n用于接收物理设备和消息事件\n✓\n物模型绑定完整\n用于训练步骤和动作映射\n✓\n设备编号不重复\n设备编号唯一\n✓\n物模型编号不重复\n物模型编号唯一\n✓\n受控资源引用正常\n2 个导入模型可跨刷新恢复"
  128. },
  129. "coverBeforePublish": "fsvc://unreal-tran/image/2026/09/05/bb1e8717cd2e7ba6ca10f16b817b1ec5.jpg",
  130. "coverAfterPublish": "fsvc://unreal-tran/image/2026/09/05/62e5d4a05316badb631e252f44ecbec3.jpg"
  131. }
  132. },
  133. {
  134. "title": "场景列表创建时间倒序与封面展示",
  135. "status": "PASS",
  136. "checks": [
  137. "列表请求默认携带 sort=CREATED_DESC",
  138. "较晚创建的狐狸野外场景显示在较早创建的牛奶卡车场景之前",
  139. "卡车于 19:32 更新,晚于狐狸的 19:31,但狐狸仍排在卡车之前,证实没有按更新时间倒序",
  140. "两条场景均通过受控 /cover 接口展示修复后服务器 JPEG 封面;列表中可辨认狐狸和卡车"
  141. ],
  142. "screenshot": "screenshots/28-scene-list-fixed.png",
  143. "details": {
  144. "foxIndex": 0,
  145. "truckIndex": 1,
  146. "rows": [
  147. { "name": "狐狸野外场景", "projectId": "160", "addTime": 1788605625, "updateTime": "2026-09-05T19:31:30", "imageIsBlob": true },
  148. { "name": "牛奶卡车场景", "projectId": "159", "addTime": 1788603808, "updateTime": "2026-09-05T19:32:28", "imageIsBlob": true }
  149. ]
  150. }
  151. },
  152. {
  153. "title": "修复后狐狸新增导入、保存发布与刷新可见性",
  154. "status": "PASS",
  155. "checks": [
  156. "从真实 UI 资源库新增模型 157 / 已发布版本 201,默认缩放约 0.0361637593,包围盒约 0.966 × 2.812 × 6,狐狸在视口中可见;该临时新增未保存、无写请求",
  157. "场景 160 原狐狸修复尺寸和镜头后,保存并发布为版本 208;服务器封面资产 2084 为真实 JPEG,640 × 408,45706 字节",
  158. "独立 Edge / Playwright 新会话按保存的镜头重新打开场景,狐狸网格已加载且可见,pendingLoads=0",
  159. "显示/隐藏狐狸前后进行像素对比,禁用模型投影排除仅阴影可见:320 × 180 采样改变 4472 像素(7.764%),超过 500 像素阈值",
  160. "实际检查发布截图、独立刷新截图及服务器 JPEG,均可辨认狐狸;模型 157 草稿 202 仍为 DRAFT,已发布版本仍为 201"
  161. ],
  162. "screenshots": [
  163. { "path": "screenshots/25-fox-fresh-import-visible.png", "caption": "真实 UI 新增狐狸后尺寸正常且可见;临时测试未保存。" },
  164. { "path": "screenshots/21-fox-corrected-published.png", "caption": "场景 160 修复后保存发布为版本 208。" },
  165. { "path": "screenshots/22-fox-final-cover.jpg", "caption": "从服务器回读的最终狐狸 JPEG 封面,资产 2084。" },
  166. { "path": "screenshots/26-fox-visual-regression.png", "caption": "独立浏览器重新打开后狐狸可见;像素差异 4472。" }
  167. ],
  168. "details": {
  169. "sceneId": "160",
  170. "currentVersionId": "208",
  171. "publishedVersionId": "208",
  172. "modelProjectId": "157",
  173. "modelVersionId": "201",
  174. "newImportWriteRequests": [],
  175. "visibilityEvidence": "visibility-evidence.json",
  176. "changedPixels": 4472,
  177. "changedPercentage": 7.764,
  178. "pendingLoads": 0,
  179. "boundsSize": [0.9658796100519353, 2.811899945787403, 6]
  180. }
  181. },
  182. {
  183. "title": "修复后牛奶卡车保存发布与刷新可见性",
  184. "status": "PASS",
  185. "checks": [
  186. "场景 159 保持模型 156 / 已发布版本 204,修复比例和镜头后保存并发布为版本 209",
  187. "独立 Edge / Playwright 新会话重新打开场景,按保存镜头确认卡车 5 个网格均可见、pendingLoads=0",
  188. "显示/隐藏卡车前后对比,禁用模型投影:320 × 180 采样改变 7515 像素(13.047%),超过 500 像素阈值",
  189. "服务器回读最终封面资产 2087 为真实 JPEG,640 × 408,32937 字节;封面及刷新截图可辨认卡车",
  190. "默认镜头部分车身被立柱遮挡,属于本次可见画面的已知限制"
  191. ],
  192. "screenshots": [
  193. { "path": "screenshots/23-truck-corrected-published.png", "caption": "场景 159 修复后保存发布为版本 209。" },
  194. { "path": "screenshots/24-truck-final-cover.jpg", "caption": "从服务器回读的最终卡车 JPEG 封面,资产 2087;部分车身被立柱遮挡。" },
  195. { "path": "screenshots/27-truck-visual-regression.png", "caption": "独立浏览器重新打开后卡车可见;像素差异 7515。" }
  196. ],
  197. "details": {
  198. "sceneId": "159",
  199. "currentVersionId": "209",
  200. "publishedVersionId": "209",
  201. "modelProjectId": "156",
  202. "modelVersionId": "204",
  203. "visibilityEvidence": "visibility-evidence.json",
  204. "changedPixels": 7515,
  205. "changedPercentage": 13.047,
  206. "pendingLoads": 0,
  207. "boundsSize": [3.4406057210321332, 3.390913184034896, 6.000000000000001]
  208. }
  209. }
  210. ],
  211. "projects": [
  212. {
  213. "id": "159",
  214. "name": "实测场景-牛奶卡车检验区-20260905",
  215. "modelId": "156",
  216. "modelVersionId": "204",
  217. "finalStatus": "PUBLISHED",
  218. "finalVersionId": "209",
  219. "cover": {
  220. "image": "screenshots/24-truck-final-cover.jpg",
  221. "width": 640,
  222. "height": 408,
  223. "sizeBytes": 32937,
  224. "assetId": "2087",
  225. "versionId": "209",
  226. "mimeType": "image/jpeg",
  227. "sha256": "e103a473b74f3809365890296180c42f6c37a8005f2fd4c27fb64c437c245786",
  228. "storageUri": "fsvc://unreal-tran/image/2026/09/05/d29810b273d75e43dff07622424f333f.jpg"
  229. }
  230. },
  231. {
  232. "id": "160",
  233. "name": "实测场景-狐狸野外训练区-20260905",
  234. "modelId": "157",
  235. "modelVersionId": "201",
  236. "finalStatus": "PUBLISHED",
  237. "finalVersionId": "208",
  238. "cover": {
  239. "image": "screenshots/22-fox-final-cover.jpg",
  240. "width": 640,
  241. "height": 408,
  242. "sizeBytes": 45706,
  243. "assetId": "2084",
  244. "versionId": "208",
  245. "mimeType": "image/jpeg",
  246. "sha256": "1b6e4d1eb6e65ccc15ba820a8ae4bd40ab1bee900cf91d4ec3db9af82153618d",
  247. "storageUri": "fsvc://unreal-tran/image/2026/09/05/c176d359087fc9bea4235e43dd43a691.jpg"
  248. }
  249. }
  250. ],
  251. "finalListScreenshot": "screenshots/28-scene-list-fixed.png",
  252. "issues": [
  253. {
  254. "title": "狐狸存在于对象树但不在真实视口中显示",
  255. "status": "FIXED_AND_VISUALLY_VERIFIED",
  256. "details": "原完整 E2E 通过结论已撤回。同步蒙皮矩阵并保留归一化缩放,修复场景数据和镜头后,新增导入、保存发布、独立刷新与像素可见性均通过;详见更正区。"
  257. }
  258. ],
  259. "limitations": [
  260. "牛奶卡车场景保存的默认镜头中,车身部分被场景立柱遮挡;真实网格可见且像素差异验证通过。需要观察完整车身时可旋转镜头。"
  261. ],
  262. "followUpIssues": [
  263. {
  264. "scope": "independent",
  265. "title": "fsvc 新资产上传票据绑定校验",
  266. "details": "既存流程的 fsvc URI 分支未完整覆盖上传票据绑定校验;本次未扩大修改范围,应单独补齐并验证历史资产、版本复制与引用兼容性。"
  267. }
  268. ],
  269. "commands": [
  270. {
  271. "command": "pnpm run build",
  272. "status": "PASS",
  273. "details": "前端生产构建及遗留模型编辑器产物校验通过。"
  274. },
  275. {
  276. "command": "node --test tools/scene-cover-api.test.mjs tools/scene-cover-capture.test.mjs tools/scene-model-placement.test.mjs",
  277. "status": "PASS",
  278. "details": "33 / 33 通过:封面同次 PUT、异常回退、并发队列、项目切换、截图尺寸、渲染状态恢复,以及蒙皮模型包围盒与归一化缩放回归。"
  279. },
  280. {
  281. "command": "原 Microsoft Edge 场景链路 E2E(更正说明)",
  282. "status": "SUPERSEDED",
  283. "details": "原 7/7 只覆盖模型引用、保存、封面上传和发布等链路,未证明狐狸真实可见;完整通过结论已撤回,当前视觉验证见下列独立浏览器 E2E。"
  284. },
  285. {
  286. "command": "node tools/scene-model-visibility.e2e.mjs",
  287. "status": "PASS",
  288. "details": "独立 Edge / Playwright 会话重开 160/208 与 159/209,使用保存镜头,显示/隐藏模型并禁用投影进行像素比较;狐狸 4472 像素、卡车 7515 像素,均超过 500 阈值。证据保存在 visibility-evidence.json,截图 26 / 27;无写请求。"
  289. }
  290. ],
  291. "retainedData": "保留开发环境场景 159(牛奶卡车检验区,PUBLISHED,当前及已发布版本 209,模型 156 / 已发布版本 204)和场景 160(狐狸野外训练区,PUBLISHED,当前及已发布版本 208,模型 157 / 已发布版本 201)。模型原发布版本未修改;模型 157 的当前草稿版本 202 继续保留,未发布或修改。本次无需 DDL 变更。",
  292. "cleanup": "保留两条真实场景及历史截图用于后续测试和追溯。新增导入狐狸仅在隔离浏览器会话中测试,未保存、无写请求;测试结束后丢弃临时对象。"
  293. }