范围:unreal_tran_web 的 0aac918..1576728,以及新增正式入口所依赖的运行页与通用内容编辑器。按资料、产品原型、设计、开发、测试核对;审查完成后按用户授权提交为 3c7f295。
AGENTS.md:正式教学页面必须消费 API;训练编排复用已发布场景目标;工程修改须保持教员身份门槛;保留原型工作台与接口工作台已有入口。unreal_tran_api/wiki/19-训练定义渠道合同.md:一份公共步骤、多渠道差异配置;默认渠道必须启用;modeConfig 与默认渠道 profile 一致。unreal_tran_api/wiki/20-教学命令幂等.md:四类命令 body/header 使用同一 commandId;结果未知时复用原命令号与冻结载荷。unreal_tran_api/wiki/21-教学步骤运行事实.md:新运行展示服务端步骤状态;空列表仅兼容历史运行;全部步骤完成方可提交。TeachingAssignmentService.validateRuntimeDefinition 明确要求实装步骤进度按顺序严格递增,末步 100%。| 编号 | 问题与影响 | 根因 | 最小修复 |
|---|---|---|---|
| WEB-01 | 实装步骤倒序、删除或复制后,保存保留旧序号和旧进度,导致排序事实不一致、发布被拒。多渠道工程同样受影响。 | 新 resequenceSteps 直接调用归一化函数,而归一化优先保留已有 order/progressPercent。例如三步反转产生序号 3,2,1 与进度 100,67,33。 |
按编辑后的数组重算连续序号、实装严格递增进度;保留稳定 stepCode 及已有事件规则扩展字段。 |
| WEB-02 | 通用编辑器修改默认配置后仅更新旧 modeConfig,与已有 channelProfiles 冲突;在接口编排器重开后新值被旧 profile 覆盖。切换默认渠道也未同步正式字段。 |
通用编辑器未跟进新渠道合同,只读写单个旧配置对象;对抗时长仍只写旧字段。 | 各渠道按对应 profile 回填;保存同步默认渠道、启用渠道、profile 和兼容镜像;保留其他渠道。对抗时长新旧字段同步,兼容历史 roundDuration,避免 45 分钟被默认 30 分钟替代。 |
| WEB-03 | 普通虚拟训练、实装、对抗以及执行中的正式考核,可能错误显示“正式考核执行场景已关闭”。该问题在正式虚拟页面成为默认入口后更容易暴露。 | 遮罩的 v-else 实际绑定紧邻的“虚拟拆卸存放区”条件,而非正式考核生命周期。 |
改为显式判断“正式考核且运行不在 IN_PROGRESS”,其他训练与执行中的考核不显示关闭遮罩。 |
| WEB-04 | 当前步骤失败后聚合运行仍为 IN_PROGRESS,页面没有可进入正式重试状态的入口。 | 原“开始训练”仅在 ACCEPTED 显示,未覆盖新步骤事实的 FAILED→IN_PROGRESS 重试合同。 | 仅当学员的运行仍在 IN_PROGRESS 且当前步骤事实为 FAILED 时显示“重试当前步骤”,复用原 start 命令及幂等 tracker;已提交、归档和已完成步骤不显示。 |
| WEB-05 | 真实 E2E 截图显示场景只占视口上方约 315px,其下安全确认区在深色场景底色上显示深色文字,难以阅读。 | 场景组件 scoped position: relative 覆盖全局绝对定位,运行页缺少预览页已有的填充规则;runtime-safety-gate 没有任何对应样式。 |
仅在运行视口下补场景 absolute/inset 定位;安全区使用已有主题 surface/text 颜色,补齐卡片间距、14px 复选框文字和底部定位,不修改安全规则或推进逻辑。 |
| WEB-06 | 离线回放默认视频被替换成约 32 秒的新片,但候选与抓拍仍对应约 45 秒已验收片;34 秒与 45.2 秒两个候选不可达。 | 当前默认文件实际 31.973991 秒;旧 12 候选时间轴不按 metadata 缩放,视频结束却会把五阶段标记为已回放。既有视频 SHA 契约实际失败。 | 默认引用改为仓库保留的 pose1.mp4,该文件 42,865,492 字节、SHA-256 为 B588101115196061E0D2BCE4B0BD0CB1B01CAEB7561B31D0F26F5C0E980696D4,与既有已验收视频契约完全一致,实际 45.422 秒。新 32 秒文件原样保留,是否换用新片及重标候选/抓拍列 F5 待确认,不猜测新时间轴。 |
修改文件:
unreal_tran_web/src/features/training/trainingDocument.tsunreal_tran_web/src/views/content/ContentEditorView.vueunreal_tran_web/src/views/teaching/TeachingRunView.vueunreal_tran_web/src/styles/teaching-run-workspaces.scssunreal_tran_web/src/features/physical-legacy/runtime.tsunreal_tran_web/scripts/physical-offline-replay.contract.test.mjsunreal_tran_web/scripts/training-channel-profiles.contract.test.mjsunreal_tran_web/scripts/teaching-step-run.contract.test.mjs先加入已保存步骤排序回归:修改前 8 项测试中 2 项失败,实际观察到序号 [3,2,1] 与 [2,1],确认不是推测问题。
修复后的命令:
node --experimental-strip-types --test scripts/physical-offline-replay.contract.test.mjs scripts/training-channel-profiles.contract.test.mjs scripts/teaching-step-run.contract.test.mjs scripts/teaching-command-idempotency.contract.test.mjs scripts/core-role-contract.test.mjs scripts/virtual-training-formal-route.contract.test.mjs scripts/training-scene-grounding.test.mjs
pnpm run build
git diff --check
vue-tsc --noEmit、Vite 打包与旧模型 iframe 校验,详见 frontend-build.log。已有资源 URL、包体大小告警不按构建失败统计。git diff --check 未发现空白错误;工作区 Git 的 LF/CRLF 提醒属于换行提示。video/mp4;ffprobe 显示 H.264 Main/yuv420p + AAC LC。bundled Chromium 对新旧 H.264 都返回不支持并触发 DEMUXER_ERROR_NO_SUPPORTED_STREAMS,不属于该视频的产品解码缺陷;根代理使用本机 Edge 验证 H.264 可播放,真实离线回放使用 Edge 完成。/api 重定向、命令丢响应后的重放、步骤事实失败与重试、教员/管理员身份边界继续验证。.teaching-three-scene 的 aria-label/.teaching-scene-status 成为“已加载发布训练场景 · N 个对象”且无资产失败提示,再检查真实资产下载响应与截图。canvas 存在不等于 GLB 就绪。场景 host 应填满运行视口;明暗主题下安全确认区均应可读。video.duration - 0.03 后 [data-event-timeline] [data-physical-event][data-offline-replay="true"] 应为 12 条,包含 offline-replay:replay-complete;候选仍只供教员复核,不写正式运行进度。本分工没有数据库变更、依赖版本变更或新增产品功能。所有待确认功能范围统一列入总报告,避免分散审批。