docs(迭代34卡④): 独立验收审计入库——总判定不通过(D1 fv2 接线层验收未成立=卡片 T2 与 §7.1 口径冲突;D2 缺分支尖代码域闸回执),M1/M2/M9/M10 复现一致
This commit is contained in:
1 parent
6757c21e07
commit
8b9c69897b
1 file changed
+164
@@ -0,0 +1,164 @@
|
||||
# 迭代 34 卡④(信息迷雾可见性批)独立验收审计报告(2026-10-22)
|
||||
|
||||
> 审计员:未参与本卡实现的独立子代理。审计期只读源码/测试/产出物,自跑命令取证;除本报告外未写任何文件。
|
||||
> 审计对象:`D:\code\g-plan2-iter34-fog`(分支 `iter34-fog`,任务指定被审 HEAD `477fd0f5`,审计起点 `43c0f3c1`)。
|
||||
> 审计期分支前进说明:审计过程中分支新增 `6757c21e`(docs-only,仅 `reports/iter34-反哺点-2026-10-22.md` 追加 ⑮ 体验验证清单登记,6 行)。本报告结论按任务指定 HEAD `477fd0f5` 的代码面给出;`6757c21e` 不触及代码与测试,不影响任何判定,仅在反哺点相符性一节并入核对。
|
||||
|
||||
## 1. 审计范围与基线
|
||||
|
||||
| 项 | 内容 |
|
||||
|---|---|
|
||||
| 被审 diff | `git diff 43c0f3c1..HEAD`:14 个文件(`game/` 11 件:核心 1/schema 1/数据 1/呈现 1/冒烟 2/单测 4(含 2 个 .uid)/manifest 1;`reports/` 3 件)。审计期 HEAD 前进后为 15 件(多 1 件 docs-only) |
|
||||
| 工作树状态 | 审计开工与收尾 `git status --short` 均为空;4 次变异注入后均 `git checkout --` 还原并复核为空 |
|
||||
| 环境 | Godot 4.7.2 console;python 前置 `PYTHONIOENCODING=utf-8`;长测前清理了残留 `ui_click_probe` Godot 进程(2 个),全程串行单实例 |
|
||||
| 不采信项 | 实现报告 §5.7 的「已全绿」自述仅作对照,判定一律用下面自跑读数 |
|
||||
|
||||
### 1.1 自跑命令与读数(原文)
|
||||
|
||||
| # | 命令(工作目录) | 读数原文 | 退出码 |
|
||||
|---|---|---|---|
|
||||
| C1 | `Godot…console.exe --headless --path . --script res://tests/unit/core/level_map_type_vis_test.gd`(`game/`) | `[level_map_type_vis_test] all green (26 checks)` | 0 |
|
||||
| C2 | 同上换 `res://tests/unit/presentation/level_map_info_fog_test.gd` | `[level_map_info_fog_test] all green (19 checks)` | 0 |
|
||||
| C3 | 同上 `res://tests/run_all.gd` | `[run_all] all green (40 suites)` | 0 |
|
||||
| C4 | `Godot…console.exe --headless --path . res://smoke/ui_input_probe.tscn`(`game/`) | `[ui_input_probe] PASS — …十八断言全绿`(见 §4 观察项 3) | 0 |
|
||||
| C5 | `python tools/run_smoke.py`(工作树根) | `[run_smoke] 摘要: 冒烟完成:1211 项检查,0 项失败`+`[run_smoke] PASS(退出码 / 摘要失败数 / 脚本错误扫描 三闸全过)`;新增 5 条「可见性冒烟」断言逐条 `[PASS]`(含〔fv4〕〔fv3〕〔fv6〕〔fv1〕) | 0 |
|
||||
| C6 | `bash game/tests/static_scan.sh` | `[audit_type_hints] PASS——产品码类型闸归零(R1/R2/R3)`;`[static_scan] S9 ok` … `结构审计 PASS` | 0 |
|
||||
| C7 | `python tools/audit_type_hints.py` | `[audit_type_hints] PASS——产品码类型闸归零(R1/R2/R3)` | 0 |
|
||||
| C8 | 读 `game/tests/.gates/receipt.json` | `commit: 4ef154b9…`;`09 静态扫描 exit: "1"`;`all_green: false`;`changed_vs_baseline: ["09 静态扫描:红项清单变化…"]` | — |
|
||||
|
||||
要点:C1–C7 证明**当前代码面**的冒烟、单元、探针、静态扫描在我手上全绿;C8 证明**闸回执证据**停留在 `4ef154b9`,且该次 09 红、`all_green=false`,此后还有 2 个代码相关提交(`6f04f29b` 改 3 个 `game/` 文件、`477fd0f5`/`6757c21e` 仅文档)。这一差异见 §5.2 与 §6 缺漏 D2。
|
||||
|
||||
## 2. §7.1 对照表逐行结论(fv1–fv9)
|
||||
|
||||
判定口径:①断言真实存在且尾缀可 grep;②真实入口符合卡片该行声明;③断言强度足以在改动撤销/单点变异时变红。行内「通过」均附自跑依据。
|
||||
|
||||
| fv | 断言存在(文件:行,实测 grep) | 真实入口核对 | 断言强度核对 | 结论 |
|
||||
|---|---|---|---|---|
|
||||
| **fv1 邻近 N 层见类型** | `level_map_type_vis_test.gd:121/122/123`(层距 2 可见、3/4 不可见)、`:142/143`(入口锚层 0)、`:166/167/168`(单链退化);`smoke_all.gd:4942-4943`(真图节点 7/8 入雾)。尾缀〔fv1〕共 8 处断言+3 处注释 | 核心 `type_visible_ids()` 直调(卡片该行声明即此)+冒烟真图 L2 入口停点 | 边界两侧都断言(N 内真、N+1 假),非恒真;M1 实测 4 条红(§3) | **通过** |
|
||||
| **fv2 范围外只见结构** | `level_map_info_fog_test.gd:51/54/56`(显隐与无描边)、`:96/98/100`(label 三态);`ui_input_probe.gd:59-62`(⑱ 雾下节点双通道,尾缀在 :60)。尾缀〔fv2〕共 8 处 | 单元=`ScreenScript.node_display` 纯函数(卡片允许);探针=`ro.display_probe()`。**但 `display_probe()` 内部是逐节点重调 `node_display`(`level_map_screen.gd:536-547`),不是读取实际绘制输出**——卡片该行要求「真机 `display_probe()` 读绘制面(接线层验收——防『断言在、接线坏、不红』)」不成立 | 单元决策面断言有效(M2 红);⑱ 的「图标不出示」判据自指(fog_id 正是按 `draw_icon==false` 选出,再断言其 false,恒真;「文字不出示」判据有效)。**接线层(`_draw_graph` 是否消费决策面)零断言:我注入「两处 `if bool(disp[...])` 直接改 `if true`」=模拟接线坏,C2 仍 `19 checks` 全绿、C4 仍 PASS**(§3 W1) | **缺漏**(详见 §6 D1) |
|
||||
| **fv3 Boss/终点不入雾+多终点标记** | `level_map_type_vis_test.gd:144/145`(远距 Boss 在集、同层距非 Boss 不在集);`level_map_info_fog_test.gd:65/67/70/73`(双 Boss 描边、Boss 三通道在、远 Boss 不入雾、豁免不扩散);`ui_input_probe.gd:63-64`;`smoke_all.gd:4939`(真图 L2 Boss=9 在集)。尾缀〔fv3〕共 9 处断言 | 核心可见集直调+`node_display` 直调+真机 `display_probe`(卡片该行声明即此)+冒烟真图 | 单 Boss 核心豁免与双 Boss 决策面均有断言;M3/M4 报告已证(我未复跑,M2 连带 `Boss 豁免不扩散〔fv3〕` 实测红,说明该条有敏感度)。观察项:双 Boss 夹具把 7/9 直接写进 `type_vis=[1,7,9]`,未从 `type_visible_ids()` 推导「均在集」,多终点核心成员性只有单 Boss 用例覆盖同一代码分支(非阻塞,见 §4 观察项 4) | **通过**(含 1 条观察项) |
|
||||
| **fv4 下一跳恒可见** | `level_map_type_vis_test.gd:132/133`(跨层跳边候选层距 N+1 仍在集、同锚非候选不在集);`smoke_all.gd:4938`(真图候选 ⊆ 可见集);`ui_input_probe.gd:66-67`(真机候选 draw_icon)。尾缀〔fv4〕共 3 处 | 核心直调+冒烟真图+探针 | 跨层跳边是反例夹具,删候选豁免会红(报告 M5;未复跑);M2 不连带此条,逻辑独立 | **通过** |
|
||||
| **fv5 节点内详情不显示** | `level_map_info_fog_test.gd:87/88`(携带 `enemy_id/reward_id` 与不带者逐键相等;label 不含内容值,实际打印「战斗 · 可选」)。尾缀〔fv5〕共 3 处 | `node_display` 纯函数(卡片该行声明即此) | 逐键相等+字符串不含,两条互补;M6 报告已证(未复跑)。`node_display` 正文只读 `type`,代码审读一致 | **通过** |
|
||||
| **fv6 N 进数据表** | `level_map_type_vis_test.gd:96`(真表读数 2)、`:100/102/104`(N=1 合法、0/-1 判 domain 错)、`:178/180/186`(改表 N=1/3/10 可见窗随动);`smoke_all.gd:4940-4941`(真图读表=2)。尾缀〔fv6〕共 7 处断言 | `LevelTable.validate()`+`db.level.info_visible_layers` 读值(核心直调,卡片声明即此) | 不是「读一次字段」——改表值三档窗随动+越域双值判错,强度够;M7a/M7b 报告已证(未复跑) | **通过** |
|
||||
| **fv7 单圈语义** | `level_map_type_vis_test.gd:155/156/157`(visited 不豁免:远/中距回雾、近端仍显)、`:207`(`start_level_external` resume_state 重建与直入逐位一致)。尾缀〔fv7〕共 6 处 | 核心直调+真实 resume 入口 | visited 显式注入后仍不可见=单圈成立;resume 断言两侧同函数、若两者同空会平凡相等,但同套件其余组已证函数非空输出,风险可接受 | **通过** |
|
||||
| **fv8 画布自适应** | `level_map_info_fog_test.gd:169`(规模实测 maxl=10/maxslot=6)、`:175`(min.x 1334.5 ≥ 1334.5)、`:177`(min.y 449.0 ≥ 449.0)、`:185`(全节点方块在画布内)、`:192/195`(双 Boss 描边、远处战斗 32 入雾);`ui_input_probe.gd:146-149`(常数锚引屏内常量)+⑬ | `canvas_probe()`/`layout_probe()`+真机探针 ⑬。⑬ 的 BFS 独立推导、常数同源 | 公式两侧独立推导(布局实测反解 maxl/maxslot,非用 `_fit_canvas` 自己的层表);M9 实测 2 条红(§3)。观察项:`layout_probe` 的 `maxl` 由 `_content_size` 居中后的坐标反解,若宽度公式少项,反解仍正确——正是 M9 能红的原因,无缺陷 | **通过** |
|
||||
| **fv9 显隐接线(雾不扩可点域)** | `ui_input_probe.gd:76-91`(真机 `push_input` 点击雾下非候选节点,`route_chosen` 零发射,尾缀 :89) | 真机 push_input+真实 `_candidate_at` 命中面;判据绑 `route_chosen` 信号面(可观测提交面),未绑兜底终态 | M10 实测红,原文 `提交=[3] visible=true 选路态=true`(§3);这是本卡最强的一条 | **通过** |
|
||||
|
||||
**§7.1 汇总**:fv1、fv3、fv4、fv5、fv6、fv7、fv8、fv9 通过(fv3 含 1 条观察项);**fv2 判缺漏**——不是「断言不存在」,而是卡片该行声明的「读绘制面/接线层验收」用当前 `display_probe()` 实现不成立,且实测接线坏不红。
|
||||
|
||||
## 3. 变异复现记录(自跑)
|
||||
|
||||
四张 T 卡各复现一条(T1→M1、T2→M2、T3→M9、T4→M10),全部「注入→最窄闸见红→`git checkout --` 还原→复跑绿」,另加一条审计自设的接线坏注入 W1。**无复现不一致**:四条红的位置与报告 §5.4 所写逐字一致。
|
||||
|
||||
| # | T 卡 | 注入内容(精确位置) | 红断言原文(自跑) | 还原后读数 |
|
||||
|---|---|---|---|---|
|
||||
| **M1** | T1 | `game/core/level_runner.gd:433`:`absi(...) <= n` → `< n` | `[FAIL] 层距 N 内可见:锚层 1 取节点 4(层距 2)〔fv1〕`;`[FAIL] 单圈只按锚层取窗:已过近端节点 4(层距 2)仍可见〔fv7〕`;`[FAIL] 单链退化形态:入口锚层 0,下标 2 可见〔fv1〕`;`[FAIL] N 读表:N=3 时节点 5(层距 3)入窗〔fv6〕`;`4/26 项失败`,退出码 1 | `git status --short` 空;C1 复跑 `all green (26 checks)` 退出码 0 |
|
||||
| **M2** | T2 | `game/presentation/views/level_map_screen.gd` `node_display`:`"draw_icon": type_shown` → `true` | `[FAIL] 雾下节点:图标与类型文字均不绘制(显隐语义,非灰化)〔fv2〕`;`[FAIL] Boss 豁免不扩散:雾下非 Boss 仍隐类型〔fv3〕`;`[FAIL] 大图呈现:入口停点远处战斗节点(编号 32,层 6)类型入雾〔fv8〕`;`3/19 项失败`,退出码 1 | `git status --short` 空;C2 复跑 `all green (19 checks)` 退出码 0 |
|
||||
| **M9** | T3 | `level_map_screen.gd:_fit_canvas` 宽公式去 `+ NODE_HALF.x`(`LAYER_BASE_X + maxl*LAYER_STEP_X + 8.0`) | `[FAIL] 大图拟合:画布 min.x 覆盖最深节点(1298.0 ≥ 1334.5)〔fv8〕`;`[FAIL] 大图布局:全节点方块落在拟合画布内(origin=(0.0,0.0) size=(1298.0,449.0))〔fv8〕`;`2/19 项失败`,退出码 1 | `git status --short` 空;C2 复跑 `all green (19 checks)` 退出码 0 |
|
||||
| **M10** | T4 | `level_map_screen.gd:_candidate_at`:`for nid in _cand_ids` 改为遍历全节点 id(先构 `_all_ids`) | `[ui_input_probe] FAIL — case⑱ 雾下节点点击产生提交(提交=[3] visible=true 选路态=true——雾不扩大可点域)〔fv9〕`,退出码 1 | `git status --short` 空;C4 复跑 `PASS` 退出码 0 |
|
||||
| **W1**(审计自设,报告未列) | T2 接线层 | `_draw_graph` 两处条件 `if bool(disp["draw_icon"]):`/`if bool(disp["draw_label"]):` 均改 `if true:`(模拟「决策面正确、接线坏」) | **不红**:C2 `all green (19 checks)` 退出码 0;C4 `PASS` 退出码 0 | `git status --short` 空;C2 复跑 `all green (19 checks)` 退出码 0 |
|
||||
|
||||
W1 的结论:本卡唯一「防止接线坏」的声明(§7.1 fv2 真实入口格)在端到端两层闸上都不成立——这正是卡片要求「真机 `display_probe()` 读绘制面」的动机,而 `display_probe()` 只是决策面的第二次求值。
|
||||
|
||||
## 4. 测试削弱检查结论
|
||||
|
||||
| 检查面 | 结论 |
|
||||
|---|---|
|
||||
| 删除既有断言 | **无**。`git diff 43c0f3c1..HEAD -- game/smoke game/tests` 的全部删除行只有 3 行,均为 `ui_input_probe.gd` 的画布常数锚注释+`need_x2` 手抄公式行,属卡片 §7.1「旧断言预声明」第①类允许项(改为引 `LevelMapScreen.LAYER_BASE_X/LAYER_STEP_X/NODE_HALF`,判据与断言语义未变)。其余冒烟/探针文件只增不删 |
|
||||
| 放宽阈值 | **无**。冒烟新增 5 条全为新判据;⑬ 容差 `-0.5` 未动;⑱ 无「非空即过」类宽松判据 |
|
||||
| 缩小扫描范围 | **无**。新两套件扫描全节点;大图夹具 63 节点全量比对 |
|
||||
| 真实入口换下层直调 | **fv2 一项成立**(§2、§6 D1):`display_probe` 是决策面重算,不是绘制面读取。其余各行入口与卡片声明一致 |
|
||||
| 注释掉断言 | **无** |
|
||||
| 越出卡片声明的削弱 | **无**(除 fv2 的入口口径问题外) |
|
||||
|
||||
观察项(非削弱,但影响判据强度,建议回炉 T2 时一并处理):
|
||||
1. ⑱ 的「雾下图标不出示」判据自指:fog_id 按 `not disp[vnid]["draw_icon"]` 选出,再断言 `not draw_icon`,该半句恒真;有效的是「文字通道不出示」半句与「雾面节点存在」的存在性(M2 时因选不到 fog 节点而走 `case⑱ 雾面节点选取失败` 分支变红)。建议改为选区与断言解耦(如按层距/候选集独立选雾节点)。
|
||||
2. fv3 双 Boss 夹具的 `type_vis` 是手写 `[1,7,9]`,只证「决策面对两个 Boss 都亮」,未从 `type_visible_ids()` 推导「两端点均在集」;核心多 Boss 成员性由单 Boss 用例覆盖同一分支,风险低。
|
||||
3. C4 的 PASS 文案仍列到 ⑰ 为止(「十八断言」按 18 个 case 数),未点名 ⑱;报告 §5.2 称「探针⑱ 5 项断言」,实现实为 4 个 `_pre_fail` 判据+1 个选区前置。均为措辞/计数瑕疵,不影响判据有效性。
|
||||
|
||||
## 5. 报告 / 代拍板 / 反哺点相符性
|
||||
|
||||
### 5.1 实现报告 §5.3 六条偏差逐条核对
|
||||
|
||||
| 偏差 | 核对结果 |
|
||||
|---|---|
|
||||
| 1 大图夹具 12 BFS 层→布局 11 层(实测 maxl=10/maxslot=6) | **如实**(C2 打印「实测最大层 10/最大槽 6」;夹具源码 `tiers := 12`+跨层跳边) |
|
||||
| 2 ⑱ 零提交判据改绑 `route_chosen` | **如实**(M10 红在信号面;旧终态判据被屏态/运行器兜底吸收的解释与 M10 输出 `visible=true 选路态=true` 一致)。属卡片 §8 L1 写法自救,已申报 |
|
||||
| 3 类型闸 4 处 R1(`6f04f29b` 归零) | **如实**(旧 `static_scan.log` 逐行列 4 处 R1;C6/C7 现为 PASS) |
|
||||
| 4 常数锚行号 `:98-99` → `:142-145` | **如实**(现文件 `:146-149` 为注释+公式;卡片原行号已 T0 订正) |
|
||||
| 5 画布下限 620×256 vs 冻结文档 620×240 | **如实**(`level_map_screen.gd:303`=`Vector2(620, 256)`;`design/gdd/ux/level-map.md:68` 写 620×240;反哺点 ⑧ 已登记) |
|
||||
| 6 命中面 `_candidate_at` 零改动 | **如实**(diff 该函数零 hunk;M10 是我注入才改) |
|
||||
|
||||
**未申报的偏差 1 条**:§5.2 fv2 行写「真机 `display_probe()` 读绘制面」,实际 `display_probe()` 只是 `node_display` 快照重算,`_draw_graph` 接线零断言(W1 证明)。报告 §5.3 未列此偏差。
|
||||
|
||||
**报告 §5.7 与回执不符 1 条**:报告表 09 行写「1 → 0」,读作最终已绿;但 `receipt.json` 的 `commit=4ef154b9`、`09 exit=1`、`all_green=false`,且该回执早于 `6f04f29b`(修 09 的提交)与分支尖。报告末句「最终合并回执见本批合并提交信息(起跑 commit=分支尖)」是未来义务,不是已落证据;而 §5.1 已把 T4 标「完成」。**「批末代码域闸全绿」目前只有窄验证(audit_type_hints PASS+两套件+探针),没有分支尖的 `run_all_gates.sh --code` 回执。**
|
||||
|
||||
(补充事实:C8 的 `changed_vs_baseline` 是「09 红项清单变化」。存量基线 `baseline.json` 里 09 本就是 exit=1 的存量红;本批先新增 4 处 R1 被判「清单变化」,修复后应转绿。所以问题不在代码现状,而在回执证据未随修复重生成。)
|
||||
|
||||
### 5.2 代拍板六条(卡④)白名单核对
|
||||
|
||||
| # | 白名单条目 | 核对结果 |
|
||||
|---|---|---|
|
||||
| 1 | provisional N=2 | **合规**:`level.tres` 挂 2;`validate` 只校验 int≥1;代码零硬编码 N(`level_runner.gd:429` 读 `db.level.info_visible_layers`);C1 证明改表值窗随动 |
|
||||
| 2 | API/探针命名 | **合规**:`info_visible_layers`/`type_visible_ids`/`node_display`/`display_probe` 均无 `fog_` 前缀。`level_map_info_fog_test.gd` 及 `_test_fog_hides_type` 属卡片 T2 指定的测试文件名/测试内私有函数,不是跨层 API |
|
||||
| 3 | 雾下呈现落点 | **合规**:编号、方块、连线绘制零改动(生产 diff 删除行只有图标/文字块重排与条件切换,色值/线宽/形制零变);C5 冒烟 1211 项、C6 渲染相关静态面全绿 |
|
||||
| 4 | 大图夹具规模 | **合规**:12 BFS 层压成 11 层×6 槽、含双 Boss、含跨层跳边(1→3 层目标),满足 ≥10×≥5 |
|
||||
| 5 | 常数锚同源化 | **合规**:探针直接引 `LevelMapScreen` 导出常量,无手抄副本 |
|
||||
| 6 | 提交切分/分支名 | **合规**:`iter34-fog`,三笔均在 `game/`;报告/产出物在 `reports/` |
|
||||
|
||||
白名单外自决:**未发现**(W1 揭示的是验收口径缺失,不是实现自决)。
|
||||
|
||||
### 5.3 反哺点 ⑥–⑮ 对卡片 §5 的覆盖
|
||||
|
||||
| 卡片 §5 同步面/呈报项 | 反哺点 | 结论 |
|
||||
|---|---|---|
|
||||
| 关卡节点地图(N 状态行+可见性语义) | ⑥+⑩ | 覆盖 |
|
||||
| 关卡节点图生成(屏预算行+下一跳兑现标注) | ⑦ | 覆盖 |
|
||||
| level-map(画布公式漂移+Information Hierarchy+**雾的正式视觉规格呈报项**) | ⑧(含呈报项,明确「禁本批落文」) | 覆盖 |
|
||||
| 术语表(信息迷雾 vs 视野迷雾) | ⑨ | 覆盖 |
|
||||
| 待办清单 | ④+⑪ | 覆盖 |
|
||||
| roadmap | ⑤+⑫ | 覆盖 |
|
||||
| **超预算图升级路径(呈报项)** | ⑬ | 覆盖 |
|
||||
| 实机目检三项登记 | ⑮(审计期新增提交 `6757c21e`) | 覆盖 |
|
||||
| 方法论反哺 | ⑭ | 额外,合理 |
|
||||
|
||||
### 5.4 契约与代码纪律
|
||||
|
||||
| 检查 | 结论 |
|
||||
|---|---|
|
||||
| 契约 1/2(三层语义、Boss/终点/候选豁免) | 未破:结构通道全绘;类型由 `type_vis` 决定;Boss 在核心与决策面双豁免;候选追加进核心集 |
|
||||
| 契约 3(N 只进数据表) | 未破:唯一字面量 2 是 `level_table.gd:8` 的 schema 默认值(卡片 T1 明确要求),运行期经 `db.level` 读 |
|
||||
| 契约 4(显隐、零新画法) | 未破:无灰化/雾纹理/新色值/线宽变化 |
|
||||
| 契约 5(单圈零记忆) | 未破:实现不读 `visited`;C1 单圈组绿 |
|
||||
| 契约 6(不动冻结件/禁缩放滚动) | 未破:`_fit_canvas` 公式零改动;下限 620×256 是改前既有值(卡片 §5.3-5) |
|
||||
| 契约 7(呈现只读) | 未破:呈现层不重算层距,只消费 `type_visible_ids()`;`node_display` 的 Boss 判定属卡片 T2 指定的决策面语义 |
|
||||
| 契约 8 / §8 L3 | 未破:无生成器/行进/敌人表/校验放宽改动;`type_visible_ids` 无状态;候选未被雾遮 |
|
||||
| core 零 UI 依赖 | 通过:`level_runner.gd` 仅注释提及 `LevelMapScreen`,无 UI 类型引用 |
|
||||
| 数值零字面量 / RNG | 通过:N 读表;新代码无 `randomize()`、无自建 RNG |
|
||||
| 行尾/类型闸 | 通过:核心 `.gd` 无 CRLF;`audit_type_hints` PASS(C7) |
|
||||
| 头注/变更记录禁令 | 通过:新增文件头只述职责;无版本历史节;`git diff --check` 仅 3 个报告文件「EOF 空行」提示,非代码问题 |
|
||||
|
||||
## 6. 总判定:**不通过**
|
||||
|
||||
代码现状的自跑读数全部为绿(C1–C7),未发现测试削弱、契约破坏、越权自决或数值/RNG 违规。但按卡片 §7.1 与 T4/T5 的验收口径,有 **2 条缺漏**必须回炉后重审:
|
||||
|
||||
### D1(回炉 T2)fv2「接线层验收」未成立,且卡片 T2 与 §7.1 口径冲突
|
||||
|
||||
- **缺什么**:证明 `_draw_graph` 真的消费 `node_display` 输出的断言。当前 `display_probe()`(`level_map_screen.gd:536-547`)逐节点重新调用 `node_display`,与绘制路径是两次独立求值;测试与探针都只读这个快照。
|
||||
- **在哪**:`level_map_info_fog_test.gd:187-195`(大图 `display_probe`)、`ui_input_probe.gd:46-68`(⑱ 前四段);证据=W1 注入(`_draw_graph` 两处条件改 `if true`)后 C2 `19 checks` 全绿、C4 PASS。
|
||||
- **口径冲突**:卡片 T2 把 `display_probe()` 定义为「id → `node_display` 快照」,而 §7.1 fv2 要求它「读绘制面(接线层验收)」。实现按 T2 落地,§7.1 判据不可能由该接口兑现。这属 spec-AC 不一致,需用户裁:要么 T2 改接口/补一层「绘制输出可观测」的探针(例如自绘记录器:给 canvas 包一层记录 draw_rect/draw_texture_rect/draw_string 的测试桩,或离屏渲染取雾节点区域像素),要么由用户修改 §7.1 fv2 的验收口径(实现批不得自决)。无论走哪条,当前状态下 fv2 的撤销证明只覆盖决策函数,不覆盖接线。
|
||||
- **附带**:⑱ 的雾下图标判据自指(§4 观察项 1),回炉时一并解除自指。
|
||||
|
||||
### D2(回炉 T4/T5)批末代码域闸无分支尖绿回执
|
||||
|
||||
- **缺什么**:与分支尖同 commit 的 `tools/run_all_gates.sh --code` 全绿回执。
|
||||
- **在哪**:`game/tests/.gates/receipt.json`——`commit=4ef154b9`、`09 静态扫描 exit="1"`、`all_green=false`;`6f04f29b`(修 09)与 `477fd0f5` 之后未重跑。实现报告 §5.1 却把 T4 标「完成」、§5.7 表写「09 1 → 0」。报告 §5.6 自己也写明「合并前回执须与分支尖同 commit」。
|
||||
- **处置**:在分支尖重跑 `tools/run_all_gates.sh --code` 落新回执(`commit` 字段=分支尖、`all_green: true`),再交复审;不得用窄验证替代。我的 C1–C7 已证明重跑应能绿,但回执是合并闸的强制证据,不能由审计代跑(会覆写既有闸产物)。
|
||||
|
||||
### 非阻塞观察项(不单独构成缺漏,建议随 D1/D2 一并处理)
|
||||
|
||||
1. ⑱ 雾下图标判据自指(§4-1)。
|
||||
2. fv3 双 Boss 夹具手写 `type_vis`,多终点核心成员性无独立推导(§4-2)。
|
||||
3. 探针 PASS 文案未列 ⑱,报告「5 项断言」与 4 个判据不符(§4-3)。
|
||||
|
||||
**合并前置**:D1、D2 关闭并复审通过前,本卡不得合并(卡片 T5、§7.1 末段)。
|
||||
Reference in new issue
Block a user