docs(迭代29 T8 收口): roadmap 换代 + 实现报告 + active.md 快照与状态记录

roadmap:迭代 29 行换代为已入库(需求卡片 v1.4 → v2.0、估时 5.5–7d → 6.0–7.5d、门列改为实耗),
并去掉「卡片事实基线待 v2.0 重核」的开工前警告(v2.0 已成立);迭代进度行与近期主战场行同步换代,
注明遗留=11 号闸 parity 对拍待批准发起。
active.md:快照三行(更新于/最新闸态/已裁在册)换代,追加状态记录 505。
实现报告落 design/qa/iter29-实现报告-2026-10-16.md(九节:概览/四件事/代拍板十二项/经裁四项/
闸与读数/待裁与遗留)。
This commit is contained in:
DKChan committed 2026-10-16 16:31:19 +08:00
1 parent c3b6403018
commit 2e9850a633
3 files changed
+167 -6

No files matched your search

+5 -3
View File
@@ -16,15 +16,15 @@
- **工程路线图**:根目录 `roadmap.md`(里程碑时间线的权威;实时状态看下方快照节)
## 当前状态快照(收口批先更新本节,再追加状态记录;≤10 行)
- **更新于**:2026-10-16(迭代 29 编入测试分层与门禁语义修正批〔roadmap 21c83f5〕;M4 数值批已废、四项欠账归 06 在册待裁;**需求卡片已升 v2.0——三轮复查定稿、零待裁点**)。
- **最新闸态**:迭代 28 批末冒烟 1125/0、run_all 27 套、probe --click 残留 0、render golden 棋盘×3+菜单 0.00%、doc 三闸与熵增对基线零新增、static_scan S9 归零(S10 存量 125 在文件头清偿批在册);MC 零跑。
- **更新于**:2026-10-16(**迭代 29 测试分层与门禁语义修正批已入库**——三硬闸落地+L2/L3 建承载+L1 补洞六套+S3/S5 修复;冒烟 1127/0、run_all 33 套、轻闸探针 10 件、重闸全绿存量红零新增;M4 数值批已废、四项欠账归 06 在册待裁)。
- **最新闸态**:迭代 29 批末冒烟 1127/0、run_all 33 套(含 1 集成)、probe --click 残留 0、render golden 棋盘×3 0.00%+菜单 0.15%、doc 三闸与熵增对基线零新增、static_scan S3/S5 新落地(S10 存量 127 在册);**11 号闸 parity 判为触面、待用户批准才发起**,MC 未跑。
- **probe --full 曾有一件红**:`t17_defer_probe`「关卡画面未出现」,用户已裁为存量红、不阻合并(合并 5b958ff6);根因是探针未隔离带断点的真实存档,该修复已随 `gatefix-20261015` 合入 master(合并 de8d28b6)。
- **迭代 28 交付**:修好启动时菜单被冒险层盖住的装配顺序,层序收敛为唯一装配合同(散落的两处 `move_child` 删除);boot 链路、九阶段生命周期、启动态菜单 golden 三组验收补全;本批新立硬规则「验收函数无变异红记录不算验收成立」,三处规约落文。
- **迭代 27 交付**:三屏壳场景与局态物化、结算五段拆分、RunLedger 单类持四账、模态编排类、类型闸、死代码退役,编排器由 1725 行降到 1325 行。
- **规约体系现状**:规则文件按领域拆为 7 份、单文件上限 150 行,CLAUDE.md 只留元信息、命令、目录、规范导航与一行一条红线;动手前按规范导航表查对应细则。
- **人闸在册两件**:迭代 27 全流程走查〔07 ㉖〕与迭代 28 启动态菜单〔07 ㉗〕,均登记不阻塞;贫矿脉目检项〔07 ⑪〕已随 2026-10-16 屏蔽令转记失效;迭代 19~26 的目检已于 2026-10-14 全部核销。
- **簿记出清**:迭代 19~26 的代拍板追认单与 GDD 反哺点已全部裁决落文,对应 14 份迭代实现报告按「证据只留最新」删除(git 历史可考)。
- **已裁在册**:M4 数值批已废(2026-10-16 用户删卡令——禁止再以该名义立批/规划/引用已删卡,四项数值欠账归 06 在册、重新归属待裁);**迭代 29=测试分层与门禁语义修正批**(2026-10-16 用户令编入·**待开工**——需求卡片 **v2.0**(三轮复查定稿、**零待裁点**),开工门 U0=**仅欠 `/iter` 发令**);迭代 27/28 位预留追加卡。
- **已裁在册**:M4 数值批已废(2026-10-16 用户删卡令——禁止再以该名义立批/规划/引用已删卡,四项数值欠账归 06 在册、重新归属待裁);**迭代 29=测试分层与门禁语义修正批 ✅ 已入库**(需求卡片 v2.0 零待裁点;收口遗留=11 号闸 parity 对拍待批准发起、GDD 反哺三条待裁、06 在册遗留七项);迭代 27/28 位预留追加卡。
- **界面美化三层**:第一层三件全部交付;余第二层三件(贴图/字体/样张)与第三层其余(九宫格切片/棋盘观感)待立项。
## 未决面(进行中/待人闸/待裁点指针;现行事实源登记处=`design/gdd/06-待办清单.md`)
@@ -51,3 +51,5 @@
- **503(2026-10-16,贫矿脉屏蔽+DS_DEBUG 写死批总收口)**:用户令两项一波走完(worktree `g-plan2-shielddebug-20261016`,五提交,合并 d3356985,合并后主区冒烟 1126/0 兜底)。**①贫矿脉屏蔽**:`variation.tres` 删 skewed_veins 行(用户裁「地形变异特异关卡后续重新做设计,先屏蔽」)——Boss/精英图全局池空→`_resolve_global_variant` 空行回落→region 布置原路兜底,玩家面零横幅零角标零资源偏斜;冒烟 7 处断言换代为「全局池空→region 兜底回落」路径(行数 7→6/boss 池去 global 行/L2 boss+elite 全局决议空行/格子级恰一行且在 {magma,ash}/快照空态一致/同种子确定性含 variants 字典逐位);resource_face 机制代码(RewardEconomy 偏斜投影/schema 互锁/负样本)零触碰,重建设计直接加行即可;删行依据与首发批裁决记录改写为屏蔽注记(git 历史可溯)。**②DS_DEBUG 写死**:`main.gd:219` 环境变量读取退役、`_debug_entry` 恒 true(用户令「直接写死,不读环境变量,太麻烦」)——全库 DS_DEBUG 引用清零(含浮窗内用户可见工具提示文案);闸断言三处换代(smoke V2f 改恒开/click_probe 原「未设时不得默认开」反转为「未恒开即失守」并挪至 boot 段、设置面关闭段补 ModalStack 遮挡恢复断言/tune_probe 删自设环境变量死代码);**发布前删除事项=main.gd:219 一行**(无 CI,两道恒开断言会红兜底)。**闸面三修**(首跑抓出):冒烟跨块引用 bb/crng 出作用域 Parse Error(hoist 为 boss1_ids/variants/calls);shot_probe 截图前走 `_close_modal` 真实单口归一浮窗(写死后 boot 即开压菜单——boot 顶层检查/golden 19%/文字占比 0.00% 三处受扰;视觉契约与调试模式解耦,发布前删写死时基线不受影响);click_probe 恒开断言归位。**基线 09 指纹刷新**:静态扫描红项清单与基线不符,经主区与分支 `audit_file_headers` 输出逐行一致(128 行)证明非本批引入(漂移源于 20f4a7dc 之后主区 .gd 头注变动),按「人工确认后重生成」条款对齐指纹,红项仍为存量 127 处。**验收**:全量闸通过(存量红零新增,回执 commit=HEAD);worktree 与分支已清理。**读数义务归 M4**:Boss 图资源面分布与 region 布置读数(本批 MC 零跑,内容回落既有 region 行为)。**反哺点待裁**:设计语义面五处描述已撤回功能(地形变异.md §全局作用域型/HUD 框架三层预告/教学引导手册行/难度曲线与Boss 两行/art-bible §4.6.3 括注);机械面四件已随批同步(07 ⑪ 转记失效/architecture 行数 7→6/数据配置清单/06 战斗节点地图类型差异化条)。
- **504(2026-10-16,需求卡片升 v2.0——三轮复查结论落文,U0 门只欠发令)**:grilling 两轮+一轮只读深挖后一次性升版(用户令「实现相关的都可以用你推荐的,但重新检查一遍」)。**首轮十一问按推荐全裁**:L2 承载+2 例(Core-Core/A1×A2 随属主批增量)/parity 收编为**条件闸件**(仅 diff 触 data-tables/meta-save/rng/settlement 跑,否则 SKIP,守住「MC 无数值改动零跑」红线)/CI timeout 前提已死、改铸为轻闸墙钟预算(T0-② 实测,超用户上限才议分层或并发)/integration 并入 run_all manifest/S9 存量豁免维持、本批新写测试件全类型标注(升 🔴 契约 8)/golden 失效显式重制+呈报+复闸/smoke 两名不改名只加注。**第二轮两项亦按甲**:N1=§2 改指针(事实面归 architecture.md「测试与质量域」三张表,禁双载体漂移——ADR 教训同款防复发);N2=T6 收 S3 路径修正(core→game/core+零命中自检,+0.25d)。**事实订正四处**:PASS 串判定面实为 8 件探针(非 4)/game/smoke 实为 29 个 .gd(非 38)/T5 的 status_container 不是零覆盖(2 单测已指名)→ 换 board_generator/README「ci-removal 批已改写门禁节」前提不成立(分支未合入)→ CI 残留 8 处(README 6+run_all.gd 头注 2)改由本批 T2 清除。**死引用订正**:CLAUDE.md:21/:106/:116 与 §0 的 :102-103(文件已压到 71 行)、tests.yml(已删)、golden_compare.py:11(实际 :13)。**新增义务**:本批落地后须回写 architecture.md 的「三条判定硬闸现行状态」矩阵(缺失→在位)与 S 表。估时 T0–T8≈6.0–7.5d(+0.5d),软盒 7d 维持。**U0 现状:零待裁点+v2.0 成立,仅欠 `/iter` 发令**;唯一待补输入=轻闸墙钟上限(T0-② 前给即可)。文档三闸全绿。
- **505(2026-10-16,迭代 29 测试分层与门禁语义修正批总收口)**:用户 `/iter 29` 发令,单会话八提交交付(worktree `g-plan2-iter29-testlayers`,分支 `iter29-testlayers-20261016`)。**核心是把验收语义从「跑一遍没崩=通过」扭到「三层完备+判定可靠」**,三硬闸每条都有反例实证:改前「探针打印 PASS 后 quit(1)」判全绿、「零断言套件」判 all green (0 checks)、「子套件中途报 SCRIPT ERROR」判 PASS;改后三条全部见红。**本机两个坑写进注释防复发**:①`OS.execute` 的输出管道恒空(子套件输出须交命令解释器重定向落盘再读);②`OS.get_executable_path()` 返回 GUI 子系统 exe,其子进程 stdout/stderr 句柄无效,必须换 `*_console.exe`。断言下限用专用退出码 2(不是 1——致命类套件期望 1,返回 1 会被 expect 协议放过)。**三层承载**:L1 补六套(board_generator/minesweeper_rules/config_db_resolver/config_db_cross_validator/hud_presenter/battle_narrator,27→33 套),三屏壳归 L3 探针;L2 建 `tests/integration/` 首个用例(存档⇄RNG 往返,含旧档经迁移链后仍可续玩这条真实路径);L3 新建 `screen_flow_probe`(六步主流程+两条回退,每步判屏级互斥)入轻闸。**parity 收编为重闸 11 号条件闸件**(每次跑批做触面判定,触面也不自动跑——MC 须用户批准),本批即判触面,挂 NEED-APPROVAL 待裁。**扫描域**:S3 路径由裸 `core` 修正为 `game/core`(此前恒零命中恒绿、什么都不扫),补 S5,并给每条规则加零命中自检(扫描面为空即判红,路径写歪时自检跟着一起红)。**四处经用户裁决的改动**:fx_grant_gp 补行来源豁免(每局 7 次断言失败被闸长期漏过)/manifest 增 negative 字段(负面套件的错误是测试目标)/config_db_test 的 rows 定型数组赋值改 assign(**10 条敌人表行集纪律断言从未执行过**,修后两条正向见红=夹具缺 depth-0 锚行,补锚行全绿)/system_contracts 空桩换真实实例。**台账与时效**:15 个游离脚本逐个定性成表(存疑按在役);golden 先判再动,实测 changed 0.00%/0.15% 判有效不重制。**架构事实源回写**:三硬闸矩阵「缺失」→「在位」、S 表 S3/S5 更新、新增「三层承载与判定原则」小节。**验收**:重闸 exit=0(存量红零新增,回执 commit=HEAD),冒烟 1127/0 持平,轻闸墙钟 363→405s。**遗留待裁**:11 号闸 parity 是否批准发起、GDD 反哺三条、06 在册七项。
+159
View File
@@ -0,0 +1,159 @@
# 迭代 29 实现报告 · 测试分层与门禁语义修正批(2026-10-16)
- 需求卡片:`design/research/需求卡片-测试分层与门禁语义修正批-2026-10-15.md`(**v2.0**,三轮复查定稿、零待裁点)
- 开工门 U0:用户 `/iter 29` 发令(2026-10-16)。基线 master `752c9a0a`
- worktree:`g-plan2-iter29-testlayers`,分支 `iter29-testlayers-20261016`,八提交(`698d864d` … `c3b64030`)
- 用户原始诉求(本批要兑现的三条):①最单元的逻辑代码有它的单元测试;②整体的模块有它的接口测试;
③整体的系统在执行之后,也有它 UI 方面的和场景切换相关的测试。**并且验收不能只是"冒烟"——
可以是冒烟,但更重要的是逻辑正确性**
---
## 一、批次概览
| 卡 | 内容 | 状态 |
|---|---|---|
| T0 | 证据坐实与基线冻结(三反例实测 + 墙钟 + 行号复核 + 存量红留档) | ✅ |
| T1 | 本地闸判定三硬闸(退出码/脚本错误扫描/断言数下限) | ✅ |
| T2 | 术语订正 + CI 残留清除(机械面) | ✅ |
| T3 | L2 接口层建承载(`integration/` + parity 条件闸件收编) | ✅ |
| T4 | L3 屏壳切换探针 `screen_flow_probe`(入轻闸默认段) | ✅ |
| T5 | L1 覆盖补洞(4 个 core + 呈现层两件) | ✅ |
| T6 | 扫描域:S3 路径修正 + 零命中自检 + 补 S5 | ✅ |
| T7 | 游离脚本台账 + golden 时效判定 | ✅ |
| T8 | 文档同步闸(架构事实源回写 + 06 登记)与全闸 | ✅ |
**读数**:冒烟 **1127/0**(与开工日持平,本批零新增冒烟断言);单元套件 **27 → 33 套**;
在闸探针 **9 → 10 件**(新增 `screen_flow_probe`);轻闸 `--quick` 墙钟 363s → 405s;
全量重闸 **exit=0,存量红零新增**。
---
## 二、四件事的交付
### ① 本地闸三硬闸(本批改造成效最大的一卡)
判定语义从「超时 + 日志含 PASS 串」扭到三硬闸,**每一条都有反例实证**(不是推断,是跑出来的):
| 硬闸 | 反例构造 | 改前判定 | 改后判定 |
|---|---|---|---|
| 退出码为唯一权威判据 | 探针打印 PASS 后 `quit(1)` | `[probe_gate] 全绿` ❌ | `FAIL — 退出码=1(PASS 串不抵)` ✅ |
| 脚本错误扫描命中即红 | 套件中途触发 `SCRIPT ERROR` 后仍退出 0 | `[run_all] PASS` ❌ | `FAIL — 输出含脚本错误标记` ✅ |
| 断言数为零即红 | `Kit.finish()` 时 `checks==0` | `all green (0 checks)` ❌ | 返回专用退出码 **2** → `FAIL` ✅ |
实现要点:
- `probe_gate.sh` 八件探针判定统一走 `verdict` 函数(退出码优先 → 脚本错误扫描 → 签名标记附加判据);
`ui_click_probe` 本就走退出码语义、日志不写 PASS,签名标记传它自己的 `click_probe` 串,不强加。
- 新闸件 `tools/error_scan.py`:错误标记 `import` 自 `run_smoke.py` 的 `ERROR_MARKERS`,**禁第二份清单**。
- `run_all.gd` 侧遇到两个本机事实(都写进注释防复发):
① `OS.execute` 的输出管道在本机恒空(实测 0 行)——子套件输出必须交给系统命令解释器重定向落盘再读;
② `OS.get_executable_path()` 返回的是 GUI 子系统 exe,它起的子进程 stdout/stderr 句柄无效——
必须换 `*_console.exe`(`GODOT_BIN` 优先)。
- 断言下限用**专用退出码 2**(不是 1):致命类套件 manifest 期望 1,零断言若也返回 1 会被 expect 协议放过。
### ② L2 接口层从零建承载
- 建 `game/tests/integration/`,首个集成用例 `save_rng_roundtrip_test.gd`(17 条断言):存档 ⇄ RNG 快照往返,
跨 SaveManager(落盘 + 版本迁移链)× AdventureRunner(断点消费)× RngService(续跑零跳号)× 停点态确定性。
与 `unit/core/breakpoint_resume_test` 的分工:那件是单测只验首战开板一致,本件验跨系统闭环,
含**「旧版本档经迁移链后断点仍可续玩」**这条真实玩家路径。
- `tools/parity_anchor.py` 收编为重闸 **11 号条件闸件**:每次跑批都对 merge-base 做一遍触面判定
(`data/tables`/`rng_service`/`save_manager`/`meta_progression`/`settlement`/`damage_math`/
`damage_controller`/`battle_orchestrator`/`adventure_monte_carlo`),未触面 SKIP;**触面也不自动跑**——
它调的是 MC 脚本,属「跑批发起前须用户批准」红线,闸只负责把触面判定做一遍并显式要求批准
(批准后 `PARITY_APPROVED=1` 重跑)。**本批即判为触面(改了 `battle_orchestrator.gd`),故挂在 NEED-APPROVAL 待你批准**(见第六节)。
### ③ L3 屏壳切换探针
新建 `game/smoke/screen_flow_probe.gd/.tscn`:走 菜单→营地→菜单→冒险→(关卡屏⇄战斗屏)→放弃→终局→菜单
六步主流程与两条回退路径,每步断言屏级互斥 + 流程状态位,入**轻闸默认段**。全库 `change_scene` 零命中、
屏切换全靠 visible 互斥,这正是最容易被装配顺序改动悄悄破坏又最难被单测覆盖的面。
判据两处订正(首跑实测抓出):① 屏标记不能裸看 `visible`——战斗容器 `battle_root` 在局外也 visible,
会把 boot 态误判成「菜单与冒险同时在场」;② 互斥不能用「可见屏计数 ≤1」——终局覆盖层合法叠在冒险内容之上
(终局态 `is_adventure` 尚未收束,是设计如此),改为冲突对判定,合法叠加仅「终局+冒险」这一对。
### ④ L1 补洞 + 术语订正 + 台账清理
- 新增六套(全部进 manifest):`board_generator`(9 条)/`minesweeper_rules`(12 条)/
`config_db_resolver`(8 条)/`config_db_cross_validator`(4 条)/`hud_presenter`(5 条)/`battle_narrator`(9 条)。
三屏壳的断言面由 ③ 的探针承担,不另起第二载体。
- 术语:「冒烟」回归本义=秒级存活检查,写进 README 术语小节,并显式点破两处历史遗留命名
(`run_smoke.py` 与 `game/smoke/` 名带 smoke,实际承载的是系统级断言面与场景探针——判定看语义不看文件名)。
- 台账:`game/smoke/` 15 个不带 `.tscn`、不入闸的手动入口件逐个定性成表(用途 + 触发方式 + 结果由谁判),
存疑一律按在役登记并标注,禁「没看见=死件」式清理。
- golden:**先判再动**——实测棋盘三图 changed 0.00%/0.00%/0.00%、菜单 0.15%,均远低于 2% 阈值 ⇒ 判有效,
留在位不重制(禁「重制一下就绿了」掩盖真实视觉回归)。
---
## 三、代拍板追认单(超清单必呈报;本批共 12 项)
| # | 代拍板事项 | 处置与依据 |
|---|---|---|
| 1 | 三硬闸的具体实现写法 | `probe_gate` 抽 `verdict` 函数;错误扫描抽独立闸件 `tools/error_scan.py`(标记 import 自 `run_smoke.py`) |
| 2 | 断言数下限的阈值 | 每套件 ≥1(防误伤小套件);零断言用专用退出码 2 与「断言失败=1」区分 |
| 3 | `integration/` 内部目录分类 | 平铺,按系统命名(`save_rng_roundtrip_test.gd`)——首例而已,够用不加层 |
| 4 | 新集成套并入 `run_all` manifest 的执行细节 | 零新机制,与单元套件同一入口同一协议 |
| 5 | 新单测/新探针的文件命名与落点 | 沿用 `[system]_[feature]_test.gd` 与 `presentation/` 归位 |
| 6 | 4 个 core 模块单测的断言面取舍 | 各 4–12 条真值断言,期望值一律由盘上/注入内容数出来(零玩法数值字面量) |
| 7 | **断言本身写错且与现行设计冲突**时的修法(契约 1 唯一例外) | 见第四节「经你裁决的四项」,逐条列明 |
| 8 | 游离脚本「在役/失效」的判定 | 存疑按在役登记并标注;`CLAUDE.md` 在册入口禁当死件 |
| 9 | S5 规则的正反例构造 | 形态=标识符后紧跟 `.` 的成员访问,排除注释行与字符串字面量;core 实测零命中 |
| 10 | 提交切分与分支命名 | 八提交按 T0–T8 一卡一笔;分支 `iter29-testlayers-20261016` |
| 11 | **S3 零命中自检的实现形态** | 扫描路径收为单点变量 + 规则自己数扫描面文件数,为零即判红,且规则体包进自检成立分支 |
| 12 | **条件闸件的 diff 触面路径表** | 写进 `run_all_gates.sh` 内(不自造第二份清单),见上文 ② |
---
## 四、经你裁决的四项(施工中冒出的分歧,未自答)
1. **`fx_grant_gp` 补进行来源断言豁免表**(你裁「本批补豁免」):`grant_segment.gd:221` 发「专长·GP 入账」
效果行(source_class=`fx_grant_gp`、origin_cell=(-1,-1)),而 `SOURCE_EXEMPT_CLASSES` 只豁免了 `fx_reveal`
⇒ 每局触发行来源断言失败 7 次,因脚本错误不改退出码被闸长期漏过。改动=一行常量加一个字符串,
零玩法行为变更(迭代 21 同款修过 `fx_reveal`,本例是同一张表的漏网)。
2. **manifest 增 `negative` 字段**(负面套件豁免错误扫描一闸):仅 `reward_dangling_treasure` 一件——
坏表是它的测试目标,输出里的 Parse Error 属误伤。退出码与断言下限照判,不是开后门。
3. **`config_db_test` 的 10 条被吞断言**(你裁「本批全修」):`rows` 是 `Array[Dictionary]` 定型属性,
直接赋 untyped 数组字面量触发 `Invalid assignment` ⇒ **中断整个函数**,敌人表「行集构成三条纪律」
的 10 条断言从未执行过(文件 31 处 check,实跑 21 条)。改 `rows.assign([...])` 后 26 条全跑,
其中两条正向断言见红,根因是**夹具缺 depth-0 锚行**(`validate` 的 anchor 规则),补锚行后全绿。
4. **`system_contracts_test` 的空桩换真实实例**(同上):`RngStub`/`UnitContainerStub` 赋给定型成员
报 `Trying to assign value of type ''`,`RngStub` 类删除,`UnitContainer`/`StatusContainer` 改真实实例。
---
## 五、闸与读数(全量重闸 `tools/run_all_gates.sh`,commit `c3b64030`)
| 闸 | exit | 说明 |
|---|---|---|
| 01 冒烟全量 | 0 | **1127 项检查 0 项失败**(与开工日持平) |
| 02 单元套件 | 0 | **33 套**(26 单元 + 1 集成 + 6 新单测);编排层另扫 `unit.log` 零命中 |
| 03 探针 --click | 0 | 五件(含新增 screen_flow)全绿,残留 Godot=0 |
| 04 探针 --full | 0 | 四件全绿 |
| 05 渲染闸 | 0 | shot_checker 全过;棋盘 golden 三图 0.00%;菜单 0.15%(≤2%) |
| 06 gdd_lint / 07 doc_link / 08 doc_term | 0 | doc_term 首跑抓到我新写的退役词「对拍」1 处,已改正 |
| 08b active.md 体量 | 0 | — |
| 09 静态扫描 | 1 | **存量红零新增**:S10 文件头存量 127 处,指纹与基线 `4354b2aa72a7` 一致 |
| 10 熵增闸 | 0 | — |
| 11 回放确定性对拍 | NEED-APPROVAL | 本批 diff 触及结算面,对拍需你批准发起(见第六节) |
**验收通过**(`all_green=true`,存量红零新增)。轻闸 `--quick` 墙钟 405s(开工日 363s + 新探针约 40s)。
---
## 六、待裁与遗留
1. **11 号闸的 parity 对拍要不要跑一次**(需你批准,我不能自行发起):触面判定是机械的路径匹配,
本批对 `battle_orchestrator.gd` 的改动实际只是加一个断言豁免常量(零玩法行为变更、零数值改动)。
- 若按「MC 无数值改动零跑」红线 ⇒ 不跑,闸维持 NEED-APPROVAL(回执里留名,不判失败);
- 若要验证一次 ⇒ 批准后 `PARITY_APPROVED=1 tools/run_all_gates.sh`(三变体约 10–15 分钟)。
2. **GDD 反哺点三条**(设计权威文档不随批改,待你裁决后另批落文):
- `design/dev/code-conventions.md` 测试纪律节:是否把「三硬闸」与「新写测试件全类型标注」写成硬纪律;
- `design/dev/test-conventions.md`:是否补「判定可靠性优先于覆盖率」一节(本批的核心命题);
- `design/gdd/07-体验验证清单.md`:`screen_flow_probe` 已转机检,是否把对应的人工走查项销号。
3. **06 已登记本批未收的七项**(不阻塞不排期):余下 3 个 core 零指名模块、`render_gate` 的脚本错误扫描缺失、
S7/S8(S6 亦仍在 TODO)、E 级卫生件、行覆盖率度量、`smoke_all` 拆分、parity 触面判定偏粗。
4. **本批最有价值的副产品**(建议转设计侧裁决是否立规):脚本错误会**静默中断所在函数的剩余断言**而
套件仍报「全绿」——本批至少三处实证(敌人表行集纪律 10 条零覆盖、`Callable` 形参类型写错让解析函数
返回 null)。已由三硬闸之二机制性拦住,但是否把它写成 code-conventions 的硬纪律待裁。
+3 -3
View File
@@ -24,8 +24,8 @@
## 当前位置(2026-10-16 刷新)
- **里程碑语义(2026-10-09 立规换代,详见下方里程碑表的换代注)**:现行里程碑 = **M3「Alpha 版本的完整实现」**——用户未明令宣布完成前停留 M3,迭代只排 M3 需求;M4=Beta 版本的完整实现,一律不排期。下文里程碑表的旧编号(M-3/M-4)保留作历史序列,语义以本节为准。
- **迭代进度**:迭代 19 五卡全部已入库(2026-10-08);**迭代 20=专长实装批 ✅ 已入库**(2026-10-11,出口闸全绿;残留人闸=实机目检五件+V20/V21/V22 人工核对半,07 在册);**迭代 21=天赋树实装批 ✅ 已入库(2026-10-12 U0 开工单会话交付,T0-T7 全绿;残留人闸=实机目检四柜台)**;**迭代 22=秘宝体系实现重构落地批 ✅ 已入库(2026-10-12 单会话交付,T1-T7 全绿;残留人闸=实机目检秘宝解锁-装配流程)**;**迭代 23=锻造工坊实装批 ✅ 已入库(2026-10-12 单会话交付,T0-T7 全绿;残留人闸=实机目检工作间形态与购买交互)**;**迭代 24=敌人表内容修批(三关)✅ 已入库(2026-10-13 /goal+iter U0 开工单会话交付——N1 (1,2) 降档 hp22/ac2·N2 毒吐盾击两行六池·N3 敌方 attack_type 轴全填 normal+敌方结算克制消费点;冒烟 949/0+run_all 25 套+重闸全绿+MC 同种子配对 40 局×both 位移在带;实现报告=design/qa/iter24-实现报告-2026-10-13.md;残留人闸=实机目检三观测〔07 ㉓〕;代拍板追认单+GDD 反哺点五条待用户;**本迭代位仍预留后续追加卡——用户将把其他需求陆续编入本迭代**);;**迭代 25=UI 全局主题批 ✅ 已入库**(2026-10-13 用户令编入,/goal+iter U0 单会话交付:全局主题资源 main_theme.tres 挂载+两处局部做法退役+冒烟 V1-V6 断言 38 条,冒烟 987/0+重闸全绿;实现报告=design/qa/iter25-实现报告-2026-10-13.md;残留人闸=实机目检全屏巡检〔07 ㉔〕);**迭代 26=UI 交互与观感批已编入待开工**(2026-10-14 用户令;需求卡片 v1.2 零待裁点;开工门=U0——用户新会话 /iter 26 发令;本迭代位预留后续追加卡,同迭代 24 先例);**迭代 27=代码架构技术债修复批 ✅ 已入库**(2026-10-14 /goal+iter U0 开工单会话交付:三屏场景化+会话物化+五段 Segment+RunLedger+ModalFlow+类型闸+卫生件五波全落;逐位一致对拍三变体五跑全同;实现报告=design/qa/iter27-实现报告-2026-10-14.md;残留人闸=实机目检五件〔07 ㉖〕;代拍板追认单十五项+GDD 反哺点两条待用户);**迭代 28=启动装配与生命周期验收补全批 ✅ 已入库**(2026-10-15 用户令编入并预批连做全批,单会话交付:T1 装配语义合同 `LAYER_CONTRACT` 单点化+冒险屏先挂/菜单屏后挂的顺序修复+V1a-d 断言重写/T2 `_smoke_boot_chain` boot 链路十断言/T3 `_smoke_lifecycle_matrix` 九阶段×五引用面/T4 渲染面三件(shot_probe 两自检+shot_checker 墨色判据+启动态菜单 golden)/T5 变异验证六次注入全见红并精确还原/T6 规范三处落文;冒烟 **1086/0→1125/0**(+39=新增 42−退役裸下标断言 3);实现报告=design/qa/iter28-实现报告-2026-10-15.md;残留人闸=实机目检启动态菜单〔07 ㉗〕;代拍板追认单+GDD 反哺点待用户裁决);**迭代 29=测试分层与门禁语义修正批(2026-10-16 用户令编入·待开工)**:需求卡片=`design/research/需求卡片-测试分层与门禁语义修正批-2026-10-15.md`(v1.4,T0–T8≈5.5–7d,开工门=U0〔Q3–Q7 裁点+卡片 v2.0 重核+`/iter` 发令〕);**迭代 30+ 位空·无批次**(原 M4 数值批已废——2026-10-16 用户删卡令「它就不是一个应该存在的东西」,禁止再以该名义立批/规划/引用已删卡;四项数值欠账归 06 在册、重新归属待用户裁)。
- **近期主战场**:迭代 20/21/22/23/24/25/26 残留人闸(实机目检六批,07 在册);**下一前沿=迭代 29 测试分层与门禁语义修正批**(2026-10-16 用户令编入·待开工——开工门=U0〔Q3–Q7 裁点+卡片 v2.0 重核+`/iter` 发令〕;各批 provisional 终值的统一标定义务随 M4 数值批废除归 06 在册、重新归属待裁;迭代 20~28 残留人闸八批 07 在册)。
- **迭代进度**:迭代 19 五卡全部已入库(2026-10-08);**迭代 20=专长实装批 ✅ 已入库**(2026-10-11,出口闸全绿;残留人闸=实机目检五件+V20/V21/V22 人工核对半,07 在册);**迭代 21=天赋树实装批 ✅ 已入库(2026-10-12 U0 开工单会话交付,T0-T7 全绿;残留人闸=实机目检四柜台)**;**迭代 22=秘宝体系实现重构落地批 ✅ 已入库(2026-10-12 单会话交付,T1-T7 全绿;残留人闸=实机目检秘宝解锁-装配流程)**;**迭代 23=锻造工坊实装批 ✅ 已入库(2026-10-12 单会话交付,T0-T7 全绿;残留人闸=实机目检工作间形态与购买交互)**;**迭代 24=敌人表内容修批(三关)✅ 已入库(2026-10-13 /goal+iter U0 开工单会话交付——N1 (1,2) 降档 hp22/ac2·N2 毒吐盾击两行六池·N3 敌方 attack_type 轴全填 normal+敌方结算克制消费点;冒烟 949/0+run_all 25 套+重闸全绿+MC 同种子配对 40 局×both 位移在带;实现报告=design/qa/iter24-实现报告-2026-10-13.md;残留人闸=实机目检三观测〔07 ㉓〕;代拍板追认单+GDD 反哺点五条待用户;**本迭代位仍预留后续追加卡——用户将把其他需求陆续编入本迭代**);;**迭代 25=UI 全局主题批 ✅ 已入库**(2026-10-13 用户令编入,/goal+iter U0 单会话交付:全局主题资源 main_theme.tres 挂载+两处局部做法退役+冒烟 V1-V6 断言 38 条,冒烟 987/0+重闸全绿;实现报告=design/qa/iter25-实现报告-2026-10-13.md;残留人闸=实机目检全屏巡检〔07 ㉔〕);**迭代 26=UI 交互与观感批已编入待开工**(2026-10-14 用户令;需求卡片 v1.2 零待裁点;开工门=U0——用户新会话 /iter 26 发令;本迭代位预留后续追加卡,同迭代 24 先例);**迭代 27=代码架构技术债修复批 ✅ 已入库**(2026-10-14 /goal+iter U0 开工单会话交付:三屏场景化+会话物化+五段 Segment+RunLedger+ModalFlow+类型闸+卫生件五波全落;逐位一致对拍三变体五跑全同;实现报告=design/qa/iter27-实现报告-2026-10-14.md;残留人闸=实机目检五件〔07 ㉖〕;代拍板追认单十五项+GDD 反哺点两条待用户);**迭代 28=启动装配与生命周期验收补全批 ✅ 已入库**(2026-10-15 用户令编入并预批连做全批,单会话交付:T1 装配语义合同 `LAYER_CONTRACT` 单点化+冒险屏先挂/菜单屏后挂的顺序修复+V1a-d 断言重写/T2 `_smoke_boot_chain` boot 链路十断言/T3 `_smoke_lifecycle_matrix` 九阶段×五引用面/T4 渲染面三件(shot_probe 两自检+shot_checker 墨色判据+启动态菜单 golden)/T5 变异验证六次注入全见红并精确还原/T6 规范三处落文;冒烟 **1086/0→1125/0**(+39=新增 42−退役裸下标断言 3);实现报告=design/qa/iter28-实现报告-2026-10-15.md;残留人闸=实机目检启动态菜单〔07 ㉗〕;代拍板追认单+GDD 反哺点待用户裁决);**迭代 29=测试分层与门禁语义修正批 ✅ 已入库**(2026-10-16 /iter U0 开工单会话交付:T1 三硬闸〔退出码/脚本错误扫描/断言数下限,三反例改前判绿改后判红〕/T2 术语订正+CI 残留 8 处清除/T3 `tests/integration/` 建承载+parity 收编为重闸 11 号条件闸件/T4 `screen_flow_probe` 入轻闸/T5 新增六套单测〔27→33 套〕/T6 S3 路径修正+零命中自检+补 S5/T7 游离脚本台账+golden 判有效/T8 架构事实源三张表回写+06 登记遗留七条;冒烟 1127/0 持平、重闸全绿存量红零新增;实现报告=design/qa/iter29-实现报告-2026-10-16.md;**无用户目检项**;代拍板追认单十二项+GDD 反哺点三条待用户裁决;**遗留:11 号闸 parity 对拍判为触面,需用户批准才发起**);**迭代 30+ 位空·无批次**(原 M4 数值批已废——2026-10-16 用户删卡令「它就不是一个应该存在的东西」,禁止再以该名义立批/规划/引用已删卡;四项数值欠账归 06 在册、重新归属待用户裁)。
- **近期主战场**:迭代 20/21/22/23/24/25/26 残留人闸(实机目检六批,07 在册);**迭代 29 已入库,下一前沿待用户令编入**(迭代 29 收口遗留=11 号闸 parity 对拍待批准发起+GDD 反哺三条待裁;各批 provisional 终值的统一标定义务随 M4 数值批废除归 06 在册、重新归属待裁;迭代 20~28 残留人闸八批 07 在册)。
- **实时状态**:以根目录 [active.md](active.md) 顶部「当前状态快照」节为准(`stage.txt` 已定性为旧阶段开关,仅存档)。
## 主线路线(里程碑 × 迭代序列)
@@ -85,7 +85,7 @@
| 迭代 26 | **①UI 交互与观感批(2026-10-14 用户令编入;UI 美化三层诊断 · 第一层第二/三条+第三层四件;本迭代位预留后续追加卡,同迭代 24 先例)**:需求卡片=`design/research/需求卡片-UI交互与观感批-2026-10-13.md`(**v1.2**——grilling 两轮八裁全落、零待裁点、卡片成立)。六项:**T1 按钮五态矩阵**(悬停=乙案 modulate 提亮〔与 primary_button 现行 `CANDLE.lightened(0.06)` 同纪律〕/禁用=本族底+α0.45 幽灵化/焦点=INK 2px 内缩 1px/危险钮补本族 pressed;走逐实例 override,迭代 25 两条主题红线断言维持不换代)· **T2 全局纹理过滤**(`project.godot` `default_texture_filter=0`+vignette/gradient_base/beams 显式 LINEAR 白名单+翻转面全枚举)· **T3 <4.5:1 换墨**(站桩顺位/护甲徽标换同族亮档+RAP 行 STONE_DEEP,机检断言锚定)· **T4 光柱连续 alpha 渐变**(0→0.05→0 横向+纵向衰减)· **T5 元素细节余②③**(BCard 图标槽明度差降档/商店卡片区垂直居中/营地四栏等高)· **T5b 诊断转储钮移调试浮窗**(`dump_diagnosis` 功能保留)。🔴 契约 5 条(主题层零新增词条/零新美术素材/棋盘零触碰/对比度 ≥4.5:1/旧实现同批清理);验证闸 V1-V7;代拍板白名单八项;反哺点四条;**渲染闸 golden 面处置**=T6 第 4 步(徽标换墨落 board golden 裁剪区:闸红→核热区限预期面→显式重制基线+呈报→复闸,超预期=L3)。**范围订正**(grilling 实查,iter25 滑轨条同款先例):②垫块仅三选一 BCard(商店卡实为纯文字行卡)/③仅商店+营地(三选一已居中)/危险钮「无按下态」订正为「在但皮肤错配」。估时 T0-T6≈2–2.5d | **✅ 已全批入库(2026-10-14 /goal+iter U0 开工单会话交付,worktree g-plan2-iter26-ui 分支 iter26-ui-20261014 七提交)**——T0 基线+枚举(含卡片 §2.2 枚举漏项勘误)/T1 按钮五态(悬停 modulate 提亮/禁用 α0.45 幽灵化/焦点 INK 2px 内缩 1px/危险钮本族按压态)/T2 全局 Nearest+平滑渐变件 LINEAR 白名单/T3 三处换墨(GOLD_BRIGHT/HERO_BLUE_BRIGHT/STONE_DEEP,6.47/5.88/5.98:1)/T4 光柱连续 alpha/T5 图标槽柔和档+商店居中+营地四栏等高/T5b 诊断钮迁调试浮窗;冒烟 987→1055/0(+68 断言)+run_all 25 套+probe click/full+render_gate golden 0.00%(登记即结未重制)+doc 三闸/熵增对基线零新增;MC 零跑(零数值零行为=纯呈现);实现报告=design/qa/iter26-实现报告-2026-10-14.md;残留人闸=实机目检五项(07 ㉕);待用户=代拍板追认单十三项+GDD 反哺点四条 | T0-T6≈2–2.5d(实际单会话) |
| 迭代 27 | **①代码架构技术债修复批(2026-10-14 用户令编入;来源=[代码架构与实现质量审计报告-2026-10-14](design/research/代码架构与实现质量审计报告-2026-10-14.md),双席审计基线 97de02c,已逐条复核)**:需求卡片=`design/research/需求卡片-代码架构技术债修复批-2026-10-14.md`(**v1.2——三点全裁零待裁〔2026-10-14 用户三裁全按推荐案:①第三个 autoload/②单类持四账/③审计五段〕,卡片成立**)。五波:· **波一 场景拆分+局生命周期物化(≈4-5d)**〔P0-1/P0-2:屏容器 .tscn 切分=开始菜单根场景+营地场景+冒险场景〔内含 level_map/battle 两容器〕,视图代码原样搬、**40+ views 不转 .tscn**;SaveManager/MetaProgression 升格跨场景持有者;「一局」物化为可整体 `queue_free()` 的节点,`main.gd:647-657`/`:555-559` 手工清单消亡;13 个 smoke 探针挂载假设同批迁移〕· **波二 `_settle` 拆段(≈1.5d)**〔P1-1:五段 Segment 类 grant/aura/combat/decay/verdict,24 处 kind 分派随段归位,姊妹病灶 `damage_controller.gd:272` 148 行同批拆〕· **波三 账本收口(≈1.5d)**〔P1-4 共享四账 Ledger 类化+P1-2 刷新双账删 main 副本+P1-3 summary 增 `gp_final` 键、删 `gp_shadow_ledger.gd`〕· **波四 组合根可测化抽取+模态协议内聚(≈1.5-2d)**〔P1-5/P2-7;**须在波一落地后重估抽取面再动**〕· **波五 类型闸收尾+卫生件包(≈3d)**〔P1-6 拉闸+存量 73 处收口,**须在其他重构全部落地后**;P2 七组顺手带〕。🔴 契约 6 条(**零行为变更·重构前后同种子完整局输出逐位一致**/只拆不重写/views 不转 .tscn/探针契约零破坏/信号纪律不变/执行顺序锁+渲染零漂移);**核心验收=逐位一致对拍**(RngService 单盐流在役);验证闸 V1-V9;代拍板白名单九项;反馈点两条(architecture/code-conventions)。 | **✅ 已全批入库(2026-10-14 /goal+iter U0 开工单会话交付,worktree g-plan2-iter27-techdebt 分支 iter27-techdebt-20261014 七提交)**——波一 三屏场景化+run_scope 会话物化+双 autoload(7a0d57d)/波二 _settle 五段 Segment+英雄攻击拆步(26301ba)/波三 RunLedger 单类四账+刷新双账删副本+gp_final 删影子账(6fd7d78)/波四 ModalFlow+互斥域 tags+双 context(8b9e556)/波五a 类型闸 368 参数化+审计器+warning 配置(b605022)/波五b 卫生件 13 死代码+FeatsEngine 退役+Callable 换装+状态机 enum 化+ConfigDB 归根+resolver 解耦(T6 笔)/T7 文档同步(本笔)。**闸**:逐位一致对拍三变体五跑全同(V1 核心验收)+冒烟 1055→1081/0(+V2 屏壳 11+V3 两连局 11+V4 段类 16+V6 模态 19+V5 快照 3+V7 2 断言)+run_all 25→27 套+probe click+render golden 0.00%+static_scan S1/S2/S4/S9 全绿(历史 cd 静默空转顺修);MC 对拍=parity_anchor 三变体×40 局×RUNSUM+JSONL 双面(工具入库 tools/parity_anchor.py);实现报告=design/qa/iter27-实现报告-2026-10-14.md(代拍板追认单十五项+GDD 反哺点两条);残留人闸=实机目检五件(07 ㉖);审计报告本体按退役规则 git rm | T0-T7≈12-14d(实际单会话) |
| 迭代 28 | **①启动装配与生命周期验收补全批(2026-10-15 用户令编入)**:需求卡片=design/research/需求卡片-启动装配与生命周期验收补全批-2026-10-15.md(v1.0——零待裁点,用户预批连做全批)。六任务:T1 装配语义合同单点化+装配顺序修复+V2 断言重写/T2 boot 链路时序后置条件(_smoke_boot_chain 六断言)/T3 生命周期存活性矩阵(_smoke_lifecycle_matrix 十阶段×五引用面)/T4 渲染面内容断言(shot_probe 两自检+shot_checker 墨色占比+启动态菜单 golden)/T5 变异验证(横切随批)/T6 规范落文+文档同步闸+收口;修复坏事实三件(main.gd:207-210 装配序错致 F5 见战斗界面、smoke_all.gd:176 V2 断言保护 bug、菜单截图无内容断言)。🔴 契约 7 条(零玩法行为变更/合同单点化/断言禁裸下标/测试先行/变异验证门槛/只加不重构/闸机轮次纪律) | ✅ 已入库(2026-10-15 单会话交付:T0-T6 全绿;冒烟 1125/0、run_all 全套、probe_gate --click/--full、render_gate 四闸全绿;变异验证六次注入全见红;实现报告=design/qa/iter28-实现报告-2026-10-15.md;残留人闸=实机目检启动态菜单〔07 ㉗〕) | 实耗≈1 会话(原估 T0-T6≈5.25d) |
| 迭代 29 | **①测试分层与门禁语义修正批(2026-10-16 用户令编入)**:把验收语义从「跑一遍没崩=冒烟通过」扭转为「**三层完备+判定可靠**」——兑现用户三条诉求(①最单元的逻辑代码有单元测试 ②整体模块有接口测试 ③整体系统有 UI 方面与场景切换相关的测试)且验收不止于冒烟。四件事:**①本地闸三硬闸**(退出码为唯一权威判据·PASS 串降级为日志;`SCRIPT ERROR`/`Parse Error` 扫描命中即红;断言数为零即红——`probe_gate.sh` 四探针判定改退出码优先、`test_kit.finish` 零断言判红、`run_all` 汇总校验实跑套件数,全部反例实证留档);**②L2 接口层从零建承载**(建 `game/tests/integration/`+`parity_anchor` 收编入闸表+存档⇄RNG 快照往返首个集成用例);**③L3 屏壳切换探针**(新建 `screen_flow_probe`:六步主流程+三屏壳 `visible` 互斥+放弃回退路径,入轻闸);**④L1 补洞+术语订正+状态记录清理**(4 个 core 零指名模块+呈现层风险前三补单测;「冒烟」唯一保留语义=秒级存活检查;15 个游离脚本逐个定性、golden 基线时效判定、补 S5 扫描规则)。🔴 契约 7 条(零玩法行为变更/三硬闸不可绕过/现有断言面只增不减/不引入第三方测试框架/架构事实唯一源=architecture.md/探针契约零破坏/测试执行两入口铁规);验证闸 V1–V11;代拍板白名单 10 项;**无用户目检项(纯基建)**。需求卡片=`design/research/需求卡片-测试分层与门禁语义修正批-2026-10-15.md`(**v1.4**——v1.1 CI 从未通电/v1.2 CI 全删后 T1 主体改本地闸/v1.3 排期定迭代 29+§0 串行裁决(iter28 入库后开工)/v1.4 随决策文档体系废除改契约 5 口径;T0–T8≈5.5–7d)。**⚠ 卡片事实基线待 v2.0 重核**:v1.4 冻结于 iter28 入库前(冒烟 1086/0·run_all 27 套·探针 11),master 当期=冒烟 1125/0+`tools/run_all_gates.sh` 重闸编排另立(轻闸=`run_all_gates.sh --quick`)+architecture.md「测试与质量域」节已成文——U0 须先重核升版再开工 | 迭代 28 出口(✅ 已满足——2026-10-15 已入库)+**U0 开工门**:Q3–Q7 五项裁点全落+卡片 v2.0 重核+用户 `/iter` 发令(Q1 已闭环·Q2 已作废) | T0–T8≈5.5–7d(软盒 7d;天然切分点 T1 末/T4 末,超盒拆两批) |
| 迭代 29 | **①测试分层与门禁语义修正批(2026-10-16 用户令编入)**:把验收语义从「跑一遍没崩=冒烟通过」扭转为「**三层完备+判定可靠**」——兑现用户三条诉求(①最单元的逻辑代码有单元测试 ②整体模块有接口测试 ③整体系统有 UI 方面与场景切换相关的测试)且验收不止于冒烟。四件事:**①本地闸三硬闸**(退出码为唯一权威判据·PASS 串降级为日志;`SCRIPT ERROR`/`Parse Error` 扫描命中即红;断言数为零即红——`probe_gate.sh` 四探针判定改退出码优先、`test_kit.finish` 零断言判红、`run_all` 汇总校验实跑套件数,全部反例实证留档);**②L2 接口层从零建承载**(建 `game/tests/integration/`+`parity_anchor` 收编入闸表+存档⇄RNG 快照往返首个集成用例);**③L3 屏壳切换探针**(新建 `screen_flow_probe`:六步主流程+三屏壳 `visible` 互斥+放弃回退路径,入轻闸);**④L1 补洞+术语订正+状态记录清理**(4 个 core 零指名模块+呈现层风险前三补单测;「冒烟」唯一保留语义=秒级存活检查;15 个游离脚本逐个定性、golden 基线时效判定、补 S5 扫描规则)。🔴 契约 7 条(零玩法行为变更/三硬闸不可绕过/现有断言面只增不减/不引入第三方测试框架/架构事实唯一源=architecture.md/探针契约零破坏/测试执行两入口铁规);验证闸 V1–V11;代拍板白名单 10 项;**无用户目检项(纯基建)**。需求卡片=`design/research/需求卡片-测试分层与门禁语义修正批-2026-10-15.md`(**v2.0**——三轮复查定稿、零待裁点;§2 事实用例改指针归 architecture.md「测试与质量域」节,T2 吸收 CI 残留 8 处,T6 收 S3 路径修正+零命中自检,T5 补洞选面换 board_generator;T0–T8≈6.0–7.5d) | ✅ 已入库(2026-10-16 /iter U0 发令;八提交 `698d864d`…`c3b64030`,worktree `g-plan2-iter29-testlayers`,分支 `iter29-testlayers-20261016`;重闸全绿、存量红零新增) | 实耗≈1 会话(原估 T0–T8≈6.0–7.5d) |
| 迭代 30+ | **(位空·无批次——原「M4 数值批」已废)**:2026-10-16 用户令删除需求卡片(原话「它就不是一个应该存在的东西」)⇒ **禁止再以「M4 数值批」名义立批、再规划、再引用已删卡片**。四件数值欠账本身仍在册——①削弱档位终值 ②调参批数值点评(06 条目现行五条)③钥石产出重标+通关率带重扫(迭代 10 奖励重构联动欠账)④元进度定价剩余面(forge 定价·Boss 两档终值)——连同各批 provisional 终值标定义务,**一律归 `design/gdd/06-待办清单.md` 跟踪,重新归属待用户裁**;随批读数义务(迭代 14 两件后置复算)仍挂 07,damage_probe A1 既有红灯在册。M4=Beta 阶段口径不变(M3 未由用户明令关闭前不排期);本迭代位留空待用户令编入 | 用户发令编入(未排期) | —— |
## 执行纪律(2026-09-27 用户立规)