清理成组未使用实现并更新现役契约

删除旧Home用户对话入口、附件sidecar和无调用包装
保留现役附件输入、内部Home通道及重生成保护
更新过期契约与文档索引,记录30条警告清理和67项测试结果
This commit is contained in:
2026-09-23 12:40:32 +00:00
parent 600beb452b
commit 36f1adac61
20 changed files with 41 additions and 1069 deletions
@@ -920,9 +920,9 @@ Godot 编辑器操控复用既有 AGC 插件宿主、EditorAdapter、Runner 和
## 2026-08-31 Direct 本轮附件只映射路径,不灌正文、不区别 GDD
- 背景:issue #212。首页附件已经复制到 `assets/uploads/` 并登记,但 Direct 首轮只把用户原文发给 Codex,原文件名不是磁盘路径,模型会另起一套玩法。
- 决策:Home 与 Project 共用 `DirectCodexTurnAttachment`。有项目路径或导入状态时,只在发给 Codex 的 user prompt 末尾附有界 sidecar(原名 → 项目相对路径、类型、大小、状态);无路径且无状态时保持首页元数据文案。不灌正文、不强制读取、不按 GDD 开特例。做成游戏固定 prompt 不改,同一条 Direct 首轮附件链自动吃到 sidecar。jsonl 与工作台气泡仍只写用户原文。
- 影响范围:`direct_codex_attachments.rs`、Direct command 边界、首页建项 latch、工作台首轮 invoke;Supervisor / 做方案首轮忽略附件 sidecar。
- 验证方式:Rust 渲染测试(Home 逐字兼容、Project 映射、非法路径);home.suite 附件 Direct invoke 含 `localPath`;无附件不出现 `attachments` 键;做方案首轮仍走 Supervisor 且无 sidecar;后续手打消息不带 attachments。
- 当前决策(2026-09-23 更新):原 sidecar 已由 canonical `userItem.content` 中的 `agc_attachment_reference` 替代;每项保留名称、媒体类型、大小、项目相对路径和状态,经 validation/wire 校验投影。不灌全文、不强制读取、不按 GDD 开特例。未注册的 DirectHome 命令及其专属附件 DTO、渲染、prompt key 已清理,首页先创建项目再进入 DirectProject。
- 影响范围:`direct_codex_attachments.rs` 只保留现役附件清洗与数量边界,canonical user-item 深模块、首页建项与项目工作台继续使用现行结构化输入;历史按主实施计划的完整 canonical 条目合同记录。
- 验证边界:保留 canonical validation/wire、附件路径与状态投影及首页创建项目测试;退役 Home/sidecar 专属测试一并清理,不要求恢复旧独立 attachments 参数。
- 关联文档:`docs/technical/【技术方案】DirectProject本轮附件路径映射-2026-08-31.md`、issue #212。
## 2026-08-26 运行中自主扩图提案留在编排层
@@ -8394,7 +8394,7 @@ CI 上 `background_agent_runtime_recovers_stale_running_before_pending_task` 在
- 恢复入口:通用恢复扫描与 Direct 回合启动前置恢复都必须发现 `resetting`、`compensating` 和带替换锚点的 `in-progress`,并在专用执行锁内清阶段、补偿和中性化。补偿恢复旧文件并清除本地 replacement CAS 锚点,但保留已 `prepared / accepted` 的阶段账本、原 `Idempotency-Key / operationId`;同冻结意图续跑必须复用原请求身份,未知账本在文件 mutation 前失败关闭。冻结意图一致时,新进程 invocation 可接管未完成阶段;`completed` 以原始外层 `clientTurnId` 等值回放,不受模型 brief 重采样影响。App 在 Direct 调用前幂等持久化原始 User 消息与稳定回合 ID,Tauri 在成功返回及 `completed` 事件前以同一回合 ID 幂等持久化 assistant 终态,项目重开只续跑最近一条真正未回答的合法原始回合。
- 资源投影:工具返回主包路径、已登记切片路径、安全 `resources` 身份,并分开保留普通 warning 与 slice warning。标准核心图集首次创建和重生成都必须严格提交恰好四张 canonical 切片;alpha、可见像素、规范像素唯一、Canvas resource/asset identity 唯一任一不满足即失败。旧项目补登记与已有完整登记都必须由客户端私有回执交叉验证,不能把可编辑公开清单或顶层 manifest 中的自述身份单独升级为权威源;部分登记要么按私有回执事务补全,要么明确 warning。规范图只作 reference,不再计为运行态平台素材。
- 隐私投影:成功结果中的普通 warning 与 slice warning 也必须逐条经过宿主路径、凭据、URL 脱敏及长度限制,不能只保护错误分支。
- 权限边界:开放的是 `regenerate / registered resources / playtest` 等产品语义,不是原始最高权限。`regenerate` 只由当前请求最新一条原始 User 消息授权并绑定客户端稳定 `clientTurnId`;模型参数、MCP 自动批准和缺失 clientTurnId 都失败关闭。授权输入先对完整原文做 Unicode NFKC 与撇号规范化,随后整串必须完整匹配审核过的独立立即执行指令,只允许句号/感叹号收尾;不得剥离引号、方括号或代码片段,动作前后也不得携带 brief、条件、否定、选择、确认、费用、延迟或其它文本。复杂风格需求先单独描述,再由下一条独立确认消息授权,不能用开放式 deny 词表推断付费同意。同一进程重复水合相同 stable turn 时,“回合仍在运行”只作为非终态占用提示,不得以该 turn 的稳定 assistant messageId 持久化并覆盖原执行结果。DirectProject 的 cwd、sandbox writable root 与文件批准根只允许 canonical 且非 symlink/reparse point 的真实 `game/`,canonical 项目根的原生 OS 路径字节和权威 manifest `projectId` 经域标签及独立长度前缀编码后共同绑定连接池与 thread 身份;项目根、`assets/`、`.agent/` 不可写,网络关闭,命令、MCP 扩权和额外权限批准全部拒绝。受控 `agc_tools` 只在客户端内部从同一真实 `game/` cwd 反查已校验的 canonical 项目根,不把项目根加入 Codex writable roots。Codex 不获得任意 Tauri invoke、Token/Key/Cookie;`resources` 也只投影稳定身份与相对路径,不返回 prompt、provider route、URL 或绝对路径。
- 权限边界:开放的是 `regenerate / registered resources / playtest` 等产品语义,不是原始最高权限。`regenerate` 的旧文本授权规则已由 2026-09-03 MCP 决策替代:Codex 根据当前用户请求显式选择工具模式,客户端不再用关键词、否定词表或独立确认句式判断业务意图;保留活动客户端回合、稳定 `clientTurnId`、首次 brief 摘要、项目权限、计费、幂等、锁及未知结果恢复边界。2026-09-23 清理了旧文本判断残留;此处其余旧沙箱描述按主实施计划后续 DirectProject 完整访问合同覆盖。同一进程重复水合相同 stable turn 时,“回合仍在运行”只作为非终态占用提示,不得以该 turn 的稳定 assistant messageId 持久化并覆盖原执行结果。DirectProject 的 cwd 与 AGC 项目身份根使用 canonical 项目根及权威 manifest `projectId`,进程 sandbox 和批准规则按主实施计划“DirectProject Codex 完整访问覆盖”;不再沿用此旧决策中的 game/ 唯一可写根、关闭网络或拒绝全部命令的描述。Codex 不获得任意 Tauri invoke、Token/Key/Cookie;`resources` 也只投影稳定身份与相对路径,不返回 prompt、provider route、URL 或绝对路径。
- Direct 恢复 claim:同一 App 实例重复水合相同 stable turn 并收到“仍在运行”时,必须释放该 `projectPath + clientTurnId` 的恢复 claim,且不得写稳定 assistant 终态。后续显式刷新对话可按原身份重新读取或续跑;不新增无界自动重试。
- 严格图集崩溃收口:workflow 在严格图集调用前先持久化 `strictSpritesheetPending` 并冻结底层严格事务覆盖的九项旧合同身份;旧路径可精确冻结为缺失。Provider 完成结果先绑定原 retained stage ledger。恢复在同一项目锁内对账严格事务;只有新九项合同、规范图/背景图替换锚点与 retained spritesheet result 三者一致才补写 `completed`,旧九项合同才允许补偿。旧合同判定、写 `compensating`、恢复两项素材与登记、回读和清锚点必须在同一项目锁内,重启已有 `compensating` 也重新判定;第三种混合、漂移或 foreign result 状态进入 reconciliation。不能在主图集与四切片已整体提交后仍按两文件 rollback 制造混合包;若中断前阶段告警尚未进入 durable completed result,恢复结果追加“原阶段告警无法完整重放”的明确 warning,不静默清空。
- Direct 对话恢复从新到旧扫描全部合法 User 回合,遇到较新已回答回合继续向前,不得丢失更早未回答回合。成功返回时 Rust 已先持久化 assistant,前端冗余 append 失败也不得重跑 Provider;普通错误终态的显式 append 失败后,恢复 claim 必须保持到 React fallback writer 对同一稳定 assistant messageId 的写入明确成功或失败,不能在 writer 尚在途时按旧会话快照重跑。fallback 成功后释放 claim;fallback 失败时跳过该 writer 的无界迟到重试并释放 claim,后续显式重新加载对话才可复用原稳定 `clientTurnId`。终态收敛后删除 claim,避免长会话无界增长。
@@ -32,7 +32,7 @@ AI 游戏创作 / DirectProject / UI workflow:
7. `docs/technical/【技术方案】DirectProject客户端Skill与MCP扩展导入方案-2026-08-31.md`
8. `docs/prd/【AI游戏创作】项目开发工作台PRD-2026-07-20.md`
9. `docs/technical/【技术方案】立项策划Agent(Fast GDD)-2026-08-10.md`
10. `docs/technical/【技术方案】DirectProject本轮附件路径映射-2026-08-31.md`
10. DirectProject 附件按 AGC 主实施计划的 canonical `userItem` 合同;`docs/technical/【技术方案】DirectProject本轮附件路径映射-2026-08-31.md` 为旧 sidecar 历史方案,不作为实现入口。
11. Direct 历史、审计与耗时按 AGC 实施计划及原始历史专题;`docs/technical/【技术方案】Direct回合行为审计账本-2026-08-31.md` 已归历史,不作为实现入口。
12. `docs/technical/【技术方案】GameAgent资源自由画板与快速编辑-2026-08-20.md`
13. `docs/【技术方案】UI工作流资源桥接与Runtime执行-2026-08-24.md`
@@ -383,6 +383,26 @@ W192 的外层别名删除后,首次编译暴露出 `codex_app_server/mod.rs`
本批未运行全部 Rust 用例、正式 editor features、Linux/macOS 构建、真实 Provider、GUI 或安装包验收。原 30 条成组候选、其余测试 / 平台边界项和 3 条契约待核定项仍待后续处理。
## 12. 成组候选清理实施(2026-09-23)
第 11 节局部清理已提交为 `600beb452`,本批从其默认 Windows dev 的 150 条 warning 基线继续处理第 10 节 30 条成组候选:
- 未注册的 Home 用户对话命令、创建标记、prompt/reply 与旧附件 sidecar DTO/渲染链,以及专属测试和 7 个无消费者提示词键。canonical 附件校验、清洗与数量上限保留。
- 旧客户端美术重生成文本判断 3 项及专用导入;按 2026-09-03 MCP 决策更新过期授权说明,保留活动回合、稳定摘要、权限、计费、幂等和恢复。独立审查指出同段旧 sandbox 描述也与现行完整访问合同冲突,已改为引用现行合同。
- 无消费者的短等候 / 单次取锁包装及其常量、重导出;孤立 join 的无预算包装。正式有界取锁、锁内认领和 payload 预算实现不变。
- 旧账户素材投影包装、Runner 字符串通知适配和孤立 HTML 渲染入口。现役素材安全投影、typed 通知、JS 导出及共享节点渲染继续保留。
**Home 边界纠正**:`commands.rs` 的自动项目命名和提示润色仍消费 `direct_game_creator_home_codex_chat`,因此保留内部 DirectHome 只读 app-server 通道、连接池隔离和测试;只删除未注册的用户对话入口,不按 `Home` 字面量清空共享实现。`check-config.mjs` 禁止注册该旧命令的现役合同保持不变。
旧附件 sidecar 专题转为历史,主实施计划与共享记忆明确当前 canonical 输入合同,README、文档地图和生命周期索引同步调整。本批未改变公开 Tauri 输入 DTO、存储格式或用户数据。
验证结果:
- 默认 Windows dev `cargo check --locked --offline` 通过,warning 从 150 降至 **120**(dead_code 88、unused_imports 22、unused_variables 9、unused_assignments 1),净减少 30 条;另有 5 条 ts-rs 提示未变。W180 的混合导入诊断只移除了已删除的取锁包装,剩余两个测试用途导入仍保留,没有新增未使用符号。
- 44 项定向单元测试通过,覆盖 canonical 附件校验与投影、内部 Home 通道隔离、Direct prompt、重生成回合及摘要绑定、阻塞池取锁、素材投影、Runner 精确身份与唤醒、join 认领和 UI 持久化;提示词来源边界 6 项、bundle 构建 17 项通过,共 **67 项**。
- `check-config.mjs`、定向 rustfmt、编码检查、文档索引检查与 `git diff --check` 通过。单元测试构建自身输出 384 条 warning,属于测试 target 的独立口径,不计入上述默认构建 120 条。
- 未运行跨平台构建、完整 Rust 测试集或 GUI 联调;本批不扩展处理其余测试 / 平台用途项与 3 项待澄清契约。
## 附录:237 条编译器诊断位置
以下是诊断的人工可读整理,不保存原始构建日志、本机路径或 target 缓存路径。位置相对 `apps/ai-game-creator-shell/src-tauri/`;行号只对应本节基线,修改后以符号搜索及重新编译为准。每条保留一个主要 span,编号用于本清单内跟踪,不表示独立业务缺陷。生成产物项须回到 `build_support/runtime_prompt_bundle.rs` 处理。