# 资料 → 产品原型 → 设计 → 开发 → 测试 ## 资料 复用前轮模型编辑器审查中已完整视觉阅读的两份 PDF(共 11 页)所提炼的通用交互需求:部件级选择与操作、动作流程、交互反馈、结果追踪。本轮没有重新声称阅读新资料,也不创建具体装备维修流程。 既往 `scene-live-20260905` 的狐狸可见性更正说明保留为经验:保存成功、引用正确、接口通过,不能替代模型实际可见的截图和刷新验证。 ## 产品原型 当前场景路由实际挂载 `LegacyScenePageView.vue`,内部运行 `guide-legacy/demo-src/scene-editor.js`。保留的 `SceneEditorView.vue → SceneEditorWorkspace.vue` 没有挂到默认路由;其中额外渲染、组件、动画和布局控件不计入当前可达功能的通过分母。 覆盖清单按 9 组固定 119 个功能 ID:工程入口、文件与导入、资源库、9 个模板、视口与变换、属性与底部面板、历史与预览、封面与发布、权限恢复与生命周期。每行列出源码定位、当前边界、可观察验收要求。 ## 设计 服务端项目、当前版本、已发布固定版本和受控资产是业务真值。本地恢复稿用于失败恢复,不代表自动保存成功。临时视图(例如网格和当前吸附设置)不要求伪造为项目持久化字段。 权限按 `content.scene.create/update/delete/publish` 拆分。新建要求 create;编辑、导入、封面与保存要求 update;仅 publish 的用户可以发布已保存版本,不能借发布执行未授权的保存。只读用户仍可浏览和使用非写入视图。 普通保存、JSON 导入、模板替换、上传、发布和关闭守卫需要保持互斥与失败回滚;409 不覆盖新版本。返回场景列表等同切标签并保留缓存,不弹关闭确认;真正关闭场景标签才询问未存修改。模型放置必须固定来源项目、版本和资产编码,不得将错误编码回退成另一个模型。 ## 开发 本轮以现有入口的小范围闭环修复为主。`data/baseline-findings.json` 是检查时的风险清单;它不表示最终仍存在缺陷,也不表示修复已经通过。修复记录由 `fixes.json.items` 提供,每项填写 id、summary、featureIds。 较大变化仅记录在 `decisions.json`,不并入本轮已实现/通过数。日志按当前运行的操作记录验收,不称为服务端审计日志;JSON 是工程文档,不称为自包含三维离线包。 ## 测试 测试使用独立场景副本,保留源狐狸、牛奶卡车模型及原场景。截图应说明测试姿态、故障注入和遮挡限制,不用绿色成功提示代替可见性验证。 浏览器证据文件建议如下,`testTitle` 必须与 Playwright 的真实标题完全一致,时间必须落在最终对应运行区间内: ```json { "time": "测试完成时间(ISO)", "data": { "kind": "e2e", "status": "PASS", "testTitle": "真实测试标题", "featureIds": ["project.load", "project.save"], "scope": "本用例实际断言的行为和限制", "screenshots": ["01-example.png"] } } ``` 接口/单元证据必须明确 `kind`,并与 `validation.json.runId` 相同,或由 `validation.json.coverage` 提供。单元通过不得写成真实鼠标操作通过。失败的最终结果会醒目显示失败,旧截图和定向重跑不能覆盖最终全套失败事实。 只有最终结果、构建/单元验证、清理、安全扫描、功能证据和截图关联全部满足约定,报告才能显示 PASS。缺证据、待确认或未运行都保持待验证。 ## 当前源码中的断言计划 运行 `node tools/build-scene-editor-coverage-plan.mjs` 可只读解析当前场景 spec 和明确的 unit 计划,输出 [119 项逐行映射](data/coverage-test-plan.json)。这份文件全部为 PENDING:它说明哪段测试打算检查哪项功能,不表示这些测试属于最终运行,更不替代 `results.json`。 浏览器范围包括 9 模板、资源库、属性和历史、JSON/GLB 与错误恢复、发布封面、真实相机/变换手柄、权限和多会话,以及独立训练副本的静态还原。单元范围明确保留异步失败回滚、隐藏祖先射线、队列并发、60 快照边界、资源释放等难以通过单张截图判定的合同。 `tools/scene-editor-evidence-bindings.mjs` 只补证据元数据。实际测试到达证据记录处后写入真实 `test.info().title` 和时间;最终报告仍交叉核对 Playwright 最终状态和该执行区间,不使用映射文件推导 PASS。