diff --git a/docs/plans/2026-07-08-便宜档生成死圈修复-plan.md b/docs/plans/2026-07-08-便宜档生成死圈修复-plan.md index 26fa0d95..bfcc3a2f 100644 --- a/docs/plans/2026-07-08-便宜档生成死圈修复-plan.md +++ b/docs/plans/2026-07-08-便宜档生成死圈修复-plan.md @@ -68,3 +68,19 @@ topic: 便宜档生成死圈修复 ## 归属与排期 归便宜档生产 cutover 线(本计划上级 [`2026-06-30-便宜档M3-生产cutover-plan.md`](2026-06-30-便宜档M3-生产cutover-plan.md))。已过双评审,进入执行。fix① 优先(治死圈)、fix② 随后(降触发面,更上游)、fix③ 并入。不在内测启动关键路径上,但建议内测放量前完成 fix①。80% 达标缺口(玩法正确性 E/G/H)属质量线另一工作面,本计划不覆盖。 + +## 执行进度(2026-07-08 更新,均 push dev/2.0.0) + +工具层四修全落 + 回路成环证,共 24 单测绿。剩两项为证据门后置、均非内测阻塞。 + +- **fix①-A 增量 edit 工具**(`596ea136`):`cheap_run.edit_file`(读现文件→校验 old 唯一命中→精确替换→经 `write_file` 回写,继承 L1_FIXED/game_dir 边界 + whitelist 把关)+ `cheap_toolkit` 注册进七工具面 + `edit_file` 加入软停 blocked-tools。6 单测(`test_edit_file_toolkit.py`)。 +- **fix②-prompt 克隆纪律 + check-early**(`596ea136`):`cheap_roles.py` 工具清单纠正为七工具、`edit_file` 小改优先(原提示写「没有 edit_file」,不改则 agent 不会用新工具,是最要害的一处)+ rng/nowMs 逐字克隆禁自造回退 + 先写最小核心即 check 修红线再扩玩法。 +- **fix②-check 红线报错行号**(`b63fd1b8`):`tools.mjs` 的 `stripCode` 改「内容抹成等量空格、保留换行」,结果串与原文行号一一对应(5 处调用点语义不变、更精确);红线判定抽出可测的 `_bannedLineErrors`(整串正则做权威判定不漏 `\s*` 跨行、逐行定位命中行号),报「红线 X 第 N 行 + 用 edit_file 改回 ctx 形态、别整文件重写」,并点破「函数内回退/任意嵌套照样命中」。7 新测(`check-banned.test.mjs`)+ 回归 `check`/`check-undef` 共 33 绿。(计划里暂名 `findBannedCallsWithLine`,落地名 `_bannedLineErrors`。) +- **fix③ brief 落盘取证**(`8f700c4b`):`cheap_studio._persist_brief_forensics` 在 scaffold 就绪后即落 `game_dir/evidence/brief.json`(字段 `brief`(限长)/`bytes`/`sha256`(按完整原文)/`truncated`/`promptMax`/`source`),早落使硬失败/挂死也留得下、sha256 核 worker↔后端字节一致、超 `PROMPT_MAX=1000` 截断脱敏;非阻塞铁律;绝不落工程根。4 新测(`test_brief_forensics.py`)。 +- **回路成环证**(`29da2373`):`test_deadloop_fix_loop.py` 确定性集成——scaffold 合规起点 → 注入一处裸 `Math.random` → check 经真 node 报红线+行号+edit_file → `edit_file` 精修那一行 → check 红线消失、整体 `ok=True`。证 fix①-A × fix②-check 在工具层真能闭合出圈;「大模型会不会照做」交真环境 n=5。 +- **fix② 模板补 nowMs 示范**:不需要——`_template/src/game-logic.js` 本就无 nowMs 用法、rng 已合规(`ctx ? ctx.random.next() : 0`),无范例缺口可补(双评审已坐实违规是模型自造、非模板诱导)。 + +**剩两项(证据门后置)**: + +- **n=5 真环境收敛环**:cheap Service `:8300` 真 MiniMax 跑 5 局,收敛判据 = 5/5 不因缺 path stuck 且 `ok=True` 过门。需 mini-desktop 窗口 + 真钱 + 前台串行(单局可 10+min)。**这同时是 fix①-B 是否需要的证据门**:若 n=5 无残余漏 path stuck,则 fix①-A 已足、fix①-B 免做;若有残余,才以此证据支撑动共享代码的风险。mini-desktop 现有三款北极星真机终验批在飞,须避资源争用。 +- **fix①-B 共享 tier2 熔断窄口径纠偏**:`middleware.py` stuck 处(431-465)注入畸形参数纠偏。最险——事件流中间件注入纠偏消息本非其自然层(它只 observe/yield 事件、不组装 agent 下一轮),且改的是 cheap+tier2 共享的 stuck 逻辑。**执行判断(证据优先 + 最小改动)**:fix①-A 已从根上消除「整文件重写→漏 path」(edit 载荷仅 `{game_id,path,old,new}` 极短、漏参概率骤降),fix①-B 属 defense-in-depth;应等 n=5 量出是否仍有残余漏 path stuck 再决定,不在无证据下投机改共享代码。做则 cheap-only 隔离(子类/开关)+ tier2 stuck 用例回归(`test_circuit_stuck_signature.py`)。