写卡段(可推理率退役批): 需求卡片 reports/需求卡片-可推理率退役批-2026-11-09.md 成文并成立——设计事实源=棋盘生成 v1.4;T1 代码退役(求解器/质量重试/三分出口/成本闸/min_safe/R₀上限闸+表五列+标记与诚实告知)·T2 求解器迁 sim(新增 SimInferabilityMeasure 件+四件改指)·T3 产出物落位;验收对照表 V1–V7 判据绑指标键集/reroll_count/errs 集/白给夹具(N=2 形态);对抗复核一轮 8 发现全处置(5 补写+3 自判,记录在卡 §16,复核凭据=节自身·2026-11-06 裁不另设报告文件);能力表两新行+七槽括注+覆盖域表行同批落(写卡段维护面)。待办清单:退役条目推进「文档设计已闭合+已写卡」,QQ-13 随降级出口退役由用户令整条删除。区内凭据: 流水线闸对象零红(余 1 红=调试角标条状态词存量旧格式,属并行直改批收口面,与本次对象无关);文档域闸能力审计绿、对基线零新增。合回前置检查读数见 pre-merge 钩子; post-merge 钩子推送触发远端 CI。

This commit is contained in:
DKChan committed 2026-11-09 06:47:48 +08:00
1 parent 5c9d8845f3
commit 671a94f7f3
3 files changed
+200 -12

No files matched your search

