diff --git a/game/tests/README.md b/game/tests/README.md index 2607d022..c6d8f259 100644 --- a/game/tests/README.md +++ b/game/tests/README.md @@ -119,6 +119,7 @@ tests/ | 封印受理即揭示(身份可查、受理零事件) | 排雷玩法 | `MinesweeperRules.settle_batch()` | `minesweeper_rules_test.gd:_test_seal_reveal_identity`(计划——需求卡片「封印动作改版批」2026-11-07 锚定) | | 清图口径换代(挖开∪封印、封印可完成清图) | 排雷玩法 | `MinesweeperRules.settle_batch()` | `minesweeper_rules_test.gd:_test_clear_by_seal`(计划——需求卡片「封印动作改版批」2026-11-07 锚定) | | 棋盘封印印记呈现(已揭示格承载+已封印格零动作) | 排雷玩法 | `BoardCellUnit.edge` → `SealMarkLayer.setup()`;`ui_input_probe` 真输入动线 | `seal_mark_params_test.gd:_test_param_values`;`seal_mark_params_test.gd:_test_fog_gate`;`seal_mark_params_test.gd:_test_seal_on_revealed_visible`(计划——需求卡片「封印动作改版批」2026-11-07 锚定) | +| 棋盘格面绘制显示(渲染闸棋盘三图 golden 逐像素——变异标记/奖励徽章/移除退色) | 排雷玩法 | `board_shot_probe.tscn` 窗口化真渲染(`BoardView.rebuild()` 固定种子单关直构)→`golden_compare.py` 逐像素 | `board_shot_probe.gd:_ready`(棋盘三图采集——渲染闸基线面)(计划——需求卡片「QA覆盖余量收口批」2026-11-07 锚定) | | AP 扣费、末点耗尽即收轮与战斗收束清零 | 行动经济 | `MinesweeperRules.settle_batch()`(→`ActionEconomy.try_spend()`/`ActionEconomy.notify_combat_end()`) | `seal_polarity_test.gd:_smoke_seal_ap_exhausted`;`round_flow_skill_pool_test.gd:_smoke_full_battle`;`round_flow_skill_pool_test.gd:_smoke_active_refresh` | | 停手转存储备与轮内刷新(上限/AP 不重置/刷新图零清图奖励) | 行动经济 | `BattleOrchestrator.player_request_refresh()`/`MinesweeperRules.settle_batch()` | `round_flow_skill_pool_test.gd:_smoke_active_refresh`;`seal_polarity_test.gd:_smoke_refresh_provenance_guard`;`refresh_feats_test.gd:test_no_feats_baseline` | | 换图系刷新链路与效果词表接线 | 行动经济×战斗结算×奇物 | `MinesweeperRules.settle_batch()`/`BattleOrchestrator.player_request_refresh()` | `effect_words_t1_test.gd:_init`;`forge_table_test.gd:_test_effect_kinds_closed`;`refresh_feats_test.gd:test_board_refresh_fact_only_on_success` | @@ -174,7 +175,7 @@ tests/ | 终局结算框关闭动线零引擎报错 | 战斗表现 | fx_probe/screen_flow_probe 真实败走关闭动线(`BattleEndOverlay.open_defeat()` → `BattleEndOverlay.close()`)孤立直跑,日志零报错行读数 | `fx_probe.gd:_ready`(计划测试——需求卡片「QA harness 缺陷与覆盖遗漏收口批」2026-11-06 锚定) | | 停手钮真输入命中与停手收轮落效 | 行动经济 | ui_click_probe 使能窗真输入点击(AP 条停手钮经 `ProbeUiUtil.push_click()`)+journey_player 全线跑批(sim) | `ui_click_probe.gd:_stoptest_tick`(计划测试——需求卡片「QA harness 缺陷与覆盖遗漏收口批」2026-11-06 锚定) | | 停点链与控件级真输入命中 | HUD框架 | 探针与测试宿主真输入驱动(节点继续/三选一选卡·确认/弃图刷新确认/奖励刷新/地图候选矩形中心/调试浮窗钮,一律经 `ProbeUiUtil.push_click()`/`push_click_at()` 进 `push_input`) | `ui_click_probe.gd:_ready`(停点链段——计划测试,需求卡片「QA harness 缺陷与覆盖遗漏收口批」2026-11-06 锚定) | -| 控件动线扩面真输入可达(图例关闭/节点继续/三选一与商店/秘宝架/树高档与先手/弃图链/地图放弃/进入下一层/Esc 设置/减动效开关)+cell_mark 模态断言 | HUD框架×各屏 | 合成 InputEvent 经 `Viewport.push_input()` 真点(`ProbeUiUtil.push_click_at()`;扩面十二段,高档钮经调试注钥使能) | `ui_click_probe.gd:_ready`(动线扩面段);`ui_struct_probe.gd:_ready`(cell_mark 段)(计划——需求卡片「QA覆盖余量收口批」2026-11-07 锚定) | +| 控件动线扩面真输入可达(图例关闭/节点继续/三选一与商店/秘宝架/树高档与先手/弃图链/地图放弃/Esc 设置/减动效开关) | HUD框架×各屏 | 合成 InputEvent 经 `Viewport.push_input()` 真点(`ProbeUiUtil.push_click_at()`;扩面十一段,高档钮经调试注钥使能) | `ui_click_probe.gd:_ready`(动线扩面段)(计划——需求卡片「QA覆盖余量收口批」2026-11-07 锚定) | **旅程段七:数据配置与跨系统契约** diff --git a/reports/需求卡片-QA覆盖余量收口批-2026-11-07.md b/reports/需求卡片-QA覆盖余量收口批-2026-11-07.md index 8cace893..841712b0 100644 --- a/reports/需求卡片-QA覆盖余量收口批-2026-11-07.md +++ b/reports/需求卡片-QA覆盖余量收口批-2026-11-07.md @@ -1,6 +1,6 @@ # 需求卡片——QA 覆盖余量收口批(B4/B5 复核分流落地) -> **日期**:2026-11-07 / **批名**:QA覆盖余量收口批 / **预计**:≈8.25 个工作日(区间 7–10.5,切分预案见 §7 尾) +> **日期**:2026-11-07 / **批名**:QA覆盖余量收口批 / **预计**:≈8.75 个工作日(区间 7–10.5,切分预案见 §7 尾) > **来源**:待办清单「QA harness 覆盖遗漏余量——B4 本体缺口与 B5 控件零命中缺口复核分流」(2026-11-07 登记,P0,待写卡)。 > **唯一事实源**:本卡为需求性工程条目,设计事实源=证据指认(见 §2)。 > **验收档:中**(失败后果=验证承载面静默弱化,玩家不可见、无状态残留;触多档按最高档申报口径取中)。 @@ -9,9 +9,10 @@ 把 QA harness 覆盖余量(B4 本体对账缺口 211 条/62 类+B5 控件级零真输入命中)逐条复核分流后的结论落地: -- **真缺口**(46 条,附录 A):补验证——数据表违约词负面断言、表值钉、行为值断言、屏可见性断言、探针真输入动线扩面。 +- **真缺口**(45 条,附录 A):补验证——数据表违约词负面断言、表值钉、行为值断言、屏可见性断言、探针真输入动线扩面。 - **豁免**(165 条,附录 B):登记进 `tools/coverage_exemptions.js`(假缺口/预留埋点/挂起件三类),面板亮豁免灯不亮缺口灯。 -- **完成定义**:①附录 A 全部真缺口有对应断言落地并跑绿;②附录 B 全部条目入豁免清单且带 reason;③重跑 `python tools/coverage_enum.py` 与两探针,本体缺口清单清零(未豁免未补测=0)+ui_click/screen_flow 零命中集合与附录 C 豁免面一致;④单元测试全套件绿(新增套件+被触碰套件)+场景探针绿。 +- **出圈**(非豁免,附录 C 排除面+本体分类修正):开发面控件(调试浮窗/调试角标/inter 调试专用层)在覆盖登记层过滤、不入玩家可达宇宙;cell_mark_overlay 为绘制域件不入「屏与模态」本体清单(枚举器分类修正)——两者各归现役通道(渲染闸棋盘 golden/封装扫描),测试目的不豁免、换通道达成(§4 第 10 条)。 +- **完成定义**:①附录 A 全部真缺口有对应断言落地并跑绿;②附录 B 全部条目入豁免清单且带 reason;③重跑 `python tools/coverage_enum.py` 与两探针,本体缺口清单清零(未豁免未补测=0)+ui_click/screen_flow 零命中集合与附录 C 排除面一致(seen 集零开发面键);④单元测试全套件绿(新增套件+被触碰套件)+场景探针绿。 ## 2. 设计事实源 @@ -19,7 +20,7 @@ - 待办清单条目「QA harness 覆盖遗漏余量——B4 本体缺口与 B5 控件零命中缺口复核分流」(`待办清单.md`,2026-11-07 登记,P0,状态待写卡)。 - 登记处证据:`reports/QA-harness三批-缺陷与覆盖遗漏报告-2026-11-06.md`(B4=`game/tests/.gates/coverage/ontology_gaps.js`+覆盖面板第四节;B5=`probe_hits_ui_click.js`/`probe_hits_screen_flow.js` 的 seen−hit 差集;诚实边界=:42 假缺口假覆盖须人工逐条复核)。 -- 本卡写卡段复核分流逐条裁决=附录 A(真缺口 46 条)/附录 B(豁免 165 条)/附录 C(B5 零命中 94 键归并裁决),由两名未参与撰写的只读子代理分裁决+写卡人按普查口径与代码事实校准(校准记录见 §17 复核记录)。 +- 本卡写卡段复核分流逐条裁决=附录 A(真缺口 45 条)/附录 B(豁免 165 条)/附录 C(B5 零命中 94 键归并裁决;轮 2 用户裁两处出圈改判),由两名未参与撰写的只读子代理分裁决+写卡人按普查口径与代码事实校准(校准记录见 §17 复核记录)。 ## 3. 现状事实(代码级,开工自行复核) @@ -35,6 +36,7 @@ - **秘宝 rap_transfer_mult**:消费接线在役(`game/core/grant_segment.gd:301`),行为测试用字面量 125 直调数学面未装配真实行(`treasure_effects_test.gd:128-146`)——行值变更零测试失败。 - **状态行 defensive_stance**:同族状态行有值断言先例(`round_flow_skill_pool_test.gd:944,1119` empower/off_guard),本行零。 - **豁免清单机制现成**:`tools/coverage_exemptions.js`=人工维护、面板与工具只读、每条必带 reason(`:1-4`);`coverage_enum.py:145` 明写「人工核销走豁免清单,不落本文件」。 +- **枚举分类与调试面(实现段 L3 回退坐实,2026-11-07 用户裁)**:`tools/coverage_enum.py:45` VIEW_KIND_RE 按文件名后缀归类「屏与模态」——`game/presentation/views/cell_mark_overlay.gd`(RefCounted 绘制域件,CellUnit 拆件,:7 `extends RefCounted`,无 visible/开层动线/遮挡物语义)误入;调试面接线与标注证据=`game/presentation/main.gd:361`「仅调试模式接线」(inter 覆盖层唯一显形写点=调试分支 `main.gd:370`,正常冒险层间推进归 AdventureRunner)+`debug_overlay.gd:1-3` 调试浮窗头注+`main_ui_build.gd:244-246` 装配注——三处散文标注在案,机器过滤单点缺位;过滤可依的成员引用单点=`ui.screens.debug_badge`(main_ui_build.gd:185)/`ui.modals.menu.debug_overlay`(:250,class_name DebugOverlay)/`ui.screens.inter_overlay`(ui_screens.gd:13)。 - **预留埋点口径**:`reports/普查-效果通道与事件词零现役-2026-11-06.md` §1/§2——词表先行内容后接,零现役词面全部保留;秘宝表旧词 9 个「迁移完成」收尾待用户另裁(不在本批)。 ## 4. 设计契约(违反即返工,🔴 触碰=L3 停机) @@ -47,18 +49,19 @@ - 🔴 **实现批禁写 `design/` 与根规则文件与 `game/tests/README.md`**——能力行已随本卡(写卡段)入表;收尾核对发现名实不符=停卡呈报(回表走写卡段通道,实现段不自行改表)。 - 🔴 **测试削弱零申报不发生**——本批零删除断言;G8 的合成行断言一律保留、新增生产行断言并存(申报面见 §8 尾)。 - 🔴 **拆分边界沿职责轴**(code-conventions §1.1)——新增负面套件=「schema 违约词拒绝路径」单一职责一件;禁为凑对照表行数拆碎或为省文件混装无关违约。 +- 🔴 **开发面不入对账宇宙(2026-11-07 用户裁)**——调试面控件(DebugOverlay 浮窗/调试角标/inter 调试专用层)在覆盖登记层过滤、不产豁免条目:豁免=在玩家可达范围内特批不做,开发面本就不在该范围内,列豁免=范围定义错误;过滤边界按成员引用/类型单点判定(§3 枚举分类与调试面条),禁逐键黑名单。屏与模态分类按实体基类(场景节点型)判定,禁文件名后缀近似。 ## 5. 范围边界 -**收件**:附录 A 真缺口 46 条的验证补齐+p_perfect 接线+附录 B 165 条豁免登记+附录 C B5 探针动线扩面(十二动线组+cell_mark 屏断言)。 +**收件**:附录 A 真缺口 45 条的验证补齐+p_perfect 接线+附录 B 165 条豁免登记+附录 C B5 探针动线扩面(十一动线组)+开发面出圈(登记件过滤+枚举器分类修正)+cell_mark_overlay 显示正确性渲染通道核对。 **不收件(去向在案)**: - 普查在册预留词不重开:本批新认定预留词(ap_grant/risk/cell_removal/neq/hero_hp_pct/slot_cost/chain_ap_cost/move_ap_cost/ap_rounds_front/effective_rounds/mine_hit_halve/reflect_damage/refresh_pick/reward_weight_bias)随附录 B 豁免,词面不动;秘宝表旧词 9 个「迁移完成」收尾归普查条目待用户裁,不属本批。 - `settlement_review_overlay` 挂起死件不动(生涯条目承载处置两途)。 - iter54 已收口面(A1/A2/B1/B2/B3/B6)不重做;停手钮零命中属数据陈旧,随附录 C 排除。 -- 覆盖面板与 `coverage_enum.py`/登记件本体零改动——B5 双源键形差异以人工复核记录(附录 C)承载,键形改造若要做归工程批另行登记。 -- 未入探针 seen 的屏(如关卡结算屏族)不在 B5 对账面(登记件完备性边界在案);cell_mark_overlay 因属 B4 屏类真缺口仍收(探针补断言)。 +- B5 双源键形差异以人工复核记录(附录 C)承载,键形改造若要做归工程批另行登记(开发面过滤按调试面边界判定、非键形修正,随本批 T9)。 +- 未入探针 seen 的屏(如关卡结算屏族)不在 B5 对账面(登记件完备性边界在案);cell_mark_overlay 非屏与模态实体(RefCounted 绘制域件)——本体清单出圈(枚举器分类修正承载,T10),显示正确性归渲染闸棋盘 golden(T9 核对步,锚 test-conventions.md:100)。 - 豁免≠放弃:预留埋点词未来接线内容时须撤豁免补验证(撤豁免动作随接线批走)。 ## 6. 关联文档同步面 @@ -87,9 +90,10 @@ | `game/tests/unit/round_flow_skill_pool_test.gd`(存量触碰) | +1 检查函数:defensive_stance 值断言 | 非产品码 → V9 | | `game/tests/unit/variant_placement_test.gd`(存量触碰) | +1 检查函数:L3 两变异行放置+效果 | 非产品码 → V11 | | `game/tests/unit/seal_polarity_test.gd`(存量触碰) | +2 检查函数:enemy_alert/ap_drain 生产行读值 | 非产品码 → V12 | -| `game/probe/ui_click_probe.gd`(存量触碰) | 动线扩面十二段(附录 C 真缺口面) | 测量面 → V13 | -| `game/probe/ui_struct_probe.gd`(存量触碰) | cell_mark_overlay 可见性/模态断言段 | 测量面 → V14 | -| `tools/coverage_exemptions.js`(存量触碰) | 附录 B 165 条登记 | 工程配套(面板配置,随批) | +| `game/probe/ui_click_probe.gd`(存量触碰) | 动线扩面十一段(附录 C 真缺口面) | 测量面 → V13 | +| `game/probe/probe_coverage_recorder.gd`(存量触碰) | 开发面过滤——`_wire_buttons()` 按调试面边界跳过(DebugOverlay 类型+inter_overlay/debug_badge 引用子树) | 测量面 → V17 | +| `tools/coverage_enum.py`(存量触碰) | `scan_screens()` 屏与模态分类修正——按 extends 场景节点基类,绘制域件与调试浮窗出圈 | 工程配套(对账工具,随批) → V17 | +| `tools/coverage_exemptions.js`(存量触碰) | 附录 B 165 条登记+controls 开发面 3 条删除 | 工程配套(面板配置,随批) | ### T0 开工(0.25 日) - [ ] worktree 内拷导入缓存三件套,`git status` 归属核对 @@ -137,17 +141,19 @@ - [ ] `table_structure_guard_test.gd` +`_check_reward_row_pins`:stacks 生产行值钉 - [ ] 验证:套件直跑绿 -### T9 G9+B5 探针扩面(2.0 日) -- [ ] `ui_struct_probe.gd` +cell_mark_overlay 段:开态 visible+遮挡物隐藏模态断言(锚 test-conventions §2 模态条款) -- [ ] `ui_click_probe.gd` +动线扩面十二段(附录 C 真缺口面,全部真输入):图例关闭/节点继续/curio 确认+继续+刷新/商店购买+刷新/秘宝架购买10·25·装配·升级30/树面购买0·高档(调试注钥)·先手压制(fork B 侧)/弃图刷新→确认弃图→确认弹窗/地图放弃/进入下一层/Esc 浮窗设置/减动效开关(store 态断言) +### T9 B5 探针扩面+开发面过滤+渲染采集态核对(2.25 日) +- [ ] `ui_click_probe.gd` +动线扩面十一段(附录 C 真缺口面,全部真输入):图例关闭/节点继续/curio 确认+继续+刷新/商店购买+刷新/秘宝架购买10·25·装配·升级30/树面购买0·高档(调试注钥)·先手压制(fork B 侧)/弃图刷新→确认弃图→确认弹窗/地图放弃/Esc 浮窗设置/减动效开关(store 态断言) - [ ] 每动线钉「落点」判定(到哪屏/哪层可见),防空转假绿 -- [ ] 验证:两探针直跑绿+`.gates` 零命中差集对附录 C 收敛读数 +- [ ] `probe_coverage_recorder.gd` 开发面过滤:`_wire_buttons()` 接线遍历时按调试面边界跳过——边界单点=DebugOverlay 类型实例+`ui.screens.inter_overlay` 引用子树+`ui.screens.debug_badge` 引用子树(成员引用现役在案:main_ui_build.gd:185/:250、ui_screens.gd:13;依据=main.gd:361「仅调试模式接线」+test-conventions.md:65 调试面发布态恒隐);登记件头注补边界声明句(引用出处随句) +- [ ] cell_mark_overlay 渲染采集态核对:`board_shot_probe.tscn` 三图采集态逐类型核对其绘制域(变异标记/奖励徽章/路径点迹/焦点高亮/移除退色)是否在帧;缺的类型经确定性注入补进采集态(测试夹具直构同款口径);采集态改动=基线换代,走 `tools/golden_baseline_refresh.sh`(呈报用户过目后执行,`game/tests/golden/README.md` 时效判定纪律——显式重制+呈报+复闸,禁先动后判) +- [ ] 验证:两探针直跑绿+`.gates` 零命中差集对附录 C 排除面收敛读数(seen 集零开发面键)+渲染闸绿 - [ ] 套件耗时核对:扩面后探针单件耗时仍在 run_all 截止内(默认 120s,`game/tests/README.md` Running Tests 节),超则按白名单重排段序仍超→L2 记录并呈报 -### T10 豁免登记与对账(0.5 日) -- [ ] `tools/coverage_exemptions.js` 登记附录 B 165 条(ontology 逐 id+reason,分组照抄附录)+附录 C 豁免面 controls 条目 -- [ ] 复跑 `coverage_enum.py`+两探针:缺口清单=零(未豁免未补测=0)读数入提交信息 -- [ ] 验证:面板打开无红示警(无 reason 缺失条目) +### T10 豁免登记+对账工具面修正(0.75 日) +- [ ] `coverage_enum.py` `scan_screens()` 分类修正:「屏与模态」实体=`extends` 场景节点基类(Control/CanvasLayer/Node2D/PanelContainer 等)的 `presentation/views/*.gd`;RefCounted/Resource 绘制域件出圈(cell_mark_overlay);`class_name DebugOverlay` 调试浮窗出圈(开发面,§4 第 10 条)——禁文件名后缀近似归类 +- [ ] `tools/coverage_exemptions.js` 登记附录 B 165 条(ontology 逐 id+reason,分组照抄附录)+附录 C 豁免面 controls 条目(进程终结/双源同物/键形实例变体三族;开发面族不入——T9 过滤承载,已登记的 3 条随本裁决删除) +- [ ] 复跑 `coverage_enum.py`+两探针:缺口清单=零(未豁免未补测=0)+枚举基数与真缺口 45/豁免 165 口径核对,读数入提交信息 +- [ ] 验证:工具最小参数全路径含产出落盘(`--out` 默认路径)+面板打开无红示警(无 reason 缺失条目) ### T11 产出物落位卡(0.25 日) - [ ] `reports/iter-实现报告-<日期>.md`:各卡状态+实机目检总清单(探针动线扩面屏点选段)+遗留读数义务+实现决定记录 @@ -172,14 +178,15 @@ | V10 | p_perfect 读表接线(`design/engineering/test-conventions.md:133`+`design/gdd/systems/战斗循环/战斗结算.md:124`) | `reward_grant.gd:418-421` 改读 ConfigDB | `table_structure_guard_test.gd:_check_settlement_pin_values`(值钉+p_perfect=100 活性断言)+`seal_polarity_test.gd` 既有真实流完美双份兑付段(:330-401)跑绿 | 单元 | 完美兑付路径(ConfigDB 出口) | 兑付倍率==表值且随表值变化(活性);字面量 grep 零残留为辅证(结构接线形态 grep 不判死接线,主证=活性断言) | 既有:轮内流与结算五段全序 | | V11 | L3 两变异行(`design/engineering/test-conventions.md:133`) | `variant_placement_test.gd` +函数 | `variant_placement_test.gd:_test_l3_rockfall_minedust_rows` | 单元 | 变异布置段 | 两行放置可达+效果通道命中 | 既有:变异布置门控 | | V12 | enemy_alert/ap_drain 生产行(`design/engineering/test-conventions.md:133`) | `seal_polarity_test.gd` +两函数 | `_check_enemy_alert_production_row`;`_check_ap_drain_production_row` | 单元 | 效果引擎兑付链读生产行 | 断言真值依赖生产行值 | 既有:封印与极性路由/不可逆 | -| V13 | 十二动线真输入可达(`design/engineering/test-conventions.md:37`) | `ui_click_probe.gd` 动线扩面 | `ui_click_probe.gd:_ready`(扩面段) | 探针 | 合成 InputEvent 经 `push_input` 真点 | 每动线落点可见性断言+登记件 hits 增键 | 新增:控件动线扩面真输入可达(图例关闭/节点继续/三选一与商店/秘宝架/树高档与先手/弃图链/地图放弃/进入下一层/Esc 设置/减动效开关)+cell_mark 模态断言 | -| V14 | cell_mark_overlay 模态断言(`design/engineering/test-conventions.md:35`) | `ui_struct_probe.gd` +段 | `ui_struct_probe.gd:_ready`(cell_mark 段) | 探针 | 真实实例化+开层动线 | 开态 visible+遮挡物隐藏 | 新增:控件动线扩面真输入可达(图例关闭/节点继续/三选一与商店/秘宝架/树高档与先手/弃图链/地图放弃/进入下一层/Esc 设置/减动效开关)+cell_mark 模态断言 | -| V15 | 豁免登记对账清零(`design/engineering/test-conventions.md:119`) | `tools/coverage_exemptions.js` +165 条 | T10 对账读数(`coverage_enum.py` 缺口=0+探针差集=附录 C 豁免面) | 工具直跑 | 工具最小参数全路径 | 读数落 `.gates` 且与附录一致 | 既有:全表装载、就绪态与表清单目录对账 | +| V13 | 十一动线真输入可达(`design/engineering/test-conventions.md:37`) | `ui_click_probe.gd` 动线扩面 | `ui_click_probe.gd:_ready`(扩面段) | 探针 | 合成 InputEvent 经 `push_input` 真点 | 每动线落点可见性断言+登记件 hits 增键 | 新增:控件动线扩面真输入可达(图例关闭/节点继续/三选一与商店/秘宝架/树高档与先手/弃图链/地图放弃/Esc 设置/减动效开关) | +| V14 | cell_mark_overlay 显示正确性——渲染通道(`design/engineering/test-conventions.md:100`) | 采集态逐类型核对与缺型补注(T9);采集态改动=基线换代走 golden_baseline_refresh.sh(用户过目后执行) | `board_shot_probe.tscn` 三图采集+`golden_compare.py` 逐像素 | 渲染闸 | 窗口化真实渲染截图(固定种子单关直构,`board_shot_probe.gd:_ready`) | 棋盘裁剪区加严口径(changed>0 落 900×760 裁剪区=判失效,`game/tests/golden/README.md`) | 新增:棋盘格面绘制显示(渲染闸棋盘三图 golden 逐像素——变异标记/奖励徽章/移除退色) | +| V15 | 豁免登记对账清零(`design/engineering/test-conventions.md:119`) | `tools/coverage_exemptions.js` +ontology 逐 id+controls 19 条(开发面族不入账) | T10 对账读数(`coverage_enum.py` 缺口=0+探针差集=附录 C 排除面) | 工具直跑 | 工具最小参数全路径 | 读数落 `.gates` 且与附录一致 | 既有:全表装载、就绪态与表清单目录对账 | | V16 | per_level_shift_pct 三关档钉(`design/engineering/test-conventions.md:119`) | `table_structure_guard_test.gd` +函数 | `table_structure_guard_test.gd:_check_meta_per_level_pins` | 单元 | 表行读值 | 三关档值==6/9/1 | 新增:schema 违约词拒绝路径与关键表值钉(空表/冻结/出域/白名单/settlement 钉/cap 段七槽钉) | +| V17 | 开发面出圈与本体分类修正(`design/engineering/test-conventions.md:65`) | `probe_coverage_recorder.gd` 调试面边界过滤+`coverage_enum.py` `scan_screens()` 基类分类 | 复跑读数:两探针 seen 集零开发面键+枚举「屏与模态」无绘制域件/调试浮窗(`coverage_enum.py` 全路径落 `.gates`) | 工具直跑 | 工具最小参数全路径+探针直跑 | 登记件 seen 与枚举基数对附录 C 排除面/本体分类口径(逐项可判红) | 既有:全表装载、就绪态与表清单目录对账 | **独立验收审计**:合回前由未参与实现的会话或子代理执行——审计入口=本卡 §8 对照表+实现报告实际对照表+diff+测试文件,报告落 `reports/iter-验收审计-<日期>.md`;验收档=中,深度按 test-conventions §8.7 中档执行;未过不合回。 -- **测试方式两分法**:V1–V12/V15=调试接口直改数据(单元面);V13/V14 动线=探针真输入;**用户目检项**=探针动线扩面十二段的屏面观感(登记实现报告目检总清单,登记不阻塞)。 +- **测试方式两分法**:V1–V12/V15=调试接口直改数据(单元面);V13 动线=探针真输入;V14=渲染闸 golden;V17=工具直跑+登记件读数;**用户目检项**=探针动线扩面十一段的屏面观感+基线换代帧过目(登记实现报告目检总清单,登记不阻塞)。 - **回归措辞**:里程碑步(T 段)出口跑一次该步触碰套件+关联套件;波内修复只做出红最小单元最窄确认;新增测试先行孤立验证再并入全套。 - **闸口径**:本批改动含 `game/` 非文档行为载体(reward_grant.gd)→ 批末跑代码域闸(冒烟+单元+探针+渲染/静态);批末另有改前改后读数对拍(T0 锚 vs T10 复跑)。 - **测试削弱申报**:零删除断言、零放宽阈值;G8 合成行旧断言保留并存(非削弱);停手钮零命中排除=iter54 已修非本批动作。 @@ -200,9 +207,9 @@ ## 12. 落位与可复用性预检 -- **复用面**:46 条真缺口的验证全部落既有套件文件(table_structure_guard/adventure_feats/treasure_effects/stage_background/meta_progression_forge/round_flow_skill_pool/variant_placement/seal_polarity)+两既有探针——零新增产品码文件、零新增数据件;唯一新增件=`schema_vocab_violation_test.gd`,不能复用既有件的理由:现役套件先例两形态——致命通道专件(manifest negative,如 treasure_target_violation_test)与单表 validate 诊断面(level_table_validate_test)——本批十七违约词跨十二表的**违约词族集中面**与任一先例职责不同(单一变化原因=违约词族增删,code-conventions §1.1),拆散塞进各表既有套件会把集中义务打散成十二处触点;独立成件是职责轴切分,不是 §5.6 强制(validate 诊断注入本不触 §5.6)。 -- **唯一面**:豁免登记唯一落点 `coverage_exemptions.js`;对账唯一工具 `coverage_enum.py`(零改动);p_perfect 表值读取唯一经 ConfigDB 出口;同名检查函数零重复(grep 计划名逐一核过)。 -- **分层与交互面**:V10 接线在 core 内经 ConfigDB 既有读法(Core 零 UI 依赖不破);V4/V11 走 AdventureRunner 真链不经 UI;探针扩面只增段不改既有段(既有动线零回归风险面=探针文件内新增);测试面全落 `game/tests/unit`+`game/probe`(静态扫描 S 系面外,test-conventions §1.1 三元组归位:新增单元套件+探针段)。 +- **复用面**:45 条真缺口的验证全部落既有套件文件(table_structure_guard/adventure_feats/treasure_effects/stage_background/meta_progression_forge/round_flow_skill_pool/variant_placement/seal_polarity)+两既有探针——零新增产品码文件、零新增数据件;唯一新增件=`schema_vocab_violation_test.gd`,不能复用既有件的理由:现役套件先例两形态——致命通道专件(manifest negative,如 treasure_target_violation_test)与单表 validate 诊断面(level_table_validate_test)——本批十七违约词跨十二表的**违约词族集中面**与任一先例职责不同(单一变化原因=违约词族增删,code-conventions §1.1),拆散塞进各表既有套件会把集中义务打散成十二处触点;独立成件是职责轴切分,不是 §5.6 强制(validate 诊断注入本不触 §5.6)。 +- **唯一面**:豁免登记唯一落点 `coverage_exemptions.js`;对账唯一工具 `coverage_enum.py`(本批唯一工具改动面=`scan_screens()` 分类修正,T10);开发面过滤唯一落点=登记件 `probe_coverage_recorder.gd` 调试面边界(三处成员引用单点,§3);p_perfect 表值读取唯一经 ConfigDB 出口;同名检查函数零重复(grep 计划名逐一核过)。 +- **分层与交互面**:V10 接线在 core 内经 ConfigDB 既有读法(Core 零 UI 依赖不破);V4/V11 走 AdventureRunner 真链不经 UI;探针扩面只增段不改既有段(既有动线零回归风险面=探针文件内新增);登记件过滤为纯减法(开发面子树不入账,玩家可达面登记零影响);枚举器分类修正为纯收窄(出圈件本无断言文料关联,其余四源零触碰);测试面全落 `game/tests/unit`+`game/probe`(静态扫描 S 系面外,test-conventions §1.1 三元组归位:新增单元套件+探针段)。 ## 13. 禁为机检文本保留无效成员 @@ -211,7 +218,7 @@ ## 14. 实现规范预算 - **新增件三查**(`schema_vocab_violation_test.gd`):①公开方法计划 8(`_ready`+7 个 `_check_*`)≤20 ✓;②成员变量计划 ≤5(夹具表句柄与 errs 收集)≤15 ✓;③迁移函数:无迁移。 -- **存量触面一查**:触碰的 10 个测试件+run_all.gd(manifest 增一行)+1 个探针件均为纯增量(+1~+4 函数,零删改既有函数)——S13 键较登记值只降不升预期成立(无键新增:新增函数不涉 gdstyle 基线键面;探针/测试件不在 S9 扫描面,code-conventions §4.13)。 +- **存量触面一查**:触碰的 10 个测试件+run_all.gd(manifest 增一行)+2 个探针面件(ui_click_probe 扩面段+probe_coverage_recorder 过滤判定,均纯增量+1~+2 函数零删改既有函数)——S13 键较登记值只降不升预期成立(无键新增:新增函数不涉 gdstyle 基线键面;探针/测试件不在 S9 扫描面,code-conventions §4.13);coverage_enum.py 属工具件不在 gdstyle 面(验证=最小参数全路径实跑)。 - **指标例外通道**:无申报。 ## 15. 拆分边界纪律 @@ -229,19 +236,21 @@ | 0(写卡段复核分流) | 两名未参与撰写的只读子代理(Explore)分裁 B4 零命中 92 条与有命中 119 条;写卡人按普查口径与代码事实校准(推翻 2 条:skill neq/treasure cell_removal 属预留埋点;修正 7 条:ap_grant/risk/min_safe_count/indeg/terminals 等按消费事实与预留口径改判) | 裁决与代码事实的偏差(子代理未见普查报告、未查生产消费点) | 自判 | 写卡人逐条以 file:line 复核后定案(附录 A/B/C 底稿);分歧记录=`game/tests/.gates/coverage/review_scratch_b4.txt`(写卡段过程件,不入 git) | | 1(grilling 对抗复核) | 未参与撰写的只读子代理(Explore),九审点全过+godot-master NEVER/Gotchas/性能预算对照 | ①hits 数 38/25 系事件数非键数 ②settlement.tres :29/:34 行号错位 ③action_economy.gd 跨 :64-68 ④meta_tree load_bearing 漏列附录 A(附录 A 实数 44 非 46)⑤V10 回归套件指错(settle_segments 无完美兑付断言)⑥V10 grep 判据抓不到死接线 ⑦run_all.gd manifest 触碰面漏列 ⑧回表通道三处口径不一 ⑨附录 B 草稿残留(未决问号/terminals 重复)⑩per_level_shift_pct 无验收行 ⑪「62 类」歧义 ⑫§12 复用论据半错 | 补写×9(①②③④⑤⑥⑦⑨⑩)+自判×3(⑧⑪⑫) | ①§3 改「38 次·去重 27 键/25 次·去重 19 键」②:29/:34 更正③:64-68 更正④G1 增第 17 词、真缺口实数修为 46(44+load_bearing+per_level)⑤V10 回归面改指 `seal_polarity_test.gd:330-401`⑥T2/V10 增 p_perfect=100 读数活性断言、grep 降辅证⑦结构图/T1/§12/§14 增 run_all.gd manifest 登记面⑧§4/T11 统一「名实不符=停卡呈报,回表走写卡段通道」(依据 test-conventions §8.3)⑨附录 B 残留清理⑩V16 行+T2 步骤+结构图+预算计数⑪改「62 分组中 40 组带缺口」⑫§12 论据改职责轴切分(单表 validate 诊断面先例 level_table_validate_test 在案,code-conventions §1.1) | | 1 后(处置自查) | 写卡人(12 处置点逐条回读卡内落地) | 零残留(12/12 落地;待裁 0、退回上游 0) | 自判 | 本节即凭据;卡片成立,进入提交 | +| 2(实现段 L3 回退改判) | 用户裁决(实现报告 §6 两处 L3 呈报、写卡段呈两案后裁定);写卡段续任落实(未参与实现) | ①cell_mark_overlay 被枚举器按文件名后缀误分类为屏与模态(实体=RefCounted 绘制域件,模态断言无可观测面,V14 原形态作废);②「进入下一层」钮属调试两层模式专用(main.gd:361 仅调试模式接线),调试入口不入玩家可达测试范围——写卡段原呈两案(改判豁免/另立规格)均含豁免选项 | 待裁→用户裁决 | 用户裁(2026-11-07):两处均不豁免。①测试目的=验证其能否正常显示,走渲染通道——V14 改指渲染闸棋盘 golden(锚 test-conventions.md:100),本体清单出圈归枚举器分类修正(T10),能力行回表;②调试面在覆盖登记层过滤不入宇宙(T9+附录 C 排除面),controls 开发面 3 条豁免删除——豁免=在范围内特批不做,出圈面不占豁免;卡 §4 增第 10 条红线、§3 增现状条、估算与 roadmap 行随新任务面同步(≈8.75) | **零待裁点,开工门=U0**(§11 两处自判依据:architecture.md「数值单一事实源」条款与 QA 报告 :47 完备性边界在案)。 --- -## 附录 A:B4 真缺口明细(46 条,验证落点见 §7/§8) +## 附录 A:B4 真缺口明细(45 条,验证落点见 §7/§8) **G1 违约词(17)**:empty_table×8(board_gen/enemy/level/meta/reward/shop/skill/status_effect——`trigger_cond_test.gd:46` 仅类别过滤非违约路径);settlement missing_segment/pperfect_oob/segorder_violation(`settlement_table.gd:23,37-38,63-64` 零负面件);feat zero_flat(`feat_table.gd:47` 零负面件);treasure zero_flat(`treasure_item_table.gd:110-112` 零负面件);meta keystone_cost(guard :147/:151 系 treasure unlock_keystone_cost 子串误命中);treasure use_phase+active_dig(schema :106-108 出域分支零注入);board_gen solver_rules+single_subset(`:57-60` frozen 分支零注入);meta_tree load_bearing(彩蛋 cap>3 违约分支零注入,`meta_tree_table.gd:65`)。 **G2 结算/秘宝数值(3)**:equivalence_ref_damage(运行时零消费、工具镜像零钉);rap_transfer_mult(接线在役、测试字面量);p_perfect(硬编码不读表——接线)。 **G3 adventure cap/配额(8)**:curio_cap ap/armor/heal/max_hp/rap/refresh/time_sand 七槽(guard :114-115 只钉 gp/attack);feat_ticket_quota(`curio_deck.gd:115` 配额满分支零测试)。 **G4 布局(2)**:ap_bar_h(`ap_bar_view.gd:35` 消费零断言);log_band_h_settle(`battle_log_view.gd:24,44,58` 消费零断言)。 **G5 天赋树(8)**:ks_workshop(零断言);ks_refresh(`tree_requires_level_test.gd:52` 仅注释);fork_sense/fork_economy(零断言);fg_economy/name_a/name_b(零断言);spine(`screen_flow_probe.gd:430` 夹具喂几何非语义)。 -**G6–G9(5)**:defensive_stance(零值断言);rockfall/mine_dust(L3 零放置零断言);enemy_alert/ap_drain(合成行未读生产行,`trigger_cond_test.gd:130-133`/`seal_polarity_test.gd:772-773`);cell_mark_overlay(仅封装扫描,无实例化可见性断言);reward stacks(合成行键未读生产行)。 +**G6–G8(4)**:defensive_stance(零值断言);rockfall/mine_dust(L3 零放置零断言);enemy_alert/ap_drain(合成行未读生产行,`trigger_cond_test.gd:130-133`/`seal_polarity_test.gd:772-773`);reward stacks(合成行键未读生产行)。 +**出圈(非缺口非豁免)**:cell_mark_overlay——非屏与模态实体(RefCounted 绘制域件,枚举器文件名后缀误分类,2026-11-07 用户裁);显示正确性归渲染闸棋盘 golden(V14),本体清单出圈归枚举器分类修正(T10)。 **G10 换算率钉(1)**:per_level_shift_pct(运行时零消费、离线 verifier 消费端 `tools/balance_verifier.py:77-103`,值 6/9/1 零内容断言——钉值防标定漂移)。 ## 附录 B:豁免登记清单(约 165 条,执行计数以尾注与 T10 登记清单为准——`tools/coverage_exemptions.js` ontology 逐 id+reason) @@ -259,12 +268,11 @@ - 词表杂项:pity_threshold/min_safe_count(生产消费+行为承载)/atk_max/atk_min/initial_owned/per_level_gain/price_ratio_pct/type_axis/battle_ratio/fork_ways_max/rest_ratio/reward_ratio/shop_ratio/indeg/terminals/rest_heal_pct/gp_drops/price_a/pool_shelf/mult_oor_warning/round_direction/wall_band/canvas/gate_gap/hud_band_h/hotspot_key/texture_rect/log_band_h_dig/info_panel_w/info_visible_layers/curio_candidate_count/feat_ticket_chance/feat_ticket_limit/feat_ticket_pity_step/quota_segment/cap_segment/value_segment/seal_place_ap_cost/per_level_bonus/reserve_jar。 - treasure 现役词 11(use_phase 归 G1;area_3x3/board_wide/dimension_tags/load_bearing/remove_mines/passive/ap_charge_safe/charge_reset/charges_per_adventure/mine_count_preview/refresh_stock_grant/shop_refresh_bonus/unlock_keystone_cost):`treasure_effects_test`/`treasure_target_violation_test`/guard 现役承载。 -> 注:per_level_shift_pct 已归附录 A 真缺口(G10);本附录为按族分组登记,T10 执行清单=重生成缺口集与本卡裁决的逐 id 差集(211−46),以登记时逐 id 清单为准。 +> 注:per_level_shift_pct 已归附录 A 真缺口(G10);本附录为按族分组登记,T10 执行清单=重生成缺口集与本卡裁决的逐 id 差集(210−45——cell_mark_overlay 经枚举器分类修正出圈后的基数),以登记时逐 id 清单为准。 ## 附录 C:B5 零命中裁决(并集口径:两探针 hits 归一化〔去尾序位+折叠空锚段〕后取交集) -- **排除(2 类非缺口)**:ap_bar 停手钮——iter54 卡 1 已修(数据 2026-11-06 早于合回);camp_object 七物件裸键——与场景路径键双源同物,并集后七件全命中(forge/notebook/campfire 由 screen_flow 承载)。 -- **豁免·开发面(9 键)**:debug_overlay 八钮+`(root)/Button#调试`——发布态恒隐玩家不可达面。 +- **排除(3 类非缺口)**:ap_bar 停手钮——iter54 卡 1 已修(数据 2026-11-06 早于合回);camp_object 七物件裸键——与场景路径键双源同物,并集后七件全命中(forge/notebook/campfire 由 screen_flow 承载);**开发面(10 键出圈,2026-11-07 用户裁非豁免)**——debug_overlay 八钮+`(root)/Button#调试`+inter 覆盖层「进入下一层」:调试面控件不入玩家可达测试宇宙,登记件按调试面边界过滤(DebugOverlay 类型+`ui.screens.inter_overlay`/`ui.screens.debug_badge` 引用单点;依据=main.gd:361「仅调试模式接线」+test-conventions.md:65 发布态恒隐);controls 豁免清单原开发面 3 条随本裁决删除——豁免语义=在玩家可达范围内特批不做,出圈面不占豁免。 - **豁免·进程终结(2 键)**:MenuScreen 退出游戏/camp_esc 退出游戏——真点即杀探针进程,按〔接线断言〕承载(既有结构断言在位)。 - **豁免·并集已覆盖(screen_flow 单侧零命中 17 键)**:status_panel 继续/settings 返回/confirm 取消·次选项/save_select 返回/forge 返回营地/图例钮/board_zone 状态/level_map 状态/树面解锁25·购买10·购买20/MenuScreen 进入存档等——ui_click 侧 hits 在案。 -- **真缺口·动线扩面(十二组,T9)**:图例关闭;节点继续;curio 确认选择+继续+刷新钮;商店购买+刷新钮;秘宝架购买10/购买25/装配/升级30;树面购买0/购买30/40/60(调试注钥后真点)/先手压制(fork B 侧);弃图刷新+确认弃图(→确认弹窗);地图放弃;进入下一层;Esc 浮窗设置;减动效开关(settings 两枚 switch_toggle);cell_mark_overlay 屏断言(并入 V14)。 +- **真缺口·动线扩面(十一组,T9)**:图例关闭;节点继续;curio 确认选择+继续+刷新钮;商店购买+刷新钮;秘宝架购买10/购买25/装配/升级30;树面购买0/购买30/40/60(调试注钥后真点)/先手压制(fork B 侧);弃图刷新+确认弃图(→确认弹窗);地图放弃;Esc 浮窗设置;减动效开关(settings 两枚 switch_toggle)。 diff --git a/roadmap.md b/roadmap.md index c50c28c3..dce07036 100644 --- a/roadmap.md +++ b/roadmap.md @@ -6,7 +6,7 @@ - **阶段**:M3——Alpha 版本的完整实现(2026-10-09 立规:未明令宣布完成前停留 M3,迭代只排 M3 需求,M4 不排期;根目录 stage.txt 为旧阶段开关仅存档)。 - **迭代位**:迭代 1–54 已完成。各迭代收口与批后收尾沿革查 git 提交信息与 `reports/`。 -- **下一步**:迭代 55 未编;待编池:QA harness 覆盖遗漏余量 B4/B5(待写卡,P0)、效果通道与事件词零现役普查(待写卡)、结算明细文案入表(待文档设计)、二三关棋盘观感(待设计+待美术)、测试面真输入化批发现四项待裁(待执行);EC8 热重载实装待用户另立条目。 +- **下一步**:迭代 55 进行中(实现段两项 L3 停机已裁、卡片轮 2 修订成立,续行收口中);待编池:效果通道与事件词零现役普查(待写卡)、结算明细文案入表(待文档设计)、二三关棋盘观感(待设计+待美术)、测试面真输入化批发现四项待裁(待执行);EC8 热重载实装待用户另立条目。 ## 里程碑时间线 @@ -88,7 +88,7 @@ | 迭代 52 | 已完成(2026-11-05) | 已退役(git 历史可考) | 2026-11-04 | ≈9.275 个工作日 | 已退役(git 历史可考) | | 迭代 53 | 已完成(2026-11-06) | 已退役(git 历史可考) | 2026-11-05 | ≈6.0 个工作日 | 已退役(git 历史可考) | | 迭代 54 | 已完成(2026-11-07) | 已退役(git 历史可考) | 2026-11-07 | ≈8.625 个工作日 | 已退役(git 历史可考) | -| 迭代 55 | 待开工 | reports/需求卡片-QA覆盖余量收口批-2026-11-07.md | 2026-11-07 | ≈8.25 个工作日 | — | +| 迭代 55 | 进行中 | reports/需求卡片-QA覆盖余量收口批-2026-11-07.md | 2026-11-07 | ≈8.75 个工作日 | — | - 历史行的「—」= 该列事实不可考:迭代 1~8 早于需求卡片制;编排时点与预计周期不再回溯,细节查 git 提交史。 - 「已退役(git 历史可考)」= 需求卡片或实现报告曾存在,已按「证据只留最新」退役;已完成迭代的实现报告列只填 reports/ 现存路径或本保留字,不填「—」。 diff --git a/待办清单.md b/待办清单.md index 9dbedee4..52374888 100644 --- a/待办清单.md +++ b/待办清单.md @@ -373,7 +373,7 @@ #### QA harness 覆盖遗漏余量——B4 本体缺口与 B5 控件零命中缺口复核分流(2026-11-07 登记,来源=批次移交,优先级=P0) -**实况**:前条「QA harness 三批缺陷与覆盖遗漏收口」已编卡部分(A2/B1/B2)随迭代 54 卡 1 完成整条删除,A1 随同批营地交互修复批消(均合回提交 5b5e6297,git 历史可考)。余量=B4 缺陷本体缺口 212 条、B5 控件零命中缺口,人工复核后分流(真缺口立卡/假缺口豁免清单核销);B3 精锚归「测试面真输入化分期」条目、B6 判据收紧轮归复核轮,不在本条。B5 增补实例(iter54 审计观察)=覆盖登记件自动登记通道=BaseButton pressed+营地自绘物件两源,地图画布与 bcard 非 BaseButton 真输入命中不产键。证据=reports/QA-harness三批-缺陷与覆盖遗漏报告-2026-11-06.md(八类逐条带文件行号与登记处指针)。2026-11-07 写卡段复核分流定案:重生成读数 211 条(报告 212 系 elite 行入表漂移)→真缺口 46 条补测/豁免 165 条登记,零待裁点;卡片(reports/需求卡片-QA覆盖余量收口批-2026-11-07.md)落 reports/。 +**实况**:前条「QA harness 三批缺陷与覆盖遗漏收口」已编卡部分(A2/B1/B2)随迭代 54 卡 1 完成整条删除,A1 随同批营地交互修复批消(均合回提交 5b5e6297,git 历史可考)。余量=B4 缺陷本体缺口 212 条、B5 控件零命中缺口,人工复核后分流(真缺口立卡/假缺口豁免清单核销);B3 精锚归「测试面真输入化分期」条目、B6 判据收紧轮归复核轮,不在本条。B5 增补实例(iter54 审计观察)=覆盖登记件自动登记通道=BaseButton pressed+营地自绘物件两源,地图画布与 bcard 非 BaseButton 真输入命中不产键。证据=reports/QA-harness三批-缺陷与覆盖遗漏报告-2026-11-06.md(八类逐条带文件行号与登记处指针)。2026-11-07 写卡段复核分流定案:重生成读数 211 条(报告 212 系 elite 行入表漂移)→真缺口 46 条补测/豁免 165 条登记,零待裁点;卡片(reports/需求卡片-QA覆盖余量收口批-2026-11-07.md)落 reports/。2026-11-07 实现段两项 L3 停机呈报(cell_mark_overlay 枚举分类误判/进入下一层调试专用面),用户裁两处均不豁免:显示正确性归渲染闸棋盘 golden+开发面登记层过滤出圈;卡片轮 2 修订成立(真缺口 45/枚举器分类修正/登记件过滤),实现段续行收口。 **改动面**:游戏代码