WIP: 修复 AGC 原生壳 CI:同步 npm/Phaser 4 迁移与需求驱动视觉合同 #308

Closed
suzmii wants to merge 1 commits from fix/ci-native-shell-tests into master
Member

背景

master 的 CI 从 2026-09-08 起持续红:

  • run 1843(456cc42dd)成功
  • run 1845(1498247e9「AGC产物迁移npm与Phaser4」)Native shell tests 31 条失败
  • run 1865(1f904d28e #274「AGC 客户端 MCP 能力暴露」)Native shell tests 52 条失败
  • run 1869 / 1871 仍是 52 条失败(2466 passed / 52 failed)

失败原因

1. 产物迁移未同步测试(31 条)

1498247e9 让新项目默认播种 game/package.json + game/dist,预览、game.static_smoke 和导出统一只认 dist;测试仍按 init_local_game_project_at + game/index.html 单文件布局造夹具,于是报「游戏目录不存在:.../game/dist」或「JSON Generator 仅支持已有的单文件 HTML 项目」。

2. 固定视觉门禁退役未同步测试(21 条)

1f904d28e 退役了固定视觉资产完成门禁、固定图片合同和 grid-2x2 切片合同,并把 prompt 改成需求驱动;旧断言仍在验证已删除的行为(visual_asset_completion_blocker_at_locked 已直接 return None,delegation 不再要求固定 expectedArtifacts,art-director / design-foundation / art-asset-plan 的 canonical options 被移除)。

3. Backend job 的 cargo 502 是基础设施抖动

crates.io 下载报 CONNECT tunnel failed, response 502;run 1845 / 1865 该 job 通过,1869 / 1871 失败。本 PR 不涉及,建议重跑确认。

落地方案

  • 新增 tests::init_legacy_single_html_project_at:先写 game/index.html 再调用 init_local_game_project_at,避免播种 npm 脚手架,明确表达“已有单文件 HTML 项目”这一受支持布局。
  • JSON Generator、game.static_smoke、预览和导出相关用例改用它。
  • 固定视觉门禁用例按当前“按项目需求决定图片数量、路径和切片”的行为重写;只覆盖已退役固定合同的用例删除。
  • accepted 生成不匹配用例接受一次 GET 探测(accepted_generation_is_authoritatively_failed_once)。
  • 恢复扫描用例对齐生成选项,使持久化请求快照与待执行动作一致。
  • 测试临时目录由 std::env::var("HOME") 改为 std::env::temp_dir(),Windows 本地也能跑。

前后对照

  • 修复前:Native shell tests 52 条失败。
  • 修复后:本地定向 76 条改动用例全部通过;模块级回归 500+ 通过,失败项全部在未修改代码的 Windows 基线上已存在,且不在 CI 的 52 条里。

验证

  • cargo test --locked --manifest-path apps/ai-game-creator-shell/src-tauri/Cargo.toml(定向 76 条)通过
  • node scripts/check-encoding.mjs 通过
  • cargo fmt --checkgit diff --check 通过
  • 未验证:Gitea CI 全量(需要本 PR 跑一次);#[cfg(unix)] 符号链接用例只能在 Linux CI 覆盖

风险 / 待跟进

  • project_gates.rsvisual_asset_completion_blocker_at_locked 现在是 return None; + 不可达块,但 main_loop.rsautonomous_completion.rs 仍直接调用 validate_manifest_required_visual_asset,门禁口径不一致,建议单独跟进。
  • Backend job 的 crates.io 502 建议重跑或评估 crates 镜像。
## 背景 master 的 CI 从 2026-09-08 起持续红: - run 1843(`456cc42dd`)成功 - run 1845(`1498247e9`「AGC产物迁移npm与Phaser4」)Native shell tests 31 条失败 - run 1865(`1f904d28e` #274「AGC 客户端 MCP 能力暴露」)Native shell tests 52 条失败 - run 1869 / 1871 仍是 52 条失败(2466 passed / 52 failed) ## 失败原因 ### 1. 产物迁移未同步测试(31 条) `1498247e9` 让新项目默认播种 `game/package.json` + `game/dist`,预览、`game.static_smoke` 和导出统一只认 dist;测试仍按 `init_local_game_project_at` + `game/index.html` 单文件布局造夹具,于是报「游戏目录不存在:.../game/dist」或「JSON Generator 仅支持已有的单文件 HTML 项目」。 ### 2. 固定视觉门禁退役未同步测试(21 条) `1f904d28e` 退役了固定视觉资产完成门禁、固定图片合同和 grid-2x2 切片合同,并把 prompt 改成需求驱动;旧断言仍在验证已删除的行为(`visual_asset_completion_blocker_at_locked` 已直接 `return None`,delegation 不再要求固定 expectedArtifacts,art-director / design-foundation / art-asset-plan 的 canonical options 被移除)。 ### 3. Backend job 的 cargo 502 是基础设施抖动 `crates.io` 下载报 `CONNECT tunnel failed, response 502`;run 1845 / 1865 该 job 通过,1869 / 1871 失败。本 PR 不涉及,建议重跑确认。 ## 落地方案 - 新增 `tests::init_legacy_single_html_project_at`:先写 `game/index.html` 再调用 `init_local_game_project_at`,避免播种 npm 脚手架,明确表达“已有单文件 HTML 项目”这一受支持布局。 - JSON Generator、`game.static_smoke`、预览和导出相关用例改用它。 - 固定视觉门禁用例按当前“按项目需求决定图片数量、路径和切片”的行为重写;只覆盖已退役固定合同的用例删除。 - accepted 生成不匹配用例接受一次 GET 探测(`accepted_generation_is_authoritatively_failed_once`)。 - 恢复扫描用例对齐生成选项,使持久化请求快照与待执行动作一致。 - 测试临时目录由 `std::env::var("HOME")` 改为 `std::env::temp_dir()`,Windows 本地也能跑。 ## 前后对照 - 修复前:Native shell tests 52 条失败。 - 修复后:本地定向 76 条改动用例全部通过;模块级回归 500+ 通过,失败项全部在未修改代码的 Windows 基线上已存在,且不在 CI 的 52 条里。 ## 验证 - `cargo test --locked --manifest-path apps/ai-game-creator-shell/src-tauri/Cargo.toml`(定向 76 条)通过 - `node scripts/check-encoding.mjs` 通过 - `cargo fmt --check`、`git diff --check` 通过 - 未验证:Gitea CI 全量(需要本 PR 跑一次);`#[cfg(unix)]` 符号链接用例只能在 Linux CI 覆盖 ## 风险 / 待跟进 - `project_gates.rs` 的 `visual_asset_completion_blocker_at_locked` 现在是 `return None;` + 不可达块,但 `main_loop.rs`、`autonomous_completion.rs` 仍直接调用 `validate_manifest_required_visual_asset`,门禁口径不一致,建议单独跟进。 - Backend job 的 crates.io 502 建议重跑或评估 crates 镜像。
suzmii added 1 commit 2026-09-09 11:14:11 +08:00
修复 AGC 原生壳 CI 测试与迁移后门禁不一致
Project CI / Repository checks (pull_request) Successful in 2m55s
Project CI / Frontend tests (pull_request) Successful in 3m13s
Project CI / Backend tests (pull_request) Successful in 6m11s
Project CI / Native shell tests (pull_request) Has been cancelled
7e4b404d5f
- 新增 init_legacy_single_html_project_at 夹具,先写 game/index.html 再初始化,避免播种 npm + Vite 脚手架
- 把 JSON Generator、game.static_smoke、预览与导出相关用例改回旧版单文件 HTML 布局
- 按 #274 退役固定视觉资产门禁后的实际行为更新 prompt、delegation、runtime_state、response_stream 等用例
- 按 npm / Phaser 4 需求驱动合同更新图集与画布生成用例,accepted 生成不匹配探测改为接受一次 GET
- 对齐恢复扫描用例的生成选项,使持久化请求快照与待执行动作一致
- 测试临时目录改用 std::env::temp_dir(),Windows 缺少 HOME 时不再失败
- 同步 project-memory 排障记录
suzmii marked the pull request as work in progress 2026-09-09 11:14:29 +08:00
Author
Member

情况说明:与 #307 重复,本 PR 关闭

发现 lhk229 在 #307 的最新提交 1b4f0ed20(「修复原生应用CI测试与持久化图片生成恢复」,2026-09-09 11:17,run 1877)已经在修同一批 CI 失败,为避免两条修复同时改到 20+ 个相同文件产生冲突,关闭本 PR。

两条修复的关系

同一批 52 条失败(31 条 npm / Phaser 4 迁移夹具 + 21 条 #274 退役固定视觉门禁):

  • 本 PR #308:只改测试。新增 init_legacy_single_html_project_at;把已退役视觉门禁用例改写成断言当前需求驱动行为;对齐恢复扫描用例的 options。
  • #307 1b4f0ed20:同样修夹具和提示词断言,并额外改了生产代码——新增 recover_persisted_visual_generation_options,从持久化请求快照为 art-director / design-foundation / art-asset-plan 恢复缺省 outputPath / aspectRatio / imageSize / assetKind / assetLabel,解决「升级后旧 accepted 账本因 prompt 重算不一致无法恢复」这个真实迁移风险;对纯退役门禁用例则直接删除。

结论

#307 为准:

  • 它的生产修复更完整,本 PR 只在测试侧对齐了同样的症状;
  • 本 PR 的分支 fix/ci-native-shell-tests(提交 7e4b404d5)保留在远端,不再推进。

#307 的提醒

  • run 1877 的 Repository checks 失败在 rustfmt(例如 init_existing_html_project_at(...).expect(...) 需要拆行),合并前需要 cargo fmt
  • 同一 run 里 Backend tests 已通过,说明 run 1871 的 cargo fetch CONNECT tunnel failed, response 502 是 runner 代理瞬时抖动,不是代码问题;
  • Native shell tests 当时仍在跑,建议确认 52 条归零后再合并。
## 情况说明:与 #307 重复,本 PR 关闭 发现 lhk229 在 #307 的最新提交 `1b4f0ed20`(「修复原生应用CI测试与持久化图片生成恢复」,2026-09-09 11:17,run 1877)已经在修同一批 CI 失败,为避免两条修复同时改到 20+ 个相同文件产生冲突,关闭本 PR。 ### 两条修复的关系 同一批 52 条失败(31 条 npm / Phaser 4 迁移夹具 + 21 条 #274 退役固定视觉门禁): - **本 PR #308**:只改测试。新增 `init_legacy_single_html_project_at`;把已退役视觉门禁用例改写成断言当前需求驱动行为;对齐恢复扫描用例的 options。 - **#307 `1b4f0ed20`**:同样修夹具和提示词断言,并额外改了生产代码——新增 `recover_persisted_visual_generation_options`,从持久化请求快照为 art-director / design-foundation / art-asset-plan 恢复缺省 outputPath / aspectRatio / imageSize / assetKind / assetLabel,解决「升级后旧 accepted 账本因 prompt 重算不一致无法恢复」这个真实迁移风险;对纯退役门禁用例则直接删除。 ### 结论 以 #307 为准: - 它的生产修复更完整,本 PR 只在测试侧对齐了同样的症状; - 本 PR 的分支 `fix/ci-native-shell-tests`(提交 `7e4b404d5`)保留在远端,不再推进。 ### 给 #307 的提醒 - run 1877 的 Repository checks 失败在 rustfmt(例如 `init_existing_html_project_at(...).expect(...)` 需要拆行),合并前需要 `cargo fmt`; - 同一 run 里 Backend tests 已通过,说明 run 1871 的 `cargo fetch` `CONNECT tunnel failed, response 502` 是 runner 代理瞬时抖动,不是代码问题; - Native shell tests 当时仍在跑,建议确认 52 条归零后再合并。
suzmii closed this pull request 2026-09-09 11:32:27 +08:00
suzmii deleted branch fix/ci-native-shell-tests 2026-09-09 11:33:31 +08:00
Some checks are pending
Project CI / Repository checks (pull_request) Successful in 2m55s
Project CI / Frontend tests (pull_request) Successful in 3m13s
Project CI / Backend tests (pull_request) Successful in 6m11s
Project CI / Native shell tests (pull_request) Has been cancelled

Pull request closed

Sign in to join this conversation.