chore(迭代38·暂停收口): 用户裁暂停——分支状态完整留存——①验证集清单补提交正确重生成版(1596 条,合并解冲突时 add 先于重生成致提交版滞留 master 侧旧 1591 条——审计阻断②清偿,extract_checks --diff PASS);②W2 段注释尾缀笔误修正〔levelmap批 V1/V2〕(审计轻微项);③四份产出物落位(实现报告〔含闸红实况披露与审计结论回填〕/代拍板追认单/反哺点清单/验收审计报告)。分支尖闸面未闭合项=S13 gdstyle 恶化 2 条待用户后续裁(还债不可行已呈报,重生成基线待批);重启收口路径=裁后重跑全量域闸 → 绿回执 → 合并 master → 主区合并后零复跑 → worktree 清理

This commit is contained in:
DKChan committed 2026-10-26 16:57:50 +08:00
1 parent 0cd86469d5
commit 549b006ed5
6 files changed
+1999 -1665

No files matched your search

@@ -192,7 +192,7 @@ func _test_big_graph_fit(db) -> void:
screen.queue_free()
# ---- 布局缓存命中与换代失效〔levelmap批 W2〕----
# ---- 布局缓存命中与换代失效〔levelmap批 V1/V2〕----
# 真实入口 = open_choices 后的真实绘制路径(_draw_graph→_layout,与 hover→_candidate_at 链同一缓存层);
# 命中读数 = is_same 同实例判别(重算必产新字典、命中返回缓存原实例)——零生产计数器。
+1679 -1664
View File
File diff suppressed because it is too large. Load diff
+42
View File
@@ -0,0 +1,42 @@
# 迭代 38 代拍板追认单(2026-10-26)
> 各卡 §10 代拍板白名单内裁定的执行记录——授权发生在卡片审问阶段(白名单即预授权面),本单为批后备案确认;超白名单裁定零(如有会已停机呈报)。
## 卡①(levelmap 批)
1. payload 键名与 apply_status 形态:九键定值 level_label/gp_text/hp_text/hp_bar_redraw/attr_text/bonus_text/bonus_row_visible(hp_bar_redraw 恒 true——原逻辑无条件 queue_redraw 保真);视图方法名 apply_status。
2. 缓存命中读数实现形态:is_same 同实例判别(重算必产新字典、命中返回缓存原实例)——零生产计数器;换代失效判别改「新图查询非旧缓存实例+坐标不等」(原案「旧图回查」不可行:换代后 _content_size 已随 open_choices 重拟合,旧图混查属生产外用法——L2 行号漂移同级的实现事实修正,随卡记录)。
3. wr 断言挂点与消息文本:level_map_info_fog_test 新增 _test_layout_cache 段,尾缀〔levelmap批 V1/V2〕。
4. 提交切分与分支:单 worktree iter38、逐卡一笔提交。
## 卡③(效果文案批)
5. b2 头注表述:「词表实数以 EFFECT_KINDS 常量为准」;历史笔误叙事句按禁写变更记录红线保留。
6. 断言挂点与消息:effect_words_t1_test ③ 段后追加 ③-b,断言 message 含 str(FACTS.size()) 且不含「9 项」,尾缀〔效果文案批 V1〕。
## 卡④(明细收敛批)
7. 扩展行型串值:`extended`(推荐案);effect_id 取值:四效果沿用原行型串(推荐案)。
8. a3 来源类别:`fx_warning_beacon`(推荐案,对齐 fx_seal_smith 先例)。
9. a5 裸键呈现差异处置:申报差异(推荐案)——示警烟火行带 fx_warning_beacon 裸键,随目检清单覆盖。
10. 断言形态补充(L1/L2 白名单内两笔):①封印匠夹具改三枚不同雷格各封一次——_judge_seal 每格去重(_seal_consumed 以格实例为键),同格三封只计一次;②JSONL 对拍字段口径并入 source(playtest_logger.gd:133 对 source_class 的同值改名副本,随行平铺非本批新增)+剔除 session/diagnosis 墙钟行(parity_anchor 既有口径)。
11. 改前基线取证流程:改前 parity check 在 stash 干净态跑批(第一次跑批被并行改码污染、作废重取);T2 撤销证明按对照表三条全数实测(原案「任选其一」从全执行)。
## 卡⑤(奖励节点清扫批)
12. d1/d2/d3 措辞:「三选一停点」现状语义族;d3 定值「关卡奖励点(三选一——选毕推进)」。
13. wr2 断言:探针战报文本含新串/不含「内容待定」,挂 _tested_curio_head 捕获块(同一驱动路径承载)。
14. d4 必达形态:定向选路(候选含奖励节点优先)+捕获条件随修挂 `_node_curio_pending`(病根=原条件查通关停点态 `_curio_pending` 与奖励头部互斥恒不可命中——「拦截能力未证」实况病根,头部校验串零触碰;属白名单第 3 条「必达形态的具体实现」内)。
15. 中途故障两笔(异常分级处置留痕):①首轮探针 35 分钟无输出=wr2 断言行 `var logtext :=` 类型推断失败(Variant 返回)→ 解析错误探针未加载进程空转——显式 `: String` 修复(L1);②插桩诊断一轮(DBG 候选类型打印)取证后移除。
## 卡⑥(结算行缓冲批)
16. wr1-b 观测点落位:战中场(round≥2 且排播队列空)一次性判据——循环出口断言被收尾续玩重建段 log_view.clear() 合法冲掉(实测发现;卡面「T0 定落点」授权内)。
17. 错误行判据按实际标记执行:`Attempted to push_back … TypedArray`(卡面引述「SCRIPT ERROR 行」,实测该错误走 ERROR 通道非 SCRIPT ERROR——同一证据对象,判据更精确非放宽)。
## 卡⑦(调试入口批)
18. c2/c7 措辞:发布态恒隐语义族;c7 含「开发期临时启用改 `_debug_entry` 缺省本地不提交」运行者指引。
19. c5 直调落点:else 分支首行 `main._show_debug_overlay()`,后续断言原序保持;「置灰子断言」随恒隐语义退役(§8.2 申报随实现报告)。
20. c8 基线处置:显式重制(推荐案),改后 0.15% → 复闸 0.00%。
21. c6 清单同步范围:本批新增单测断言(卡①③④)随清单 --force 重生成一并同步(1588 条对账零差异)——清单维护锚「断言新增必须同步清单」的全量履行,超出卡面 c6 单行范围属对账工具全量口径(extract --diff 对全部新断言报新增,只改判一行无法过对账)。
+40
View File
@@ -0,0 +1,40 @@
# 迭代 38 反哺点清单(2026-10-26)
> 各卡 §6 关联文档同步面汇总——实现批禁写 `design/` 与根规则文件,以下逐条待用户裁决后由文档批落文。裁决方式:逐条「落文/不落/改写」。
## 来自卡①(levelmap 批)
1. **`待办清单.md`**——「结构审查未立项小件候审」条目拆注核对:件②归本卡(已收口 b85b3b45)、其余五件归卡②(**已停卡**,状态待回退,见实现报告 §三)。属状态核对注记。
2. **`design/engineering/architecture/architecture.md` §1.3**——「唯一越界者」清偿后该条纪律实况注记。**预期零改动**(纪律文本不变,T0 已核):l1 落地后视图内核心态拼装清零,纪律由「要求」变为「已达成」,无需改文;如文档批认为值得在纪律条目加「2026-10-26 清偿」凭据注,措辞自定。
## 来自卡③(效果文案批)
3. **`待办清单.md`**——「效果引擎校验文案计数错误」来源条目状态推进(已收口 a15370c5,完成即删)。
## 来自卡④(明细收敛批)
4. **`design/gdd/systems/战斗循环/战斗结算.md`「扩展行」节**——过渡句改写。原句:「现行实现的扩展行型值以专长实名串承载,效果身份清单与发射点以实现侧 `battle_orchestrator.gd` 文件头注为准;收敛为单一扩展行型+效果载荷的条目在待办清单在册」。落地后「实名串承载」半句与「条目在册」句均过时——建议改写为:「实现已收敛为单一扩展行型(type=extended)+effect_id 载荷;效果身份清单与发射点以实现侧 `battle_orchestrator.gd` 文件头注为准」(头注指引句保留,实现侧头注已换代两层词表+四效果身份发射点指引)。
5. **`roadmap.md`「当前位·下一步」句**——「结算明细日志行序重锚(2026-10-21 授权发起、时点另定)」指路句:重锚已随卡④裁点甲执行完毕(parity 锚换代+复闸绿),该句改写为已出账口径或摘除。
6. **`待办清单.md`**——「明细行扩展总型收敛批」来源条目状态推进(完成即删);「结算明细日志行序重锚批」条目同批出账(裁点甲已执行)。
## 来自卡⑤(奖励节点清扫批)
7. **`design/gdd/08-Alpha版本标准.md:113`**——「未结半=奖励节点现为零兑付直通占位,登记面=待办清单『奖励节点三选一实装』条」:注销后登记面死指+现状句与实现相悖——随注销改写(三选一已实装:奖励节点=三选一停点,呈现归 present_node_curio)。
8. **`roadmap.md`「当前位·下一步」待编池**——「奖励节点三选一实装(2026-10-25 新登记)」短句摘除(注销承接收口,卡⑤已落地)。
9. **`待办清单.md`**——「奖励节点过时表述清扫批」来源条目状态推进(完成即删)。
## 来自卡⑥(结算行缓冲批)
10. **`待办清单.md`**——「闸与探针存量噪声两件」条目拆注与状态推进:件①(产品码类型错)已收口 ce49a8ee;**件②(闸壳 per-suite 挂死与进程树回收,tools/probe_gate.sh+run_all.gd)留工程直改通道未实施**——条目不应整条删除,拆注保留件②。
## 来自卡⑦(调试入口批)
11. **`design/gdd/ux/battle.md:159/229`**——调试浮窗入口/DS_DEBUG 门控表述:删行后「入口在座」类陈述落空(含 2026-10-16 恒开批存量失真一并显形)——换代为发布态恒隐口径(角标恒隐、浮窗无 UI 开启口;开发期临时启用改 `_debug_entry` 缺省本地不提交)。
12. **`design/gdd/systems/跨局循环/生涯.md:18`**——调试入口描述随删行失真(T0 未逐句核,落文时按现行文本定位具体句),同口径换代。
13. **`design/engineering/test-conventions.md:49`**——「调试注入两层」节调试入口表述(DS_DEBUG/DebugOverlay 人工体验面):入口恒隐后该节「人工体验」通道描述需加发布态注记(调试注入两层的能力测试面不受影响——自动化测试不经 UI 直调核心写口,口径不变)。
14. **`design/engineering/architecture/code-architecture.json:227`**——「DS_DEBUG 门控」节点副标:写死行已删、发布态恒隐,副标换代。
15. **`待办清单.md`**——「调试入口写死行必须在发布前删除」来源条目状态推进(完成即删)。
## 来自卡②(停卡——随呈报非反哺)
16. 卡②待办条目状态回退与缺口补记拟稿见实现报告 §三(属呈报移交件,落笔归写卡段/用户,不属文档批反哺落文)。
+117
View File
@@ -0,0 +1,117 @@
# 迭代 38 实现报告(2026-10-26)
- 分支:`iter38`(worktree `D:\code\g-plan2-iter38`);基点 b23fa50d(编排提交),收口合并点 416ca84a(并入 master 2465a73b)。
- 编入七卡,实际收口六卡;卡②(结构小件定点修批)施工中途停卡呈报退上游(§卡②),改动已还原、零提交。
- 全量域闸:`tools/run_all_gates.sh --code` 批末一次(回执见 `game/tests/.gates/receipt.json`,结论见 §闸)。
## 一、各卡状态
| 卡 | 状态 | 收口提交 | 核心读数 |
|---|---|---|---|
| ① levelmap 装配越界与 BFS 缓存 | 已收口 | b85b3b45 | wr1 对拍 changed=0.00%;wr2 缓存命中/换代双绿 |
| ② 结构小件定点修(p1–p6) | **停卡呈报退上游** | (无提交) | wr5/wr6 验收载体与闸机错误扫描结构性互斥(§卡②) |
| ③ 效果引擎校验文案计数修正 | 已收口 | a15370c5 | wr1 断言绿;撤销红绿复现 |
| ④ 明细行扩展总型收敛 | 已收口 | d5a03db1 | 五断言+负面套件绿;重锚复闸三变体全同;JSONL 对拍 PASS |
| ⑤ 奖励节点过时表述清扫 | 已收口 | 00ed0236 | wr1 grep 零命中;wa4 必达真执行;撤销两条红绿复现 |
| ⑥ 结算行缓冲类型错修复 | 已收口 | ce49a8ee | 错误行 148→0;摘要恢复断言绿;撤销红绿复现 |
| ⑦ 调试入口写死行删除 | 已收口 | 5b5214f4 | 三断言反转绿;清单对账零差异;基线重制复闸 0.00% |
## 二、实际对照表(改动—验收,逐卡精要)
尾缀 grep 通道:〔levelmap批 V1/V2〕〔效果文案批 V1〕〔明细收敛 V2〕〔卡⑤〕〔卡⑥ wr1-b〕按各断言消息文本 grep 可互查。
### 卡①
| 需求点 | 改动 | 验收测试 | 层级 | 真实入口 | 撤销证明 | 结果 |
|---|---|---|---|---|---|---|
| wr1 呈现零变化 | l1 迁装+l2 缓存+l3 字体(level_map_screen.gd+main_adventure_flow.gd) | golden 对拍 changed=0.00%(level_map.png 改前基线)+shot_probe 问题=0 | 渲染+探针 | shot_probe 真实窗口跑批 | 等价重构申报(对拍差异非零即红) | 绿 |
| wr2 缓存生效与失效 | l2 缓存层 | 〔levelmap批 V1〕命中(is_same 同实例)+〔levelmap批 V2〕换代失效 | 单元 | level_map_info_fog_test 经 open_choices+layout_probe 真实路径 | 回退缓存 hunk → V1/V2 红(实测) | 绿 |
- l4 基线建立:改前 shot_probe level 帧落盘 `game/tests/golden/level_map.png`(跨跑次一致性 0.00% 实测在案);时点铁序遵守(基线先于一切码改)。
- T0 契约 3 论据链核验:`_fit_canvas`(open_choices :276)先于四调用点首触缓存——成立;`nodes()` 返回 level_row 内部数组,同关内内容稳定。
- 喂入通道:生产调用点恰两处(main_adventure_flow :122/:173),两处后接 `apply_status(level_map_status_payload(...))`;shot_probe GP 徽章断言经真实生产路径兼容验证。
### 卡③
| 需求点 | 改动 | 验收测试 | 层级 | 真实入口 | 撤销证明 | 结果 |
|---|---|---|---|---|---|---|
| wr1 文案与实数对齐 | effect_engine.gd :360 动态实数+:21-23 头注 | 〔效果文案批 V1〕message 含 FACTS.size() 且无「9 项」 | 单元 | validate_trigger_row static(与加载期同函数) | 回退 b1 hunk → 断言红(实测)→ 还原复绿 | 绿 |
- T0 复核:FACTS 19 项/EFFECT_KINDS 32 项(脚本计数在案);全文件 errs.append 10 处仅 :360 含计数——无同类残留。
### 卡④
| 需求点 | 改动 | 验收测试 | 层级 | 真实入口 | 撤销证明 | 结果 |
|---|---|---|---|---|---|---|
| wr1 行型收敛 | 六发射点 type→extended+effect_id 载荷 | 断言①–⑤+grep 判据+JSONL 读数对拍 | 单元+接口 | feats 装配驱动真实结算管线 | 回退被断言钉住的发射点 → 对应断言红(实测①) | 绿 |
| wr2 必载 effect_id | _emit_row 校验段(emit 之前) | 负面套件 extended_row_violation_test(expect=1, negative)+manifest 登记行 | 单元(负面套件) | _emit_row 真实直调(独立进程) | 回退校验段 → 违约行照发 exit 2(实测②) | 绿 |
| wr3 空来源修复 | grant :281 source_class→fx_warning_beacon | 断言⑤含 source_class==fx_warning_beacon | 单元 | warning_beacon 装配+封印命中 | 回退 a3 → wr3 红(实测③) | 绿 |
| wr4 parity 重锚(裁点甲) | anchor.json 重制 | 改前 check 绿基线+改后 freeze+复闸全同 | 集成 | parity_anchor 三变体真实跑批 | 重锚前后读数留档(§读数) | 绿 |
- JSONL 读数对拍(wr1 附属):改前/改后各 6 文件(71000/72000/73000×normal/perfect)逐行比对——type 迁移 fx_reveal→extended 77+120+67=264、fx_preview_area→extended 136+168=304、insurance_used/mine_neutralized 0→0,与 T0 基线计数逐一对账;**字段口径外零差异**(口径=type/effect_id/source_class/source 四字段+剔除 session/diagnosis 墙钟行——source 为 playtest_logger.gd:133 对 source_class 的同值改名副本,随行平铺;ts 属墙钟已按锚口径剔除)。
- a5 核验结论(零改动依据):battle_log_view `_format_row` 对四实名串本无 match 分支(全落 :210 fallback 按 display_name 呈现)、AGG_TYPES=["reward_ineffective"] 不含扩展行——收敛后扩展串同样落 fallback,a1 面呈现输出逐字节不变。**a3 面呈现差异如实申报**:示警烟火行从无来源标注变为带 `fx_warning_beacon` 裸键渲染(与 mine_neutralized 行 `fx_seal_smith` 裸键先例一致,来源归因可见性归位;§10 白名单第 4 条推荐案已执行)。
- 改动面封闭核验:基础 9 类发射零触碰;SOURCE_EXEMPT_TYPES/CLASSES 逐字不动(fx_reveal 豁免按来源类别层继续生效);随机流九名零触碰;grep 判据=六发射点第一参全 extended+A8① 行型值类残留零命中(②–⑦保留类各现位抽查在案)。
### 卡⑤
| 需求点 | 改动 | 验收测试 | 层级 | 真实入口 | 撤销证明 | 结果 |
|---|---|---|---|---|---|---|
| wr1 注释清扫 | level_runner :477-478/:10+autoplay :484 | grep 两串(零兑付直通/内容待定+内容未定)零命中 | 静态 | grep 真实跑批 | 恢复原句 → 命中即红 | 绿 |
| wr2 玩家文案换代 | battle_narrator :15 | 探针战报断言(含新串/不含旧串)〔卡⑤〕 | 探针 | 奖励节点真实战报路径 | 回退 d3 → wr2 单红(实测) | 绿 |
| wr3 wa4 转正 | ui_click_probe 捕获条件+必达判据+定向选路 | 直跑绿+真执行+未到停点即红 | 探针 | 三选一停点真实路径(press_candidate/press_card 真实按钮) | 回退 d4 条件 → wa4 必达红(实测) | 绿 |
- **wa4 转正病根修正(d4 实现形态,§10 白名单第 3 条)**:原捕获条件查 `_curio_pending`(通关三选一停点态)而奖励节点停点住 `_node_curio_pending`——两态互斥使原条件带「关卡奖励点」头部串恒不可命中,即「拦截能力未证」的实况病根;转正随修挂正确停点态,头部校验串本体零触碰。定向选路=候选含奖励节点优先(press_candidate 真实命中路径零变化)。
- wa4 真执行证据:直跑日志 `_tested_curio_head` 捕获成功、问题=0(/tmp/iter38_click6→c7_click 各跑次一致)。
- extract_checks 提取面核查:探针断言不进清单(工具扫 tests/unit|integration|system_test)——无清单同步义务。
### 卡⑥
| 需求点 | 改动 | 验收测试 | 层级 | 真实入口 | 撤销证明 | 结果 |
|---|---|---|---|---|---|---|
| wr1-a 错误行消失 | battle_log_view :17 类型一行 | 探针日志该 push_back 错误行归零(改前 148 处基线) | 探针+日志 | ui_click_probe 真实冒险路径 | 回退 g1 → 148 错误行复现(实测) | 绿 |
| wr1-b 摘要恢复 | 同上 | 正向断言(round≥2 且队列空时 _summary 非空)〔卡⑥ wr1-b〕 | 探针 | finish_settlement_round 真实轮界 | 回退 g1 → 断言红(实测同跑次) | 绿 |
- wr1-b 观测点落位说明(L1 白名单内):挂主循环战中场(round≥2 且排播队列已空=轮首分隔行已消费),不挂循环出口——收尾续玩重建段会再走 `log_view.clear()`,出口断言会被合法清空冲掉(实测发现并修正)。
- 错误行形态实证:`ERROR: Attempted to push_back a variable of type 'String' into a TypedArray of type 'Dictionary'`(非 SCRIPT ERROR——与 G2「断言仍绿」及闸机扫描不误报自洽;卡面引述的「SCRIPT ERROR 行」按实际标记执行,判据对象同一直接证据)。
### 卡⑦
| 需求点 | 改动 | 验收测试 | 层级 | 真实入口 | 撤销证明 | 结果 |
|---|---|---|---|---|---|---|
| wr1 发布态恒隐 | main.gd :199 删除+三断言反转+c6/c8 随动 | system_test V2f+click 设置面+tune 对局段+清单对账+新基线 | 系统+探针+渲染 | 三宿主真实跑批 | 恢复 :199 单行 → 三断言齐红(实测) | 绿 |
| wr2 对局中开窗回归保载 | c5 直调承载 | 浮窗可见/输入锁不锁/六项读数断言保持绿 | 探针 | _show_debug_overlay 真实单口直调 | 回退=c5 整段回原形(契约 4 口径) | 绿 |
- 契约 1 核验:`grep -c _debug_entry main.gd` 恰 2(:73 声明/:200 读取)。
- c8 基线重制(§10 落定值=显式重制):改后实测 changed=0.15%(幽灵角标消失,≈卡面预估 0.14%)→ 重制后复闸 0.00%;README 判定记录登记在案。
- 清单对账:`extract_checks.py --diff` 零差异(本批新增断言随清单重生成,1588 条——含卡①③④新增单测断言的全量同步)。
## 三、卡②停卡呈报(实现段零裁断——上游缺陷移交)
**停卡时点**:T1 实装中(p1–p6 六件全部实装完成、wr4 断言载体核查时发现结构性冲突)。改动已还原(WIP 补丁留存 /tmp/iter38_card2_wip.patch,172 行),零提交、不阻塞其余卡。
**缺陷**:wr5/wr6 验收载体与闸机错误扫描结构性互斥。卡片处方(§7 接口块)=在现役**非负面**单测套件内直调 `board_generator._fatal()`/`open_stream("bogus_purpose")` 触发 assert 取证断言;但 headless 实测(探针脚本在案):GDScript assert 失败必产 `SCRIPT ERROR` 行且**不可捕获、只中断当前函数**——run_all.gd:133-136 对非负面套件输出含该标记即判 FAIL。即:断言跑到的同跑次闸 02 必红,「wr5/wr6 绿+全套闸全绿」不可同时成立。此与卡④ grilling 第二轮发现的同款机制缺陷完全同型(卡④因此立了独立负面小套件),卡②两轮复核均未捕获。
**两种读法**:①按卡面处方实装 → wr5/wr6「绿」但全套闸红(完成定义第 1 条自相矛盾);②改载体为独立负面小套件 → 卡面「零新增文件、wr5 落 round_flow_skill_pool_test 增断言」等节全部失准,属卡片设计变更非实现细节。
**建议案**:退回写卡段,比照卡④先例改处方——wr5/wr6 断言落独立负面小套件(各一或合并一件,manifest `expect=1, negative=true`),撤销证明口径同步改「退出码 0 ≠ expect 1」;文件结构图「零新增文件」句、估时(+0.1d 量级)、§8.1 对照表落点随更。另:卡② §9 L3 已点名的 master_seed<0 分支同病根第二处(:104-106 assert 后无 return)仍在册待用户裁另立或并批——若并批,建议与 wr6 同套件承载(同文件同族负路径)。
**待办清单对应条目状态回退拟稿**:「结构审查未立项小件候审」条目状态「已写卡+已编迭代 38」→ 回退「已写卡(v1.2,退回补验收载体处方)」;缺口补记=wr5/wr6 载体改负面小套件+master_seed 分支处置待裁。落笔归写卡段/用户(本批禁写根规则文件)。
## 四、闸与读数
- 全量域闸:`tools/run_all_gates.sh --code` 批末一次(416ca84a 时点,exit=1 未全绿);其后闸红必修一笔(0cd86469 S11 四处禁用词换代——并 master 文档批「通关口径统一」63763565 退役词新增所致)+W2 尾缀笔误随暂停收尾修正。**分支尖闸面现状(未闭合,用户 2026-10-26 裁「暂停收口」)**:09 静态扫描 S13 gdstyle 恶化 2 条——`battle_orchestrator.gd` max-file-length 1314(基线 1302,卡④ a4 头注必载内容所致)、`level_map_screen.gd` max-class-variables 22(基线 21,卡①契约 3 缓存成员所致);压缩还债经计算不可行(极限 1305 > 1302 且削减卡片要求内容),闸壳「经用户批准随批重生成基线」通道待用户后续裁决。其余闸段(00/01/02/03/04/05/10)全绿;S11/S12 修复后单件复跑 ok 在案。
- MC 对拍:卡④触结算行协议面(零数值改动)——按裁点甲以 parity_anchor 三变体对拍承载:改前 check 全同(stash 干净跑批实测)→ 改后 freeze 立新锚 → 复闸 RUNSUM+JSONL 双面逐位一致;**审计独立复跑三变体对拍一致**(审计报告在案)。锚已随卡④提交换代。
- 卡④ T0/T2 读数:改前行型计数 fx_reveal 264/fx_preview_area 304/insurance_used 0/mine_neutralized 0;改后迁移计数逐一相抵;基线 JSONL 留存 /tmp/iter38_pre_jsonl(临时区,对拍读数已录本报告)。
## 五、实机目检总清单(登记不阻塞)
1. 选路屏状态栏/悬停高亮(卡①——l1 重构后目检一项)。
2. 选档删除确认流(卡②——未实施,随停卡不登记)。
3. 奖励节点战报行新文案「关卡奖励点(三选一——选毕推进)」(卡⑤)。
4. 结算明细带轮摘要显示(卡⑥——「上轮摘要」恢复后的观感)。
5. 结算明细屏四效果行目检+示警烟火行来源标注(卡④——扩展行 fallback 呈现与裸键标注)。
6. 菜单/设置面/对局中调试角标恒隐(卡⑦三项)。
## 六、遗留读数义务与在飞注记
- 卡②WIP 补丁:/tmp/iter38_card2_wip.patch(临时区——若写卡段改卡后重启施工,以此为底稿重做而非直接复用,行号须按合并后 master 复核)。
- 卡④ a3 面呈现差异(示警烟火行 `fx_warning_beacon` 裸键)随 §五.5 目检覆盖;settlement.tres source_label_map 补键属 §10 备选未裁不实装。
- parity 锚换代完成:「结算明细日志行序重锚批」待办条目出账依据随卡④提交在案(文档批落文见反哺点清单②)。
## 七、独立验收审计结论
审计报告:`reports/iter38-验收审计-2026-10-26.md`——结论**不通过**(合并前置未满足,与用户「暂停收口」裁决一致)。六卡实质面全部核实通过(逐卡对照表、撤销证明抽查、削弱核查零未申报、卡④ parity 重锚审计独立复跑一致);两项阻断均为闸面/账面而非码面:①S13 恶化 2 条(=§四已披露、用户已裁暂停待后续处置的事项);②验证集清单提交态失同步(合并解冲突时 git add 先于清单重生成——提交版为 master 侧旧 1591 条,正确的 1596 条重生成版滞留工作区;暂停收尾已补提交,`extract_checks --diff` PASS 在案)。轻微两项(W2 尾缀笔误、产出物未跟踪)已随暂停收尾修正/提交。
+120
View File
@@ -0,0 +1,120 @@
# 迭代 38 独立验收审计报告(2026-10-26)
- 审计人:独立验收审计会话(未参与实现);审计基点=iter38 分支尖 `0cd86469`(worktree `D:\code\g-plan2-iter38`,全程只读+最窄复跑,零文件改动——卡③卡①撤销复现的临时改动均当场 `git checkout --` 还原)。
- 审计对象:卡①③④⑤⑥⑦ 六卡收口提交链(b85b3b45→a15370c5→00ed0236→ce49a8ee→d5a03db1→5b5214f4→416ca84a 并 master→0cd86469 S11 闸红必修);卡②停卡零提交不在范围(停卡留痕 /tmp/iter38_card2_wip.patch 10215 字节在案,worktree 工作区无残码)。
- 输入合同:七张需求卡片 §8.1/§8.2/§8.3+实现报告 §二 对照表+代拍板追认单 21 条。
## 结论行
**不通过——六卡代码面、断言面、撤销证明、削弱申报全部核实通过,卡④ parity 重锚经审计独立复跑逐位一致;但分支尖存在两项闸面未闭合:①09 静态扫描仍红(gdstyle 两条指标恶化未还债未随批重生成基线,批末闸回执 all_green=false 且实现报告未披露);②合并把验证集清单退回 master 旧版(本批新增断言在提交版清单零命中),正确的再生成件躺在 worktree 未提交。两件清偿+闸复跑绿回执后方可合并。**
## 一、逐卡逐行核对表(实现报告 §二 vs 实码)
### 卡① levelmap 批(b85b3b45)
| 报告行 | 核对项 | 结果 | 依据 |
|---|---|---|---|
| wr1 | golden 基线+对拍 0.00% | 通过(读数采信,复跑受限) | level_map.png 与码改同提交(git log --diff-filter=A 唯一 b85b3b45);golden/README 登记行在案(改前建基、跨跑次 0.00% 后落盘);审计窗口化 shot_probe 复跑在本环境 180 秒挂起无输出(exit 124,引擎 OpenGL 启动后停滞——环境性问题非码问题),像素级未独立复跑;收口时点闸 05 渲染闸绿(shot_probe 七屏 A-D 断言)佐证渲染面健康 |
| wr2 | 〔levelmap批 V1/V2〕 | 通过 | level_map_info_fog_test.gd:209/:224 两断言在位;经 open_choices+layout_probe(视图 :524 既有件、ui_input_probe 同款)真实绘制路径;缓存层在 `_layout` 内、四调用点零改动(diff 核实) |
| l1 装配迁移 | 喂入通道 | 通过 | main_adventure_flow :122-123/:174-175 两生产调用点均 open_choices 后接 apply_status(level_map_status_payload(...));payload 七键与代拍板 #1 一致;视图侧拼装 grep 残留仅 :204 注释/:207 血条绘制读 max_hp(绘制面非拼文案)/:278 tint 层号——清零判据成立 |
| l3 字体提取 | 函数首单取 | 通过 | :429 `var font := get_theme_default_font()`,三处 draw_string 共享(diff 核实) |
### 卡③ 效果文案批(a15370c5)
| 报告行 | 核对项 | 结果 | 依据 |
|---|---|---|---|
| wr1 | 〔效果文案批 V1〕 | 通过 | effect_words_t1_test.gd:48-51 断言在位:message 含 str(FACTS.size()) 且不含「9 项」;validate_trigger_row static 与加载期同函数(卡面处方,非绕过) |
| b1/b2 | 动态实数+头注治理 | 通过 | effect_engine.gd:360 `%d 項 % FACTS.size()`;:21-23 头注去写死计数,历史笔误句按代拍板 #5 保留;errs.append 全文件仅 :360 含计数(grep 复核);FACTS 19/EFFECT_KINDS 32 脚本计数复核一致 |
| 改动面封闭 | 契约 1 | 通过 | 提交 diff 恰两文件共 6 行(+4/-2),零越界 |
### 卡④ 明细收敛批(d5a03db1)
| 报告行 | 核对项 | 结果 | 依据 |
|---|---|---|---|
| wr1 行型收敛 | 六发射点 | 通过 | orchestrator :156/:164/:169+grant_segment :271/:281/:309 第一参全 `extended`,display_name/value/highlight 逐字不动(diff 逐行核);grep 判据=四实名串作第一参零残留 |
| wr2 必载 effect_id | a2 校验段 | 通过 | _emit_row 体内 `step_row.emit` 之前(先于 _assert_row_source),缺载 assert+return 零发射;负面套件 extended_row_violation_test 直调 _emit_row 为卡面 §7 明文处方,非绕过 |
| wr2-np | 负面套件+manifest | 通过 | 套件在位(违约直调→零发射→合法对照行照发→quit(1));run_all.gd:73 登记 `expect=1, negative=true`;审计直跑实测 exit=1、输出「违约零发射+合法照发(a2 校验在位)」 |
| wr2 断言①–⑤ | 两现役套件 | 通过 | round_flow :1012/:1046/:1063(feats 装配驱动真实 step_row 信号捕获+_judge_seal/_flush_pending_reveals 真实管线)+treasure :333/:355(套件首次 feats 注入,V6 形态移植;三枚不同雷格各封一次=代拍板 #10①);其中两条用 Kit.check_quiet——不进验证集清单提取面(工具只提 `check(`),清单算术 1591+5=1596 与此吻合 |
| wr3 空来源 | a3 修复 | 通过 | grant :281 `""`→`fx_warning_beacon`;断言⑤含 source_class 判据 |
| wr4 parity 重锚 | 锚换代+复闸 | 通过(审计独立复跑) | anchor.json 在 d5a03db1 换代:恰 3/6 条 sha256 变更(三变体 perfect 面)、rows 字段零变化——与读数「迁移集中于部分文件、RUNSUM 数值面零变化」自洽;审计复跑 `python tools/parity_anchor.py check` exit=0,三变体 RUNSUM+JSONL 双面逐位一致,实算 JSONL 哈希(962b6f68…/06cb4dcc…/c3d0d37c…)与新锚逐位相同 |
| JSONL 读数对拍 | 264/304/0/0 | 自洽(原始件未独立复算) | 对拍原始 JSONL 留存 /tmp/iter38_pre_jsonl 临时区不可复取;锚 diff 形态(3/6 哈希变、行数零变)与读数口径一致;T0 计数随报告留档 |
| a5 呈现核验 | battle_log_view 零改动 | 通过 | d5a03db1 未触该文件 |
| 改动面封闭 | 契约 1/3 | 通过 | SOURCE_EXEMPT_TYPES/CLASSES 两常量在 diff 中仅作上下文出现、现值逐字未动;`open_stream("fx_reveal")` 等随机流零触碰;基础 9 类发射点零触碰(全 diff 仅六发射点+校验段+头注) |
### 卡⑤ 奖励节点清扫批(00ed0236)
| 报告行 | 核对项 | 结果 | 依据 |
|---|---|---|---|
| wr1 | 两串 grep 零命中 | 通过(复跑) | 审计复跑两条 grep 命令均零输出;E2 豁免面未被顺手改:autoplay :220/:381 行为性准确表述保留、ui_click_probe :697「卡片前提缺陷记录」历史注记保留 |
| wr2 | 战报文案断言〔卡⑤ wr2〕 | 通过(审读替代复现) | ui_click_probe :428-432:log_view 含「关卡奖励点(三选一——选毕推进)」且不含「内容待定」;battle_narrator :15 新文案在位;断言挂奖励节点停点捕获块,同一驱动路径 |
| wr3 wa4 转正 | 必达判据〔卡⑤〕+定向选路 | 通过(审读替代复现) | 捕获条件 `_curio_pending`→`_node_curio_pending`(病根修正,头部校验串本体零触碰);:725-728 全程未到停点即红;定向选路只改 press_candidate 索引策略、真实按钮命中路径零变化;press_card/press_confirm 真实按钮路径。撤销证明按审计指令以代码审读替代(探针复现 >10 分钟);报告声明回退 d3→wr2 单红、回退 d4→必达红两条实测在案 |
### 卡⑥ 结算行缓冲批(ce49a8ee)
| 报告行 | 核对项 | 结果 | 依据 |
|---|---|---|---|
| wr1-a | 错误行 148→0 | 通过(审读替代复现) | 改动恰 :17 一行 Array[Dictionary]→Array[String];148 基线读数与归零不可廉价复跑(探针全程约分钟级×改前改后),按审计指令以代码审读替代:错误机理(TypedArray 异型 push_back)与修复一行因果闭合 |
| wr1-b | 〔卡⑥ wr1-b〕断言 | 通过(审读替代复现) | ui_click_probe :31/:560-566:观测点在主循环战中场(round≥2 且 _row_queue 空=轮首分隔行已消费),一次性判据,非循环出口——与代拍板 #16 落位说明一致;判定读 `_summary.text` 非空 |
| 无断言删除 | 削弱面 | 通过 | 提交 diff 零断言删除,探针仅 +9/-2(新增状态位+断言块) |
### 卡⑦ 调试入口批(5b5214f4)
| 报告行 | 核对项 | 结果 | 依据 |
|---|---|---|---|
| wr1 发布态恒隐 | 删行+三断言反转 | 通过 | main.gd :199 写死行已删(diff 核实,:73/:200 保留);grep -c `_debug_entry` main.gd 恰 2(审计实测);system_test V2f、click :324-327、tune :117-118 三处反转形态在位 |
| wr2 直调承载 | c5 | 通过 | tune else 分支 `main._show_debug_overlay()` 直调(:61 先例),后续浮窗可见/输入锁/六项读数断言原序保持;:44-49 程序性段零触碰(diff 核实) |
| 撤销证明 | 恢复 :199 三断言齐红 | 通过(审读替代复现) | 三处反向断言判据直接钉 `_debug_entry` 恒 false 语义,恢复写死行必红——机制审读成立;报告声明实测在案。置灰子断言删除有代拍板 #19 记录 |
| c6/c7/c8 随动 | 清单/README/基线 | 通过(c6 见问题②例外) | game/README 发布态表述换代;menu_boot.png 重制(Bin 变更)+golden/README 判定记录在案;c6 于 5b5214f4 时点对账零差异属实(提交版基点 d5a03db1/1588),合并后回归见问题清单② |
## 二、撤销证明抽查记录
| 卡 | 方式 | 命令与输出摘要 |
|---|---|---|
| ③ | 复现红/绿实测 | 绿基线:`--script res://tests/unit/core/effect_words_t1_test.gd`→`all green (18 checks)`。改红:sed :360 `FACTS.size()`→`9`→`FAIL — fact 出域文案含词表实数 19、无写死计数〔效果文案批 V1〕`。还原 `git checkout --`→复绿 `all green (18 checks)` |
| ① | 复现红/绿实测 | 改红::505 缓存命中条件前置 `if false and ...`→`[FAIL] 〔levelmap批 V1〕`+`[FAIL] 〔levelmap批 V2〕` 双红。还原→复绿:`[PASS] V1`+`[PASS] V2`,`all green (21 checks)` |
| ④ | 直跑实测 | `--script res://tests/unit/battle_settlement/extended_row_violation_test.gd`→exit=1、`[extended_row_violation_test] 违约零发射+合法照发(a2 校验在位)`;manifest 登记行 run_all.gd:73 在位 |
| ⑤ | 代码审读替代(探针复现 >10 分钟) | wr2 断言与 wa4 必达判据代码在位(:428-432/:725-728),判据钉死新文案与停点态,机制上回退即红;报告两条实测记录在案 |
| ⑥ | 代码审读替代(探针复现代价高,按审计指令) | wr1-b 断言在位、观测点落位与代拍板 #16 一致;一行类型修复因果闭合 |
| ⑦ | 代码审读替代(探针复现代价高) | 三处反向断言判据直接依赖「无写死行」前提,恢复 :199 必红;报告实测记录在案 |
## 三、测试削弱核查(七卡 §8.2+代拍板单 vs 实际 diff)
逐提交核对 b23fa50d→0cd86469 区间(含合并带入的 master 通关换代批——该批有独立审计 57447386 在案,不计本批):
1. **卡④**:SOURCE_EXEMPT_TYPES/CLASSES 两常量零变化(diff 中仅上下文行)——申报吻合。基础 9 类行型发射零触碰:全区间 `_emit_row` 第一参改动恰六发射点+校验段,六点外无第一参改动(grep+diff 双核)。
2. **卡⑦**:三处断言反转=换代非削弱,申报在卡面 §8.2;置灰子断言删除有代拍板 #19 记录;ui_click_probe 设置面原「浮层不被遮挡」语义退役有卡面 §8.2 申报。既有断言零删除(三处全原位反转)。
3. **卡⑤**:wa4 条件转必达=判定面增强;头部校验串、autoplay 直通行为、:220/:381 豁免表述、:697 历史注记全部原样(审计逐处复核)。
4. **卡⑥**:零断言删除。**卡③/卡①**:既有断言零改动(effect_words +4/-0、level_map_info_fog +36/-0 纯增)。
5. **验证集清单**:断言改判(V2f 行 74)与新增同步在 5b5214f4 履行(1588 条对账零差异,卡内申报一致);合并回归单独列问题②。
**削弱核查结论:零未申报削弱。**
## 四、附加核对结果
1. **合并 416ca84a 代码面零触碰——成立(比指令口径更严的核法)**:区间 diff `5b5214f4..416ca84a` 含 master 侧通关换代批的全部码改(该批为 master 上已审计的独立批次,非合并引入);合并解的真实触碰面用 `git diff-tree --cc` 定位=7 文件(6 码件+README),6 个码件逐一以 patch-id 对比「合并结果 vs master 侧」恰等于「iter38 侧自身改动」——全部 MECHANICAL(机械合成),即合并解对手只落在 README.md 与验证集清单.md 两文档(与提交声明一致;清单侧取 master 整版引发问题②)。
2. **卡① golden 时序**:level_map.png 新增提交=b85b3b45=码改同一笔。git 历史无法证明提交内「先建基线后改码」时序——**该限制如实注明**,采信依据=golden/README 登记记载(「改前建基——时点铁序,跨跑次 0.00% 实测后落盘」)与卡面 T1 前置步处方。
3. **卡④ parity 锚**:d5a03db1 恰 3/6 哈希换代+rows 零变化,与 264/304/0/0 读数自洽;审计独立复跑 check 全同(见对照表 wr4 行)。
4. **卡⑦**:`grep -c "_debug_entry" main.gd`=2(实测)。
5. **卡⑤清单义务豁免**:探针不在 extract_checks 提取面(工具扫 tests/unit|integration|system_test)——「无清单同步义务」申述属实。
6. **闸回执**:`game/tests/.gates/receipt.json` commit=416ca84a(15:38:28)、domain=code、**all_green=false**——09 静态扫描 exit=1;其后 0cd86469(16:00:28)只修 S11 四处,**无修复后的复跑回执**。审计复跑静态扫描:S11 已转绿(238 文件 23 词零命中),S13 仍红(详见问题①)。
## 五、问题清单
**阻断(合回前必须清偿)**
1. **09 静态扫描在分支尖仍红——gdstyle 两条指标恶化未处置,实现报告未披露**。审计复跑实测:`battle_orchestrator.gd|quality/max-file-length = 1314(基线登记 1302)`(卡④ 校验段+头注加行所致)、`level_map_screen.gd|quality/max-class-variables = 22(基线登记 21)`(卡① _layout_cache 所致);master 侧分别为 1301/21,恶化归属本批无疑。批末闸回执(416ca84a)即因 S11+此两条判红,0cd86469 只修了 S11;七笔提交零触碰 tools/gdstyle_baseline.txt。按闸机口径须还债或经用户批准随批重生成基线,二者均未发生;完成定义「全套闸全绿」未满足,报告 §一「已收口」与 §四未提闸红,属呈报缺漏。
2. **验证集清单在提交态与码失同步**。合并 416ca84a 对清单冲突取 master 侧整版(基点 54395b8b/1591 条):本批新增断言(levelmap批 V1/V2、效果文案批 V1、明细收敛 V2×3、卡⑥ wr1-b)在 HEAD 提交版清单 **零命中**,V2f 行 74 回退旧 cond「boot 可见」与已反转的码面断言相抵。正确再生成件(1596 条、含两侧断言、`extract_checks --diff` PASS)已存在于 worktree 但**未提交**。c6「清单没跟上视同未完成」在提交态不成立。清偿=提交该再生成件(算术复核 1591+5=1596,check_quiet 与探针不在提取面,无遗漏)。
**轻微(不阻断,随批或批后顺手)**
3. level_map_info_fog_test.gd:195 段头注释尾缀误写〔levelmap批 W2〕——断言本体 V1/V2 正确,grep 通道不受影响,纯注释笔误。
4. 三份产出物(实现报告/代拍板/反哺点)在主区与 worktree 均为未跟踪态,随批后收尾提交即可(现状与「实现批产出物只写 reports/」不冲突,登记在案防遗漏)。
**限制声明(采信依据已注明,非缺陷)**
5. 卡① wr1 像素级对拍(changed=0.00%)与卡⑥ 148→0 基线读数未独立复跑:前者窗口化 shot_probe 在审计环境挂起(gate 05 渲染闸收口时点绿佐证),后者按审计指令以代码审读替代;两者均有实现报告读数与机制闭合支撑。
6. 卡④ JSONL 原始对拍件留 /tmp 临时区不可复取,读数采信以锚 diff 形态+check 复跑佐证。
## 六、审计操作性记录
撤销复现的临时改动(effect_engine.gd :360、level_map_screen.gd :505)均以 `git checkout -- <file>` 当场还原,还原后工作区与审计起点一致(仅存审计前的验证集清单未提交再生成件与未跟踪产出物,零新增改动);worktree 主区未触碰。parity check 复跑约 13 分钟(base 288s/attune 286s/shop 234s),exit 0。