diff --git a/design/qa/iter17-enemy-L3-改前锚丢失-2026-10-07.md b/design/qa/iter17-enemy-L3-改前锚丢失-2026-10-07.md new file mode 100644 index 00000000..c0483998 --- /dev/null +++ b/design/qa/iter17-enemy-L3-改前锚丢失-2026-10-07.md @@ -0,0 +1,55 @@ +# L3 停机报告——敌人表行集多行批改前锚丢失(迭代 17 卡①,2026-10-07) + +状态:**L3 停机**。命中时机 = T0 开工序(MC 锚开工前核验步);本 worktree(g-plan2-iter17-enemy,分支 iter17-enemy-20261007,基点 e535436)**零改动、零提交、未跑任何测试**,等用户发令后恢复。 + +## 一、停机事实 + +任务书 MC 对拍方案预设「**改前锚免跑——直接复用卡⓪落盘的 post 锚**」两份文件: + +- `sim-data/runsum_iter17dd_post_off_n20_20261006.jsonl` +- `sim-data/runsum_iter17dd_post_formed_n20_20261006.jsonl` + +(出处:卡⓪出口报告 design/qa/iter17-datadrive-exit-report-2026-10-06.md §三;seed0=83000、每档 20 局。) + +**执行会话全盘核查结论:两份文件已不存在于本机任何位置,不可恢复。**核查留痕(全部在本报告落档前现场执行): + +| # | 核查动作 | 结果 | +|---|---|---| +| 1 | 本 worktree sim-data/ 列目录 | 只有随 git 走的三件(README.md / analyze.py / growth_model.py),无任何锚文件 | +| 2 | 主区 D:\code\g-plan2\sim-data\ 列目录 | 最新文件停在 2026-10-05(iter14 批锚),无任何 2026-10-06 件,无 iter17dd 字样 | +| 3 | `git worktree list` | 卡⓪ worktree(iter17-dd-20261006)已在收口时删除,现存仅主区+本 worktree+standee-tier+uialign 四处 | +| 4 | `find /d/code -name "runsum_iter17*"` 全盘搜 | 零命中 | +| 5 | `grep -rl "83000"`(主区 sim-data + design/qa) | 仅命中卡⓪出口报告 md 本身(文字记载),无任何数据文件含该种子 | +| 6 | 两仓内 `find -name "*.jsonl" -newermt 2026-10-06` | 零命中 | + +**根因**:sim-data 数据件自 2026-10-03 起整目录不入 git(.gitignore 强制,语义=磁盘缓存层);卡⓪的两份改后锚只存在于卡⓪ worktree 的 sim-data/ 里,从未复制进主区;收口 `git worktree remove` 时随目录一并删除。锚文件无任何 git 历史可回溯(从未被提交过),也无回收站外副本。 + +## 二、等价性核验(任务书预设的那道闸——已通过,与本次停机无关) + +任务书要求开工前先核验「game/ 下模拟相关路径在 6e7b5d1(卡⓪锚采样点)与 T0 基点 e535436 之间 diff 为空」。**核验通过**:`git diff 6e7b5d1..e535436 -- game/` 全部改动落在 presentation/(卡③暂停层)与 smoke 探针文件;`game/core/`、`game/data/` 与 MC 采集脚本 adventure_monte_carlo.gd 三者**零 diff**。若锚文件还在,复用是成立的。停机原因不是等价性破,而是**被复用的对象本身不存在**。 + +## 三、影响面 + +1. **MC 逐项对拍腿失据**:设计契约 R1(零内容期逐位零漂移)要求「冒烟 + MC 同种子逐项一致」。没有改前锚,T6 的改后锚没有比对对象,R1 的 MC 腿无法闭环。 +2. **决策窗口在写码之前**:改前锚必须在本批任何代码改动落地前采集(T2 起改 game/ 即破坏「改前」码态)。所以这个问题**不能拖到 T6 再说**,必须现在停。 +3. **恢复动作涉及随机数消耗预算**:补采改前锚 = 新增 40 局模拟(off/formed 各 20),使本批模拟总量从任务书字面预算「总量 40(二档贴边)」升到 80 局。消耗预算属用户保留裁决面(四档硬闸「超档停机呈报」+ 本任务书「禁静默自采」条款),执行会话不得自采。 + +## 四、备选方案(交用户裁决,含各自代价) + +| 案 | 内容 | 代价 / 收益 | +|---|---|---| +| **甲(推荐)** | 批准在 T0 现态(e535436,一行未改)补采改前锚 40 局(off/formed 各 20,seed0=83000,命名建议 `runsum_iter17enemy_pre_*`),T6 再采改后锚 40 局照原计划执行 | 本批模拟总量 80 局、约 7 分钟,超任务书字面「总量 40」但与卡⓪批实际支出形态完全一致(卡⓪也是改前 40+改后 40);等价性已证(core/data/MC 脚本在两提交点零 diff + 引擎确定性),补采的改前锚与丢失的卡⓪锚在数学上必然逐位相同,等于零信息损失。会话累计时长 ≤20 分钟合规 | +| 乙 | 只保 off 档配对(改前/改后各 20 局,总量 40=字面贴边),formed 档放弃 | 预算不超字面;代价=成型注入画像面(卡⓪迁移的 14 件专长秘宝注入行)失去对拍腿。本批改的是敌人表/spawn 面、对两档同等生效,off 腿已覆盖本批触碰路径,但「逐项一致」覆盖面收窄,需用户明示接受 | +| 丙 | 放弃 MC 腿,R1 只靠冒烟全量断言 + 静态等价论证收口 | 最省;代价=设计契约 R1 的字面被破(契约明确要求 MC 同种子逐项一致),且开了「锚丢了就不拍」的先例,**不建议** | +| 丁 | 用户本地另有备份(网盘/手工拷贝),恢复两份 iter17dd 文件到本 worktree sim-data/ 后按原方案继续 | 零新增消耗;前提是备份确实存在 | + +## 五、恢复路径(任一案获批后) + +1. worktree 仍在原位且干净(基点 e535436),后续会话从 T0 剩余步骤续起:基线重测回填(冒烟/run_all/探针/doc 三闸/熵增)+ §2 事实表逐条重核(此前只完成锚核验步)。 +2. 案甲获批时先补采改前锚再动任何代码;案丁获批时核验恢复文件的行数(每档 20 行纯 JSONL)与种子序(83000 起升序)后照原方案走。 +3. 任务书其余部分(已裁点、契约、任务卡)不受本停机影响,无需修订。 + +## 六、停机自检对照 + +- 触发条款:任务书「停机点」清单 MC 相关硬闸 + CLAUDE.md MC 触发细则「任务书预设步骤的前提消失时停问勿照字面执行」+ sim-data README 配套纪律①「档位上限=硬闸,超档停机呈报」。 +- 未越权动作自证:未采任何一局模拟、未跑任何测试、未改任何文件(本报告除外)、未动主区与兄弟 worktree。