TAP version 13 # core role contract: 12 assertions passed # Subtest: scripts\\core-role-contract.test.mjs ok 1 - scripts\\core-role-contract.test.mjs --- duration_ms: 782.2229 type: 'test' ... # PASS physical offline replay contract (video, captures, timeline, no-runtime boundary) # Subtest: scripts\\physical-offline-replay.contract.test.mjs ok 2 - scripts\\physical-offline-replay.contract.test.mjs --- duration_ms: 683.3474 type: 'test' ... # Subtest: start, progress, submit and review send one UUID in body and Idempotency-Key ok 3 - start, progress, submit and review send one UUID in body and Idempotency-Key --- duration_ms: 1.0648 type: 'test' ... # Subtest: failed action retry reuses its UUID and frozen body until success ok 4 - failed action retry reuses its UUID and frozen body until success --- duration_ms: 58.4006 type: 'test' ... # Subtest: every formal teaching command call owns a retry tracker and clears only after success ok 5 - every formal teaching command call owns a retry tracker and clears only after success --- duration_ms: 1.0878 type: 'test' ... # Subtest: formal step-run endpoint keeps encoded run id and typed list response ok 6 - formal step-run endpoint keeps encoded run id and typed list response --- duration_ms: 0.7168 type: 'test' ... # Subtest: step-run type matches the backend fact and redaction contract ok 7 - step-run type matches the backend fact and redaction contract --- duration_ms: 0.2057 type: 'test' ... # Subtest: run workspace renders server step facts and keeps only the all-empty legacy fallback ok 8 - run workspace renders server step facts and keeps only the all-empty legacy fallback --- duration_ms: 0.4207 type: 'test' ... # Subtest: formal exam closure overlay is explicitly gated by exam lifecycle, not by the part dropzone ok 9 - formal exam closure overlay is explicitly gated by exam lifecycle, not by the part dropzone --- duration_ms: 0.2351 type: 'test' ... # Subtest: failed current step exposes retry without reopening completed or terminal runs ok 10 - failed current step exposes retry without reopening completed or terminal runs --- duration_ms: 4.7771 type: 'test' ... # Subtest: 旧训练文档自动迁移为单渠道并保持 modeConfig 兼容镜像 ok 11 - 旧训练文档自动迁移为单渠道并保持 modeConfig 兼容镜像 --- duration_ms: 3.0846 type: 'test' ... # Subtest: 同一通用步骤可启用三渠道且只维护渠道差异配置 ok 12 - 同一通用步骤可启用三渠道且只维护渠道差异配置 --- duration_ms: 1.97 type: 'test' ... # Subtest: 重排步骤时同时维护已启用实装渠道的严格递增进度 ok 13 - 重排步骤时同时维护已启用实装渠道的严格递增进度 --- duration_ms: 0.6537 type: 'test' ... # Subtest: 已保存实装步骤倒序、删除和复制后重新计算序号与进度 ok 14 - 已保存实装步骤倒序、删除和复制后重新计算序号与进度 --- duration_ms: 0.695 type: 'test' ... # Subtest: 虚拟为默认的多渠道工程重排已保存步骤后更新实装进度 ok 15 - 虚拟为默认的多渠道工程重排已保存步骤后更新实装进度 --- duration_ms: 0.2713 type: 'test' ... # Subtest: 默认渠道不能从 enabledChannels 中被移除 ok 16 - 默认渠道不能从 enabledChannels 中被移除 --- duration_ms: 0.0847 type: 'test' ... # Subtest: 规范化时清理未启用渠道的残留配置 ok 17 - 规范化时清理未启用渠道的残留配置 --- duration_ms: 0.2128 type: 'test' ... # Subtest: 发布预检同时校验已启用的对抗渠道配置 ok 18 - 发布预检同时校验已启用的对抗渠道配置 --- duration_ms: 1.7891 type: 'test' ... # Subtest: 通用编辑器修改默认配置后,重新进入编排器不会被旧 profile 覆盖 ok 19 - 通用编辑器修改默认配置后,重新进入编排器不会被旧 profile 覆盖 --- duration_ms: 0.4977 type: 'test' ... # Subtest: 默认渠道切换保留旧渠道、使用目标渠道原配置并同步三个合同字段 ok 20 - 默认渠道切换保留旧渠道、使用目标渠道原配置并同步三个合同字段 --- duration_ms: 0.3946 type: 'test' ... # Subtest: 历史单渠道经通用编辑器保存时建立完整渠道合同 ok 21 - 历史单渠道经通用编辑器保存时建立完整渠道合同 --- duration_ms: 0.1807 type: 'test' ... # Subtest: 旧对抗单局时长迁移时保留配置值,正式字段优先 ok 22 - 旧对抗单局时长迁移时保留配置值,正式字段优先 --- duration_ms: 0.3185 type: 'test' ... # Subtest: 通用编辑器使用渠道合同保存且按全部启用渠道重算实装进度 ok 23 - 通用编辑器使用渠道合同保存且按全部启用渠道重算实装进度 --- duration_ms: 14.1505 type: 'test' ... # PASS · garage floor grounding uses DiMian geometry and keeps explicit opt-out # Subtest: scripts\\training-scene-grounding.test.mjs ok 6 - scripts\\training-scene-grounding.test.mjs --- duration_ms: 254.1784 type: 'test' ... # virtual training formal route contract passed # Subtest: scripts\\virtual-training-formal-route.contract.test.mjs ok 7 - scripts\\virtual-training-formal-route.contract.test.mjs --- duration_ms: 177.1822 type: 'test' ... 1..25 # tests 25 # suites 0 # pass 25 # fail 0 # cancelled 0 # skipped 0 # todo 0 # duration_ms 876.531