Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.
 
 
 
 

4074 lignes
149 KiB

  1. {
  2. "generatedAt": "2026-09-06T10:30:32.992Z",
  3. "status": "PENDING",
  4. "scope": "只读解析当前spec与明确unit计划;不执行测试,不推断最终PASS。",
  5. "count": {
  6. "total": 119,
  7. "withBrowserPlan": 112,
  8. "onlyUnitPlan": 7,
  9. "unmapped": 0
  10. },
  11. "unknownIds": [],
  12. "gaps": [],
  13. "features": [
  14. {
  15. "id": "project.load",
  16. "name": "按真实项目 ID 打开已存场景",
  17. "group": "工程入口与顶部命令",
  18. "verification": "PENDING",
  19. "plannedEvidence": [
  20. {
  21. "file": "tests/scene-editor-workflow-closure.spec.ts",
  22. "line": 64,
  23. "evidenceName": "fox-properties-cover",
  24. "testTitle": "狐狸:真实细分权限、全部属性、清空绑定、蒙皮保护、相机与封面保存重开",
  25. "kind": "browser",
  26. "featureIds": [
  27. "project.load",
  28. "project.title",
  29. "project.save",
  30. "selection.tree",
  31. "property.name",
  32. "property.visible",
  33. "property.operable",
  34. "property.position",
  35. "property.rotation",
  36. "property.scale",
  37. "property.device-id",
  38. "property.model-id",
  39. "property.semantic",
  40. "part.source",
  41. "panel.binding",
  42. "cover.capture",
  43. "cover.atomic"
  44. ],
  45. "scope": "真实字段输入与清空、六个语义选项、蒙皮保护、源模型可见,正文/资产/封面保存和刷新;不把原件旧模板组合当新模板结果。"
  46. },
  47. {
  48. "file": "tools/scene-closure-engine.test.mjs",
  49. "testTitle": "successful parallel restores retain document order after delayed GLBs and split-object batches finish out of order",
  50. "featureIds": [
  51. "project.load",
  52. "selection.tree"
  53. ],
  54. "kind": "unit",
  55. "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
  56. }
  57. ]
  58. },
  59. {
  60. "id": "project.retry",
  61. "name": "项目或挂载加载失败后重新加载",
  62. "group": "工程入口与顶部命令",
  63. "verification": "PENDING",
  64. "plannedEvidence": [
  65. {
  66. "file": "tests/scene-editor-async-closure.spec.ts",
  67. "line": 27,
  68. "evidenceName": "loading-retry",
  69. "testTitle": "加载失败重试与加载互斥:不展示可写半场景、恢复网络后模型完整加载",
  70. "kind": "browser",
  71. "featureIds": [
  72. "project.retry",
  73. "glb.pending",
  74. "leave.busy"
  75. ],
  76. "scope": "GET503只留中性失败和重试;延迟受控下载时禁用写入/导出/预览并阻止关闭,释放后真实狐狸加载。"
  77. },
  78. {
  79. "file": "tools/scene-closure-assets.test.mjs",
  80. "testTitle": "a failed fixed-version lookup is evicted and the same reference can be retried",
  81. "featureIds": [
  82. "project.retry"
  83. ],
  84. "kind": "unit",
  85. "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
  86. }
  87. ]
  88. },
  89. {
  90. "id": "project.title",
  91. "name": "当前场景名称与项目说明按钮",
  92. "group": "工程入口与顶部命令",
  93. "verification": "PENDING",
  94. "plannedEvidence": [
  95. {
  96. "file": "tests/scene-editor-workflow-closure.spec.ts",
  97. "line": 64,
  98. "evidenceName": "fox-properties-cover",
  99. "testTitle": "狐狸:真实细分权限、全部属性、清空绑定、蒙皮保护、相机与封面保存重开",
  100. "kind": "browser",
  101. "featureIds": [
  102. "project.load",
  103. "project.title",
  104. "project.save",
  105. "selection.tree",
  106. "property.name",
  107. "property.visible",
  108. "property.operable",
  109. "property.position",
  110. "property.rotation",
  111. "property.scale",
  112. "property.device-id",
  113. "property.model-id",
  114. "property.semantic",
  115. "part.source",
  116. "panel.binding",
  117. "cover.capture",
  118. "cover.atomic"
  119. ],
  120. "scope": "真实字段输入与清空、六个语义选项、蒙皮保护、源模型可见,正文/资产/封面保存和刷新;不把原件旧模板组合当新模板结果。"
  121. }
  122. ]
  123. },
  124. {
  125. "id": "project.new",
  126. "name": "顶部新建独立工程",
  127. "group": "工程入口与顶部命令",
  128. "verification": "PENDING",
  129. "plannedEvidence": [
  130. {
  131. "file": "tests/scene-editor-workflow-closure.spec.ts",
  132. "line": 166,
  133. "evidenceName": "new-project",
  134. "testTitle": "新建独立场景:取消、失败、保护原工程以及成功新 ID",
  135. "kind": "browser",
  136. "featureIds": [
  137. "project.new"
  138. ],
  139. "scope": "取消命名、创建503保留原工程、创建成功新ID、保存刷新与原工程内容核对。"
  140. }
  141. ]
  142. },
  143. {
  144. "id": "project.back",
  145. "name": "返回场景制作列表并保留场景标签",
  146. "group": "工程入口与顶部命令",
  147. "verification": "PENDING",
  148. "plannedEvidence": [
  149. {
  150. "file": "tests/scene-editor-persistence-closure.spec.ts",
  151. "line": 153,
  152. "evidenceName": "publish-fixed-version",
  153. "testTitle": "发布:前端绑定校验、保存与发布失败阻断、真实固定版本供训练目录使用",
  154. "kind": "browser",
  155. "featureIds": [
  156. "validation.complete",
  157. "validation.bindings",
  158. "panel.validation",
  159. "publish.saved",
  160. "publish.failure",
  161. "publish.fixed-model",
  162. "cover.atomic",
  163. "project.back"
  164. ],
  165. "scope": "实际校验、绑定阻断、POST503不假发布,重试发布当前固定版本;返回列表保留编辑标签,搜索当前项目并核对真实封面图片加载。下游静态渲染另有独立用例。"
  166. }
  167. ]
  168. },
  169. {
  170. "id": "project.save",
  171. "name": "保存草稿按钮",
  172. "group": "工程入口与顶部命令",
  173. "verification": "PENDING",
  174. "plannedEvidence": [
  175. {
  176. "file": "tests/scene-editor-async-closure.spec.ts",
  177. "line": 50,
  178. "evidenceName": "save-concurrency",
  179. "testTitle": "延迟保存快照:重复点击只提交一次,期间新编辑保留,旧恢复稿不会误报冲突",
  180. "kind": "browser",
  181. "featureIds": [
  182. "project.concurrent-save",
  183. "project.save",
  184. "project.save-key",
  185. "recovery.autobuffer",
  186. "recovery.same-version"
  187. ],
  188. "scope": "延迟真实PUT快照A、重复Ctrl+S不重复请求、期间编辑B仍dirty;再次保存刷新无旧恢复稿误报。"
  189. },
  190. {
  191. "file": "tests/scene-editor-permissions-closure.spec.ts",
  192. "line": 305,
  193. "evidenceName": "scene-multi-session",
  194. "testTitle": "双标签各自修改场景:保存和明确丢弃当前页均保留另一页真实恢复稿",
  195. "kind": "browser",
  196. "featureIds": [
  197. "recovery.multi-session",
  198. "recovery.autobuffer",
  199. "recovery.discard",
  200. "project.save"
  201. ],
  202. "scope": "以源测试实际断言为准;计划关联不代表最终通过。"
  203. },
  204. {
  205. "file": "tests/scene-editor-workflow-closure.spec.ts",
  206. "line": 64,
  207. "evidenceName": "fox-properties-cover",
  208. "testTitle": "狐狸:真实细分权限、全部属性、清空绑定、蒙皮保护、相机与封面保存重开",
  209. "kind": "browser",
  210. "featureIds": [
  211. "project.load",
  212. "project.title",
  213. "project.save",
  214. "selection.tree",
  215. "property.name",
  216. "property.visible",
  217. "property.operable",
  218. "property.position",
  219. "property.rotation",
  220. "property.scale",
  221. "property.device-id",
  222. "property.model-id",
  223. "property.semantic",
  224. "part.source",
  225. "panel.binding",
  226. "cover.capture",
  227. "cover.atomic"
  228. ],
  229. "scope": "真实字段输入与清空、六个语义选项、蒙皮保护、源模型可见,正文/资产/封面保存和刷新;不把原件旧模板组合当新模板结果。"
  230. }
  231. ]
  232. },
  233. {
  234. "id": "project.save-key",
  235. "name": "Ctrl/Meta+S 保存快捷键",
  236. "group": "工程入口与顶部命令",
  237. "verification": "PENDING",
  238. "plannedEvidence": [
  239. {
  240. "file": "tests/scene-editor-async-closure.spec.ts",
  241. "line": 50,
  242. "evidenceName": "save-concurrency",
  243. "testTitle": "延迟保存快照:重复点击只提交一次,期间新编辑保留,旧恢复稿不会误报冲突",
  244. "kind": "browser",
  245. "featureIds": [
  246. "project.concurrent-save",
  247. "project.save",
  248. "project.save-key",
  249. "recovery.autobuffer",
  250. "recovery.same-version"
  251. ],
  252. "scope": "延迟真实PUT快照A、重复Ctrl+S不重复请求、期间编辑B仍dirty;再次保存刷新无旧恢复稿误报。"
  253. },
  254. {
  255. "file": "tests/scene-editor-workflow-closure.spec.ts",
  256. "line": 121,
  257. "evidenceName": "truck-part-history",
  258. "testTitle": "牛奶卡车:刚性部件独立变换、软删除、历史与保存基线一致",
  259. "kind": "browser",
  260. "featureIds": [
  261. "project.save-key",
  262. "part.transform",
  263. "part.soft-delete",
  264. "history.undo",
  265. "history.redo",
  266. "property.name",
  267. "view.enclosure-full",
  268. "view.enclosure-xray",
  269. "view.enclosure-hidden"
  270. ],
  271. "scope": "实际部件变换和软删除、按钮/键盘历史、保存基线与输入框自身撤销;双实例隔离及车库围护三种模式真实点击、导出和隐藏后保存刷新。"
  272. }
  273. ]
  274. },
  275. {
  276. "id": "project.save-failure",
  277. "name": "保存失败保留修改和恢复稿",
  278. "group": "工程入口与顶部命令",
  279. "verification": "PENDING",
  280. "plannedEvidence": [
  281. {
  282. "file": "tests/scene-editor-persistence-closure.spec.ts",
  283. "line": 85,
  284. "evidenceName": "save-cover-failure",
  285. "testTitle": "保存失败与封面降级:503 保留草稿,封面上传失败保留旧图,恢复后可重试",
  286. "kind": "browser",
  287. "featureIds": [
  288. "project.save-failure",
  289. "cover.failure"
  290. ],
  291. "scope": "正文PUT503不清草稿;封面上传503保留旧图但正文可保存;恢复服务后保存刷新。截图异常和409另由聚焦合同验证。"
  292. }
  293. ]
  294. },
  295. {
  296. "id": "project.conflict",
  297. "name": "409 乐观锁冲突保护",
  298. "group": "工程入口与顶部命令",
  299. "verification": "PENDING",
  300. "plannedEvidence": [
  301. {
  302. "file": "tests/scene-editor-persistence-closure.spec.ts",
  303. "line": 117,
  304. "evidenceName": "real-recovery-conflict",
  305. "testTitle": "同版本恢复与 409:真实未保存草稿重载、服务器新版本保护与隔离下载",
  306. "kind": "browser",
  307. "featureIds": [
  308. "project.conflict",
  309. "recovery.autobuffer",
  310. "recovery.same-version",
  311. "recovery.stale-version"
  312. ],
  313. "scope": "真实未存输入产生恢复稿,同版本恢复不自动入库;另一版本先保存后409拒绝覆盖,旧稿隔离下载。"
  314. },
  315. {
  316. "file": "tools/scene-cover-api.test.mjs",
  317. "testTitle": "upload conflict propagates without any content PUT",
  318. "featureIds": [
  319. "project.conflict",
  320. "cover.failure"
  321. ],
  322. "kind": "unit",
  323. "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
  324. }
  325. ]
  326. },
  327. {
  328. "id": "project.concurrent-save",
  329. "name": "重复保存与保存中继续编辑",
  330. "group": "工程入口与顶部命令",
  331. "verification": "PENDING",
  332. "plannedEvidence": [
  333. {
  334. "file": "tests/scene-editor-async-closure.spec.ts",
  335. "line": 50,
  336. "evidenceName": "save-concurrency",
  337. "testTitle": "延迟保存快照:重复点击只提交一次,期间新编辑保留,旧恢复稿不会误报冲突",
  338. "kind": "browser",
  339. "featureIds": [
  340. "project.concurrent-save",
  341. "project.save",
  342. "project.save-key",
  343. "recovery.autobuffer",
  344. "recovery.same-version"
  345. ],
  346. "scope": "延迟真实PUT快照A、重复Ctrl+S不重复请求、期间编辑B仍dirty;再次保存刷新无旧恢复稿误报。"
  347. }
  348. ]
  349. },
  350. {
  351. "id": "json.export",
  352. "name": "导出当前场景 JSON",
  353. "group": "工程文件与资源导入",
  354. "verification": "PENDING",
  355. "plannedEvidence": [
  356. {
  357. "file": "tests/scene-editor-persistence-closure.spec.ts",
  358. "line": 61,
  359. "evidenceName": "json-glb-roundtrip",
  360. "testTitle": "工程 JSON 与小 GLB:真实上传、损坏拒绝、引用失败回滚、相机参数往返",
  361. "kind": "browser",
  362. "featureIds": [
  363. "json.export",
  364. "json.import",
  365. "json.invalid",
  366. "json.missing-resource",
  367. "json.rendering",
  368. "glb.import",
  369. "glb.invalid",
  370. "glb.references",
  371. "validation.references"
  372. ],
  373. "scope": "真实JSON/GLB文件输入、错误schema/损坏资源/上传503拒绝、错误assetCode回滚、稳定URI及渲染参数保存重开。"
  374. },
  375. {
  376. "file": "tests/scene-editor-workflow-closure.spec.ts",
  377. "line": 190,
  378. "evidenceName": "readonly",
  379. "testTitle": "只读管理员:可浏览预览与导出,模板/资源/键盘/接口不能改场景",
  380. "kind": "browser",
  381. "featureIds": [
  382. "permission.readonly",
  383. "permission.update",
  384. "permission.publish",
  385. "preview.enter",
  386. "preview.exit",
  387. "preview.lock",
  388. "json.export"
  389. ],
  390. "scope": "只读按钮/模板/资源禁写、蒙皮浏览、运行预览与快捷键不变更对象,直接PUT拒绝;具体搜索/鼠标覆盖另见视口用例。"
  391. }
  392. ]
  393. },
  394. {
  395. "id": "json.import",
  396. "name": "导入有效场景工程 JSON",
  397. "group": "工程文件与资源导入",
  398. "verification": "PENDING",
  399. "plannedEvidence": [
  400. {
  401. "file": "tests/scene-editor-persistence-closure.spec.ts",
  402. "line": 61,
  403. "evidenceName": "json-glb-roundtrip",
  404. "testTitle": "工程 JSON 与小 GLB:真实上传、损坏拒绝、引用失败回滚、相机参数往返",
  405. "kind": "browser",
  406. "featureIds": [
  407. "json.export",
  408. "json.import",
  409. "json.invalid",
  410. "json.missing-resource",
  411. "json.rendering",
  412. "glb.import",
  413. "glb.invalid",
  414. "glb.references",
  415. "validation.references"
  416. ],
  417. "scope": "真实JSON/GLB文件输入、错误schema/损坏资源/上传503拒绝、错误assetCode回滚、稳定URI及渲染参数保存重开。"
  418. }
  419. ]
  420. },
  421. {
  422. "id": "json.invalid",
  423. "name": "非法 JSON / 错误 schema 拒绝",
  424. "group": "工程文件与资源导入",
  425. "verification": "PENDING",
  426. "plannedEvidence": [
  427. {
  428. "file": "tests/scene-editor-persistence-closure.spec.ts",
  429. "line": 61,
  430. "evidenceName": "json-glb-roundtrip",
  431. "testTitle": "工程 JSON 与小 GLB:真实上传、损坏拒绝、引用失败回滚、相机参数往返",
  432. "kind": "browser",
  433. "featureIds": [
  434. "json.export",
  435. "json.import",
  436. "json.invalid",
  437. "json.missing-resource",
  438. "json.rendering",
  439. "glb.import",
  440. "glb.invalid",
  441. "glb.references",
  442. "validation.references"
  443. ],
  444. "scope": "真实JSON/GLB文件输入、错误schema/损坏资源/上传503拒绝、错误assetCode回滚、稳定URI及渲染参数保存重开。"
  445. }
  446. ]
  447. },
  448. {
  449. "id": "json.missing-resource",
  450. "name": "JSON 缺失/错误受控引用拒绝与回滚",
  451. "group": "工程文件与资源导入",
  452. "verification": "PENDING",
  453. "plannedEvidence": [
  454. {
  455. "file": "tests/scene-editor-persistence-closure.spec.ts",
  456. "line": 61,
  457. "evidenceName": "json-glb-roundtrip",
  458. "testTitle": "工程 JSON 与小 GLB:真实上传、损坏拒绝、引用失败回滚、相机参数往返",
  459. "kind": "browser",
  460. "featureIds": [
  461. "json.export",
  462. "json.import",
  463. "json.invalid",
  464. "json.missing-resource",
  465. "json.rendering",
  466. "glb.import",
  467. "glb.invalid",
  468. "glb.references",
  469. "validation.references"
  470. ],
  471. "scope": "真实JSON/GLB文件输入、错误schema/损坏资源/上传503拒绝、错误assetCode回滚、稳定URI及渲染参数保存重开。"
  472. },
  473. {
  474. "file": "tools/scene-closure-engine.test.mjs",
  475. "testTitle": "a failed replacement GLB keeps the previous live scene rather than clearing an unsaved draft",
  476. "featureIds": [
  477. "json.missing-resource"
  478. ],
  479. "kind": "unit",
  480. "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
  481. },
  482. {
  483. "file": "tools/scene-closure-assets.test.mjs",
  484. "testTitle": "an explicit missing code cannot fall back to the first READY asset",
  485. "featureIds": [
  486. "validation.references",
  487. "json.missing-resource"
  488. ],
  489. "kind": "unit",
  490. "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
  491. }
  492. ]
  493. },
  494. {
  495. "id": "json.rendering",
  496. "name": "相机、灯光、雾和环境序列化往返",
  497. "group": "工程文件与资源导入",
  498. "verification": "PENDING",
  499. "plannedEvidence": [
  500. {
  501. "file": "tests/scene-editor-persistence-closure.spec.ts",
  502. "line": 61,
  503. "evidenceName": "json-glb-roundtrip",
  504. "testTitle": "工程 JSON 与小 GLB:真实上传、损坏拒绝、引用失败回滚、相机参数往返",
  505. "kind": "browser",
  506. "featureIds": [
  507. "json.export",
  508. "json.import",
  509. "json.invalid",
  510. "json.missing-resource",
  511. "json.rendering",
  512. "glb.import",
  513. "glb.invalid",
  514. "glb.references",
  515. "validation.references"
  516. ],
  517. "scope": "真实JSON/GLB文件输入、错误schema/损坏资源/上传503拒绝、错误assetCode回滚、稳定URI及渲染参数保存重开。"
  518. },
  519. {
  520. "file": "tools/scene-closure-engine.test.mjs",
  521. "testTitle": "loading and history restoration preserve an authored camera rather than auto-focusing a vehicle",
  522. "featureIds": [
  523. "json.rendering",
  524. "history.undo"
  525. ],
  526. "kind": "unit",
  527. "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
  528. }
  529. ]
  530. },
  531. {
  532. "id": "glb.import",
  533. "name": "本地 GLB 上传并加入当前场景",
  534. "group": "工程文件与资源导入",
  535. "verification": "PENDING",
  536. "plannedEvidence": [
  537. {
  538. "file": "tests/scene-editor-persistence-closure.spec.ts",
  539. "line": 61,
  540. "evidenceName": "json-glb-roundtrip",
  541. "testTitle": "工程 JSON 与小 GLB:真实上传、损坏拒绝、引用失败回滚、相机参数往返",
  542. "kind": "browser",
  543. "featureIds": [
  544. "json.export",
  545. "json.import",
  546. "json.invalid",
  547. "json.missing-resource",
  548. "json.rendering",
  549. "glb.import",
  550. "glb.invalid",
  551. "glb.references",
  552. "validation.references"
  553. ],
  554. "scope": "真实JSON/GLB文件输入、错误schema/损坏资源/上传503拒绝、错误assetCode回滚、稳定URI及渲染参数保存重开。"
  555. }
  556. ]
  557. },
  558. {
  559. "id": "glb.invalid",
  560. "name": "非 GLB / 损坏 GLB / 上传失败处理",
  561. "group": "工程文件与资源导入",
  562. "verification": "PENDING",
  563. "plannedEvidence": [
  564. {
  565. "file": "tests/scene-editor-persistence-closure.spec.ts",
  566. "line": 61,
  567. "evidenceName": "json-glb-roundtrip",
  568. "testTitle": "工程 JSON 与小 GLB:真实上传、损坏拒绝、引用失败回滚、相机参数往返",
  569. "kind": "browser",
  570. "featureIds": [
  571. "json.export",
  572. "json.import",
  573. "json.invalid",
  574. "json.missing-resource",
  575. "json.rendering",
  576. "glb.import",
  577. "glb.invalid",
  578. "glb.references",
  579. "validation.references"
  580. ],
  581. "scope": "真实JSON/GLB文件输入、错误schema/损坏资源/上传503拒绝、错误assetCode回滚、稳定URI及渲染参数保存重开。"
  582. }
  583. ]
  584. },
  585. {
  586. "id": "glb.pending",
  587. "name": "资源加载/上传期间操作互斥",
  588. "group": "工程文件与资源导入",
  589. "verification": "PENDING",
  590. "plannedEvidence": [
  591. {
  592. "file": "tests/scene-editor-async-closure.spec.ts",
  593. "line": 27,
  594. "evidenceName": "loading-retry",
  595. "testTitle": "加载失败重试与加载互斥:不展示可写半场景、恢复网络后模型完整加载",
  596. "kind": "browser",
  597. "featureIds": [
  598. "project.retry",
  599. "glb.pending",
  600. "leave.busy"
  601. ],
  602. "scope": "GET503只留中性失败和重试;延迟受控下载时禁用写入/导出/预览并阻止关闭,释放后真实狐狸加载。"
  603. },
  604. {
  605. "file": "tools/scene-closure-engine.test.mjs",
  606. "testTitle": "replacement failure waits for other started loads before restoring the original scene",
  607. "featureIds": [
  608. "history.failure",
  609. "glb.pending"
  610. ],
  611. "kind": "unit",
  612. "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
  613. },
  614. {
  615. "file": "../unreal_tran_web/src/features/scene-legacy/contentApiClient.test.mjs",
  616. "testTitle": "an upload finishing after a project switch cannot register into the new session",
  617. "featureIds": [
  618. "glb.pending",
  619. "lifecycle.destroy"
  620. ],
  621. "kind": "unit",
  622. "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
  623. }
  624. ]
  625. },
  626. {
  627. "id": "glb.references",
  628. "name": "本项目 GLB 稳定资产引用",
  629. "group": "工程文件与资源导入",
  630. "verification": "PENDING",
  631. "plannedEvidence": [
  632. {
  633. "file": "tests/scene-editor-persistence-closure.spec.ts",
  634. "line": 61,
  635. "evidenceName": "json-glb-roundtrip",
  636. "testTitle": "工程 JSON 与小 GLB:真实上传、损坏拒绝、引用失败回滚、相机参数往返",
  637. "kind": "browser",
  638. "featureIds": [
  639. "json.export",
  640. "json.import",
  641. "json.invalid",
  642. "json.missing-resource",
  643. "json.rendering",
  644. "glb.import",
  645. "glb.invalid",
  646. "glb.references",
  647. "validation.references"
  648. ],
  649. "scope": "真实JSON/GLB文件输入、错误schema/损坏资源/上传503拒绝、错误assetCode回滚、稳定URI及渲染参数保存重开。"
  650. },
  651. {
  652. "file": "tools/scene-closure-assets.test.mjs",
  653. "testTitle": "copied scene keeps its original pseudo URI but reads its own copied asset by stable code",
  654. "featureIds": [
  655. "glb.references"
  656. ],
  657. "kind": "unit",
  658. "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
  659. }
  660. ]
  661. },
  662. {
  663. "id": "panel.left-tabs",
  664. "name": "场景大纲 / 资源库 / 场景模板切换",
  665. "group": "左侧目录与资源放置",
  666. "verification": "PENDING",
  667. "plannedEvidence": [
  668. {
  669. "file": "tests/scene-editor-templates-closure.spec.ts",
  670. "line": 118,
  671. "evidenceName": "template-confirm",
  672. "testTitle": "模板搜索与未保存切换确认保留和放弃",
  673. "kind": "browser",
  674. "featureIds": [
  675. "panel.left-tabs",
  676. "search.templates",
  677. "template.switch-cancel"
  678. ],
  679. "scope": "中文/无匹配/清空搜索;真实取消保留对象,真实确认放弃并切换空白模板后保存。"
  680. }
  681. ]
  682. },
  683. {
  684. "id": "search.tree",
  685. "name": "对象/部件名称搜索与清空",
  686. "group": "左侧目录与资源放置",
  687. "verification": "PENDING",
  688. "plannedEvidence": [
  689. {
  690. "file": "tests/scene-editor-templates-closure.spec.ts",
  691. "line": 246,
  692. "evidenceName": "published-model-assets",
  693. "testTitle": "模型成果狐狸卡车双击与真实拖入、树搜索和部件隐藏重开",
  694. "kind": "browser",
  695. "featureIds": [
  696. "assets.catalog",
  697. "assets.model-double-click",
  698. "assets.model-drop",
  699. "search.tree",
  700. "part.source",
  701. "property.visible"
  702. ],
  703. "scope": "API 已发布目录,狐狸双击和卡车真实拖入;固定来源版本、树根/部件搜索;卡车刚体部件隐藏保存重开,最后恢复可见。基线树没有折叠按钮,不将搜索伪称折叠。"
  704. }
  705. ]
  706. },
  707. {
  708. "id": "search.assets",
  709. "name": "资源搜索与异步刷新保留筛选",
  710. "group": "左侧目录与资源放置",
  711. "verification": "PENDING",
  712. "plannedEvidence": [
  713. {
  714. "file": "tests/scene-editor-templates-closure.spec.ts",
  715. "line": 161,
  716. "evidenceName": "basic-assets",
  717. "testTitle": "八种基础资源逐项放置、真实拖放、搜索和保存重开",
  718. "kind": "browser",
  719. "featureIds": [
  720. "assets.basic-double-click",
  721. "assets.basic-drop",
  722. "search.assets",
  723. "panel.objects",
  724. "asset.diagnostic",
  725. "asset.equipment",
  726. "asset.workbench",
  727. "asset.shelf",
  728. "asset.safety-zone",
  729. "asset.camera",
  730. "asset.worker",
  731. "asset.light"
  732. ],
  733. "scope": "8 种基础资源分别双击放置并分开布置;真实指针拖入第 9 个工作台、吸附检查、唯一编号、保存刷新一致。照明为现有资源外观,不冒称连接真实灯控。"
  734. }
  735. ]
  736. },
  737. {
  738. "id": "search.templates",
  739. "name": "模板搜索与清空",
  740. "group": "左侧目录与资源放置",
  741. "verification": "PENDING",
  742. "plannedEvidence": [
  743. {
  744. "file": "tests/scene-editor-templates-closure.spec.ts",
  745. "line": 118,
  746. "evidenceName": "template-confirm",
  747. "testTitle": "模板搜索与未保存切换确认保留和放弃",
  748. "kind": "browser",
  749. "featureIds": [
  750. "panel.left-tabs",
  751. "search.templates",
  752. "template.switch-cancel"
  753. ],
  754. "scope": "中文/无匹配/清空搜索;真实取消保留对象,真实确认放弃并切换空白模板后保存。"
  755. }
  756. ]
  757. },
  758. {
  759. "id": "assets.catalog",
  760. "name": "真实已发布模型成果目录",
  761. "group": "左侧目录与资源放置",
  762. "verification": "PENDING",
  763. "plannedEvidence": [
  764. {
  765. "file": "tests/scene-editor-templates-closure.spec.ts",
  766. "line": 246,
  767. "evidenceName": "published-model-assets",
  768. "testTitle": "模型成果狐狸卡车双击与真实拖入、树搜索和部件隐藏重开",
  769. "kind": "browser",
  770. "featureIds": [
  771. "assets.catalog",
  772. "assets.model-double-click",
  773. "assets.model-drop",
  774. "search.tree",
  775. "part.source",
  776. "property.visible"
  777. ],
  778. "scope": "API 已发布目录,狐狸双击和卡车真实拖入;固定来源版本、树根/部件搜索;卡车刚体部件隐藏保存重开,最后恢复可见。基线树没有折叠按钮,不将搜索伪称折叠。"
  779. }
  780. ]
  781. },
  782. {
  783. "id": "assets.model-double-click",
  784. "name": "双击已发布模型放置",
  785. "group": "左侧目录与资源放置",
  786. "verification": "PENDING",
  787. "plannedEvidence": [
  788. {
  789. "file": "tests/scene-editor-templates-closure.spec.ts",
  790. "line": 246,
  791. "evidenceName": "published-model-assets",
  792. "testTitle": "模型成果狐狸卡车双击与真实拖入、树搜索和部件隐藏重开",
  793. "kind": "browser",
  794. "featureIds": [
  795. "assets.catalog",
  796. "assets.model-double-click",
  797. "assets.model-drop",
  798. "search.tree",
  799. "part.source",
  800. "property.visible"
  801. ],
  802. "scope": "API 已发布目录,狐狸双击和卡车真实拖入;固定来源版本、树根/部件搜索;卡车刚体部件隐藏保存重开,最后恢复可见。基线树没有折叠按钮,不将搜索伪称折叠。"
  803. },
  804. {
  805. "file": "tools/scene-model-placement.test.mjs",
  806. "testTitle": "fresh skinned placement reaches the requested size and floor after authored scale/pose replay",
  807. "featureIds": [
  808. "assets.model-double-click",
  809. "assets.model-drop"
  810. ],
  811. "kind": "unit",
  812. "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
  813. }
  814. ]
  815. },
  816. {
  817. "id": "assets.model-drop",
  818. "name": "拖入已发布模型放置",
  819. "group": "左侧目录与资源放置",
  820. "verification": "PENDING",
  821. "plannedEvidence": [
  822. {
  823. "file": "tests/scene-editor-templates-closure.spec.ts",
  824. "line": 246,
  825. "evidenceName": "published-model-assets",
  826. "testTitle": "模型成果狐狸卡车双击与真实拖入、树搜索和部件隐藏重开",
  827. "kind": "browser",
  828. "featureIds": [
  829. "assets.catalog",
  830. "assets.model-double-click",
  831. "assets.model-drop",
  832. "search.tree",
  833. "part.source",
  834. "property.visible"
  835. ],
  836. "scope": "API 已发布目录,狐狸双击和卡车真实拖入;固定来源版本、树根/部件搜索;卡车刚体部件隐藏保存重开,最后恢复可见。基线树没有折叠按钮,不将搜索伪称折叠。"
  837. },
  838. {
  839. "file": "tools/scene-model-placement.test.mjs",
  840. "testTitle": "fresh skinned placement reaches the requested size and floor after authored scale/pose replay",
  841. "featureIds": [
  842. "assets.model-double-click",
  843. "assets.model-drop"
  844. ],
  845. "kind": "unit",
  846. "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
  847. }
  848. ]
  849. },
  850. {
  851. "id": "assets.basic-double-click",
  852. "name": "双击基础资源放置",
  853. "group": "左侧目录与资源放置",
  854. "verification": "PENDING",
  855. "plannedEvidence": [
  856. {
  857. "file": "tests/scene-editor-templates-closure.spec.ts",
  858. "line": 161,
  859. "evidenceName": "basic-assets",
  860. "testTitle": "八种基础资源逐项放置、真实拖放、搜索和保存重开",
  861. "kind": "browser",
  862. "featureIds": [
  863. "assets.basic-double-click",
  864. "assets.basic-drop",
  865. "search.assets",
  866. "panel.objects",
  867. "asset.diagnostic",
  868. "asset.equipment",
  869. "asset.workbench",
  870. "asset.shelf",
  871. "asset.safety-zone",
  872. "asset.camera",
  873. "asset.worker",
  874. "asset.light"
  875. ],
  876. "scope": "8 种基础资源分别双击放置并分开布置;真实指针拖入第 9 个工作台、吸附检查、唯一编号、保存刷新一致。照明为现有资源外观,不冒称连接真实灯控。"
  877. }
  878. ]
  879. },
  880. {
  881. "id": "assets.basic-drop",
  882. "name": "基础资源拖入与拖放提示",
  883. "group": "左侧目录与资源放置",
  884. "verification": "PENDING",
  885. "plannedEvidence": [
  886. {
  887. "file": "tests/scene-editor-templates-closure.spec.ts",
  888. "line": 161,
  889. "evidenceName": "basic-assets",
  890. "testTitle": "八种基础资源逐项放置、真实拖放、搜索和保存重开",
  891. "kind": "browser",
  892. "featureIds": [
  893. "assets.basic-double-click",
  894. "assets.basic-drop",
  895. "search.assets",
  896. "panel.objects",
  897. "asset.diagnostic",
  898. "asset.equipment",
  899. "asset.workbench",
  900. "asset.shelf",
  901. "asset.safety-zone",
  902. "asset.camera",
  903. "asset.worker",
  904. "asset.light"
  905. ],
  906. "scope": "8 种基础资源分别双击放置并分开布置;真实指针拖入第 9 个工作台、吸附检查、唯一编号、保存刷新一致。照明为现有资源外观,不冒称连接真实灯控。"
  907. }
  908. ]
  909. },
  910. {
  911. "id": "assets.model-link",
  912. "name": "打开/返回模型编辑器入口",
  913. "group": "左侧目录与资源放置",
  914. "verification": "PENDING",
  915. "plannedEvidence": [
  916. {
  917. "file": "tools/scene-closure-engine.test.mjs",
  918. "testTitle": "model source navigation locates the published owner and falls back without source permission",
  919. "featureIds": [
  920. "assets.model-link"
  921. ],
  922. "kind": "unit",
  923. "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
  924. }
  925. ]
  926. },
  927. {
  928. "id": "asset.diagnostic",
  929. "name": "基础资源:液压诊断工位",
  930. "group": "左侧目录与资源放置",
  931. "verification": "PENDING",
  932. "plannedEvidence": [
  933. {
  934. "file": "tests/scene-editor-templates-closure.spec.ts",
  935. "line": 161,
  936. "evidenceName": "basic-assets",
  937. "testTitle": "八种基础资源逐项放置、真实拖放、搜索和保存重开",
  938. "kind": "browser",
  939. "featureIds": [
  940. "assets.basic-double-click",
  941. "assets.basic-drop",
  942. "search.assets",
  943. "panel.objects",
  944. "asset.diagnostic",
  945. "asset.equipment",
  946. "asset.workbench",
  947. "asset.shelf",
  948. "asset.safety-zone",
  949. "asset.camera",
  950. "asset.worker",
  951. "asset.light"
  952. ],
  953. "scope": "8 种基础资源分别双击放置并分开布置;真实指针拖入第 9 个工作台、吸附检查、唯一编号、保存刷新一致。照明为现有资源外观,不冒称连接真实灯控。"
  954. }
  955. ]
  956. },
  957. {
  958. "id": "asset.equipment",
  959. "name": "基础资源:维修装备主体",
  960. "group": "左侧目录与资源放置",
  961. "verification": "PENDING",
  962. "plannedEvidence": [
  963. {
  964. "file": "tests/scene-editor-templates-closure.spec.ts",
  965. "line": 161,
  966. "evidenceName": "basic-assets",
  967. "testTitle": "八种基础资源逐项放置、真实拖放、搜索和保存重开",
  968. "kind": "browser",
  969. "featureIds": [
  970. "assets.basic-double-click",
  971. "assets.basic-drop",
  972. "search.assets",
  973. "panel.objects",
  974. "asset.diagnostic",
  975. "asset.equipment",
  976. "asset.workbench",
  977. "asset.shelf",
  978. "asset.safety-zone",
  979. "asset.camera",
  980. "asset.worker",
  981. "asset.light"
  982. ],
  983. "scope": "8 种基础资源分别双击放置并分开布置;真实指针拖入第 9 个工作台、吸附检查、唯一编号、保存刷新一致。照明为现有资源外观,不冒称连接真实灯控。"
  984. }
  985. ]
  986. },
  987. {
  988. "id": "asset.workbench",
  989. "name": "基础资源:检修工作台",
  990. "group": "左侧目录与资源放置",
  991. "verification": "PENDING",
  992. "plannedEvidence": [
  993. {
  994. "file": "tests/scene-editor-templates-closure.spec.ts",
  995. "line": 161,
  996. "evidenceName": "basic-assets",
  997. "testTitle": "八种基础资源逐项放置、真实拖放、搜索和保存重开",
  998. "kind": "browser",
  999. "featureIds": [
  1000. "assets.basic-double-click",
  1001. "assets.basic-drop",
  1002. "search.assets",
  1003. "panel.objects",
  1004. "asset.diagnostic",
  1005. "asset.equipment",
  1006. "asset.workbench",
  1007. "asset.shelf",
  1008. "asset.safety-zone",
  1009. "asset.camera",
  1010. "asset.worker",
  1011. "asset.light"
  1012. ],
  1013. "scope": "8 种基础资源分别双击放置并分开布置;真实指针拖入第 9 个工作台、吸附检查、唯一编号、保存刷新一致。照明为现有资源外观,不冒称连接真实灯控。"
  1014. }
  1015. ]
  1016. },
  1017. {
  1018. "id": "asset.shelf",
  1019. "name": "基础资源:器材存放架",
  1020. "group": "左侧目录与资源放置",
  1021. "verification": "PENDING",
  1022. "plannedEvidence": [
  1023. {
  1024. "file": "tests/scene-editor-templates-closure.spec.ts",
  1025. "line": 161,
  1026. "evidenceName": "basic-assets",
  1027. "testTitle": "八种基础资源逐项放置、真实拖放、搜索和保存重开",
  1028. "kind": "browser",
  1029. "featureIds": [
  1030. "assets.basic-double-click",
  1031. "assets.basic-drop",
  1032. "search.assets",
  1033. "panel.objects",
  1034. "asset.diagnostic",
  1035. "asset.equipment",
  1036. "asset.workbench",
  1037. "asset.shelf",
  1038. "asset.safety-zone",
  1039. "asset.camera",
  1040. "asset.worker",
  1041. "asset.light"
  1042. ],
  1043. "scope": "8 种基础资源分别双击放置并分开布置;真实指针拖入第 9 个工作台、吸附检查、唯一编号、保存刷新一致。照明为现有资源外观,不冒称连接真实灯控。"
  1044. }
  1045. ]
  1046. },
  1047. {
  1048. "id": "asset.safety-zone",
  1049. "name": "基础资源:安全作业区域",
  1050. "group": "左侧目录与资源放置",
  1051. "verification": "PENDING",
  1052. "plannedEvidence": [
  1053. {
  1054. "file": "tests/scene-editor-templates-closure.spec.ts",
  1055. "line": 161,
  1056. "evidenceName": "basic-assets",
  1057. "testTitle": "八种基础资源逐项放置、真实拖放、搜索和保存重开",
  1058. "kind": "browser",
  1059. "featureIds": [
  1060. "assets.basic-double-click",
  1061. "assets.basic-drop",
  1062. "search.assets",
  1063. "panel.objects",
  1064. "asset.diagnostic",
  1065. "asset.equipment",
  1066. "asset.workbench",
  1067. "asset.shelf",
  1068. "asset.safety-zone",
  1069. "asset.camera",
  1070. "asset.worker",
  1071. "asset.light"
  1072. ],
  1073. "scope": "8 种基础资源分别双击放置并分开布置;真实指针拖入第 9 个工作台、吸附检查、唯一编号、保存刷新一致。照明为现有资源外观,不冒称连接真实灯控。"
  1074. }
  1075. ]
  1076. },
  1077. {
  1078. "id": "asset.camera",
  1079. "name": "基础资源:视觉采集设备",
  1080. "group": "左侧目录与资源放置",
  1081. "verification": "PENDING",
  1082. "plannedEvidence": [
  1083. {
  1084. "file": "tests/scene-editor-templates-closure.spec.ts",
  1085. "line": 161,
  1086. "evidenceName": "basic-assets",
  1087. "testTitle": "八种基础资源逐项放置、真实拖放、搜索和保存重开",
  1088. "kind": "browser",
  1089. "featureIds": [
  1090. "assets.basic-double-click",
  1091. "assets.basic-drop",
  1092. "search.assets",
  1093. "panel.objects",
  1094. "asset.diagnostic",
  1095. "asset.equipment",
  1096. "asset.workbench",
  1097. "asset.shelf",
  1098. "asset.safety-zone",
  1099. "asset.camera",
  1100. "asset.worker",
  1101. "asset.light"
  1102. ],
  1103. "scope": "8 种基础资源分别双击放置并分开布置;真实指针拖入第 9 个工作台、吸附检查、唯一编号、保存刷新一致。照明为现有资源外观,不冒称连接真实灯控。"
  1104. }
  1105. ]
  1106. },
  1107. {
  1108. "id": "asset.worker",
  1109. "name": "基础资源:训练人员占位",
  1110. "group": "左侧目录与资源放置",
  1111. "verification": "PENDING",
  1112. "plannedEvidence": [
  1113. {
  1114. "file": "tests/scene-editor-templates-closure.spec.ts",
  1115. "line": 161,
  1116. "evidenceName": "basic-assets",
  1117. "testTitle": "八种基础资源逐项放置、真实拖放、搜索和保存重开",
  1118. "kind": "browser",
  1119. "featureIds": [
  1120. "assets.basic-double-click",
  1121. "assets.basic-drop",
  1122. "search.assets",
  1123. "panel.objects",
  1124. "asset.diagnostic",
  1125. "asset.equipment",
  1126. "asset.workbench",
  1127. "asset.shelf",
  1128. "asset.safety-zone",
  1129. "asset.camera",
  1130. "asset.worker",
  1131. "asset.light"
  1132. ],
  1133. "scope": "8 种基础资源分别双击放置并分开布置;真实指针拖入第 9 个工作台、吸附检查、唯一编号、保存刷新一致。照明为现有资源外观,不冒称连接真实灯控。"
  1134. }
  1135. ]
  1136. },
  1137. {
  1138. "id": "asset.light",
  1139. "name": "基础资源:区域照明",
  1140. "group": "左侧目录与资源放置",
  1141. "verification": "PENDING",
  1142. "plannedEvidence": [
  1143. {
  1144. "file": "tests/scene-editor-templates-closure.spec.ts",
  1145. "line": 161,
  1146. "evidenceName": "basic-assets",
  1147. "testTitle": "八种基础资源逐项放置、真实拖放、搜索和保存重开",
  1148. "kind": "browser",
  1149. "featureIds": [
  1150. "assets.basic-double-click",
  1151. "assets.basic-drop",
  1152. "search.assets",
  1153. "panel.objects",
  1154. "asset.diagnostic",
  1155. "asset.equipment",
  1156. "asset.workbench",
  1157. "asset.shelf",
  1158. "asset.safety-zone",
  1159. "asset.camera",
  1160. "asset.worker",
  1161. "asset.light"
  1162. ],
  1163. "scope": "8 种基础资源分别双击放置并分开布置;真实指针拖入第 9 个工作台、吸附检查、唯一编号、保存刷新一致。照明为现有资源外观,不冒称连接真实灯控。"
  1164. }
  1165. ]
  1166. },
  1167. {
  1168. "id": "asset.vehicle-depot",
  1169. "name": "场地资源:真实装备车库",
  1170. "group": "左侧目录与资源放置",
  1171. "verification": "PENDING",
  1172. "plannedEvidence": [
  1173. {
  1174. "file": "tests/scene-editor-templates-closure.spec.ts",
  1175. "line": 193,
  1176. "evidenceName": "venue-assets",
  1177. "testTitle": "两种整体场地加载、重复放置阻止与显式删除后替换",
  1178. "kind": "browser",
  1179. "featureIds": [
  1180. "asset.vehicle-depot",
  1181. "asset.field-terrain",
  1182. "object.delete"
  1183. ],
  1184. "scope": "车库和起伏地形真实加载并分别保存重开;已有整体场地时阻止叠加,显式删除旧场地后才能替换。"
  1185. }
  1186. ]
  1187. },
  1188. {
  1189. "id": "asset.field-terrain",
  1190. "name": "场地资源:真实野外地形",
  1191. "group": "左侧目录与资源放置",
  1192. "verification": "PENDING",
  1193. "plannedEvidence": [
  1194. {
  1195. "file": "tests/scene-editor-templates-closure.spec.ts",
  1196. "line": 193,
  1197. "evidenceName": "venue-assets",
  1198. "testTitle": "两种整体场地加载、重复放置阻止与显式删除后替换",
  1199. "kind": "browser",
  1200. "featureIds": [
  1201. "asset.vehicle-depot",
  1202. "asset.field-terrain",
  1203. "object.delete"
  1204. ],
  1205. "scope": "车库和起伏地形真实加载并分别保存重开;已有整体场地时阻止叠加,显式删除旧场地后才能替换。"
  1206. }
  1207. ]
  1208. },
  1209. {
  1210. "id": "template.depot-1",
  1211. "name": "真实装备车库",
  1212. "group": "全部可达场景模板",
  1213. "verification": "PENDING",
  1214. "plannedEvidence": [
  1215. {
  1216. "file": "tests/scene-editor-templates-closure.spec.ts",
  1217. "line": 85,
  1218. "evidenceName": "template-depot-1",
  1219. "testTitle": "场景模板实际加载、保存重开:真实装备车库",
  1220. "kind": "browser",
  1221. "featureIds": [
  1222. "template.depot-1"
  1223. ],
  1224. "scope": "循环参数化模板用例,每种独立副本、真实点击、保存、刷新与截图。"
  1225. }
  1226. ]
  1227. },
  1228. {
  1229. "id": "template.terrain-1",
  1230. "name": "真实野外训练场",
  1231. "group": "全部可达场景模板",
  1232. "verification": "PENDING",
  1233. "plannedEvidence": [
  1234. {
  1235. "file": "tests/scene-editor-templates-closure.spec.ts",
  1236. "line": 85,
  1237. "evidenceName": "template-terrain-1",
  1238. "testTitle": "场景模板实际加载、保存重开:真实野外训练场",
  1239. "kind": "browser",
  1240. "featureIds": [
  1241. "template.terrain-1"
  1242. ],
  1243. "scope": "循环参数化模板用例,每种独立副本、真实点击、保存、刷新与截图。"
  1244. }
  1245. ]
  1246. },
  1247. {
  1248. "id": "template.workshop-1",
  1249. "name": "综合检验车间",
  1250. "group": "全部可达场景模板",
  1251. "verification": "PENDING",
  1252. "plannedEvidence": [
  1253. {
  1254. "file": "tests/scene-editor-templates-closure.spec.ts",
  1255. "line": 85,
  1256. "evidenceName": "template-workshop-1",
  1257. "testTitle": "场景模板实际加载、保存重开:综合检验车间",
  1258. "kind": "browser",
  1259. "featureIds": [
  1260. "template.workshop-1"
  1261. ],
  1262. "scope": "循环参数化模板用例,每种独立副本、真实点击、保存、刷新与截图。"
  1263. }
  1264. ]
  1265. },
  1266. {
  1267. "id": "template.workshop-real",
  1268. "name": "演示维修车间(可拆分)",
  1269. "group": "全部可达场景模板",
  1270. "verification": "PENDING",
  1271. "plannedEvidence": [
  1272. {
  1273. "file": "tests/scene-editor-templates-closure.spec.ts",
  1274. "line": 85,
  1275. "evidenceName": "template-workshop-real",
  1276. "testTitle": "场景模板实际加载、保存重开:演示维修车间(可拆分)",
  1277. "kind": "browser",
  1278. "featureIds": [
  1279. "template.workshop-real"
  1280. ],
  1281. "scope": "循环参数化模板用例,每种独立副本、真实点击、保存、刷新与截图。"
  1282. }
  1283. ]
  1284. },
  1285. {
  1286. "id": "template.workshop-2",
  1287. "name": "总成拆卸车间",
  1288. "group": "全部可达场景模板",
  1289. "verification": "PENDING",
  1290. "plannedEvidence": [
  1291. {
  1292. "file": "tests/scene-editor-templates-closure.spec.ts",
  1293. "line": 85,
  1294. "evidenceName": "template-workshop-2",
  1295. "testTitle": "场景模板实际加载、保存重开:总成拆卸车间",
  1296. "kind": "browser",
  1297. "featureIds": [
  1298. "template.workshop-2"
  1299. ],
  1300. "scope": "循环参数化模板用例,每种独立副本、真实点击、保存、刷新与截图。"
  1301. }
  1302. ]
  1303. },
  1304. {
  1305. "id": "template.workshop-3",
  1306. "name": "部件分解车间",
  1307. "group": "全部可达场景模板",
  1308. "verification": "PENDING",
  1309. "plannedEvidence": [
  1310. {
  1311. "file": "tests/scene-editor-templates-closure.spec.ts",
  1312. "line": 85,
  1313. "evidenceName": "template-workshop-3",
  1314. "testTitle": "场景模板实际加载、保存重开:部件分解车间",
  1315. "kind": "browser",
  1316. "featureIds": [
  1317. "template.workshop-3"
  1318. ],
  1319. "scope": "循环参数化模板用例,每种独立副本、真实点击、保存、刷新与截图。"
  1320. }
  1321. ]
  1322. },
  1323. {
  1324. "id": "template.workshop-4",
  1325. "name": "清洗检测车间",
  1326. "group": "全部可达场景模板",
  1327. "verification": "PENDING",
  1328. "plannedEvidence": [
  1329. {
  1330. "file": "tests/scene-editor-templates-closure.spec.ts",
  1331. "line": 85,
  1332. "evidenceName": "template-workshop-4",
  1333. "testTitle": "场景模板实际加载、保存重开:清洗检测车间",
  1334. "kind": "browser",
  1335. "featureIds": [
  1336. "template.workshop-4"
  1337. ],
  1338. "scope": "循环参数化模板用例,每种独立副本、真实点击、保存、刷新与截图。"
  1339. }
  1340. ]
  1341. },
  1342. {
  1343. "id": "template.workshop-5",
  1344. "name": "复装调试车间",
  1345. "group": "全部可达场景模板",
  1346. "verification": "PENDING",
  1347. "plannedEvidence": [
  1348. {
  1349. "file": "tests/scene-editor-templates-closure.spec.ts",
  1350. "line": 85,
  1351. "evidenceName": "template-workshop-5",
  1352. "testTitle": "场景模板实际加载、保存重开:复装调试车间",
  1353. "kind": "browser",
  1354. "featureIds": [
  1355. "template.workshop-5"
  1356. ],
  1357. "scope": "循环参数化模板用例,每种独立副本、真实点击、保存、刷新与截图。"
  1358. }
  1359. ]
  1360. },
  1361. {
  1362. "id": "template.outdoor-1",
  1363. "name": "室外综合训练场",
  1364. "group": "全部可达场景模板",
  1365. "verification": "PENDING",
  1366. "plannedEvidence": [
  1367. {
  1368. "file": "tests/scene-editor-templates-closure.spec.ts",
  1369. "line": 85,
  1370. "evidenceName": "template-outdoor-1",
  1371. "testTitle": "场景模板实际加载、保存重开:室外综合训练场",
  1372. "kind": "browser",
  1373. "featureIds": [
  1374. "template.outdoor-1"
  1375. ],
  1376. "scope": "循环参数化模板用例,每种独立副本、真实点击、保存、刷新与截图。"
  1377. }
  1378. ]
  1379. },
  1380. {
  1381. "id": "template.switch-cancel",
  1382. "name": "未保存模板切换取消",
  1383. "group": "全部可达场景模板",
  1384. "verification": "PENDING",
  1385. "plannedEvidence": [
  1386. {
  1387. "file": "tests/scene-editor-templates-closure.spec.ts",
  1388. "line": 118,
  1389. "evidenceName": "template-confirm",
  1390. "testTitle": "模板搜索与未保存切换确认保留和放弃",
  1391. "kind": "browser",
  1392. "featureIds": [
  1393. "panel.left-tabs",
  1394. "search.templates",
  1395. "template.switch-cancel"
  1396. ],
  1397. "scope": "中文/无匹配/清空搜索;真实取消保留对象,真实确认放弃并切换空白模板后保存。"
  1398. }
  1399. ]
  1400. },
  1401. {
  1402. "id": "view.orbit",
  1403. "name": "鼠标旋转相机",
  1404. "group": "三维视口、选择与变换",
  1405. "verification": "PENDING",
  1406. "plannedEvidence": [
  1407. {
  1408. "file": "tests/scene-editor-viewport-closure.spec.ts",
  1409. "line": 117,
  1410. "evidenceName": "viewport-camera-theme",
  1411. "testTitle": "真实相机操控、视口拾取、预览禁写和两尺寸主题可读性",
  1412. "kind": "browser",
  1413. "featureIds": [
  1414. "view.orbit",
  1415. "view.pan",
  1416. "view.zoom",
  1417. "view.top",
  1418. "view.perspective",
  1419. "view.grid",
  1420. "view.focus",
  1421. "selection.viewport",
  1422. "selection.highlight",
  1423. "preview.enter",
  1424. "preview.exit",
  1425. "preview.lock",
  1426. "lifecycle.resize-theme"
  1427. ],
  1428. "scope": "以源测试实际断言为准;计划关联不代表最终通过。"
  1429. }
  1430. ]
  1431. },
  1432. {
  1433. "id": "view.pan",
  1434. "name": "鼠标平移相机",
  1435. "group": "三维视口、选择与变换",
  1436. "verification": "PENDING",
  1437. "plannedEvidence": [
  1438. {
  1439. "file": "tests/scene-editor-viewport-closure.spec.ts",
  1440. "line": 117,
  1441. "evidenceName": "viewport-camera-theme",
  1442. "testTitle": "真实相机操控、视口拾取、预览禁写和两尺寸主题可读性",
  1443. "kind": "browser",
  1444. "featureIds": [
  1445. "view.orbit",
  1446. "view.pan",
  1447. "view.zoom",
  1448. "view.top",
  1449. "view.perspective",
  1450. "view.grid",
  1451. "view.focus",
  1452. "selection.viewport",
  1453. "selection.highlight",
  1454. "preview.enter",
  1455. "preview.exit",
  1456. "preview.lock",
  1457. "lifecycle.resize-theme"
  1458. ],
  1459. "scope": "以源测试实际断言为准;计划关联不代表最终通过。"
  1460. }
  1461. ]
  1462. },
  1463. {
  1464. "id": "view.zoom",
  1465. "name": "滚轮缩放相机",
  1466. "group": "三维视口、选择与变换",
  1467. "verification": "PENDING",
  1468. "plannedEvidence": [
  1469. {
  1470. "file": "tests/scene-editor-viewport-closure.spec.ts",
  1471. "line": 117,
  1472. "evidenceName": "viewport-camera-theme",
  1473. "testTitle": "真实相机操控、视口拾取、预览禁写和两尺寸主题可读性",
  1474. "kind": "browser",
  1475. "featureIds": [
  1476. "view.orbit",
  1477. "view.pan",
  1478. "view.zoom",
  1479. "view.top",
  1480. "view.perspective",
  1481. "view.grid",
  1482. "view.focus",
  1483. "selection.viewport",
  1484. "selection.highlight",
  1485. "preview.enter",
  1486. "preview.exit",
  1487. "preview.lock",
  1488. "lifecycle.resize-theme"
  1489. ],
  1490. "scope": "以源测试实际断言为准;计划关联不代表最终通过。"
  1491. }
  1492. ]
  1493. },
  1494. {
  1495. "id": "view.perspective",
  1496. "name": "透视按钮",
  1497. "group": "三维视口、选择与变换",
  1498. "verification": "PENDING",
  1499. "plannedEvidence": [
  1500. {
  1501. "file": "tests/scene-editor-viewport-closure.spec.ts",
  1502. "line": 117,
  1503. "evidenceName": "viewport-camera-theme",
  1504. "testTitle": "真实相机操控、视口拾取、预览禁写和两尺寸主题可读性",
  1505. "kind": "browser",
  1506. "featureIds": [
  1507. "view.orbit",
  1508. "view.pan",
  1509. "view.zoom",
  1510. "view.top",
  1511. "view.perspective",
  1512. "view.grid",
  1513. "view.focus",
  1514. "selection.viewport",
  1515. "selection.highlight",
  1516. "preview.enter",
  1517. "preview.exit",
  1518. "preview.lock",
  1519. "lifecycle.resize-theme"
  1520. ],
  1521. "scope": "以源测试实际断言为准;计划关联不代表最终通过。"
  1522. }
  1523. ]
  1524. },
  1525. {
  1526. "id": "view.top",
  1527. "name": "顶视图按钮",
  1528. "group": "三维视口、选择与变换",
  1529. "verification": "PENDING",
  1530. "plannedEvidence": [
  1531. {
  1532. "file": "tests/scene-editor-viewport-closure.spec.ts",
  1533. "line": 117,
  1534. "evidenceName": "viewport-camera-theme",
  1535. "testTitle": "真实相机操控、视口拾取、预览禁写和两尺寸主题可读性",
  1536. "kind": "browser",
  1537. "featureIds": [
  1538. "view.orbit",
  1539. "view.pan",
  1540. "view.zoom",
  1541. "view.top",
  1542. "view.perspective",
  1543. "view.grid",
  1544. "view.focus",
  1545. "selection.viewport",
  1546. "selection.highlight",
  1547. "preview.enter",
  1548. "preview.exit",
  1549. "preview.lock",
  1550. "lifecycle.resize-theme"
  1551. ],
  1552. "scope": "以源测试实际断言为准;计划关联不代表最终通过。"
  1553. }
  1554. ]
  1555. },
  1556. {
  1557. "id": "view.focus",
  1558. "name": "聚焦选中对象",
  1559. "group": "三维视口、选择与变换",
  1560. "verification": "PENDING",
  1561. "plannedEvidence": [
  1562. {
  1563. "file": "tests/scene-editor-viewport-closure.spec.ts",
  1564. "line": 117,
  1565. "evidenceName": "viewport-camera-theme",
  1566. "testTitle": "真实相机操控、视口拾取、预览禁写和两尺寸主题可读性",
  1567. "kind": "browser",
  1568. "featureIds": [
  1569. "view.orbit",
  1570. "view.pan",
  1571. "view.zoom",
  1572. "view.top",
  1573. "view.perspective",
  1574. "view.grid",
  1575. "view.focus",
  1576. "selection.viewport",
  1577. "selection.highlight",
  1578. "preview.enter",
  1579. "preview.exit",
  1580. "preview.lock",
  1581. "lifecycle.resize-theme"
  1582. ],
  1583. "scope": "以源测试实际断言为准;计划关联不代表最终通过。"
  1584. }
  1585. ]
  1586. },
  1587. {
  1588. "id": "view.grid",
  1589. "name": "网格显隐",
  1590. "group": "三维视口、选择与变换",
  1591. "verification": "PENDING",
  1592. "plannedEvidence": [
  1593. {
  1594. "file": "tests/scene-editor-viewport-closure.spec.ts",
  1595. "line": 117,
  1596. "evidenceName": "viewport-camera-theme",
  1597. "testTitle": "真实相机操控、视口拾取、预览禁写和两尺寸主题可读性",
  1598. "kind": "browser",
  1599. "featureIds": [
  1600. "view.orbit",
  1601. "view.pan",
  1602. "view.zoom",
  1603. "view.top",
  1604. "view.perspective",
  1605. "view.grid",
  1606. "view.focus",
  1607. "selection.viewport",
  1608. "selection.highlight",
  1609. "preview.enter",
  1610. "preview.exit",
  1611. "preview.lock",
  1612. "lifecycle.resize-theme"
  1613. ],
  1614. "scope": "以源测试实际断言为准;计划关联不代表最终通过。"
  1615. },
  1616. {
  1617. "file": "tools/scene-cover-capture.test.mjs",
  1618. "testTitle": "copies synchronously without bounds, gizmo, grid or selection glow, then restores before JPEG encoding",
  1619. "featureIds": [
  1620. "cover.capture",
  1621. "selection.highlight",
  1622. "view.grid"
  1623. ],
  1624. "kind": "unit",
  1625. "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
  1626. }
  1627. ]
  1628. },
  1629. {
  1630. "id": "view.enclosure-full",
  1631. "name": "车库外壳完整显示",
  1632. "group": "三维视口、选择与变换",
  1633. "verification": "PENDING",
  1634. "plannedEvidence": [
  1635. {
  1636. "file": "tests/scene-editor-workflow-closure.spec.ts",
  1637. "line": 121,
  1638. "evidenceName": "truck-part-history",
  1639. "testTitle": "牛奶卡车:刚性部件独立变换、软删除、历史与保存基线一致",
  1640. "kind": "browser",
  1641. "featureIds": [
  1642. "project.save-key",
  1643. "part.transform",
  1644. "part.soft-delete",
  1645. "history.undo",
  1646. "history.redo",
  1647. "property.name",
  1648. "view.enclosure-full",
  1649. "view.enclosure-xray",
  1650. "view.enclosure-hidden"
  1651. ],
  1652. "scope": "实际部件变换和软删除、按钮/键盘历史、保存基线与输入框自身撤销;双实例隔离及车库围护三种模式真实点击、导出和隐藏后保存刷新。"
  1653. }
  1654. ]
  1655. },
  1656. {
  1657. "id": "view.enclosure-xray",
  1658. "name": "车库外壳透明查看",
  1659. "group": "三维视口、选择与变换",
  1660. "verification": "PENDING",
  1661. "plannedEvidence": [
  1662. {
  1663. "file": "tests/scene-editor-workflow-closure.spec.ts",
  1664. "line": 121,
  1665. "evidenceName": "truck-part-history",
  1666. "testTitle": "牛奶卡车:刚性部件独立变换、软删除、历史与保存基线一致",
  1667. "kind": "browser",
  1668. "featureIds": [
  1669. "project.save-key",
  1670. "part.transform",
  1671. "part.soft-delete",
  1672. "history.undo",
  1673. "history.redo",
  1674. "property.name",
  1675. "view.enclosure-full",
  1676. "view.enclosure-xray",
  1677. "view.enclosure-hidden"
  1678. ],
  1679. "scope": "实际部件变换和软删除、按钮/键盘历史、保存基线与输入框自身撤销;双实例隔离及车库围护三种模式真实点击、导出和隐藏后保存刷新。"
  1680. }
  1681. ]
  1682. },
  1683. {
  1684. "id": "view.enclosure-hidden",
  1685. "name": "隐藏车库外壳",
  1686. "group": "三维视口、选择与变换",
  1687. "verification": "PENDING",
  1688. "plannedEvidence": [
  1689. {
  1690. "file": "tests/scene-editor-workflow-closure.spec.ts",
  1691. "line": 121,
  1692. "evidenceName": "truck-part-history",
  1693. "testTitle": "牛奶卡车:刚性部件独立变换、软删除、历史与保存基线一致",
  1694. "kind": "browser",
  1695. "featureIds": [
  1696. "project.save-key",
  1697. "part.transform",
  1698. "part.soft-delete",
  1699. "history.undo",
  1700. "history.redo",
  1701. "property.name",
  1702. "view.enclosure-full",
  1703. "view.enclosure-xray",
  1704. "view.enclosure-hidden"
  1705. ],
  1706. "scope": "实际部件变换和软删除、按钮/键盘历史、保存基线与输入框自身撤销;双实例隔离及车库围护三种模式真实点击、导出和隐藏后保存刷新。"
  1707. }
  1708. ]
  1709. },
  1710. {
  1711. "id": "selection.viewport",
  1712. "name": "点击视口选中根对象/部件",
  1713. "group": "三维视口、选择与变换",
  1714. "verification": "PENDING",
  1715. "plannedEvidence": [
  1716. {
  1717. "file": "tests/scene-editor-viewport-closure.spec.ts",
  1718. "line": 117,
  1719. "evidenceName": "viewport-camera-theme",
  1720. "testTitle": "真实相机操控、视口拾取、预览禁写和两尺寸主题可读性",
  1721. "kind": "browser",
  1722. "featureIds": [
  1723. "view.orbit",
  1724. "view.pan",
  1725. "view.zoom",
  1726. "view.top",
  1727. "view.perspective",
  1728. "view.grid",
  1729. "view.focus",
  1730. "selection.viewport",
  1731. "selection.highlight",
  1732. "preview.enter",
  1733. "preview.exit",
  1734. "preview.lock",
  1735. "lifecycle.resize-theme"
  1736. ],
  1737. "scope": "以源测试实际断言为准;计划关联不代表最终通过。"
  1738. }
  1739. ]
  1740. },
  1741. {
  1742. "id": "selection.tree",
  1743. "name": "大纲根对象与部件选中",
  1744. "group": "三维视口、选择与变换",
  1745. "verification": "PENDING",
  1746. "plannedEvidence": [
  1747. {
  1748. "file": "tests/scene-editor-workflow-closure.spec.ts",
  1749. "line": 64,
  1750. "evidenceName": "fox-properties-cover",
  1751. "testTitle": "狐狸:真实细分权限、全部属性、清空绑定、蒙皮保护、相机与封面保存重开",
  1752. "kind": "browser",
  1753. "featureIds": [
  1754. "project.load",
  1755. "project.title",
  1756. "project.save",
  1757. "selection.tree",
  1758. "property.name",
  1759. "property.visible",
  1760. "property.operable",
  1761. "property.position",
  1762. "property.rotation",
  1763. "property.scale",
  1764. "property.device-id",
  1765. "property.model-id",
  1766. "property.semantic",
  1767. "part.source",
  1768. "panel.binding",
  1769. "cover.capture",
  1770. "cover.atomic"
  1771. ],
  1772. "scope": "真实字段输入与清空、六个语义选项、蒙皮保护、源模型可见,正文/资产/封面保存和刷新;不把原件旧模板组合当新模板结果。"
  1773. },
  1774. {
  1775. "file": "tools/scene-closure-engine.test.mjs",
  1776. "testTitle": "two published instances have unique tree part IDs and editing the second persists independently after reopen",
  1777. "featureIds": [
  1778. "part.transform",
  1779. "selection.tree"
  1780. ],
  1781. "kind": "unit",
  1782. "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
  1783. },
  1784. {
  1785. "file": "tools/scene-closure-engine.test.mjs",
  1786. "testTitle": "successful parallel restores retain document order after delayed GLBs and split-object batches finish out of order",
  1787. "featureIds": [
  1788. "project.load",
  1789. "selection.tree"
  1790. ],
  1791. "kind": "unit",
  1792. "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
  1793. }
  1794. ]
  1795. },
  1796. {
  1797. "id": "selection.hidden",
  1798. "name": "隐藏祖先与软删除部件不可误拾取",
  1799. "group": "三维视口、选择与变换",
  1800. "verification": "PENDING",
  1801. "plannedEvidence": [
  1802. {
  1803. "file": "tools/scene-closure-engine.test.mjs",
  1804. "testTitle": "real Three ray hits on hidden descendants are excluded before selecting a root or part",
  1805. "featureIds": [
  1806. "selection.hidden"
  1807. ],
  1808. "kind": "unit",
  1809. "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
  1810. }
  1811. ]
  1812. },
  1813. {
  1814. "id": "selection.highlight",
  1815. "name": "选中高亮与恢复原材质",
  1816. "group": "三维视口、选择与变换",
  1817. "verification": "PENDING",
  1818. "plannedEvidence": [
  1819. {
  1820. "file": "tests/scene-editor-viewport-closure.spec.ts",
  1821. "line": 117,
  1822. "evidenceName": "viewport-camera-theme",
  1823. "testTitle": "真实相机操控、视口拾取、预览禁写和两尺寸主题可读性",
  1824. "kind": "browser",
  1825. "featureIds": [
  1826. "view.orbit",
  1827. "view.pan",
  1828. "view.zoom",
  1829. "view.top",
  1830. "view.perspective",
  1831. "view.grid",
  1832. "view.focus",
  1833. "selection.viewport",
  1834. "selection.highlight",
  1835. "preview.enter",
  1836. "preview.exit",
  1837. "preview.lock",
  1838. "lifecycle.resize-theme"
  1839. ],
  1840. "scope": "以源测试实际断言为准;计划关联不代表最终通过。"
  1841. },
  1842. {
  1843. "file": "tools/scene-closure-engine.test.mjs",
  1844. "testTitle": "selection highlight cleanup restores source materials and releases its own GPU helper",
  1845. "featureIds": [
  1846. "selection.highlight",
  1847. "lifecycle.destroy"
  1848. ],
  1849. "kind": "unit",
  1850. "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
  1851. },
  1852. {
  1853. "file": "tools/scene-cover-capture.test.mjs",
  1854. "testTitle": "copies synchronously without bounds, gizmo, grid or selection glow, then restores before JPEG encoding",
  1855. "featureIds": [
  1856. "cover.capture",
  1857. "selection.highlight",
  1858. "view.grid"
  1859. ],
  1860. "kind": "unit",
  1861. "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
  1862. }
  1863. ]
  1864. },
  1865. {
  1866. "id": "transform.translate",
  1867. "name": "移动工具及真实 XYZ 手柄",
  1868. "group": "三维视口、选择与变换",
  1869. "verification": "PENDING",
  1870. "plannedEvidence": [
  1871. {
  1872. "file": "tests/scene-editor-viewport-closure.spec.ts",
  1873. "line": 148,
  1874. "evidenceName": "viewport-transform",
  1875. "testTitle": "真实变换手柄移动旋转缩放、吸附与保存重开",
  1876. "kind": "browser",
  1877. "featureIds": [
  1878. "transform.translate",
  1879. "transform.rotate",
  1880. "transform.scale",
  1881. "transform.keys",
  1882. "transform.snap"
  1883. ],
  1884. "scope": "以源测试实际断言为准;计划关联不代表最终通过。"
  1885. }
  1886. ]
  1887. },
  1888. {
  1889. "id": "transform.rotate",
  1890. "name": "旋转工具及真实旋转手柄",
  1891. "group": "三维视口、选择与变换",
  1892. "verification": "PENDING",
  1893. "plannedEvidence": [
  1894. {
  1895. "file": "tests/scene-editor-viewport-closure.spec.ts",
  1896. "line": 148,
  1897. "evidenceName": "viewport-transform",
  1898. "testTitle": "真实变换手柄移动旋转缩放、吸附与保存重开",
  1899. "kind": "browser",
  1900. "featureIds": [
  1901. "transform.translate",
  1902. "transform.rotate",
  1903. "transform.scale",
  1904. "transform.keys",
  1905. "transform.snap"
  1906. ],
  1907. "scope": "以源测试实际断言为准;计划关联不代表最终通过。"
  1908. }
  1909. ]
  1910. },
  1911. {
  1912. "id": "transform.scale",
  1913. "name": "缩放工具及真实缩放手柄",
  1914. "group": "三维视口、选择与变换",
  1915. "verification": "PENDING",
  1916. "plannedEvidence": [
  1917. {
  1918. "file": "tests/scene-editor-viewport-closure.spec.ts",
  1919. "line": 148,
  1920. "evidenceName": "viewport-transform",
  1921. "testTitle": "真实变换手柄移动旋转缩放、吸附与保存重开",
  1922. "kind": "browser",
  1923. "featureIds": [
  1924. "transform.translate",
  1925. "transform.rotate",
  1926. "transform.scale",
  1927. "transform.keys",
  1928. "transform.snap"
  1929. ],
  1930. "scope": "以源测试实际断言为准;计划关联不代表最终通过。"
  1931. },
  1932. {
  1933. "file": "tools/scene-closure-engine.test.mjs",
  1934. "testTitle": "gizmo scaling across its pivot follows the same strictly positive scale contract as inspector edits",
  1935. "featureIds": [
  1936. "transform.scale",
  1937. "property.scale"
  1938. ],
  1939. "kind": "unit",
  1940. "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
  1941. }
  1942. ]
  1943. },
  1944. {
  1945. "id": "transform.keys",
  1946. "name": "W/E/R 快捷键",
  1947. "group": "三维视口、选择与变换",
  1948. "verification": "PENDING",
  1949. "plannedEvidence": [
  1950. {
  1951. "file": "tests/scene-editor-viewport-closure.spec.ts",
  1952. "line": 148,
  1953. "evidenceName": "viewport-transform",
  1954. "testTitle": "真实变换手柄移动旋转缩放、吸附与保存重开",
  1955. "kind": "browser",
  1956. "featureIds": [
  1957. "transform.translate",
  1958. "transform.rotate",
  1959. "transform.scale",
  1960. "transform.keys",
  1961. "transform.snap"
  1962. ],
  1963. "scope": "以源测试实际断言为准;计划关联不代表最终通过。"
  1964. },
  1965. {
  1966. "file": "tools/scene-closure-engine.test.mjs",
  1967. "testTitle": "typing undo/redo stays inside text controls and inactive cached editors ignore global shortcuts",
  1968. "featureIds": [
  1969. "history.undo",
  1970. "history.redo",
  1971. "transform.keys",
  1972. "lifecycle.cache"
  1973. ],
  1974. "kind": "unit",
  1975. "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
  1976. }
  1977. ]
  1978. },
  1979. {
  1980. "id": "transform.snap",
  1981. "name": "吸附 0.5m 与旋转 15° 开关",
  1982. "group": "三维视口、选择与变换",
  1983. "verification": "PENDING",
  1984. "plannedEvidence": [
  1985. {
  1986. "file": "tests/scene-editor-viewport-closure.spec.ts",
  1987. "line": 148,
  1988. "evidenceName": "viewport-transform",
  1989. "testTitle": "真实变换手柄移动旋转缩放、吸附与保存重开",
  1990. "kind": "browser",
  1991. "featureIds": [
  1992. "transform.translate",
  1993. "transform.rotate",
  1994. "transform.scale",
  1995. "transform.keys",
  1996. "transform.snap"
  1997. ],
  1998. "scope": "以源测试实际断言为准;计划关联不代表最终通过。"
  1999. }
  2000. ]
  2001. },
  2002. {
  2003. "id": "property.name",
  2004. "name": "显示名称",
  2005. "group": "对象属性、部件与底部面板",
  2006. "verification": "PENDING",
  2007. "plannedEvidence": [
  2008. {
  2009. "file": "tests/scene-editor-workflow-closure.spec.ts",
  2010. "line": 64,
  2011. "evidenceName": "fox-properties-cover",
  2012. "testTitle": "狐狸:真实细分权限、全部属性、清空绑定、蒙皮保护、相机与封面保存重开",
  2013. "kind": "browser",
  2014. "featureIds": [
  2015. "project.load",
  2016. "project.title",
  2017. "project.save",
  2018. "selection.tree",
  2019. "property.name",
  2020. "property.visible",
  2021. "property.operable",
  2022. "property.position",
  2023. "property.rotation",
  2024. "property.scale",
  2025. "property.device-id",
  2026. "property.model-id",
  2027. "property.semantic",
  2028. "part.source",
  2029. "panel.binding",
  2030. "cover.capture",
  2031. "cover.atomic"
  2032. ],
  2033. "scope": "真实字段输入与清空、六个语义选项、蒙皮保护、源模型可见,正文/资产/封面保存和刷新;不把原件旧模板组合当新模板结果。"
  2034. },
  2035. {
  2036. "file": "tests/scene-editor-workflow-closure.spec.ts",
  2037. "line": 121,
  2038. "evidenceName": "truck-part-history",
  2039. "testTitle": "牛奶卡车:刚性部件独立变换、软删除、历史与保存基线一致",
  2040. "kind": "browser",
  2041. "featureIds": [
  2042. "project.save-key",
  2043. "part.transform",
  2044. "part.soft-delete",
  2045. "history.undo",
  2046. "history.redo",
  2047. "property.name",
  2048. "view.enclosure-full",
  2049. "view.enclosure-xray",
  2050. "view.enclosure-hidden"
  2051. ],
  2052. "scope": "实际部件变换和软删除、按钮/键盘历史、保存基线与输入框自身撤销;双实例隔离及车库围护三种模式真实点击、导出和隐藏后保存刷新。"
  2053. }
  2054. ]
  2055. },
  2056. {
  2057. "id": "property.visible",
  2058. "name": "在场景中可见",
  2059. "group": "对象属性、部件与底部面板",
  2060. "verification": "PENDING",
  2061. "plannedEvidence": [
  2062. {
  2063. "file": "tests/scene-editor-templates-closure.spec.ts",
  2064. "line": 246,
  2065. "evidenceName": "published-model-assets",
  2066. "testTitle": "模型成果狐狸卡车双击与真实拖入、树搜索和部件隐藏重开",
  2067. "kind": "browser",
  2068. "featureIds": [
  2069. "assets.catalog",
  2070. "assets.model-double-click",
  2071. "assets.model-drop",
  2072. "search.tree",
  2073. "part.source",
  2074. "property.visible"
  2075. ],
  2076. "scope": "API 已发布目录,狐狸双击和卡车真实拖入;固定来源版本、树根/部件搜索;卡车刚体部件隐藏保存重开,最后恢复可见。基线树没有折叠按钮,不将搜索伪称折叠。"
  2077. },
  2078. {
  2079. "file": "tests/scene-editor-workflow-closure.spec.ts",
  2080. "line": 64,
  2081. "evidenceName": "fox-properties-cover",
  2082. "testTitle": "狐狸:真实细分权限、全部属性、清空绑定、蒙皮保护、相机与封面保存重开",
  2083. "kind": "browser",
  2084. "featureIds": [
  2085. "project.load",
  2086. "project.title",
  2087. "project.save",
  2088. "selection.tree",
  2089. "property.name",
  2090. "property.visible",
  2091. "property.operable",
  2092. "property.position",
  2093. "property.rotation",
  2094. "property.scale",
  2095. "property.device-id",
  2096. "property.model-id",
  2097. "property.semantic",
  2098. "part.source",
  2099. "panel.binding",
  2100. "cover.capture",
  2101. "cover.atomic"
  2102. ],
  2103. "scope": "真实字段输入与清空、六个语义选项、蒙皮保护、源模型可见,正文/资产/封面保存和刷新;不把原件旧模板组合当新模板结果。"
  2104. }
  2105. ]
  2106. },
  2107. {
  2108. "id": "property.operable",
  2109. "name": "可作为实训目标",
  2110. "group": "对象属性、部件与底部面板",
  2111. "verification": "PENDING",
  2112. "plannedEvidence": [
  2113. {
  2114. "file": "tests/scene-editor-workflow-closure.spec.ts",
  2115. "line": 64,
  2116. "evidenceName": "fox-properties-cover",
  2117. "testTitle": "狐狸:真实细分权限、全部属性、清空绑定、蒙皮保护、相机与封面保存重开",
  2118. "kind": "browser",
  2119. "featureIds": [
  2120. "project.load",
  2121. "project.title",
  2122. "project.save",
  2123. "selection.tree",
  2124. "property.name",
  2125. "property.visible",
  2126. "property.operable",
  2127. "property.position",
  2128. "property.rotation",
  2129. "property.scale",
  2130. "property.device-id",
  2131. "property.model-id",
  2132. "property.semantic",
  2133. "part.source",
  2134. "panel.binding",
  2135. "cover.capture",
  2136. "cover.atomic"
  2137. ],
  2138. "scope": "真实字段输入与清空、六个语义选项、蒙皮保护、源模型可见,正文/资产/封面保存和刷新;不把原件旧模板组合当新模板结果。"
  2139. }
  2140. ]
  2141. },
  2142. {
  2143. "id": "property.position",
  2144. "name": "位置 X/Y/Z 数值",
  2145. "group": "对象属性、部件与底部面板",
  2146. "verification": "PENDING",
  2147. "plannedEvidence": [
  2148. {
  2149. "file": "tests/scene-editor-workflow-closure.spec.ts",
  2150. "line": 64,
  2151. "evidenceName": "fox-properties-cover",
  2152. "testTitle": "狐狸:真实细分权限、全部属性、清空绑定、蒙皮保护、相机与封面保存重开",
  2153. "kind": "browser",
  2154. "featureIds": [
  2155. "project.load",
  2156. "project.title",
  2157. "project.save",
  2158. "selection.tree",
  2159. "property.name",
  2160. "property.visible",
  2161. "property.operable",
  2162. "property.position",
  2163. "property.rotation",
  2164. "property.scale",
  2165. "property.device-id",
  2166. "property.model-id",
  2167. "property.semantic",
  2168. "part.source",
  2169. "panel.binding",
  2170. "cover.capture",
  2171. "cover.atomic"
  2172. ],
  2173. "scope": "真实字段输入与清空、六个语义选项、蒙皮保护、源模型可见,正文/资产/封面保存和刷新;不把原件旧模板组合当新模板结果。"
  2174. }
  2175. ]
  2176. },
  2177. {
  2178. "id": "property.rotation",
  2179. "name": "旋转 X/Y/Z 数值",
  2180. "group": "对象属性、部件与底部面板",
  2181. "verification": "PENDING",
  2182. "plannedEvidence": [
  2183. {
  2184. "file": "tests/scene-editor-workflow-closure.spec.ts",
  2185. "line": 64,
  2186. "evidenceName": "fox-properties-cover",
  2187. "testTitle": "狐狸:真实细分权限、全部属性、清空绑定、蒙皮保护、相机与封面保存重开",
  2188. "kind": "browser",
  2189. "featureIds": [
  2190. "project.load",
  2191. "project.title",
  2192. "project.save",
  2193. "selection.tree",
  2194. "property.name",
  2195. "property.visible",
  2196. "property.operable",
  2197. "property.position",
  2198. "property.rotation",
  2199. "property.scale",
  2200. "property.device-id",
  2201. "property.model-id",
  2202. "property.semantic",
  2203. "part.source",
  2204. "panel.binding",
  2205. "cover.capture",
  2206. "cover.atomic"
  2207. ],
  2208. "scope": "真实字段输入与清空、六个语义选项、蒙皮保护、源模型可见,正文/资产/封面保存和刷新;不把原件旧模板组合当新模板结果。"
  2209. }
  2210. ]
  2211. },
  2212. {
  2213. "id": "property.scale",
  2214. "name": "缩放 X/Y/Z 数值及有效值",
  2215. "group": "对象属性、部件与底部面板",
  2216. "verification": "PENDING",
  2217. "plannedEvidence": [
  2218. {
  2219. "file": "tests/scene-editor-workflow-closure.spec.ts",
  2220. "line": 64,
  2221. "evidenceName": "fox-properties-cover",
  2222. "testTitle": "狐狸:真实细分权限、全部属性、清空绑定、蒙皮保护、相机与封面保存重开",
  2223. "kind": "browser",
  2224. "featureIds": [
  2225. "project.load",
  2226. "project.title",
  2227. "project.save",
  2228. "selection.tree",
  2229. "property.name",
  2230. "property.visible",
  2231. "property.operable",
  2232. "property.position",
  2233. "property.rotation",
  2234. "property.scale",
  2235. "property.device-id",
  2236. "property.model-id",
  2237. "property.semantic",
  2238. "part.source",
  2239. "panel.binding",
  2240. "cover.capture",
  2241. "cover.atomic"
  2242. ],
  2243. "scope": "真实字段输入与清空、六个语义选项、蒙皮保护、源模型可见,正文/资产/封面保存和刷新;不把原件旧模板组合当新模板结果。"
  2244. },
  2245. {
  2246. "file": "tools/scene-closure-engine.test.mjs",
  2247. "testTitle": "gizmo scaling across its pivot follows the same strictly positive scale contract as inspector edits",
  2248. "featureIds": [
  2249. "transform.scale",
  2250. "property.scale"
  2251. ],
  2252. "kind": "unit",
  2253. "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
  2254. },
  2255. {
  2256. "file": "tools/scene-model-placement.test.mjs",
  2257. "testTitle": "scale input accepts real GLTF normalization factors below 0.05",
  2258. "featureIds": [
  2259. "property.scale"
  2260. ],
  2261. "kind": "unit",
  2262. "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
  2263. }
  2264. ]
  2265. },
  2266. {
  2267. "id": "property.device-id",
  2268. "name": "设备编号",
  2269. "group": "对象属性、部件与底部面板",
  2270. "verification": "PENDING",
  2271. "plannedEvidence": [
  2272. {
  2273. "file": "tests/scene-editor-workflow-closure.spec.ts",
  2274. "line": 64,
  2275. "evidenceName": "fox-properties-cover",
  2276. "testTitle": "狐狸:真实细分权限、全部属性、清空绑定、蒙皮保护、相机与封面保存重开",
  2277. "kind": "browser",
  2278. "featureIds": [
  2279. "project.load",
  2280. "project.title",
  2281. "project.save",
  2282. "selection.tree",
  2283. "property.name",
  2284. "property.visible",
  2285. "property.operable",
  2286. "property.position",
  2287. "property.rotation",
  2288. "property.scale",
  2289. "property.device-id",
  2290. "property.model-id",
  2291. "property.semantic",
  2292. "part.source",
  2293. "panel.binding",
  2294. "cover.capture",
  2295. "cover.atomic"
  2296. ],
  2297. "scope": "真实字段输入与清空、六个语义选项、蒙皮保护、源模型可见,正文/资产/封面保存和刷新;不把原件旧模板组合当新模板结果。"
  2298. }
  2299. ]
  2300. },
  2301. {
  2302. "id": "property.model-id",
  2303. "name": "物模型编号",
  2304. "group": "对象属性、部件与底部面板",
  2305. "verification": "PENDING",
  2306. "plannedEvidence": [
  2307. {
  2308. "file": "tests/scene-editor-workflow-closure.spec.ts",
  2309. "line": 64,
  2310. "evidenceName": "fox-properties-cover",
  2311. "testTitle": "狐狸:真实细分权限、全部属性、清空绑定、蒙皮保护、相机与封面保存重开",
  2312. "kind": "browser",
  2313. "featureIds": [
  2314. "project.load",
  2315. "project.title",
  2316. "project.save",
  2317. "selection.tree",
  2318. "property.name",
  2319. "property.visible",
  2320. "property.operable",
  2321. "property.position",
  2322. "property.rotation",
  2323. "property.scale",
  2324. "property.device-id",
  2325. "property.model-id",
  2326. "property.semantic",
  2327. "part.source",
  2328. "panel.binding",
  2329. "cover.capture",
  2330. "cover.atomic"
  2331. ],
  2332. "scope": "真实字段输入与清空、六个语义选项、蒙皮保护、源模型可见,正文/资产/封面保存和刷新;不把原件旧模板组合当新模板结果。"
  2333. }
  2334. ]
  2335. },
  2336. {
  2337. "id": "property.semantic",
  2338. "name": "语义类型六个选项",
  2339. "group": "对象属性、部件与底部面板",
  2340. "verification": "PENDING",
  2341. "plannedEvidence": [
  2342. {
  2343. "file": "tests/scene-editor-workflow-closure.spec.ts",
  2344. "line": 64,
  2345. "evidenceName": "fox-properties-cover",
  2346. "testTitle": "狐狸:真实细分权限、全部属性、清空绑定、蒙皮保护、相机与封面保存重开",
  2347. "kind": "browser",
  2348. "featureIds": [
  2349. "project.load",
  2350. "project.title",
  2351. "project.save",
  2352. "selection.tree",
  2353. "property.name",
  2354. "property.visible",
  2355. "property.operable",
  2356. "property.position",
  2357. "property.rotation",
  2358. "property.scale",
  2359. "property.device-id",
  2360. "property.model-id",
  2361. "property.semantic",
  2362. "part.source",
  2363. "panel.binding",
  2364. "cover.capture",
  2365. "cover.atomic"
  2366. ],
  2367. "scope": "真实字段输入与清空、六个语义选项、蒙皮保护、源模型可见,正文/资产/封面保存和刷新;不把原件旧模板组合当新模板结果。"
  2368. }
  2369. ]
  2370. },
  2371. {
  2372. "id": "part.source",
  2373. "name": "模型来源与部件权限说明",
  2374. "group": "对象属性、部件与底部面板",
  2375. "verification": "PENDING",
  2376. "plannedEvidence": [
  2377. {
  2378. "file": "tests/scene-editor-templates-closure.spec.ts",
  2379. "line": 246,
  2380. "evidenceName": "published-model-assets",
  2381. "testTitle": "模型成果狐狸卡车双击与真实拖入、树搜索和部件隐藏重开",
  2382. "kind": "browser",
  2383. "featureIds": [
  2384. "assets.catalog",
  2385. "assets.model-double-click",
  2386. "assets.model-drop",
  2387. "search.tree",
  2388. "part.source",
  2389. "property.visible"
  2390. ],
  2391. "scope": "API 已发布目录,狐狸双击和卡车真实拖入;固定来源版本、树根/部件搜索;卡车刚体部件隐藏保存重开,最后恢复可见。基线树没有折叠按钮,不将搜索伪称折叠。"
  2392. },
  2393. {
  2394. "file": "tests/scene-editor-workflow-closure.spec.ts",
  2395. "line": 64,
  2396. "evidenceName": "fox-properties-cover",
  2397. "testTitle": "狐狸:真实细分权限、全部属性、清空绑定、蒙皮保护、相机与封面保存重开",
  2398. "kind": "browser",
  2399. "featureIds": [
  2400. "project.load",
  2401. "project.title",
  2402. "project.save",
  2403. "selection.tree",
  2404. "property.name",
  2405. "property.visible",
  2406. "property.operable",
  2407. "property.position",
  2408. "property.rotation",
  2409. "property.scale",
  2410. "property.device-id",
  2411. "property.model-id",
  2412. "property.semantic",
  2413. "part.source",
  2414. "panel.binding",
  2415. "cover.capture",
  2416. "cover.atomic"
  2417. ],
  2418. "scope": "真实字段输入与清空、六个语义选项、蒙皮保护、源模型可见,正文/资产/封面保存和刷新;不把原件旧模板组合当新模板结果。"
  2419. }
  2420. ]
  2421. },
  2422. {
  2423. "id": "part.transform",
  2424. "name": "刚性部件独立变换并保存覆盖",
  2425. "group": "对象属性、部件与底部面板",
  2426. "verification": "PENDING",
  2427. "plannedEvidence": [
  2428. {
  2429. "file": "tests/scene-editor-workflow-closure.spec.ts",
  2430. "line": 121,
  2431. "evidenceName": "truck-part-history",
  2432. "testTitle": "牛奶卡车:刚性部件独立变换、软删除、历史与保存基线一致",
  2433. "kind": "browser",
  2434. "featureIds": [
  2435. "project.save-key",
  2436. "part.transform",
  2437. "part.soft-delete",
  2438. "history.undo",
  2439. "history.redo",
  2440. "property.name",
  2441. "view.enclosure-full",
  2442. "view.enclosure-xray",
  2443. "view.enclosure-hidden"
  2444. ],
  2445. "scope": "实际部件变换和软删除、按钮/键盘历史、保存基线与输入框自身撤销;双实例隔离及车库围护三种模式真实点击、导出和隐藏后保存刷新。"
  2446. },
  2447. {
  2448. "file": "tools/scene-closure-engine.test.mjs",
  2449. "testTitle": "two published instances have unique tree part IDs and editing the second persists independently after reopen",
  2450. "featureIds": [
  2451. "part.transform",
  2452. "selection.tree"
  2453. ],
  2454. "kind": "unit",
  2455. "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
  2456. },
  2457. {
  2458. "file": "tools/scene-closure-engine.test.mjs",
  2459. "testTitle": "legacy duplicate instance IDs migrate only later owners in document order despite reversed GLB completion",
  2460. "featureIds": [
  2461. "part.transform",
  2462. "publish.fixed-model"
  2463. ],
  2464. "kind": "unit",
  2465. "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
  2466. }
  2467. ]
  2468. },
  2469. {
  2470. "id": "part.soft-delete",
  2471. "name": "部件软删除与恢复",
  2472. "group": "对象属性、部件与底部面板",
  2473. "verification": "PENDING",
  2474. "plannedEvidence": [
  2475. {
  2476. "file": "tests/scene-editor-workflow-closure.spec.ts",
  2477. "line": 121,
  2478. "evidenceName": "truck-part-history",
  2479. "testTitle": "牛奶卡车:刚性部件独立变换、软删除、历史与保存基线一致",
  2480. "kind": "browser",
  2481. "featureIds": [
  2482. "project.save-key",
  2483. "part.transform",
  2484. "part.soft-delete",
  2485. "history.undo",
  2486. "history.redo",
  2487. "property.name",
  2488. "view.enclosure-full",
  2489. "view.enclosure-xray",
  2490. "view.enclosure-hidden"
  2491. ],
  2492. "scope": "实际部件变换和软删除、按钮/键盘历史、保存基线与输入框自身撤销;双实例隔离及车库围护三种模式真实点击、导出和隐藏后保存刷新。"
  2493. }
  2494. ]
  2495. },
  2496. {
  2497. "id": "object.delete",
  2498. "name": "删除根对象按钮 / Delete",
  2499. "group": "对象属性、部件与底部面板",
  2500. "verification": "PENDING",
  2501. "plannedEvidence": [
  2502. {
  2503. "file": "tests/scene-editor-templates-closure.spec.ts",
  2504. "line": 193,
  2505. "evidenceName": "venue-assets",
  2506. "testTitle": "两种整体场地加载、重复放置阻止与显式删除后替换",
  2507. "kind": "browser",
  2508. "featureIds": [
  2509. "asset.vehicle-depot",
  2510. "asset.field-terrain",
  2511. "object.delete"
  2512. ],
  2513. "scope": "车库和起伏地形真实加载并分别保存重开;已有整体场地时阻止叠加,显式删除旧场地后才能替换。"
  2514. },
  2515. {
  2516. "file": "tools/scene-closure-engine.test.mjs",
  2517. "testTitle": "deleting a root disposes its geometry and materials after clearing selection",
  2518. "featureIds": [
  2519. "object.delete",
  2520. "lifecycle.destroy"
  2521. ],
  2522. "kind": "unit",
  2523. "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
  2524. }
  2525. ]
  2526. },
  2527. {
  2528. "id": "panel.objects",
  2529. "name": "底部对象列表与选中",
  2530. "group": "对象属性、部件与底部面板",
  2531. "verification": "PENDING",
  2532. "plannedEvidence": [
  2533. {
  2534. "file": "tests/scene-editor-templates-closure.spec.ts",
  2535. "line": 161,
  2536. "evidenceName": "basic-assets",
  2537. "testTitle": "八种基础资源逐项放置、真实拖放、搜索和保存重开",
  2538. "kind": "browser",
  2539. "featureIds": [
  2540. "assets.basic-double-click",
  2541. "assets.basic-drop",
  2542. "search.assets",
  2543. "panel.objects",
  2544. "asset.diagnostic",
  2545. "asset.equipment",
  2546. "asset.workbench",
  2547. "asset.shelf",
  2548. "asset.safety-zone",
  2549. "asset.camera",
  2550. "asset.worker",
  2551. "asset.light"
  2552. ],
  2553. "scope": "8 种基础资源分别双击放置并分开布置;真实指针拖入第 9 个工作台、吸附检查、唯一编号、保存刷新一致。照明为现有资源外观,不冒称连接真实灯控。"
  2554. }
  2555. ]
  2556. },
  2557. {
  2558. "id": "panel.binding",
  2559. "name": "设备绑定总表",
  2560. "group": "对象属性、部件与底部面板",
  2561. "verification": "PENDING",
  2562. "plannedEvidence": [
  2563. {
  2564. "file": "tests/scene-editor-workflow-closure.spec.ts",
  2565. "line": 64,
  2566. "evidenceName": "fox-properties-cover",
  2567. "testTitle": "狐狸:真实细分权限、全部属性、清空绑定、蒙皮保护、相机与封面保存重开",
  2568. "kind": "browser",
  2569. "featureIds": [
  2570. "project.load",
  2571. "project.title",
  2572. "project.save",
  2573. "selection.tree",
  2574. "property.name",
  2575. "property.visible",
  2576. "property.operable",
  2577. "property.position",
  2578. "property.rotation",
  2579. "property.scale",
  2580. "property.device-id",
  2581. "property.model-id",
  2582. "property.semantic",
  2583. "part.source",
  2584. "panel.binding",
  2585. "cover.capture",
  2586. "cover.atomic"
  2587. ],
  2588. "scope": "真实字段输入与清空、六个语义选项、蒙皮保护、源模型可见,正文/资产/封面保存和刷新;不把原件旧模板组合当新模板结果。"
  2589. }
  2590. ]
  2591. },
  2592. {
  2593. "id": "panel.validation",
  2594. "name": "底部发布检查面板",
  2595. "group": "对象属性、部件与底部面板",
  2596. "verification": "PENDING",
  2597. "plannedEvidence": [
  2598. {
  2599. "file": "tests/scene-editor-persistence-closure.spec.ts",
  2600. "line": 153,
  2601. "evidenceName": "publish-fixed-version",
  2602. "testTitle": "发布:前端绑定校验、保存与发布失败阻断、真实固定版本供训练目录使用",
  2603. "kind": "browser",
  2604. "featureIds": [
  2605. "validation.complete",
  2606. "validation.bindings",
  2607. "panel.validation",
  2608. "publish.saved",
  2609. "publish.failure",
  2610. "publish.fixed-model",
  2611. "cover.atomic",
  2612. "project.back"
  2613. ],
  2614. "scope": "实际校验、绑定阻断、POST503不假发布,重试发布当前固定版本;返回列表保留编辑标签,搜索当前项目并核对真实封面图片加载。下游静态渲染另有独立用例。"
  2615. },
  2616. {
  2617. "file": "tools/scene-closure-engine.test.mjs",
  2618. "testTitle": "verify opens live validation and whitespace binding edits immediately invalidate the active tab",
  2619. "featureIds": [
  2620. "panel.validation",
  2621. "validation.bindings"
  2622. ],
  2623. "kind": "unit",
  2624. "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
  2625. }
  2626. ]
  2627. },
  2628. {
  2629. "id": "panel.logs",
  2630. "name": "操作日志",
  2631. "group": "对象属性、部件与底部面板",
  2632. "verification": "PENDING",
  2633. "plannedEvidence": [
  2634. {
  2635. "file": "tools/scene-closure-engine.test.mjs",
  2636. "testTitle": "activity log reflects actual session events and keeps API error details transient",
  2637. "featureIds": [
  2638. "panel.logs"
  2639. ],
  2640. "kind": "unit",
  2641. "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
  2642. }
  2643. ]
  2644. },
  2645. {
  2646. "id": "history.undo",
  2647. "name": "回退按钮 / Ctrl+Z",
  2648. "group": "历史与预览",
  2649. "verification": "PENDING",
  2650. "plannedEvidence": [
  2651. {
  2652. "file": "tests/scene-editor-workflow-closure.spec.ts",
  2653. "line": 121,
  2654. "evidenceName": "truck-part-history",
  2655. "testTitle": "牛奶卡车:刚性部件独立变换、软删除、历史与保存基线一致",
  2656. "kind": "browser",
  2657. "featureIds": [
  2658. "project.save-key",
  2659. "part.transform",
  2660. "part.soft-delete",
  2661. "history.undo",
  2662. "history.redo",
  2663. "property.name",
  2664. "view.enclosure-full",
  2665. "view.enclosure-xray",
  2666. "view.enclosure-hidden"
  2667. ],
  2668. "scope": "实际部件变换和软删除、按钮/键盘历史、保存基线与输入框自身撤销;双实例隔离及车库围护三种模式真实点击、导出和隐藏后保存刷新。"
  2669. },
  2670. {
  2671. "file": "tools/scene-closure-engine.test.mjs",
  2672. "testTitle": "typing undo/redo stays inside text controls and inactive cached editors ignore global shortcuts",
  2673. "featureIds": [
  2674. "history.undo",
  2675. "history.redo",
  2676. "transform.keys",
  2677. "lifecycle.cache"
  2678. ],
  2679. "kind": "unit",
  2680. "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
  2681. },
  2682. {
  2683. "file": "tools/scene-closure-engine.test.mjs",
  2684. "testTitle": "loading and history restoration preserve an authored camera rather than auto-focusing a vehicle",
  2685. "featureIds": [
  2686. "json.rendering",
  2687. "history.undo"
  2688. ],
  2689. "kind": "unit",
  2690. "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
  2691. },
  2692. {
  2693. "file": "tools/scene-closure-engine.test.mjs",
  2694. "testTitle": "save B then undo A stays dirty, and redo B returns to the actual saved baseline",
  2695. "featureIds": [
  2696. "history.undo",
  2697. "history.redo"
  2698. ],
  2699. "kind": "unit",
  2700. "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
  2701. },
  2702. {
  2703. "file": "tools/scene-closure-engine.test.mjs",
  2704. "testTitle": "default history caps at 60 snapshots, stops at either edge and discards redo only after a new branch",
  2705. "featureIds": [
  2706. "history.capacity",
  2707. "history.undo",
  2708. "history.redo"
  2709. ],
  2710. "kind": "unit",
  2711. "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
  2712. }
  2713. ]
  2714. },
  2715. {
  2716. "id": "history.redo",
  2717. "name": "前进按钮 / Ctrl+Y / Ctrl+Shift+Z",
  2718. "group": "历史与预览",
  2719. "verification": "PENDING",
  2720. "plannedEvidence": [
  2721. {
  2722. "file": "tests/scene-editor-workflow-closure.spec.ts",
  2723. "line": 121,
  2724. "evidenceName": "truck-part-history",
  2725. "testTitle": "牛奶卡车:刚性部件独立变换、软删除、历史与保存基线一致",
  2726. "kind": "browser",
  2727. "featureIds": [
  2728. "project.save-key",
  2729. "part.transform",
  2730. "part.soft-delete",
  2731. "history.undo",
  2732. "history.redo",
  2733. "property.name",
  2734. "view.enclosure-full",
  2735. "view.enclosure-xray",
  2736. "view.enclosure-hidden"
  2737. ],
  2738. "scope": "实际部件变换和软删除、按钮/键盘历史、保存基线与输入框自身撤销;双实例隔离及车库围护三种模式真实点击、导出和隐藏后保存刷新。"
  2739. },
  2740. {
  2741. "file": "tools/scene-closure-engine.test.mjs",
  2742. "testTitle": "typing undo/redo stays inside text controls and inactive cached editors ignore global shortcuts",
  2743. "featureIds": [
  2744. "history.undo",
  2745. "history.redo",
  2746. "transform.keys",
  2747. "lifecycle.cache"
  2748. ],
  2749. "kind": "unit",
  2750. "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
  2751. },
  2752. {
  2753. "file": "tools/scene-closure-engine.test.mjs",
  2754. "testTitle": "save B then undo A stays dirty, and redo B returns to the actual saved baseline",
  2755. "featureIds": [
  2756. "history.undo",
  2757. "history.redo"
  2758. ],
  2759. "kind": "unit",
  2760. "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
  2761. },
  2762. {
  2763. "file": "tools/scene-closure-engine.test.mjs",
  2764. "testTitle": "default history caps at 60 snapshots, stops at either edge and discards redo only after a new branch",
  2765. "featureIds": [
  2766. "history.capacity",
  2767. "history.undo",
  2768. "history.redo"
  2769. ],
  2770. "kind": "unit",
  2771. "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
  2772. }
  2773. ]
  2774. },
  2775. {
  2776. "id": "history.capacity",
  2777. "name": "60 步历史上限与边界",
  2778. "group": "历史与预览",
  2779. "verification": "PENDING",
  2780. "plannedEvidence": [
  2781. {
  2782. "file": "tools/scene-closure-engine.test.mjs",
  2783. "testTitle": "default history caps at 60 snapshots, stops at either edge and discards redo only after a new branch",
  2784. "featureIds": [
  2785. "history.capacity",
  2786. "history.undo",
  2787. "history.redo"
  2788. ],
  2789. "kind": "unit",
  2790. "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
  2791. }
  2792. ]
  2793. },
  2794. {
  2795. "id": "history.failure",
  2796. "name": "异步历史恢复失败/互斥",
  2797. "group": "历史与预览",
  2798. "verification": "PENDING",
  2799. "plannedEvidence": [
  2800. {
  2801. "file": "tools/scene-closure-engine.test.mjs",
  2802. "testTitle": "failed undo restoration retains live objects and keeps the undo target available for retry",
  2803. "featureIds": [
  2804. "history.failure"
  2805. ],
  2806. "kind": "unit",
  2807. "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
  2808. },
  2809. {
  2810. "file": "tools/scene-closure-engine.test.mjs",
  2811. "testTitle": "replacement failure waits for other started loads before restoring the original scene",
  2812. "featureIds": [
  2813. "history.failure",
  2814. "glb.pending"
  2815. ],
  2816. "kind": "unit",
  2817. "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
  2818. }
  2819. ]
  2820. },
  2821. {
  2822. "id": "preview.enter",
  2823. "name": "进入运行预览",
  2824. "group": "历史与预览",
  2825. "verification": "PENDING",
  2826. "plannedEvidence": [
  2827. {
  2828. "file": "tests/scene-editor-viewport-closure.spec.ts",
  2829. "line": 117,
  2830. "evidenceName": "viewport-camera-theme",
  2831. "testTitle": "真实相机操控、视口拾取、预览禁写和两尺寸主题可读性",
  2832. "kind": "browser",
  2833. "featureIds": [
  2834. "view.orbit",
  2835. "view.pan",
  2836. "view.zoom",
  2837. "view.top",
  2838. "view.perspective",
  2839. "view.grid",
  2840. "view.focus",
  2841. "selection.viewport",
  2842. "selection.highlight",
  2843. "preview.enter",
  2844. "preview.exit",
  2845. "preview.lock",
  2846. "lifecycle.resize-theme"
  2847. ],
  2848. "scope": "以源测试实际断言为准;计划关联不代表最终通过。"
  2849. },
  2850. {
  2851. "file": "tests/scene-editor-workflow-closure.spec.ts",
  2852. "line": 190,
  2853. "evidenceName": "readonly",
  2854. "testTitle": "只读管理员:可浏览预览与导出,模板/资源/键盘/接口不能改场景",
  2855. "kind": "browser",
  2856. "featureIds": [
  2857. "permission.readonly",
  2858. "permission.update",
  2859. "permission.publish",
  2860. "preview.enter",
  2861. "preview.exit",
  2862. "preview.lock",
  2863. "json.export"
  2864. ],
  2865. "scope": "只读按钮/模板/资源禁写、蒙皮浏览、运行预览与快捷键不变更对象,直接PUT拒绝;具体搜索/鼠标覆盖另见视口用例。"
  2866. }
  2867. ]
  2868. },
  2869. {
  2870. "id": "preview.exit",
  2871. "name": "按钮 / Escape 退出预览",
  2872. "group": "历史与预览",
  2873. "verification": "PENDING",
  2874. "plannedEvidence": [
  2875. {
  2876. "file": "tests/scene-editor-viewport-closure.spec.ts",
  2877. "line": 117,
  2878. "evidenceName": "viewport-camera-theme",
  2879. "testTitle": "真实相机操控、视口拾取、预览禁写和两尺寸主题可读性",
  2880. "kind": "browser",
  2881. "featureIds": [
  2882. "view.orbit",
  2883. "view.pan",
  2884. "view.zoom",
  2885. "view.top",
  2886. "view.perspective",
  2887. "view.grid",
  2888. "view.focus",
  2889. "selection.viewport",
  2890. "selection.highlight",
  2891. "preview.enter",
  2892. "preview.exit",
  2893. "preview.lock",
  2894. "lifecycle.resize-theme"
  2895. ],
  2896. "scope": "以源测试实际断言为准;计划关联不代表最终通过。"
  2897. },
  2898. {
  2899. "file": "tests/scene-editor-workflow-closure.spec.ts",
  2900. "line": 190,
  2901. "evidenceName": "readonly",
  2902. "testTitle": "只读管理员:可浏览预览与导出,模板/资源/键盘/接口不能改场景",
  2903. "kind": "browser",
  2904. "featureIds": [
  2905. "permission.readonly",
  2906. "permission.update",
  2907. "permission.publish",
  2908. "preview.enter",
  2909. "preview.exit",
  2910. "preview.lock",
  2911. "json.export"
  2912. ],
  2913. "scope": "只读按钮/模板/资源禁写、蒙皮浏览、运行预览与快捷键不变更对象,直接PUT拒绝;具体搜索/鼠标覆盖另见视口用例。"
  2914. },
  2915. {
  2916. "file": "tools/scene-closure-engine.test.mjs",
  2917. "testTitle": "preview locks mutation controls and Delete while Escape restores editing",
  2918. "featureIds": [
  2919. "preview.lock",
  2920. "preview.exit"
  2921. ],
  2922. "kind": "unit",
  2923. "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
  2924. }
  2925. ]
  2926. },
  2927. {
  2928. "id": "preview.lock",
  2929. "name": "预览中禁止编辑",
  2930. "group": "历史与预览",
  2931. "verification": "PENDING",
  2932. "plannedEvidence": [
  2933. {
  2934. "file": "tests/scene-editor-viewport-closure.spec.ts",
  2935. "line": 117,
  2936. "evidenceName": "viewport-camera-theme",
  2937. "testTitle": "真实相机操控、视口拾取、预览禁写和两尺寸主题可读性",
  2938. "kind": "browser",
  2939. "featureIds": [
  2940. "view.orbit",
  2941. "view.pan",
  2942. "view.zoom",
  2943. "view.top",
  2944. "view.perspective",
  2945. "view.grid",
  2946. "view.focus",
  2947. "selection.viewport",
  2948. "selection.highlight",
  2949. "preview.enter",
  2950. "preview.exit",
  2951. "preview.lock",
  2952. "lifecycle.resize-theme"
  2953. ],
  2954. "scope": "以源测试实际断言为准;计划关联不代表最终通过。"
  2955. },
  2956. {
  2957. "file": "tests/scene-editor-workflow-closure.spec.ts",
  2958. "line": 190,
  2959. "evidenceName": "readonly",
  2960. "testTitle": "只读管理员:可浏览预览与导出,模板/资源/键盘/接口不能改场景",
  2961. "kind": "browser",
  2962. "featureIds": [
  2963. "permission.readonly",
  2964. "permission.update",
  2965. "permission.publish",
  2966. "preview.enter",
  2967. "preview.exit",
  2968. "preview.lock",
  2969. "json.export"
  2970. ],
  2971. "scope": "只读按钮/模板/资源禁写、蒙皮浏览、运行预览与快捷键不变更对象,直接PUT拒绝;具体搜索/鼠标覆盖另见视口用例。"
  2972. },
  2973. {
  2974. "file": "tools/scene-closure-engine.test.mjs",
  2975. "testTitle": "preview locks mutation controls and Delete while Escape restores editing",
  2976. "featureIds": [
  2977. "preview.lock",
  2978. "preview.exit"
  2979. ],
  2980. "kind": "unit",
  2981. "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
  2982. }
  2983. ]
  2984. },
  2985. {
  2986. "id": "cover.capture",
  2987. "name": "保存时截取当前三维场景封面",
  2988. "group": "保存封面、发布与依赖",
  2989. "verification": "PENDING",
  2990. "plannedEvidence": [
  2991. {
  2992. "file": "tests/scene-editor-workflow-closure.spec.ts",
  2993. "line": 64,
  2994. "evidenceName": "fox-properties-cover",
  2995. "testTitle": "狐狸:真实细分权限、全部属性、清空绑定、蒙皮保护、相机与封面保存重开",
  2996. "kind": "browser",
  2997. "featureIds": [
  2998. "project.load",
  2999. "project.title",
  3000. "project.save",
  3001. "selection.tree",
  3002. "property.name",
  3003. "property.visible",
  3004. "property.operable",
  3005. "property.position",
  3006. "property.rotation",
  3007. "property.scale",
  3008. "property.device-id",
  3009. "property.model-id",
  3010. "property.semantic",
  3011. "part.source",
  3012. "panel.binding",
  3013. "cover.capture",
  3014. "cover.atomic"
  3015. ],
  3016. "scope": "真实字段输入与清空、六个语义选项、蒙皮保护、源模型可见,正文/资产/封面保存和刷新;不把原件旧模板组合当新模板结果。"
  3017. },
  3018. {
  3019. "file": "tools/scene-cover-capture.test.mjs",
  3020. "testTitle": "copies synchronously without bounds, gizmo, grid or selection glow, then restores before JPEG encoding",
  3021. "featureIds": [
  3022. "cover.capture",
  3023. "selection.highlight",
  3024. "view.grid"
  3025. ],
  3026. "kind": "unit",
  3027. "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
  3028. }
  3029. ]
  3030. },
  3031. {
  3032. "id": "cover.atomic",
  3033. "name": "封面资产与文档同次保存",
  3034. "group": "保存封面、发布与依赖",
  3035. "verification": "PENDING",
  3036. "plannedEvidence": [
  3037. {
  3038. "file": "tests/scene-editor-persistence-closure.spec.ts",
  3039. "line": 153,
  3040. "evidenceName": "publish-fixed-version",
  3041. "testTitle": "发布:前端绑定校验、保存与发布失败阻断、真实固定版本供训练目录使用",
  3042. "kind": "browser",
  3043. "featureIds": [
  3044. "validation.complete",
  3045. "validation.bindings",
  3046. "panel.validation",
  3047. "publish.saved",
  3048. "publish.failure",
  3049. "publish.fixed-model",
  3050. "cover.atomic",
  3051. "project.back"
  3052. ],
  3053. "scope": "实际校验、绑定阻断、POST503不假发布,重试发布当前固定版本;返回列表保留编辑标签,搜索当前项目并核对真实封面图片加载。下游静态渲染另有独立用例。"
  3054. },
  3055. {
  3056. "file": "tests/scene-editor-workflow-closure.spec.ts",
  3057. "line": 64,
  3058. "evidenceName": "fox-properties-cover",
  3059. "testTitle": "狐狸:真实细分权限、全部属性、清空绑定、蒙皮保护、相机与封面保存重开",
  3060. "kind": "browser",
  3061. "featureIds": [
  3062. "project.load",
  3063. "project.title",
  3064. "project.save",
  3065. "selection.tree",
  3066. "property.name",
  3067. "property.visible",
  3068. "property.operable",
  3069. "property.position",
  3070. "property.rotation",
  3071. "property.scale",
  3072. "property.device-id",
  3073. "property.model-id",
  3074. "property.semantic",
  3075. "part.source",
  3076. "panel.binding",
  3077. "cover.capture",
  3078. "cover.atomic"
  3079. ],
  3080. "scope": "真实字段输入与清空、六个语义选项、蒙皮保护、源模型可见,正文/资产/封面保存和刷新;不把原件旧模板组合当新模板结果。"
  3081. },
  3082. {
  3083. "file": "tools/scene-cover-api.test.mjs",
  3084. "testTitle": "scene image ticket, fixed asset replacement, dependencies and coverUri commit in one versioned PUT",
  3085. "featureIds": [
  3086. "cover.atomic"
  3087. ],
  3088. "kind": "unit",
  3089. "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
  3090. }
  3091. ]
  3092. },
  3093. {
  3094. "id": "cover.failure",
  3095. "name": "截图/封面上传失败保留原封面",
  3096. "group": "保存封面、发布与依赖",
  3097. "verification": "PENDING",
  3098. "plannedEvidence": [
  3099. {
  3100. "file": "tests/scene-editor-persistence-closure.spec.ts",
  3101. "line": 85,
  3102. "evidenceName": "save-cover-failure",
  3103. "testTitle": "保存失败与封面降级:503 保留草稿,封面上传失败保留旧图,恢复后可重试",
  3104. "kind": "browser",
  3105. "featureIds": [
  3106. "project.save-failure",
  3107. "cover.failure"
  3108. ],
  3109. "scope": "正文PUT503不清草稿;封面上传503保留旧图但正文可保存;恢复服务后保存刷新。截图异常和409另由聚焦合同验证。"
  3110. },
  3111. {
  3112. "file": "tools/scene-cover-api.test.mjs",
  3113. "testTitle": "capture failure saves content with the previous cover and reports a warning result",
  3114. "featureIds": [
  3115. "cover.failure"
  3116. ],
  3117. "kind": "unit",
  3118. "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
  3119. },
  3120. {
  3121. "file": "tools/scene-cover-api.test.mjs",
  3122. "testTitle": "upload conflict propagates without any content PUT",
  3123. "featureIds": [
  3124. "project.conflict",
  3125. "cover.failure"
  3126. ],
  3127. "kind": "unit",
  3128. "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
  3129. }
  3130. ]
  3131. },
  3132. {
  3133. "id": "validation.complete",
  3134. "name": "环境、对象用途、模型加载检查",
  3135. "group": "保存封面、发布与依赖",
  3136. "verification": "PENDING",
  3137. "plannedEvidence": [
  3138. {
  3139. "file": "tests/scene-editor-persistence-closure.spec.ts",
  3140. "line": 153,
  3141. "evidenceName": "publish-fixed-version",
  3142. "testTitle": "发布:前端绑定校验、保存与发布失败阻断、真实固定版本供训练目录使用",
  3143. "kind": "browser",
  3144. "featureIds": [
  3145. "validation.complete",
  3146. "validation.bindings",
  3147. "panel.validation",
  3148. "publish.saved",
  3149. "publish.failure",
  3150. "publish.fixed-model",
  3151. "cover.atomic",
  3152. "project.back"
  3153. ],
  3154. "scope": "实际校验、绑定阻断、POST503不假发布,重试发布当前固定版本;返回列表保留编辑标签,搜索当前项目并核对真实封面图片加载。下游静态渲染另有独立用例。"
  3155. }
  3156. ]
  3157. },
  3158. {
  3159. "id": "validation.bindings",
  3160. "name": "设备/物模型编号完整与唯一",
  3161. "group": "保存封面、发布与依赖",
  3162. "verification": "PENDING",
  3163. "plannedEvidence": [
  3164. {
  3165. "file": "tests/scene-editor-persistence-closure.spec.ts",
  3166. "line": 153,
  3167. "evidenceName": "publish-fixed-version",
  3168. "testTitle": "发布:前端绑定校验、保存与发布失败阻断、真实固定版本供训练目录使用",
  3169. "kind": "browser",
  3170. "featureIds": [
  3171. "validation.complete",
  3172. "validation.bindings",
  3173. "panel.validation",
  3174. "publish.saved",
  3175. "publish.failure",
  3176. "publish.fixed-model",
  3177. "cover.atomic",
  3178. "project.back"
  3179. ],
  3180. "scope": "实际校验、绑定阻断、POST503不假发布,重试发布当前固定版本;返回列表保留编辑标签,搜索当前项目并核对真实封面图片加载。下游静态渲染另有独立用例。"
  3181. },
  3182. {
  3183. "file": "tools/scene-closure-engine.test.mjs",
  3184. "testTitle": "new resource bindings do not reuse a saved serial after earlier objects were deleted",
  3185. "featureIds": [
  3186. "validation.bindings"
  3187. ],
  3188. "kind": "unit",
  3189. "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
  3190. },
  3191. {
  3192. "file": "tools/scene-closure-engine.test.mjs",
  3193. "testTitle": "verify opens live validation and whitespace binding edits immediately invalidate the active tab",
  3194. "featureIds": [
  3195. "panel.validation",
  3196. "validation.bindings"
  3197. ],
  3198. "kind": "unit",
  3199. "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
  3200. }
  3201. ]
  3202. },
  3203. {
  3204. "id": "validation.references",
  3205. "name": "受控资源引用完整性",
  3206. "group": "保存封面、发布与依赖",
  3207. "verification": "PENDING",
  3208. "plannedEvidence": [
  3209. {
  3210. "file": "tests/scene-editor-persistence-closure.spec.ts",
  3211. "line": 61,
  3212. "evidenceName": "json-glb-roundtrip",
  3213. "testTitle": "工程 JSON 与小 GLB:真实上传、损坏拒绝、引用失败回滚、相机参数往返",
  3214. "kind": "browser",
  3215. "featureIds": [
  3216. "json.export",
  3217. "json.import",
  3218. "json.invalid",
  3219. "json.missing-resource",
  3220. "json.rendering",
  3221. "glb.import",
  3222. "glb.invalid",
  3223. "glb.references",
  3224. "validation.references"
  3225. ],
  3226. "scope": "真实JSON/GLB文件输入、错误schema/损坏资源/上传503拒绝、错误assetCode回滚、稳定URI及渲染参数保存重开。"
  3227. },
  3228. {
  3229. "file": "tools/scene-closure-assets.test.mjs",
  3230. "testTitle": "an explicit missing code cannot fall back to the first READY asset",
  3231. "featureIds": [
  3232. "validation.references",
  3233. "json.missing-resource"
  3234. ],
  3235. "kind": "unit",
  3236. "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
  3237. }
  3238. ]
  3239. },
  3240. {
  3241. "id": "publish.saved",
  3242. "name": "发布场景按钮的真实 API 闭环",
  3243. "group": "保存封面、发布与依赖",
  3244. "verification": "PENDING",
  3245. "plannedEvidence": [
  3246. {
  3247. "file": "tests/scene-editor-persistence-closure.spec.ts",
  3248. "line": 153,
  3249. "evidenceName": "publish-fixed-version",
  3250. "testTitle": "发布:前端绑定校验、保存与发布失败阻断、真实固定版本供训练目录使用",
  3251. "kind": "browser",
  3252. "featureIds": [
  3253. "validation.complete",
  3254. "validation.bindings",
  3255. "panel.validation",
  3256. "publish.saved",
  3257. "publish.failure",
  3258. "publish.fixed-model",
  3259. "cover.atomic",
  3260. "project.back"
  3261. ],
  3262. "scope": "实际校验、绑定阻断、POST503不假发布,重试发布当前固定版本;返回列表保留编辑标签,搜索当前项目并核对真实封面图片加载。下游静态渲染另有独立用例。"
  3263. }
  3264. ]
  3265. },
  3266. {
  3267. "id": "publish.only",
  3268. "name": "只有发布权限时发布已存版本",
  3269. "group": "保存封面、发布与依赖",
  3270. "verification": "PENDING",
  3271. "plannedEvidence": [
  3272. {
  3273. "file": "tests/scene-editor-permissions-closure.spec.ts",
  3274. "line": 171,
  3275. "evidenceName": "scene-publish-only",
  3276. "testTitle": "仅场景发布权限:浏览器发布已存副本,不发送保存或上传请求",
  3277. "kind": "browser",
  3278. "featureIds": [
  3279. "permission.publish",
  3280. "publish.only",
  3281. "publish.fixed-model"
  3282. ],
  3283. "scope": "以源测试实际断言为准;计划关联不代表最终通过。"
  3284. }
  3285. ]
  3286. },
  3287. {
  3288. "id": "publish.failure",
  3289. "name": "预检/保存/发布失败阻断",
  3290. "group": "保存封面、发布与依赖",
  3291. "verification": "PENDING",
  3292. "plannedEvidence": [
  3293. {
  3294. "file": "tests/scene-editor-persistence-closure.spec.ts",
  3295. "line": 153,
  3296. "evidenceName": "publish-fixed-version",
  3297. "testTitle": "发布:前端绑定校验、保存与发布失败阻断、真实固定版本供训练目录使用",
  3298. "kind": "browser",
  3299. "featureIds": [
  3300. "validation.complete",
  3301. "validation.bindings",
  3302. "panel.validation",
  3303. "publish.saved",
  3304. "publish.failure",
  3305. "publish.fixed-model",
  3306. "cover.atomic",
  3307. "project.back"
  3308. ],
  3309. "scope": "实际校验、绑定阻断、POST503不假发布,重试发布当前固定版本;返回列表保留编辑标签,搜索当前项目并核对真实封面图片加载。下游静态渲染另有独立用例。"
  3310. }
  3311. ]
  3312. },
  3313. {
  3314. "id": "publish.concurrent",
  3315. "name": "重复发布与上传/保存队列",
  3316. "group": "保存封面、发布与依赖",
  3317. "verification": "PENDING",
  3318. "plannedEvidence": [
  3319. {
  3320. "file": "tools/scene-cover-api.test.mjs",
  3321. "testTitle": "role switch waits through validation, save, and the later queued publish after dirty clears",
  3322. "featureIds": [
  3323. "publish.concurrent",
  3324. "leave.busy",
  3325. "leave.role-switch"
  3326. ],
  3327. "kind": "unit",
  3328. "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
  3329. },
  3330. {
  3331. "file": "../unreal_tran_web/src/features/scene-legacy/contentApiClient.test.mjs",
  3332. "testTitle": "project operation queue serializes upload, save and publish including failures",
  3333. "featureIds": [
  3334. "publish.concurrent"
  3335. ],
  3336. "kind": "unit",
  3337. "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
  3338. }
  3339. ]
  3340. },
  3341. {
  3342. "id": "publish.fixed-model",
  3343. "name": "固定 SCENE_MODEL 版本与多个实例",
  3344. "group": "保存封面、发布与依赖",
  3345. "verification": "PENDING",
  3346. "plannedEvidence": [
  3347. {
  3348. "file": "tests/scene-editor-permissions-closure.spec.ts",
  3349. "line": 142,
  3350. "evidenceName": "scene-update-only",
  3351. "testTitle": "仅场景编辑权限:固定模型可加载和保存,不能发布或访问模型页面",
  3352. "kind": "browser",
  3353. "featureIds": [
  3354. "permission.update",
  3355. "permission.publish",
  3356. "publish.fixed-model"
  3357. ],
  3358. "scope": "以源测试实际断言为准;计划关联不代表最终通过。"
  3359. },
  3360. {
  3361. "file": "tests/scene-editor-permissions-closure.spec.ts",
  3362. "line": 171,
  3363. "evidenceName": "scene-publish-only",
  3364. "testTitle": "仅场景发布权限:浏览器发布已存副本,不发送保存或上传请求",
  3365. "kind": "browser",
  3366. "featureIds": [
  3367. "permission.publish",
  3368. "publish.only",
  3369. "publish.fixed-model"
  3370. ],
  3371. "scope": "以源测试实际断言为准;计划关联不代表最终通过。"
  3372. },
  3373. {
  3374. "file": "tests/scene-editor-persistence-closure.spec.ts",
  3375. "line": 153,
  3376. "evidenceName": "publish-fixed-version",
  3377. "testTitle": "发布:前端绑定校验、保存与发布失败阻断、真实固定版本供训练目录使用",
  3378. "kind": "browser",
  3379. "featureIds": [
  3380. "validation.complete",
  3381. "validation.bindings",
  3382. "panel.validation",
  3383. "publish.saved",
  3384. "publish.failure",
  3385. "publish.fixed-model",
  3386. "cover.atomic",
  3387. "project.back"
  3388. ],
  3389. "scope": "实际校验、绑定阻断、POST503不假发布,重试发布当前固定版本;返回列表保留编辑标签,搜索当前项目并核对真实封面图片加载。下游静态渲染另有独立用例。"
  3390. },
  3391. {
  3392. "file": "tools/scene-closure-engine.test.mjs",
  3393. "testTitle": "legacy duplicate instance IDs migrate only later owners in document order despite reversed GLB completion",
  3394. "featureIds": [
  3395. "part.transform",
  3396. "publish.fixed-model"
  3397. ],
  3398. "kind": "unit",
  3399. "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
  3400. },
  3401. {
  3402. "file": "tools/scene-closure-assets.test.mjs",
  3403. "testTitle": "fixed model reads the exact version and downloads through its visible scene dependency",
  3404. "featureIds": [
  3405. "publish.fixed-model",
  3406. "permission.update"
  3407. ],
  3408. "kind": "unit",
  3409. "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
  3410. },
  3411. {
  3412. "file": "../unreal_tran_web/src/features/scene-legacy/contentApiClient.test.mjs",
  3413. "testTitle": "fixed model dependencies are recursively collected, exact and de-duplicated",
  3414. "featureIds": [
  3415. "publish.fixed-model"
  3416. ],
  3417. "kind": "unit",
  3418. "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
  3419. }
  3420. ]
  3421. },
  3422. {
  3423. "id": "publish.downstream",
  3424. "name": "发布场景供训练选择和静态还原",
  3425. "group": "保存封面、发布与依赖",
  3426. "verification": "PENDING",
  3427. "plannedEvidence": [
  3428. {
  3429. "file": "tests/scene-editor-downstream-closure.spec.ts",
  3430. "line": 28,
  3431. "evidenceName": "downstream-fox",
  3432. "testTitle": "fox:场景发布后在真实训练编排选择、保存并重开静态模型",
  3433. "kind": "browser",
  3434. "featureIds": [
  3435. "publish.downstream"
  3436. ],
  3437. "scope": "真实训练编排静态还原;不计来源模型动画/蓝图自动执行。"
  3438. },
  3439. {
  3440. "file": "tests/scene-editor-downstream-closure.spec.ts",
  3441. "line": 28,
  3442. "evidenceName": "downstream-truck",
  3443. "testTitle": "truck:场景发布后在真实训练编排选择、保存并重开静态模型",
  3444. "kind": "browser",
  3445. "featureIds": [
  3446. "publish.downstream"
  3447. ],
  3448. "scope": "真实训练编排静态还原;不计来源模型动画/蓝图自动执行。"
  3449. }
  3450. ]
  3451. },
  3452. {
  3453. "id": "permission.update",
  3454. "name": "场景细分编辑权限",
  3455. "group": "权限、缓存与未保存恢复",
  3456. "verification": "PENDING",
  3457. "plannedEvidence": [
  3458. {
  3459. "file": "tests/scene-editor-permissions-closure.spec.ts",
  3460. "line": 142,
  3461. "evidenceName": "scene-update-only",
  3462. "testTitle": "仅场景编辑权限:固定模型可加载和保存,不能发布或访问模型页面",
  3463. "kind": "browser",
  3464. "featureIds": [
  3465. "permission.update",
  3466. "permission.publish",
  3467. "publish.fixed-model"
  3468. ],
  3469. "scope": "以源测试实际断言为准;计划关联不代表最终通过。"
  3470. },
  3471. {
  3472. "file": "tests/scene-editor-workflow-closure.spec.ts",
  3473. "line": 190,
  3474. "evidenceName": "readonly",
  3475. "testTitle": "只读管理员:可浏览预览与导出,模板/资源/键盘/接口不能改场景",
  3476. "kind": "browser",
  3477. "featureIds": [
  3478. "permission.readonly",
  3479. "permission.update",
  3480. "permission.publish",
  3481. "preview.enter",
  3482. "preview.exit",
  3483. "preview.lock",
  3484. "json.export"
  3485. ],
  3486. "scope": "只读按钮/模板/资源禁写、蒙皮浏览、运行预览与快捷键不变更对象,直接PUT拒绝;具体搜索/鼠标覆盖另见视口用例。"
  3487. },
  3488. {
  3489. "file": "tools/scene-closure-engine.test.mjs",
  3490. "testTitle": "scene granular update permission enables editing without the retired shared code",
  3491. "featureIds": [
  3492. "permission.update"
  3493. ],
  3494. "kind": "unit",
  3495. "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
  3496. },
  3497. {
  3498. "file": "tools/scene-closure-assets.test.mjs",
  3499. "testTitle": "fixed model reads the exact version and downloads through its visible scene dependency",
  3500. "featureIds": [
  3501. "publish.fixed-model",
  3502. "permission.update"
  3503. ],
  3504. "kind": "unit",
  3505. "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
  3506. }
  3507. ]
  3508. },
  3509. {
  3510. "id": "permission.publish",
  3511. "name": "场景细分发布权限",
  3512. "group": "权限、缓存与未保存恢复",
  3513. "verification": "PENDING",
  3514. "plannedEvidence": [
  3515. {
  3516. "file": "tests/scene-editor-permissions-closure.spec.ts",
  3517. "line": 142,
  3518. "evidenceName": "scene-update-only",
  3519. "testTitle": "仅场景编辑权限:固定模型可加载和保存,不能发布或访问模型页面",
  3520. "kind": "browser",
  3521. "featureIds": [
  3522. "permission.update",
  3523. "permission.publish",
  3524. "publish.fixed-model"
  3525. ],
  3526. "scope": "以源测试实际断言为准;计划关联不代表最终通过。"
  3527. },
  3528. {
  3529. "file": "tests/scene-editor-permissions-closure.spec.ts",
  3530. "line": 171,
  3531. "evidenceName": "scene-publish-only",
  3532. "testTitle": "仅场景发布权限:浏览器发布已存副本,不发送保存或上传请求",
  3533. "kind": "browser",
  3534. "featureIds": [
  3535. "permission.publish",
  3536. "publish.only",
  3537. "publish.fixed-model"
  3538. ],
  3539. "scope": "以源测试实际断言为准;计划关联不代表最终通过。"
  3540. },
  3541. {
  3542. "file": "tests/scene-editor-permissions-closure.spec.ts",
  3543. "line": 183,
  3544. "evidenceName": "scene-no-page-permission",
  3545. "testTitle": "无场景页面权限:编辑路由和直接内容接口均拒绝访问",
  3546. "kind": "browser",
  3547. "featureIds": [
  3548. "permission.publish"
  3549. ],
  3550. "scope": "以源测试实际断言为准;计划关联不代表最终通过。"
  3551. },
  3552. {
  3553. "file": "tests/scene-editor-workflow-closure.spec.ts",
  3554. "line": 190,
  3555. "evidenceName": "readonly",
  3556. "testTitle": "只读管理员:可浏览预览与导出,模板/资源/键盘/接口不能改场景",
  3557. "kind": "browser",
  3558. "featureIds": [
  3559. "permission.readonly",
  3560. "permission.update",
  3561. "permission.publish",
  3562. "preview.enter",
  3563. "preview.exit",
  3564. "preview.lock",
  3565. "json.export"
  3566. ],
  3567. "scope": "只读按钮/模板/资源禁写、蒙皮浏览、运行预览与快捷键不变更对象,直接PUT拒绝;具体搜索/鼠标覆盖另见视口用例。"
  3568. }
  3569. ]
  3570. },
  3571. {
  3572. "id": "permission.readonly",
  3573. "name": "只读仍可查看、搜索、选中和预览",
  3574. "group": "权限、缓存与未保存恢复",
  3575. "verification": "PENDING",
  3576. "plannedEvidence": [
  3577. {
  3578. "file": "tests/scene-editor-permissions-closure.spec.ts",
  3579. "line": 253,
  3580. "evidenceName": "scene-role-switch",
  3581. "testTitle": "后台场景未保存时切换角色:关闭确认保留草稿,保存切换后重建只读权限",
  3582. "kind": "browser",
  3583. "featureIds": [
  3584. "leave.role-switch",
  3585. "leave.cancel",
  3586. "leave.save",
  3587. "permission.readonly"
  3588. ],
  3589. "scope": "以源测试实际断言为准;计划关联不代表最终通过。"
  3590. },
  3591. {
  3592. "file": "tests/scene-editor-workflow-closure.spec.ts",
  3593. "line": 190,
  3594. "evidenceName": "readonly",
  3595. "testTitle": "只读管理员:可浏览预览与导出,模板/资源/键盘/接口不能改场景",
  3596. "kind": "browser",
  3597. "featureIds": [
  3598. "permission.readonly",
  3599. "permission.update",
  3600. "permission.publish",
  3601. "preview.enter",
  3602. "preview.exit",
  3603. "preview.lock",
  3604. "json.export"
  3605. ],
  3606. "scope": "只读按钮/模板/资源禁写、蒙皮浏览、运行预览与快捷键不变更对象,直接PUT拒绝;具体搜索/鼠标覆盖另见视口用例。"
  3607. }
  3608. ]
  3609. },
  3610. {
  3611. "id": "recovery.autobuffer",
  3612. "name": "800ms 未保存恢复缓冲",
  3613. "group": "权限、缓存与未保存恢复",
  3614. "verification": "PENDING",
  3615. "plannedEvidence": [
  3616. {
  3617. "file": "tests/scene-editor-async-closure.spec.ts",
  3618. "line": 50,
  3619. "evidenceName": "save-concurrency",
  3620. "testTitle": "延迟保存快照:重复点击只提交一次,期间新编辑保留,旧恢复稿不会误报冲突",
  3621. "kind": "browser",
  3622. "featureIds": [
  3623. "project.concurrent-save",
  3624. "project.save",
  3625. "project.save-key",
  3626. "recovery.autobuffer",
  3627. "recovery.same-version"
  3628. ],
  3629. "scope": "延迟真实PUT快照A、重复Ctrl+S不重复请求、期间编辑B仍dirty;再次保存刷新无旧恢复稿误报。"
  3630. },
  3631. {
  3632. "file": "tests/scene-editor-permissions-closure.spec.ts",
  3633. "line": 305,
  3634. "evidenceName": "scene-multi-session",
  3635. "testTitle": "双标签各自修改场景:保存和明确丢弃当前页均保留另一页真实恢复稿",
  3636. "kind": "browser",
  3637. "featureIds": [
  3638. "recovery.multi-session",
  3639. "recovery.autobuffer",
  3640. "recovery.discard",
  3641. "project.save"
  3642. ],
  3643. "scope": "以源测试实际断言为准;计划关联不代表最终通过。"
  3644. },
  3645. {
  3646. "file": "tests/scene-editor-persistence-closure.spec.ts",
  3647. "line": 117,
  3648. "evidenceName": "real-recovery-conflict",
  3649. "testTitle": "同版本恢复与 409:真实未保存草稿重载、服务器新版本保护与隔离下载",
  3650. "kind": "browser",
  3651. "featureIds": [
  3652. "project.conflict",
  3653. "recovery.autobuffer",
  3654. "recovery.same-version",
  3655. "recovery.stale-version"
  3656. ],
  3657. "scope": "真实未存输入产生恢复稿,同版本恢复不自动入库;另一版本先保存后409拒绝覆盖,旧稿隔离下载。"
  3658. }
  3659. ]
  3660. },
  3661. {
  3662. "id": "recovery.same-version",
  3663. "name": "同版本真实未保存恢复",
  3664. "group": "权限、缓存与未保存恢复",
  3665. "verification": "PENDING",
  3666. "plannedEvidence": [
  3667. {
  3668. "file": "tests/scene-editor-async-closure.spec.ts",
  3669. "line": 50,
  3670. "evidenceName": "save-concurrency",
  3671. "testTitle": "延迟保存快照:重复点击只提交一次,期间新编辑保留,旧恢复稿不会误报冲突",
  3672. "kind": "browser",
  3673. "featureIds": [
  3674. "project.concurrent-save",
  3675. "project.save",
  3676. "project.save-key",
  3677. "recovery.autobuffer",
  3678. "recovery.same-version"
  3679. ],
  3680. "scope": "延迟真实PUT快照A、重复Ctrl+S不重复请求、期间编辑B仍dirty;再次保存刷新无旧恢复稿误报。"
  3681. },
  3682. {
  3683. "file": "tests/scene-editor-persistence-closure.spec.ts",
  3684. "line": 117,
  3685. "evidenceName": "real-recovery-conflict",
  3686. "testTitle": "同版本恢复与 409:真实未保存草稿重载、服务器新版本保护与隔离下载",
  3687. "kind": "browser",
  3688. "featureIds": [
  3689. "project.conflict",
  3690. "recovery.autobuffer",
  3691. "recovery.same-version",
  3692. "recovery.stale-version"
  3693. ],
  3694. "scope": "真实未存输入产生恢复稿,同版本恢复不自动入库;另一版本先保存后409拒绝覆盖,旧稿隔离下载。"
  3695. }
  3696. ]
  3697. },
  3698. {
  3699. "id": "recovery.stale-version",
  3700. "name": "不同版本恢复稿隔离",
  3701. "group": "权限、缓存与未保存恢复",
  3702. "verification": "PENDING",
  3703. "plannedEvidence": [
  3704. {
  3705. "file": "tests/scene-editor-persistence-closure.spec.ts",
  3706. "line": 117,
  3707. "evidenceName": "real-recovery-conflict",
  3708. "testTitle": "同版本恢复与 409:真实未保存草稿重载、服务器新版本保护与隔离下载",
  3709. "kind": "browser",
  3710. "featureIds": [
  3711. "project.conflict",
  3712. "recovery.autobuffer",
  3713. "recovery.same-version",
  3714. "recovery.stale-version"
  3715. ],
  3716. "scope": "真实未存输入产生恢复稿,同版本恢复不自动入库;另一版本先保存后409拒绝覆盖,旧稿隔离下载。"
  3717. }
  3718. ]
  3719. },
  3720. {
  3721. "id": "recovery.discard",
  3722. "name": "下载、保留、丢弃恢复稿",
  3723. "group": "权限、缓存与未保存恢复",
  3724. "verification": "PENDING",
  3725. "plannedEvidence": [
  3726. {
  3727. "file": "tests/scene-editor-permissions-closure.spec.ts",
  3728. "line": 305,
  3729. "evidenceName": "scene-multi-session",
  3730. "testTitle": "双标签各自修改场景:保存和明确丢弃当前页均保留另一页真实恢复稿",
  3731. "kind": "browser",
  3732. "featureIds": [
  3733. "recovery.multi-session",
  3734. "recovery.autobuffer",
  3735. "recovery.discard",
  3736. "project.save"
  3737. ],
  3738. "scope": "以源测试实际断言为准;计划关联不代表最终通过。"
  3739. },
  3740. {
  3741. "file": "../unreal_tran_web/src/features/scene-legacy/contentApiClient.test.mjs",
  3742. "testTitle": "recovery conflict defaults to preserve and only explicit discard may remove it",
  3743. "featureIds": [
  3744. "recovery.discard"
  3745. ],
  3746. "kind": "unit",
  3747. "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
  3748. }
  3749. ]
  3750. },
  3751. {
  3752. "id": "recovery.multi-session",
  3753. "name": "多标签/多会话恢复所有权",
  3754. "group": "权限、缓存与未保存恢复",
  3755. "verification": "PENDING",
  3756. "plannedEvidence": [
  3757. {
  3758. "file": "tests/scene-editor-permissions-closure.spec.ts",
  3759. "line": 305,
  3760. "evidenceName": "scene-multi-session",
  3761. "testTitle": "双标签各自修改场景:保存和明确丢弃当前页均保留另一页真实恢复稿",
  3762. "kind": "browser",
  3763. "featureIds": [
  3764. "recovery.multi-session",
  3765. "recovery.autobuffer",
  3766. "recovery.discard",
  3767. "project.save"
  3768. ],
  3769. "scope": "以源测试实际断言为准;计划关联不代表最终通过。"
  3770. },
  3771. {
  3772. "file": "../unreal_tran_web/src/features/scene-legacy/contentApiClient.test.mjs",
  3773. "testTitle": "per-page recovery keys prevent copied tabs from deleting each other checkpoints",
  3774. "featureIds": [
  3775. "recovery.multi-session"
  3776. ],
  3777. "kind": "unit",
  3778. "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
  3779. }
  3780. ]
  3781. },
  3782. {
  3783. "id": "leave.cancel",
  3784. "name": "关闭场景标签时取消离开",
  3785. "group": "权限、缓存与未保存恢复",
  3786. "verification": "PENDING",
  3787. "plannedEvidence": [
  3788. {
  3789. "file": "tests/scene-editor-permissions-closure.spec.ts",
  3790. "line": 253,
  3791. "evidenceName": "scene-role-switch",
  3792. "testTitle": "后台场景未保存时切换角色:关闭确认保留草稿,保存切换后重建只读权限",
  3793. "kind": "browser",
  3794. "featureIds": [
  3795. "leave.role-switch",
  3796. "leave.cancel",
  3797. "leave.save",
  3798. "permission.readonly"
  3799. ],
  3800. "scope": "以源测试实际断言为准;计划关联不代表最终通过。"
  3801. },
  3802. {
  3803. "file": "tools/scene-tab-close.test.mjs",
  3804. "testTitle": "closing one selected scene checks its cached guard, leaves unrelated workspaces alone",
  3805. "featureIds": [
  3806. "leave.cancel",
  3807. "lifecycle.cache"
  3808. ],
  3809. "kind": "unit",
  3810. "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
  3811. },
  3812. {
  3813. "file": "tools/scene-tab-close.test.mjs",
  3814. "testTitle": "cancel or failed save in a later tab never commits earlier draft discard",
  3815. "featureIds": [
  3816. "leave.cancel",
  3817. "leave.save",
  3818. "leave.role-switch"
  3819. ],
  3820. "kind": "unit",
  3821. "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
  3822. }
  3823. ]
  3824. },
  3825. {
  3826. "id": "leave.save",
  3827. "name": "保存并离开 / 放弃修改",
  3828. "group": "权限、缓存与未保存恢复",
  3829. "verification": "PENDING",
  3830. "plannedEvidence": [
  3831. {
  3832. "file": "tests/scene-editor-permissions-closure.spec.ts",
  3833. "line": 253,
  3834. "evidenceName": "scene-role-switch",
  3835. "testTitle": "后台场景未保存时切换角色:关闭确认保留草稿,保存切换后重建只读权限",
  3836. "kind": "browser",
  3837. "featureIds": [
  3838. "leave.role-switch",
  3839. "leave.cancel",
  3840. "leave.save",
  3841. "permission.readonly"
  3842. ],
  3843. "scope": "以源测试实际断言为准;计划关联不代表最终通过。"
  3844. },
  3845. {
  3846. "file": "tools/scene-tab-close.test.mjs",
  3847. "testTitle": "cancel or failed save in a later tab never commits earlier draft discard",
  3848. "featureIds": [
  3849. "leave.cancel",
  3850. "leave.save",
  3851. "leave.role-switch"
  3852. ],
  3853. "kind": "unit",
  3854. "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
  3855. },
  3856. {
  3857. "file": "tools/scene-tab-close.test.mjs",
  3858. "testTitle": "all successful confirmations commit together and unmounted guards are removed",
  3859. "featureIds": [
  3860. "leave.save",
  3861. "lifecycle.destroy"
  3862. ],
  3863. "kind": "unit",
  3864. "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
  3865. }
  3866. ]
  3867. },
  3868. {
  3869. "id": "leave.busy",
  3870. "name": "加载/上传/发布途中离开",
  3871. "group": "权限、缓存与未保存恢复",
  3872. "verification": "PENDING",
  3873. "plannedEvidence": [
  3874. {
  3875. "file": "tests/scene-editor-async-closure.spec.ts",
  3876. "line": 27,
  3877. "evidenceName": "loading-retry",
  3878. "testTitle": "加载失败重试与加载互斥:不展示可写半场景、恢复网络后模型完整加载",
  3879. "kind": "browser",
  3880. "featureIds": [
  3881. "project.retry",
  3882. "glb.pending",
  3883. "leave.busy"
  3884. ],
  3885. "scope": "GET503只留中性失败和重试;延迟受控下载时禁用写入/导出/预览并阻止关闭,释放后真实狐狸加载。"
  3886. },
  3887. {
  3888. "file": "tools/scene-cover-api.test.mjs",
  3889. "testTitle": "role switch waits through validation, save, and the later queued publish after dirty clears",
  3890. "featureIds": [
  3891. "publish.concurrent",
  3892. "leave.busy",
  3893. "leave.role-switch"
  3894. ],
  3895. "kind": "unit",
  3896. "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
  3897. },
  3898. {
  3899. "file": "tools/scene-cover-api.test.mjs",
  3900. "testTitle": "role switch rechecks resource uploads started while the save was finishing",
  3901. "featureIds": [
  3902. "leave.busy"
  3903. ],
  3904. "kind": "unit",
  3905. "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
  3906. }
  3907. ]
  3908. },
  3909. {
  3910. "id": "leave.role-switch",
  3911. "name": "角色切换覆盖后台场景未存稿",
  3912. "group": "权限、缓存与未保存恢复",
  3913. "verification": "PENDING",
  3914. "plannedEvidence": [
  3915. {
  3916. "file": "tests/scene-editor-permissions-closure.spec.ts",
  3917. "line": 253,
  3918. "evidenceName": "scene-role-switch",
  3919. "testTitle": "后台场景未保存时切换角色:关闭确认保留草稿,保存切换后重建只读权限",
  3920. "kind": "browser",
  3921. "featureIds": [
  3922. "leave.role-switch",
  3923. "leave.cancel",
  3924. "leave.save",
  3925. "permission.readonly"
  3926. ],
  3927. "scope": "以源测试实际断言为准;计划关联不代表最终通过。"
  3928. },
  3929. {
  3930. "file": "tools/scene-tab-close.test.mjs",
  3931. "testTitle": "cancel or failed save in a later tab never commits earlier draft discard",
  3932. "featureIds": [
  3933. "leave.cancel",
  3934. "leave.save",
  3935. "leave.role-switch"
  3936. ],
  3937. "kind": "unit",
  3938. "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
  3939. },
  3940. {
  3941. "file": "tools/scene-cover-api.test.mjs",
  3942. "testTitle": "role switch waits through validation, save, and the later queued publish after dirty clears",
  3943. "featureIds": [
  3944. "publish.concurrent",
  3945. "leave.busy",
  3946. "leave.role-switch"
  3947. ],
  3948. "kind": "unit",
  3949. "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
  3950. }
  3951. ]
  3952. },
  3953. {
  3954. "id": "lifecycle.cache",
  3955. "name": "标签失活 pause / 激活 resume",
  3956. "group": "权限、缓存与未保存恢复",
  3957. "verification": "PENDING",
  3958. "plannedEvidence": [
  3959. {
  3960. "file": "tests/scene-editor-viewport-closure.spec.ts",
  3961. "line": 178,
  3962. "evidenceName": "viewport-cache-close",
  3963. "testTitle": "缓存标签暂停键盘、草稿恢复以及关闭取消和保存失败留页",
  3964. "kind": "browser",
  3965. "featureIds": [
  3966. "lifecycle.cache"
  3967. ],
  3968. "scope": "以源测试实际断言为准;计划关联不代表最终通过。"
  3969. },
  3970. {
  3971. "file": "tools/scene-closure-engine.test.mjs",
  3972. "testTitle": "typing undo/redo stays inside text controls and inactive cached editors ignore global shortcuts",
  3973. "featureIds": [
  3974. "history.undo",
  3975. "history.redo",
  3976. "transform.keys",
  3977. "lifecycle.cache"
  3978. ],
  3979. "kind": "unit",
  3980. "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
  3981. },
  3982. {
  3983. "file": "tools/scene-tab-close.test.mjs",
  3984. "testTitle": "closing one selected scene checks its cached guard, leaves unrelated workspaces alone",
  3985. "featureIds": [
  3986. "leave.cancel",
  3987. "lifecycle.cache"
  3988. ],
  3989. "kind": "unit",
  3990. "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
  3991. }
  3992. ]
  3993. },
  3994. {
  3995. "id": "lifecycle.destroy",
  3996. "name": "关闭释放 WebGL/监听/资源",
  3997. "group": "权限、缓存与未保存恢复",
  3998. "verification": "PENDING",
  3999. "plannedEvidence": [
  4000. {
  4001. "file": "tools/scene-closure-engine.test.mjs",
  4002. "testTitle": "deleting a root disposes its geometry and materials after clearing selection",
  4003. "featureIds": [
  4004. "object.delete",
  4005. "lifecycle.destroy"
  4006. ],
  4007. "kind": "unit",
  4008. "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
  4009. },
  4010. {
  4011. "file": "tools/scene-closure-engine.test.mjs",
  4012. "testTitle": "selection highlight cleanup restores source materials and releases its own GPU helper",
  4013. "featureIds": [
  4014. "selection.highlight",
  4015. "lifecycle.destroy"
  4016. ],
  4017. "kind": "unit",
  4018. "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
  4019. },
  4020. {
  4021. "file": "tools/scene-tab-close.test.mjs",
  4022. "testTitle": "all successful confirmations commit together and unmounted guards are removed",
  4023. "featureIds": [
  4024. "leave.save",
  4025. "lifecycle.destroy"
  4026. ],
  4027. "kind": "unit",
  4028. "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
  4029. },
  4030. {
  4031. "file": "../unreal_tran_web/src/features/scene-legacy/contentApiClient.test.mjs",
  4032. "testTitle": "an upload finishing after a project switch cannot register into the new session",
  4033. "featureIds": [
  4034. "glb.pending",
  4035. "lifecycle.destroy"
  4036. ],
  4037. "kind": "unit",
  4038. "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
  4039. }
  4040. ]
  4041. },
  4042. {
  4043. "id": "lifecycle.resize-theme",
  4044. "name": "桌面尺寸与明亮/暗黑可读性",
  4045. "group": "权限、缓存与未保存恢复",
  4046. "verification": "PENDING",
  4047. "plannedEvidence": [
  4048. {
  4049. "file": "tests/scene-editor-viewport-closure.spec.ts",
  4050. "line": 117,
  4051. "evidenceName": "viewport-camera-theme",
  4052. "testTitle": "真实相机操控、视口拾取、预览禁写和两尺寸主题可读性",
  4053. "kind": "browser",
  4054. "featureIds": [
  4055. "view.orbit",
  4056. "view.pan",
  4057. "view.zoom",
  4058. "view.top",
  4059. "view.perspective",
  4060. "view.grid",
  4061. "view.focus",
  4062. "selection.viewport",
  4063. "selection.highlight",
  4064. "preview.enter",
  4065. "preview.exit",
  4066. "preview.lock",
  4067. "lifecycle.resize-theme"
  4068. ],
  4069. "scope": "以源测试实际断言为准;计划关联不代表最终通过。"
  4070. }
  4071. ]
  4072. }
  4073. ]
  4074. }