并行拆分客户端运行时与项目摘要模块

将 runtime_tools 拆为十五个职责模块并保留 Agent 可见性

将 Runner 拆为协议端点分发客户端与所有权模块

将进程会话拆为模型持久化生命周期 IO 恢复与测试模块

将项目摘要拆为十四个无环模块并保留一百一十二个导出

记录并行拆分边界与稳定树验收规则
This commit is contained in:
AIGameCreator App
2026-07-22 14:45:36 +08:00
parent 2ec05ba85d
commit 0aaa191f8d
50 changed files with 26226 additions and 25657 deletions
@@ -3497,3 +3497,17 @@
- 原因:Provider 能看到固定截图名,却看不到持久证据路径中的 Agent、run 和 revision;让模型猜完整内部路径既不稳定,也会扩大私有路径暴露面。
- 处理:只为精确 basename 提供受控别名,解析到当前 Agent、当前 run 下最新数字 revision;显式路径继续按原规则处理。严禁跨 run 搜索“最近截图”,否则旧轮次成功证据会污染当前验收。
- 关联:`apps/ai-game-creator-shell/src-tauri/src/image_inspect.rs`。
## Rust 大文件拆成嵌套模块后不能机械保留 pub(super)
- 现象:函数正文原样搬到 `foo/bar.rs` 后,兄弟模块或原父模块突然无法访问;为了尽快编译又容易把全部符号改成 `pub(crate)`,无意扩大内部 API。
- 原因:`pub(super)` 永远指当前模块的直接父级。源文件从 `crate::agent::runtime_tools` 变成 `crate::agent::runtime_tools::bar` 后,原可见范围随层级一起缩小。
- 处理:先记录拆分前公开符号和可见性数量。只把确实需要供 `crate::agent` 兄弟模块调用的 `runtime_tools` 符号改为 `pub(in crate::agent)`,其余保持私有或直接父级 `pub(super)`;入口 facade 显式重导出原公开 API。拆分后比对公开 API、测试名和测试路径,并跑全 crate 编译与串行测试。
- 关联:`apps/ai-game-creator-shell/src-tauri/src/agent/runtime_tools.rs`、`apps/ai-game-creator-shell/src-tauri/src/runner.rs`、`apps/ai-game-creator-shell/src-tauri/src/process_session.rs`。
## 共享工作树并行拆分期间不能启动全 crate 验收
- 现象:真实 E2E 在准备 CLI 阶段以 Rust exit `101` 退出,任务、run 和 Provider lifecycle 全为 0;同一代码在并行 Agent 停笔后可以正常编译。
- 原因:多个 Agent 虽然拥有互不重叠的写入文件,但全 crate 编译会同时读取所有模块。某个入口刚写入 `mod`、对应子文件尚未全部落盘时启动构建,会读到合法的中间态半成品。
- 处理:并行 Agent 只做各自 scoped 格式和测试;主 Agent 等所有写入方正式完成并关闭后,再在稳定共享树统一运行 crate fmt、全量测试和真实 E2E。编译前失败且 `stdin/provider/task=0` 的轮次只能算 harness 准备失败,不能归因给 Runtime 行为。
- 关联:`apps/ai-game-creator-shell/src-tauri/src/runner.rs`、`apps/ai-game-creator-shell/scripts/agent-runtime-real-e2e/`。