本清单为只读审查基线,后续修复/验收须单独记录结果,不把源码已接通当作 E2E 已通过。
Web config/content.ts:101 默认 legacy-demo;LegacyModelEditorView.vue 使用同源 iframe 并注入权限;stage 脚本从 unreal_tran/src/main.js 打包。公开产物为 editor-CunHwJSa.js,原清单生成于 2026-09-05T10:06:01Z。正式备用 features/editors/model/DigitalTwinEditor.js 不是当前默认执行入口。
| 功能 | 原路径 | 审查基线 |
|---|---|---|
| 新建 | main.js:2984 | 重置并 PUT 当前工程,无新增 ID;由主代理宿主改造 |
| 导入 GLB | 1273 | 受控上传、解析、最终保存,单文件 GLB |
| 导入 JSON | 2829 | 恢复并覆盖当前工程,非服务端副本 |
| 保存/Ctrl+S | 2714 | 恢复副本、截图、队列 PUT/乐观锁 |
| 自动保存 | 2177 | 30秒自动 PUT,不更新封面 |
| 工程名 | 2134 | 失焦保存 |
| 另存 | 2846 | JSON 下载,不包含 GLB 字节 |
| 撤销重做 | 158 | 35 个快照,缺异步互斥/失败索引回滚 |
| 移动旋转缩放 | 2010/2215 | 可回存,动画基值计算有漂移 |
| 聚焦 | 2242 | 相机可存 |
| 网格/PBR/线框/轮廓 | 2217/2253 | 当前视图;关闭轮廓后重选泄漏 |
| 透视 | 2217 | 固定透视重置,无菜单 |
| 截图 | 3037 | 当前 canvas PNG |
| 预览 | 2254 | 真实三维;前后步实际跳时间轴2秒 |
| 运行蓝图 | 1061/2189 | 有执行器,分支/触发有bug |
| 生成发布 | 2923 | 预检只做存在性/数量 |
| 场景资源发布 | 2860 | 固定服务端版本;未直接捕获封面 |
| 离线HTML | 2956/io:432 | 截图+CSS示意+固定节拍,不是真实三维运行 |
| 场景树/展开/搜索 | 1939 | 最多220行,计数为全部 |
| 显示隐藏 | 1949 | 能回存;拾取未排除隐藏祖先 |
| 整体部件选择 | 1952 | 可序列化 |
| 装备资源切换 | 1440 | 自动保存,模板可覆盖时间轴/蓝图 |
| 资源搜索 | 1474 | 多词/简称,重绘保持 |
| 内置环境 | 775/972 | 可恢复车间/野外/车库 |
| 外部环境GLB | 1014/1802/1896 | 仅会话字节,重开需重选;本轮评估受控资源闭环 |
| 训练场景JSON | 816 | 无明确可达按钮,通用localStorage,不进入工程 |
| 名称/变换属性 | 1972/2010 | 可回存 |
| PBR材质 | 1972/2010 | 可回存,多槽仅编辑第一槽 |
| 资源编码/运行状态 | 1984 | 控件无回写,重选即丢 |
| 流程绑定 | 1984 | 只读模板名称,非真实业务绑定 |
| 组件 | 1989/2111 | 派生说明+持久化名称标签,无运行行为 |
| 时间轴播放暂停停止循环 | timeline:369 | 实际执行;循环可存 |
| 前后关键帧/播放头 | timeline:261/555 | 已接通 |
| 轨道增删/目标/属性 | timeline:444 | 可存,仅位置XYZ/旋转XYZ |
| 关键帧增删拖动 | timeline:491 | 可存,默认1/30秒吸附、Alt取消 |
| 记录关键帧 | main:2246 | 从目标相对基值取值 |
| 静音 | timeline:239 | 忽略轨道但宿主不复位,保存仍扣值 |
| 时间轴缩放 | timeline:427 | 可存 |
| 关键帧数值/插值 | timeline:518 | 方法存在,曲线面板未连接 |
| 基准动作 | main:3003 | 匹配部件,替换时间轴/蓝图 |
| 原生GLB动画 | 1709 | 选择播放,保存片段编号 |
| 蓝图库/参数 | blueprint:274/418/710 | 可存 |
| 连线移动缩放框选删除 | blueprint:522/728 | 可存,输入端口来源被覆盖 |
| 复制粘贴 | blueprint:669 | 只复制节点,不复制内部连线 |
| 蓝图运行停止重置 | blueprint:835 | 实际执行、200步上限 |
| 点击双击自动 | blueprint:898/main:2237 | 未匹配目标,无双击独立派发 |
| 时间轴节点 | main:2037 | 唯一当前时间轴,clip仅名称 |
| 条件节点 | main:2076/blueprint:867 | 缺truthy、布尔字符串解析,false出口缺失走任意出口 |
| 高亮 | main:2062 | 无匹配回退整机,pulse只有不同等待时长 |
| 提示 | main:2083 | 1.8/2.5秒自动继续或人工关闭 |
| 曲线编辑器 | 1090 | 固定轨道/SVG/参数,无数据写回 |
| 日志 | 3061 | 内存160行,非服务端审计 |
main 负责真实曲线输入/插值、自定义属性、动画基值与静音、条件值解析、准确高亮、点击/双击/进入预览auto、隐藏拾取、轮廓、历史互斥及环境受控资源集成。新建由主代理宿主负责。Blueprint/Timeline 和内容 API/IO 各由其他代理负责。真正离线三维包与完整组件系统属于较大调整,最终确认;现有入口应明确“步骤演示 HTML(不含三维模型)”及“扩展标记,仅保存标签”。
快捷键:全局 Ctrl+S/Z/Y、W/E/R、F、Tab、Esc;时间轴 Space/Delete/Backspace/左右键及Shift快进;蓝图 Ctrl/Cmd+A/C/V、Delete、Space平移、Esc、F5。当前没有模型对象的删除/复制上下文菜单。
上表保留修复前定位和基线;以下为实际实施后状态。源码目录 unreal_tran/unreal_tran/src,由正式 Web 的 stage 脚本复制并构建。未在子任务提交、推送、生成 bundle 或执行业务 E2E。
model-curve-editor.js,曲线轨道名、关键帧点、时间、标量/向量值及插值均读取/修改当前 TimelineEditor;实际调用 updateKeyframe/selectKeyframe,随工程 JSON 重开。画面不再呈现与时间轴脱节的假控制点;本轮没有新增 Bezier 切线或 solo。model-editor-state.js 统一时间轴有效偏移:同一目标同一属性采用最后一个有效轨道;静音、删轨、重绑复原此前作用对象;保存和手工变换基值只扣除实际应用偏移一次。node --test tests/model-main-closure.test.mjs:13/13,包含实际 TimelineEditor + happy-dom 曲线交互、工程 JSON 往返、真实主类方法提取、材质/历史/发布失败分支。node --test tests/blueprint-timeline-closure.test.mjs tests/model-content-api-integrity.test.mjs:本轮同批 32/32(各16),与 main 首次12项联合44/44;main补托管历史后单跑13/13。node --test tests/model-editor-import.test.mjs tests/editor-timeline-playback.test.mjs tests/editor-delivery.test.mjs tests/model-content-api.test.mjs:4/4脚本通过。脚本内旧“离线HTML均通过”仅说明现有步骤演示输出合同,不代表完整离线三维。真实 E2E 由主代理执行:底部曲线页点关键帧后编辑右栏 data-curve-field=time/value/easing;对象属性栏 #custom-resource-code/#custom-operating-status;资源库外部 GLB 入口;顶部撤销/重做、发布面板及刷新。不得将上述单元/合同测试记作真实 API 或三维可见性截图验收。
初次 13 项聚焦测试没有覆盖完整资源库 DOM 初始化。真实浏览器发现 renderAssets 两处误用单节点 $ 后调用 forEach,使资源目录初始化抛错、整个模型启动中断。已修为节点集合 $$,并新增真实 DOM 回归先复现相同 TypeError,再验证两模型/五环境卡片都渲染、事件都绑定、导入忙时阻断、空目录也可启动。现在 tests/model-main-closure.test.mjs 为 14/14 通过;此回归不能替代随后正式浏览器重载验收。同类单节点选择器误用复扫无新增匹配。
真实 175 号测试副本快照逐字段比较没有语义差异,但 normalize 调整了 environment 对象的键顺序。原始 JSON.stringify 指纹因此误认为内容改变,beforeunload 在已保存页面刷新时写出同版本恢复稿。model-content-api.js 指纹现统一递归排序对象键,保留数组顺序和所有真实值变化;saveNow 与 dirty 比较共用该算法。新增 API 合同先复现再通过,并对真实 beforeunload 恢复方法断言“仅键顺序不写稿、真实名称变动仍写稿”。没有通过测试自动丢弃恢复稿来掩盖故障。
属性状态从硬编码“可见/投射阴影”改为真实祖先可见性和 castShadow;span[data-model-editability] 供正式宿主按权限显示可编辑/只读。最新 main 聚焦测试 16/16,API integrity 17/17;这些是阶段结果,最终统计仍以报告 validation.json 为准。
新增 model-editor-navigation-closure.spec.ts,每例从原狐狸模型 157 创建独立副本并登记清理 ID,不修改原始工程或共享测试狐狸。三个用例完成真实资源搜索与卡片切换、三种内置环境保存重开、树折叠/计数、实际鼠标镜头、面板切换/拖动、预览前后步与 Escape、实际 30 秒自动保存和刷新核对;私有预跑 3/3 通过,截图 41~47。此结果不替代最终统一 E2E,最终报告只按 results.json 及匹配 testTitle 的证据计算。更细的播放头/录帧、蓝图画布、恢复/离开和 gizmo 补测由团队分工执行。