修复AGC无人值守游戏生成阻断

普通Web工作台默认使用单Supervisor自主生成链路

补齐安全默认返工、结构化诊断与同Run恢复

绑定当前revision、入口摘要和双视口试玩完成凭证

增强Runner跨boot单飞恢复与game-chat来源隔离

新增真实Provider验收入口及确定性回归

同步更新技术方案、开发流程和共享决策
This commit is contained in:
kdletters
2026-08-14 07:14:25 +08:00
parent 7774642365
commit 02fff8f308
52 changed files with 4823 additions and 357 deletions
@@ -7166,6 +7166,16 @@
- HTTP 传输边界:根 H5 包不得依赖 Tauri guest 插件;AGC 独立包保留 `@tauri-apps/plugin-http`。Rust 插件显式关闭默认特性,只启用 `charset`、`cookies`、`http2` 和 `rustls-tls`,避免 `reqwest/system-proxy` 通过 Cargo feature union 把画布、Provider、Runtime 与本地回环夹具统一接入 OS 自动系统代理;如未来产品要求正式客户端继承系统代理,必须按各客户端明确设计并单独完成跨平台验证。
- 运行决策:Godot 项目提交给 Project Supervisor 时使用 `standard` Run Profile,避免触发 Web 专用 `game/index.html`、HTTP preview 与自主 Web 完成门。Godot 编辑器启动和内嵌运行预览不在本切片范围。
## 2026-08-13 AGC 普通 Web 工作台默认单主无人值守生成
- 决策:项目首页进入的普通 Web 工作台默认 `single-supervisor`,提交固定映射为 `project-supervisor-game-chat + autonomous-game-build`。该决策覆盖此前“普通 GUI autonomous 继续固定完整 DAG”的现行入口规则;固定专业 autonomous DAG 只保留给显式 `professional-dag` 和专业 CLI 验收,Supervisor 调试与 Godot 继续 `standard + project-supervisor-gui`。
- 路由:game-chat 根先由 Supervisor 持久化意图,随后只启动唯一 `code-prototype`;主 Run 完成资产审计后,只有真实缺口才可一次委派一个受限美术 child。普通用户界面不再展示固定专业 DAG、子 Agent Dock 或“严格审批”,统一显示自动执行与中性生成状态。
- 澄清:仅可信 game-chat autonomous 根链及其绑定 child 将 `NeedsUserInput` 转为安全默认返工,并保持同一主 Run 继续;问题正文与公开问题指纹清除,内部只保留不公开的 SHA-256 幂等 marker。standard、GUI/CLI 调试、非可信或身份不完整链路仍保留原人工澄清,自动化不能扩大项目外写入、任意命令、发布、凭据或未知外部副作用权限。
- 诊断:`game.static_smoke` 必须先解析可执行内联 JavaScript。公共失败回执只暴露稳定结构化字段;同一 owner 额外取得脱敏有界诊断。可修复失败按同 Run 的“诊断、修改、当前 revision 静态复验、双视口试玩”循环收口,不能以继续堆关键词或要求用户发送“继续”代替修复。
- 恢复:跨 boot 取得 `execution-owner` 即幂等触发既有 durable recovery scan;安全动作续跑,未知外部副作用保留证据并进入 reconciliation,同 boot 重入不得重复恢复副作用。
- 完成:根 Run 只有在正式 artifact、manifest、当前 revision static smoke 和 desktop/mobile `preview.validate` 一致时唯一 completed。确定性 loopback E2E 是提交门,真实 Provider 空项目单输入、零人工介入 smoke 是现场验收门,两者不得混称。
- 关联:`docs/project-memory/plans/【实施计划】AGC无人值守游戏生成可靠性收口-2026-08-13.md`、`docs/technical/【技术方案】AI游戏创作智能体App实施计划-2026-06-24.md`。
## 2026-08-12 AGC Agent 设置分层界面
- `RuntimeConfigDialog` 保持现有配置字段、持久化格式、Runner 读取和 MCP 测试语义,只重构界面信息架构。
@@ -680,3 +680,11 @@ npm run ai-game-creator-shell:agent-runtime:supervisor-swarm-tool-plan-handoff-r
- 修改预览完成门时,分别覆盖 child `preview-readiness` 当前 revision smoke、child `preview-playtest` 到根 Supervisor 合同的 browser receipt,以及 WebSocket 启动前退出的稳定基础设施分类。基础设施错误必须在一次浏览器调用后让 run 失败,不能只做到后续调用快速失败而继续消耗 Provider 轮次。
- 修改 game-chat Runner 生命周期时,至少覆盖 busy durable sidecar 拒绝 client-exit、拒绝后 `draining=false` 可继续执行、清空后 idle shutdown、重复 shutdown 幂等;Windows target check 继续保留,不能以删除 Job Object 或放任后台继续来规避 reconciliation。
- LLM 配置回归必须穷举全部规范 Agent,校验无遗漏/重复、显式 patch 覆盖默认,并锁定 GUI 展示映射和 Rust resolver 一致;模板与 GUI 初始草稿不得把规范默认持久化成 `agentLlm` 显式覆盖。`--llm-status` 要输出逐 Agent 实际 reasoning/timing/retry 值。运行日志与当前配置冲突时,先区分 durable run snapshot 和后来修改的文件,不能按当前文件反推历史请求。
## AI 游戏创作普通 Web 工作台无人值守验收
- 普通项目首页进入的 Web 工作台使用 `single-supervisor`,提交必须是 `project-supervisor-game-chat + autonomous-game-build`;持久 Supervisor 决策前零 child,之后只启动 `code-prototype`。显式 `professional-dag` 与 CLI 专业验收继续完整 autonomous DAG,Supervisor 调试与 Godot 继续 standard;这些显式入口不受普通默认值影响。
- 修改入口或路由后,至少运行 AGC typecheck、`agentRuntimeModel.test.ts` 和挂载后的 `appSurface.test.ts`,同时断言普通工作台不展示专业 Agent 栏、子 Agent Dock 或审批按钮;显式专业入口仍可访问这些开发能力。steer 必须精确匹配 source、profile、Session 和 run。
- 修改 smoke、delivery 或 recovery 后,必须用确定性路径证明:首次 `game.static_smoke` 精确报告 JavaScript/合同失败;公共回执不含诊断和绝对路径;同 owner 取得脱敏诊断;同一 `code-prototype` Run 有真实 mutation;最新 revision 的 static smoke 与 desktop/mobile `preview.validate` 均通过;根 Run 只有一个 completed;confirmation 与 user-input 为零。
- 修改 `execution-owner` 后必须覆盖跨 boot 首次 claim 自动触发一次 recovery scan、同 boot/重复 hydration 幂等不重复,以及未知外部副作用仍进入 reconciliation。不能只证明 OS 锁可重新取得,也不能依赖用户显式 `/resume` 或点击继续。
- 最终交付把“确定性 mock/loopback E2E”和“真实 Provider 空项目 smoke”分开报告。未完成后一项时可以说明实现和回归已完成,但不得宣称已经证明真实场景全程无人介入。
@@ -1074,3 +1074,13 @@ game-project/
- 所有静态 delegate、ready child 和 isolated child 都只读继承根合同与当前 Acceptance Graph;isolated child 还必须实际收到自己的 `acceptanceCriteria / expectedArtifacts / writeScopes`。继承上下文不扩大工具、目录、写入权限或 expectedArtifacts。专业 Agent 只能报告局部结果、证据和剩余风险,不能修改根合同、根验收图或宣布用户总目标完成。
- Acceptance Graph 节点由 Supervisor 针对当前任务动态生成,不来自玩法模板。节点记录 required/optional、依赖、状态、证据引用与摘要;只有同一可信根 Supervisor 能调用 `agent.acceptance_update`,且该动作必须独占一轮。failed 与 not-observed 节点形成下一轮定向返工集合,未提交的 passed 节点保持不变。
- 完成门在普通收束、finalization 和 prepared 恢复中统一消费 Acceptance Graph。任一 required 节点为 failed、not-observed 或缺失都会阻止最终回复;工具成功、计划 completed、文件存在、smoke 或 preview 单独通过均不代表用户目标完成。项目 revision 改变后,整张图先进入待 Supervisor 确认状态;Supervisor 只更新它判断为受影响的节点并确认 current revision,未提交的 passed 节点及其证据保持不变。requiredEvidence 必须命中 Runtime 明确允许的持久证据工具集合,拼错、控制面、纯协调工具和依赖动态 catalog 的 MCP 调用不能形成不可完成合同。动作回执记录执行边界的 `projectRevisionBefore / projectRevisionAfter`:非 mutation evidence 的 before、after 都必须等于验收时 current revision;mutation evidence 的 after 必须等于 current revision。旧 revision、跨 revision 只读结果或执行后延迟落账的回执都不能重放为 passed。
## 2026-08-13 普通 Web 工作台无人值守生成可靠性收口
- **入口覆盖**:本节取代本文更早“普通 GUI autonomous 继续固定完整 DAG”的现行含义。项目首页进入的普通 Web 工作台必须显式使用 `single-supervisor` 编排,提交映射为 `project-supervisor-game-chat + autonomous-game-build`;持久化 Supervisor 决策前零 child,决策后只启动唯一 `code-prototype` 主 Run,美术仅在该 Run 完成 `asset.list` 并形成可证实缺口后一次委派一个受限 child。独立 game-chat 入口沿用相同规则。显式 `professional-dag` 与 CLI 专业 autonomous 验收继续使用 `project-supervisor-gui|cli + autonomous-game-build` 的原有完整 DAG;Supervisor 调试与 Godot 继续 `project-supervisor-gui + standard`,不得被普通入口默认值误改。
- **普通界面**:`single-supervisor` 工作台不展示固定专业 DAG、子 Agent Dock 或“严格审批”,只显示总控对话、生成状态与“自动执行”。这只是产品投影收敛,不删除开发诊断入口,也不放宽权限;项目外写入、任意 shell、发布、凭据、系统设置和未知外部副作用继续失败关闭。
- **无人介入语义**:可信 game-chat autonomous 根链路及其绑定 child 不得停在普通 `waiting-for-confirmation` 或 `waiting-for-user-input`。child 的信息不足交付在严格身份校验后转为同一父链可执行的安全默认返工,问题正文与公开问题指纹清除,内部只保留不公开的 SHA-256 幂等 marker;standard、GUI/CLI 调试和非可信绑定继续保留人工澄清。可恢复失败必须回到同一 `code-prototype` Run,不能要求用户发送“继续”。
- **验证反馈与完成门**:`game.static_smoke` 先校验 `<script>` 闭合和全部可执行内联 JavaScript 语法,再检查 Canvas、输入、状态、胜负与重开合同。失败回执的公共投影只包含 `commandId/passed/failureCode/check/path=game/index.html`;同一 owner 可额外读取经脱敏、有界的 `diagnostic`,以执行“诊断 → mutation → 当前 revision static smoke → desktop/mobile preview.validate”循环。根 Run 只有在正式 artifact、manifest、当前 revision 静态凭证和双视口试玩一致时才能唯一 completed;同 revision 同失败且无新 mutation 必须命中停滞门,不能无限猜测。
- **Runner 接管**:新 boot 取得跨 boot `execution-owner` 后必须在释放 owner-map 锁后幂等触发既有 durable recovery scan。纯 Provider、项目内文件和验证动作按 checkpoint 续跑;结果未知的进程、付费生成或其它外部副作用进入 `needs-reconciliation`,禁止盲目重放。重复 hydration/read 或同 boot claim 不得重复 child、消息、action 或付费请求。
- **验收层级**:确定性 loopback E2E 必须覆盖普通入口路由、唯一 `code-prototype`、首次语法 smoke 失败、同 Run 取得结构化诊断并修改、当前 revision 静态与桌面/移动试玩通过、根 Run 唯一 completed、确认/追问为零。该结果只证明 Runtime 控制面;使用真实 Provider 的空项目单输入 smoke 全程无人介入成功后,才能宣称现场目标完成。
- **真实 Provider 开发验收入口**:`--game-chat-smoke` 是受限 CLI 标记,只允许与默认 `project-supervisor` 的 `--swarm-chat --autonomous-game-build` 组合,将新根 Run 绑定为 `project-supervisor-game-chat`,不作为产品 UI、公开 API 或通用 source 覆盖能力。现有 playable harness 通过 `npm run ai-game-creator-shell:agent-runtime:supervisor-game-chat-single-main-playable-real-e2e` 显式启动该模式,启动前同时校验 `project-supervisor` 与 `code-prototype` 的 Provider 配置,并在隔离 AppData 中验收唯一单主 child、当前 revision 的 static smoke 及 desktop/mobile 试玩回执。只有显式执行这条真实 E2E 命令才会发起 Provider 请求;普通 self-test 不读取凭据、不调用 Provider。现场 smoke 若在配置门因缺少 API Key 阻断,必须报告 `providerUsed=false`,只能证明入口、验收逻辑与无 Provider 自测已落地,不能宣称真实现场验收完成。