# 全功能证据映射与未覆盖规划 本文件是测试设计与源码断言核对,不是执行通过证据。最终结果由 `results.json`、`validation.json`、`evidence/*.json` 与 `coverage.json` 决定。 ## 已校准的浏览器脚本 |脚本|实际范围|证据边界| |---|---|---| |model-editor-closure.spec.ts|属性数值、PBR首槽、扩展标记、保存重开、撤销重做、视图开关/原生片段、新建/权限|已删除不存在的 object.* / viewport.* / permissions.* ID;变换模式按钮不等同真实 gizmo 拖拽,不能代填 view.move/rotate/scale| |model-editor-assets-closure.spec.ts|主模型/外部环境真实上传、JSON往返、无效导入、保存失败和重试、发布封面/固定版本/离线步骤HTML|异常通过定向请求中断注入;恢复副本“存在”不等于恢复/隔离/下载全部UI已测;固定版本可取得不等于下游自动运行| |model-editor-blueprint-closure.spec.ts|真实轨道/帧/曲线/蓝图库/接线/剪贴板/执行控制、真实点击/双击/auto事件;另有刻度/按键/录帧/分量、基准动作匹配/不匹配、搜索拖入/工具栏添加/画布操作专项|条件真假出口的补充检查标记为 runtime;第4专项才覆盖搜索/拖入和曲线分量路径断言,不把第1例仅切换选择器当成已验| |model-editor-navigation-closure.spec.ts|独立原模型157副本;资源搜索/卡片切换、三内置环境保存重开、折叠树、鼠标镜头/聚焦、页签/分割条/Tab、预览±2秒/Esc、日志/统计、名称保存/真实30秒自动保存|三项真实用例已在私有预跑通过,截图41~47;此预跑不替代最终results,最终统一结果仍须核对| |model-editor-interaction-closure.spec.ts|真实三维 gizmo 平移/旋转/缩放,撤销重做、保存重开;离开时关闭确认、保存失败保留、重试成功再离开|独立副本;只读投影定位手柄,不脚本改变模型姿态;注入503验证失败分支| |model-editor-recovery-closure.spec.ts|同版本真实未存恢复→显式保存、旧版本下载隔离;受控GLB下载失败→UI重试、预检开关无写入和错误资源导入拒绝|恢复稿来自真实beforeunload,不预注入localStorage;较新服务端内容不被旧稿覆盖;服务端发布严格合同另由API测试验证| 首批四份脚本显式计划关联 **88/103** 个功能 ID;随后新增交互/恢复两份脚本补上其中 7 项,时间轴/蓝图专项补 7 项,最终六份脚本显式关联 **102/103** 个功能 ID,多轨计算以明确 unit 证据关联。全部 ID 与 catalog 对齐,未发现未知 ID。这里记录的是“已写断言计划”,不是最终通过数;最终结果以 coverage.json 为准。 后续并行补测分工:时间轴/蓝图专项负责 `timeline.seek/record/baseline`、`curve.axis`、`blueprint.palette/add/canvas`;资产专项负责恢复稿/加载失败/发布预检;宿主专项负责真实 gizmo 拖拽与离开确认。`timeline.multitrack` 以真实计算方法单元测试作独立证据,映射在 [unit-coverage-plan.json](data/unit-coverage-plan.json),该计划文件本身不代表通过。最终生成器按实际证据动态计算,下面保留补测前的差距,便于对照补测来源。 ## 补测前的15项差距(追溯记录) |功能 ID|补测前已有的验证|据此安排的补测范围| |---|---|---| |project.recovery|本轮 API 指纹回归与真实 beforeunload 方法回归:键顺序相同内容不写假稿;真实变化仍保留;现有 API 恢复合同|用户明确恢复/放弃/隔离/下载的真实对话框;同版本真实修改与旧版本分叉| |project.leave|上一轮角色/权限回归及宿主聚焦合同|本轮模型编辑器脏状态取消、放弃、保存失败与上传忙时离开;不能用干净页面切路由代替| |resource.loading|启动后readyFrame状态;本轮renderAssets真实DOM空目录/卡片回归|GLB下载或解析失败后中性失败状态、重试成功;不能把未加载空白当成功| |view.move|属性XYZ保存重开;多轨中性基值单测|真实TransformControls平移手柄拖动、保存重开;当前只点击W模式| |view.rotate|旋转数值输入保存;多轨旋转单测|真实旋转环拖动及撤销重做;当前只点击E模式| |view.scale|缩放数值输入保存重开|真实缩放手柄拖动及保存;当前只点击R模式| |timeline.seek|时间轴拖帧触发timechange合同;键盘/seek运行时已有回归|真实播放头/刻度点击、左右/Shift按键、时间码与视口同步| |timeline.record|主类addKeyframeFromSelection源码已接;中性姿态单测|真实“记录关键帧”按钮捕获当前帧偏移,保存后回放一致| |timeline.multitrack|本轮main实际capture/apply方法单测:最后有效轨道、静音/删除/重绑、保存基值|可用unit证据明确覆盖计算合同;需要多轨真实视口可见性截图时另加UI,不能冒称已拍| |timeline.baseline|既有装备profile/动作生成合同|有匹配实际载入并保存;无匹配保留数据;当前没有单独确认框,不能写“取消验证通过”| |curve.axis|现有UI只选Y再选X;向量其他分量保持的unit回归|修改不同轴数值后切显示轴,断言曲线变化且不改其他数据| |blueprint.palette|当前点选创建七类型节点|搜索/清空、HTML5拖入节点,不能用脚本addNode冒充拖放| |blueprint.add|当前节点库点选与节点新增unit|工具栏“添加节点”确实新增默认提示节点并进入历史/JSON| |blueprint.canvas|现有用例点击“适应画布”;节点自身拖动|蓝图画布滚轮缩放、Space平移/适应,并验证节点图数据未意外变化| |publish.preflight|发布API拒绝非法资源/固定版本合同;当前面板打开并真实发布|界面校验清单和服务端阻断对应,打开/关闭不改变工程;不能仅凭绿标判定有效| ## 已有测试中的局部限制 - `property.identity` 新增可见性/阴影真实DOM回归;补充UI目前检查只读标识与流程绑定字段。权限注入的“只读”标签需由宿主最终用例确认。 - `timeline.drag-key` 已有真实拖动与碰撞合同,Alt取消吸附尚未单独通过浏览器验证。 - `blueprint.move` 有单节点真实拖动与全选剪贴板;多选框选拖移并未单独截图。 - `blueprint.highlight` 有真实执行与缺目标/隐藏目标/临时材质单测;呼吸幅度当前不是像素级曲线验收。 - `publish.cover` 的真实成功上传、版本、封面URI已测;503/409失败保旧图由独立API合同补充,不能称该真实服务自然出现503。 - `selection.scope` 补充用例增加明确整机根/部件对象断言;仍需避免把仅点击按钮当成三维目标操作。 ## 本轮新增阻断回归 1. 资源库启动:真实DOM复现两处单节点选择器误用后修复,覆盖卡片绑定/空目录。 2. 保存后刷新假恢复稿:真实175快照逐字段无差异,仅environment键顺序不同;指纹统一递归排序对象键,保留数组顺序和真实值变化;beforeunload假稿/真稿均有回归。 3. 状态标签:真实DOM验证隐藏祖先及castShadow;宿主通过span[data-model-editability]显示会话权限。 以上属于修复和证据分层,不新增 solo,也不把组件运行系统、完整离线三维包、下游自动运行三项待确认范围伪装成已实现。