+4 -3
View File
@@ -112,7 +112,8 @@ tests/
| 棋盘按参数行出图、数字恒真 | 棋盘生成 | `BoardGenerator.generate()` | `board_generator_test.gd:_test_generate_shape_and_mines`;`board_generator_test.gd:_test_digits_equal_neighbor_mine_count`;`board_generator_test.gd:_test_spawn_edge_from_table` |
| 出生区边长表单点(布雷域基/R₀ 下限/剃雷域半径全由 spawn_edge 导出) | 棋盘生成 | `BoardGenerator.generate()`/`BoardGenTable.validate()` | `board_generator_test.gd:_test_spawn_edge_from_table` |
| 同参数同种子逐位复现、异种子不退化 | 棋盘生成 | `BoardGenerator.generate()` | `board_generator_test.gd:_test_same_seed_bit_identical`;`board_gen_reward_test.gd:_smoke_board_generator` |
| 可推理率与清图可达(合法性先于质量分)、重试有界、降级诚实 | 棋盘生成 | `BoardGenerator.measure_inferability()`/`BoardGenerator.is_clearable()` | `board_generator_test.gd:_test_clearable_and_inferability_selfconsistent`;`board_generator_test.gd:_test_target_mine_count_single_source`;`board_gen_reward_test.gd:_smoke_board_generator` |
| 出板检查(出生区无雷/开局不全开、白给板同流重摇、指标集换代) | 棋盘生成 | `BoardGenerator.generate()` | `board_generator_test.gd:_test_board_check_and_reroll`(计划——需求卡片「可推理率退役批」2026-11-09 锚定);`board_gen_reward_test.gd:_smoke_board_generator`(键集断言段) |
| 棋盘可推理率离线测量(仅 sim,不入生成管线) | 棋盘生成 | `SimInferabilityMeasure.measure()`(类计划——本卡 T2 落件;经 `res://sim/calibrate_boards.gd` 缩样直跑消费) | `inferability_measure.gd:measure`(工具直跑读数——登记进实现报告,不进闸)(计划——需求卡片「可推理率退役批」2026-11-09 锚定) |
| 装板与开局免费展开(封锁格无资源、计入清图) | 排雷玩法 | `MinesweeperRules.install_board()` | `minesweeper_rules_test.gd:_test_install_invariants`;`seal_polarity_test.gd:_smoke_resource_surface` |
| 挖/封印合法性与可辨拒绝(拒绝零副作用、挖封印格被拒) | 排雷玩法 | `MinesweeperRules.settle_batch()` | `minesweeper_rules_test.gd:_test_dig_face_rules`;`minesweeper_rules_test.gd:_test_seal_place`;`minesweeper_rules_test.gd:_test_reject_out_of_catalog`;`minesweeper_rules_test.gd:_test_dig_sealed_rejected`;`minesweeper_rules_test.gd:_test_classify_seal_clears`(计划——需求卡片「封印动作改版批」2026-11-07 锚定) |
| 棋盘揭示预览只读口(零状态写入/与实挖揭示集同口径) | 排雷玩法 | `MinesweeperRules.preview_reveal()` | `minesweeper_rules_test.gd:_test_preview_reveal_readonly` |
@@ -195,7 +196,7 @@ tests/
| 运行期越域致命与进程非 0 退出 | 数据配置 | `BoardGenTable.resolve_row()`/`ConfigDbResolver.resolve_enemy_rowset()` | `config_db_fatal_oob_test.gd:_trigger_oob`;`config_db_resolver_test.gd:_test_request_oob` |
| 加载期违规表拒绝:跨表悬空/计数器前缀/真视窄域/效果类型出域 | 数据配置×秘宝×奇物 | `ConfigDB.load_tables()` | `reward_dangling_treasure_test.gd:_init`;`counter_prefix_fatal_test.gd:_assert_rejected`;`treasure_target_violation_test.gd:_init`;`effect_kind_retired_test.gd:_assert_rejected`;`extended_row_violation_test.gd:_init` |
| 表结构守卫:域校验/行序键/跨字段互锁/配额锚 | 数据配置×敌人系统×地形变异×冒险结构 | `EnemyTable.validate()`/`VariationTable.variant_pool()`/`AdventureTable.validate()` | `table_structure_guard_test.gd:_smoke_enemy_bands`;`table_structure_guard_test.gd:_smoke_variation_framework`;`table_structure_guard_test.gd:_smoke_adventure_table`;`table_structure_guard_test.gd:_test_feat_cap_required` |
| schema 违约词拒绝路径与关键表值钉(空表/冻结/出域/白名单/settlement 钉/cap 段七槽钉) | 数据配置×战斗结算 | 各表 schema `validate()` 直调注入坏行(`BoardGenTable.validate()` 同款面)/表行读值 | `schema_vocab_violation_test.gd:_check_empty_tables`;`table_structure_guard_test.gd:_check_settlement_pin_values`;`table_structure_guard_test.gd:_check_curio_cap_segment_pins`(计划——需求卡片「QA覆盖余量收口批」2026-11-07 锚定) |
| schema 违约词拒绝路径与关键表值钉(空表/出域/白名单/settlement 钉/cap 段七槽钉+退役列零违例钉) | 数据配置×战斗结算 | 各表 schema `validate()` 直调注入坏行(`BoardGenTable.validate()` 同款面)/表行读值 | `schema_vocab_violation_test.gd:_check_empty_tables`;`table_structure_guard_test.gd:_check_settlement_pin_values`;`table_structure_guard_test.gd:_check_curio_cap_segment_pins`(计划——需求卡片「QA覆盖余量收口批」2026-11-07 锚定) |
| 变异表头域校验(地形变异) | 地形变异 | `VariationTable.validate()` | `table_structure_guard_test.gd:_test_variation_header_domains` |
| 难度修饰套乘:空表零行为/套乘生效/越域 clamp | 难度曲线与Boss | `UnitContainer.spawn()`/`ConfigDbResolver.resolve_difficulty_modifiers()` | `table_structure_guard_test.gd:_smoke_difficulty_table`;`config_db_resolver_test.gd:_test_difficulty_clamp` |
| Boss 出场门控(每区域恰一 Boss 终点/Boss 节点开战必选 Boss 行集) | 难度曲线与Boss | `NodeMapGenerator.generate()`/`BattleOrchestrator.begin_battle()` | `node_map_generator_test.gd:_test_boss_exit_per_region`;`boss_gate_test.gd:_test_boss_node_spawns_boss_rowset` |
@@ -225,7 +226,7 @@ tests/
| 战斗循环 | 敌人系统.md | 技能池数据面与回放独立;Boss 半血解锁技门控;敌人技能池跨表链接校验;精英行:池继承合并、加载期校验与暂不接线 | 部分覆盖 | 精英行「开战快照拿到合并后池」随接线批验收;见待办清单「战斗节点遭遇编排方式」条 |
| 排雷循环 | 地形变异.md | 变异布置门控;表结构守卫:域校验/行序键/跨字段互锁/配额锚 | 已覆盖 | — |
| 排雷循环 | 排雷玩法.md | 装板与开局免费展开(封锁格无资源、计入清图);挖/封印合法性与可辨拒绝(拒绝零副作用、挖封印格被拒);封印受理即揭示(身份可查、受理零事件);清图口径换代(挖开∪封印、封印可完成清图) | 已覆盖 | — |
| 排雷循环 | 棋盘生成.md | 棋盘按参数行出图、数字恒真;同参数同种子逐位复现、异种子不退化;可推理率与清图可达(合法性先于质量分)、重试有界、降级诚实 | 已覆盖 | — |
| 排雷循环 | 棋盘生成.md | 棋盘按参数行出图、数字恒真;同参数同种子逐位复现、异种子不退化;出板检查(出生区无雷/开局不全开、白给板同流重摇、指标集换代);棋盘可推理率离线测量(仅 sim,不入生成管线) | 已覆盖 | — |
| 排雷循环 | 行动经济.md | AP 扣费、末点耗尽即收轮与战斗收束清零;停手转存储备与轮内刷新(上限/AP 不重置/刷新图零清图奖励);下轮行动点修正排队与兑现 | 已覆盖 | — |
| 表现与支撑 | HUD框架.md | 拒绝反馈分面可辨与未知兜底文案;结算期零逐行文字与 FX 排播链保持;模态覆盖层编排与输入锁;未开格类型微光(8 邻作用集、五组色相、零玩法写入);UI 全局主题与按钮五态(含对比度锚);中文字体随包与字形覆盖;地形瓦片套与格面数字可读(旧行保留,删行归写卡段后续,实现批禁写);棋盘合并岩体与连续地面(深度遮挡、投影、崖面);棋盘浮空数字与引导线(最顶层、顶部预留);D 区行动资源侧栏(AP 左栏、RAP 右栏、全高棋盘);棋盘点击命中与格边公式(逻辑格矩形);旧瓦片退役与普通数字零底牌;棋盘顶面锚点与迷雾几何(微光、变异岩顶偏移,封印格心);战斗叙述与终局文案(数值带入/胜负互异);玩家面文案与危险格格面字形;战斗屏三区几何与棋盘格边长(分辨率两档×四档板型);B 区舞台背景三关变体与连续地面层(按 board_type 选图/地面层高度读布局表/四柱光柱退役);模态句柄分域寻址面 | 已覆盖 | — |
| 表现与支撑 | 存档序列化.md | 存档写盘⇄读回往返保真;三槽位隔离与激活失败回滚;槽位摘要窥视与坏槽三态;启动态无激活不写盘;旧档迁移链与断点续玩零跳号;存档⇄RNG 快照往返保真 | 已覆盖 | — |
@@ -0,0 +1,194 @@
# 需求卡片——可推理率退役批
> 来源:待办清单「可推理率承诺与生成-验证-重试管线退役」条目(唯一事实源:design/gdd/systems/排雷循环/棋盘生成.md v1.4 §核心规则「四阶段管线/出生区安全与反退化布雷/不做质量承诺」+§调参表+§验收标准)
> 验收档:高(数值表结构校验与棋盘生成随机流消费在改动面上——失败代价随同种子复现承诺与表加载传播)
> 估时:1.25–2.0 个工作日(中值 1.625);超 2.0 日软盒预挂=T1 白给板夹具构造不出(见 L3)时停机呈报,不扩面自救
## 1. 目标与完成定义
把「生成端担保好推理」整套机制从游戏里拆掉:删除可推理率求解器、质量重试、三分出口降级、成本闸与四个配套表字段,出板只查两件事——出生区无雷、开局不全开(白给板同流重摇);产品标记与诚实告知随之退役;推理度量程序迁到 sim 只留离线测量。
完成定义:
- V1–V7 验收行全部在真实跑批中执行并通过;N1 非行为改动行写明判断依据;生产表加载零新增 error。
- `game/core`、`game/data`、`game/presentation`、`game/tests/unit` 四目录(.gd/.tres)内,退役标识符带引号键形 `"inferability_target"|"solver_rules"|"min_safe_count"|"max_gen_attempts"|"r0_max_cap"` 与裸名 `inferability|is_clearable|measure_inferability|COST_BUDGET|illegal_product|degraded_product|accept_mode` 零命中;sim 侧合法在场止于 `inferability_measure.gd` 与其消费件(tres 历史注记裸名不算命中——键形口径)。
- 代码域闸按改动域选档全绿;独立验收审计(高档)通过;reports/ 两份产出物落齐;能力表退役行删除、新增行在场。
## 2. 设计事实源
design/gdd/systems/排雷循环/棋盘生成.md v1.4:
- :58 管线第三步「只查两条:出生区无雷、开局不全开;白给板同流重摇,直到不全开」。
- :71 失败语义「开局白给板→同流重摇——这是唯一的重摇理由」。
- :98 「数字恒真是布雷算法的本分……不设运行期检查——算错了是算法缺陷,修算法,不是加检查」。
- :100–:102 「不做质量承诺」节:不度量、不筛选;求解器只保留在离线模拟测量(MC 批量模拟),不参与生成管线。
- :152–:162 调参表(inferability_target/solver_rules/min_safe_count/max_gen_attempts/r0_max_cap 五行已不在场)。
- :164 结构冻结句「出板检查只两条(出生区无雷、开局不全开)」。
- :168–:176 验收标准(确定性复现、重摇同流、指标集口径)。
背景(非实现依据):行动经济 v1.8 锚句删除、秘宝 v1.4 ι 公式删除——两文档代码消费面查实为零(本批不动其代码)。
## 3. 现状事实(开工自行复核)
- 质量重试与三分出口:`game/core/board_generator.gd:55` `_attempt_loop`(达标即出/接受最优/接受最不坏)、`:88` `_accept_fallback`、`:413` `_badness`(不可达数+min_safe 缺口字典序)。
- 求解器与度量:`:177` `measure_inferability` +算子族 `:206–:310`(连锁/single/subset 派生/约束构造)。
- 合法性检查:`:342` `_legality_faults` 含 inv1 出生区雷、inv2a/2b 变异域、inv3 数字恒真、inv4 R₀=S、not_clearable(`:315` `is_clearable`)、min_safe_short(`:365`)、r0_cap_exceeded(`:371`)。
- 指标集:`:387` `_finalize` 输出 inferability/accept_mode/degraded_product/illegal_product/attempts_used/r0_cap_rejected 等键;`game/core/board_data.gd:21–22` `illegal_product`/`degraded_product`。
- schema 校验:`game/data/schemas/board_gen_table.gd:9–11` `SOLVER_RULES`/`COST_BUDGET`/`TARGET_ABS_FLOOR` 常量、`:54–60` target 域+solver 冻结、`:73–78` min_safe/attempts 域、`:83–88` F2b 可行/F2c 成本、`:96–113` `_validate_shave_params`(shave 域与 r0_cap 护栏混装一函数)。
- 表:`game/data/tables/board_gen.tres` 31 行 × inferability_target/solver_rules/min_safe_count/max_gen_attempts/r0_max_cap 五列(带引号键形 93+ 处在行值;文件尾注散句提及 min_safe/attempts 属历史数据注记,非列定义)。
- 诚实告知:`game/presentation/main.gd:481–493`(节头注+`check_board_hints` 两 toast,illegal/degraded),调用点 `main.gd:467`、`game/presentation/main_debug_flow.gd:107`。
- 公有面消费:`legality()` 全仓消费点仅 `game/tests/unit/core/board_gen_reward_test.gd:177`(随 1.5 删组消亡),`measure_inferability()` 仅 `board_generator_test.gd:132`(同上)——core 内可一并删公有签名。
- sim 消费:`game/sim/calibrate_boards.gd:40–45` 读五列快照、`:65` 统计 `metrics.inferability`;`game/sim/dump_battle.gd:26` 打印该键;`game/sim/board_stat_probe.gd:43` `illegal_product` 分支;`game/sim/auto_player.gd:114–217` 自带推理族(接口绑 minesweeper 运行时隐藏态,与整板生成侧口径两套),`:80` 注释引用「棋盘生成 F1 measure_inferability 同族」。
- 测试:`game/tests/unit/core/board_generator_test.gd:27/:126–140` 可清图与及格线自洽套件、`:164–171` 表头域校验④(r0_max_cap=9 拒)、夹具行 `:166–169` 含五列;`game/tests/unit/core/board_gen_reward_test.gd:176–196` clearable/legality/及格线/降级标记/attempts 有界断言组、`:209–225` cap 闸组与压线组;`game/tests/unit/schema_vocab_violation_test.gd:135–152` ⑥ solver_rules 冻结拒域(`:34` 调用、`:5` 头注)。
- 能力表:写卡段同批已落——README :115/:116 两新行(出板检查/离线测量)替换原「可推理率与清图可达、重试有界、降级诚实」行、:229 口径行换代;余下 :199「schema 违约词拒绝路径」行的括注「空表/冻结/出域/…七槽钉」含 ⑥ 冻结槽,随 ⑥ 改写须换口径(本批同落,见 §6)。
## 4. 设计契约(违反即返工,🔴 触碰=L3 停机呈报)
- 🔴 C1 出板检查恒两条:出生区无雷 ∧ R₀≠S(开局不全开)。不得保留或新增数字恒真/变异域/清图可达/min_safe/R₀≤cap 任何一条运行期检查(棋盘生成 v1.4 :164)。
- 🔴 C2 重摇只消费本图 board_gen 单流、不开新流、不设次数上限与成本闸(:58/:71/:172);同种子必产同图承诺不破坏(:168)。
- 🔴 C3 求解器在 `game/core/`、`game/data/`、`game/presentation/`、`game/tests/` 零残留;测量形态只许存在于 `game/sim/`(:102)。
- 🔴 C4 玩法数值仍只经 ConfigDB 表行读取;退役字段禁在代码里以任何默认值续命(缺列即不存在,不写 `.get(key, 0)` 兜底)。
- 🔴 C5 本批禁变异类测试与撤销类取证(AGENTS.md 验收闭合红线);不可达分支的退役按静态判据+申报(见 V5)。
## 5. 范围边界
做:§3 全部消费面的删除/重写/迁移;测试断言换代与删组申报;能力表行换代(写卡段已落,实现批核对名实)。
不做(去向):
- 黄金图向量重制(v1.4 :174)——盘上无登记向量件,属 P1 调参期批量断言工具面(棋盘生成.md:147),随该批走。
- MC 档位重跑与数值重锚——v1.4 管线换代后旧读数作废,重跑归数值标定窗口(用户发令),本批只跑工具缩样冒烟证明不崩。
- 体验验证清单实机目检登记——出板观感(白给板频率)变化归用户试玩面。
- auto_player 策略改动——其推理族自含且属 MC 测量面(裁点 C 保留),本批只改 `:80` 注释引用(N1 非行为改动)。
## 6. 关联文档同步面
| 文档 | 关联点 | 同步义务 |
|---|---|---|
| design/gdd/systems/排雷循环/棋盘生成.md v1.4 | 实现口径应与文档一致 | 无直改义务(文档批已落现行);实现发现口径不符=停卡退回文档设计段,禁实现批写 design/ |
| game/tests/README.md 能力表 | 行换代+:199 括注口径(⑥ 冻结槽措辞随改写更新) | 写卡段同批已落(本卡成立时生效);实现批批末只核对表上名字与落地一致,改名回表 |
| design/gdd/术语表.md | 「盲赌」行不涉退役机制 | 无 |
| 根两份流程清单 | 待办清单条目状态推进归本卡写作批;体验验证清单 v1.4 文档批已改 | 实现批禁写,若有新出入列 reports/iterN-反哺点 清单由用户裁决 |
## 7. 文件结构图(卡前定分解)
| 文件 | 职责 | 行为改动 |
|---|---|---|
| game/core/board_generator.gd | 确定性布雷+两条出板检查(重写后全文≤百行量级) | 是→V1/V2/V3 |
| game/core/board_data.gd | 删除两标记字段 | 是→V5 |
| game/data/schemas/board_gen_table.gd | 参数域校验(退役块删除) | 是→V4 |
| game/data/tables/board_gen.tres | 数据行(五列删除) | 是→V4 |
| game/presentation/main.gd | 删除 check_board_hints 与调用点 | 是→V5 |
| game/presentation/main_debug_flow.gd | 删除调用点 | 是→V5 |
| game/sim/inferability_measure.gd | 生成侧口径整板可推理率离线测量(新增,迁入件) | 是(工具面)→V6 |
| game/sim/calibrate_boards.gd | 批量测量驱动(改读法与统计源) | 是(工具面)→V6 |
| game/sim/dump_battle.gd | 单板指标打印(换键) | 非行为(闸外工具)→V6 |
| game/sim/board_stat_probe.gd | 统计口径(删 illegal 分支) | 非行为(闸外工具)→V6 |
| game/sim/auto_player.gd | :80 注释改指 sim 新落点 | 否(N1 非行为改动——判定依据:仅注释文本,函数体零改动) |
| game/tests/unit/core/board_generator_test.gd | 套件换代(删两组、新增出板检查套件、夹具去列) | 是→V1/V4 |
| game/tests/unit/core/board_gen_reward_test.gd | 冒烟段断言换代 | 是→V3 |
| game/tests/unit/schema_vocab_violation_test.gd | 删 ⑥ 域 | 是→V4 |
| reports/iterN-实现报告/反哺点(N 编排定) | 产出物 | 落位卡 |
## 8. 任务卡 T0..Tn
### T1 代码面退役与测试换代(估 0.75–1.25 日)
取用:无(首发卡)。
产出:`BoardGenerator.generate(L, D, rng_stream, db) -> BoardData` 签名不变;metrics 键集={metric_version, ring_removed, actual_mines, target_mines, actual_safe_count, reroll_count, r0_count};私有 `_board_check(b: BoardData) -> bool`。
- [ ] 1.1 `board_gen_table.gd`:删 `:9–11` 三常量;删 `:54–60`(target 域+solver 冻结);`:73–78` 删 ms/att 两段;`:83–88` 删 F2b/F2c 两段;`_validate_shave_params` 更名语义收窄——保留 shave 域校验(`:103–105`),删 r0_cap 段(`:106–112`);头注同步(删「solver_rules 结构冻结」句)。
- [ ] 1.2 `board_gen.tres`:31 行删五列键值对(带引号键形);表头 spawn_edge 与其余列原样;文件尾历史注记散句不动(非列定义,完成定义 grep 按键形口径不命中)。
- [ ] 1.3 `board_generator.gd`:删 `measure_inferability` 与算子族(`:174–310`)、`is_clearable`(`:313–334`)、`_badness`/`_lex_less`(`:412–444`)、`_accept_fallback`(`:87–95`);`_attempt_loop` 重写为:循环「`_attempt` 布雷 → `_board_check`」,违例同流下一轮,通过即出;`_board_check`=出生 3×3 无雷 ∧ `compute_r0().size() != safe_cells().size()`(inv1/inv4 语义照旧、判据函数保留复用,见 §13);`_legality_faults` 收缩删除(inv2a/2b、inv3、not_clearable、min_safe_short、r0_cap_exceeded 全删);`legality()` 公有面删除(消费点仅测试,随 1.5 清);`_finalize` 键集换代:`attempts_used`→`reroll_count`(值=循环轮数),删 inferability/accept_mode/degraded_product/illegal_product/r0_cap_rejected 五键,`METRIC_VERSION` 1→2;`:41–44/:49` params 快照删 target/solver_rules/min_safe/max_attempts/r0_cap 五键;头注改「确定性布雷+两条出板检查」。
- [ ] 1.4 `board_data.gd:21–22` 删两 var;`main.gd` 删 `:467` 调用与 `:481–493`(节头注+check_board_hints 整函数)、`main_debug_flow.gd` 删 `:107` 调用。
- [ ] 1.5 测试换代(删除按语句界,不按行号区间硬切):
- `board_generator_test.gd`:删 `_test_clearable_and_inferability_selfconsistent` 整函数(含函数头注)与 `_init` 里的调用行;删 `_test_spawn_edge_from_table` 中「④ 表头域校验 r0_max_cap=9 拒」子段(注释行+夹具 row dict+该 Kit.check),保留 V8 纯函数/几何/真路径三段;夹具 row dict 去五列键。新增 `_test_board_check_and_reroll`——判据:真表行出图出生格集与雷集交集空 ∧ `int(b.metrics.r0_count) < b.safe_cells().size()` ∧ 五退役键 `metrics.has()` 全 false ∧ `int(metrics.reroll_count) >= 1`;白给板触发段=夹具行 8×8、`mine_density` 取使 N=2 的值(双雷相邻可隔离板角数字格——N=1 时该尺寸全部出图恒白给,重摇不退出,禁用作夹具)、种子从 1 起序至 500 找自然 R₀=S 的触发种子,断言该种子出图 `reroll_count >= 2` 且出图非全开;同段补同种子两次生成 `reroll_count` 相等断言(重摇路径确定性)(找不到触发种子=L3-②)。
- `board_gen_reward_test.gd:_smoke_board_generator`:整句删「clearable 断言+legality 全过断言」两句;删「var inf/var mode/实测 print 两句/出图验收注释两句/inferability≥target 断言」整块;删「三分出口表降级标记断言+degraded 等式断言+illegal 等式断言+非法产物=false 断言」四句组;删「attempts_used 有界断言」一句;删「初始展开收窄注释块(①–④)+cap_val/spawn_cells_n 变量定义+r0_max_cap 投值断言+R₀≤cap 结构断言+r0_cap_rejected 在位断言+row9 夹具至其两句压线断言」整段;保留产物非空、零变异、雷数≤N 断言、ring_removed 域断言(其读 shave_ring_radius 合法)、同种子/异种子段。新增 metrics 键集断言(§8 产出键集逐项 has 真、五退役键 has 假)。
- `schema_vocab_violation_test.gd`:`_check_solver_frozen` 整函数(含节头注)改写为 `_check_vocab_retired_fields`——夹具行注入 `inferability_target = 0.5`(原越域值)与 `solver_rules = "single"`(原冻结拒值)→ 各自 `validate()` 零该类违例,判据绑「注入前后 errs 集相同」;`_init` 调用行与头注 `:5` 的 ⑥ 说明同步改写。
- 判据出处注记随新断言重锚 v1.4 行号(:58/:164/:171–:172)。
- [ ] 1.6 改完即测:单元全套直跑 `…console.exe --headless --path . --script res://tests/run_all.gd` 绿;冒烟直跑 `python tools/run_smoke.py` 绿;读数写进 T1 提交信息。
- 里程碑出口:T1 尾跑一次 `tools/run_all_gates.sh --code`(改动含 game/ 非 .md=代码域档)。
### T2 求解器迁 sim(估 0.25–0.5 日)
取用:T1 产出=`BoardData` API(`safe_cells()/compute_r0()/digits/mines` 零改动);`game/core/board_generator.gd` 已不含算子。
产出:`class_name SimInferabilityMeasure`,`static func measure(b: BoardData) -> Dictionary` 返回 {r0, r_inf_count, inferability}(键与原 core 件逐字一致)。
- [ ] 2.1 新增 `game/sim/inferability_measure.gd`:`board_generator.gd:177–310` 族逐函数原样迁入(measure_inferability→measure,算子族与约束构造私有 static),语义零变化——`tools/gdstyle_baseline.txt` 无该族条目级源键(登记面为类/文件级),对账口径=新件建档键+原文件键随删除收缩;迁入后逐函数自查 branches ≤8/returns ≤6 默认档,超限即拆(拆分不改语义)。
- [ ] 2.2 `calibrate_boards.gd`:`:40–45` 行快照 rd 字典删五列读取;`:65` 改 `SimInferabilityMeasure.measure(b).inferability`(inf_mean 列保留换源);删 `cap_rej_mean` 列头与读数项(r0_cap_rejected 指标退役)。
- [ ] 2.3 `dump_battle.gd:26` 打印行改 `reroll_count`(不再打印 inferability)。`board_stat_probe.gd:43` 删 illegal_product 过滤分支,统计口径改全样本。`auto_player.gd:80` 注释改「与 sim/inferability_measure.gd 同族」。
- [ ] 2.4 工具缩样冒烟直跑:`…console.exe --headless --path . --script res://sim/calibrate_boards.gd`(参数取脚本头注最小档)——判据=退出码 0、stdout 出分布读数行、零 error;读数进实现报告。触到 MC 档位表口径=L3 停,禁扩跑。
### T3 产出物落位卡(估 0.25 日)
取用:T1/T2 全部读数与提交信息。
产出:`reports/iterN-实现报告-<日期>.md`(各卡状态+实机目检总清单一行「白给板出板观感——登记不阻塞」+遗留读数义务=MC 重锚归数值窗口+实现决定记录=§11 触用项);`reports/iterN-反哺点-<日期>.md`(预期零条目,实现中发现的文档出入逐条列)。
- [ ] 3.1 两份产出物写齐。
- [ ] 3.2 能力表核对:README 本卡新行代表用例名与实际测试函数逐字一致;`_smoke_board_generator` 等改名则回表。
- [ ] 3.3 独立验收审计入口申报:`reports/iterN-验收审计-<日期>.md`(高档全量审计,审计方未参与实现,test-conventions §8.7)。
- [ ] 3.4 全绿出口=代码域闸(T1 尾同一档)零新增红+§1 完成定义 grep 判据过,方进收口。
## 9. 验证闸(改动—验收对照表)
| 需求点(判据出处锚) | 改动(文件:行/行为) | 验收测试(名称+落点) | 层级 | 真实入口 | 判据绑定面 | 能力行 |
|---|---|---|---|---|---|---|
| R1 出板检查只两条+白给重摇(design/gdd/systems/排雷循环/棋盘生成.md:58、:171) | board_generator.gd `_attempt_loop` 重写、`_board_check` 新增 | `board_generator_test.gd:_test_board_check_and_reroll`(T1 1.5) | 单元 | `BoardGenerator.generate()`+单元夹具流(现件 `:31 _stream`) | 出图出生格∩雷=空、r0_count<安全格数、reroll_count≥1(白给夹具≥2) | 新增:出板检查(出生区无雷/开局不全开、白给板同流重摇、指标集换代) |
| R1 重摇同流与确定性(design/gdd/systems/排雷循环/棋盘生成.md:168、design/gdd/systems/排雷循环/棋盘生成.md:172) | 重摇不开新流;attempts_used→reroll_count | 既有 `_test_same_seed_bit_identical`+`_test_board_check_and_reroll` 同种子 reroll_count 相等段+`board_gen_reward_test.gd:_smoke_board_generator` 同种子段 | 单元 | 同上 | mines/digits 逐位相等+reroll_count 相等 | 既有:同参数同种子逐位复现、异种子不退化 |
| R1 指标集键集换代(design/gdd/systems/排雷循环/棋盘生成.md:133、design/gdd/systems/排雷循环/棋盘生成.md:172) | `_finalize` 五键删除、reroll_count 新增、METRIC_VERSION=2 | `_smoke_board_generator` 键集断言(T1 1.5) | 单元 | `generate()` 真产物 | metrics.has() 逐项读数 | 新增:出板检查(出生区无雷/开局不全开、白给板同流重摇、指标集换代) |
| R2 表与 schema 退役(design/gdd/systems/排雷循环/棋盘生成.md:173、design/gdd/systems/排雷循环/棋盘生成.md:176) | board_gen_table.gd 六块删除;board_gen.tres 五列删除;schema_vocab ⑥ 改写 | 真表加载 errs=[](`board_generator_test.gd:15–19` 装载路)+`schema_vocab_violation_test.gd:_check_vocab_retired_fields` | 单元 | ConfigDB 真表加载 | 违例 errs 集合前后相同(退役检查不再产出) | 既有:棋盘按参数行出图、数字恒真 |
| R3 标记与诚实告知退役(design/gdd/systems/排雷循环/棋盘生成.md:100) | board_data.gd:21–22、main.gd:467/:481–493、main_debug_flow.gd:107 删除 | 键形 grep 零命中+冒烟启动绿(`python tools/run_smoke.py`) | 冒烟 | 冒烟场景真启动 | 静态判据+评审注记:标记不可达、无运行期观测面可绑(C5 口径,测试削弱申报见下) | 既有:棋盘按参数行出图、数字恒真 |
| R4 求解器迁 sim(design/gdd/systems/排雷循环/棋盘生成.md:102) | 新增 sim/inferability_measure.gd+四件改指 | 工具缩样直跑(T2 2.4) | 工具(闸外) | headless `--script res://sim/calibrate_boards.gd` 缩样 | 工具 stdout 读数行进实现报告 | 新增:棋盘可推理率离线测量(仅 sim,不入生成管线) |
| R5 测试口径换代(design/gdd/systems/排雷循环/棋盘生成.md:164) | 三件删组(清单见 1.5) | 单元全绿执行面+实现报告删组清单 | 单元 | run_all 全套 | 0 失败读数;被删面不复新断言 | 既有:出板检查(出生区无雷/开局不全开、白给板同流重摇、指标集换代) |
**测试削弱申报(2026-10-21 立)**:允许删除的旧断言与理由——reward 测试及格线/三分/cap 组(机制退役)、generator 可清图自洽套件与表头④护栏(检查退役)、schema_vocab ⑥(冻结域退役)、main.gd 两 toast(标记退役)。均为「对应功能整体撤除」,非放宽阈值;实现期未申报的额外删除=审计判红。
## 10. 异常分级
- L1 自救:注释/头注措辞、grep 残留的非代码命中(文档旧引述)——修后记实现报告。
- L2 记录继续:tres 中发现 §3 未列的退役列残留行(如注释行)——清理并记录。
- L3 停机呈报:①机检预算互斥=上游缺陷停卡退回写卡段;②白给板夹具(N=2 形态)500 种子找不出 R₀=S 触发样本(判据构造不出=停卡呈报,禁造变异注入替代、禁降回 N=1——N=1 全板恒白给会令重摇永不退出);③T2 缩样直跑触 MC 档位硬闸口径;④迁入族与迁出前同输入读数不等价(黄金对拍失败);⑤实现发现 v1.4 口径落不了地(如重摇循环与确定性承诺冲突)——退文档设计段,禁内联求裁。
## 11. 代拍板白名单
- metrics 键名 `reroll_count`;`METRIC_VERSION` 跳 2。
- 新文件名与类名 `game/sim/inferability_measure.gd`/`SimInferabilityMeasure.measure()`。
- 重摇循环形态=`while` 直到通过、无上限(C2 依据)。
- `_board_check` 复用现件 `compute_r0()`/`spawn_cells()` 判据函数(§13 复用面)。
- dump_battle/board_stat_probe/auto_player 的具体行式;夹具 8×8·N=2 与种子序 1..500(触发种子不存在时走 L3-②,禁改判据形态)。
- 超清单决定一律进实现报告「实现决定记录」并当轮停机问,禁静默。
## 12. 待裁点
零待裁点,开工门=U0。设计裁点四件(A 出板检查/B 锚句/C 迁 sim/D ι 公式)已由用户 2026-11-09 会话裁决并落文 v1.4 系文档。
## 13. 落位与可复用性预检
- 新增件 `game/sim/inferability_measure.gd`(标「新增」):复用面核查过两条——`auto_player.gd:114–217` 推理族不能复用(接口绑 minesweeper 运行时已揭示态做逐着推理,本件要的是整板生成侧口径闭包测量,两套口径);`board_generator.gd:177–310` 不能原地保留(C3 红线=core 零残留,且用户裁决落点=迁 sim,迁=整体搬移非重写)。唯一面:全仓整板可推理率测量只此一处,迁出后 core 由完成定义 grep 判据兜零残留。分层面:sim 测量件→只被 calibrate_boards/dump_battle 消费;零 core 依赖(消费 BoardData 公有 API),不跨层。
- 出板检查 `_board_check`:不新增判据逻辑——复用现件 `spawn_cells()`/`compute_r0()` 与 inv1/inv4 既有谓词,只是删其余检查后的收缩,非新能力。
- 无新增数据件、无新增 autoload、无新增表。
## 14. 实现规范预算
- 新件一:`inferability_measure.gd` 公开方法数=1(≤20 过);类变量=0(≤15 过);迁移 8 函数(实测源位 177/206/219/236/251/267/288/305)——baseline 无条目级源键(类/文件级登记形态),对账=新件建档键、原文件键随 board_generator.gd 收缩;迁入后逐函数 branches/returns 超默认档即拆(见 2.1)。
- 存量触面一查:`board_generator.gd`(删约 200 行,S13 键预期只降)、`board_gen_table.gd`、`main.gd`、三个测试件——T1 落笔前记录现读数为基线,落笔后只降不升,回升=查因进实现报告。
- 指标例外申报:无。未申报超预算进实现段=L3。
## 15. 拆分边界纪律
- 迁入件族有集体身份:职责语句「生成侧口径的整板可推理率离线测量(求解器)」,单一变化原因=测量口径变更;算子族八函数各自有独立语义(连锁/单点/派生/约束构造),非凑计数袋。
- 生成器删后残留职责单一:「确定性布雷+两条出板检查+指标上报」,无「剩下的成员」式打包。
- 「过阈值」仅作发现信号:本批不因 gdstyle 数字硬拆任何未迁函数。
## 16. 复核记录
(成文后必经 grilling 对抗复核,逐轮登记于此;复核者未参与本卡撰写。)
| 轮次 | 复核者身份 | 发现 | 去向 | 处置结果 |
|---|---|---|---|---|
| 1 | 只读子代理(general-purpose,未参与撰写,禁写文件) | F1 N=1 夹具恒白给、重摇永不退出 | 补写 | §8 1.5 夹具改 N≥2;§10 L3-②、§11 白名单同步 |
| 1 | 同上 | F2 完成定义 grep 范围与键形未限 | 补写 | §1 第 2 条改四目录+键形口径 |
| 1 | 同上 | F3 tres 尾注历史散句与「列原样」关系未写明 | 自判 | §8 1.2 补注+§3 表行加键形 93 处实数 |
| 1 | 同上 | F4 删除区间多处跨语句、schema_vocab 两指令打架 | 补写 | §8 1.5 整段按语句界重写,⑥ 统一为整函数改写 |
| 1 | 同上 | F5 reroll_count 相等判据无落实步骤 | 补写 | §8 1.5 新增断言补同种子相等段;§9 R1 行 2 点名落实处 |
| 1 | 同上 | F6 README :199 括注「冻结」槽悬空 | 补写 | §6 增列同步义务;README :199 写卡段同批已改 |
| 1 | 同上 | F7 行号簇 :150–155/:131/:483–493 等五处 | 自判 | §2/§9/§3/§8 1.4 改正(含节头注 :481–493) |
| 1 | 同上 | F8 baseline 无条目级源键、对账无对象 | 自判 | §14/§8 2.1 措辞改「新件建档键+原文件键收缩+默认档自查」 |
复核凭据=本节自身(2026-11-06 用户裁:不另设报告文件)。
+2 -9
View File
@@ -37,9 +37,9 @@
#### 可推理率承诺与生成-验证-重试管线退役(2026-11-09 登记,来源=会话提及)
**实况**:设计定稿已落文——design/gdd/systems/排雷循环/棋盘生成.md v1.4(生成不做质量承诺,出板检查只留出生区无雷与开局不全开两条,白给板同流重摇;求解器只留离线 MC 测量)、design/gdd/systems/排雷循环/行动经济.md v1.8(概率锚句删除)、design/gdd/systems/跨局循环/秘宝.md v1.4(ι 公式删除留定性条款)、design/gdd/systems/冒险循环/难度曲线与Boss.md v1.7+design/gdd/03-内容规模.md+design/gdd/systems/表现与支撑/数据配置.md v1.5+体验验证清单.md ⑬ 同步改写。原 QQ-11(F2c 常数定稿)随成本闸退役注销。代码侧待退役=求解器/质量重试/成本闸/ min_safe 与 R₀ 上限闸,求解器迁 sim;game/tests/README.md 能力清单归写卡段同步。
**实况**:设计定稿已落文——design/gdd/systems/排雷循环/棋盘生成.md v1.4(生成不做质量承诺,出板检查只留出生区无雷与开局不全开两条,白给板同流重摇;求解器只留离线 MC 测量)、design/gdd/systems/排雷循环/行动经济.md v1.8(概率锚句删除)、design/gdd/systems/跨局循环/秘宝.md v1.4(ι 公式删除留定性条款)、design/gdd/systems/冒险循环/难度曲线与Boss.md v1.7+design/gdd/03-内容规模.md+design/gdd/systems/表现与支撑/数据配置.md v1.5+体验验证清单.md ⑬ 同步改写。原 QQ-11(F2c 常数定稿)随成本闸退役注销。代码侧待退役=求解器/质量重试/成本闸/ min_safe 与 R₀ 上限闸,求解器迁 sim;game/tests/README.md 能力清单归写卡段同步。需求卡片:reports/需求卡片-可推理率退役批-2026-11-09.md(复核记录节在卡,对抗复核一轮 8 发现全处置:5 补写+3 自判)。原 QQ-13(EC5 运行期熔断)随降级出口退役由用户令注销。
**改动面**:文档+游戏代码
**状态**:文档设计已闭合
**状态**:文档设计已闭合+已写卡
#### 未决问题迁移——零伤害死局跨字段跨表护栏落点(2026-11-07 登记,来源=批次移交)
@@ -47,13 +47,6 @@
**改动面**:文档+游戏代码
**状态**:文档设计已闭合+已写卡
#### 未决问题迁移——A1 EC5 运行期熔断(2026-11-07 登记,来源=批次移交)
**实况**:原 architecture.md「未决问题」QQ-13(git 历史可考,架构收窄批迁出)。连续降级确定性回退已知好种子。
**缺口**:还差棋盘生成 GDD 修订批裁决。
**改动面**:文档
**状态**:待文档设计
#### 封印格观感细化(2026-11-07 登记,来源=批次移交)
**实况**:封印受理即揭示改版(需求卡片「封印动作改版批」2026-11-07)的呈现规格已随 [ux/battle](design/ux/battle.md)「封印格呈现预览」节定稿并过审——用户同日裁「观感细化后置」:色牌深浅、法阵与身份字形叠加的视觉密度、光圈强度等细化不阻塞实现批基线冻结。