From 6dea23729b9b2133fccfb46e57f9ea121bdaab71 Mon Sep 17 00:00:00 2001 From: DKChan <524912269@qq.com> Date: Thu, 29 Oct 2026 05:28:30 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=B6=E5=B0=BE(=E5=90=88=E5=9B=9E=E9=97=B8?= =?UTF-8?q?=E5=85=B3=E8=81=94=E6=A1=A3=EF=BC=8B=E9=97=B8=E6=9C=BA=E7=BC=96?= =?UTF-8?q?=E6=8E=92=E5=BF=AB=E9=80=9F=E5=A4=B1=E8=B4=A5=E6=89=B9):=20?= =?UTF-8?q?=E5=BE=85=E5=8A=9E=E6=B8=85=E5=8D=95=E4=B8=A4=E6=9D=A1=E7=9B=AE?= =?UTF-8?q?=E5=AE=8C=E6=88=90=E6=95=B4=E6=9D=A1=E5=88=A0=E9=99=A4=E7=9A=84?= =?UTF-8?q?=E6=94=B6=E5=B0=BE=E6=8A=A5=E5=91=8A=E8=90=BD=20reports/?= =?UTF-8?q?=E2=80=94=E2=80=94=E6=94=B9=E5=8A=A8=E6=96=87=E4=BB=B6=E6=B8=85?= =?UTF-8?q?=E5=8D=95=E3=80=81=E5=85=B3=E8=81=94=E6=A1=A3=E9=80=89=E9=97=B8?= =?UTF-8?q?=E7=AE=97=E6=B3=95=E8=AF=B4=E6=98=8E=EF=BC=88=E4=B8=89=E4=BB=B6?= =?UTF-8?q?=E4=BF=9D=E9=99=A9=E6=81=92=E8=B7=91/02=20=E7=94=B3=E6=8A=A5?= =?UTF-8?q?=E2=88=AA=E6=8E=A8=E5=AF=BC=E5=B9=B6=E9=9B=86/=E6=A8=AA?= =?UTF-8?q?=E5=88=87=E5=9B=9E=E8=90=BD=E5=85=A8=E9=87=8F/=E5=9B=9E?= =?UTF-8?q?=E6=89=A7=20scope=20=E5=AD=97=E6=AE=B5=EF=BC=89=E3=80=81?= =?UTF-8?q?=E5=BF=AB=E9=80=9F=E5=A4=B1=E8=B4=A5=E8=A1=8C=E4=B8=BA=E3=80=81?= =?UTF-8?q?=E5=AD=A4=E7=AB=8B=E9=AA=8C=E8=AF=81=E8=AF=81=E6=8D=AE=EF=BC=88?= =?UTF-8?q?=E6=B2=99=E7=AE=B1=E4=B8=83=E5=9C=BA=E6=99=AF=EF=BC=8B=E9=97=B8?= =?UTF-8?q?=E6=BA=90=E9=80=89=E8=B7=91=209/65=EF=BC=8B2s=20=E8=BF=9E?= =?UTF-8?q?=E5=87=BB=E4=B8=AD=E6=AD=A2=EF=BC=89=E3=80=81=E9=97=B8=E6=9C=BA?= =?UTF-8?q?=E8=AF=81=E6=8D=AE=E4=B8=8E=E5=AD=98=E9=87=8F=E5=80=BA=E8=AE=B0?= =?UTF-8?q?=E8=B4=A6=EF=BC=889=20=E5=A5=97=E4=BB=B6=EF=BC=8BS=20=E5=9F=9F?= =?UTF-8?q?=E7=BA=A2=EF=BC=9D=E8=BF=AD=E4=BB=A3=2041=20=E5=9C=A8=E5=86=8C?= =?UTF-8?q?=E5=80=BA=E9=9D=9E=E6=9C=AC=E6=89=B9=E6=96=B0=E5=A2=9E=EF=BC=9B?= =?UTF-8?q?=E6=8C=87=E7=BA=B9=20pid=20=E5=BD=92=E4=B8=80=E5=8C=96=EF=BC=9B?= =?UTF-8?q?=E5=9F=BA=E7=BA=BF=2002/09=20=E5=AE=9E=E6=B5=8B=E9=87=8D?= =?UTF-8?q?=E7=94=9F=E6=88=90=E5=87=AD=E6=8D=AE=3D=E7=94=A8=E6=88=B7=20202?= =?UTF-8?q?6-10-29=20=E5=B8=A6=E7=BA=A2=E5=90=88=E5=B9=B6=E8=A3=81?= =?UTF-8?q?=EF=BC=9Bmaster=20=E6=8E=A8=E8=BF=9B=E4=BD=9C=E5=BA=9F=E9=87=8D?= =?UTF-8?q?=E5=81=9A=E7=BB=8F=E8=BF=87=EF=BC=9B=E6=9C=80=E7=BB=88=E5=9B=9E?= =?UTF-8?q?=E6=89=A7=20tree=20=E4=B8=8E=20master^{tree}=20=E6=A0=A1?= =?UTF-8?q?=E9=AA=8C=E4=B8=80=E8=87=B4=EF=BC=89=E2=80=94=E2=80=94=E6=8A=A5?= =?UTF-8?q?=E5=91=8A=E6=8E=A5=E6=94=B6=E6=96=B9=3D=E5=B7=B2=E5=88=A0?= =?UTF-8?q?=E9=99=A4=E7=9A=84=E4=B8=A4=E6=9D=A1=E5=BE=85=E5=8A=9E=E6=9D=A1?= =?UTF-8?q?=E7=9B=AE=EF=BC=8C=E9=9A=8F=E6=89=B9=E5=85=A5=E5=BA=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../工程改动报告-合回闸关联档-2026-10-29.md | 61 +++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 reports/工程改动报告-合回闸关联档-2026-10-29.md diff --git a/reports/工程改动报告-合回闸关联档-2026-10-29.md b/reports/工程改动报告-合回闸关联档-2026-10-29.md new file mode 100644 index 00000000..5e35c5cc --- /dev/null +++ b/reports/工程改动报告-合回闸关联档-2026-10-29.md @@ -0,0 +1,61 @@ +# 工程改动报告——合回闸关联档+闸机编排快速失败(2026-10-29) + +**接收方**:待办清单原「合回闸关联档——收口跑批按改动关联面选测」「闸机编排快速失败——连续套件超时中止整轮」两条目(两 entry 已随本批完成整条删除,本报告为其收尾凭据与算法说明存放处)。 +**改动面**:工具代码+游戏代码(run_all.gd 属代码面,走 worktree 批)+文档(规则同步)。 +**执行**:worktree `gaterel-20261029`(自 master 6abaf67d 分出),合并提交 8bb3541c,回执树校验通过后工作区与分支已删除。 + +## 一、改动文件清单 + +| 文件 | 改动 | 提交 | +|---|---|---| +| tools/run_all_gates.sh | 关联档选闸(三件保险恒跑+02 选套件+横切回落)+回执 scope/scope_terms 字段+红项指纹 pid 归一化 | 9f94c9e1、117a37e2 | +| game/tests/run_all.gd | 连续超时快速失败+--only-source=gates 闸机来源标记 | 9f94c9e1 | +| AGENTS.md | 「交付前验收」句与硬性红线改关联档口径;规范导航行「全量验证」→「提交前验证」 | 9f94c9e1 | +| design/engineering/process-conventions.md | §3 第 8 条合回闸细则同步(选测算法句+scope 字段+全量回归由用户自发) | 9f94c9e1 | +| design/engineering/test-conventions.md | §4 标题改「提交前验证」,正文同步关联档口径 | 9f94c9e1 | +| design/engineering/code-conventions.md | §3 主题行「提交前全量验证」→「提交前验证」 | 9f94c9e1 | +| game/tests/README.md | 工具速查 run_all.gd 行(快速失败+闸机关联档选跑+manifest 实数 65)、挂死防护注、门禁与本地闸回执字段句 | 9f94c9e1 | +| 待办清单.md | 上述两条目整条删除 | 9f94c9e1 | +| game/tests/.gates/baseline.json | 02/09 两键存量红按实测重生成(记账见第五节) | 80b49c0f | + +## 二、关联档选闸算法(定义处=tools/run_all_gates.sh 脚本中部,文档不另列) + +1. **三件保险恒跑不降**:00 冒烟、01 系统测试、09 静态扫描在代码域恒实跑(测量面批不再免 00);10 熵增闸照旧两域都跑;11 回放确定性触面判定照旧。 +2. **03/04 探针、05 渲染闸**:维持原影响面口径——本批 game/ 改动全在测量面(game/tests/、game/sim/)时记 SKIP。 +3. **02 单元与集成改「选套件跑」**:套件集=**申报 ∪ 推导**取并集。 + - 申报:在册需求卡片(本批 diff 触及的 reports/需求卡片*.md ∪ roadmap「进行中」迭代行登记的卡片)对照表「验收测试」列提到的测试文件名,逐名作为 --only 子串词;找不到在册卡片则申报集为空并在跑批输出注明。 + - 推导:脚本内 `suite_terms_for()` 映射表(game/ 文件前缀 → 套件族词,族=测试目录名 data_config/core/battle_settlement/contracts/presentation/integration)按本批 diff(merge-base master..HEAD 的 game/ 非 .md 文件,剔除测量面)归族;一个文件可映射多族(如 minesweeper_rules.gd → core+battle_settlement)。 + - 横切回落全量:命中 game/data/tables/**、公共件前缀(config_db*/rng_service*/save_manager*/meta_progression*/main*)、autoload 注册面(game/project.godot)、PARITY 触面表(gate 11 现行清单,已上移与横切判定共用单点定义)任一,或映射不到 → 02 跑全部套件。 + - 测量面批:02 照旧全套件跑,不加过滤。 +4. **回执加 scope 字段**:full|related(02 跑子集=related),随带 scope_terms 记选跑词清单;worktree-guard 校验逻辑不动(只验域覆盖与全绿)。 +5. **闸机传参**:02 闸经 `-- --only=<词表逗号串> --only-source=gates` 传入;无选跑参数时 run_all.gd 行为与现状完全一致。 + +## 三、快速失败行为(game/tests/run_all.gd) + +- 连续 **3** 个套件超时(可调常量 `CONSECUTIVE_TIMEOUT_ABORT`,初值 3)=判定红树整批挂死,**中止整轮**:打印「已见超时/已见失败(非超时)」两清单+中止时进度,退出码非 0。 +- 不连续的超时照旧逐个回收(taskkill /T 整树回收+10 秒等死确认不变);任何非超时结局(通过或快速失败)重置连续计数。 +- `_run_suite` 返回值从裸失败数改为 `{"fail": int, "timed_out": bool}`,编排层据此计连击;判定三硬闸(退出码/脚本错误扫描/断言数下限)口径不变。 + +## 四、孤立验证证据(闸机轮次纪律第 1 条,先最小试车再入闸) + +- 推导沙箱七场景(对脚本 scope 段原文+mock git 实测):行为面两文件归族 → related[--only=core presentation];damage_math 触面 → 横切 full;测量面批 → 03/04/05 SKIP+02 全量;main* 组合根拆件 → 横切;project.godot → 横切;申报卡片并集 → [--only=core damage_math_test.gd hud_presenter_test.gd system_test.gd];横切优先于申报 → full。 +- run_all.gd 闸源选跑:`--only=battle_settlement --only-source=gates` 实跑 9/65 套件全绿 exit 0,横幅「GATE FILTERED RUN」不带开发期免责句。 +- 快速失败机制:`RUN_ALL_SUITE_TIMEOUT_SEC=2` 下首个套件 2 秒内跑完(连续计数归零),随后 3 套件连击超时 → 第 3 个即 ABORT,汇总清单+「中止时进度 4/9」,exit 1。 + +## 五、闸机证据与存量债记账(重要) + +收口全量闸(不带参数,域=full)共跑四轮,前两轮红均**非本批新增**: + +1. **首轮(9f94c9e1)**:02 现红 exit 1(9 套件失败)+09 红项指纹变化。逐项核对=待办清单「迭代 41 测试债修复」条在册清单(config_db 解析错 cattr/config_db_fatal_oob 退出码 2≠1/table_structure_guard 缺 meta_state/treasure_items 缺 crossrun/standee_fx_sweep set_trans 空引用/forge_workbench 120 秒超时挂死/tree_requires_level 空基址/save_manager_domain 缺 _migrate_legacy_save/theme_projection 缺 _recent_list;S9 类型闸 24 处+S10 文件头 4 处+S11 adventure_table.gd:55)——全部为迭代 41 遗留债,该条目已载 2026-10-29 用户裁「带红合并,代码域现存红全部由本条目承接」。基线滞后成因=迭代 41 两卡特许直接合回未重跑代码域闸(合回 its 回执为 docs 域),基线 02 键停在绿、09 键停在旧红项构成。 +2. **指纹修正(117a37e2)**:02 的 forge_workbench 超时行内嵌 pid=NNNN,逐轮变化使存量红指纹不可复现——fingerprint 对 pid 归一化(pid=N)后再入哈希;判定口径(FAIL 行集合)不变。 +3. **基线记账(80b49c0f)**:02/09 两键按 run A 实测重生成(02 记存量红 fp f9865f1a5a44,09 改记现行指纹 1a9ad773489f),记账注记全文写入 baseline.json note;人工确认凭据=上述用户裁。 +4. **Run B(80b49c0f)全绿**:存量红·对基线零新增,exit 0。 +5. **master 推进处置**:收口期间 master 落了 60c1a962(尾波清偿批登记,文档域)。首轮合并未按「先并入分支、重跑全量」流程执行,已作废重做:master reset 回 60c1a962 → 分支并入 master(0f9d1c85)→ Run C 重跑全量全绿 → 再合回。 +6. **Run C/最终回执(0f9d1c85)**:域=full、scope=full(本批 game/ 改动仅 run_all.gd=测量面批:03/04/05 SKIP、02 全套件 65 跑 56 绿 9 存量红、00/01/09 实跑绿)、dirty_game=false、all_green=true、changed_vs_baseline=[]、tree=284448b47385cff50fe782fdf2ba0c4f77846d69。 +7. **合回校验**:master^{tree}=284448b4…=回执 tree,一致;合并提交 8bb3541c;合并后主区两件秒级事已做(--editor --quit 刷缓存+冒烟 15 项 0 失败)。 + +## 六、边界与移交 + +- 本批自身是测量面批,02 过滤路径的端到端闸内形态由沙箱七场景+run_all.gd 直跑证据承载;首个行为面批收口时闸会实际走 related 路径(输出「关联档选闸:02 选套件跑」),如映射表归族与卡片申报有出入,按批修映射表(表只在 run_all_gates.sh 一处)。 +- 存量债(9 套件+S 域红)归待办清单「迭代 41 测试债修复」条;该批修复实测归绿后需再换代基线 02/09 两键(红→绿走「改善」记账或重生成)。 +- 全量回归自此由用户自发发起(合入后无自动兜底,2026-10-29 用户裁)。