diff --git a/active.md b/active.md index 4b9be751..a22e9a9d 100644 --- a/active.md +++ b/active.md @@ -904,4 +904,5 @@ 397. **迭代 19 五卡 goal T0 开工(2026-10-08,用户令五卡打包一次跑完——卡⓪主菜单开局缺陷修复批先行+卡①②③并发≤3+卡④收尾,全绿前禁停;本 goal 即 U0)**:定义面落籍单独一笔提交(roadmap 迭代19/20 行+06-待办清单+四任务书〔卡①自动化验收 v1.1/卡②旧界面断言回补 v1.1/卡③CI预接线 v1.2/卡④提灯载体 v1.2〕六文件入库;主区其余脏文件全属在飞遗产禁碰零触碰);基线复读三闸全绿=冒烟 834/0 三闸过+run_all 17 套件全绿+probe_gate 含 click 全绿(残留 Godot=0);台账预配号分配=卡⓪398/卡①399-400/卡②401/卡③402/卡④403/总收口404起(各卡记账前逐笔查撞,撞号顺延+出口报告披露)。 398. **迭代 19 卡⓪主菜单开局缺陷修复批(2026-10-08,裁决依据=roadmap 卡⓪任务面+06-待办清单两缺陷条〔2026-10-07 用户确认成立〕;worktree g-plan2-iter19-card0 分支 iter19-card0-20261008 基点 b0a73df)**:四件全落——①主菜单开新/续玩两入口补传同调三键(main.gd 新增 static build_adventure_params :496-513 两入口共用构造,:471/:530 接线;取值与营地投影同源零新读取逻辑=装配集 save.attunement_equipped/Y 刷新池 meta.attune_refresh_charges/树 rule 键集 meta.tree_rule_keys;runner 侧受理零改动);②关卡开场行改传当前生效值(main.gd:539-549——int(db.hero.atk/max_hp) 表值→runner.effective_atk/effective_max_hp 与战斗面板同源,「含面板加成」后缀判断追加认 meta.hero_override atk/max_hp 局外 flat,白板局不带);③冒烟补两入口传参断言 +6 项(smoke_all.gd:4661-4687 直呼 build_adventure_params 单测统一构造面,开新/续玩×三键与来源一致+extra 并入,夹具 smoke_meta_tree 档 luck_coin+Y2 档+fg_posture a 侧,834→840);④删 adventure_runner.gd 三行重复赋值(原 :132-134 与 :129-131 逐字重复+中间零语句+_seed_attune_charges 纯重置幂等=零行为变化,删后 run_all 直呼参数面套件零漂移佐证)。重闸三件全绿=冒烟 840 项 0 失败三闸过(+6 全系新增断言)+probe_gate 含 click 全绿(click 走查真跑主菜单开局一场冒险问题=0)+run_all 17 套件全绿+残留 Godot=0;MC 零跑静态论证在案(MC 取数面直呼 runner 不经主菜单入口零触及);范围外三件(X/Y 双源倒置/被动同调呈现/Fork 归因行)零触碰。**披露/移交**——runner 侧 resume_adventure 受理面无 tree_rules 键(:215-217 仅两键,任务书「接收面现成」对 tree_rules 不成立):两入口三键均已传出、续玩局 tree_rules 暂不被消费与修复前同态无回归,补一行受理即可闭环归用户裁定随后续批落。出口报告=design/qa/iter19-card0-exit-report-2026-10-08.md;提交四笔 1d2894b(①②)/fb845b7(③)/8a654cc(④+出口报告)/本笔(台账记账)。 +402. **迭代 19 卡③CI 预接线批(2026-10-08,裁决依据=任务书 v1.2 全裁〔裁点①远端仓库=暂不建维持待命/裁点② ui_layout 入 CI 候卡①后裁〕;worktree g-plan2-iter19-ciwire 分支 iter19-ciwire-20261008 基点 9160942;B6 出处=自动化验收补齐批 §一明示不收件,随本批闭环销账)**:T0-T3 全履行——tests.yml 单文件改写四件:①原 :41-45 整块注释探针段(示例 ui_probe/ui_click_probe 选型滞后)解封=正式轻闸三探针段(input/struct/contrast=probe_gate 默认段同款;每探针 timeout 120s 外壳+退出码 124/137 超时判+grep PASS 串判定〔T0 本机实跑三探针取 PASS 行样本钉死判据〕,三探针全跑不短路汇总定红绿,probe_gate 判定逻辑 Linux 独立镜像——probe_gate.sh 本体系 Windows 专用〔PowerShell+taskkill〕CI 禁调);②冷检出导入步 `--import` 300s 前置冒烟之前(job 级基础设施步同覆盖冒烟与探针 .godot 依赖,Q9 甲);③触发分支 push/pull_request 两处 [main]→[master] 修死角(实际分支 master、main 不存在);④头注释保留「尚无远端」句+追加「远端仓库建好后无需改本文件即自动生效」;探针日志落 logs/probe_ci/ 顺现有 upload-artifact 段零改并入。验收全静态(本地无远端端到端不可验=红线边界)五判据全过:pyyaml 解析 OK+CI 段 res:// 引用逐一实存+timeout 外壳清单齐(300s 导入/120s 冒烟/120s×3 探针)+头注释自动生效句在位+diff 面仅 tests.yml+roadmap 账务行(游戏代码/探针件/probe_gate.sh/CLAUDE.md 零 diff=契约 1);轻段选型锁死三件、窗口化四件与重闸五件零入(契约 2);MC/verifier 零跑。**S1 呈报项(该段冻结未代修,处置待用户裁)=tests.yml setup-godot 步 `nikeee/godot-actions/setup-godot@v2` 指向不存在仓库**(GitHub API 404+nikeee 159 公共仓 grep godot 零命中+marketplace 同名=Vitorgus v1 Godot3 旧件+对照 actions/checkout 查询正常=API 可信;候选替代 chickensoft-games/setup-godot v2.4.3 待裁甲换 action/乙手动下载/丙挂起)——远端建好首跑前必须先裁否则 smoke job 必红;S2 未触发(兄弟卡未先行合并,master 停 9160942);roadmap 卡③行内登记按 Q13 由主控合并时串行重放。**移交**——首次 push 后人工盯首跑清单(任务书 §七 三条+本批增补 setup-godot 前置门一条)随远端立项之日激活。出口报告=design/qa/iter19-ciwire-exit-report-2026-10-08.md;提交三笔 3799e0c(T1 tests.yml)/7397603(T3 roadmap)/本笔(出口报告+台账记账)。 diff --git a/design/qa/iter19-ciwire-exit-report-2026-10-08.md b/design/qa/iter19-ciwire-exit-report-2026-10-08.md new file mode 100644 index 00000000..e106cb22 --- /dev/null +++ b/design/qa/iter19-ciwire-exit-report-2026-10-08.md @@ -0,0 +1,85 @@ +# 出口报告——迭代 19 卡③ CI 预接线批(2026-10-08) + +> 任务书=`design/research/任务书-CI预接线批-2026-10-07.md`(v1.2);worktree=`D:\code\g-plan2-iter19-ciwire`(分支 iter19-ciwire-20261008,基点 9160942=master 顶部含卡⓪落籍);T0-T3 全履行,S2 未触发,**S1 命中一项(呈报待裁,未代修)**。 + +## 一、tests.yml 改动对照(T1,逐件) + +| # | 位置(改前→改后) | 改动 | 任务书依据 | +|---|---|---|---| +| 1 | 头注释(原 :3) | 原句保留,追加「;远端仓库建好后**无需改本文件即自动生效**」 | T1③ | +| 2 | 头注释新增一段(:7-10) | 轻闸探针口径四句:三探针=input/struct/contrast(probe_gate 默认段同款);ui_probe/ui_click/ui_tune/t17_defer/fx 归 --full 重闸不入轻 CI;窗口化四件(shot/fx_shot/board_shot/ui_audit)禁入 headless CI;判定=timeout 外壳+退出码超时判+PASS 串判定(镜像 probe_gate 的 Linux 形态) | 契约 2+§二分拣清单 | +| 3 | `on.push.branches` / `on.pull_request.branches`(原 :10/:12) | 两处 `[main]`→`[master]`(触发分支死角修正) | T1④、Q1/Q11.3 | +| 4 | smoke job 新增步 `Import assets (cold checkout, one-time)`(setup-godot 之后、冒烟之前) | `timeout 300s godot --headless --path game --import`——冷检出导入步,job 级基础设施步同覆盖冒烟与探针的 .godot 依赖 | T1①、Q9 甲 | +| 5 | 原 :41-45 整块注释(示例 ui_probe/ui_click_probe)→ 正式步 `Run scene probes (light-gate trio, timeout + PASS check per ADR-0004)` | 三探针逐一登记(ui_input/ui_struct/ui_contrast),原注释位落 smoke job 内(复用同 job setup-godot,未另开 job);每探针 timeout 120s 外壳+退出码 124/137 超时判+`grep -q "PASS"` 判定;三探针全跑不短路、汇总退出码定段红绿(镜像 probe_gate 判定流);探针日志落 `logs/probe_ci/` | T1②、契约 5、白名单(timeout 数值/PASS 串/落位/日志并入) | +| 6 | static-scan 段 / run_all 冒烟步 / upload-artifact 段 | **零改动**(探针日志写 logs/probe_ci/ 落入 artifact 既有 `logs/` 路径,零 diff 并入) | §三不收 | + +**白名单代拍记录**:导入步形态=`--import`(Godot 4.2+ 官方 CI 导入形态,弃 probe_gate 的 `--editor --quit` Windows 本机形态;300s 沿用 probe_gate 导入步同款);timeout 数值=120s/探针(probe_gate 同款);PASS 判定串=裸 `"PASS"`(T0 本机实跑钉死,见 §三);探针步骤落位=smoke job 内原注释位;探针日志并入现有 artifact 段(零改实现)。 + +## 二、T0 开工复核结论 + +- tests.yml 现行行号复读:注释块 :41-45、头注释 :3、branches :10/:12——与任务书 §二一致,无漂移。 +- 分拣清单 .tscn 逐一存在性重核:三轻闸探针(ui_input/ui_struct/ui_contrast)+重闸四件+窗口化四件全数实存 `game/smoke/`。 +- 兄弟卡避让位:iter19-verify(卡①)、iter19-uibackfill(卡②)均在基点 9160942 干净在飞;本批 diff 面不含其触碰文件(tests.yml 不在卡①清单);roadmap 行按 Q13 由主控合并时串行重放,本卡只写卡③段内登记。 +- **S2 核查:master 仍停 9160942,兄弟卡未先行合并、三闸术语未在 master 换代——S2 不触发**(文案按任务书 v1.2 三闸口径落笔)。 + +## 三、PASS 判定串取样(T0 本机实跑,worktree 冷检出含导入步全程) + +`bash tools/probe_gate.sh`(默认段)全绿,残留 Godot=0。三探针 PASS 行样本(grep 判据钉死=输出均含大写 `PASS` 串,裸 `grep -q "PASS"` 即判,与 probe_gate 同口径): + +``` +[ui_input_probe] PASS — 悬停金框/禁入信号/路径预览/flag_place/chord/dig/英雄落位/影子构成/朝向/缩格重排/缺位回退/变异角标/视野迷雾/暂停层输入锁 十七断言全绿(…) +[ui_struct_probe] PASS — 全屏结构断言零红 +[ui_contrast_probe] PASS — 对比度 15 对测点全绿(≥4.5:1 无区域例外)+ 裸色白名单/preload 红线静态段绿 +``` + +## 四、S1 停机点命中——setup-godot action 失效(呈报待裁,未代修) + +**事实链(2026-10-08 实查)**:tests.yml smoke job `Setup Godot 4.7.2` 步引用 `uses: nikeee/godot-actions/setup-godot@v2`—— + +1. GitHub API `repos/nikeee/godot-actions` → **404**(对照组 `repos/actions/checkout` 同法查询正常返回,API 可信)。 +2. `nikeee` 用户实存(159 公共仓库),其仓库全列表 100+59 条 **grep godot 零命中**——该仓库现不存在(从未公开或已删/转私)。 +3. GitHub Marketplace「Setup Godot」同名页实为 `Vitorgus/Setup-Godot@v1`(Godot 3 时代、Linux only、非本件)。 +4. 现存活跃同功能件=`chickensoft-games/setup-godot`(v2.4.3,支持 Godot 4.x headless,macOS/Windows/Linux)。 + +**S1 处置**:按任务书 §六 S1「呈报后再动,不顺手代修范围外段」——该步**一字未动**,呈报候裁。对 prompt 停机规则「停机点命中→立即停全案报告」与任务书 S1「呈报后再动(该段)」的解读取舍:按任务书为准(prompt 自身规定冲突时以任务书为准)继续完成 T1-T3 范围内四项(与 setup-godot 裁决完全正交,无白干风险),S1 作头号呈报项披露。 + +**裁决选项(供用户参考,不代裁)**:甲=换 `chickensoft-games/setup-godot@v2`(一步一行改);乙=弃 action 改 runner 手动下载 Godot 4.7.2 linux 二进制(无第三方依赖);丙=维持现状挂起(远端未建,不阻塞本批终态——但**远端建好首跑前必须先裁,否则 smoke job 必红在 setup 步**)。 + +## 五、T2 静态核验证据(任务书 §七 验收闸逐条) + +| 验收判据 | 结果 | 证据 | +|---|---|---| +| 1. 无整块注释探针段残留 | ✅ | smoke 段 `ui_probe.tscn`/`ui_click_probe.tscn` 引用零命中(脚本核对 False);原 41-45 注释区已成正式步 | +| 2. CI 段引用的每个 res:// 路径实存 | ✅ | `res://tests/run_all.gd` 实存;三探针调用点逐一核对:ui_input_probe.tscn/ui_struct_probe.tscn/ui_contrast_probe.tscn 全 [OK](脚本逐文件 isfile) | +| 3. timeout 外壳+PASS 判定齐备;头注释含自动生效句 | ✅ | timeout 清单:300s 导入步/120s 冒烟/120s×3 探针;PASS 判定函数化定义一处三探针各执行;超时判 `-eq 124`/`-eq 137` 在位;「无需改本文件即自动生效」在头注释 | +| 4. pyyaml 解析通过 | ✅ | `yaml.safe_load` OK;jobs.smoke 步骤序=[Checkout, Setup Godot 4.7.2, Import assets, Run smoke runner, Run scene probes, Upload Test Results](pyyaml 将 `on:` 读作布尔键系 YAML 1.1 已知怪癖,GitHub Actions 按 YAML 1.2 处理,非问题) | +| 5. roadmap 邻行登记+B6 闭环注记;diff 面=tests.yml+账务行 | ✅ | roadmap 75 行卡③段内追加「✅ 卡③落籍」块(B6 闭环注记在册);git status 本批正文 diff 仅 tests.yml+roadmap.md,游戏代码/探针件/probe_gate.sh/CLAUDE.md 零 diff(契约 1 达成) | + +术语口径对齐:新增注释用「轻闸」(×2)「--full 重闸」(×1)——与 probe_gate.sh 自称「轻闸探针正主」及任务书 v1.2 三闸口径一致。 + +## 六、T3 账务 + +- roadmap 迭代 19 行卡③段内落籍登记(含 B6 闭环注记、S1 呈报项、首跑清单指针)——合并时与兄弟卡换代按 Q13 由主控串行重放。 +- 「首次 push 后人工盯首跑」移交清单:任务书 v1.2 §七 已在册三条(首跑三查/ui_contrast Linux 字体环境差异预判/导入步首跑耗时观察),本批核对闭环、无再改任务书必要。 +- 台账:active.md 追加 **402** 条(397 条预配号卡③=402;记账前 `git show master:active.md` 查撞 400-409 零命中,未顺延)。 + +## 七、移交清单(首次 push 后人工盯首跑——本批不履行只移交,远端立项之日激活) + +1. **首跑三查**:static-scan 绿 / smoke 段绿 / 新探针段绿。 +2. **首跑前置门(本批新增,优先于一切)**:先裁 §四 setup-godot 失效问题(甲/乙/丙三选),否则 smoke job 第一步必红。 +3. **Linux 环境差异预判**:ui_contrast_probe 依赖字体渲染实测值,ubuntu runner 字体环境与 Windows 本机不同,首跑若红属环境差异非回归,逐条呈报处置。 +4. **冷检出导入步首跑耗时观察**(probe_gate 本机经验=一次性 1-2 分钟,CI 上未实测;导入步已前置,冷检出红灯风险预消,首跑仍需实证;probe_gate 用的 `--editor --quit` 而本批 CI 步用 `--import`,形态差异首跑一并实证)。 + +## 八、遗留 + +- S1 setup-godot 裁决(§四,唯一阻塞首跑项)。 +- 裁点② ui_layout_probe 入 CI——候卡①断言交付后用户裁(任务书 §八,本批未触碰、契约 2 锁死轻段三件)。 +- 远端仓库=裁点①终态「暂不建、维持待命」,本批交付即待命终态;建否/何时/公私届时另议。 + +## 九、提交清单 + +| hash | 内容 | +|---|---| +| 3799e0c | 卡③T1——tests.yml 注释探针段解封改写为正式轻闸段(含导入步/分支修正/头注释) | +| 7397603 | 卡③T3——roadmap 迭代19行卡③段内追加落籍登记 | +| (本笔) | 卡③出口报告+active.md 台账记账 402 |