From 85470918f0e5791b8a024998aa407878a75ba2ef Mon Sep 17 00:00:00 2001 From: DKChan <524912269@qq.com> Date: Mon, 19 Oct 2026 05:24:26 +0800 Subject: [PATCH] =?UTF-8?q?docs(reports):=20=E8=BF=AD=E4=BB=A3=2031=20?= =?UTF-8?q?=E4=B8=89=E5=8D=A1=E6=94=B6=E5=8F=A3=E4=BA=A7=E5=87=BA=E7=89=A9?= =?UTF-8?q?=E2=80=94=E2=80=94=E5=AE=9E=E7=8E=B0=E6=8A=A5=E5=91=8A=EF=BC=8B?= =?UTF-8?q?=E4=BB=A3=E6=8B=8D=E6=9D=BF=E8=BF=BD=E8=AE=A4=E5=8D=95=EF=BC=8B?= =?UTF-8?q?=E5=8F=8D=E5=93=BA=E7=82=B9=E6=B8=85=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 两卡状态、改前改后读数对照(卡① 120 行真差异 0/jsonl 六面行数全同;卡② 差异面归因到裁断)、 变异验证 6 条记录、实机目检总清单 7 项、遗留读数义务 4 项、代拍板 13 项、反哺点 18 条。 禁写 design/ 与根规则文件:06 推进句、术语表、entities.yaml、art-bible/asset-path-map、 07 目检项、roadmap 行换代全部列进反哺点清单等你裁决后归文档批落笔。 --- reports/iter31-代拍板-2026-10-19.md | 44 +++++++++++++ reports/iter31-反哺点-2026-10-19.md | 60 +++++++++++++++++ reports/iter31-实现报告-2026-10-19.md | 94 +++++++++++++++++++++++++++ 3 files changed, 198 insertions(+) create mode 100644 reports/iter31-代拍板-2026-10-19.md create mode 100644 reports/iter31-反哺点-2026-10-19.md create mode 100644 reports/iter31-实现报告-2026-10-19.md diff --git a/reports/iter31-代拍板-2026-10-19.md b/reports/iter31-代拍板-2026-10-19.md new file mode 100644 index 00000000..82dadef8 --- /dev/null +++ b/reports/iter31-代拍板-2026-10-19.md @@ -0,0 +1,44 @@ +# 迭代 31 代拍板追认单(2026-10-19) + +- 批次:迭代 31 卡①「代码术语刷新批」(卡片 v1.4)+卡②「凭证件裁削批·代码侧」(卡片 v1.1),串行同迭代 +- 分支/worktree:`iter31-c1-term-20261019`/`g-plan2-iter31-c1-term`;`iter31-c2-curio-20261019`/`g-plan2-iter31-c2-curio` +- 口径:授权发生在卡片审问阶段(Q1–Q8/D1–D3),本单只登记**实现段超出卡片明列范围**的代拍板项,等你追认或推翻。 + +## 一、开工前你已裁的两项(不是代拍板,是裁决留痕) + +| # | 事项 | 你的裁定 | 落法 | +|---|---|---|---| +| R-1 | 素材实体名 `assets/art/board/flag_seal.png` 卡住卡① 的 V1「flag 零命中」(代码两处 res:// 字符串) | **甲:现在改素材名** | 改名 `seal_mark.png`;代码 2 处+`COL_FLAG`/`CURSOR_FLAG` 常量+闸件四处(`tools/run_all_gates.sh`/`render_gate.sh`/`golden_baseline_refresh.sh`/`path_check.py`)随批;盘上素材改名+导入重刷(素材不入 git);主区与两 worktree 三份同态 | +| R-2 | 卡① V7 对拍锚(`anchor.json` 的 jsonl 面是 sha256 清单,手改键名与摘要面不兼容) | **甲:重跑+重锚+改前改后 diff** | 卡① 重锚一次(三变体 120 局全跑),卡② 再重锚一次;改前原始面另起临时 worktree(`g-plan2-iter31-oldface`,检出 ed2dfaf6)实跑 dump 取证 | + +## 二、实现段代拍板清单(超卡片明列范围) + +### 卡① + +| # | 决定 | 依据与影响面 | +|---|---|---| +| 1 | 板面单字槽字形 `"旗"` → `"封"`(`board_view.gd:752` 赋值+`:785` 比较,消费面共 4 处:`board_view`/`ui_click_probe:556`/`ui_input_probe:217`) | 术语裁定「旗概念不存在」+字形槽是单字位;选「封」而非「封印」为保位宽与 golden 稳定。字体在册字形含「封」(`ui_font_asset_test` 原断言面即攻/雷/旗/封) | +| 2 | 大写常量 `COL_FLAG`→`COL_SEAL`、`CURSOR_FLAG`→`CURSOR_SEAL` | 卡片 §2 计数口径是小写 `flag`,未列大写形态;V1 精神是全族换代。零行为(纯标识符) | +| 3 | **守卫的禁字面量不换代**:`smoke_all.gd:1319` 的 `contains("旗")`、`ui_font_asset_test.gd:19` 的 `has_char("旗")` 保持原字 | 被检查的字不是对该字的使用;改写等于把「对外命名纪律」守卫自毁(禁「旗」变成禁「封印」)。卡片 §2 只订正了 `ui_assembler` 注释一处,未涵盖检查面。与卡片「术语表对照行不在本卡范围」同口径 | +| 4 | `game/README.md` 历史批注里的英文标识符(`_do_flag_place`/`flag_hit`/`minesweeper_flags` 等)随批换代 | 卡片 §5 只写「雷格/插旗随批替换」,而完成定义是 game/ 全局 grep 零命中;README 属本批直改文件。历史叙述的指称对象已改名,留旧名即失真 | +| 5 | 旧锚 `anchor.json` 的 RUNSUM 文本随代码同批改名,随后重锚(不再手改) | R-2 甲案;重锚后手改面作废 | +| 6 | `ui_assembler.gd:203` 注释按卡片 v1.4 订正句改写为「0=不设最小宽度」 | 卡片明列(非代拍板,登记免漏) | + +### 卡② + +| # | 决定 | 依据与影响面 | +|---|---|---| +| 7 | 完美保险专长**单行落表**(代拍板 3 的选型):`when counter(insurance_used) lt 1` 承载「本场首次」,`do` 自带 `counter_id`+`value` 由授予段消费点落账 | 卡片预设的「双行(forgive+counter_add)」实测不成立——效果引擎 `dispatch()` 只收集命中、**不代执行计数器**,counter_add 须由消费段显式调用;双行会在同一次 dispatch 内双双放行(第二次标错仍被豁免)。改单行后限次真生效(变异 `lt 1→lt 99` 证红)。DO_KEYS 的 `cap` 语义核不出「本 effect 累计上限」,故未走 cap 省行路线 | +| 8 | 豁免归因行 `source_class` 取 `"seal_miss"` | 旧代码 `_emit_row("insurance_used", "", …)` 空来源会触发行来源断言(`battle_orchestrator._assert_row_source`);旧路径因呈现层零接线从未真正走到,属**存量潜伏缺陷**。新订阅面一旦执行即红,故补真实来源(指回当格,满足「棋盘来源行必须指回真实格」);行型仍用在册 `insurance_used`,零新增行型 | +| 9 | `level_runner` 的 `voucher_insurance` 注入通道整链拆除(`set_voucher_grants` 降为两参) | 卡片 §2 落点表未列 `level_runner`(:478/:484/:646/:649/:652),但它是「战首注入链」的实际承载面;不拆即留死通道+参数空转。签名改动波及 `adventure_runner:920` 与 `smoke_all` 四处 rig | +| 10 | 卡② 新测试全部并入 `feat_vouchers_test.gd`(39 项),不新建套件 | 卡片代拍板 4(避免套件数膨胀);`run_all.gd` 登记面零改动(34 套不变) | +| 11 | 谓词抽成 `battle_orchestrator.perfect_sweep_earned()` 单点 | R2「真值表断言」需要可调用面;抽函数是零行为变化的取法(原式内联在清图奖励段),并使「漏减豁免」变异可证红 | +| 12 | 完美资格**归因行**的 `hl="perfect_broken"` 判据保持原样(仍按 `_perfect_hit_false == 1` 落,先于 `seal_missed` 发射) | 卡片契约 3 明令发射时机不得动;若把归因改到豁免之后再算,就得挪发射点或新增纠正行型(超范围)。后果:首次标错那一行仍带「完美已破」归因锚,而实际完美资格可能已被豁免保住——**文案层不一致,已列反哺点等你裁** | +| 13 | 断点兼容按「旧档多键不报错」验,不做迁移 | 卡片 L2 口径+卡① Q4 同源(Alpha 可作废) | + +## 三、需你裁决的两项(本单唯一待裁面) + +| # | 待裁点 | 两种读法 | 建议 | +|---|---|---|---| +| A | 玩家面残留禁字:`legend_overlay.gd:11` 图例行含「插错可左键直接挖开」「危险格吃**挖雷惩罚**」(v3.15 命名纪律:玩家面禁「雷」「插旗」) | 甲:本批已合回,另开小批清这两处文案;乙:视为卡① N2 未尽面,退回补做 | **甲**——「插错/挖雷」不属卡① 四个门禁词(金币/插旗/雷格/惩罚格),批内自扩判据=越权;已登记 06 候选 | +| B | 卡② 反哺:完美资格归因锚与豁免后实际态的文案层不一致(见代拍板 12) | 甲:维持现状(归因锚按「首次标错」语义);乙:文档批把 `perfect_broken` 的定义改写为「首次标错受检」;丙:改判据需动发射时机=需重开设计 | **乙**(改文档措辞即可自洽,代码零动) | diff --git a/reports/iter31-反哺点-2026-10-19.md b/reports/iter31-反哺点-2026-10-19.md new file mode 100644 index 00000000..beba1332 --- /dev/null +++ b/reports/iter31-反哺点-2026-10-19.md @@ -0,0 +1,60 @@ +# 迭代 31 反哺点清单(2026-10-19) + +- 口径:本批是代码实现批,禁写 `design/` 与根规则文件。下列每条写清「哪个文件哪一节/改成什么/依据」,由你在会话中裁决后归**文档批**落笔;落笔后本条即可删(`reports/README.md` 生命周期同口径)。 +- 依据批次:卡①「代码术语刷新批」v1.4(`design/research/需求卡片-代码术语刷新批-2026-10-18.md`)+卡②「凭证件裁削批·代码侧」v1.1。 + +## 一、06-待办清单(`design/gdd/06-待办清单.md`) + +| # | 条目 | 改成什么 | 依据 | +|---|---|---|---| +| 1 | 「代码术语刷新批——禁用词全库清扫+flag→seal 标识符重命名」状态行(:550 段) | 由「已写卡+已编迭代 31」推进为「已完成(迭代 31 卡①,合并 `<卡① merge commit>`,2026-10-19)」 | 卡① §5 首行;合回 commit 见实现报告 §一 | +| 2 | 「凭证件裁削批·代码侧迁移」状态行(:643 段) | 推进为「已完成(迭代 31 卡②,合并 `<卡② merge commit>`,2026-10-19)」 | 卡② §5 末行 | +| 3 | 新增候选条目(可选) | 「玩家面残留禁字词清扫——图例/呈现文案两处」(见本清单 §六-A) | 实现期实测发现 | + +## 二、术语表(`design/gdd/术语表.md`) + +| # | 节 | 改成什么 | 依据 | +|---|---|---|---| +| 4 | 「旗/控制」相关对照行 | 对照行代号换代:`flag_*` 契约键全部改记 `seal_*`;动作名=**封印**、呈现名=**封印印记**、单字字形=**封** | 卡① N1/N2+代拍板 1(字形取「封」) | +| 5 | 效果类型/事件词条 | 新增 `forgive_seal_miss`(本场首次封印落空豁免,domain=battle 首例)与 `seal_missed`(原 `flag_missed` 换代) | 卡② §5 末行;实装点 `effect_engine.gd:44`、`feats.tres` 第 30 行 | +| 6 | 显式补一条「禁字守卫面例外」 | 注明:守卫代码里的**被检查禁字**(`smoke_all.gd:1319` 的「旗」、`ui_font_asset_test.gd:19` 的「旗」)不属换代范围——被检查的字不是对该字的使用 | 卡① 完成定义与 V4 判据的边界,实现期已按此执行(代拍板 3),需成文防后来者误清 | + +## 三、registry(`design/registry/entities.yaml`) + +| # | 位置 | 改成什么 | 依据 | +|---|---|---|---| +| 7 | :268「机制键与规则(flag_place/flag_rules/标中旗三向效果)全不变…结构冻结」条款 | **显式废止**「结构冻结」条款,契约键整体换代为 `seal_*`(`seal_place`/`seal_rules`/`seal_hit`…) | 卡① §5 第三行(Q7 已裁可接受窗口期) | +| 8 | :633「104 总量」读数 | 改为 **102**(rare 档 9→7);注记里「仍为代码现值,改数随独立代码批同步」的“待同步”语气可销号 | 卡② §5 第二行;实装点 `adventure_table.gd:34` | +| 9 | :254 完美排雷判据句 | 补写口径:**有效误标=误标总数−豁免数**(`perfect_sweep_earned()`),板级判据仍要求 ≥1 标中 | 卡② §5 第二行含「判据句补写」;实装点 `battle_orchestrator.gd` 末段 | +| 10 | 奇物/凭证相关件目 | 同调电池条目注销、完美保险从资源类移入专长类(rarity rare) | 卡② §4 上游依据四项;实装点 `CURIO_KINDS`/`feats.tres` | + +## 四、GDD 奇物篇(`design/gdd/systems/冒险循环/奇物.md` v3.18) + +| # | 位置 | 改成什么 | 依据 | +|---|---|---|---| +| 11 | v3.18 版本历史行⑤与件表注「归独立批」指针 | 销号:代码侧已落地(删件/迁出/配额净删/引擎扩签/订阅式改写五项全落),指针改指本迭代合回 commit | 卡② §5 首行 | +| 12 | §1.3 异质性账清单 | 「完美资格」账的写法可补一句「豁免走订阅式自有累加账,不改写误标账」 | 卡② 契约 2 落地形态(实现无反哺新设计,仅既有陈述的换代) | + +## 五、07-体验验证清单(`design/gdd/07-体验验证清单.md`) + +| # | 改成什么 | 依据 | +|---|---|---| +| 13 | 新增目检项三条(卡① 玩家面换代):①商店界面显示「GP」不再出现「金币」;②图例/HUD 显示「封印/封印印记」不再出现「插旗/旗」;③结算明细来源显示「封印命中/封印未中」不再出现「标中旗/标旗未中」 | 卡① §7 正常流程体验三项 | +| 14 | 新增目检项两条(卡②):R5 完美保险专长卡面文案(desc 读作「本场首次封印落空,不计入完美封印判定」、零「雷」字);R6 三选一再不出现同调电池/完美保险,稀有档仅剩 ap/rap/time_sand 三种 | 卡② §7.1 R5/R6(本批禁写 07,先记实现报告总清单) | +| 15 | 注销两件奇物在 07 的既有观测项(若在册) | 卡② §5 第三行 | + +## 六、待你裁后才好落文的三项(本清单唯一非换代面) + +| # | 事项 | 建议落点 | +|---|---|---| +| A | 玩家面残留禁字:`legend_overlay.gd:11` 图例行现文含「插错可左键直接挖开」「危险格吃挖雷惩罚」(v3.15 玩家面禁「雷」) | 归 06 新条目+文案小批(详见代拍板单 §三-A) | +| B | 完美资格**归因锚**文案层不一致:首次标错那一行仍标 `perfect_broken`,而该次可能已被豁免 | 建议只改文档措辞(判据句读作「首次标错受检」),代码零动(详见代拍板单 §三-B) | +| C | 闸件面:`screen_flow_probe` 因 `user://save.json` 全 worktree 共用而假红(本次实测:主区基线与卡① worktree 首跑均红,把存档移开即全绿)。`run_all_gates.sh`/`probe_gate.sh` 是否应自带「跑批期隔离 user 目录」或「探针前预清档」 | 归工具批候选,登记 06(本批只按既有手册处置=人工移档) | + +## 七、美术与素材面(卡① R-1 甲案的文档欠账) + +| # | 文件 | 改成什么 | 依据 | +|---|---|---|---| +| 16 | `design/art/asset-path-map.md:30`(board/ 行现役清单) | 件名 `flag_seal.png` → **`seal_mark.png`**;类目措辞「砖面/旗印记…封印旗」→「砖面/封印印记…」 | 素材已实改名(盘上+两 worktree+主区三处同态),文档现役清单落后于代码=B3 路径核对器的声明面失实风险 | +| 17 | `design/art/art-bible.md`(board 域挂点条款、v3.9 P2 ②句中的 `flag_seal`) | 同件名换代+规格注记(32×32 封印印记可选件) | 素材命名唯一事实源在 art-bible,须与盘上同步;本批禁写 | +| 18 | `tools/path_check.py`/`render_gate.sh`/`run_all_gates.sh`/`golden_baseline_refresh.sh` | **已随卡① 改**(新件名),无需文档批再动 | 你已裁甲案授权本批改这四处 | diff --git a/reports/iter31-实现报告-2026-10-19.md b/reports/iter31-实现报告-2026-10-19.md new file mode 100644 index 00000000..2f22b993 --- /dev/null +++ b/reports/iter31-实现报告-2026-10-19.md @@ -0,0 +1,94 @@ +# 迭代 31 实现报告(卡① 代码术语刷新批 + 卡② 凭证件裁削批·代码侧) + +- 卡片:`design/research/需求卡片-代码术语刷新批-2026-10-18.md` **v1.4**、`design/research/需求卡片-凭证件裁削批-2026-10-18.md` **v1.1**(roadmap 迭代 31 行两卡,串行:卡①→卡②) +- 分支/worktree:卡① `iter31-c1-term-20261019`/`g-plan2-iter31-c1-term`;卡② `iter31-c2-curio-20261019`/`g-plan2-iter31-c2-curio`;取证专用临时区 `g-plan2-iter31-oldface`(检出 ed2dfaf6,跑完即删,不入库) +- 闸口径:两卡均触 `game/` → 代码域;卡① 另触 `tools/` 四处(素材名随批,你裁甲案授权)→ 合回前跑**全量档**(代码+文档两域),卡② 触 `game/`+`reports/` → 同按两域 +- 开工门:U0=本会话 `/iter 31`;开工检查的自洽扫描核出两处卡片缺口,均由你当场裁(见代拍板单 §一 R-1/R-2),零待裁点前提下才动工 +- 完成日 2026-10-19 + +## 一、各任务卡状态 + +### 卡① 代码术语刷新批 + +| 卡 | 状态 | 要点与取证 | +|---|---|---| +| T0 基线 | ✅ | 主区 `ed2dfaf6` 全量代码域跑批:冒烟 **1151 项 0 失败**/单元 **34 套全绿**/探针 --click 与 --full 仅 `screen_flow_probe` 红(后证=`user://save.json` 全 worktree 共用污染,移开存档即全绿,见 §五-3)/渲染闸·静态扫描·熵增闸绿 | +| T1 .tres 重命名 | ✅ | `action_economy.tres`/`settlement.tres`/`feats.tres`/`treasure_items.tres`/`reward.tres`/`status_effects.tres` 键名与显示名全换代(`seal_place_ap_cost`/`seal_hit_premium`/`"seal_hit": "封印命中"`/`"seal_miss": "封印未中"`/`echo_seals`/`smith_seals`/`seal_burst`/`dug_under_seal`/`seal_range_free`/`"GP 袋"`) | +| T2 schema 同步 | ✅ | `action_economy_table.gd`/`settlement_table.gd`/`treasure_item_table.gd`/`reward_table.gd` 与 T1 同批改(契约:键名与读取面禁分两批);卡片未列的 `flag_pull_ap_cost` 一并换代(同批同步=契约面) | +| T3 核心层 | ✅ | `effect_engine.gd` EVENTS/MINE_EVENTS/FACTS 三词表换代(含卡片 v1.4 补的 `seals_count`/`dug_under_seal` 全链);`minesweeper_rules.gd` signal `flag_judged`→`seal_judged`+`battle_orchestrator` 连接与回调同名;`grant_segment`/`action_economy`/`config_db_cross_validator` 等同批 | +| T4 呈现层 | ✅ | 18 个文件;UI 字符串「金币→GP」「插旗→封印」「此格已有封印印记」(按卡① T4.9 措辞);单字字形按代拍板 1 取「封」 | +| T5 冒烟与测试 | ✅ | 24 条明列落点+grep 兜网全部收敛;卡片 v1.4 补列的 5 文件(`screen_flow_probe`/`effect_words_t1_test`/`ui_probe`/`type_glow_shot_probe`/`fx_probe`)均改;净命中文件数 42→0(V1 判据口径) | +| T6 README+锚+验证 | ✅ | `game/README.md` 换代(含英文标识符历史注记,代拍板 4);`anchor.json` 走你裁的重锚路线;V1/V2/V3/V4/V5/V6/V7 全过(读数见 §二) | + +### 卡② 凭证件裁削批·代码侧 + +| 卡 | 状态 | 要点与取证 | +|---|---|---| +| T0 开工基线 | ✅ | 基于卡① 合回后的 master 建区;先跑 `git merge` 取卡① 成果并按卡片通则复核标识符与行号(卡片 §2 旧名 `flag_*` 全部按 `seal_*` 现形态执行) | +| T1 电池表侧删 | ✅ | `CURIO_KINDS` 摘 kind;`curio_quota/value/cap_attune_battery*` 三字段+三处分发表分支删净;表头注记换代 | +| T2 电池 runner 侧删 | ✅ | `_battery_pending`、断点回填与断点键、开局重置、`_apply_curio_pick` 路由分支、`choose_battery_target()`、`battery_pending()` 全清;`attune_charges` 账本与 `_seed_attune_charges()` **零改动**(契约 1) | +| T3 完美保险出池 | ✅ | kind/三字段/三处分发表分支删;`_pending_insurance` 与路由分支删;**注入链整链拆除**含卡片未列的 `level_runner`(`voucher_insurance` enc 键、`_voucher_insurance`、`set_voucher_grants` 降为两参)与 `battle_orchestrator._fx_insurance` 及注入点 | +| T4 引擎扩签+两账相减 | ✅ | `EFFECT_KINDS` 31→32 增 `forgive_seal_miss`;消费点在 `grant_segment` 的 `seal_missed` 命中循环内(新增 elif 分支,累加 `_perfect_forgiven` 并落 `insurance_used` 归因行,source_class=seal_miss);谓词抽成 `battle_orchestrator.perfect_sweep_earned()`(有效误标=误标−豁免);`_perfect_hit_false` 全程未被任何效果改写(契约 2);`seal_missed` 发射点与时机零改动(契约 3,变异②与「事件不吞」断言双向钉住) | +| T5 专长行落表 | ✅ | `feats.tres` 第 30 行 `perfect_insurance`/rarity rare/cap 省略/`on: "seal_missed"`/`kind: "forgive_seal_miss"`/`domain: "battle"` 显式写出(战斗域首例,行内+表头注双留痕);`FeatTable.validate()` 零违例;引擎装载后可派发(39 项验收组实测) | +| T6 配额重裁落地 | ✅ | `TIER_QUOTAS` rare 9→7、总量 104→102;`validate()` 硬断言过;`adventure.tres` 实例值核对(两件在本表无实例覆盖,零同步项);rare 档品种实测={ap, rap, time_sand} | +| T7 测试补齐 | ✅ | 并入 `feat_vouchers_test.gd`(代拍板 10):**39 项全绿**——出池词表/兑付反例/符号清零(`has_method` 编译级)/未知 kind 分发表兜底/账本保留/断点缺键与多键兼容/配额锚/专长行合法与 desc 零「雷」/限次一次/计数纯净/两账相减真值表(2−1、1−1、标中=0 三格)/事件不吞(守侧订阅对拍)/跨战清零;`forge_table_test` 词表闭集断言 31→32;变异验证见 §三 | +| T8 产出物+代码域闸 | ✅ | 本报告+代拍板追认单+反哺点清单三份落 `reports/`;合回前全量档回执见 §四 | + +## 二、改前/改后读数对照 + +### 卡①(纯重命名批——行为零变化的三层证词) + +| 面 | 改前(主区 ed2dfaf6 实跑) | 改后(卡① worktree 实跑) | 判读 | +|---|---|---|---| +| V1 `flag` 零命中 | 57 文件 617 处(净 543 处/42 文件) | **0**(豁免面仅 `size_flags_*` 与 `_fatal_flag`) | 过 | +| V4 四禁用词零命中 | 金币 39/插旗 62/雷格 75/惩罚格 1(另「旗」族 376) | **0**(`game/` 内 .gd/.tres/.md/.json 全域);「旗」字残留=0 | 过 | +| V2 冒烟 | 1151 项 0 失败 | 1151 项 0 失败 | 绿数一致 | +| V3 单元 | 34 套全绿 | 34 套全绿 | 一致 | +| V6/V7 对拍 | 改前=master 同代旧代码**实跑 dump**(`_parity_old`,三变体 120 局) | 改后=卡① 重锚(同 120 局) | **标签归一后 120 行真差异 0 行**;jsonl 事件流六面行数 **6/6 全同**(8051/43795/10579/40180/7060/43844),改前原始面含 `flag` 标签行 2175–10424/面,换代后仅标签名变、数值零漂移 | +| 锚的陈旧面(登记) | 合入前仓库里的 `anchor.json` 系 2026-10-15 冻结,与 10-18 的 master 已有 45/120 行漂移(历次代码批未重锚) | — | 该漂移**不属本批**;卡① 重锚把它一次性对齐(你的甲案口径) | + +### 卡②(裁断驱动的行为变化批——变化面须可解释) + +| 面 | 改前(卡① 合回后锚 `2c5cece4`) | 改后(卡② 重锚 `0170071d`) | 变化归因 | +|---|---|---|---| +| RUNSUM | 120 行 | 120 行,97 行差异 | 差异字段分布=`reward_events`×97、`relics`×78、`seal_*`×76、`taken/rounds/hero_dmg`… 全链派生自「稀有档候选集少两件」——三选一抽取序列改变→后续账全面位移;正是用户逐裁的预期效果面(非回归) | +| jsonl 行数 | 8051/43795/10579/40180/7060/43844 | 8945/39811/9620/38435/7499/45132 | 同因:牌库与豁免语义变化改变对局长度与事件数,方向不一(有增有减)=非单调劣化 | +| 完美保险 | 无玩家入口、`_fx_insurance` 恒 0、豁免行路径从未被执行 | 专长订阅式,每战首次标错豁免一次 | 39 项验收组+5 条变异证红 | + +## 三、变异验证记录(卡② §7.2 六条,最窄闸=`feat_vouchers` 套件) + +| 变异点 | 注入形态 | 结果 | 命中红项 | +|---|---|---|---| +| 两账相减漏减豁免 | `perfect_sweep_earned()` 改回 `_perfect_hit_false <= 0` | 红 ✅ | 「判定相减:误标 1 − 豁免 1 = 有效 0 且标中≥1 → 完美成立」 | +| 计数纯净(改回退式) | 消费点改 `oc._perfect_hit_false -= 1` | 红 ✅ | 「计数纯净:首次标错 _perfect_hit_false 落 1 未被回退改写(契约 2)」 | +| 限次 | 行 `when` 的 `lt 1` 改 `lt 99` | 红 ✅ | 「限次:第二次标错不获豁免(forgiven 恒 1)」 | +| 寿命域 | 行 `domain: battle` 改 `adventure` | **未红 ⚠️** | 本 rig 不可观测:`adventure` 域计数器在单测里由 `counters_seed({})` 起零,次战同样从 0 开始→与 `battle` 域表现相同。真正的差异面在 runner 的 `counters_export/seed` 跨战持久路径(需 MC 或 runner 级 rig)。**遗留读数义务**(见 §五-1) | +| 配额锚 | `rare: 7` 改回 `9` | 红 ✅ | 表加载失败→「数值表加载失败」(validate 硬断言在加载期即致命,符合「改总量=重裁」) | +| 电池出池 | kind 加回 `CURIO_KINDS` | 红 ✅ | 「出池词表:CURIO_KINDS 零两件」 | + +## 四、闸况与合回凭据 + +| 步骤 | 凭据 | +|---|---| +| 卡① 合回前重闸(全量档,两域) | worktree `g-plan2-iter31-c1-term` 回执 commit `2c5cece4`,domain=full,**all_green=true**,12 闸零新增红(含 05 渲染闸、11 对拍 check 绿、06/07/08/08c 文档四闸绿);主区合回 commit `4f953ce8` | +| 卡② 合回前重闸(全量档,两域) | worktree `g-plan2-iter31-c2-curio` 回执 commit `<待填>`,结果 `<待填>`;主区合回 commit `4f953ce8` | +| 合回后主区复跑 | `--editor --quit` 重刷类名缓存后 `run_all_gates.sh --code`:主区 `3e076e22` 复跑回执 **all_green=true**、无新增红;冒烟 1151 项 0 失败、单元 34 套全绿(卡② 合回后主区实态) | + +## 五、实机目检总清单(登记 07 的凭据面;真人检测只登记不阻塞) + +| # | 目检项 | 来源 | +|---|---|---| +| M1 | 商店界面货币显示「GP」,不再出现「金币」 | 卡① §7 | +| M2 | 图例/HUD 显示「封印/封印印记」,不再出现「插旗/旗」;板面单字字形现为「封」(代拍板 1) | 卡① §7 | +| M3 | 结算明细来源显示「封印命中/封印未中」 | 卡① §7 | +| M4 | 封印印记贴图(素材已改名 `seal_mark.png`)在 L1/L2/L3 三关均正常加载,非字形回退态 | 卡① R-1 甲案新增 | +| M5 | 完美保险专长卡面文案:「本场首次封印落空,不计入完美封印判定」,零「雷」字 | 卡② R5 | +| M6 | 三选一带不再出现同调电池/完美保险;稀有档仅剩 ap/rap/time_sand | 卡② R6 | +| M7 | 清图奖励的「完美第二份」在带完美保险专长时于首次标错后仍能拿到(订阅式豁免的实际观感) | 卡② R2 玩家面 | + +## 六、遗留读数义务与已知项 + +1. **卡② 寿命域变异不可由单测 rig 证红**(§三 第 4 行)——需 runner/MC 面补一次「adventure 域计数器跨战持久 vs battle 域清零」的对照读数,或在文档批确认该判据只由代码注释与装载面约束。未闭。 +2. **旧断点存档的 `battery_pending`/`echo_flags`/`smith_flags` 键**:Alpha 阶段按你裁定不做迁移;实机续玩旧档时该两族计数器归零,属预期。 +3. **`user://save.json` 全 worktree 共用导致探针假红**:本次实测把存档移开即全绿(六/七道闸均受影响)。已列反哺点 §六-C 归工具批候选。本批跑闸期间存档临时移开,收口时原样还原(备份件 `_save_json_backup_user_20261019.json`)。 +4. **卡片 §2 现状读数的两处不实**:卡① v1.4 已订正计数面;本批另实测发现卡片未列的落点共 8 处(`flag_pull_ap_cost`、大写 `COL_FLAG`/`CURSOR_FLAG`、`level_runner` 注入链、守卫禁字面量 2 处、README 英文历史注记、`smoke_all` 行数/牌库构成断言 4 处)——属卡片「发现未列落点按契约同步即可」口径,仍登记以便写卡段回看。