|
- {
- "generatedAt": "2026-09-06T10:30:32.992Z",
- "status": "PENDING",
- "scope": "只读解析当前spec与明确unit计划;不执行测试,不推断最终PASS。",
- "count": {
- "total": 119,
- "withBrowserPlan": 112,
- "onlyUnitPlan": 7,
- "unmapped": 0
- },
- "unknownIds": [],
- "gaps": [],
- "features": [
- {
- "id": "project.load",
- "name": "按真实项目 ID 打开已存场景",
- "group": "工程入口与顶部命令",
- "verification": "PENDING",
- "plannedEvidence": [
- {
- "file": "tests/scene-editor-workflow-closure.spec.ts",
- "line": 64,
- "evidenceName": "fox-properties-cover",
- "testTitle": "狐狸:真实细分权限、全部属性、清空绑定、蒙皮保护、相机与封面保存重开",
- "kind": "browser",
- "featureIds": [
- "project.load",
- "project.title",
- "project.save",
- "selection.tree",
- "property.name",
- "property.visible",
- "property.operable",
- "property.position",
- "property.rotation",
- "property.scale",
- "property.device-id",
- "property.model-id",
- "property.semantic",
- "part.source",
- "panel.binding",
- "cover.capture",
- "cover.atomic"
- ],
- "scope": "真实字段输入与清空、六个语义选项、蒙皮保护、源模型可见,正文/资产/封面保存和刷新;不把原件旧模板组合当新模板结果。"
- },
- {
- "file": "tools/scene-closure-engine.test.mjs",
- "testTitle": "successful parallel restores retain document order after delayed GLBs and split-object batches finish out of order",
- "featureIds": [
- "project.load",
- "selection.tree"
- ],
- "kind": "unit",
- "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
- }
- ]
- },
- {
- "id": "project.retry",
- "name": "项目或挂载加载失败后重新加载",
- "group": "工程入口与顶部命令",
- "verification": "PENDING",
- "plannedEvidence": [
- {
- "file": "tests/scene-editor-async-closure.spec.ts",
- "line": 27,
- "evidenceName": "loading-retry",
- "testTitle": "加载失败重试与加载互斥:不展示可写半场景、恢复网络后模型完整加载",
- "kind": "browser",
- "featureIds": [
- "project.retry",
- "glb.pending",
- "leave.busy"
- ],
- "scope": "GET503只留中性失败和重试;延迟受控下载时禁用写入/导出/预览并阻止关闭,释放后真实狐狸加载。"
- },
- {
- "file": "tools/scene-closure-assets.test.mjs",
- "testTitle": "a failed fixed-version lookup is evicted and the same reference can be retried",
- "featureIds": [
- "project.retry"
- ],
- "kind": "unit",
- "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
- }
- ]
- },
- {
- "id": "project.title",
- "name": "当前场景名称与项目说明按钮",
- "group": "工程入口与顶部命令",
- "verification": "PENDING",
- "plannedEvidence": [
- {
- "file": "tests/scene-editor-workflow-closure.spec.ts",
- "line": 64,
- "evidenceName": "fox-properties-cover",
- "testTitle": "狐狸:真实细分权限、全部属性、清空绑定、蒙皮保护、相机与封面保存重开",
- "kind": "browser",
- "featureIds": [
- "project.load",
- "project.title",
- "project.save",
- "selection.tree",
- "property.name",
- "property.visible",
- "property.operable",
- "property.position",
- "property.rotation",
- "property.scale",
- "property.device-id",
- "property.model-id",
- "property.semantic",
- "part.source",
- "panel.binding",
- "cover.capture",
- "cover.atomic"
- ],
- "scope": "真实字段输入与清空、六个语义选项、蒙皮保护、源模型可见,正文/资产/封面保存和刷新;不把原件旧模板组合当新模板结果。"
- }
- ]
- },
- {
- "id": "project.new",
- "name": "顶部新建独立工程",
- "group": "工程入口与顶部命令",
- "verification": "PENDING",
- "plannedEvidence": [
- {
- "file": "tests/scene-editor-workflow-closure.spec.ts",
- "line": 166,
- "evidenceName": "new-project",
- "testTitle": "新建独立场景:取消、失败、保护原工程以及成功新 ID",
- "kind": "browser",
- "featureIds": [
- "project.new"
- ],
- "scope": "取消命名、创建503保留原工程、创建成功新ID、保存刷新与原工程内容核对。"
- }
- ]
- },
- {
- "id": "project.back",
- "name": "返回场景制作列表并保留场景标签",
- "group": "工程入口与顶部命令",
- "verification": "PENDING",
- "plannedEvidence": [
- {
- "file": "tests/scene-editor-persistence-closure.spec.ts",
- "line": 153,
- "evidenceName": "publish-fixed-version",
- "testTitle": "发布:前端绑定校验、保存与发布失败阻断、真实固定版本供训练目录使用",
- "kind": "browser",
- "featureIds": [
- "validation.complete",
- "validation.bindings",
- "panel.validation",
- "publish.saved",
- "publish.failure",
- "publish.fixed-model",
- "cover.atomic",
- "project.back"
- ],
- "scope": "实际校验、绑定阻断、POST503不假发布,重试发布当前固定版本;返回列表保留编辑标签,搜索当前项目并核对真实封面图片加载。下游静态渲染另有独立用例。"
- }
- ]
- },
- {
- "id": "project.save",
- "name": "保存草稿按钮",
- "group": "工程入口与顶部命令",
- "verification": "PENDING",
- "plannedEvidence": [
- {
- "file": "tests/scene-editor-async-closure.spec.ts",
- "line": 50,
- "evidenceName": "save-concurrency",
- "testTitle": "延迟保存快照:重复点击只提交一次,期间新编辑保留,旧恢复稿不会误报冲突",
- "kind": "browser",
- "featureIds": [
- "project.concurrent-save",
- "project.save",
- "project.save-key",
- "recovery.autobuffer",
- "recovery.same-version"
- ],
- "scope": "延迟真实PUT快照A、重复Ctrl+S不重复请求、期间编辑B仍dirty;再次保存刷新无旧恢复稿误报。"
- },
- {
- "file": "tests/scene-editor-permissions-closure.spec.ts",
- "line": 305,
- "evidenceName": "scene-multi-session",
- "testTitle": "双标签各自修改场景:保存和明确丢弃当前页均保留另一页真实恢复稿",
- "kind": "browser",
- "featureIds": [
- "recovery.multi-session",
- "recovery.autobuffer",
- "recovery.discard",
- "project.save"
- ],
- "scope": "以源测试实际断言为准;计划关联不代表最终通过。"
- },
- {
- "file": "tests/scene-editor-workflow-closure.spec.ts",
- "line": 64,
- "evidenceName": "fox-properties-cover",
- "testTitle": "狐狸:真实细分权限、全部属性、清空绑定、蒙皮保护、相机与封面保存重开",
- "kind": "browser",
- "featureIds": [
- "project.load",
- "project.title",
- "project.save",
- "selection.tree",
- "property.name",
- "property.visible",
- "property.operable",
- "property.position",
- "property.rotation",
- "property.scale",
- "property.device-id",
- "property.model-id",
- "property.semantic",
- "part.source",
- "panel.binding",
- "cover.capture",
- "cover.atomic"
- ],
- "scope": "真实字段输入与清空、六个语义选项、蒙皮保护、源模型可见,正文/资产/封面保存和刷新;不把原件旧模板组合当新模板结果。"
- }
- ]
- },
- {
- "id": "project.save-key",
- "name": "Ctrl/Meta+S 保存快捷键",
- "group": "工程入口与顶部命令",
- "verification": "PENDING",
- "plannedEvidence": [
- {
- "file": "tests/scene-editor-async-closure.spec.ts",
- "line": 50,
- "evidenceName": "save-concurrency",
- "testTitle": "延迟保存快照:重复点击只提交一次,期间新编辑保留,旧恢复稿不会误报冲突",
- "kind": "browser",
- "featureIds": [
- "project.concurrent-save",
- "project.save",
- "project.save-key",
- "recovery.autobuffer",
- "recovery.same-version"
- ],
- "scope": "延迟真实PUT快照A、重复Ctrl+S不重复请求、期间编辑B仍dirty;再次保存刷新无旧恢复稿误报。"
- },
- {
- "file": "tests/scene-editor-workflow-closure.spec.ts",
- "line": 121,
- "evidenceName": "truck-part-history",
- "testTitle": "牛奶卡车:刚性部件独立变换、软删除、历史与保存基线一致",
- "kind": "browser",
- "featureIds": [
- "project.save-key",
- "part.transform",
- "part.soft-delete",
- "history.undo",
- "history.redo",
- "property.name",
- "view.enclosure-full",
- "view.enclosure-xray",
- "view.enclosure-hidden"
- ],
- "scope": "实际部件变换和软删除、按钮/键盘历史、保存基线与输入框自身撤销;双实例隔离及车库围护三种模式真实点击、导出和隐藏后保存刷新。"
- }
- ]
- },
- {
- "id": "project.save-failure",
- "name": "保存失败保留修改和恢复稿",
- "group": "工程入口与顶部命令",
- "verification": "PENDING",
- "plannedEvidence": [
- {
- "file": "tests/scene-editor-persistence-closure.spec.ts",
- "line": 85,
- "evidenceName": "save-cover-failure",
- "testTitle": "保存失败与封面降级:503 保留草稿,封面上传失败保留旧图,恢复后可重试",
- "kind": "browser",
- "featureIds": [
- "project.save-failure",
- "cover.failure"
- ],
- "scope": "正文PUT503不清草稿;封面上传503保留旧图但正文可保存;恢复服务后保存刷新。截图异常和409另由聚焦合同验证。"
- }
- ]
- },
- {
- "id": "project.conflict",
- "name": "409 乐观锁冲突保护",
- "group": "工程入口与顶部命令",
- "verification": "PENDING",
- "plannedEvidence": [
- {
- "file": "tests/scene-editor-persistence-closure.spec.ts",
- "line": 117,
- "evidenceName": "real-recovery-conflict",
- "testTitle": "同版本恢复与 409:真实未保存草稿重载、服务器新版本保护与隔离下载",
- "kind": "browser",
- "featureIds": [
- "project.conflict",
- "recovery.autobuffer",
- "recovery.same-version",
- "recovery.stale-version"
- ],
- "scope": "真实未存输入产生恢复稿,同版本恢复不自动入库;另一版本先保存后409拒绝覆盖,旧稿隔离下载。"
- },
- {
- "file": "tools/scene-cover-api.test.mjs",
- "testTitle": "upload conflict propagates without any content PUT",
- "featureIds": [
- "project.conflict",
- "cover.failure"
- ],
- "kind": "unit",
- "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
- }
- ]
- },
- {
- "id": "project.concurrent-save",
- "name": "重复保存与保存中继续编辑",
- "group": "工程入口与顶部命令",
- "verification": "PENDING",
- "plannedEvidence": [
- {
- "file": "tests/scene-editor-async-closure.spec.ts",
- "line": 50,
- "evidenceName": "save-concurrency",
- "testTitle": "延迟保存快照:重复点击只提交一次,期间新编辑保留,旧恢复稿不会误报冲突",
- "kind": "browser",
- "featureIds": [
- "project.concurrent-save",
- "project.save",
- "project.save-key",
- "recovery.autobuffer",
- "recovery.same-version"
- ],
- "scope": "延迟真实PUT快照A、重复Ctrl+S不重复请求、期间编辑B仍dirty;再次保存刷新无旧恢复稿误报。"
- }
- ]
- },
- {
- "id": "json.export",
- "name": "导出当前场景 JSON",
- "group": "工程文件与资源导入",
- "verification": "PENDING",
- "plannedEvidence": [
- {
- "file": "tests/scene-editor-persistence-closure.spec.ts",
- "line": 61,
- "evidenceName": "json-glb-roundtrip",
- "testTitle": "工程 JSON 与小 GLB:真实上传、损坏拒绝、引用失败回滚、相机参数往返",
- "kind": "browser",
- "featureIds": [
- "json.export",
- "json.import",
- "json.invalid",
- "json.missing-resource",
- "json.rendering",
- "glb.import",
- "glb.invalid",
- "glb.references",
- "validation.references"
- ],
- "scope": "真实JSON/GLB文件输入、错误schema/损坏资源/上传503拒绝、错误assetCode回滚、稳定URI及渲染参数保存重开。"
- },
- {
- "file": "tests/scene-editor-workflow-closure.spec.ts",
- "line": 190,
- "evidenceName": "readonly",
- "testTitle": "只读管理员:可浏览预览与导出,模板/资源/键盘/接口不能改场景",
- "kind": "browser",
- "featureIds": [
- "permission.readonly",
- "permission.update",
- "permission.publish",
- "preview.enter",
- "preview.exit",
- "preview.lock",
- "json.export"
- ],
- "scope": "只读按钮/模板/资源禁写、蒙皮浏览、运行预览与快捷键不变更对象,直接PUT拒绝;具体搜索/鼠标覆盖另见视口用例。"
- }
- ]
- },
- {
- "id": "json.import",
- "name": "导入有效场景工程 JSON",
- "group": "工程文件与资源导入",
- "verification": "PENDING",
- "plannedEvidence": [
- {
- "file": "tests/scene-editor-persistence-closure.spec.ts",
- "line": 61,
- "evidenceName": "json-glb-roundtrip",
- "testTitle": "工程 JSON 与小 GLB:真实上传、损坏拒绝、引用失败回滚、相机参数往返",
- "kind": "browser",
- "featureIds": [
- "json.export",
- "json.import",
- "json.invalid",
- "json.missing-resource",
- "json.rendering",
- "glb.import",
- "glb.invalid",
- "glb.references",
- "validation.references"
- ],
- "scope": "真实JSON/GLB文件输入、错误schema/损坏资源/上传503拒绝、错误assetCode回滚、稳定URI及渲染参数保存重开。"
- }
- ]
- },
- {
- "id": "json.invalid",
- "name": "非法 JSON / 错误 schema 拒绝",
- "group": "工程文件与资源导入",
- "verification": "PENDING",
- "plannedEvidence": [
- {
- "file": "tests/scene-editor-persistence-closure.spec.ts",
- "line": 61,
- "evidenceName": "json-glb-roundtrip",
- "testTitle": "工程 JSON 与小 GLB:真实上传、损坏拒绝、引用失败回滚、相机参数往返",
- "kind": "browser",
- "featureIds": [
- "json.export",
- "json.import",
- "json.invalid",
- "json.missing-resource",
- "json.rendering",
- "glb.import",
- "glb.invalid",
- "glb.references",
- "validation.references"
- ],
- "scope": "真实JSON/GLB文件输入、错误schema/损坏资源/上传503拒绝、错误assetCode回滚、稳定URI及渲染参数保存重开。"
- }
- ]
- },
- {
- "id": "json.missing-resource",
- "name": "JSON 缺失/错误受控引用拒绝与回滚",
- "group": "工程文件与资源导入",
- "verification": "PENDING",
- "plannedEvidence": [
- {
- "file": "tests/scene-editor-persistence-closure.spec.ts",
- "line": 61,
- "evidenceName": "json-glb-roundtrip",
- "testTitle": "工程 JSON 与小 GLB:真实上传、损坏拒绝、引用失败回滚、相机参数往返",
- "kind": "browser",
- "featureIds": [
- "json.export",
- "json.import",
- "json.invalid",
- "json.missing-resource",
- "json.rendering",
- "glb.import",
- "glb.invalid",
- "glb.references",
- "validation.references"
- ],
- "scope": "真实JSON/GLB文件输入、错误schema/损坏资源/上传503拒绝、错误assetCode回滚、稳定URI及渲染参数保存重开。"
- },
- {
- "file": "tools/scene-closure-engine.test.mjs",
- "testTitle": "a failed replacement GLB keeps the previous live scene rather than clearing an unsaved draft",
- "featureIds": [
- "json.missing-resource"
- ],
- "kind": "unit",
- "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
- },
- {
- "file": "tools/scene-closure-assets.test.mjs",
- "testTitle": "an explicit missing code cannot fall back to the first READY asset",
- "featureIds": [
- "validation.references",
- "json.missing-resource"
- ],
- "kind": "unit",
- "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
- }
- ]
- },
- {
- "id": "json.rendering",
- "name": "相机、灯光、雾和环境序列化往返",
- "group": "工程文件与资源导入",
- "verification": "PENDING",
- "plannedEvidence": [
- {
- "file": "tests/scene-editor-persistence-closure.spec.ts",
- "line": 61,
- "evidenceName": "json-glb-roundtrip",
- "testTitle": "工程 JSON 与小 GLB:真实上传、损坏拒绝、引用失败回滚、相机参数往返",
- "kind": "browser",
- "featureIds": [
- "json.export",
- "json.import",
- "json.invalid",
- "json.missing-resource",
- "json.rendering",
- "glb.import",
- "glb.invalid",
- "glb.references",
- "validation.references"
- ],
- "scope": "真实JSON/GLB文件输入、错误schema/损坏资源/上传503拒绝、错误assetCode回滚、稳定URI及渲染参数保存重开。"
- },
- {
- "file": "tools/scene-closure-engine.test.mjs",
- "testTitle": "loading and history restoration preserve an authored camera rather than auto-focusing a vehicle",
- "featureIds": [
- "json.rendering",
- "history.undo"
- ],
- "kind": "unit",
- "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
- }
- ]
- },
- {
- "id": "glb.import",
- "name": "本地 GLB 上传并加入当前场景",
- "group": "工程文件与资源导入",
- "verification": "PENDING",
- "plannedEvidence": [
- {
- "file": "tests/scene-editor-persistence-closure.spec.ts",
- "line": 61,
- "evidenceName": "json-glb-roundtrip",
- "testTitle": "工程 JSON 与小 GLB:真实上传、损坏拒绝、引用失败回滚、相机参数往返",
- "kind": "browser",
- "featureIds": [
- "json.export",
- "json.import",
- "json.invalid",
- "json.missing-resource",
- "json.rendering",
- "glb.import",
- "glb.invalid",
- "glb.references",
- "validation.references"
- ],
- "scope": "真实JSON/GLB文件输入、错误schema/损坏资源/上传503拒绝、错误assetCode回滚、稳定URI及渲染参数保存重开。"
- }
- ]
- },
- {
- "id": "glb.invalid",
- "name": "非 GLB / 损坏 GLB / 上传失败处理",
- "group": "工程文件与资源导入",
- "verification": "PENDING",
- "plannedEvidence": [
- {
- "file": "tests/scene-editor-persistence-closure.spec.ts",
- "line": 61,
- "evidenceName": "json-glb-roundtrip",
- "testTitle": "工程 JSON 与小 GLB:真实上传、损坏拒绝、引用失败回滚、相机参数往返",
- "kind": "browser",
- "featureIds": [
- "json.export",
- "json.import",
- "json.invalid",
- "json.missing-resource",
- "json.rendering",
- "glb.import",
- "glb.invalid",
- "glb.references",
- "validation.references"
- ],
- "scope": "真实JSON/GLB文件输入、错误schema/损坏资源/上传503拒绝、错误assetCode回滚、稳定URI及渲染参数保存重开。"
- }
- ]
- },
- {
- "id": "glb.pending",
- "name": "资源加载/上传期间操作互斥",
- "group": "工程文件与资源导入",
- "verification": "PENDING",
- "plannedEvidence": [
- {
- "file": "tests/scene-editor-async-closure.spec.ts",
- "line": 27,
- "evidenceName": "loading-retry",
- "testTitle": "加载失败重试与加载互斥:不展示可写半场景、恢复网络后模型完整加载",
- "kind": "browser",
- "featureIds": [
- "project.retry",
- "glb.pending",
- "leave.busy"
- ],
- "scope": "GET503只留中性失败和重试;延迟受控下载时禁用写入/导出/预览并阻止关闭,释放后真实狐狸加载。"
- },
- {
- "file": "tools/scene-closure-engine.test.mjs",
- "testTitle": "replacement failure waits for other started loads before restoring the original scene",
- "featureIds": [
- "history.failure",
- "glb.pending"
- ],
- "kind": "unit",
- "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
- },
- {
- "file": "../unreal_tran_web/src/features/scene-legacy/contentApiClient.test.mjs",
- "testTitle": "an upload finishing after a project switch cannot register into the new session",
- "featureIds": [
- "glb.pending",
- "lifecycle.destroy"
- ],
- "kind": "unit",
- "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
- }
- ]
- },
- {
- "id": "glb.references",
- "name": "本项目 GLB 稳定资产引用",
- "group": "工程文件与资源导入",
- "verification": "PENDING",
- "plannedEvidence": [
- {
- "file": "tests/scene-editor-persistence-closure.spec.ts",
- "line": 61,
- "evidenceName": "json-glb-roundtrip",
- "testTitle": "工程 JSON 与小 GLB:真实上传、损坏拒绝、引用失败回滚、相机参数往返",
- "kind": "browser",
- "featureIds": [
- "json.export",
- "json.import",
- "json.invalid",
- "json.missing-resource",
- "json.rendering",
- "glb.import",
- "glb.invalid",
- "glb.references",
- "validation.references"
- ],
- "scope": "真实JSON/GLB文件输入、错误schema/损坏资源/上传503拒绝、错误assetCode回滚、稳定URI及渲染参数保存重开。"
- },
- {
- "file": "tools/scene-closure-assets.test.mjs",
- "testTitle": "copied scene keeps its original pseudo URI but reads its own copied asset by stable code",
- "featureIds": [
- "glb.references"
- ],
- "kind": "unit",
- "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
- }
- ]
- },
- {
- "id": "panel.left-tabs",
- "name": "场景大纲 / 资源库 / 场景模板切换",
- "group": "左侧目录与资源放置",
- "verification": "PENDING",
- "plannedEvidence": [
- {
- "file": "tests/scene-editor-templates-closure.spec.ts",
- "line": 118,
- "evidenceName": "template-confirm",
- "testTitle": "模板搜索与未保存切换确认保留和放弃",
- "kind": "browser",
- "featureIds": [
- "panel.left-tabs",
- "search.templates",
- "template.switch-cancel"
- ],
- "scope": "中文/无匹配/清空搜索;真实取消保留对象,真实确认放弃并切换空白模板后保存。"
- }
- ]
- },
- {
- "id": "search.tree",
- "name": "对象/部件名称搜索与清空",
- "group": "左侧目录与资源放置",
- "verification": "PENDING",
- "plannedEvidence": [
- {
- "file": "tests/scene-editor-templates-closure.spec.ts",
- "line": 246,
- "evidenceName": "published-model-assets",
- "testTitle": "模型成果狐狸卡车双击与真实拖入、树搜索和部件隐藏重开",
- "kind": "browser",
- "featureIds": [
- "assets.catalog",
- "assets.model-double-click",
- "assets.model-drop",
- "search.tree",
- "part.source",
- "property.visible"
- ],
- "scope": "API 已发布目录,狐狸双击和卡车真实拖入;固定来源版本、树根/部件搜索;卡车刚体部件隐藏保存重开,最后恢复可见。基线树没有折叠按钮,不将搜索伪称折叠。"
- }
- ]
- },
- {
- "id": "search.assets",
- "name": "资源搜索与异步刷新保留筛选",
- "group": "左侧目录与资源放置",
- "verification": "PENDING",
- "plannedEvidence": [
- {
- "file": "tests/scene-editor-templates-closure.spec.ts",
- "line": 161,
- "evidenceName": "basic-assets",
- "testTitle": "八种基础资源逐项放置、真实拖放、搜索和保存重开",
- "kind": "browser",
- "featureIds": [
- "assets.basic-double-click",
- "assets.basic-drop",
- "search.assets",
- "panel.objects",
- "asset.diagnostic",
- "asset.equipment",
- "asset.workbench",
- "asset.shelf",
- "asset.safety-zone",
- "asset.camera",
- "asset.worker",
- "asset.light"
- ],
- "scope": "8 种基础资源分别双击放置并分开布置;真实指针拖入第 9 个工作台、吸附检查、唯一编号、保存刷新一致。照明为现有资源外观,不冒称连接真实灯控。"
- }
- ]
- },
- {
- "id": "search.templates",
- "name": "模板搜索与清空",
- "group": "左侧目录与资源放置",
- "verification": "PENDING",
- "plannedEvidence": [
- {
- "file": "tests/scene-editor-templates-closure.spec.ts",
- "line": 118,
- "evidenceName": "template-confirm",
- "testTitle": "模板搜索与未保存切换确认保留和放弃",
- "kind": "browser",
- "featureIds": [
- "panel.left-tabs",
- "search.templates",
- "template.switch-cancel"
- ],
- "scope": "中文/无匹配/清空搜索;真实取消保留对象,真实确认放弃并切换空白模板后保存。"
- }
- ]
- },
- {
- "id": "assets.catalog",
- "name": "真实已发布模型成果目录",
- "group": "左侧目录与资源放置",
- "verification": "PENDING",
- "plannedEvidence": [
- {
- "file": "tests/scene-editor-templates-closure.spec.ts",
- "line": 246,
- "evidenceName": "published-model-assets",
- "testTitle": "模型成果狐狸卡车双击与真实拖入、树搜索和部件隐藏重开",
- "kind": "browser",
- "featureIds": [
- "assets.catalog",
- "assets.model-double-click",
- "assets.model-drop",
- "search.tree",
- "part.source",
- "property.visible"
- ],
- "scope": "API 已发布目录,狐狸双击和卡车真实拖入;固定来源版本、树根/部件搜索;卡车刚体部件隐藏保存重开,最后恢复可见。基线树没有折叠按钮,不将搜索伪称折叠。"
- }
- ]
- },
- {
- "id": "assets.model-double-click",
- "name": "双击已发布模型放置",
- "group": "左侧目录与资源放置",
- "verification": "PENDING",
- "plannedEvidence": [
- {
- "file": "tests/scene-editor-templates-closure.spec.ts",
- "line": 246,
- "evidenceName": "published-model-assets",
- "testTitle": "模型成果狐狸卡车双击与真实拖入、树搜索和部件隐藏重开",
- "kind": "browser",
- "featureIds": [
- "assets.catalog",
- "assets.model-double-click",
- "assets.model-drop",
- "search.tree",
- "part.source",
- "property.visible"
- ],
- "scope": "API 已发布目录,狐狸双击和卡车真实拖入;固定来源版本、树根/部件搜索;卡车刚体部件隐藏保存重开,最后恢复可见。基线树没有折叠按钮,不将搜索伪称折叠。"
- },
- {
- "file": "tools/scene-model-placement.test.mjs",
- "testTitle": "fresh skinned placement reaches the requested size and floor after authored scale/pose replay",
- "featureIds": [
- "assets.model-double-click",
- "assets.model-drop"
- ],
- "kind": "unit",
- "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
- }
- ]
- },
- {
- "id": "assets.model-drop",
- "name": "拖入已发布模型放置",
- "group": "左侧目录与资源放置",
- "verification": "PENDING",
- "plannedEvidence": [
- {
- "file": "tests/scene-editor-templates-closure.spec.ts",
- "line": 246,
- "evidenceName": "published-model-assets",
- "testTitle": "模型成果狐狸卡车双击与真实拖入、树搜索和部件隐藏重开",
- "kind": "browser",
- "featureIds": [
- "assets.catalog",
- "assets.model-double-click",
- "assets.model-drop",
- "search.tree",
- "part.source",
- "property.visible"
- ],
- "scope": "API 已发布目录,狐狸双击和卡车真实拖入;固定来源版本、树根/部件搜索;卡车刚体部件隐藏保存重开,最后恢复可见。基线树没有折叠按钮,不将搜索伪称折叠。"
- },
- {
- "file": "tools/scene-model-placement.test.mjs",
- "testTitle": "fresh skinned placement reaches the requested size and floor after authored scale/pose replay",
- "featureIds": [
- "assets.model-double-click",
- "assets.model-drop"
- ],
- "kind": "unit",
- "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
- }
- ]
- },
- {
- "id": "assets.basic-double-click",
- "name": "双击基础资源放置",
- "group": "左侧目录与资源放置",
- "verification": "PENDING",
- "plannedEvidence": [
- {
- "file": "tests/scene-editor-templates-closure.spec.ts",
- "line": 161,
- "evidenceName": "basic-assets",
- "testTitle": "八种基础资源逐项放置、真实拖放、搜索和保存重开",
- "kind": "browser",
- "featureIds": [
- "assets.basic-double-click",
- "assets.basic-drop",
- "search.assets",
- "panel.objects",
- "asset.diagnostic",
- "asset.equipment",
- "asset.workbench",
- "asset.shelf",
- "asset.safety-zone",
- "asset.camera",
- "asset.worker",
- "asset.light"
- ],
- "scope": "8 种基础资源分别双击放置并分开布置;真实指针拖入第 9 个工作台、吸附检查、唯一编号、保存刷新一致。照明为现有资源外观,不冒称连接真实灯控。"
- }
- ]
- },
- {
- "id": "assets.basic-drop",
- "name": "基础资源拖入与拖放提示",
- "group": "左侧目录与资源放置",
- "verification": "PENDING",
- "plannedEvidence": [
- {
- "file": "tests/scene-editor-templates-closure.spec.ts",
- "line": 161,
- "evidenceName": "basic-assets",
- "testTitle": "八种基础资源逐项放置、真实拖放、搜索和保存重开",
- "kind": "browser",
- "featureIds": [
- "assets.basic-double-click",
- "assets.basic-drop",
- "search.assets",
- "panel.objects",
- "asset.diagnostic",
- "asset.equipment",
- "asset.workbench",
- "asset.shelf",
- "asset.safety-zone",
- "asset.camera",
- "asset.worker",
- "asset.light"
- ],
- "scope": "8 种基础资源分别双击放置并分开布置;真实指针拖入第 9 个工作台、吸附检查、唯一编号、保存刷新一致。照明为现有资源外观,不冒称连接真实灯控。"
- }
- ]
- },
- {
- "id": "assets.model-link",
- "name": "打开/返回模型编辑器入口",
- "group": "左侧目录与资源放置",
- "verification": "PENDING",
- "plannedEvidence": [
- {
- "file": "tools/scene-closure-engine.test.mjs",
- "testTitle": "model source navigation locates the published owner and falls back without source permission",
- "featureIds": [
- "assets.model-link"
- ],
- "kind": "unit",
- "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
- }
- ]
- },
- {
- "id": "asset.diagnostic",
- "name": "基础资源:液压诊断工位",
- "group": "左侧目录与资源放置",
- "verification": "PENDING",
- "plannedEvidence": [
- {
- "file": "tests/scene-editor-templates-closure.spec.ts",
- "line": 161,
- "evidenceName": "basic-assets",
- "testTitle": "八种基础资源逐项放置、真实拖放、搜索和保存重开",
- "kind": "browser",
- "featureIds": [
- "assets.basic-double-click",
- "assets.basic-drop",
- "search.assets",
- "panel.objects",
- "asset.diagnostic",
- "asset.equipment",
- "asset.workbench",
- "asset.shelf",
- "asset.safety-zone",
- "asset.camera",
- "asset.worker",
- "asset.light"
- ],
- "scope": "8 种基础资源分别双击放置并分开布置;真实指针拖入第 9 个工作台、吸附检查、唯一编号、保存刷新一致。照明为现有资源外观,不冒称连接真实灯控。"
- }
- ]
- },
- {
- "id": "asset.equipment",
- "name": "基础资源:维修装备主体",
- "group": "左侧目录与资源放置",
- "verification": "PENDING",
- "plannedEvidence": [
- {
- "file": "tests/scene-editor-templates-closure.spec.ts",
- "line": 161,
- "evidenceName": "basic-assets",
- "testTitle": "八种基础资源逐项放置、真实拖放、搜索和保存重开",
- "kind": "browser",
- "featureIds": [
- "assets.basic-double-click",
- "assets.basic-drop",
- "search.assets",
- "panel.objects",
- "asset.diagnostic",
- "asset.equipment",
- "asset.workbench",
- "asset.shelf",
- "asset.safety-zone",
- "asset.camera",
- "asset.worker",
- "asset.light"
- ],
- "scope": "8 种基础资源分别双击放置并分开布置;真实指针拖入第 9 个工作台、吸附检查、唯一编号、保存刷新一致。照明为现有资源外观,不冒称连接真实灯控。"
- }
- ]
- },
- {
- "id": "asset.workbench",
- "name": "基础资源:检修工作台",
- "group": "左侧目录与资源放置",
- "verification": "PENDING",
- "plannedEvidence": [
- {
- "file": "tests/scene-editor-templates-closure.spec.ts",
- "line": 161,
- "evidenceName": "basic-assets",
- "testTitle": "八种基础资源逐项放置、真实拖放、搜索和保存重开",
- "kind": "browser",
- "featureIds": [
- "assets.basic-double-click",
- "assets.basic-drop",
- "search.assets",
- "panel.objects",
- "asset.diagnostic",
- "asset.equipment",
- "asset.workbench",
- "asset.shelf",
- "asset.safety-zone",
- "asset.camera",
- "asset.worker",
- "asset.light"
- ],
- "scope": "8 种基础资源分别双击放置并分开布置;真实指针拖入第 9 个工作台、吸附检查、唯一编号、保存刷新一致。照明为现有资源外观,不冒称连接真实灯控。"
- }
- ]
- },
- {
- "id": "asset.shelf",
- "name": "基础资源:器材存放架",
- "group": "左侧目录与资源放置",
- "verification": "PENDING",
- "plannedEvidence": [
- {
- "file": "tests/scene-editor-templates-closure.spec.ts",
- "line": 161,
- "evidenceName": "basic-assets",
- "testTitle": "八种基础资源逐项放置、真实拖放、搜索和保存重开",
- "kind": "browser",
- "featureIds": [
- "assets.basic-double-click",
- "assets.basic-drop",
- "search.assets",
- "panel.objects",
- "asset.diagnostic",
- "asset.equipment",
- "asset.workbench",
- "asset.shelf",
- "asset.safety-zone",
- "asset.camera",
- "asset.worker",
- "asset.light"
- ],
- "scope": "8 种基础资源分别双击放置并分开布置;真实指针拖入第 9 个工作台、吸附检查、唯一编号、保存刷新一致。照明为现有资源外观,不冒称连接真实灯控。"
- }
- ]
- },
- {
- "id": "asset.safety-zone",
- "name": "基础资源:安全作业区域",
- "group": "左侧目录与资源放置",
- "verification": "PENDING",
- "plannedEvidence": [
- {
- "file": "tests/scene-editor-templates-closure.spec.ts",
- "line": 161,
- "evidenceName": "basic-assets",
- "testTitle": "八种基础资源逐项放置、真实拖放、搜索和保存重开",
- "kind": "browser",
- "featureIds": [
- "assets.basic-double-click",
- "assets.basic-drop",
- "search.assets",
- "panel.objects",
- "asset.diagnostic",
- "asset.equipment",
- "asset.workbench",
- "asset.shelf",
- "asset.safety-zone",
- "asset.camera",
- "asset.worker",
- "asset.light"
- ],
- "scope": "8 种基础资源分别双击放置并分开布置;真实指针拖入第 9 个工作台、吸附检查、唯一编号、保存刷新一致。照明为现有资源外观,不冒称连接真实灯控。"
- }
- ]
- },
- {
- "id": "asset.camera",
- "name": "基础资源:视觉采集设备",
- "group": "左侧目录与资源放置",
- "verification": "PENDING",
- "plannedEvidence": [
- {
- "file": "tests/scene-editor-templates-closure.spec.ts",
- "line": 161,
- "evidenceName": "basic-assets",
- "testTitle": "八种基础资源逐项放置、真实拖放、搜索和保存重开",
- "kind": "browser",
- "featureIds": [
- "assets.basic-double-click",
- "assets.basic-drop",
- "search.assets",
- "panel.objects",
- "asset.diagnostic",
- "asset.equipment",
- "asset.workbench",
- "asset.shelf",
- "asset.safety-zone",
- "asset.camera",
- "asset.worker",
- "asset.light"
- ],
- "scope": "8 种基础资源分别双击放置并分开布置;真实指针拖入第 9 个工作台、吸附检查、唯一编号、保存刷新一致。照明为现有资源外观,不冒称连接真实灯控。"
- }
- ]
- },
- {
- "id": "asset.worker",
- "name": "基础资源:训练人员占位",
- "group": "左侧目录与资源放置",
- "verification": "PENDING",
- "plannedEvidence": [
- {
- "file": "tests/scene-editor-templates-closure.spec.ts",
- "line": 161,
- "evidenceName": "basic-assets",
- "testTitle": "八种基础资源逐项放置、真实拖放、搜索和保存重开",
- "kind": "browser",
- "featureIds": [
- "assets.basic-double-click",
- "assets.basic-drop",
- "search.assets",
- "panel.objects",
- "asset.diagnostic",
- "asset.equipment",
- "asset.workbench",
- "asset.shelf",
- "asset.safety-zone",
- "asset.camera",
- "asset.worker",
- "asset.light"
- ],
- "scope": "8 种基础资源分别双击放置并分开布置;真实指针拖入第 9 个工作台、吸附检查、唯一编号、保存刷新一致。照明为现有资源外观,不冒称连接真实灯控。"
- }
- ]
- },
- {
- "id": "asset.light",
- "name": "基础资源:区域照明",
- "group": "左侧目录与资源放置",
- "verification": "PENDING",
- "plannedEvidence": [
- {
- "file": "tests/scene-editor-templates-closure.spec.ts",
- "line": 161,
- "evidenceName": "basic-assets",
- "testTitle": "八种基础资源逐项放置、真实拖放、搜索和保存重开",
- "kind": "browser",
- "featureIds": [
- "assets.basic-double-click",
- "assets.basic-drop",
- "search.assets",
- "panel.objects",
- "asset.diagnostic",
- "asset.equipment",
- "asset.workbench",
- "asset.shelf",
- "asset.safety-zone",
- "asset.camera",
- "asset.worker",
- "asset.light"
- ],
- "scope": "8 种基础资源分别双击放置并分开布置;真实指针拖入第 9 个工作台、吸附检查、唯一编号、保存刷新一致。照明为现有资源外观,不冒称连接真实灯控。"
- }
- ]
- },
- {
- "id": "asset.vehicle-depot",
- "name": "场地资源:真实装备车库",
- "group": "左侧目录与资源放置",
- "verification": "PENDING",
- "plannedEvidence": [
- {
- "file": "tests/scene-editor-templates-closure.spec.ts",
- "line": 193,
- "evidenceName": "venue-assets",
- "testTitle": "两种整体场地加载、重复放置阻止与显式删除后替换",
- "kind": "browser",
- "featureIds": [
- "asset.vehicle-depot",
- "asset.field-terrain",
- "object.delete"
- ],
- "scope": "车库和起伏地形真实加载并分别保存重开;已有整体场地时阻止叠加,显式删除旧场地后才能替换。"
- }
- ]
- },
- {
- "id": "asset.field-terrain",
- "name": "场地资源:真实野外地形",
- "group": "左侧目录与资源放置",
- "verification": "PENDING",
- "plannedEvidence": [
- {
- "file": "tests/scene-editor-templates-closure.spec.ts",
- "line": 193,
- "evidenceName": "venue-assets",
- "testTitle": "两种整体场地加载、重复放置阻止与显式删除后替换",
- "kind": "browser",
- "featureIds": [
- "asset.vehicle-depot",
- "asset.field-terrain",
- "object.delete"
- ],
- "scope": "车库和起伏地形真实加载并分别保存重开;已有整体场地时阻止叠加,显式删除旧场地后才能替换。"
- }
- ]
- },
- {
- "id": "template.depot-1",
- "name": "真实装备车库",
- "group": "全部可达场景模板",
- "verification": "PENDING",
- "plannedEvidence": [
- {
- "file": "tests/scene-editor-templates-closure.spec.ts",
- "line": 85,
- "evidenceName": "template-depot-1",
- "testTitle": "场景模板实际加载、保存重开:真实装备车库",
- "kind": "browser",
- "featureIds": [
- "template.depot-1"
- ],
- "scope": "循环参数化模板用例,每种独立副本、真实点击、保存、刷新与截图。"
- }
- ]
- },
- {
- "id": "template.terrain-1",
- "name": "真实野外训练场",
- "group": "全部可达场景模板",
- "verification": "PENDING",
- "plannedEvidence": [
- {
- "file": "tests/scene-editor-templates-closure.spec.ts",
- "line": 85,
- "evidenceName": "template-terrain-1",
- "testTitle": "场景模板实际加载、保存重开:真实野外训练场",
- "kind": "browser",
- "featureIds": [
- "template.terrain-1"
- ],
- "scope": "循环参数化模板用例,每种独立副本、真实点击、保存、刷新与截图。"
- }
- ]
- },
- {
- "id": "template.workshop-1",
- "name": "综合检验车间",
- "group": "全部可达场景模板",
- "verification": "PENDING",
- "plannedEvidence": [
- {
- "file": "tests/scene-editor-templates-closure.spec.ts",
- "line": 85,
- "evidenceName": "template-workshop-1",
- "testTitle": "场景模板实际加载、保存重开:综合检验车间",
- "kind": "browser",
- "featureIds": [
- "template.workshop-1"
- ],
- "scope": "循环参数化模板用例,每种独立副本、真实点击、保存、刷新与截图。"
- }
- ]
- },
- {
- "id": "template.workshop-real",
- "name": "演示维修车间(可拆分)",
- "group": "全部可达场景模板",
- "verification": "PENDING",
- "plannedEvidence": [
- {
- "file": "tests/scene-editor-templates-closure.spec.ts",
- "line": 85,
- "evidenceName": "template-workshop-real",
- "testTitle": "场景模板实际加载、保存重开:演示维修车间(可拆分)",
- "kind": "browser",
- "featureIds": [
- "template.workshop-real"
- ],
- "scope": "循环参数化模板用例,每种独立副本、真实点击、保存、刷新与截图。"
- }
- ]
- },
- {
- "id": "template.workshop-2",
- "name": "总成拆卸车间",
- "group": "全部可达场景模板",
- "verification": "PENDING",
- "plannedEvidence": [
- {
- "file": "tests/scene-editor-templates-closure.spec.ts",
- "line": 85,
- "evidenceName": "template-workshop-2",
- "testTitle": "场景模板实际加载、保存重开:总成拆卸车间",
- "kind": "browser",
- "featureIds": [
- "template.workshop-2"
- ],
- "scope": "循环参数化模板用例,每种独立副本、真实点击、保存、刷新与截图。"
- }
- ]
- },
- {
- "id": "template.workshop-3",
- "name": "部件分解车间",
- "group": "全部可达场景模板",
- "verification": "PENDING",
- "plannedEvidence": [
- {
- "file": "tests/scene-editor-templates-closure.spec.ts",
- "line": 85,
- "evidenceName": "template-workshop-3",
- "testTitle": "场景模板实际加载、保存重开:部件分解车间",
- "kind": "browser",
- "featureIds": [
- "template.workshop-3"
- ],
- "scope": "循环参数化模板用例,每种独立副本、真实点击、保存、刷新与截图。"
- }
- ]
- },
- {
- "id": "template.workshop-4",
- "name": "清洗检测车间",
- "group": "全部可达场景模板",
- "verification": "PENDING",
- "plannedEvidence": [
- {
- "file": "tests/scene-editor-templates-closure.spec.ts",
- "line": 85,
- "evidenceName": "template-workshop-4",
- "testTitle": "场景模板实际加载、保存重开:清洗检测车间",
- "kind": "browser",
- "featureIds": [
- "template.workshop-4"
- ],
- "scope": "循环参数化模板用例,每种独立副本、真实点击、保存、刷新与截图。"
- }
- ]
- },
- {
- "id": "template.workshop-5",
- "name": "复装调试车间",
- "group": "全部可达场景模板",
- "verification": "PENDING",
- "plannedEvidence": [
- {
- "file": "tests/scene-editor-templates-closure.spec.ts",
- "line": 85,
- "evidenceName": "template-workshop-5",
- "testTitle": "场景模板实际加载、保存重开:复装调试车间",
- "kind": "browser",
- "featureIds": [
- "template.workshop-5"
- ],
- "scope": "循环参数化模板用例,每种独立副本、真实点击、保存、刷新与截图。"
- }
- ]
- },
- {
- "id": "template.outdoor-1",
- "name": "室外综合训练场",
- "group": "全部可达场景模板",
- "verification": "PENDING",
- "plannedEvidence": [
- {
- "file": "tests/scene-editor-templates-closure.spec.ts",
- "line": 85,
- "evidenceName": "template-outdoor-1",
- "testTitle": "场景模板实际加载、保存重开:室外综合训练场",
- "kind": "browser",
- "featureIds": [
- "template.outdoor-1"
- ],
- "scope": "循环参数化模板用例,每种独立副本、真实点击、保存、刷新与截图。"
- }
- ]
- },
- {
- "id": "template.switch-cancel",
- "name": "未保存模板切换取消",
- "group": "全部可达场景模板",
- "verification": "PENDING",
- "plannedEvidence": [
- {
- "file": "tests/scene-editor-templates-closure.spec.ts",
- "line": 118,
- "evidenceName": "template-confirm",
- "testTitle": "模板搜索与未保存切换确认保留和放弃",
- "kind": "browser",
- "featureIds": [
- "panel.left-tabs",
- "search.templates",
- "template.switch-cancel"
- ],
- "scope": "中文/无匹配/清空搜索;真实取消保留对象,真实确认放弃并切换空白模板后保存。"
- }
- ]
- },
- {
- "id": "view.orbit",
- "name": "鼠标旋转相机",
- "group": "三维视口、选择与变换",
- "verification": "PENDING",
- "plannedEvidence": [
- {
- "file": "tests/scene-editor-viewport-closure.spec.ts",
- "line": 117,
- "evidenceName": "viewport-camera-theme",
- "testTitle": "真实相机操控、视口拾取、预览禁写和两尺寸主题可读性",
- "kind": "browser",
- "featureIds": [
- "view.orbit",
- "view.pan",
- "view.zoom",
- "view.top",
- "view.perspective",
- "view.grid",
- "view.focus",
- "selection.viewport",
- "selection.highlight",
- "preview.enter",
- "preview.exit",
- "preview.lock",
- "lifecycle.resize-theme"
- ],
- "scope": "以源测试实际断言为准;计划关联不代表最终通过。"
- }
- ]
- },
- {
- "id": "view.pan",
- "name": "鼠标平移相机",
- "group": "三维视口、选择与变换",
- "verification": "PENDING",
- "plannedEvidence": [
- {
- "file": "tests/scene-editor-viewport-closure.spec.ts",
- "line": 117,
- "evidenceName": "viewport-camera-theme",
- "testTitle": "真实相机操控、视口拾取、预览禁写和两尺寸主题可读性",
- "kind": "browser",
- "featureIds": [
- "view.orbit",
- "view.pan",
- "view.zoom",
- "view.top",
- "view.perspective",
- "view.grid",
- "view.focus",
- "selection.viewport",
- "selection.highlight",
- "preview.enter",
- "preview.exit",
- "preview.lock",
- "lifecycle.resize-theme"
- ],
- "scope": "以源测试实际断言为准;计划关联不代表最终通过。"
- }
- ]
- },
- {
- "id": "view.zoom",
- "name": "滚轮缩放相机",
- "group": "三维视口、选择与变换",
- "verification": "PENDING",
- "plannedEvidence": [
- {
- "file": "tests/scene-editor-viewport-closure.spec.ts",
- "line": 117,
- "evidenceName": "viewport-camera-theme",
- "testTitle": "真实相机操控、视口拾取、预览禁写和两尺寸主题可读性",
- "kind": "browser",
- "featureIds": [
- "view.orbit",
- "view.pan",
- "view.zoom",
- "view.top",
- "view.perspective",
- "view.grid",
- "view.focus",
- "selection.viewport",
- "selection.highlight",
- "preview.enter",
- "preview.exit",
- "preview.lock",
- "lifecycle.resize-theme"
- ],
- "scope": "以源测试实际断言为准;计划关联不代表最终通过。"
- }
- ]
- },
- {
- "id": "view.perspective",
- "name": "透视按钮",
- "group": "三维视口、选择与变换",
- "verification": "PENDING",
- "plannedEvidence": [
- {
- "file": "tests/scene-editor-viewport-closure.spec.ts",
- "line": 117,
- "evidenceName": "viewport-camera-theme",
- "testTitle": "真实相机操控、视口拾取、预览禁写和两尺寸主题可读性",
- "kind": "browser",
- "featureIds": [
- "view.orbit",
- "view.pan",
- "view.zoom",
- "view.top",
- "view.perspective",
- "view.grid",
- "view.focus",
- "selection.viewport",
- "selection.highlight",
- "preview.enter",
- "preview.exit",
- "preview.lock",
- "lifecycle.resize-theme"
- ],
- "scope": "以源测试实际断言为准;计划关联不代表最终通过。"
- }
- ]
- },
- {
- "id": "view.top",
- "name": "顶视图按钮",
- "group": "三维视口、选择与变换",
- "verification": "PENDING",
- "plannedEvidence": [
- {
- "file": "tests/scene-editor-viewport-closure.spec.ts",
- "line": 117,
- "evidenceName": "viewport-camera-theme",
- "testTitle": "真实相机操控、视口拾取、预览禁写和两尺寸主题可读性",
- "kind": "browser",
- "featureIds": [
- "view.orbit",
- "view.pan",
- "view.zoom",
- "view.top",
- "view.perspective",
- "view.grid",
- "view.focus",
- "selection.viewport",
- "selection.highlight",
- "preview.enter",
- "preview.exit",
- "preview.lock",
- "lifecycle.resize-theme"
- ],
- "scope": "以源测试实际断言为准;计划关联不代表最终通过。"
- }
- ]
- },
- {
- "id": "view.focus",
- "name": "聚焦选中对象",
- "group": "三维视口、选择与变换",
- "verification": "PENDING",
- "plannedEvidence": [
- {
- "file": "tests/scene-editor-viewport-closure.spec.ts",
- "line": 117,
- "evidenceName": "viewport-camera-theme",
- "testTitle": "真实相机操控、视口拾取、预览禁写和两尺寸主题可读性",
- "kind": "browser",
- "featureIds": [
- "view.orbit",
- "view.pan",
- "view.zoom",
- "view.top",
- "view.perspective",
- "view.grid",
- "view.focus",
- "selection.viewport",
- "selection.highlight",
- "preview.enter",
- "preview.exit",
- "preview.lock",
- "lifecycle.resize-theme"
- ],
- "scope": "以源测试实际断言为准;计划关联不代表最终通过。"
- }
- ]
- },
- {
- "id": "view.grid",
- "name": "网格显隐",
- "group": "三维视口、选择与变换",
- "verification": "PENDING",
- "plannedEvidence": [
- {
- "file": "tests/scene-editor-viewport-closure.spec.ts",
- "line": 117,
- "evidenceName": "viewport-camera-theme",
- "testTitle": "真实相机操控、视口拾取、预览禁写和两尺寸主题可读性",
- "kind": "browser",
- "featureIds": [
- "view.orbit",
- "view.pan",
- "view.zoom",
- "view.top",
- "view.perspective",
- "view.grid",
- "view.focus",
- "selection.viewport",
- "selection.highlight",
- "preview.enter",
- "preview.exit",
- "preview.lock",
- "lifecycle.resize-theme"
- ],
- "scope": "以源测试实际断言为准;计划关联不代表最终通过。"
- },
- {
- "file": "tools/scene-cover-capture.test.mjs",
- "testTitle": "copies synchronously without bounds, gizmo, grid or selection glow, then restores before JPEG encoding",
- "featureIds": [
- "cover.capture",
- "selection.highlight",
- "view.grid"
- ],
- "kind": "unit",
- "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
- }
- ]
- },
- {
- "id": "view.enclosure-full",
- "name": "车库外壳完整显示",
- "group": "三维视口、选择与变换",
- "verification": "PENDING",
- "plannedEvidence": [
- {
- "file": "tests/scene-editor-workflow-closure.spec.ts",
- "line": 121,
- "evidenceName": "truck-part-history",
- "testTitle": "牛奶卡车:刚性部件独立变换、软删除、历史与保存基线一致",
- "kind": "browser",
- "featureIds": [
- "project.save-key",
- "part.transform",
- "part.soft-delete",
- "history.undo",
- "history.redo",
- "property.name",
- "view.enclosure-full",
- "view.enclosure-xray",
- "view.enclosure-hidden"
- ],
- "scope": "实际部件变换和软删除、按钮/键盘历史、保存基线与输入框自身撤销;双实例隔离及车库围护三种模式真实点击、导出和隐藏后保存刷新。"
- }
- ]
- },
- {
- "id": "view.enclosure-xray",
- "name": "车库外壳透明查看",
- "group": "三维视口、选择与变换",
- "verification": "PENDING",
- "plannedEvidence": [
- {
- "file": "tests/scene-editor-workflow-closure.spec.ts",
- "line": 121,
- "evidenceName": "truck-part-history",
- "testTitle": "牛奶卡车:刚性部件独立变换、软删除、历史与保存基线一致",
- "kind": "browser",
- "featureIds": [
- "project.save-key",
- "part.transform",
- "part.soft-delete",
- "history.undo",
- "history.redo",
- "property.name",
- "view.enclosure-full",
- "view.enclosure-xray",
- "view.enclosure-hidden"
- ],
- "scope": "实际部件变换和软删除、按钮/键盘历史、保存基线与输入框自身撤销;双实例隔离及车库围护三种模式真实点击、导出和隐藏后保存刷新。"
- }
- ]
- },
- {
- "id": "view.enclosure-hidden",
- "name": "隐藏车库外壳",
- "group": "三维视口、选择与变换",
- "verification": "PENDING",
- "plannedEvidence": [
- {
- "file": "tests/scene-editor-workflow-closure.spec.ts",
- "line": 121,
- "evidenceName": "truck-part-history",
- "testTitle": "牛奶卡车:刚性部件独立变换、软删除、历史与保存基线一致",
- "kind": "browser",
- "featureIds": [
- "project.save-key",
- "part.transform",
- "part.soft-delete",
- "history.undo",
- "history.redo",
- "property.name",
- "view.enclosure-full",
- "view.enclosure-xray",
- "view.enclosure-hidden"
- ],
- "scope": "实际部件变换和软删除、按钮/键盘历史、保存基线与输入框自身撤销;双实例隔离及车库围护三种模式真实点击、导出和隐藏后保存刷新。"
- }
- ]
- },
- {
- "id": "selection.viewport",
- "name": "点击视口选中根对象/部件",
- "group": "三维视口、选择与变换",
- "verification": "PENDING",
- "plannedEvidence": [
- {
- "file": "tests/scene-editor-viewport-closure.spec.ts",
- "line": 117,
- "evidenceName": "viewport-camera-theme",
- "testTitle": "真实相机操控、视口拾取、预览禁写和两尺寸主题可读性",
- "kind": "browser",
- "featureIds": [
- "view.orbit",
- "view.pan",
- "view.zoom",
- "view.top",
- "view.perspective",
- "view.grid",
- "view.focus",
- "selection.viewport",
- "selection.highlight",
- "preview.enter",
- "preview.exit",
- "preview.lock",
- "lifecycle.resize-theme"
- ],
- "scope": "以源测试实际断言为准;计划关联不代表最终通过。"
- }
- ]
- },
- {
- "id": "selection.tree",
- "name": "大纲根对象与部件选中",
- "group": "三维视口、选择与变换",
- "verification": "PENDING",
- "plannedEvidence": [
- {
- "file": "tests/scene-editor-workflow-closure.spec.ts",
- "line": 64,
- "evidenceName": "fox-properties-cover",
- "testTitle": "狐狸:真实细分权限、全部属性、清空绑定、蒙皮保护、相机与封面保存重开",
- "kind": "browser",
- "featureIds": [
- "project.load",
- "project.title",
- "project.save",
- "selection.tree",
- "property.name",
- "property.visible",
- "property.operable",
- "property.position",
- "property.rotation",
- "property.scale",
- "property.device-id",
- "property.model-id",
- "property.semantic",
- "part.source",
- "panel.binding",
- "cover.capture",
- "cover.atomic"
- ],
- "scope": "真实字段输入与清空、六个语义选项、蒙皮保护、源模型可见,正文/资产/封面保存和刷新;不把原件旧模板组合当新模板结果。"
- },
- {
- "file": "tools/scene-closure-engine.test.mjs",
- "testTitle": "two published instances have unique tree part IDs and editing the second persists independently after reopen",
- "featureIds": [
- "part.transform",
- "selection.tree"
- ],
- "kind": "unit",
- "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
- },
- {
- "file": "tools/scene-closure-engine.test.mjs",
- "testTitle": "successful parallel restores retain document order after delayed GLBs and split-object batches finish out of order",
- "featureIds": [
- "project.load",
- "selection.tree"
- ],
- "kind": "unit",
- "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
- }
- ]
- },
- {
- "id": "selection.hidden",
- "name": "隐藏祖先与软删除部件不可误拾取",
- "group": "三维视口、选择与变换",
- "verification": "PENDING",
- "plannedEvidence": [
- {
- "file": "tools/scene-closure-engine.test.mjs",
- "testTitle": "real Three ray hits on hidden descendants are excluded before selecting a root or part",
- "featureIds": [
- "selection.hidden"
- ],
- "kind": "unit",
- "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
- }
- ]
- },
- {
- "id": "selection.highlight",
- "name": "选中高亮与恢复原材质",
- "group": "三维视口、选择与变换",
- "verification": "PENDING",
- "plannedEvidence": [
- {
- "file": "tests/scene-editor-viewport-closure.spec.ts",
- "line": 117,
- "evidenceName": "viewport-camera-theme",
- "testTitle": "真实相机操控、视口拾取、预览禁写和两尺寸主题可读性",
- "kind": "browser",
- "featureIds": [
- "view.orbit",
- "view.pan",
- "view.zoom",
- "view.top",
- "view.perspective",
- "view.grid",
- "view.focus",
- "selection.viewport",
- "selection.highlight",
- "preview.enter",
- "preview.exit",
- "preview.lock",
- "lifecycle.resize-theme"
- ],
- "scope": "以源测试实际断言为准;计划关联不代表最终通过。"
- },
- {
- "file": "tools/scene-closure-engine.test.mjs",
- "testTitle": "selection highlight cleanup restores source materials and releases its own GPU helper",
- "featureIds": [
- "selection.highlight",
- "lifecycle.destroy"
- ],
- "kind": "unit",
- "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
- },
- {
- "file": "tools/scene-cover-capture.test.mjs",
- "testTitle": "copies synchronously without bounds, gizmo, grid or selection glow, then restores before JPEG encoding",
- "featureIds": [
- "cover.capture",
- "selection.highlight",
- "view.grid"
- ],
- "kind": "unit",
- "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
- }
- ]
- },
- {
- "id": "transform.translate",
- "name": "移动工具及真实 XYZ 手柄",
- "group": "三维视口、选择与变换",
- "verification": "PENDING",
- "plannedEvidence": [
- {
- "file": "tests/scene-editor-viewport-closure.spec.ts",
- "line": 148,
- "evidenceName": "viewport-transform",
- "testTitle": "真实变换手柄移动旋转缩放、吸附与保存重开",
- "kind": "browser",
- "featureIds": [
- "transform.translate",
- "transform.rotate",
- "transform.scale",
- "transform.keys",
- "transform.snap"
- ],
- "scope": "以源测试实际断言为准;计划关联不代表最终通过。"
- }
- ]
- },
- {
- "id": "transform.rotate",
- "name": "旋转工具及真实旋转手柄",
- "group": "三维视口、选择与变换",
- "verification": "PENDING",
- "plannedEvidence": [
- {
- "file": "tests/scene-editor-viewport-closure.spec.ts",
- "line": 148,
- "evidenceName": "viewport-transform",
- "testTitle": "真实变换手柄移动旋转缩放、吸附与保存重开",
- "kind": "browser",
- "featureIds": [
- "transform.translate",
- "transform.rotate",
- "transform.scale",
- "transform.keys",
- "transform.snap"
- ],
- "scope": "以源测试实际断言为准;计划关联不代表最终通过。"
- }
- ]
- },
- {
- "id": "transform.scale",
- "name": "缩放工具及真实缩放手柄",
- "group": "三维视口、选择与变换",
- "verification": "PENDING",
- "plannedEvidence": [
- {
- "file": "tests/scene-editor-viewport-closure.spec.ts",
- "line": 148,
- "evidenceName": "viewport-transform",
- "testTitle": "真实变换手柄移动旋转缩放、吸附与保存重开",
- "kind": "browser",
- "featureIds": [
- "transform.translate",
- "transform.rotate",
- "transform.scale",
- "transform.keys",
- "transform.snap"
- ],
- "scope": "以源测试实际断言为准;计划关联不代表最终通过。"
- },
- {
- "file": "tools/scene-closure-engine.test.mjs",
- "testTitle": "gizmo scaling across its pivot follows the same strictly positive scale contract as inspector edits",
- "featureIds": [
- "transform.scale",
- "property.scale"
- ],
- "kind": "unit",
- "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
- }
- ]
- },
- {
- "id": "transform.keys",
- "name": "W/E/R 快捷键",
- "group": "三维视口、选择与变换",
- "verification": "PENDING",
- "plannedEvidence": [
- {
- "file": "tests/scene-editor-viewport-closure.spec.ts",
- "line": 148,
- "evidenceName": "viewport-transform",
- "testTitle": "真实变换手柄移动旋转缩放、吸附与保存重开",
- "kind": "browser",
- "featureIds": [
- "transform.translate",
- "transform.rotate",
- "transform.scale",
- "transform.keys",
- "transform.snap"
- ],
- "scope": "以源测试实际断言为准;计划关联不代表最终通过。"
- },
- {
- "file": "tools/scene-closure-engine.test.mjs",
- "testTitle": "typing undo/redo stays inside text controls and inactive cached editors ignore global shortcuts",
- "featureIds": [
- "history.undo",
- "history.redo",
- "transform.keys",
- "lifecycle.cache"
- ],
- "kind": "unit",
- "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
- }
- ]
- },
- {
- "id": "transform.snap",
- "name": "吸附 0.5m 与旋转 15° 开关",
- "group": "三维视口、选择与变换",
- "verification": "PENDING",
- "plannedEvidence": [
- {
- "file": "tests/scene-editor-viewport-closure.spec.ts",
- "line": 148,
- "evidenceName": "viewport-transform",
- "testTitle": "真实变换手柄移动旋转缩放、吸附与保存重开",
- "kind": "browser",
- "featureIds": [
- "transform.translate",
- "transform.rotate",
- "transform.scale",
- "transform.keys",
- "transform.snap"
- ],
- "scope": "以源测试实际断言为准;计划关联不代表最终通过。"
- }
- ]
- },
- {
- "id": "property.name",
- "name": "显示名称",
- "group": "对象属性、部件与底部面板",
- "verification": "PENDING",
- "plannedEvidence": [
- {
- "file": "tests/scene-editor-workflow-closure.spec.ts",
- "line": 64,
- "evidenceName": "fox-properties-cover",
- "testTitle": "狐狸:真实细分权限、全部属性、清空绑定、蒙皮保护、相机与封面保存重开",
- "kind": "browser",
- "featureIds": [
- "project.load",
- "project.title",
- "project.save",
- "selection.tree",
- "property.name",
- "property.visible",
- "property.operable",
- "property.position",
- "property.rotation",
- "property.scale",
- "property.device-id",
- "property.model-id",
- "property.semantic",
- "part.source",
- "panel.binding",
- "cover.capture",
- "cover.atomic"
- ],
- "scope": "真实字段输入与清空、六个语义选项、蒙皮保护、源模型可见,正文/资产/封面保存和刷新;不把原件旧模板组合当新模板结果。"
- },
- {
- "file": "tests/scene-editor-workflow-closure.spec.ts",
- "line": 121,
- "evidenceName": "truck-part-history",
- "testTitle": "牛奶卡车:刚性部件独立变换、软删除、历史与保存基线一致",
- "kind": "browser",
- "featureIds": [
- "project.save-key",
- "part.transform",
- "part.soft-delete",
- "history.undo",
- "history.redo",
- "property.name",
- "view.enclosure-full",
- "view.enclosure-xray",
- "view.enclosure-hidden"
- ],
- "scope": "实际部件变换和软删除、按钮/键盘历史、保存基线与输入框自身撤销;双实例隔离及车库围护三种模式真实点击、导出和隐藏后保存刷新。"
- }
- ]
- },
- {
- "id": "property.visible",
- "name": "在场景中可见",
- "group": "对象属性、部件与底部面板",
- "verification": "PENDING",
- "plannedEvidence": [
- {
- "file": "tests/scene-editor-templates-closure.spec.ts",
- "line": 246,
- "evidenceName": "published-model-assets",
- "testTitle": "模型成果狐狸卡车双击与真实拖入、树搜索和部件隐藏重开",
- "kind": "browser",
- "featureIds": [
- "assets.catalog",
- "assets.model-double-click",
- "assets.model-drop",
- "search.tree",
- "part.source",
- "property.visible"
- ],
- "scope": "API 已发布目录,狐狸双击和卡车真实拖入;固定来源版本、树根/部件搜索;卡车刚体部件隐藏保存重开,最后恢复可见。基线树没有折叠按钮,不将搜索伪称折叠。"
- },
- {
- "file": "tests/scene-editor-workflow-closure.spec.ts",
- "line": 64,
- "evidenceName": "fox-properties-cover",
- "testTitle": "狐狸:真实细分权限、全部属性、清空绑定、蒙皮保护、相机与封面保存重开",
- "kind": "browser",
- "featureIds": [
- "project.load",
- "project.title",
- "project.save",
- "selection.tree",
- "property.name",
- "property.visible",
- "property.operable",
- "property.position",
- "property.rotation",
- "property.scale",
- "property.device-id",
- "property.model-id",
- "property.semantic",
- "part.source",
- "panel.binding",
- "cover.capture",
- "cover.atomic"
- ],
- "scope": "真实字段输入与清空、六个语义选项、蒙皮保护、源模型可见,正文/资产/封面保存和刷新;不把原件旧模板组合当新模板结果。"
- }
- ]
- },
- {
- "id": "property.operable",
- "name": "可作为实训目标",
- "group": "对象属性、部件与底部面板",
- "verification": "PENDING",
- "plannedEvidence": [
- {
- "file": "tests/scene-editor-workflow-closure.spec.ts",
- "line": 64,
- "evidenceName": "fox-properties-cover",
- "testTitle": "狐狸:真实细分权限、全部属性、清空绑定、蒙皮保护、相机与封面保存重开",
- "kind": "browser",
- "featureIds": [
- "project.load",
- "project.title",
- "project.save",
- "selection.tree",
- "property.name",
- "property.visible",
- "property.operable",
- "property.position",
- "property.rotation",
- "property.scale",
- "property.device-id",
- "property.model-id",
- "property.semantic",
- "part.source",
- "panel.binding",
- "cover.capture",
- "cover.atomic"
- ],
- "scope": "真实字段输入与清空、六个语义选项、蒙皮保护、源模型可见,正文/资产/封面保存和刷新;不把原件旧模板组合当新模板结果。"
- }
- ]
- },
- {
- "id": "property.position",
- "name": "位置 X/Y/Z 数值",
- "group": "对象属性、部件与底部面板",
- "verification": "PENDING",
- "plannedEvidence": [
- {
- "file": "tests/scene-editor-workflow-closure.spec.ts",
- "line": 64,
- "evidenceName": "fox-properties-cover",
- "testTitle": "狐狸:真实细分权限、全部属性、清空绑定、蒙皮保护、相机与封面保存重开",
- "kind": "browser",
- "featureIds": [
- "project.load",
- "project.title",
- "project.save",
- "selection.tree",
- "property.name",
- "property.visible",
- "property.operable",
- "property.position",
- "property.rotation",
- "property.scale",
- "property.device-id",
- "property.model-id",
- "property.semantic",
- "part.source",
- "panel.binding",
- "cover.capture",
- "cover.atomic"
- ],
- "scope": "真实字段输入与清空、六个语义选项、蒙皮保护、源模型可见,正文/资产/封面保存和刷新;不把原件旧模板组合当新模板结果。"
- }
- ]
- },
- {
- "id": "property.rotation",
- "name": "旋转 X/Y/Z 数值",
- "group": "对象属性、部件与底部面板",
- "verification": "PENDING",
- "plannedEvidence": [
- {
- "file": "tests/scene-editor-workflow-closure.spec.ts",
- "line": 64,
- "evidenceName": "fox-properties-cover",
- "testTitle": "狐狸:真实细分权限、全部属性、清空绑定、蒙皮保护、相机与封面保存重开",
- "kind": "browser",
- "featureIds": [
- "project.load",
- "project.title",
- "project.save",
- "selection.tree",
- "property.name",
- "property.visible",
- "property.operable",
- "property.position",
- "property.rotation",
- "property.scale",
- "property.device-id",
- "property.model-id",
- "property.semantic",
- "part.source",
- "panel.binding",
- "cover.capture",
- "cover.atomic"
- ],
- "scope": "真实字段输入与清空、六个语义选项、蒙皮保护、源模型可见,正文/资产/封面保存和刷新;不把原件旧模板组合当新模板结果。"
- }
- ]
- },
- {
- "id": "property.scale",
- "name": "缩放 X/Y/Z 数值及有效值",
- "group": "对象属性、部件与底部面板",
- "verification": "PENDING",
- "plannedEvidence": [
- {
- "file": "tests/scene-editor-workflow-closure.spec.ts",
- "line": 64,
- "evidenceName": "fox-properties-cover",
- "testTitle": "狐狸:真实细分权限、全部属性、清空绑定、蒙皮保护、相机与封面保存重开",
- "kind": "browser",
- "featureIds": [
- "project.load",
- "project.title",
- "project.save",
- "selection.tree",
- "property.name",
- "property.visible",
- "property.operable",
- "property.position",
- "property.rotation",
- "property.scale",
- "property.device-id",
- "property.model-id",
- "property.semantic",
- "part.source",
- "panel.binding",
- "cover.capture",
- "cover.atomic"
- ],
- "scope": "真实字段输入与清空、六个语义选项、蒙皮保护、源模型可见,正文/资产/封面保存和刷新;不把原件旧模板组合当新模板结果。"
- },
- {
- "file": "tools/scene-closure-engine.test.mjs",
- "testTitle": "gizmo scaling across its pivot follows the same strictly positive scale contract as inspector edits",
- "featureIds": [
- "transform.scale",
- "property.scale"
- ],
- "kind": "unit",
- "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
- },
- {
- "file": "tools/scene-model-placement.test.mjs",
- "testTitle": "scale input accepts real GLTF normalization factors below 0.05",
- "featureIds": [
- "property.scale"
- ],
- "kind": "unit",
- "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
- }
- ]
- },
- {
- "id": "property.device-id",
- "name": "设备编号",
- "group": "对象属性、部件与底部面板",
- "verification": "PENDING",
- "plannedEvidence": [
- {
- "file": "tests/scene-editor-workflow-closure.spec.ts",
- "line": 64,
- "evidenceName": "fox-properties-cover",
- "testTitle": "狐狸:真实细分权限、全部属性、清空绑定、蒙皮保护、相机与封面保存重开",
- "kind": "browser",
- "featureIds": [
- "project.load",
- "project.title",
- "project.save",
- "selection.tree",
- "property.name",
- "property.visible",
- "property.operable",
- "property.position",
- "property.rotation",
- "property.scale",
- "property.device-id",
- "property.model-id",
- "property.semantic",
- "part.source",
- "panel.binding",
- "cover.capture",
- "cover.atomic"
- ],
- "scope": "真实字段输入与清空、六个语义选项、蒙皮保护、源模型可见,正文/资产/封面保存和刷新;不把原件旧模板组合当新模板结果。"
- }
- ]
- },
- {
- "id": "property.model-id",
- "name": "物模型编号",
- "group": "对象属性、部件与底部面板",
- "verification": "PENDING",
- "plannedEvidence": [
- {
- "file": "tests/scene-editor-workflow-closure.spec.ts",
- "line": 64,
- "evidenceName": "fox-properties-cover",
- "testTitle": "狐狸:真实细分权限、全部属性、清空绑定、蒙皮保护、相机与封面保存重开",
- "kind": "browser",
- "featureIds": [
- "project.load",
- "project.title",
- "project.save",
- "selection.tree",
- "property.name",
- "property.visible",
- "property.operable",
- "property.position",
- "property.rotation",
- "property.scale",
- "property.device-id",
- "property.model-id",
- "property.semantic",
- "part.source",
- "panel.binding",
- "cover.capture",
- "cover.atomic"
- ],
- "scope": "真实字段输入与清空、六个语义选项、蒙皮保护、源模型可见,正文/资产/封面保存和刷新;不把原件旧模板组合当新模板结果。"
- }
- ]
- },
- {
- "id": "property.semantic",
- "name": "语义类型六个选项",
- "group": "对象属性、部件与底部面板",
- "verification": "PENDING",
- "plannedEvidence": [
- {
- "file": "tests/scene-editor-workflow-closure.spec.ts",
- "line": 64,
- "evidenceName": "fox-properties-cover",
- "testTitle": "狐狸:真实细分权限、全部属性、清空绑定、蒙皮保护、相机与封面保存重开",
- "kind": "browser",
- "featureIds": [
- "project.load",
- "project.title",
- "project.save",
- "selection.tree",
- "property.name",
- "property.visible",
- "property.operable",
- "property.position",
- "property.rotation",
- "property.scale",
- "property.device-id",
- "property.model-id",
- "property.semantic",
- "part.source",
- "panel.binding",
- "cover.capture",
- "cover.atomic"
- ],
- "scope": "真实字段输入与清空、六个语义选项、蒙皮保护、源模型可见,正文/资产/封面保存和刷新;不把原件旧模板组合当新模板结果。"
- }
- ]
- },
- {
- "id": "part.source",
- "name": "模型来源与部件权限说明",
- "group": "对象属性、部件与底部面板",
- "verification": "PENDING",
- "plannedEvidence": [
- {
- "file": "tests/scene-editor-templates-closure.spec.ts",
- "line": 246,
- "evidenceName": "published-model-assets",
- "testTitle": "模型成果狐狸卡车双击与真实拖入、树搜索和部件隐藏重开",
- "kind": "browser",
- "featureIds": [
- "assets.catalog",
- "assets.model-double-click",
- "assets.model-drop",
- "search.tree",
- "part.source",
- "property.visible"
- ],
- "scope": "API 已发布目录,狐狸双击和卡车真实拖入;固定来源版本、树根/部件搜索;卡车刚体部件隐藏保存重开,最后恢复可见。基线树没有折叠按钮,不将搜索伪称折叠。"
- },
- {
- "file": "tests/scene-editor-workflow-closure.spec.ts",
- "line": 64,
- "evidenceName": "fox-properties-cover",
- "testTitle": "狐狸:真实细分权限、全部属性、清空绑定、蒙皮保护、相机与封面保存重开",
- "kind": "browser",
- "featureIds": [
- "project.load",
- "project.title",
- "project.save",
- "selection.tree",
- "property.name",
- "property.visible",
- "property.operable",
- "property.position",
- "property.rotation",
- "property.scale",
- "property.device-id",
- "property.model-id",
- "property.semantic",
- "part.source",
- "panel.binding",
- "cover.capture",
- "cover.atomic"
- ],
- "scope": "真实字段输入与清空、六个语义选项、蒙皮保护、源模型可见,正文/资产/封面保存和刷新;不把原件旧模板组合当新模板结果。"
- }
- ]
- },
- {
- "id": "part.transform",
- "name": "刚性部件独立变换并保存覆盖",
- "group": "对象属性、部件与底部面板",
- "verification": "PENDING",
- "plannedEvidence": [
- {
- "file": "tests/scene-editor-workflow-closure.spec.ts",
- "line": 121,
- "evidenceName": "truck-part-history",
- "testTitle": "牛奶卡车:刚性部件独立变换、软删除、历史与保存基线一致",
- "kind": "browser",
- "featureIds": [
- "project.save-key",
- "part.transform",
- "part.soft-delete",
- "history.undo",
- "history.redo",
- "property.name",
- "view.enclosure-full",
- "view.enclosure-xray",
- "view.enclosure-hidden"
- ],
- "scope": "实际部件变换和软删除、按钮/键盘历史、保存基线与输入框自身撤销;双实例隔离及车库围护三种模式真实点击、导出和隐藏后保存刷新。"
- },
- {
- "file": "tools/scene-closure-engine.test.mjs",
- "testTitle": "two published instances have unique tree part IDs and editing the second persists independently after reopen",
- "featureIds": [
- "part.transform",
- "selection.tree"
- ],
- "kind": "unit",
- "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
- },
- {
- "file": "tools/scene-closure-engine.test.mjs",
- "testTitle": "legacy duplicate instance IDs migrate only later owners in document order despite reversed GLB completion",
- "featureIds": [
- "part.transform",
- "publish.fixed-model"
- ],
- "kind": "unit",
- "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
- }
- ]
- },
- {
- "id": "part.soft-delete",
- "name": "部件软删除与恢复",
- "group": "对象属性、部件与底部面板",
- "verification": "PENDING",
- "plannedEvidence": [
- {
- "file": "tests/scene-editor-workflow-closure.spec.ts",
- "line": 121,
- "evidenceName": "truck-part-history",
- "testTitle": "牛奶卡车:刚性部件独立变换、软删除、历史与保存基线一致",
- "kind": "browser",
- "featureIds": [
- "project.save-key",
- "part.transform",
- "part.soft-delete",
- "history.undo",
- "history.redo",
- "property.name",
- "view.enclosure-full",
- "view.enclosure-xray",
- "view.enclosure-hidden"
- ],
- "scope": "实际部件变换和软删除、按钮/键盘历史、保存基线与输入框自身撤销;双实例隔离及车库围护三种模式真实点击、导出和隐藏后保存刷新。"
- }
- ]
- },
- {
- "id": "object.delete",
- "name": "删除根对象按钮 / Delete",
- "group": "对象属性、部件与底部面板",
- "verification": "PENDING",
- "plannedEvidence": [
- {
- "file": "tests/scene-editor-templates-closure.spec.ts",
- "line": 193,
- "evidenceName": "venue-assets",
- "testTitle": "两种整体场地加载、重复放置阻止与显式删除后替换",
- "kind": "browser",
- "featureIds": [
- "asset.vehicle-depot",
- "asset.field-terrain",
- "object.delete"
- ],
- "scope": "车库和起伏地形真实加载并分别保存重开;已有整体场地时阻止叠加,显式删除旧场地后才能替换。"
- },
- {
- "file": "tools/scene-closure-engine.test.mjs",
- "testTitle": "deleting a root disposes its geometry and materials after clearing selection",
- "featureIds": [
- "object.delete",
- "lifecycle.destroy"
- ],
- "kind": "unit",
- "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
- }
- ]
- },
- {
- "id": "panel.objects",
- "name": "底部对象列表与选中",
- "group": "对象属性、部件与底部面板",
- "verification": "PENDING",
- "plannedEvidence": [
- {
- "file": "tests/scene-editor-templates-closure.spec.ts",
- "line": 161,
- "evidenceName": "basic-assets",
- "testTitle": "八种基础资源逐项放置、真实拖放、搜索和保存重开",
- "kind": "browser",
- "featureIds": [
- "assets.basic-double-click",
- "assets.basic-drop",
- "search.assets",
- "panel.objects",
- "asset.diagnostic",
- "asset.equipment",
- "asset.workbench",
- "asset.shelf",
- "asset.safety-zone",
- "asset.camera",
- "asset.worker",
- "asset.light"
- ],
- "scope": "8 种基础资源分别双击放置并分开布置;真实指针拖入第 9 个工作台、吸附检查、唯一编号、保存刷新一致。照明为现有资源外观,不冒称连接真实灯控。"
- }
- ]
- },
- {
- "id": "panel.binding",
- "name": "设备绑定总表",
- "group": "对象属性、部件与底部面板",
- "verification": "PENDING",
- "plannedEvidence": [
- {
- "file": "tests/scene-editor-workflow-closure.spec.ts",
- "line": 64,
- "evidenceName": "fox-properties-cover",
- "testTitle": "狐狸:真实细分权限、全部属性、清空绑定、蒙皮保护、相机与封面保存重开",
- "kind": "browser",
- "featureIds": [
- "project.load",
- "project.title",
- "project.save",
- "selection.tree",
- "property.name",
- "property.visible",
- "property.operable",
- "property.position",
- "property.rotation",
- "property.scale",
- "property.device-id",
- "property.model-id",
- "property.semantic",
- "part.source",
- "panel.binding",
- "cover.capture",
- "cover.atomic"
- ],
- "scope": "真实字段输入与清空、六个语义选项、蒙皮保护、源模型可见,正文/资产/封面保存和刷新;不把原件旧模板组合当新模板结果。"
- }
- ]
- },
- {
- "id": "panel.validation",
- "name": "底部发布检查面板",
- "group": "对象属性、部件与底部面板",
- "verification": "PENDING",
- "plannedEvidence": [
- {
- "file": "tests/scene-editor-persistence-closure.spec.ts",
- "line": 153,
- "evidenceName": "publish-fixed-version",
- "testTitle": "发布:前端绑定校验、保存与发布失败阻断、真实固定版本供训练目录使用",
- "kind": "browser",
- "featureIds": [
- "validation.complete",
- "validation.bindings",
- "panel.validation",
- "publish.saved",
- "publish.failure",
- "publish.fixed-model",
- "cover.atomic",
- "project.back"
- ],
- "scope": "实际校验、绑定阻断、POST503不假发布,重试发布当前固定版本;返回列表保留编辑标签,搜索当前项目并核对真实封面图片加载。下游静态渲染另有独立用例。"
- },
- {
- "file": "tools/scene-closure-engine.test.mjs",
- "testTitle": "verify opens live validation and whitespace binding edits immediately invalidate the active tab",
- "featureIds": [
- "panel.validation",
- "validation.bindings"
- ],
- "kind": "unit",
- "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
- }
- ]
- },
- {
- "id": "panel.logs",
- "name": "操作日志",
- "group": "对象属性、部件与底部面板",
- "verification": "PENDING",
- "plannedEvidence": [
- {
- "file": "tools/scene-closure-engine.test.mjs",
- "testTitle": "activity log reflects actual session events and keeps API error details transient",
- "featureIds": [
- "panel.logs"
- ],
- "kind": "unit",
- "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
- }
- ]
- },
- {
- "id": "history.undo",
- "name": "回退按钮 / Ctrl+Z",
- "group": "历史与预览",
- "verification": "PENDING",
- "plannedEvidence": [
- {
- "file": "tests/scene-editor-workflow-closure.spec.ts",
- "line": 121,
- "evidenceName": "truck-part-history",
- "testTitle": "牛奶卡车:刚性部件独立变换、软删除、历史与保存基线一致",
- "kind": "browser",
- "featureIds": [
- "project.save-key",
- "part.transform",
- "part.soft-delete",
- "history.undo",
- "history.redo",
- "property.name",
- "view.enclosure-full",
- "view.enclosure-xray",
- "view.enclosure-hidden"
- ],
- "scope": "实际部件变换和软删除、按钮/键盘历史、保存基线与输入框自身撤销;双实例隔离及车库围护三种模式真实点击、导出和隐藏后保存刷新。"
- },
- {
- "file": "tools/scene-closure-engine.test.mjs",
- "testTitle": "typing undo/redo stays inside text controls and inactive cached editors ignore global shortcuts",
- "featureIds": [
- "history.undo",
- "history.redo",
- "transform.keys",
- "lifecycle.cache"
- ],
- "kind": "unit",
- "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
- },
- {
- "file": "tools/scene-closure-engine.test.mjs",
- "testTitle": "loading and history restoration preserve an authored camera rather than auto-focusing a vehicle",
- "featureIds": [
- "json.rendering",
- "history.undo"
- ],
- "kind": "unit",
- "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
- },
- {
- "file": "tools/scene-closure-engine.test.mjs",
- "testTitle": "save B then undo A stays dirty, and redo B returns to the actual saved baseline",
- "featureIds": [
- "history.undo",
- "history.redo"
- ],
- "kind": "unit",
- "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
- },
- {
- "file": "tools/scene-closure-engine.test.mjs",
- "testTitle": "default history caps at 60 snapshots, stops at either edge and discards redo only after a new branch",
- "featureIds": [
- "history.capacity",
- "history.undo",
- "history.redo"
- ],
- "kind": "unit",
- "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
- }
- ]
- },
- {
- "id": "history.redo",
- "name": "前进按钮 / Ctrl+Y / Ctrl+Shift+Z",
- "group": "历史与预览",
- "verification": "PENDING",
- "plannedEvidence": [
- {
- "file": "tests/scene-editor-workflow-closure.spec.ts",
- "line": 121,
- "evidenceName": "truck-part-history",
- "testTitle": "牛奶卡车:刚性部件独立变换、软删除、历史与保存基线一致",
- "kind": "browser",
- "featureIds": [
- "project.save-key",
- "part.transform",
- "part.soft-delete",
- "history.undo",
- "history.redo",
- "property.name",
- "view.enclosure-full",
- "view.enclosure-xray",
- "view.enclosure-hidden"
- ],
- "scope": "实际部件变换和软删除、按钮/键盘历史、保存基线与输入框自身撤销;双实例隔离及车库围护三种模式真实点击、导出和隐藏后保存刷新。"
- },
- {
- "file": "tools/scene-closure-engine.test.mjs",
- "testTitle": "typing undo/redo stays inside text controls and inactive cached editors ignore global shortcuts",
- "featureIds": [
- "history.undo",
- "history.redo",
- "transform.keys",
- "lifecycle.cache"
- ],
- "kind": "unit",
- "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
- },
- {
- "file": "tools/scene-closure-engine.test.mjs",
- "testTitle": "save B then undo A stays dirty, and redo B returns to the actual saved baseline",
- "featureIds": [
- "history.undo",
- "history.redo"
- ],
- "kind": "unit",
- "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
- },
- {
- "file": "tools/scene-closure-engine.test.mjs",
- "testTitle": "default history caps at 60 snapshots, stops at either edge and discards redo only after a new branch",
- "featureIds": [
- "history.capacity",
- "history.undo",
- "history.redo"
- ],
- "kind": "unit",
- "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
- }
- ]
- },
- {
- "id": "history.capacity",
- "name": "60 步历史上限与边界",
- "group": "历史与预览",
- "verification": "PENDING",
- "plannedEvidence": [
- {
- "file": "tools/scene-closure-engine.test.mjs",
- "testTitle": "default history caps at 60 snapshots, stops at either edge and discards redo only after a new branch",
- "featureIds": [
- "history.capacity",
- "history.undo",
- "history.redo"
- ],
- "kind": "unit",
- "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
- }
- ]
- },
- {
- "id": "history.failure",
- "name": "异步历史恢复失败/互斥",
- "group": "历史与预览",
- "verification": "PENDING",
- "plannedEvidence": [
- {
- "file": "tools/scene-closure-engine.test.mjs",
- "testTitle": "failed undo restoration retains live objects and keeps the undo target available for retry",
- "featureIds": [
- "history.failure"
- ],
- "kind": "unit",
- "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
- },
- {
- "file": "tools/scene-closure-engine.test.mjs",
- "testTitle": "replacement failure waits for other started loads before restoring the original scene",
- "featureIds": [
- "history.failure",
- "glb.pending"
- ],
- "kind": "unit",
- "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
- }
- ]
- },
- {
- "id": "preview.enter",
- "name": "进入运行预览",
- "group": "历史与预览",
- "verification": "PENDING",
- "plannedEvidence": [
- {
- "file": "tests/scene-editor-viewport-closure.spec.ts",
- "line": 117,
- "evidenceName": "viewport-camera-theme",
- "testTitle": "真实相机操控、视口拾取、预览禁写和两尺寸主题可读性",
- "kind": "browser",
- "featureIds": [
- "view.orbit",
- "view.pan",
- "view.zoom",
- "view.top",
- "view.perspective",
- "view.grid",
- "view.focus",
- "selection.viewport",
- "selection.highlight",
- "preview.enter",
- "preview.exit",
- "preview.lock",
- "lifecycle.resize-theme"
- ],
- "scope": "以源测试实际断言为准;计划关联不代表最终通过。"
- },
- {
- "file": "tests/scene-editor-workflow-closure.spec.ts",
- "line": 190,
- "evidenceName": "readonly",
- "testTitle": "只读管理员:可浏览预览与导出,模板/资源/键盘/接口不能改场景",
- "kind": "browser",
- "featureIds": [
- "permission.readonly",
- "permission.update",
- "permission.publish",
- "preview.enter",
- "preview.exit",
- "preview.lock",
- "json.export"
- ],
- "scope": "只读按钮/模板/资源禁写、蒙皮浏览、运行预览与快捷键不变更对象,直接PUT拒绝;具体搜索/鼠标覆盖另见视口用例。"
- }
- ]
- },
- {
- "id": "preview.exit",
- "name": "按钮 / Escape 退出预览",
- "group": "历史与预览",
- "verification": "PENDING",
- "plannedEvidence": [
- {
- "file": "tests/scene-editor-viewport-closure.spec.ts",
- "line": 117,
- "evidenceName": "viewport-camera-theme",
- "testTitle": "真实相机操控、视口拾取、预览禁写和两尺寸主题可读性",
- "kind": "browser",
- "featureIds": [
- "view.orbit",
- "view.pan",
- "view.zoom",
- "view.top",
- "view.perspective",
- "view.grid",
- "view.focus",
- "selection.viewport",
- "selection.highlight",
- "preview.enter",
- "preview.exit",
- "preview.lock",
- "lifecycle.resize-theme"
- ],
- "scope": "以源测试实际断言为准;计划关联不代表最终通过。"
- },
- {
- "file": "tests/scene-editor-workflow-closure.spec.ts",
- "line": 190,
- "evidenceName": "readonly",
- "testTitle": "只读管理员:可浏览预览与导出,模板/资源/键盘/接口不能改场景",
- "kind": "browser",
- "featureIds": [
- "permission.readonly",
- "permission.update",
- "permission.publish",
- "preview.enter",
- "preview.exit",
- "preview.lock",
- "json.export"
- ],
- "scope": "只读按钮/模板/资源禁写、蒙皮浏览、运行预览与快捷键不变更对象,直接PUT拒绝;具体搜索/鼠标覆盖另见视口用例。"
- },
- {
- "file": "tools/scene-closure-engine.test.mjs",
- "testTitle": "preview locks mutation controls and Delete while Escape restores editing",
- "featureIds": [
- "preview.lock",
- "preview.exit"
- ],
- "kind": "unit",
- "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
- }
- ]
- },
- {
- "id": "preview.lock",
- "name": "预览中禁止编辑",
- "group": "历史与预览",
- "verification": "PENDING",
- "plannedEvidence": [
- {
- "file": "tests/scene-editor-viewport-closure.spec.ts",
- "line": 117,
- "evidenceName": "viewport-camera-theme",
- "testTitle": "真实相机操控、视口拾取、预览禁写和两尺寸主题可读性",
- "kind": "browser",
- "featureIds": [
- "view.orbit",
- "view.pan",
- "view.zoom",
- "view.top",
- "view.perspective",
- "view.grid",
- "view.focus",
- "selection.viewport",
- "selection.highlight",
- "preview.enter",
- "preview.exit",
- "preview.lock",
- "lifecycle.resize-theme"
- ],
- "scope": "以源测试实际断言为准;计划关联不代表最终通过。"
- },
- {
- "file": "tests/scene-editor-workflow-closure.spec.ts",
- "line": 190,
- "evidenceName": "readonly",
- "testTitle": "只读管理员:可浏览预览与导出,模板/资源/键盘/接口不能改场景",
- "kind": "browser",
- "featureIds": [
- "permission.readonly",
- "permission.update",
- "permission.publish",
- "preview.enter",
- "preview.exit",
- "preview.lock",
- "json.export"
- ],
- "scope": "只读按钮/模板/资源禁写、蒙皮浏览、运行预览与快捷键不变更对象,直接PUT拒绝;具体搜索/鼠标覆盖另见视口用例。"
- },
- {
- "file": "tools/scene-closure-engine.test.mjs",
- "testTitle": "preview locks mutation controls and Delete while Escape restores editing",
- "featureIds": [
- "preview.lock",
- "preview.exit"
- ],
- "kind": "unit",
- "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
- }
- ]
- },
- {
- "id": "cover.capture",
- "name": "保存时截取当前三维场景封面",
- "group": "保存封面、发布与依赖",
- "verification": "PENDING",
- "plannedEvidence": [
- {
- "file": "tests/scene-editor-workflow-closure.spec.ts",
- "line": 64,
- "evidenceName": "fox-properties-cover",
- "testTitle": "狐狸:真实细分权限、全部属性、清空绑定、蒙皮保护、相机与封面保存重开",
- "kind": "browser",
- "featureIds": [
- "project.load",
- "project.title",
- "project.save",
- "selection.tree",
- "property.name",
- "property.visible",
- "property.operable",
- "property.position",
- "property.rotation",
- "property.scale",
- "property.device-id",
- "property.model-id",
- "property.semantic",
- "part.source",
- "panel.binding",
- "cover.capture",
- "cover.atomic"
- ],
- "scope": "真实字段输入与清空、六个语义选项、蒙皮保护、源模型可见,正文/资产/封面保存和刷新;不把原件旧模板组合当新模板结果。"
- },
- {
- "file": "tools/scene-cover-capture.test.mjs",
- "testTitle": "copies synchronously without bounds, gizmo, grid or selection glow, then restores before JPEG encoding",
- "featureIds": [
- "cover.capture",
- "selection.highlight",
- "view.grid"
- ],
- "kind": "unit",
- "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
- }
- ]
- },
- {
- "id": "cover.atomic",
- "name": "封面资产与文档同次保存",
- "group": "保存封面、发布与依赖",
- "verification": "PENDING",
- "plannedEvidence": [
- {
- "file": "tests/scene-editor-persistence-closure.spec.ts",
- "line": 153,
- "evidenceName": "publish-fixed-version",
- "testTitle": "发布:前端绑定校验、保存与发布失败阻断、真实固定版本供训练目录使用",
- "kind": "browser",
- "featureIds": [
- "validation.complete",
- "validation.bindings",
- "panel.validation",
- "publish.saved",
- "publish.failure",
- "publish.fixed-model",
- "cover.atomic",
- "project.back"
- ],
- "scope": "实际校验、绑定阻断、POST503不假发布,重试发布当前固定版本;返回列表保留编辑标签,搜索当前项目并核对真实封面图片加载。下游静态渲染另有独立用例。"
- },
- {
- "file": "tests/scene-editor-workflow-closure.spec.ts",
- "line": 64,
- "evidenceName": "fox-properties-cover",
- "testTitle": "狐狸:真实细分权限、全部属性、清空绑定、蒙皮保护、相机与封面保存重开",
- "kind": "browser",
- "featureIds": [
- "project.load",
- "project.title",
- "project.save",
- "selection.tree",
- "property.name",
- "property.visible",
- "property.operable",
- "property.position",
- "property.rotation",
- "property.scale",
- "property.device-id",
- "property.model-id",
- "property.semantic",
- "part.source",
- "panel.binding",
- "cover.capture",
- "cover.atomic"
- ],
- "scope": "真实字段输入与清空、六个语义选项、蒙皮保护、源模型可见,正文/资产/封面保存和刷新;不把原件旧模板组合当新模板结果。"
- },
- {
- "file": "tools/scene-cover-api.test.mjs",
- "testTitle": "scene image ticket, fixed asset replacement, dependencies and coverUri commit in one versioned PUT",
- "featureIds": [
- "cover.atomic"
- ],
- "kind": "unit",
- "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
- }
- ]
- },
- {
- "id": "cover.failure",
- "name": "截图/封面上传失败保留原封面",
- "group": "保存封面、发布与依赖",
- "verification": "PENDING",
- "plannedEvidence": [
- {
- "file": "tests/scene-editor-persistence-closure.spec.ts",
- "line": 85,
- "evidenceName": "save-cover-failure",
- "testTitle": "保存失败与封面降级:503 保留草稿,封面上传失败保留旧图,恢复后可重试",
- "kind": "browser",
- "featureIds": [
- "project.save-failure",
- "cover.failure"
- ],
- "scope": "正文PUT503不清草稿;封面上传503保留旧图但正文可保存;恢复服务后保存刷新。截图异常和409另由聚焦合同验证。"
- },
- {
- "file": "tools/scene-cover-api.test.mjs",
- "testTitle": "capture failure saves content with the previous cover and reports a warning result",
- "featureIds": [
- "cover.failure"
- ],
- "kind": "unit",
- "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
- },
- {
- "file": "tools/scene-cover-api.test.mjs",
- "testTitle": "upload conflict propagates without any content PUT",
- "featureIds": [
- "project.conflict",
- "cover.failure"
- ],
- "kind": "unit",
- "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
- }
- ]
- },
- {
- "id": "validation.complete",
- "name": "环境、对象用途、模型加载检查",
- "group": "保存封面、发布与依赖",
- "verification": "PENDING",
- "plannedEvidence": [
- {
- "file": "tests/scene-editor-persistence-closure.spec.ts",
- "line": 153,
- "evidenceName": "publish-fixed-version",
- "testTitle": "发布:前端绑定校验、保存与发布失败阻断、真实固定版本供训练目录使用",
- "kind": "browser",
- "featureIds": [
- "validation.complete",
- "validation.bindings",
- "panel.validation",
- "publish.saved",
- "publish.failure",
- "publish.fixed-model",
- "cover.atomic",
- "project.back"
- ],
- "scope": "实际校验、绑定阻断、POST503不假发布,重试发布当前固定版本;返回列表保留编辑标签,搜索当前项目并核对真实封面图片加载。下游静态渲染另有独立用例。"
- }
- ]
- },
- {
- "id": "validation.bindings",
- "name": "设备/物模型编号完整与唯一",
- "group": "保存封面、发布与依赖",
- "verification": "PENDING",
- "plannedEvidence": [
- {
- "file": "tests/scene-editor-persistence-closure.spec.ts",
- "line": 153,
- "evidenceName": "publish-fixed-version",
- "testTitle": "发布:前端绑定校验、保存与发布失败阻断、真实固定版本供训练目录使用",
- "kind": "browser",
- "featureIds": [
- "validation.complete",
- "validation.bindings",
- "panel.validation",
- "publish.saved",
- "publish.failure",
- "publish.fixed-model",
- "cover.atomic",
- "project.back"
- ],
- "scope": "实际校验、绑定阻断、POST503不假发布,重试发布当前固定版本;返回列表保留编辑标签,搜索当前项目并核对真实封面图片加载。下游静态渲染另有独立用例。"
- },
- {
- "file": "tools/scene-closure-engine.test.mjs",
- "testTitle": "new resource bindings do not reuse a saved serial after earlier objects were deleted",
- "featureIds": [
- "validation.bindings"
- ],
- "kind": "unit",
- "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
- },
- {
- "file": "tools/scene-closure-engine.test.mjs",
- "testTitle": "verify opens live validation and whitespace binding edits immediately invalidate the active tab",
- "featureIds": [
- "panel.validation",
- "validation.bindings"
- ],
- "kind": "unit",
- "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
- }
- ]
- },
- {
- "id": "validation.references",
- "name": "受控资源引用完整性",
- "group": "保存封面、发布与依赖",
- "verification": "PENDING",
- "plannedEvidence": [
- {
- "file": "tests/scene-editor-persistence-closure.spec.ts",
- "line": 61,
- "evidenceName": "json-glb-roundtrip",
- "testTitle": "工程 JSON 与小 GLB:真实上传、损坏拒绝、引用失败回滚、相机参数往返",
- "kind": "browser",
- "featureIds": [
- "json.export",
- "json.import",
- "json.invalid",
- "json.missing-resource",
- "json.rendering",
- "glb.import",
- "glb.invalid",
- "glb.references",
- "validation.references"
- ],
- "scope": "真实JSON/GLB文件输入、错误schema/损坏资源/上传503拒绝、错误assetCode回滚、稳定URI及渲染参数保存重开。"
- },
- {
- "file": "tools/scene-closure-assets.test.mjs",
- "testTitle": "an explicit missing code cannot fall back to the first READY asset",
- "featureIds": [
- "validation.references",
- "json.missing-resource"
- ],
- "kind": "unit",
- "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
- }
- ]
- },
- {
- "id": "publish.saved",
- "name": "发布场景按钮的真实 API 闭环",
- "group": "保存封面、发布与依赖",
- "verification": "PENDING",
- "plannedEvidence": [
- {
- "file": "tests/scene-editor-persistence-closure.spec.ts",
- "line": 153,
- "evidenceName": "publish-fixed-version",
- "testTitle": "发布:前端绑定校验、保存与发布失败阻断、真实固定版本供训练目录使用",
- "kind": "browser",
- "featureIds": [
- "validation.complete",
- "validation.bindings",
- "panel.validation",
- "publish.saved",
- "publish.failure",
- "publish.fixed-model",
- "cover.atomic",
- "project.back"
- ],
- "scope": "实际校验、绑定阻断、POST503不假发布,重试发布当前固定版本;返回列表保留编辑标签,搜索当前项目并核对真实封面图片加载。下游静态渲染另有独立用例。"
- }
- ]
- },
- {
- "id": "publish.only",
- "name": "只有发布权限时发布已存版本",
- "group": "保存封面、发布与依赖",
- "verification": "PENDING",
- "plannedEvidence": [
- {
- "file": "tests/scene-editor-permissions-closure.spec.ts",
- "line": 171,
- "evidenceName": "scene-publish-only",
- "testTitle": "仅场景发布权限:浏览器发布已存副本,不发送保存或上传请求",
- "kind": "browser",
- "featureIds": [
- "permission.publish",
- "publish.only",
- "publish.fixed-model"
- ],
- "scope": "以源测试实际断言为准;计划关联不代表最终通过。"
- }
- ]
- },
- {
- "id": "publish.failure",
- "name": "预检/保存/发布失败阻断",
- "group": "保存封面、发布与依赖",
- "verification": "PENDING",
- "plannedEvidence": [
- {
- "file": "tests/scene-editor-persistence-closure.spec.ts",
- "line": 153,
- "evidenceName": "publish-fixed-version",
- "testTitle": "发布:前端绑定校验、保存与发布失败阻断、真实固定版本供训练目录使用",
- "kind": "browser",
- "featureIds": [
- "validation.complete",
- "validation.bindings",
- "panel.validation",
- "publish.saved",
- "publish.failure",
- "publish.fixed-model",
- "cover.atomic",
- "project.back"
- ],
- "scope": "实际校验、绑定阻断、POST503不假发布,重试发布当前固定版本;返回列表保留编辑标签,搜索当前项目并核对真实封面图片加载。下游静态渲染另有独立用例。"
- }
- ]
- },
- {
- "id": "publish.concurrent",
- "name": "重复发布与上传/保存队列",
- "group": "保存封面、发布与依赖",
- "verification": "PENDING",
- "plannedEvidence": [
- {
- "file": "tools/scene-cover-api.test.mjs",
- "testTitle": "role switch waits through validation, save, and the later queued publish after dirty clears",
- "featureIds": [
- "publish.concurrent",
- "leave.busy",
- "leave.role-switch"
- ],
- "kind": "unit",
- "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
- },
- {
- "file": "../unreal_tran_web/src/features/scene-legacy/contentApiClient.test.mjs",
- "testTitle": "project operation queue serializes upload, save and publish including failures",
- "featureIds": [
- "publish.concurrent"
- ],
- "kind": "unit",
- "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
- }
- ]
- },
- {
- "id": "publish.fixed-model",
- "name": "固定 SCENE_MODEL 版本与多个实例",
- "group": "保存封面、发布与依赖",
- "verification": "PENDING",
- "plannedEvidence": [
- {
- "file": "tests/scene-editor-permissions-closure.spec.ts",
- "line": 142,
- "evidenceName": "scene-update-only",
- "testTitle": "仅场景编辑权限:固定模型可加载和保存,不能发布或访问模型页面",
- "kind": "browser",
- "featureIds": [
- "permission.update",
- "permission.publish",
- "publish.fixed-model"
- ],
- "scope": "以源测试实际断言为准;计划关联不代表最终通过。"
- },
- {
- "file": "tests/scene-editor-permissions-closure.spec.ts",
- "line": 171,
- "evidenceName": "scene-publish-only",
- "testTitle": "仅场景发布权限:浏览器发布已存副本,不发送保存或上传请求",
- "kind": "browser",
- "featureIds": [
- "permission.publish",
- "publish.only",
- "publish.fixed-model"
- ],
- "scope": "以源测试实际断言为准;计划关联不代表最终通过。"
- },
- {
- "file": "tests/scene-editor-persistence-closure.spec.ts",
- "line": 153,
- "evidenceName": "publish-fixed-version",
- "testTitle": "发布:前端绑定校验、保存与发布失败阻断、真实固定版本供训练目录使用",
- "kind": "browser",
- "featureIds": [
- "validation.complete",
- "validation.bindings",
- "panel.validation",
- "publish.saved",
- "publish.failure",
- "publish.fixed-model",
- "cover.atomic",
- "project.back"
- ],
- "scope": "实际校验、绑定阻断、POST503不假发布,重试发布当前固定版本;返回列表保留编辑标签,搜索当前项目并核对真实封面图片加载。下游静态渲染另有独立用例。"
- },
- {
- "file": "tools/scene-closure-engine.test.mjs",
- "testTitle": "legacy duplicate instance IDs migrate only later owners in document order despite reversed GLB completion",
- "featureIds": [
- "part.transform",
- "publish.fixed-model"
- ],
- "kind": "unit",
- "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
- },
- {
- "file": "tools/scene-closure-assets.test.mjs",
- "testTitle": "fixed model reads the exact version and downloads through its visible scene dependency",
- "featureIds": [
- "publish.fixed-model",
- "permission.update"
- ],
- "kind": "unit",
- "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
- },
- {
- "file": "../unreal_tran_web/src/features/scene-legacy/contentApiClient.test.mjs",
- "testTitle": "fixed model dependencies are recursively collected, exact and de-duplicated",
- "featureIds": [
- "publish.fixed-model"
- ],
- "kind": "unit",
- "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
- }
- ]
- },
- {
- "id": "publish.downstream",
- "name": "发布场景供训练选择和静态还原",
- "group": "保存封面、发布与依赖",
- "verification": "PENDING",
- "plannedEvidence": [
- {
- "file": "tests/scene-editor-downstream-closure.spec.ts",
- "line": 28,
- "evidenceName": "downstream-fox",
- "testTitle": "fox:场景发布后在真实训练编排选择、保存并重开静态模型",
- "kind": "browser",
- "featureIds": [
- "publish.downstream"
- ],
- "scope": "真实训练编排静态还原;不计来源模型动画/蓝图自动执行。"
- },
- {
- "file": "tests/scene-editor-downstream-closure.spec.ts",
- "line": 28,
- "evidenceName": "downstream-truck",
- "testTitle": "truck:场景发布后在真实训练编排选择、保存并重开静态模型",
- "kind": "browser",
- "featureIds": [
- "publish.downstream"
- ],
- "scope": "真实训练编排静态还原;不计来源模型动画/蓝图自动执行。"
- }
- ]
- },
- {
- "id": "permission.update",
- "name": "场景细分编辑权限",
- "group": "权限、缓存与未保存恢复",
- "verification": "PENDING",
- "plannedEvidence": [
- {
- "file": "tests/scene-editor-permissions-closure.spec.ts",
- "line": 142,
- "evidenceName": "scene-update-only",
- "testTitle": "仅场景编辑权限:固定模型可加载和保存,不能发布或访问模型页面",
- "kind": "browser",
- "featureIds": [
- "permission.update",
- "permission.publish",
- "publish.fixed-model"
- ],
- "scope": "以源测试实际断言为准;计划关联不代表最终通过。"
- },
- {
- "file": "tests/scene-editor-workflow-closure.spec.ts",
- "line": 190,
- "evidenceName": "readonly",
- "testTitle": "只读管理员:可浏览预览与导出,模板/资源/键盘/接口不能改场景",
- "kind": "browser",
- "featureIds": [
- "permission.readonly",
- "permission.update",
- "permission.publish",
- "preview.enter",
- "preview.exit",
- "preview.lock",
- "json.export"
- ],
- "scope": "只读按钮/模板/资源禁写、蒙皮浏览、运行预览与快捷键不变更对象,直接PUT拒绝;具体搜索/鼠标覆盖另见视口用例。"
- },
- {
- "file": "tools/scene-closure-engine.test.mjs",
- "testTitle": "scene granular update permission enables editing without the retired shared code",
- "featureIds": [
- "permission.update"
- ],
- "kind": "unit",
- "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
- },
- {
- "file": "tools/scene-closure-assets.test.mjs",
- "testTitle": "fixed model reads the exact version and downloads through its visible scene dependency",
- "featureIds": [
- "publish.fixed-model",
- "permission.update"
- ],
- "kind": "unit",
- "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
- }
- ]
- },
- {
- "id": "permission.publish",
- "name": "场景细分发布权限",
- "group": "权限、缓存与未保存恢复",
- "verification": "PENDING",
- "plannedEvidence": [
- {
- "file": "tests/scene-editor-permissions-closure.spec.ts",
- "line": 142,
- "evidenceName": "scene-update-only",
- "testTitle": "仅场景编辑权限:固定模型可加载和保存,不能发布或访问模型页面",
- "kind": "browser",
- "featureIds": [
- "permission.update",
- "permission.publish",
- "publish.fixed-model"
- ],
- "scope": "以源测试实际断言为准;计划关联不代表最终通过。"
- },
- {
- "file": "tests/scene-editor-permissions-closure.spec.ts",
- "line": 171,
- "evidenceName": "scene-publish-only",
- "testTitle": "仅场景发布权限:浏览器发布已存副本,不发送保存或上传请求",
- "kind": "browser",
- "featureIds": [
- "permission.publish",
- "publish.only",
- "publish.fixed-model"
- ],
- "scope": "以源测试实际断言为准;计划关联不代表最终通过。"
- },
- {
- "file": "tests/scene-editor-permissions-closure.spec.ts",
- "line": 183,
- "evidenceName": "scene-no-page-permission",
- "testTitle": "无场景页面权限:编辑路由和直接内容接口均拒绝访问",
- "kind": "browser",
- "featureIds": [
- "permission.publish"
- ],
- "scope": "以源测试实际断言为准;计划关联不代表最终通过。"
- },
- {
- "file": "tests/scene-editor-workflow-closure.spec.ts",
- "line": 190,
- "evidenceName": "readonly",
- "testTitle": "只读管理员:可浏览预览与导出,模板/资源/键盘/接口不能改场景",
- "kind": "browser",
- "featureIds": [
- "permission.readonly",
- "permission.update",
- "permission.publish",
- "preview.enter",
- "preview.exit",
- "preview.lock",
- "json.export"
- ],
- "scope": "只读按钮/模板/资源禁写、蒙皮浏览、运行预览与快捷键不变更对象,直接PUT拒绝;具体搜索/鼠标覆盖另见视口用例。"
- }
- ]
- },
- {
- "id": "permission.readonly",
- "name": "只读仍可查看、搜索、选中和预览",
- "group": "权限、缓存与未保存恢复",
- "verification": "PENDING",
- "plannedEvidence": [
- {
- "file": "tests/scene-editor-permissions-closure.spec.ts",
- "line": 253,
- "evidenceName": "scene-role-switch",
- "testTitle": "后台场景未保存时切换角色:关闭确认保留草稿,保存切换后重建只读权限",
- "kind": "browser",
- "featureIds": [
- "leave.role-switch",
- "leave.cancel",
- "leave.save",
- "permission.readonly"
- ],
- "scope": "以源测试实际断言为准;计划关联不代表最终通过。"
- },
- {
- "file": "tests/scene-editor-workflow-closure.spec.ts",
- "line": 190,
- "evidenceName": "readonly",
- "testTitle": "只读管理员:可浏览预览与导出,模板/资源/键盘/接口不能改场景",
- "kind": "browser",
- "featureIds": [
- "permission.readonly",
- "permission.update",
- "permission.publish",
- "preview.enter",
- "preview.exit",
- "preview.lock",
- "json.export"
- ],
- "scope": "只读按钮/模板/资源禁写、蒙皮浏览、运行预览与快捷键不变更对象,直接PUT拒绝;具体搜索/鼠标覆盖另见视口用例。"
- }
- ]
- },
- {
- "id": "recovery.autobuffer",
- "name": "800ms 未保存恢复缓冲",
- "group": "权限、缓存与未保存恢复",
- "verification": "PENDING",
- "plannedEvidence": [
- {
- "file": "tests/scene-editor-async-closure.spec.ts",
- "line": 50,
- "evidenceName": "save-concurrency",
- "testTitle": "延迟保存快照:重复点击只提交一次,期间新编辑保留,旧恢复稿不会误报冲突",
- "kind": "browser",
- "featureIds": [
- "project.concurrent-save",
- "project.save",
- "project.save-key",
- "recovery.autobuffer",
- "recovery.same-version"
- ],
- "scope": "延迟真实PUT快照A、重复Ctrl+S不重复请求、期间编辑B仍dirty;再次保存刷新无旧恢复稿误报。"
- },
- {
- "file": "tests/scene-editor-permissions-closure.spec.ts",
- "line": 305,
- "evidenceName": "scene-multi-session",
- "testTitle": "双标签各自修改场景:保存和明确丢弃当前页均保留另一页真实恢复稿",
- "kind": "browser",
- "featureIds": [
- "recovery.multi-session",
- "recovery.autobuffer",
- "recovery.discard",
- "project.save"
- ],
- "scope": "以源测试实际断言为准;计划关联不代表最终通过。"
- },
- {
- "file": "tests/scene-editor-persistence-closure.spec.ts",
- "line": 117,
- "evidenceName": "real-recovery-conflict",
- "testTitle": "同版本恢复与 409:真实未保存草稿重载、服务器新版本保护与隔离下载",
- "kind": "browser",
- "featureIds": [
- "project.conflict",
- "recovery.autobuffer",
- "recovery.same-version",
- "recovery.stale-version"
- ],
- "scope": "真实未存输入产生恢复稿,同版本恢复不自动入库;另一版本先保存后409拒绝覆盖,旧稿隔离下载。"
- }
- ]
- },
- {
- "id": "recovery.same-version",
- "name": "同版本真实未保存恢复",
- "group": "权限、缓存与未保存恢复",
- "verification": "PENDING",
- "plannedEvidence": [
- {
- "file": "tests/scene-editor-async-closure.spec.ts",
- "line": 50,
- "evidenceName": "save-concurrency",
- "testTitle": "延迟保存快照:重复点击只提交一次,期间新编辑保留,旧恢复稿不会误报冲突",
- "kind": "browser",
- "featureIds": [
- "project.concurrent-save",
- "project.save",
- "project.save-key",
- "recovery.autobuffer",
- "recovery.same-version"
- ],
- "scope": "延迟真实PUT快照A、重复Ctrl+S不重复请求、期间编辑B仍dirty;再次保存刷新无旧恢复稿误报。"
- },
- {
- "file": "tests/scene-editor-persistence-closure.spec.ts",
- "line": 117,
- "evidenceName": "real-recovery-conflict",
- "testTitle": "同版本恢复与 409:真实未保存草稿重载、服务器新版本保护与隔离下载",
- "kind": "browser",
- "featureIds": [
- "project.conflict",
- "recovery.autobuffer",
- "recovery.same-version",
- "recovery.stale-version"
- ],
- "scope": "真实未存输入产生恢复稿,同版本恢复不自动入库;另一版本先保存后409拒绝覆盖,旧稿隔离下载。"
- }
- ]
- },
- {
- "id": "recovery.stale-version",
- "name": "不同版本恢复稿隔离",
- "group": "权限、缓存与未保存恢复",
- "verification": "PENDING",
- "plannedEvidence": [
- {
- "file": "tests/scene-editor-persistence-closure.spec.ts",
- "line": 117,
- "evidenceName": "real-recovery-conflict",
- "testTitle": "同版本恢复与 409:真实未保存草稿重载、服务器新版本保护与隔离下载",
- "kind": "browser",
- "featureIds": [
- "project.conflict",
- "recovery.autobuffer",
- "recovery.same-version",
- "recovery.stale-version"
- ],
- "scope": "真实未存输入产生恢复稿,同版本恢复不自动入库;另一版本先保存后409拒绝覆盖,旧稿隔离下载。"
- }
- ]
- },
- {
- "id": "recovery.discard",
- "name": "下载、保留、丢弃恢复稿",
- "group": "权限、缓存与未保存恢复",
- "verification": "PENDING",
- "plannedEvidence": [
- {
- "file": "tests/scene-editor-permissions-closure.spec.ts",
- "line": 305,
- "evidenceName": "scene-multi-session",
- "testTitle": "双标签各自修改场景:保存和明确丢弃当前页均保留另一页真实恢复稿",
- "kind": "browser",
- "featureIds": [
- "recovery.multi-session",
- "recovery.autobuffer",
- "recovery.discard",
- "project.save"
- ],
- "scope": "以源测试实际断言为准;计划关联不代表最终通过。"
- },
- {
- "file": "../unreal_tran_web/src/features/scene-legacy/contentApiClient.test.mjs",
- "testTitle": "recovery conflict defaults to preserve and only explicit discard may remove it",
- "featureIds": [
- "recovery.discard"
- ],
- "kind": "unit",
- "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
- }
- ]
- },
- {
- "id": "recovery.multi-session",
- "name": "多标签/多会话恢复所有权",
- "group": "权限、缓存与未保存恢复",
- "verification": "PENDING",
- "plannedEvidence": [
- {
- "file": "tests/scene-editor-permissions-closure.spec.ts",
- "line": 305,
- "evidenceName": "scene-multi-session",
- "testTitle": "双标签各自修改场景:保存和明确丢弃当前页均保留另一页真实恢复稿",
- "kind": "browser",
- "featureIds": [
- "recovery.multi-session",
- "recovery.autobuffer",
- "recovery.discard",
- "project.save"
- ],
- "scope": "以源测试实际断言为准;计划关联不代表最终通过。"
- },
- {
- "file": "../unreal_tran_web/src/features/scene-legacy/contentApiClient.test.mjs",
- "testTitle": "per-page recovery keys prevent copied tabs from deleting each other checkpoints",
- "featureIds": [
- "recovery.multi-session"
- ],
- "kind": "unit",
- "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
- }
- ]
- },
- {
- "id": "leave.cancel",
- "name": "关闭场景标签时取消离开",
- "group": "权限、缓存与未保存恢复",
- "verification": "PENDING",
- "plannedEvidence": [
- {
- "file": "tests/scene-editor-permissions-closure.spec.ts",
- "line": 253,
- "evidenceName": "scene-role-switch",
- "testTitle": "后台场景未保存时切换角色:关闭确认保留草稿,保存切换后重建只读权限",
- "kind": "browser",
- "featureIds": [
- "leave.role-switch",
- "leave.cancel",
- "leave.save",
- "permission.readonly"
- ],
- "scope": "以源测试实际断言为准;计划关联不代表最终通过。"
- },
- {
- "file": "tools/scene-tab-close.test.mjs",
- "testTitle": "closing one selected scene checks its cached guard, leaves unrelated workspaces alone",
- "featureIds": [
- "leave.cancel",
- "lifecycle.cache"
- ],
- "kind": "unit",
- "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
- },
- {
- "file": "tools/scene-tab-close.test.mjs",
- "testTitle": "cancel or failed save in a later tab never commits earlier draft discard",
- "featureIds": [
- "leave.cancel",
- "leave.save",
- "leave.role-switch"
- ],
- "kind": "unit",
- "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
- }
- ]
- },
- {
- "id": "leave.save",
- "name": "保存并离开 / 放弃修改",
- "group": "权限、缓存与未保存恢复",
- "verification": "PENDING",
- "plannedEvidence": [
- {
- "file": "tests/scene-editor-permissions-closure.spec.ts",
- "line": 253,
- "evidenceName": "scene-role-switch",
- "testTitle": "后台场景未保存时切换角色:关闭确认保留草稿,保存切换后重建只读权限",
- "kind": "browser",
- "featureIds": [
- "leave.role-switch",
- "leave.cancel",
- "leave.save",
- "permission.readonly"
- ],
- "scope": "以源测试实际断言为准;计划关联不代表最终通过。"
- },
- {
- "file": "tools/scene-tab-close.test.mjs",
- "testTitle": "cancel or failed save in a later tab never commits earlier draft discard",
- "featureIds": [
- "leave.cancel",
- "leave.save",
- "leave.role-switch"
- ],
- "kind": "unit",
- "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
- },
- {
- "file": "tools/scene-tab-close.test.mjs",
- "testTitle": "all successful confirmations commit together and unmounted guards are removed",
- "featureIds": [
- "leave.save",
- "lifecycle.destroy"
- ],
- "kind": "unit",
- "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
- }
- ]
- },
- {
- "id": "leave.busy",
- "name": "加载/上传/发布途中离开",
- "group": "权限、缓存与未保存恢复",
- "verification": "PENDING",
- "plannedEvidence": [
- {
- "file": "tests/scene-editor-async-closure.spec.ts",
- "line": 27,
- "evidenceName": "loading-retry",
- "testTitle": "加载失败重试与加载互斥:不展示可写半场景、恢复网络后模型完整加载",
- "kind": "browser",
- "featureIds": [
- "project.retry",
- "glb.pending",
- "leave.busy"
- ],
- "scope": "GET503只留中性失败和重试;延迟受控下载时禁用写入/导出/预览并阻止关闭,释放后真实狐狸加载。"
- },
- {
- "file": "tools/scene-cover-api.test.mjs",
- "testTitle": "role switch waits through validation, save, and the later queued publish after dirty clears",
- "featureIds": [
- "publish.concurrent",
- "leave.busy",
- "leave.role-switch"
- ],
- "kind": "unit",
- "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
- },
- {
- "file": "tools/scene-cover-api.test.mjs",
- "testTitle": "role switch rechecks resource uploads started while the save was finishing",
- "featureIds": [
- "leave.busy"
- ],
- "kind": "unit",
- "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
- }
- ]
- },
- {
- "id": "leave.role-switch",
- "name": "角色切换覆盖后台场景未存稿",
- "group": "权限、缓存与未保存恢复",
- "verification": "PENDING",
- "plannedEvidence": [
- {
- "file": "tests/scene-editor-permissions-closure.spec.ts",
- "line": 253,
- "evidenceName": "scene-role-switch",
- "testTitle": "后台场景未保存时切换角色:关闭确认保留草稿,保存切换后重建只读权限",
- "kind": "browser",
- "featureIds": [
- "leave.role-switch",
- "leave.cancel",
- "leave.save",
- "permission.readonly"
- ],
- "scope": "以源测试实际断言为准;计划关联不代表最终通过。"
- },
- {
- "file": "tools/scene-tab-close.test.mjs",
- "testTitle": "cancel or failed save in a later tab never commits earlier draft discard",
- "featureIds": [
- "leave.cancel",
- "leave.save",
- "leave.role-switch"
- ],
- "kind": "unit",
- "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
- },
- {
- "file": "tools/scene-cover-api.test.mjs",
- "testTitle": "role switch waits through validation, save, and the later queued publish after dirty clears",
- "featureIds": [
- "publish.concurrent",
- "leave.busy",
- "leave.role-switch"
- ],
- "kind": "unit",
- "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
- }
- ]
- },
- {
- "id": "lifecycle.cache",
- "name": "标签失活 pause / 激活 resume",
- "group": "权限、缓存与未保存恢复",
- "verification": "PENDING",
- "plannedEvidence": [
- {
- "file": "tests/scene-editor-viewport-closure.spec.ts",
- "line": 178,
- "evidenceName": "viewport-cache-close",
- "testTitle": "缓存标签暂停键盘、草稿恢复以及关闭取消和保存失败留页",
- "kind": "browser",
- "featureIds": [
- "lifecycle.cache"
- ],
- "scope": "以源测试实际断言为准;计划关联不代表最终通过。"
- },
- {
- "file": "tools/scene-closure-engine.test.mjs",
- "testTitle": "typing undo/redo stays inside text controls and inactive cached editors ignore global shortcuts",
- "featureIds": [
- "history.undo",
- "history.redo",
- "transform.keys",
- "lifecycle.cache"
- ],
- "kind": "unit",
- "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
- },
- {
- "file": "tools/scene-tab-close.test.mjs",
- "testTitle": "closing one selected scene checks its cached guard, leaves unrelated workspaces alone",
- "featureIds": [
- "leave.cancel",
- "lifecycle.cache"
- ],
- "kind": "unit",
- "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
- }
- ]
- },
- {
- "id": "lifecycle.destroy",
- "name": "关闭释放 WebGL/监听/资源",
- "group": "权限、缓存与未保存恢复",
- "verification": "PENDING",
- "plannedEvidence": [
- {
- "file": "tools/scene-closure-engine.test.mjs",
- "testTitle": "deleting a root disposes its geometry and materials after clearing selection",
- "featureIds": [
- "object.delete",
- "lifecycle.destroy"
- ],
- "kind": "unit",
- "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
- },
- {
- "file": "tools/scene-closure-engine.test.mjs",
- "testTitle": "selection highlight cleanup restores source materials and releases its own GPU helper",
- "featureIds": [
- "selection.highlight",
- "lifecycle.destroy"
- ],
- "kind": "unit",
- "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
- },
- {
- "file": "tools/scene-tab-close.test.mjs",
- "testTitle": "all successful confirmations commit together and unmounted guards are removed",
- "featureIds": [
- "leave.save",
- "lifecycle.destroy"
- ],
- "kind": "unit",
- "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
- },
- {
- "file": "../unreal_tran_web/src/features/scene-legacy/contentApiClient.test.mjs",
- "testTitle": "an upload finishing after a project switch cannot register into the new session",
- "featureIds": [
- "glb.pending",
- "lifecycle.destroy"
- ],
- "kind": "unit",
- "scope": "聚焦合同/真实DOM/Three对象计算;不称为浏览器鼠标交互。"
- }
- ]
- },
- {
- "id": "lifecycle.resize-theme",
- "name": "桌面尺寸与明亮/暗黑可读性",
- "group": "权限、缓存与未保存恢复",
- "verification": "PENDING",
- "plannedEvidence": [
- {
- "file": "tests/scene-editor-viewport-closure.spec.ts",
- "line": 117,
- "evidenceName": "viewport-camera-theme",
- "testTitle": "真实相机操控、视口拾取、预览禁写和两尺寸主题可读性",
- "kind": "browser",
- "featureIds": [
- "view.orbit",
- "view.pan",
- "view.zoom",
- "view.top",
- "view.perspective",
- "view.grid",
- "view.focus",
- "selection.viewport",
- "selection.highlight",
- "preview.enter",
- "preview.exit",
- "preview.lock",
- "lifecycle.resize-theme"
- ],
- "scope": "以源测试实际断言为准;计划关联不代表最终通过。"
- }
- ]
- }
- ]
- }
|