From bbff94b6cc34dd035e593fc3a84f0ff593874200 Mon Sep 17 00:00:00 2001 From: Linghong Date: Thu, 24 Sep 2026 04:54:42 +0000 Subject: [PATCH] =?UTF-8?q?=E6=B8=85=E7=90=86=E7=BC=96=E8=AF=91=E8=AD=A6?= =?UTF-8?q?=E5=91=8A=E8=BF=87=E7=A8=8B=E6=96=87=E6=A1=A3=E5=B9=B6=E5=BD=92?= =?UTF-8?q?=E5=B9=B6=E6=9C=89=E6=95=88=E7=BB=93=E8=AE=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 删除编译警告清理过程清单及文档索引引用 将保留决定、待优化项和验证范围归入开发运维文档 保留 OAuth 未决契约入口并补充 npm 混用版本排障结论 --- ...解决】主要构建入口编译警告清单-2026-09-23.md | 943 ------------------ ...作规范】文档生命周期与现状索引-2026-09-12.md | 1 - ...发运维】本地开发验证与生产运维-2026-05-15.md | 8 + 3 files changed, 8 insertions(+), 944 deletions(-) delete mode 100644 docs/project-memory/todos/【待解决】主要构建入口编译警告清单-2026-09-23.md diff --git a/docs/project-memory/todos/【待解决】主要构建入口编译警告清单-2026-09-23.md b/docs/project-memory/todos/【待解决】主要构建入口编译警告清单-2026-09-23.md deleted file mode 100644 index ea9d678d5..000000000 --- a/docs/project-memory/todos/【待解决】主要构建入口编译警告清单-2026-09-23.md +++ /dev/null @@ -1,943 +0,0 @@ -# 主要构建入口编译警告清单 - -> 文档状态:`open-todo`(待清理;记录复现证据与候选处理方向,不单独作为实现合同) - -更新时间:`2026-09-23`。 -父规范:[本地开发验证与生产运维](../../【开发运维】本地开发验证与生产运维-2026-05-15.md);AGC 行为边界以 [AI 游戏创作智能体 App 实施计划](../../technical/【技术方案】AI游戏创作智能体App实施计划-2026-06-24.md) 为准。 - -## 1. 基线与范围 - -首次诊断的基线提交为 `016356e509f11a1a638ce45ed51b9e40ef3e36a2`,诊断时工作树干净。环境为 Windows x64、Rust `1.98.1`、Node `v24.15.0`、npm `12.0.2`。第 2~6 节和附录保留首次诊断快照;后续处理状态及契约核查见第 7~22 节,不能将附录的全部条目视为仍未解决。 - -AGC Rust 使用默认 features、dev profile;237 是本轮编译器诊断数,不代表 237 个独立根因,也不是所有平台、features 和 test targets 的总数。另有 5 条不带常规源码 span 的 ts-rs 宏提示,不计入 237。 - -下列“无 warning”仅覆盖列明命令。未执行完整 release 链接、安装包、Linux Pingora、macOS/iOS/Android 原生构建、AGC 正式 Windows 三项 editor features、`--all-targets`、全量测试或 lint。正式 editor features 的构建可能另行触发 Unity .NET publish、Godot 原生构建及资源准备,需单独验证。 - -## 2. 已执行入口与结果 - -命令默认在仓库根目录执行;明确注明目录的命令在该目录执行。 - -| 范围 | 已执行命令 | 结果 | -| --- | --- | --- | -| 主站与后台 | `npm run build` | 构建门禁通过,无 warning | -| 主站与后台类型 | `npm run typecheck`、`npm run admin-web:typecheck` | 通过,无 warning | -| Spine 工具 | `npm run spine-export-validator:build` | 通过,无 warning | -| 预览部署器前端 | `npm run preview-deployer:web:build` | 通过;1 条 npm 配置 warning | -| API 及其依赖 | `cargo check --locked -p api-server --manifest-path server-rs/Cargo.toml` | 通过,无 warning | -| SpacetimeDB 本机目标 | `cargo check --locked -p spacetime-module --manifest-path server-rs/Cargo.toml` | 通过,无 warning | -| SpacetimeDB WASM | `cargo check --locked --offline -p spacetime-module --target wasm32-unknown-unknown --manifest-path server-rs/Cargo.toml` | 通过,无 warning;不是发布或运行时验证 | -| 预览服务与管理面板 | `cargo check --locked --offline -p preview-deployer-server -p server-manager-panel --manifest-path server-rs/Cargo.toml` | 通过,无 warning | -| 普通桌面壳 Rust | 在 `apps/desktop-shell/src-tauri` 执行 `cargo check --locked --offline` | 通过,无 warning | -| 普通桌面壳配置 | `npm run typecheck -w @genarrative/desktop-shell` | 首次缺生成权限目录;Cargo 检查生成后复跑通过,无 warning | -| 移动端类型 | `npm run typecheck -w @genarrative/mobile-shell` | 通过,无 warning | -| AGC 类型及配置 | `npm run agc:typecheck` | 通过,无 warning | -| AGC 前端 | 在 `apps/ai-game-creator-shell` 使用已安装 Vite 执行 `vite build --config vite.config.ts` | 通过;1 条 chunk 体积 warning | -| AGC Rust | `cargo check --locked --offline --manifest-path apps/ai-game-creator-shell/src-tauri/Cargo.toml -p genarrative-ai-game-creator-shell` | 通过;237 条编译器 warning,另有 5 条 ts-rs 提示 | - -## 3. AGC Rust 警告 - -| 诊断类型 | 数量 | 处理方向 | -| --- | ---: | --- | -| `dead_code` | 165 | 核对正式调用、测试、平台和 feature 边界,再决定删除或条件编译 | -| `unused_imports` | 44 | 核对测试、平台和兼容重导出后局部清理 | -| `unused_variables` | 13 | 判断是冗余参数、平台差异还是漏接语义;不能仅改名掩盖问题 | -| `unused_mut` | 11 | 去除确实不需可变绑定的 mut,并复核其他配置 | -| `unused_assignments` | 3 | 核对覆盖前是否存在必要副作用,再简化赋值 | -| `unused_doc_comments` | 1 | 局部语句说明改用普通注释 | -| **合计** | **237** | 逐项清单见附录 | - -已抽查的例子(位置均相对 `apps/ai-game-creator-shell/src-tauri/`): - -- `src/agent/codex_app_server/mod.rs:3209` 起的三个参数仅向下转发,多余 mut 可局部清理。 -- `src/resource_inspect.rs:354` 的文档注释放在局部 let 语句之前,应保留说明内容并改用普通注释。 -- `src/main.rs:1739` 的 `STARTUP_PANIC_LOG_PATH` 本轮搜索只找到定义,可作为清理候选。 -- `resolve_direct_codex_game_workspace` 有测试引用;不能凭默认构建的 dead_code 告警直接删除 helper 或相关业务约束。 -- 生成的 Prompt Bundle ID 有测试引用;应核对生成器及测试边界,不修改 target 下的产物。生成源为 `build_support/runtime_prompt_bundle.rs`。 -- `runtime_actions/provider_request_builders.rs` 和 `runtime_driver/task_start.rs` 的未使用参数涉及项目写锁,应核对调用语义,避免把业务问题当成纯命名问题。 -- 当前专题仍有保留兼容 facade/re-export 的约束;不能机械执行 cargo fix 或全局 allow 来消除数量。 - -### ts-rs 宏提示(额外 5 条) - -- 4 次提示无法解析 `#[serde(deny_unknown_fields)]`,已定位到 `DirectCodexUserItem`、`DirectCodexUserContentPart`、`DirectThreadItem`、`DirectThreadEvent` 的 TS derive。 -- 1 次提示无法解析 `#[serde(deserialize_with = "deserialize_fill_amount")]`,对应 `src/ui_editor/component/image.rs:113`。 - -已静态核对生成的 TypeScript 类型形状及基础类型正确、Serde 运行时校验仍有效,本轮决定暂保留这 5 条提示,不引入 ts-rs 依赖补丁、不改业务校验或全局屏蔽提示,待上游正式版本支持后再评估。 - -## 4. AGC 前端包体积 - -Vite 提示部分 chunk 压缩后超过默认 `500 kB` 阈值;构建成功。本轮产物报告为: - -| chunk | 构建输出大小 | gzip 大小 | -| --- | ---: | ---: | -| 主包 | 2,295.76 kB | 715.64 kB | -| three | 732.83 kB | 189.32 kB | - -已确认静态加载链:`src/main.tsx` → `App.tsx` → `WorkspaceLauncher.tsx` → 首页、模板库、整页 ProjectDevelopmentView;App 还静态加载 DirectProjectChatView、PlanningChatView、RuntimeConfigDialog。工作台包含图片画布和多个编辑面板,可评估按实际页面/面板挂载时机拆分。 - -three、FBX/GLTF loader、OrbitControls 已动态 import。不能把“改为动态加载 three”作为现成修复,也不应只提高阈值宣布优化完成。主包拆分需要验证首屏、页面切换、面板首次打开与加载失败表现;three 是否保留独立体积预算另行决策。 - -## 5. 预览部署器 npm 配置警告 - -原文:`npm warn Unknown env config "global-ignore-file". This will stop working in the next major version of npm.` - -触发链是根脚本 `npm --prefix apps/preview-deployer-web run build`,再执行子包的 `npm run typecheck && vite build`。顶层检查未发现 `npm_config_global_ignore_file` 环境变量;不能据此断言个人 npm 配置有误。 - -在子包目录直接调用已安装的 `tsc --noEmit -p tsconfig.json` 和 `vite build` 均成功且无 warning,说明这条来自嵌套 npm 调用,不是 TypeScript/Vite 源码告警。候选最小修法是将子包 build 改为 `tsc --noEmit -p tsconfig.json && vite build`,保留独立 typecheck 脚本;修改后需通过原根命令复验。 - -## 6. 另行记录的检查错误 - -以下不是编译 warning,不计入上述统计。 - -### 移动端 smoke 在 Windows 返回 EINVAL - -本轮 `config:smoke`、`build-config:smoke` 均在 `spawnSync('npm.cmd', ...)` 处失败,尚未进入实际 Expo/EAS 校验: - -- `apps/mobile-shell/scripts/check-expo-config.mjs:35` -- `apps/mobile-shell/scripts/check-eas-build-config.mjs:45` -- `apps/mobile-shell/scripts/check-expo-export.mjs:53` 使用同类调用方式;本轮未运行 export,不将源码推断标为已复现错误。 - -在移动壳目录直接运行 `node ../../node_modules/expo/bin/cli config --type public --json` 和 `node ../../node_modules/eas-cli/bin/run --version` 均通过,无 warning。候选处理是复用已安装 CLI 的 JS 入口,以 Node 直接启动;修复后重跑三个 smoke,实际导出及其断言仍待验证。 - -### 桌面壳检查依赖生成权限目录 - -首次配置检查因缺少 `src-tauri/permissions/autogenerated` 失败;Cargo check 执行 build.rs 生成目录后复跑通过。当前证据指向执行顺序/前置产物,不作为未修复的 Rust warning。 - -## 7. 待办与关闭条件 - -### 2026-09-23 首批低风险清理 - -清理前分支已合入上游,实际代码基线为 `07feed751`。重新运行默认 Windows dev 配置的 AGC `cargo check`,修复前为 **231 条**,修复后为 **195 条**,本次减少 **36 条**;首次记录的 237 与本轮修复前的 231 之间的差异来自上游合并,不计作本次修复。 - -| 诊断类型 | 本轮修复前 | 本轮修复后 | -| --- | ---: | ---: | -| `dead_code` | 158 | 158 | -| `unused_imports` | 45 | 27 | -| `unused_variables` | 13 | 9 | -| `unused_mut` | 11 | 0 | -| `unused_assignments` | 3 | 1 | -| `unused_doc_comments` | 1 | 0 | -| **合计** | **231** | **195** | - -已完成的局部修改: - -- 清理普通未用导入,将测试和 Linux/Unix 分支专用导入限定在对应编译条件;未删除兼容重导出、业务实现或新增 allow。 -- 清理 11 处 mut、局部语句前的文档注释、两个必然被覆盖的赋值;去除远程导入中间元组的冗余 asset ID,保留原始稳定身份校验及路径计算。 -- HTML 导出仍校验设计图存在,只去除未读取的绑定;目录同步保留 Unix 行为,非 Unix 分支显式忽略参数。 -- 预览部署器 build 直接调用 TSC/Vite,原 npm 配置 warning 已消除。 -- 移动壳三个 smoke 通过包解析得到已安装 Expo/EAS 的 CLI 入口,再由当前 Node 启动;原 Windows EINVAL 已消除,配置、EAS 配置和 Android/iOS 导出 smoke 均通过,原断言与清理范围不变。 - -对应首次清单已处理的编号为 W166、W167、W170~W174、W197、W198、W200、W202~W209、W217、W218、W220、W222~W233、W235~W237。合并后的新增导入 warning 是 `runtime_driver.rs` 中的 `start_game_creator_agent_background_task_for_session_at` 重导出,本轮按兼容边界保留。 - -保留项包括:兼容 facade、涉及身份/锁/完成门禁的未使用参数、Direct 重试回合的 response 初始化、全部 dead_code,以及 5 条 ts-rs 提示和 AGC chunk 体积告警。这些项需要语义或合同核查,不能仅改名或屏蔽。 - -验证通过: - -- AGC 默认 `cargo check --locked --offline` 及同一 package 的 `cargo check --locked --offline --tests`;均使用第 2 节的 manifest/package 参数。后者证明测试目标可编译,不代表已执行 Rust 单元测试,195 条仅统计普通 dev 构建。 -- `npm run preview-deployer:web:build`,无原 npm 配置 warning。 -- `npm run config:smoke -w @genarrative/mobile-shell`、`npm run build-config:smoke -w @genarrative/mobile-shell`、`npm run export:smoke -w @genarrative/mobile-shell`(Android/iOS)。 -- 修改 Rust 文件的 `rustfmt --check --edition 2021 --config skip_children=true`、三个移动脚本的 ESLint、脚本及预览 package 的 Prettier。 -- `npm run check:encoding`、`npm run check:doc-index`、`git diff --check`。 - -未执行 Rust 单元/运行时测试、正式 editor features、Linux/macOS 原生编译或安装包。独立只读审查未发现这批局部修改的行为回归;仍需其他平台实际编译才能补齐平台验证。 - -### 剩余工作 - -- [x] 第一批:清理确认不改变行为的低风险项,修复预览部署器嵌套 npm 及移动 smoke 的 Windows 调用。 -- [x] 对清理前 158 条 dead_code 和 27 条 unused_imports 完成调用、构建条件及保留契约的静态初审,结论快照见第 8 节。 -- [x] 第二批首组:清理已明确退役的 Direct 审计 / 计时链 12 条诊断,结果见第 9 节。 -- [ ] 单独核查保留的兼容重导出、身份/锁/门禁参数及 Direct 重试回合初始化,确认合同后再修改。 -- [ ] 第二批:对当前 158 条 dead_code(首次快照为 165 条)核对测试、正式 features、平台及退役合同,逐项确定保留、条件编译或删除;涉及退役范围扩大时先补方案。 -- [ ] 第三批:核实 5 条 ts-rs 提示的源类型及 TS 输出,保留现有反序列化约束。 -- [ ] 第四批:评估 AGC 主包拆分;为无法合理拆分且已有按需加载的依赖明确体积取舍。 -- [ ] 补充相关正式 features / 平台 / test targets 验证后更新剩余项,不用当前默认配置代表全部构建。 - -每批按实际修改范围运行定向测试、类型/编译检查及编码与 diff 检查;不为清理 warning 无差别扩大门禁。关闭条件是已复现项均消除或有明确保留原因,原检查入口通过,未覆盖配置仍明确标注。完成后将长期有效规则融合到父规范,删除本开放事项;历史由 Git 保存。 - -## 8. 未使用代码的保留契约核查(2026-09-23) - -### 范围与判断口径 - -基线为 `018697203`。再次执行第 2 节 AGC 默认 Windows dev `cargo check --locked --offline`,通过且仍为 **195 条**编译器 warning(另有 5 条 ts-rs 提示)。本次逐条静态核查其中 **158 条 dead_code + 27 条 unused_imports = 185 条**,交叉检查源码调用、测试、平台 / feature / build.rs 路径、Tauri 命令注册和当前专题文档。其余 9 条 unused_variables 与 1 条 unused_assignments 未纳入下表分类。 - -结论是:**不能把 185 条统一归因于必须保留的兼容契约,也不能把编译器未使用诊断直接当成删除白名单。** 一条诊断可能覆盖多个方法,计数不等于独立对象数。 - -| 初审分类 | 诊断数 | 当前处理依据 | -| --- | ---: | --- | -| 其他平台、feature 或构建脚本实际使用 | 11 | 保留实际调用行为,按编译目标整理声明;不能按 Windows 默认构建删除 | -| 目前只找到测试用途 | 74 | 评估改为 `#[cfg(test)]`,或随已退役实现一起移除专属测试;测试引用不等于永久生产契约 | -| 未找到现行保留依据 / 已明确旧契约退役 | 98 | 包括初审 86 条及本轮澄清的 Direct 审计计时链 12 条;清理时仍须检查局部调用、条件构建及受影响测试 | -| 文档行为承诺与断链 / 旧入口需进一步决策 | 2 | 修订 lineage 和旧固定切片入口仍需确认现役实现与去留;不能靠屏蔽 warning 结案 | -| **合计** | **185** | 静态初审,不代表所有平台已编译或候选代码已获完整删除验证 | - -### 明确保留要求的适用范围 - -- [AGC 实施计划](../../technical/【技术方案】AI游戏创作智能体App实施计划-2026-06-24.md) 的第二、三轮拆分记录(本基线第 1263~1269 行)明确要求保留稳定 facade、不要机械删除兼容重导出;[后端框架整理路线](../../technical/【技术方案】AGC后端框架整理与演进路线-2026-09-18.md) 第 244 行也要求拆分时保持导出、命令名和测试契约。这些是结构搬迁时的兼容约束,不能独立证明当前每个内部 `pub(crate)` 出口都有现役消费者或永久公开契约。 -- 仓库 [AGENTS.md](../../../AGENTS.md) 第 33~34 行要求:已退役且无现役调用、公开契约、持久化数据、活跃实例或迁移要求的对象直接清理;实际需要兼容的对象保留最小范围。后续清理应列明具体消费者或数据 / 协议约束,并同步收敛过期文档,不能只写“兼容保留”。 -- 函数所在功能有持久化协议,不代表该函数的 Rust 包装签名也受协议保护。例如保留 Runtime finalization 语义,并不要求保留未构造的普通内部 enum 分支;保留工具授权,也不要求保留已经被现役授权实现替代的旧文本判断 helper。 - -### 已定位的代表性证据 - -下列源码位置相对 `apps/ai-game-creator-shell/src-tauri/`,行号对应本节基线。 - -| 对象 | 证据与判断 | 后续方向 | -| --- | --- | --- | -| `build_support/codex_bundle.rs` 的 `npm_package`、`validate_package_metadata` | `build.rs:67,102` 实际读取 / 调用;同一源文件也被运行时编译,后者产生 warning | 保留构建校验,按两个编译目标处理 | -| Linux 命令沙箱、进程组终止及 Runner listener | `src/command_exec.rs:1555,1814`、`src/process_session_bridge.rs:89`、`src/runner/server.rs:141` 有条件调用 | 保留 Linux 路径,平台编译验证后再补精确 cfg | -| `RunnerManagedEditorAdapter`、插件适配器注册 | `src/editor_adapters.rs:124,130` 有 Windows editor feature 分支 | 保留 feature 注册;`plugin_host` 同一条 warning 包含五个方法,只有注册方法找到 feature 调用,其余四个应分别判断 | -| Direct 审计与计时链(连同批量 JSONL 追加,共 12 条诊断) | `direct_runtime/user_input.rs:64` 明确不再创建平行日志并传入 `None`;旧审计和 metrics 构造仅测试可达。2026-09-23 已将 [旧审计方案](../../technical/【技术方案】Direct回合行为审计账本-2026-08-31.md) 归为历史,主规范和共享记忆同步改为当前边界 | 不再存在要求保留旧 writer / 分段计时链的现行合同,转为清理候选;保留现役 Provider proxy、model-usage、界面计时与项目完整历史,不删除用户旧数据 | -| `static_delegate_original_awaits_user_revision_at` | `src/delegation.rs:1293` 无调用,注释仍声称用于用户修订 lineage;[立项策划 Agent(Fast GDD)](../../technical/【技术方案】立项策划Agent(Fast GDD)-2026-08-10.md) 中仍有修订交付约束 | 查明现役实现是否承担同一行为,再决定旧入口去留 | -| `generate_platform_art_asset_with_required_slices_at` | `src/agent/generation/canvas_generation.rs:2589` 无调用;主实施计划第 1301 行改为按需求选择素材,第 1448 行仍要求标准核心图集严格四切片 | 两种范围不能混为一谈;保留标准核心图集合同不自动要求保留这个旧包装入口 | -| 旧 DirectHome 命令及 prompt / reply 链 | `chat_with_game_creator_home_direct_codex` 未注册;`scripts/check-config.mjs:1257` 明确禁止首页暴露无项目 Codex 会话 | 未找到保留该旧入口的依据,可成组清理并同步旧说明 | -| 旧附件 sidecar prompt 渲染链 | `direct_codex_attachments.rs` 旧渲染由未注册 Home 链调用;现行主实施计划第 314、323 行将附件并入 canonical `userItem` | 旧输入链是清理候选;审计附件投影与上面的审计决策一起处理,不能删除现役 canonical 附件能力 | -| 简单包装、旧 HTML renderer、部分重导出 | 如 `direct_execution::open_at` 无调用,现役走 `open_with_analytics_at`;`ui_editor/html_renderer` 的入口无生产调用;部分 facade 导出无外部消费者 | 优先从这些边界清晰的候选开始,避免扩大到现役实现 | -| 未构造内部 variant 与未读取 payload | `runtime_protocol/models.rs:26` 只有该 enum 的 `HandoffPrepared` 未构造,其他同名 variant 活跃;第 87 行 `Pending(String)` 变体活跃,payload 仅测试读取 | 按具体类型 / 字段处理,不能批量删除同名分支或整个变体 | - -另发现 `runtime_actions/project_gates.rs:1206` 的固定视觉素材门禁直接返回 `None`,后面留有不可达旧实现,`runtime_driver/task_start.rs:1687` 的对应判断恒为 `false`。这解释了部分未使用诊断,但主实施计划相邻段落仍混有旧固定素材要求与新按需选择要求;应先明确退役范围并同步文档,不能通过改成下划线参数掩盖这一状态。 - -### 下一步与本次验证边界 - -优先处理测试专用入口、已无消费者的局部包装和明确退役的 Home 链;条件构建项按真实平台 / feature 整理。Direct 审计计时旧契约已收敛,残留实现待清理;素材与修订 lineage 的合同问题仍单独处理。98 条候选不承诺能通过 98 次独立删除消除 warning,删除上游孤立入口也可能产生新的下游诊断。 - -本次仅补充核查文档,未删除或修改业务代码。实际执行 AGC 默认 Windows dev 编译;未重跑 Rust 单元测试、正式 editor features、Linux/macOS 编译或 GUI 端到端验收。后续实施按改动范围补定向验证。 - -## 9. Direct 审计 / 计时链清理(2026-09-23) - -契约文档提交 `5a86a64e4` 后,删除 `direct_codex_audit.rs`、`direct_turn_metrics.rs`、专属批量 JSONL 追加包装,以及 Direct Runtime / app-server / Provider proxy 中的审计和计时参数、作用域与观察分支。退役模块的专属测试一并删除;原代理测试保留分块 SSE 字节透传和上游流错误传递断言,独立模型使用记录测试继续维护。 - -未改动现役 Provider 代理的鉴权 / 路由、模型使用记录、`project.jsonl`、GUI 回合与工具事件、付费 / 资产审计或用户项目内已有文件。 - -默认 Windows dev `cargo check --locked --offline` 通过,**195 → 183 条**,没有新增诊断: - -| 类别 | 清理前 | 清理后 | -| --- | ---: | ---: | -| `dead_code` | 158 | 146 | -| `unused_imports` | 27 | 27 | -| `unused_variables` | 9 | 9 | -| `unused_assignments` | 1 | 1 | -| **合计** | **195** | **183** | - -消除的是首次清单 W023~W025、W041~W048、W134,共 12 条;5 条 ts-rs 提示不在本次范围。第 8 节保留清理前的静态分类,其中 Direct 审计 / 计时 12 条已完成代码清理,其余候选仍按实际调用与测试范围推进。 - -验证:默认编译、修改文件 rustfmt、编码、文档索引和 diff 检查通过;独立只读审查未发现参数错位或现役链路回归。**41 个定向 Rust 测试通过**:`codex_provider_proxy::` 14 个(含鉴权、主站路由标记、并行、透传与模型记录),`direct_project_history::` 22 个,app-server 的 Direct 输入 / 宿主继续和事件投影 5 个。先通过 `cargo test --locked --offline` 构建并执行代理测试,再直接复用同一测试二进制执行后两组,均单线程运行。Unix 条件下的 fake app-server 协议用例未在 Windows 执行;未运行正式 editor features、Linux/macOS 编译、真实 Provider、GUI 或安装包验收。 - -## 10. 原 86 条清理候选的逐项复核(2026-09-23) - -### 复核范围与结论 - -基线为 `268f45015`。本轮只复核第 8 节初审的 86 条 `no_retention_found` 候选,不包含已删除的 Direct 审计 / 计时 12 条,也不重新审计原 74 条测试用途项。86 条均能对应到第 9 节最近一次默认 Windows dev 编译的 183 条诊断;本轮未修改业务代码、未重新编译,183 不是本轮新测值。 - -逐项检查当前源码调用、测试导入与构造、平台条件、命令注册、现行文档及必要的 Git 决策记录。初审“未找到依据”不是删除结论;本轮纠正了漏计的测试和 Unix 消费者。 - -| 复核处置 | 诊断数 | 实施边界 | -| --- | ---: | --- | -| 可局部清理 | 33 | 无消费者的包装、声明、重导出或冗余副本;保留被包装的现役实现 | -| 需成组清理 | 30 | 旧入口与其专属调用链、测试或说明联动删除;不按整个文件机械删除 | -| 调整测试或平台编译边界 | 20 | 19 条涉及测试消费,1 条涉及 Unix 生产消费;优先精确 cfg,混合诊断按符号拆分 | -| 先厘清契约与实现 | 3 | W063、W069、W071;记录具体冲突,不能靠删除声明或 allow 掩盖 | -| **合计** | **86** | **63 条删除候选 + 20 条编译边界项 + 3 条待核定项;未实施删除** | - -### 关键纠正与清理边界 - -- **测试消费者**:`browser/tests.rs:24–28`、`:1015` 等使用 W193~W195;`tool_plan_handoff/tests.rs:1418–1419` 与 `tests/mod.rs:4452` 使用 W201;`analytics/store_tests.rs:352,1180` 使用 W092~W093。Runtime 的 11 条 facade 诊断同样包含测试出口,优先按测试编译,而非为了删除出口扩大子模块可见性。 -- **测试构造不等于未构造**:W075 的 `AgentRuntimePersistedProviderRequestOutcome::HandoffPrepared` 在 `runtime_protocol/provider_retry.rs:1347–1349` 的 `#[cfg(test)]` 路径实际构造。应保留故障注入测试覆盖,并核对整条返回 / 匹配链的 cfg;其他同名枚举分支不属于本条删除候选。 -- **Unix 现役路径**:W154 的 `runtime_directory()` 被 `runner/project_owner.rs:617,651,729,763,785` 的 Unix `openat / renameat / sync_all` 路径消费,涉及项目 owner 锁与诊断文件安全性。保留方法并精确限定平台,不能因 Windows warning 删除。 -- **Home 与附件链**:W016~W022、W027、W029~W034 对应未注册的 Home / 旧 sidecar 路径;`scripts/check-config.mjs:1256–1261` 禁止重新注册无项目 Home 命令。清理要更新专属测试和 app-server 分支,但 `direct_codex_attachments.rs` 的名称 / 媒体类型 / 路径清洗及数量上限仍被 canonical `validation.rs:70–100`、`wire.rs:109–119` 使用,不可整模块删。 -- **旧重生成文本判断可以退役**:W036~W038 无调用。进一步核对发现 `1f904d28e9` 已明确删除客户端文本授权判断;[主实施计划](../../technical/【技术方案】AI游戏创作智能体App实施计划-2026-06-24.md) 第 641~644 行与 [Skill / MCP 专题](../../technical/【技术方案】DirectProject客户端Skill与MCP扩展导入方案-2026-08-31.md) 第 19 行将高层业务意图交给 Codex,客户端继续负责账号、项目、权限、计费、幂等、锁和恢复。因此不能拿主实施计划第 1444 行、共享决策第 8397 行残留的旧独立语句规则要求恢复这些函数;实施清理时同步收敛这两处旧说明。当前回合绑定、稳定摘要、并发 / 重试保护和付费恢复继续保留。 -- **删除范围止于无用包装**:例如 W147 只涉及 `runner/client.rs:1405–1411` 无消费者的全局包装;其 `_at` 测试入口、测试协议及现役 GUI 参与锁退出链不随本条删除。W119~W120 只涉及 Unity 专用包装,通用编辑器不确定状态围栏仍在。W040 只涉及 registry 的未读 `url/token` 副本,HTTP state 的 Bearer 鉴权及返回凭据不变。 - -### 三条待核定项 - -以下为初审快照;策划 V1/V2 均已退役,W063 的当前结论已纠正为可清理,详见第 17 节。Fast GDD 历史条款不能作为恢复旧策划实现的依据。 - -| 编号 | 已确认事实 | 下一步判据 | -| --- | --- | --- | -| W063 | plan lifecycle v3 常量无引用;它服务的旧策划 V1 已整体退役,曾接替 V1 的 V2 也已删除。Fast GDD 的 v3 条款仅属历史合同 | 可删除孤立常量;保留现役通用 lifecycle v2 writer/reader,不补回旧 v3 链路 | -| W069 | `finalization.rs:6–10` 的 Deferred 注释描述 project→execution 重取失败,当前无构造;`recovery_scan.rs:1092,1105,1114` 仍匹配,pending recovery 未发现注释所述释放 / 重取;Fast GDD 第 2144 行只承诺新增 planning 澄清路径锁序 | 明确旧注释 / 分支是否已经退役,再删除对应分支或另立行为修复;本轮不改变锁序 | -| W071 | `task_start.rs:745–753` 的孤立 helper 读取 Goal sidecar;相邻现役 `autonomous_root_goal_contract_persisted_at` 在验证身份后返回 `Ok(true)`,与第 755~758 行“缺 sidecar no-op、损坏报错”的注释不符 | 核定当前 scheduler 的 Goal 前置合同,再决定删除旧 helper / 更新注释还是修复检查;不把恒真入口视为已验证的 Goal 门禁 | - -### 逐条处置索引 - -位置相对 `apps/ai-game-creator-shell/src-tauri/`,行号对应本节基线。W 编号沿用原附录;N001 是第 7 节已记录的合并后新增 `runtime_driver.rs` 重导出诊断。一条诊断可能包含多个符号,表中边界优先于按整行删除。 - -#### 可局部清理(33 条) - -| 编号 | 当前证据入口 | 处理边界 | -| --- | --- | --- | -| W003 | `src/main.rs:1728` | 仅删除无读写的静态声明;panic hook/日志路径其他实现不扩删。 | -| W010 | `src/agent/codex_app_server/mod.rs:5001-5017` | 删除无调用包装;保留 optional_observer 和 DirectProject app-server 回合。 | -| W026 | `src/agent/direct_execution.rs:486-503` | 只删除无调用包装,保留 execution 会话持久状态和 analytics 入口。 | -| W040 | `src/agent/direct_tools_mcp.rs:33-43` | 仅移除 registry 对象中冗余 url/token 字段及构造赋值;绝不可删除 HTTP state.token、Bearer 比对、返回值或 _bridge/task 生命周期。 | -| W050 | `src/agent/generation/canvas_generation.rs:1749` | 只删 CanvasGeneration 所属 slice_count 方法;其他同名请求字段、Direct 参数和实际切片限制仍活跃。 | -| W052 | `src/agent/prompt.rs:4` | 只删无调用的无 session 包装;render_agent_runtime_prompt_context_for_session 仍用于 prompt 组装。 | -| W054 | `src/agent/prompt.rs:397` | 只删无调用的无 session 包装;build_game_creator_role_agent_context_for_session 仍为现役实现。 | -| W064 | `src/agent/runtime_protocol/acceptance_graph.rs:257` | 未构造 FastGddFileReadCoverage;requiredEvidence 当前按工具集合校验,限删旧结构,不动验收图持久内容和校验。 | -| W066 | `src/agent/runtime_driver/entrypoints.rs:265` | remove sink 无 caller;保留 register/validate 和现役窗口事件接收器,不推断外部 detach 协议变更。 | -| W072 | `src/agent/runtime_protocol/autonomous_completion.rs:14467` | 只删无调用的无外部 JS 包装;autonomous_inherited_gameplay_semantics_gap_at 仍经 with_external_javascript 执行连续性核对。 | -| W077 | `src/agent/runtime_protocol/provider_retry.rs:328` | 仅删 provider_config_fingerprint 旧包装;核对其签名内部委托的现役 fingerprint 算法和持久身份计算不变。 | -| W078 | `src/agent/runtime_protocol/provider_retry.rs:1646` | 仅删无调用 request_slot_for_id 包装;现役请求槽分配/恢复逻辑不动。 | -| W082 | `src/agent/runtime_state.rs:283` | 仅删无调用的 turn_at 包装;正式 turn 启动入口及状态写入不动。 | -| W091 | `src/agent/runtime_tools/policy.rs:29` | 无调用的旧 autonomous_design_foundation_command_is_allowed 文本判断;现役工具策略/许可函数保留。 | -| W108 | `src/config.rs:2377-2385` | 仅无调用包装器可移;保留显式 UAC 修复、SID 核验与拒绝 reparse 的安全路径。 | -| W119 | `src/editor_adapters/execution.rs:521-522` | 仅 Unity 专属无调用包装器可移;持久 fence 文件名及通用检查/恢复不可删除。 | -| W120 | `src/editor_adapters/execution.rs:524-525` | 仅 Unity 专属无调用包装器可移;通用 uncertain 写入、重启恢复和持久 fence 不动。 | -| W124 | `src/error_report/queue.rs:188-193` | 仅孤立 sequence getter 可移;通知 generation 对比及队列状态保留。 | -| W125 | `src/goal.rs:1037-1046` | 只移无调用锁包装;保留实际 goal cleared 状态写入及调用方现有锁顺序。 | -| W128 | `src/platform_session.rs:705-708` | 只移未消费的派生 getter;平台会话存储与校验功能保留。 | -| W132 | `src/project/agent_db.rs:2509` | 仅未消费的查询入口可移;不改变 .agent/agent.db 格式、追加扫描界限、锁或读取语义。 | -| W133 | `src/project/agent_db.rs:3189-3230` | 只移未消费的按身份查询入口;保留 lifecycle 持久记录、扫描器、锁及现役恢复读取。 | -| W137 | `src/project/conversation.rs:1444-1450` | 只移默认 session 两元组包装;对话文件路径规则与会话兼容读取不动。 | -| W138 | `src/project/export.rs:573-583` | 仅无调用目录辅助入口可移;导出校验、路径安全和项目 exports 内容不动。 | -| W145 | `src/runner/client.rs:1068-1072` | 只移无调用的无参包装;底层 shutdown_at 仍供升级/GUI 退出使用。 | -| W147 | `src/runner/client.rs:1405-1411` | 仅删除无消费者的全局包装,不删除 _at、测试协议或 GUI 参与锁退出路径。相关协议是否退役属于后续测试用途审计,不构成本包装的保留依据。 | -| W148 | `src/runner/client.rs:1566-1570` | 只移无调用启动包装;GUI owner flag 的现役设置和参与锁仍需保留。 | -| W150 | `src/runner/client.rs:1839-1842` | 只移无调用的无项目包装及 W199 对应重导出;project-aware 断开协议保留。 | -| W168 | `src/agent/direct_codex_user_item/mod.rs:7-10` | 仅移除五个未消费的顶层重导出;保留 model 类型、模块内部引用、DirectCodexUserItem 及 canonical 输入协议。 | -| W169 | `src/agent/direct_codex_user_item/mod.rs:12-15` | 仅移除 mod.rs 重导出;保留 wire.rs 的函数和其校验、摘要路径。 | -| W192 | `src/agent.rs:53` | agent.rs 中二次别名无消费者;codex_app_server 原身份函数/自身重导出不在本条清理范围。 | -| W196 | `src/browser.rs:23-25` | 仅删除 browser.rs 未消费的门面 re-export;保留 process.rs 函数与其生产调用。 | -| W199 | `src/runner.rs:25-28` | 仅该门面导出可移;project-aware 断开调用和 client 实现另按 W150 判断。 | - -#### 需成组清理(30 条) - -| 编号 | 当前证据入口 | 处理边界 | -| --- | --- | --- | -| W016 | `src/agent/direct_codex_attachments.rs:9` | 随旧 Home/sidecar 渲染清理并同步专属测试与 prompt 源边界清单;保留 canonical 附件清洗和现役 prompt bundle 其它 key。 | -| W017 | `src/agent/direct_codex_attachments.rs:10` | 只清旧 sidecar header/渲染及相应专属测试;不能删除现役 canonical 附件摘要、路径校验。 | -| W018 | `src/agent/direct_codex_attachments.rs:12-23` | 仅旧 Rust DTO 随 Home/sidecar 清理;保留 TS 附件映射、canonical Rust attachment reference part 和有效上传路径。 | -| W019 | `src/agent/direct_codex_attachments.rs:55-61` | 随旧 sidecar 状态渲染清理;保留 canonical 状态约束,不把状态白名单误删。 | -| W020 | `src/agent/direct_codex_attachments.rs:105-113` | 随旧 sidecar 的 home/project 分流删除;保留项目附件路径的 canonical 校验。 | -| W021 | `src/agent/direct_codex_attachments.rs:115-141` | 随旧 sidecar 行渲染清理;保留 sanitize_attachment_name/media_type/local_path,wire.rs 仍直接使用。 | -| W022 | `src/agent/direct_codex_attachments.rs:143-183` | 删旧 sidecar prompt 渲染及专属测试,不可整删附件模块:validation.rs:6-8,70-100、wire.rs:7-8,109-119 仍消费共用清洗函数/上限。 | -| W027 | `src/agent/direct_runtime/mod.rs:74` | 与旧 Home prompt/reply/command 成组清理 marker 和专属测试;勿影响项目创建正式命令。 | -| W029 | `src/agent/direct_runtime/mod.rs:323` | 只随旧 Home turn 清理三维首页提示;保留现役 Project 引擎指引。 | -| W030 | `src/agent/direct_runtime/mod.rs:4732-4741` | 仅旧 Home prompt 组装与已无消费者的 direct.home.* key 在核对 bundle schema 后清理;保留共享 Direct prompt 内容和生成器完整性校验。 | -| W031 | `src/agent/direct_runtime/mod.rs:4743-4748` | 随旧 Home reply/命令清理,保留现役 DirectProject 返回字符串和事件。 | -| W032 | `src/agent/direct_runtime/mod.rs:4750-4773` | 与 marker、Home reply 成组清理,不改变 DirectProject 完成事件和正文投影。 | -| W033 | `src/agent/direct_runtime/mod.rs:4775-4790` | 成组清理旧 Home turn 并复核 app-server DirectHome 分支/专属测试;保留共享 Codex connection、ToolHost 和 DirectProject mode。 | -| W034 | `src/agent/direct_runtime/mod.rs:5776-5782` | 仅退役未注册 Home 命令及上游链;保留 create_automatic_local_game_project、DirectProject 命令和 UI 附件导入。 | -| W036 | `src/agent/direct_tool_bridge.rs:308-324` | 旧客户端文本意图/授权启发式已由 2026-09-08 MCP 决策明确退役,三项应成组清理;不恢复旧独立语句关键词门禁。保留现役项目权限、付费计费、活动 clientTurnId、稳定 brief、幂等/恢复;同步修订主规范:1444 与共享记忆:8397 的过期叙述。 | -| W037 | `src/agent/direct_tool_bridge.rs:326-389` | 旧客户端文本意图/授权启发式已由 2026-09-08 MCP 决策明确退役,三项应成组清理;不恢复旧独立语句关键词门禁。保留现役项目权限、付费计费、活动 clientTurnId、稳定 brief、幂等/恢复;同步修订主规范:1444 与共享记忆:8397 的过期叙述。 | -| W038 | `src/agent/direct_tool_bridge.rs:391-646` | 旧客户端文本意图/授权启发式已由 2026-09-08 MCP 决策明确退役,三项应成组清理;不恢复旧独立语句关键词门禁。保留现役项目权限、付费计费、活动 clientTurnId、稳定 brief、幂等/恢复;同步修订主规范:1444 与共享记忆:8397 的过期叙述。 | -| W058 | `src/agent/runtime_actions/project_gates.rs:1838` | 短等候专用常量只被 W059 包装消费;与 W059 成组处理,不动有界正式写锁语义。 | -| W059 | `src/agent/runtime_actions/project_gates.rs:1900` | 短等候包装无 caller;连同 W058 常量清理,保留当前写锁获取函数及其调用。 | -| W060 | `src/agent/runtime_actions/project_gates.rs:1911` | 本体除 W180 facade 无 caller;与 W180 出口成组清理,不动 with_wait 正式写锁。 | -| W087 | `src/agent/runtime_tools/isolated_joins.rs:88` | 仅删无预算包装;ready_isolated_join_status_for_parent_with_budget_at 仍为现役路径。 | -| W089 | `src/agent/runtime_tools/isolated_joins.rs:200` | 仅删无预算包装;claim_ready_isolated_joins_with_budget_at 及锁内 claim 提交不动。 | -| W090 | `src/agent/runtime_tools/isolated_joins.rs:479` | 仅删无预算包装;select_isolated_join_claim_batch_with_limit 保留并继续执行 payload 限额。 | -| W105 | `src/commands.rs:3752-3764` | 与 W106 旧包装成组;保留底层素材获取及现役 Runtime account library 投影。 | -| W106 | `src/commands.rs:3766-3790` | 旧投影函数可与 W105 成组清理;现役工具仍须保持素材 ID/展示字段和凭据过滤。 | -| W149 | `src/runner/client.rs:1594-1612` | 与 W151 旧 string-kind 通知适配器成组;typed runtime 通知和受限 continue_action 身份校验保留。 | -| W151 | `src/runner/client.rs:2131-2140` | 与 W149 旧字符串通知适配器成组;现役 typed wake/resume 发送与 server dispatch 保留。 | -| W162 | `src/ui_editor/html_renderer/mod.rs:17-54` | 孤立 HTML 渲染链可成组清理;现役 JS 导出、共享 node/component/assets 和持久化 schema 保留。 | -| W163 | `src/ui_editor/html_renderer/mod.rs:139-155` | 仅 HTML 分支的树辅助函数与 W162 同组;不删 JS 共享渲染实现。 | -| W164 | `src/ui_editor/html_renderer/mod.rs:157-163` | 仅 HTML 分支的无缩放包装与 W162/163 同组;保留底层共享 node renderer。 | - -#### 调整测试或平台编译边界(20 条) - -| 编号 | 当前证据入口 | 处理边界 | -| --- | --- | --- | -| N001 | `src/agent/runtime_driver.rs:370` | 测试仍经该 facade 调用现役实现;优先把所需重导出限定为 #[cfg(test)],同组无消费者的导出可删除。保留底层实现及原测试覆盖,不为消除 warning 放宽模块可见性。 | -| W061 | `src/agent/runtime_actions/response_stream.rs:222` | 测试在 response_stream_tests.rs:215/257 直接使用 ready;生产 publisher 仍有 failed/handoff/persist 路径,需决定保留测试注入或用现役终态路径改写测试。 | -| W075 | `src/agent/runtime_protocol/models.rs:26` | 仅 AgentRuntimePersistedProviderRequestOutcome 的 HandoffPrepared 在生产未构造:provider_retry.rs:1347-1349 用 cfg(test) 故障注入构造,随后多层同名 enum 生产分支是活跃代码;不得批量删同名变体。 | -| W092 | `src/analytics/store.rs:24` | 当前测试使用观测计数,测试结构需保留或迁移断言;实际 analytics 队列不可一并删除。 | -| W093 | `src/analytics/store.rs:286-294` | 测试断言队列 dropped 行为;可选择 cfg(test) 缩窄但需确认调用跨 cfg 可编译。 | -| W154 | `src/runner/state.rs:248-252` | Unix 生产项目 owner 锁与诊断文件安全路径直接调用;Windows warning 不能作为跨平台删除依据。 | -| W175 | `src/agent/generation.rs:29` | 测试仍经该 facade 调用现役实现;优先把所需重导出限定为 #[cfg(test)],同组无消费者的导出可删除。保留底层实现及原测试覆盖,不为消除 warning 放宽模块可见性。 | -| W177 | `src/agent/runtime_actions.rs:60` | 测试仍经该 facade 调用现役实现;优先把所需重导出限定为 #[cfg(test)],同组无消费者的导出可删除。保留底层实现及原测试覆盖,不为消除 warning 放宽模块可见性。 | -| W178 | `src/agent/runtime_actions.rs:76` | 测试仍经该 facade 调用现役实现;优先把所需重导出限定为 #[cfg(test)],同组无消费者的导出可删除。保留底层实现及原测试覆盖,不为消除 warning 放宽模块可见性。 | -| W180 | `src/agent/runtime_actions.rs:98` | 混合诊断:前两个重导出供现役逻辑的测试使用,优先拆为 #[cfg(test)];try_acquire 的无调用实现与出口按 W060 联动清理。 | -| W182 | `src/agent/runtime_driver.rs:309` | 测试仍经该 facade 调用现役实现;优先把所需重导出限定为 #[cfg(test)],同组无消费者的导出可删除。保留底层实现及原测试覆盖,不为消除 warning 放宽模块可见性。 | -| W183 | `src/agent/runtime_driver.rs:331` | 测试仍经该 facade 调用现役实现;优先把所需重导出限定为 #[cfg(test)],同组无消费者的导出可删除。保留底层实现及原测试覆盖,不为消除 warning 放宽模块可见性。 | -| W185 | `src/agent/runtime_protocol.rs:43` | 测试仍经该 facade 调用现役实现;优先把所需重导出限定为 #[cfg(test)],同组无消费者的导出可删除。保留底层实现及原测试覆盖,不为消除 warning 放宽模块可见性。 | -| W186 | `src/agent/runtime_protocol.rs:73` | 测试仍经该 facade 调用现役实现;优先把所需重导出限定为 #[cfg(test)],同组无消费者的导出可删除。保留底层实现及原测试覆盖,不为消除 warning 放宽模块可见性。 | -| W187 | `src/agent/runtime_protocol.rs:75` | 测试仍经该 facade 调用现役实现;优先把所需重导出限定为 #[cfg(test)],同组无消费者的导出可删除。保留底层实现及原测试覆盖,不为消除 warning 放宽模块可见性。 | -| W189 | `src/agent/runtime_protocol.rs:86` | 测试仍经该 facade 调用现役实现;优先把所需重导出限定为 #[cfg(test)],同组无消费者的导出可删除。保留底层实现及原测试覆盖,不为消除 warning 放宽模块可见性。 | -| W193 | `src/browser/playtest/mod.rs:17-27` | 测试直接消费重导出;保留测试出口及 generic.rs 现役逻辑,若调整导入需同步测试。 | -| W194 | `src/browser/playtest/mod.rs:28` | 测试直接消费重导出;lane_defense.rs 生产算法和测试类型不可随 import 删除。 | -| W195 | `src/browser.rs:11` | 根层重导出供 browser 子模块测试 super::*;生产 discovery 函数仍被 process 使用。 | -| W201 | `src/tool_plan_handoff.rs:34-37` | 测试直接依赖门面;schema 常量及 ledger 类型也是现役持久化合同,不能删定义。 | - -#### 先厘清契约与实现(3 条) - -| 编号 | 当前证据入口 | 处理边界 | -| --- | --- | --- | -| W063 | `src/agent/runtime_driver.rs:391` | 旧策划 V1/V2 已明确删除,孤立 v3 常量可清理;现役通用 lifecycle v2 保留,不为历史 Fast GDD 条款恢复实现。 | -| W069 | `src/agent/runtime_driver/finalization.rs:10` | Deferred 在此 enum 无构造,但 recovery_scan 有三处 continue 及同步路径 Err;注释描述通用 project→execution 重取失败,pending_recovery 没有相应释放/重取,Fast GDD 文档锁序承诺只覆盖 planning 澄清。先确认旧注释/分支是否退役。 | -| W071 | `src/agent/runtime_driver/task_start.rs:745` | 死 helper 会读取 Goal sidecar;现役 autonomous_root_goal_contract_persisted_at 返回 Ok(true),ready-task parent validator 只查身份,和相邻注释承诺的 sidecar 未落盘 no-op/坏数据报错冲突。先裁定当前合同再动 helper。 | - -### 实施顺序与本轮验证 - -下一批优先选择上表 33 条局部清理项,按实际受影响模块运行默认编译、测试构建和定向回归;随后分别处理 Home / 附件、旧文本判断、通知 / HTML 等成组链路。20 条编译边界项保留其测试或平台用途,3 条待核定项独立收敛。不得承诺删除 63 条候选后 warning 恰好减少 63:删除上游入口可能暴露下游未使用诊断。 - -本轮只有审计文档变更。检查逐条记录共 86 条、编号无重复、与原候选的文件及诊断消息集合一致;执行编码、文档索引和 diff 检查。未运行新的 cargo check、Rust 测试、正式 editor feature 或 Linux/macOS 构建,未修改业务实现或用户项目数据。 - -## 11. 局部候选清理实施(2026-09-23) - -本批处理第 10 节的 33 条局部项,范围止于对应声明、无消费者包装、冗余重导出和 registry 字段;不扩展到 30 条成组链路或 3 条契约待核定项。现役会话、Provider 请求身份、编辑器不确定状态围栏、项目 / 追加锁、持久化格式、Runner 多窗口退出与 MCP 鉴权保持原行为。 - -实施前再次扫描源码调用,纠正 **W026**:`direct_execution::open_at` 实际被 `direct_tool_bridge`、`direct_delivery`、`direct_validation` 和 app-server 的测试夹具使用,因此本批保留函数并限定为 `#[cfg(test)]`,不删除测试调用或改写生产 analytics 入口。第 10 节保留实施前的审计快照;最新归类应为 32 条局部删除候选、30 条成组候选、21 条测试 / 平台边界项、3 条待核定项。本批完成的是原定 33 条诊断对应的处理,其中 32 条删除、1 条测试边界收紧。 - -W192 的外层别名删除后,首次编译暴露出 `codex_app_server/mod.rs` 中同链的 `direct_codex_canonical_project_identity_for_commands` 中间重导出也已无消费者;本批一起移除该别名。`direct_project_identity` 中实际项目身份校验及其现役调用保持不变。 - -默认 Windows dev `cargo check --locked --offline` 通过,warning **183 → 150,净减少 33 条,没有新增诊断**。减少项与第 10 节原 33 条局部清单逐项一致;其中 `dead_code` 146 → 118、`unused_imports` 27 → 22,9 条 `unused_variables` 与 1 条 `unused_assignments` 不变。另有 5 条 ts-rs 属性解析提示,未纳入上述编译器诊断计数。 - -测试目标构建通过,**85 个定向 Rust 测试全部通过**,单线程执行:Direct execution / delivery / validation、canonical userItem、app-server execution、外部 MCP HTTP 容量恢复、通用编辑器回执与围栏、Provider 配置身份、验收图证据、角色工具权限及 Runner client-exit。复用了现有用例,没有新增仅用于证明删除的测试。独立只读审查未发现现役行为变化或悬空引用;修改文件 rustfmt、编码、文档索引与 diff 检查通过。 - -本批未运行全部 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 项待澄清契约。 - -## 13. 原 74 条测试用途项复核(2026-09-23) - -### 结论与边界 - -基线为合并最新 master 后的 `e1b900885`。第 8 节原始 74 条 `tests_only` 诊断,均能逐字对应合并后默认 Windows dev 编译日志中的 120 条 warning。本节逐项复核生产调用、测试消费者、条件构建与当前契约;不把第 10 节从 86 条中重新归类的测试 / 平台项混入这 74 条,也不因测试引用自动保留旧实现。 - -| 复核分类 | 条数 | 建议 | -| --- | ---: | --- | -| 测试辅助 | 42 | 保留现役行为测试;包装、观测方法、fixture 和测试重导出加精确 `cfg(test)` 或移入测试模块 | -| 测试处置待逐项核定 | 20 | 先核对实际断言和现役合同:旧行为或重复覆盖直接删除;只有仍保护现役行为且包装仅为调用通道的原测试才改调用入口,不因现役代码缺测试而移植旧测试 | -| 旧业务清理 | 7 | 删除已被替代或已退役的实现及专属测试,保留现役锁、退出、记忆读写等行为 | -| 字段收窄 | 1 | W076 保留生产 Pending 状态,移除未消费的 String 载荷,错误断言转向现役持久状态 / 审计 | -| 契约待厘清 | 4 | W004–W006 与 W113 先收敛明确冲突,不能直接删除或全部加 cfg(test) | -| **合计** | **74** | 这是静态处理建议,不是已消除的 warning 数量 | - -**建议顺序**:先处理 42 条测试编译边界,对其余 20 条复核具体测试后决定删除或调整原调用;再成组处理 7 条旧实现和 W076。用户已明确 4 条契约问题先保留不动。诊断与对象不是一一对应,包装与重导出可能分别计数,实际减少量须以实施后的重新编译为准。下表原“迁移测试入口”标签仅是初步候选,最终测试处置以实施记录为准,不能批量照搬。 - -### 需要保留的边界 - -- W184 的 context bundle build/write 本体有生产调用,只能限制测试 facade 重导出;同理不能因路径 getter 告警删除 sidecar、读写器或持久协议。 -- W074/W084/W085 的旧 JSON `pid/createdAt` 锁判据已经不是正式锁实现,可成组清理;但 Linux“伪造过期 metadata 不能抢走仍持有的 OS 文件锁”测试仍是现役合同,必须保留。 -- W143/W144/W146 的旧 `runner.shutdown_for_client_exit` 仅测试可达;保留正式 GUI 退出、多窗口参与锁和 `shutdown_external_agent_runner_at`,测试迁往这条正式链。 -- W140 的旧 memory 删除 helper 没有正式调用。主方案中的旧斜杠入口描述已被[已接受的退役 ADR](../../adr/【ADR】退役AGC项目对话斜杠命令与终端swarm chat入口-2026-09-22.md)覆盖,实施清理时同步收敛旧说明;现役 memory 读写、blackboard、持久文件和项目权限 id 不随 helper 擅自删除。 -- W076 的 Pending 仍由生产构造;三处返回前已调用 `record_game_creator_agent_runtime_finalization_pending` 写状态及审计。移除载荷时应保留并检查该错误记录,而非删除 Pending 分支或取消故障注入测试。 - -### 四条契约问题 - -- **W004–W006 / AuthBridge**:正式 `config.rs:3706–3713` 与 `codex_app_server/mod.rs:2276–2314` 只支持平台会话或显式自定义 Key,与[模型别名专题](../../technical/【技术方案】AGC后台模型别名与对话选择-2026-09-05.md)一致;但[AGC 主方案](../../technical/【技术方案】AI游戏创作智能体App实施计划-2026-06-24.md)第 129–130 行仍承诺 OAuth 目录与轮换,第 637–640、1467 行也保留认证桥说明。先明确是否退役 OAuth 路线并更新权威文档,再整体处理旧 reader、variant、目录来源与 handoff 专属链;不能只把整链藏进测试配置。 -- **W113 / UserRevisionRequested**:`delegation.rs:570–599` 的写入入口只在测试调用,但 Fast GDD 方案第 2143 行称审批 receipt 会写出该状态,`runtime_driver/main_loop.rs:1616` 仍以它作为修订 blocker。需核对审批回执有无等价写入,再决定补接实现或修正文档;不删持久化状态值、兼容读取或修订门禁来消除告警。 - -### 逐项证据 - -编号沿用附录,位置以本节基线为准;缩写文件位于 `apps/ai-game-creator-shell/src-tauri/src/`,Runtime 深模块位于其 `agent/` 下,`build_support/` 位于 `src-tauri/` 下。每项只建议处理诊断对应对象,具体测试及生产替代路径如下。 - -| 编号 | 分类 | 当前证据与处理边界 | -| --- | --- | --- | -| W001 | 测试辅助 | `build_support/runtime_prompt_bundle.rs:938` 生成 ID,仅 `agent/prompt.rs:693` 的 bundle 断言使用;在生成器输出处添加测试边界,保留 manifest 校验。 | -| W002 | 测试辅助 | 生成器 `runtime_prompt_bundle.rs:942` 生成 VERSION,仅 `agent/prompt.rs:694` 断言;处理同 W001,不编辑 target 产物。 | -| W004 | 契约待厘清 | `codex_app_server/mod.rs:27,141` 的旧 auth-bridge URL 仅测试分支消费;不能把 URL 常量的测试用途等同于整条 OAuth 业务的保留依据,与 W005/W006 一并先收敛冲突文档。 | -| W005 | 契约待厘清 | `codex_app_server/mod.rs:45,1825–1859` 的读取上限只被 cfg(test) auth.json reader 使用;正式凭据构造 :2276–2314 不调用 reader。当前平台路由文档与主规范 OAuth 承诺冲突,先定清范围。 | -| W006 | 契约待厘清 | AuthBridge 只在测试构造;生产 `config.rs:3706–3713` 锁定官方路由,或显式 custom Key。模型别名专题 :5–10,33–45 支持两类来源,但主实施计划 :129–130,637,639–640 仍承诺 OAuth 目录/轮换;旧匹配与 handoff 链不可在本次直接删或全部 cfg(test)。 | -| W007 | 测试辅助 | `codex_app_server/mod.rs:723` 仅委托现役 `resolve_direct_codex_project_authority`(生产 :2606);测试 :6217,6273,6279,6293 验证目录边界,可改测现役函数或将包装放入测试模块。 | -| W008 | 测试辅助 | `codex_app_server/mod.rs:1936` 仅给现役 `configure_game_creator_codex_app_server_command_for_mode` 补默认参数,测试 :7015,7103 消费;限定测试编译或直接显式传入 mode。 | -| W009 | 测试辅助 | `codex_app_server/mod.rs:2516` 只委托现役带 auth_handoff 构造函数;测试替身启动入口 :2506,6914,7672,7849 使用;可 cfg(test),不删除正式进程启动。 | -| W013 | 测试辅助 | `codex_provider_proxy.rs:316` 补默认 parallel=false 后委托现役 :330;本模块 :477,855,916 与 app-server :6778,6827 测试使用,正式启动走 :2671 的 with_parallel。 | -| W014 | 测试辅助 | `design_runtime.rs:1228` 为现役 continue_with_capture 内核提供默认采集上下文;测试 :2429 等消费,正式 Tauri 入口 :1627 显式传入 capture;可限定测试并保留生命周期测试。 | -| W015 | 测试辅助 | `design_runtime.rs:1314` 为现役 decide_with_capture 内核补 capture;测试 :2506,2531,3230 使用,正式入口 :1652 直接调用内核;处理同 W014。 | -| W028 | 迁移测试入口 | `direct_runtime/mod.rs:103` 只在 :6635 断言测试临时目录的固定文件存在,与随后 prompt 判断无数据依赖;删该包装和无关 fixture 准备,保留 :6643 对现役美术意图判断的断言。 | -| W035 | 测试辅助 | `direct_thread_wire.rs:332,366` 是事件身份与时间的只读 getter,仅 app-server :5799,5800,5809 等断言使用;可 cfg(test),事件字段、序列化、构造及其他类型同名方法保持不变。 | -| W039 | 测试辅助 | `direct_tool_bridge.rs:398` 为现役 state_with_search 默认设 false;测试 :3147,3774,4454,4512,4664 使用,限定测试即可;保留生产带搜索策略构造。 | -| W049 | 测试辅助 | generation/canvas_generation.rs:1148-1162 是无 ExternalEditorBindingAccess 的包装(附录旧定位 :1175);canvas_generation.rs:1401,3221,3500 生产调用 with_access;:11218 模块测试调用无 access 包装。给无 access 包装加 cfg(test),保留 inner 与 with_access 的正式鉴权/轮询路径。 本地 HTTP mock 仍测轮询状态;正式绑定认证由 with_access 测试覆盖。 | -| W053 | 迁移测试入口 | agent/prompt.rs:345-350 仅把 None session 转发到 for_session;runtime_driver/entrypoints.rs:562,659 正式路径调用 for_session;tests/provider.rs:347 旧入口测试。删除无 session 包装,测试直接调用 build_game_creator_role_agent_chat_request_for_session(..., None, ...)。 保持角色 webSearchEnabled 断言,不改正式 session 选择/归属。 | -| W055 | 测试辅助 | runtime_actions/action_audit.rs:80-102 从当前 revision 造回执;生产使用 :105 带 project_revision_before 的写入,例如 runtime_actions/parallel_read.rs:861、runtime_driver/pending_execution.rs:685;tests/command_runtime.rs:3937,3995 和 tests/project_tools.rs:4105 使用便捷写入。此造数便捷包装及 runtime_actions.rs:54 重导出加 cfg(test),保留带 before 的正式回执。 现有回执测试继续断言序号/拒绝语义,避免便捷包装进入生产以免抹去动作前 revision。 | -| W056 | 迁移测试入口 | pending_confirmation_ledger.rs:210-214 仅测试包装;generation/prompt_context.rs:1082 生产用 with_minimum;tests/runtime_actions/policy.rs:1897,1905 用旧包装;:1988-2005 已测正式 redact_secret_tokens。与 W179 一并删除旧布尔包装;保留正式 secret token 扫描。 把必要 JSON 边界断言并入 redaction 测试,不保留旧私有 API。 | -| W057 | 迁移测试入口 | pending_confirmation_ledger.rs:216-221 仅 W056 包装调用;pending_confirmation_ledger.rs:224 是仍由 generation/prompt_context.rs:1082 使用的 with_minimum 版本。删除固定最短长度旧包装;保留 with_minimum。 W056 测试改现役 redaction 后,无需独立测旧 token_end。 | -| W062 | 迁移测试入口 | runtime_actions/tool_plan_protocol.rs:3-8 旧 String 错误包装;tool_plan_protocol.rs:49 正式 classified parser 调用;tests/provider.rs:7087,7113;tests/runtime_state.rs:486,505 仅旧包装调用。与 W181 一并删除旧包装;保持 classified parser。 迁移 parser 测试到 classified Result 类型,保留首个完整 JSON 和协议拒绝的行为断言。 | -| W065 | 测试辅助 | runtime_driver/entrypoints.rs:218-224 仅 test guard :272 调用;entrypoints.rs:248-263 是生产多窗口注册表写入;:265 guard 本身已 cfg(test)。给 configure 包装加 cfg(test),保留 validate/register 及多窗口广播注册表。 测试 guard.configure 继续验证端口/token;生产窗口 attach 用正式注册。 | -| W067 | 迁移测试入口 | runtime_driver/entrypoints.rs:581-588 无 session 转发包装;src/commands.rs:1255 调用 for_session_at;tests/sessions.rs:21 仅旧包装调用。删无 session 包装及 runtime_driver.rs:290 重导出;测试调用 for_session_at(..., None, ...)。 保留聊天内容/运行状态断言;正式命令的 session id 传递不改。 | -| W068 | 迁移测试入口 | runtime_driver/entrypoints.rs:634-645 无 session 转发包装;src/commands.rs:1328 调用 for_session_at;tests/provider.rs:409,475,531,590,644 调旧包装。删无 session 包装及 runtime_driver.rs:292 重导出;测试调用 stream_for_session_at(..., None, ...)。 保留 delta/失败回退断言,不改变命令层显式 session。 | -| W070 | 测试辅助 | runtime_protocol/goal_contract.rs:82-91 root.join 便捷路径;goal_contract.rs:746 位于 #[test] goal_contract_read_fails_closed_after_content_or_binding_tampering;goal_contract.rs:463,547 正式读写走 relative_path。仅 path 便捷函数加 cfg(test),保留 goal contract 相对路径和正式读写。 篡改测试继续借便捷路径定位 fixture;不改变 durable goal contract 格式。 | -| W073 | 测试辅助 | runtime_protocol/context_bundle.rs:3-11 便捷路径;context_bundle.rs:329,419 正式写/读走 relative_path;tests/runtime_state.rs:1399,1817 和 tests/goal.rs:1552 使用路径。path 便捷函数及 runtime_protocol.rs:37 的该项重导出加 cfg(test);保留 production relative_path。 文件存在/损坏/恢复测试继续可定位同一持久 sidecar。 | -| W074 | 旧业务清理 | runtime_protocol/models.rs:3 300 秒常量仅旧 read_lock_status :2626 用;runtime_state.rs:2341,2450 当前 Unix/Windows 走系统文件锁;tests/runtime_state.rs:371 和 tests/runtime_actions/task_lifecycle.rs:97 用旧时间戳造过期锁。删除仅旧 read_lock_status 使用的 300 秒常量及 runtime_protocol.rs:65 重导出;保留 Linux 真实文件锁争用回归。 tests/runtime_state.rs:337-382 的旧 JSON 判据测试随 W084/W085 删除;tests/runtime_actions/task_lifecycle.rs:83-112 是重要现役合同(旧 metadata 不可抢活锁),把 createdAt 改为固定极早值如 1,仍验证 OS 锁持有时不可重取。 | -| W076 | 字段收窄 | 原 runtime_protocol/models.rs:87 为 Pending(String);三处生产构造前先调用 record_game_creator_agent_runtime_finalization_pending,主循环不读取载荷。具体错误还被 tests/project_tools.rs、tests/response_stream.rs 和 runtime_actions/response_stream_tests.rs 的多处测试读取,初审的“唯一读取”判断有误。实施时保留生产 Pending 状态和三处错误记录,将 5 处具体错误断言改为检查现役持久状态或同一条 finalization_pending 审计记录,其余匹配改为 Pending;详见第 14 节。 | -| W079 | 测试辅助 | runtime_protocol/run_configuration.rs:3-5 root.join 便捷路径;runtime_protocol/verification.rs:254,270 正式读写直接用 AGENT_RUNTIME_PROJECT_REVISION_RELATIVE_PATH;tests/command_runtime.rs:2131 断言文件存在。便捷函数及 W188 中对应重导出加 cfg(test);保留 revision 常量和正式读写。 保留 revision sidecar 存在性断言。 | -| W080 | 测试辅助 | runtime_protocol/run_configuration.rs:64-70 root.join 便捷路径;run_configuration.rs:134,352 正式读写用 relative_path;tests/provider.rs:781 和 tests/runtime_actions/planning_strategy/autonomous_game_build.rs:1590 以此删除 fixture。便捷函数及 W188 中对应重导出加 cfg(test);保留 relative_path 和正式 binding 读写。 缺失绑定/漂移测试继续删相同文件;不得更改 run profile 持久路径。 | -| W081 | 测试辅助 | runtime_protocol/verification.rs:14-22 root.join 便捷路径;verification.rs:282,300 正式读写用 relative_path;tests/command_runtime.rs:2123,2212,2417 检查/篡改 gate。便捷函数及 W190 重导出加 cfg(test);保留 relative_path 和 verification gate 读写。 保持 gate 不存在/篡改阻断测试。 | -| W083 | 测试辅助 | runtime_state.rs:2591-2597 是对正式 try_open_task_lock_file 的只读探针;runtime_state.rs:2188,2311 正式任务锁取得;tests/mod.rs:476,551 和 tests/response_stream.rs:2660 等用于轮询释放。只给 availability 探针加 cfg(test),保留系统文件锁实现。 异步测试仍可等待锁释放;不要把 probe 的瞬时判断用作正式获取锁的前置门禁。 | -| W084 | 旧业务清理 | runtime_state.rs:2599-2603 旧 is_stale/belongs_to_previous_process 结构;runtime_state.rs:2605-2634 仅旧解析器构造;tests/runtime_state.rs:352,377 读取旧结构;正式锁由 :2188,2311 取得。删旧结构及 W085 解析器,正式文件锁不受影响。 删除 JSON pid/时间戳断言;锁争用和释放已有真实探针测试,必要时补目标行为测试。 | -| W085 | 旧业务清理 | runtime_state.rs:2605-2634 读取 JSON pid/createdAt;无生产调用;tests/runtime_state.rs:337-382 两测试独占旧 API;runtime_state.rs:2341,2450 现役 OS 锁并不以文件内容判定失效。删除旧状态读取器及两条脱离现役行为的测试;与 W074/W084 同组。 如保留恢复合同测试,应通过真实锁句柄和进程退出模拟,而非伪造 JSON 状态。 | -| W086 | 迁移测试入口 | runtime_tools/delegation.rs:289-317 旧直接入口自行取项目写锁;runtime_actions/action_execution.rs:457 正式工具入口已在统一执行链调用 at_locked;tests/response_stream.rs:4781、tests/collaboration/static_deliveries.rs:267,445 等只从测试调用旧入口。删除旧直接业务入口及 runtime_tools.rs:60 重导出;测试搬到 fixture 调 at_locked 并显式持写锁。 静态 delivery、协作恢复与 response-stream 测试保留同样观察语义,不能因 fixture 迁移放宽权限/锁校验。 | -| W088 | 迁移测试入口 | runtime_tools/isolated_joins.rs:105-112 旧默认上限包装;isolated_joins.rs:102,208,229,397 正式路径用 with_limit;tests/collaboration/claims.rs:466 唯一旧包装调用。删除默认上限包装及 runtime_tools.rs:70 重导出;测试直接调 with_limit(joins, AGENT_RUNTIME_READY_ISOLATED_JOIN_PAYLOAD_MAX_CHARS)。 保留超出完整 observation 预算时失败的断言,正式动态 max_payload_chars 不改。 | -| W094 | 测试辅助 | collaboration.rs:244-256 定义写 policy fixture;src/tests/collaboration/policy_snapshot.rs:14、policy_batches.rs:109 等测试调用;生产 resolve_supervisor_collaboration_policy_for_run_at 在 collaboration.rs:681 读取项目 policy/快照,无写 helper 调用。 给 writer 加 cfg(test) 或移测试 support;保留 policy 读取、校验和快照绑定生产路径,测试继续用 fixture 写 policy。 | -| W095 | 测试辅助 | collaboration.rs:311-320 绝对 snapshot path 包装;src/tests/mod.rs:3885 和 policy_snapshot.rs:1198 测试调用;生产快照路径由 collaboration.rs:279 相对路径函数和读写侧使用。 给绝对路径测试包装加 cfg(test);不改相对路径、持久文件名和读写恢复契约。 | -| W096 | 测试辅助 | collaboration.rs:322-333 binding 绝对路径包装;src/tests/mod.rs:3898 测试调用;生产 binding 在 collaboration.rs:290、484、583 等使用相对路径。 给包装加 cfg(test);保留 binding 持久路径与恢复测试。 | -| W099 | 测试辅助 | command_exec.rs:2375-2383 无提交钩子的便捷入口;只在该文件 cfg(test) mod tests(2564-2565)内如 2968、3404 调用;现役 command_ops.rs:487、direct_validation.rs:574 调用 run_prepared_project_command_with_output_at。 将入口收窄到 cfg(test);保留测试对实际 resolve/prepare/stage/execute 核心路径的覆盖。 | -| W100 | 测试辅助 | command_exec.rs:2385-2397 只由 W099 在 2382 调用;生产 bootstrap 在 2407、runtime command_ops.rs:487 使用 prepared 入口。 与 W099 一起 cfg(test);不移除 resolve_project_command_spec_at 与 prepared 执行核心。 | -| W107 | 测试辅助 | config.rs:2371 Windows owner 初始化函数;config.rs:1388-1389 调用明确 cfg(all(windows,test)),assets.rs:2641-2648 与 tests/mod.rs:439 是 Windows 测试;生产 config.rs:1390-1394 调 harden_new_game_creator_private_path。 函数改 cfg(all(windows,test));保持生产 Windows ACL harden 与测试 owner fixture。 | -| W109 | 测试辅助 | context_compaction.rs:91-99 绝对 path 拼接,仅该文件 cfg(test) 模块 1174 和 tests/provider.rs:2627、7691 等读取;生产通过 relative_path 访问 context compaction sidecar。 给绝对 path 包装加 cfg(test);保留相对路径函数、读写与恢复测试。 | -| W110 | 测试辅助 | delegation.rs:312 has_external_wait 只在 runtime_actions/project_gates.rs:1937 的测试与 detail parser 比对;生产 main_loop.rs:1703 使用 static_delegate_barrier_has_external_wait(detail)。 方法可 cfg(test);保留并运行 detail 解析与 barrier 字段等价测试,生产 park 行为不改。 | -| W111 | 测试辅助 | delegation.rs:330-353 默认 contract 构造包装;测试调用如 delegation.rs:2696、tests/collaboration/claims.rs:841;生产 runtime_tools/delegation.rs:755、921 调 new_static_delegate_delivery_with_contract。 包装 cfg(test);保留现役 contract 构造器,测试 fixture 仍验证真实 record 校验。 | -| W112 | 测试辅助 | delegation.rs:436-471 将简单 terminal status 映射结构化结果;只在 delegation.rs:2707 测试及 tests/collaboration/claims.rs:853 等调用;生产 runtime_tools/delegation.rs:814、1087 调 mark_static_delegate_delivery_ready_with_result_at。 包装 cfg(test);保留结构化结果写入与 delivery 状态迁移核心,测试不得把简化 fixture 当作完整生产合同。 | -| W113 | 契约待厘清 | delegation.rs:570-599 标记 UserRevisionRequested,仓库精确调用仅 delegation.rs:3331、3393 的 cfg(test);Fast GDD 技术方案:2143 声称 M1C-1 审批 receipt 写入该状态;main_loop.rs:1616 仍以该状态作为审批卡修订 blocker。 先核对现行审批 receipt 写入位置和 durable status:若另有等价写入,删除/迁移此断链入口测试;若没有,补接审批写入或修订文档承诺。不要直接 cfg(test)/删除而掩盖修订 barrier 缺口。 | -| W114 | 测试辅助 | delegation.rs:770-783 默认 payload budget 包装只在 delegation.rs:2717、tests/collaboration/claims.rs:1232 等测试调用;生产 runtime_tools/run_status.rs:184 使用 claim_ready_static_delegate_receipts_with_budget_at。 包装 cfg(test);默认预算测试保留,现役带预算 claim 路径不变。 | -| W115 | 迁移测试入口 | delegation.rs:965-1000 旧 mark claim observed 不校验 observation receipt 集合;只在 delegation.rs:2941 和 tests/collaboration/static_deliveries.rs:847 等测试调用;生产 runtime_actions/run_status_observation.rs:16 使用 mark_static_delegate_claim_observed_for_receipts_at,delegation.rs:1002-1025 校验完整 ID 集。 把相关测试迁到 for_receipts 入口并传真实 observed_delegation_ids,随后删除旧入口;保留 Prepared→Committed→Observed 及缺 receipt 拒绝回归。 | -| W118 | 迁移测试入口 | editor_adapters/execution.rs:518-520 Unity path 别名只在 editor_adapters.rs:221、223 的 cfg(test) 模块使用;现役通用 editor_execution_fence_path 和 Unity execute 路径共享固定持久文件。 测试改用 editor_execution_fence_path(ManagedEditor::Unity, config),删除别名;保留 Unity fence 路径/恢复断言。 | -| W121 | 迁移测试入口 | 原告警 W121 行 527;当前 execution.rs:521-523 Unity receipt 校验别名,editor_adapters.rs:231-243 测试用;实际 editor_execute_receipt_is_valid 在通用执行路径使用。 测试调用通用 receipt 校验并删除别名;维持 Unity 非法/有效 receipt 断言。 | -| W122 | 迁移测试入口 | 原告警 W122 行 530;当前 execution.rs:524-530 Unity RPC 别名,editor_adapters.rs:190、201、210 测试用;生产 execute_managed_editor_code 在 execution.rs:534-538。 测试调用 managed_editor_rpc_owned(ManagedEditor::Unity,...) 或现役 execute 路径,删除别名;保留 busy/disabled/delivery ID 行为测试。 | -| W123 | 迁移测试入口 | 原告警 W123 行 537;当前 execution.rs:531-533 Unity acknowledge 别名仅 editor_adapters.rs:220、222 测试用;通用 acknowledge_editor_delivery 为现役核心。 测试改用 acknowledge_editor_delivery(ManagedEditor::Unity, id),删除别名;保留 wrong-id 与已知 delivery ack 断言。 | -| W126 | 迁移测试入口 | patchset.rs:33-55 五个 getter 仅 patchset.rs:1567、1570、1573-1575 的 cfg(test) 模块调用;ProjectPatchsetChangeSummary 对应字段在 24-29 已是 pub(crate) 且 Serialize。 测试直接读字段后删五个冗余 getter;保持 summary 序列化字段、hash/bytes 断言。 | -| W127 | 迁移测试入口 | patchset.rs:74-76 is_empty 只在 patchset.rs:1566 测试调用;同类型 len 在 70-72 且测试 1565 已断言 len==3。 删 is_empty 与重复断言或直接检查 changes;保留 patchset 实际 apply/rollback 测试。 | -| W130 | 测试辅助 | preview.rs:15-21 无 analytics lease 的 registry setter;tests/project.rs:4657、4724、6419 使用;生产 preview.rs:797 调 set_running_with_lease 记录 analytics lease。 set_running 可 cfg(test);保留替换旧 preview 的 registry 行为测试与生产 lease 路径。 | -| W131 | 测试辅助 | process_session/lifecycle.rs:231-248 包装 prepare+start,只在 process_session/tests.rs:474、647 等及 tests/mod.rs:5656 调用;生产 runtime_tools/process_ops.rs:309 调 start_prepared_process_session_at。 包装 cfg(test);保留测试对 launch 准备、安全约束和实际 start_prepared 状态迁移的覆盖。 | -| W135 | 测试辅助 | project/conversation.rs:1083-1088 无 session 包装;调用都在 project/conversation/tests.rs:261 与 tests/collaboration/delegation.rs:154 等;生产 commands.rs:5655、prompt_context.rs:308/346 调 read_local_conversation_for_session_at。 包装 cfg(test);保留默认 session 和 legacy conversation 兼容测试,不改当前 session-aware 读取。 | -| W136 | 测试辅助 | project/conversation.rs:1412-1418 无 session append 包装;project/conversation/tests.rs:243 与 tests/sessions.rs:976 等测试调用;生产 commands.rs:5799、runtime_tools/delivery.rs:1458 调 append_local_conversation_message_for_session_at。 包装 cfg(test);保持默认会话和 JSONL append 测试及现役 session-aware 写入。 | -| W139 | 测试辅助 | project/external_editor_bindings.rs:47-62 for_platform/for_developer;所有精确调用位于该文件 1148 之后 cfg(test) 模块、resource_editor.rs:5808 后测试、canvas_generation.rs:8407 后测试等;生产 commands.rs:3671/4359、direct_runtime/mod.rs:3170、canvas_generation.rs:3083 调 ExternalEditorBindingAccess::new。 两个 convenience constructor 加 cfg(test) 或移测试 support;保留 new 对平台冻结 session 与开发者 key 的校验,测试继续覆盖两种凭据来源。 | -| W140 | 旧业务清理 | project/memory.rs:97-117 delete_local_game_memory_at 仅 tests/sessions.rs:807/827 调用;当前 commands.rs:5526/5561 与 main.rs:2738/2741 只注册读写。2026-09-22 已接受 ADR《退役AGC项目对话斜杠命令与终端swarm chat入口》决策段及 decision-log.md:59-64 明确 /remember 等斜杠命令与 memoryCommands 整体退役;技术方案:1176 的 /forget-memory→memory.delete 和 1195 的旧开发删除表述是历史口径。 删未接线的旧 delete_local_game_memory_at 与 tests/sessions.rs:791-830 中仅验证删除的断言;读写/blackboard 现役测试保留。同步修正主技术方案 1176、1195 的过期删除/斜杠描述;GAME_CREATION_APP_COMMANDS 中 memory.delete 若仍作为权限词汇保留,按 ADR 明确保留项目权限 id 的边界单独核对,不因删除 helper 擅删权限 id。 | -| W141 | 测试辅助 | project/verification.rs:290-303 默认 cwd='.' 规格包装,仅 tests/command_runtime.rs:2600-2660 调用;生产 verification.rs:702 使用 resolve_project_verification_spec_with_cwd_at,runtime_tools/command_ops.rs:900 走 with_commit。 包装 cfg(test);保留 script allowlist、expectedCommand 精确匹配测试,正式 cwd/commit 路径不改。 | -| W142 | 测试辅助 | project/verification.rs:674-689 默认 cwd/无 commit 包装,仅 tests/command_runtime.rs:2721-2837 调用;生产 project/export.rs:284、runtime_tools/command_ops.rs:900 调 run_project_verification_with_commit_at。 包装 cfg(test);保留成功/失败/超时与审计行为测试,正式持锁 commit 路径不变。 | -| W143 | 旧业务清理 | runner/client.rs:18 client-exit timeout 仅 1393 的 shutdown_external_agent_runner_for_client_exit_at 使用;正式 GUI exit 在 client.rs:1403-1415 调 shutdown_external_agent_runner_at。 与 W144/W146 同组删除 client-exit 专属 timeout;将 client-exit 测试迁到现役 GUI exit/idle shutdown 语义。 | -| W144 | 旧业务清理 | runner/client.rs:667-696 仅被旧 shutdown_external_agent_runner_for_client_exit_at 在 1353 调;正式 GUI exit 在 1414 用 shutdown_external_agent_runner_at,并有其他窗口参与锁门。 与 W143/W146 同组删除 endpoint-for-client-exit 读取路径;保留现役 endpoint/lock 验证与竞态测试。 | -| W146 | 旧业务清理 | 原告警 W146 行 1355;当前 runner/client.rs:1349-1397 仅 runner/tests.rs:257、299 调;生产 main.rs:2217 使用 shutdown_external_agent_runner_for_gui_exit,client.rs:1408-1415 以参与锁决定并调 shutdown_external_agent_runner_at;dispatch.rs:840 旧 runner.shutdown_for_client_exit 仅 cfg!(test) 分支。 删除整条旧 client-exit 请求链及专属测试,改测正式 GUI exit(多窗口保留、最后窗口 shutdown);同步移除仅测试可达的旧协议分支/方法白名单,确认当前 Runner shutdown 语义。 | -| W152 | 迁移测试入口 | runner/dispatch.rs:98-103 无 event sink 包装仅 runner/tests.rs:922-1506 使用;生产 dispatch.rs:769-806 的 runner.attach_gui_owner 调 apply_external_agent_runner_gui_owner_attachment(..., Some(event_sink))。 测试直接调用现役 attachment 并提供合法 event sink 或走 dispatch 请求,删除旧无 sink 包装;保持 epoch/revision、登录态与接收端绑定测试。 | -| W165 | 测试辅助 | ui_editor/workflow.rs:158-163 无 provider_identity 便捷入口仅该文件 cfg(test) mod tests:1651、1658、1730 使用;生产 runtime_tools/ui_workflow.rs:27 调 run_ui_workflow_at_with_provider 并传 agent/run 身份。 入口 cfg(test);保留 prepare/status 测试与生产 provider 身份、权限和 revision 行为。 | -| W176 | 测试辅助 | runtime_actions.rs:52,54 仅 facade 重导出告警;action_audit.rs:239,869 中 git detail 清洗是生产逻辑;action_audit.rs:80-102 的 receipt 简便包装仅测试调用;tests/project_tools.rs:3311,3400,3409;tests/command_runtime.rs:3937。仅给两个重导出及 receipt 简便包装加 cfg(test);保留 git detail 清洗本体、带 project_revision_before 的生产回执写入。 receipt 测试仍用当前 revision 造数;不可删 action_audit.rs:869 或 :105 的生产路径。 | -| W179 | 迁移测试入口 | runtime_actions.rs:88 重导出;pending_confirmation_ledger.rs:210-221 仅供自身及测试使用;generation/prompt_context.rs:1082 生产使用 agent_runtime_secret_token_end_with_minimum;tests/runtime_actions/policy.rs:1988 已测实际 redact_secret_tokens。删旧 contains 包装及无最短长度包装,移除重导出;保留 with_minimum 生产扫描。 tests/runtime_actions/policy.rs:1897-1907 的两条断言迁入现有 redact_secret_tokens 行为测试或删除重复断言。 | -| W181 | 迁移测试入口 | runtime_actions.rs:143 旧 parser 重导出;tool_plan_protocol.rs:3-8 包装 classified parser 并把 typed error 转 String;tool_plan_protocol.rs:49 生产走 parse_game_creator_agent_tool_plan_response_classified;tests/provider.rs:7087,7113 旧包装调用。删 String 错误旧包装及重导出;生产保留 classified parser。 tests/provider.rs:7087,7113 与 tests/runtime_state.rs:486,505 改测 classified parser 的成功/失败语义。 | -| W184 | 测试辅助 | runtime_protocol.rs:35-40 为 facade 重导出;context_bundle.rs:812,821 生产 persist_game_creator_agent_runtime_context 调用 build/write;context_bundle.rs:329,419 生产按 relative_path 存取;tests/command_runtime.rs:176,196 使用 facade。仅把三项 facade 重导出置于 cfg(test);仅 path 便捷函数本体可 cfg(test)。build/write 本体必须保留生产构建。 测试继续通过 facade 构造/篡改 bundle;生产 persist、相对路径及持久格式均不迁移。 | -| W188 | 测试辅助 | runtime_protocol.rs:80,82 facade 重导出;run_configuration.rs:3,64 两个 root.join 便捷路径;run_configuration.rs:134,352 生产使用 run_profile_binding_relative_path;verification.rs:254,270 生产用 AGENT_RUNTIME_PROJECT_REVISION_RELATIVE_PATH;tests/command_runtime.rs:2131;tests/provider.rs:781。两个便捷路径函数及重导出可 cfg(test);保留 production relative_path/常量和读写器。 项目 revision 存在性及 binding 缺失模拟仍可用 cfg(test) helper;不得改变 .agent/runtime 持久路径。 | -| W190 | 测试辅助 | runtime_protocol.rs:98 facade 重导出(附录 W190 旧定位为 :103);verification.rs:14-22 root.join 便捷路径;verification.rs:282,300 生产读写走 verification_gate_relative_path;tests/command_runtime.rs:2123,2212。便捷路径函数及 facade 重导出加 cfg(test);保留 relative_path 和门禁读写。 测试直接检查/篡改 gate 文件,路径语义仍由 production relative_path 定义。 | -| W191 | 迁移测试入口 | runtime_tools.rs:60 重导出;runtime_tools/delegation.rs:289-317 旧直接包装自行取写锁;runtime_actions/action_execution.rs:457 生产在统一 action 执行写锁下调用 observe_agent_runtime_agent_delegate_at_locked;tests/collaboration/delegation.rs:1798,1862 调旧包装。删除旧直接业务包装和重导出,或仅转成 tests/support 中 fixture;保留 at_locked 正式路径。 大量 collaboration/static_deliveries 等测试应由测试 fixture 显式取锁后调用 at_locked,不改变委派合同。 | - -本轮仅更新本清单,未修改 AGC 实现、未重新运行编译或 Rust 测试;120 条是本轮开始前合并验证的已测结果。文档更新运行编码检查与 diff 检查。后续实施应按组验证默认构建、test target 和相关定向用例,涉及 Windows ACL / Linux 文件锁等条件路径时另补相应目标验证。 - -## 14. 原测试用途项清理实施(2026-09-23) - -本批落实第 13 节中的 70 条;用户要求 W004–W006(AuthBridge)和 W113(UserRevisionRequested)保留不动。本批未修改这些符号的实现或替它们修订契约。 - -### 测试处置复核 - -“现役代码缺少测试”不是迁移旧测试的理由。本批先核对原断言:仅旧实现、无关 fixture 或重复覆盖直接删除;仅当原测试仍保护现役契约、包装只是调用通道时,才调整原测试调用。没有为补覆盖率新增用例,也没有为证明删除新增“不存在”测试。 - -| 原 20 条候选 | 实际处理与依据 | -| --- | --- | -| W028 | 删除只检查测试临时文件存在的 helper、准备代码和断言;它与原美术意图判断无数据依赖,原意图测试保留。 | -| W056/W057/W179 | 删除旧 secret-prefix 包装及身份测试中夹带的两条断言;现有 `redact_secret_tokens` 用例已覆盖 JSON 中的密钥与普通词不误删,不再迁移重复断言。 | -| W053 | 原测试核对逐 Agent 联网配置仍属现役契约,直接调用带 session 的组装器并传 None,保留原断言。 | -| W062/W181 | 原测试验证完整 JSON 提取、无效工具计划拒绝和计划更新,仍适用于现役协议;直接调用 classified parser,未新增旧 String 错误转换的测试。 | -| W067/W068 | 保留原默认 session 持久化、delta、首包错误回退和上游错误不回退测试;直接调用现役 for_session 入口并显式传 None。 | -| W086/W191 | 删除旧直接委派业务入口和导出;现有协作测试保留,在 `tests/mod.rs` 用测试 fixture 显式取得项目写锁后调用现役 at_locked 核心。fixture 不保留旧锁失败 observation 投影。 | -| W088 | 原用例验证恢复旧 claim 时完整 observation 超预算,仍属现役恢复契约;删除默认预算包装,原断言调用 with_limit 并显式使用 10,000 字符预算。 | -| W115 | 删除跳过回执集合检查的旧 observed 入口;现有 claim 状态/恢复测试使用完整 fixture 回执集合调用正式 for_receipts 入口。它们保留原状态断言,不冒充观察响应完整性测试;现有缺 ID 拒绝并保留 blocker 的专门测试继续保留。 | -| W118/W121/W122/W123 | 删除 Unity 专属别名;原 busy、disabled、围栏、错误回执和 acknowledgement 断言仍是现役 Unity 行为,改为通用入口加显式 ManagedEditor::Unity。 | -| W126 | 删除直接返回公开内部字段的五个 getter;原 hash、bytes、operation 等断言直接读取同一字段。 | -| W127 | 删除 is_empty 及与同一用例 len==3 重复的断言。 | -| W152 | 删除无 sink 包装;原平台会话/epoch 测试直接调用同一 attachment 核心并保持 None,不改造成带 sink 的另一场景;正式 dispatch 的 Some(sink) 原已有独立覆盖。 | - -其余 42 条只收紧测试辅助、观测 getter、生成常量或 facade 导出的编译边界。W184 的 context bundle build/write 本体仍参与生产;W107 使用精确的 `cfg(all(windows, test))`;生成 prompt 常量从生成器调整,不手改 target 产物。 - -7 条旧实现按组删除:W074/W084/W085 的 JSON 锁过期解析、W140 的旧 memory 删除 helper、W143/W144/W146 的旧 client-exit shutdown 请求/专属协议与测试。现役 OS 文件锁、Linux 过期 metadata 不可抢活锁回归、memory 读写、正式 GUI 退出和多窗口参与锁保持有效;不删除用户数据,不改权限 id 或持久格式。主实施计划中的旧 memory 删除/斜杠承诺同步更新。 - -W076 只将 Pending(String) 收窄为 Pending;三处生产返回前继续记录脱敏错误状态、事件和 Agent DB。实施时发现初审漏列了 `tests/project_tools.rs`、`tests/response_stream.rs` 的额外错误载荷断言,已逐处处理:5 处具体错误断言检查现役 state.error 或同一条 finalization_pending 审计记录,其余匹配保留 Pending 状态。没有移除故障注入和恢复断言。 - -### 验证 - -默认 Windows dev 编译通过,warning **120 → 50,净减少 70 条,无新增诊断**(dead_code 25、unused_imports 15、unused_variables 9、unused_assignments 1);4 条明确保留项仍在。另有 5 条 ts-rs 提示不变。测试构建初次发现测试导出可见性及旧 fixture 导入残留,已修正后重新验证。 - - -- `cargo check --locked --offline --manifest-path apps/ai-game-creator-shell/src-tauri/Cargo.toml -p genarrative-ai-game-creator-shell --message-format=json` 通过;与合并 master 后的 120 条诊断逐条比较,无新增诊断。 -- Rust 二进制定向测试 **155/155 通过**:finalization、静态委派 claim/恢复、GUI owner/shutdown、Unity 适配、patchset、memory 读写、项目验证、session/stream、计划协议、脱敏、Direct 启动/设计运行时和 prompt bundle。 -- `prompt_source_boundaries` **6/6**、`runtime_prompt_bundle_build` **17/17** 通过;最终代码的正常二进制构建仍报告 50 条 warning。 -- `node apps/ai-game-creator-shell/scripts/check-config.mjs` 通过(含 3 个 vendor 源码许可测试);修改文件的 Rust 格式检查、`npm run check:encoding`、`npm run check:doc-index` 和 `git diff --check` 通过。 -- 未运行全量 Rust 测试、Linux/macOS 构建、正式 editor features、release 打包或 GUI 端到端流程;Linux 文件锁测试仅保留源码,未在本轮 Windows 环境执行。 - -## 15. 测试重导出的编译边界清理(2026-09-23) - -本批只处理第 10 节 20 条编译边界候选中的 15 条重导出诊断:N001、W175、W177、W178、W180、W182、W183、W185、W186、W187、W189、W193、W194、W195、W201。用户要求不跑全量编译,本批只作导出范围调整和静态验证。 - -- 测试实际消费的重导出加 `#[cfg(test)]`,保持测试原有访问路径;生产仍使用的同组导出、底层函数和类型定义保留。不扩大模块可见性,不增加 allow,不修改业务实现或测试断言。 -- W175 按符号拆分:`submit_external_generation_request` 保留测试导出,供 Direct tool bridge 的原测试使用;其余 5 个无外层消费者的导出(初始响应分类、下载引用检查、提交拒绝分类、结果轮询、初始响应类型)删除。对应定义及模块内生产/测试调用均保留。 -- W180 只收紧剩余的 revision 推进和验证完成门禁两个测试导出;前批已删除的旧取锁入口不恢复。 -- W061 的 publisher `ready()`、W075 的测试故障注入分支、W092/W093 的计数观测、W154 的 Unix 目录句柄均未改动。尤其 W061 不能仅因测试调用就判定保留:需核定它是否属于退出生产的旧终态实现,再决定专属断言去留。 - -验证:核对引用与差异,确认改动只涉及 7 个 Rust 模块的 use 声明和 cfg;修改文件的 `rustfmt --check --edition 2021 --config skip_children=true`、`npm run check:encoding`、`npm run check:doc-index`、`git diff --check` 通过。没有执行 Cargo check/build/test、全量编译或 Rust 用例,不用静态核查替代编译验证。 - -最近一次实测仍为第 14 节的 **50 条**;本批覆盖其中 15 条 unused_imports,若没有其他变化,预期剩余 35 条,**该数量尚未重新编译确认**。 - -## 16. 剩余测试用途与 Unix 边界项清理(2026-09-23) - -本批处理第 10 节编译边界候选中的剩余 5 条:W061、W075、W092、W093、W154。第 15 节的 15 条与本节合计覆盖原 20 条;仍按用户要求不跑全量编译。 - -| 编号 | 实施结论 | -| --- | --- | -| W075 | 保留 Provider 成功交接后的测试故障注入。`AgentRuntimePersistedProviderRequestOutcome::HandoffPrepared`、后续压缩/工具计划/最终回复结果中的同名变体,以及 `WaitingForProviderHandoff` 和对应传递/匹配分支,限定为 `#[cfg(test)]`。既有交接后恢复、不重发请求、只提交一次结果的测试保留,正式持久交接与恢复实现不变。 | -| W092/W093 | 删除 `StoreCounters` 和 `counters()` 快照包装。两处既有测试直接读取同一 `writer.counters.dropped` 原子计数,保持 Relaxed 读取和原断言;生产计数器与更新逻辑保留,不新增辅助函数。 | -| W061 | 删除没有生产调用的 publisher `ready()`。仅移除两个既有测试末尾针对该方法的 ready 调用和断言,保留内容过滤、递增序号、重试身份和起始时间断言;未向现役入口迁移旧测试。正式 ready writer、ready→committed 及异常恢复测试继续保留。 | -| W154 | `runtime_directory()` 加 `#[cfg(unix)]`。Unix `openat`、重命名和同步路径仍使用原目录句柄;锁、目录句柄生命周期和文件操作实现不变。 | - -**纠正初审**:第 10 节将后续同名 `HandoffPrepared` 视为生产活跃分支的判断不准确。完整追踪后,唯一源头是 `cfg(test)` 的交接暂停注入,后续构造仅转传该结果。生产源码中存在匹配语句不等于生产可达;本节结论替代该初审判断。 - -验证:逐处核对故障注入变体的构造/匹配、删除符号和 Unix 调用边界;修改文件 rustfmt、编码、文档索引及 `git diff --check` 通过。未执行 Cargo check/build/test、Rust 用例或跨平台编译;本批不新增测试。 - -最近一次实测仍为第 14 节的 **50 条**。第 15~16 节共处理其中 20 条,预期剩余 **30 条**,尚未重新编译确认;不能将预期数作为实测结果。 - -## 17. 策划 V1/V2 退役口径纠正(2026-09-23) - -用户确认旧策划 V1、V2 均已明确删除。当前策划入口仅为 Design Agent,合同以[生产迁移与工作区浏览](../../technical/【技术方案】策划Agent生产迁移与工作区浏览-2026-09-10.md)为准;Fast GDD 和策划会话 Runtime V2 文档仅供历史追溯。不得因旧文档出现“必须”、源码残留常量或测试引用而要求恢复旧版本功能。 - -这修正了原审计对相关警告的保留判断: - -- W063:旧 exact planning lifecycle v3 常量可删;通用 Provider lifecycle v2 的当前写入与校验不是该旧功能的实现缺口。 -- W213/W215:旧策划阶段读取和会话投影已删除,内部锁参数透传可清理;外层持锁范围与正式 locked 入口的项目锁归属校验继续保留。 -- W214/W219:旧策划专属工具身份白名单已删除,未用 `agent_id`、`__all_agents__` 包装及过时注释可按实际调用清理。现有通用工具注册表、run/profile 与控制权检查不等于按 Agent 身份的白名单,不另行恢复旧门禁。 -- W069 的旧策划锁序注释不再构成保留无构造 `Deferred` 的依据;删除死分支不等于调整通用 Runtime 锁序。 - -本节先更新契约及审计结论,后续代码清理见第 18 节。已同步修正历史方案入口、当前实施计划和共享记忆,并删除已被现役迁移结果取代的四份退役临时计划/里程碑。本次文档纠正本身不计作 warning 减少。 - -## 18. 旧策划链路相关警告清理(2026-09-23) - -本批落实第 17 节对应的 6 条诊断:W063、W069、W213、W214、W215、W219。范围仅为旧策划 V1/V2 退役残留,不包含其余视觉素材、Goal helper、用户修订包装和 Direct 回合初始化候选。 - -- W063:删除无人引用的 plan Provider lifecycle v3 常量,通用 v2 记录与校验不变。 -- W069:删除没有构造点的 `AgentRuntimePendingActionResume::Deferred` 及恢复扫描、精确继续和测试结果适配中的专属分支;不修改取锁或恢复执行逻辑。 -- W213:把请求构建本体合入原 locked 入口,删除内部 `Option<&ProjectWriteLock>` 参数和转发包装。locked 签名仍要求借用项目锁;调用方在请求构建前后读取 manifest 的同一 guard 作用域保持原样。该借用约束本身不新增项目归属校验。 -- W215:合并任务入队的无用锁透传包装;保留 locked 入口的 `guards_project_root` 校验、调用方 guard、session lane 和入队后通知顺序。 -- W214/W219:合并通用工具计划解析和原生工具目录的无身份实现,删除未使用的 `agent_id` 参数、`__all_agents__` 哨兵包装及过期说明;同步生产调用与原测试调用,断言不变。工具协议、全局注册表、项目插件可用性和请求侧权限过滤保持原逻辑,不恢复旧策划身份白名单。 - -验证:静态核对所有改名/删参调用、旧符号残留和锁作用域;修改文件 rustfmt、编码、文档索引及 `git diff --check` 通过。按用户要求未执行 Cargo check/build/test,也未运行旧二进制冒充修改后验证;未新增测试。 - -最近一次实测仍为第 14 节的 50 条;第 15~16 节预期减少 20 条,本批再处理 6 条,预期剩余 **24 条**,尚未重新编译确认。 - -## 19. 剩余旧包装、失效门禁及冗余参数清理(2026-09-23) - -本批处理 W051、W071、W116、W210~W212、W216、W221、W234 共 9 条诊断。此前明确暂留的 W004~W006、W113 以及平台 / feature / 构建脚本项不在本批范围内。 - -| 编号 | 实施结论 | -| --- | --- | -| W051 | 删除没有调用方的 `generate_platform_art_asset_with_required_slices_at` 及 facade 导出;现役生成入口、内部切片提交和素材校验保留。 | -| W071 | 删除孤立的 Goal 读取 helper,以及只校验身份却以 Goal 持久化命名的转发包装。主循环直接复用父任务身份校验,修正局部变量和错误说明,不恢复已停用的 Goal 前置门。 | -| W116 | 删除无调用的用户修订查询包装;保留持久状态判据、lineage 重放及修订校验。注释改为实际职责,不再声称存在包装的提示词消费者。 | -| W210~W212 | 删除恒返回 `None` 的固定视觉素材门禁、不可达旧实现及其专属 UI 检查 helper,移除三个空调用和主循环中只消费旧门禁结果的等待分支。`task.update` 仍执行原有 Run Profile 读取及错误返回,现役图像检查、素材与完成合同校验保留。 | -| W216 | 删除恒为 `false` 的素材需求判断、不可达失败投影、永不选择的提示词分支及其专属文本;顺带删除失去唯一调用方的 `manifest_has_required_visual_asset` 布尔包装。保留实际使用的提示词和原有只读断言,仅移除对恒假 helper 的断言,不迁移或新增测试。 | -| W221 | `ensure_manifest_seed_tasks` 删除未用 `root`,更新全部 11 处调用;任务状态和元数据同步行为不变。 | -| W234 | Direct 无 observer 路径以循环返回值代替必被覆盖的 `response = None`。反馈、重试计数、错误传播和终态报告读取次数 / 顺序保持不变。 | - -边界:旧 `art-director` 提示词函数原先无论凭据是否配置都选择只读分支,本批保留该实际行为;现役 relaxed 调度提示词不变。调整提示词的凭据策略不属于 warning 清理,不能借删除恒假条件悄然恢复旧门禁。 - -验证:修改文件 rustfmt 检查、编码检查、文档索引及 `git diff --check`;静态核对删除符号、全部删参调用、身份校验与异常路径,并解析修改后的提示词 JSON。遵照用户不跑全量编译的要求,未执行 Cargo check/build/test、Rust 单元测试或跨平台构建;静态检查不替代类型检查与运行验证。 - -最近一次实测仍为第 14 节的 50 条;第 15~18 节已处理 26 条,本批再处理 9 条,预期剩余 **15 条**(11 条平台 / feature / 构建脚本项、4 条暂留契约项),尚未重新编译确认。另有 5 条 ts-rs 提示,不包含在本计数中。 - -## 20. 平台、feature 与构建脚本编译范围清理(2026-09-23) - -本批处理此前归为“其他配置使用”的 11 条诊断。复核后确认,该分类中也混有无调用的包装和平台占位实现,不能整组永久保留。 - -| 编号 | 实施结论 | -| --- | --- | -| W011/W012 | 共享 `Layout` 删除仅构建端使用的 `npm_package`,构建脚本根据原有 `platform` 生成相同包名。原包元数据校验移入 `build_support/codex_package_metadata.rs`,由 `build.rs` 正式调用;原校验用例随同一实现保留,运行时仅在测试编译中引入该模块。共享版本、平台布局与运行时完整性校验不变。 | -| W097/W098 | Linux 启动失败清理函数限定 Linux,直接调用现役 Unix 进程组终止 helper。删除无其它调用方的跨平台异步转发及其 Windows `taskkill` / 不支持平台分支;共享 Unix helper 仍供其它 Unix 路径使用,Windows 现役 Job Object 终止与回收保持不变。 | -| W101~W104 | 沙箱 Launch、Error、相关 impl、准备函数及导入限定 Linux。删除非 Linux 无生产调用的拒绝执行占位、专属错误 metadata getter 及其专属测试;跨平台审计使用的 `CommandSandboxMetadata` 和 `command_sandbox_platform_metadata` 保留。Linux bubblewrap 失败关闭逻辑和已有 Linux 测试不变。 | -| W117 | `RunnerManagedEditorAdapter` 的结构、实现与专用导入限定 Windows x64 且启用 Unity/Godot execute feature,与实际构造条件一致。 | -| W129 | 注册方法保留测试及真实 Cocos/Unity/Godot feature 调用;删除四个无人调用的宿主 detect/connect/disconnect/translate 包装。保留 EditorAdapter trait、实现、`host.rpc` 路由和禁用 / 切项目清理。仅测试所需的 `EditorConnectionInfo` 导入及 facade 重导出限定测试编译。 | -| W153 | 备用端口绑定算法限定 `cfg(any(target_os = "linux", test))`,保留 Linux 生产调用和三条跨平台算法测试;其它平台仍使用原有端口 0 绑定。 | - -验证:用临时独立 Cargo harness 直接引用当前工作树的两个构建辅助模块,离线运行原有平台布局与包元数据校验 **2 个测试,全部通过**;未编译 AGC 应用或执行其 build.rs。修改 Rust 文件的定向 rustfmt、编码检查、文档索引和 `git diff --check` 通过,另静态核对调用方与 cfg 条件。没有新增测试,也没有将退役业务实现仅为测试而保留;构建端原校验及其用例继续一起维护。 - -按用户要求未跑全量编译;AGC 默认应用构建、正式 editor features、Linux/macOS 构建及应用单测均未执行。最近一次应用 warning 实测仍为第 14 节的 50 条;第 15~20 节合计处理 46 条,预期剩余 **4 条暂留契约项:W004、W005、W006、W113**,不能将此预期当作重新编译结果。5 条 ts-rs 提示和前端 chunk 体积提示另行处理。 - -## 21. 旧策划用户修订写入入口清理(2026-09-23) - -本批只处理 W113。第 13 节依据 Fast GDD 审批说明提出的疑点已消解:策划 V1/V2 均已退役,现役 Design Agent 的审批修改 `DesignSession`,不写静态委派 delivery。不存在要求恢复旧审批写入链的现行合同;此结论替代此前 W113 的“契约待厘清”状态。 - -- 删除无生产调用的 `mark_static_delegate_delivery_user_revision_requested_at`,不将旧业务入口藏入 `cfg(test)`。 -- 保留 `UserRevisionRequested` 的持久化 wire 值、证据校验、claim 快照合法后继判断、lineage 计数和完成 barrier;历史项目记录仍按原规则读取与重放,不修改或删除用户数据。 -- 原 barrier 测试中的两次 helper 调用改为直接准备同一持久状态:首条记录以 `UserRevisionRequested` 构造,后续修订记录保留原证据,仅更新状态并落盘。原有首次阻拦、等待继续、继续完成解除以及再次修订阻拦的全部断言保留;未迁移测试到其它业务入口,也未新增测试。 -- claim 兼容注释改为存量记录语义,不再声称现役审批会调用旧 helper。现役 Design Agent 审批及 OAuth/AuthBridge 三条均未修改。 - -验证:定向 rustfmt、编码检查、文档索引和 `git diff --check`;静态核对旧 helper 无代码引用及既有 barrier 断言不变。未运行 Cargo 编译、应用测试或全量构建,不能将静态检查视为运行验证。 - -最近一次应用 warning 实测仍为 50 条;第 15~21 节合计处理其中 47 条,预期剩余 **W004、W005、W006 共 3 条 AuthBridge 契约项**,尚未重新编译确认。5 条 ts-rs 提示及前端 chunk 体积提示仍另行处理。 - -## 22. AuthBridge / OAuth 契约冲突与暂缓决策(2026-09-23) - -W004(认证桥 API URL)、W005(认证文件读取上限)、W006(`CodexAppServerCredential::AuthBridge`)明确暂缓。生产入口尚未接通 OAuth,下游实现与文档承诺仍存在,是否支持待定;保留现有实现和 warning,不以 `allow` 或扩大 `cfg(test)` 隐藏。 - -完整冲突证据、暂缓边界和“退役 / 正式接入”两种关闭条件维护在 [AGC 主方案](../../technical/【技术方案】AI游戏创作智能体App实施计划-2026-06-24.md#oauth-认证路线的契约冲突与待决边界)。本清单只跟踪诊断状态,删除本清单不影响契约记录。 - -## 附录:237 条编译器诊断位置 - -以下是诊断的人工可读整理,不保存原始构建日志、本机路径或 target 缓存路径。位置相对 `apps/ai-game-creator-shell/src-tauri/`;行号只对应本节基线,修改后以符号搜索及重新编译为准。每条保留一个主要 span,编号用于本清单内跟踪,不表示独立业务缺陷。生成产物项须回到 `build_support/runtime_prompt_bundle.rs` 处理。 - -### dead_code(165 条) - -| 编号 | 位置 | 诊断 | -| --- | --- | --- | -| W001 | `生成产物 agent_runtime_prompt_bundle.rs:3` | constant `RUNTIME_PROMPT_BUNDLE_ID` is never used | -| W002 | `生成产物 agent_runtime_prompt_bundle.rs:4` | constant `RUNTIME_PROMPT_BUNDLE_VERSION` is never used | -| W003 | `src/main.rs:1739` | static `STARTUP_PANIC_LOG_PATH` is never used | -| W004 | `src/agent/codex_app_server/mod.rs:31` | constant `GAME_CREATOR_CODEX_AUTH_BRIDGE_API_BASE_URL` is never used | -| W005 | `src/agent/codex_app_server/mod.rs:49` | constant `GAME_CREATOR_CODEX_APP_SERVER_AUTH_MAX_BYTES` is never used | -| W006 | `src/agent/codex_app_server/mod.rs:103` | variant `AuthBridge` is never constructed | -| W007 | `src/agent/codex_app_server/mod.rs:727` | function `resolve_direct_codex_game_workspace` is never used | -| W008 | `src/agent/codex_app_server/mod.rs:1910` | function `configure_game_creator_codex_app_server_command` is never used | -| W009 | `src/agent/codex_app_server/mod.rs:2490` | associated function `spawn_with_executable_and_credential_at_workspace` is never used | -| W010 | `src/agent/codex_app_server/mod.rs:5053` | function `direct_game_creator_codex_chat_at_with_observer` is never used | -| W011 | `build_support/codex_bundle.rs:10` | field `npm_package` is never read | -| W012 | `build_support/codex_bundle.rs:64` | function `validate_package_metadata` is never used | -| W013 | `src/agent/codex_provider_proxy.rs:411` | function `start_codex_provider_proxy` is never used | -| W014 | `src/agent/design_runtime.rs:1228` | function `continue_design_agent_at` is never used | -| W015 | `src/agent/design_runtime.rs:1314` | function `decide_design_phase_at` is never used | -| W016 | `src/agent/direct_codex_attachments.rs:9` | constant `HOME_ATTACHMENT_HEADER` is never used | -| W017 | `src/agent/direct_codex_attachments.rs:10` | constant `PROJECT_ATTACHMENT_HEADER` is never used | -| W018 | `src/agent/direct_codex_attachments.rs:14` | struct `DirectCodexTurnAttachment` is never constructed | -| W019 | `src/agent/direct_codex_attachments.rs:55` | function `sanitize_attachment_status` is never used | -| W020 | `src/agent/direct_codex_attachments.rs:105` | function `attachments_use_project_mapping` is never used | -| W021 | `src/agent/direct_codex_attachments.rs:115` | function `render_project_attachment_line` is never used | -| W022 | `src/agent/direct_codex_attachments.rs:143` | function `render_direct_codex_user_prompt` is never used | -| W023 | `src/agent/direct_codex_audit.rs:18` | constant `DIRECT_CODEX_AUDIT_TURN_LOG_DIR` is never used | -| W024 | `src/agent/direct_codex_audit.rs:59` | associated items `start` and `flush` are never used | -| W025 | `src/agent/direct_codex_audit.rs:478` | function `project_audit_attachments` is never used | -| W026 | `src/agent/direct_execution.rs:486` | function `open_at` is never used | -| W027 | `src/agent/direct_runtime/mod.rs:73` | constant `DIRECT_CODEX_HOME_CREATE_PROJECT_MARKER` is never used | -| W028 | `src/agent/direct_runtime/mod.rs:103` | function `direct_existing_game_sources_exist` is never used | -| W029 | `src/agent/direct_runtime/mod.rs:322` | function `direct_engine_three_dimensional_home_note` is never used | -| W030 | `src/agent/direct_runtime/mod.rs:4731` | function `build_direct_codex_home_system_prompt` is never used | -| W031 | `src/agent/direct_runtime/mod.rs:4744` | struct `DirectCodexHomeReply` is never constructed | -| W032 | `src/agent/direct_runtime/mod.rs:4749` | function `parse_direct_codex_home_reply` is never used | -| W033 | `src/agent/direct_runtime/mod.rs:4774` | function `run_direct_game_creator_home_turn` is never used | -| W034 | `src/agent/direct_runtime/mod.rs:5764` | function `chat_with_game_creator_home_direct_codex` is never used | -| W035 | `src/agent/direct_thread_wire.rs:332` | methods `user_item_id` and `at` are never used | -| W036 | `src/agent/direct_tool_bridge.rs:304` | function `direct_user_art_regeneration_looks_like_question` is never used | -| W037 | `src/agent/direct_tool_bridge.rs:322` | function `direct_user_art_regeneration_full_text_fails_closed` is never used | -| W038 | `src/agent/direct_tool_bridge.rs:387` | function `direct_user_explicitly_authorizes_art_regeneration` is never used | -| W039 | `src/agent/direct_tool_bridge.rs:735` | function `direct_tool_bridge_state` is never used | -| W040 | `src/agent/direct_tools_mcp.rs:35` | fields `url` and `token` are never read | -| W041 | `src/agent/direct_turn_metrics.rs:14` | constant `WRITER_BATCH_RECORDS` is never used | -| W042 | `src/agent/direct_turn_metrics.rs:15` | constant `WRITER_BATCH_BYTES` is never used | -| W043 | `src/agent/direct_turn_metrics.rs:16` | constant `FLUSH_TIMEOUT` is never used | -| W044 | `src/agent/direct_turn_metrics.rs:25` | fields `sequence` and `line` are never read | -| W045 | `src/agent/direct_turn_metrics.rs:33` | field `completed` is never read | -| W046 | `src/agent/direct_turn_metrics.rs:36` | function `take_writer_batch` is never used | -| W047 | `src/agent/direct_turn_metrics.rs:88` | associated items `new` and `flush` are never used | -| W048 | `src/agent/direct_turn_metrics.rs:360` | associated items `new` and `flush` are never used | -| W049 | `src/agent/generation/canvas_generation.rs:1175` | function `wait_for_external_generation_result` is never used | -| W050 | `src/agent/generation/canvas_generation.rs:1776` | method `slice_count` is never used | -| W051 | `src/agent/generation/canvas_generation.rs:2616` | function `generate_platform_art_asset_with_required_slices_at` is never used | -| W052 | `src/agent/prompt.rs:4` | function `render_agent_runtime_prompt_context` is never used | -| W053 | `src/agent/prompt.rs:352` | function `build_game_creator_role_agent_chat_request` is never used | -| W054 | `src/agent/prompt.rs:397` | function `build_game_creator_role_agent_context` is never used | -| W055 | `src/agent/runtime_actions/action_audit.rs:80` | function `append_agent_runtime_action_receipt` is never used | -| W056 | `src/agent/runtime_actions/pending_confirmation_ledger.rs:210` | function `agent_runtime_contains_secret_key_prefix` is never used | -| W057 | `src/agent/runtime_actions/pending_confirmation_ledger.rs:216` | function `agent_runtime_secret_token_end` is never used | -| W058 | `src/agent/runtime_actions/project_gates.rs:1838` | constant `AGENT_RUNTIME_PROJECT_WRITE_LOCK_SHORT_WAIT_ATTEMPTS` is never used | -| W059 | `src/agent/runtime_actions/project_gates.rs:1900` | function `acquire_game_creator_agent_runtime_project_write_lock_with_short_wait` is never used | -| W060 | `src/agent/runtime_actions/project_gates.rs:1911` | function `try_acquire_game_creator_agent_runtime_project_write_lock` is never used | -| W061 | `src/agent/runtime_actions/response_stream.rs:222` | method `ready` is never used | -| W062 | `src/agent/runtime_actions/tool_plan_protocol.rs:3` | function `parse_game_creator_agent_tool_plan_response` is never used | -| W063 | `src/agent/runtime_driver.rs:391` | constant `AGENT_RUNTIME_PLAN_PROVIDER_REQUEST_LIFECYCLE_SCHEMA_VERSION` is never used | -| W064 | `src/agent/runtime_protocol/acceptance_graph.rs:257` | struct `FastGddFileReadCoverage` is never constructed | -| W065 | `src/agent/runtime_driver/entrypoints.rs:218` | function `configure_game_creator_manifest_invalidation_event_sink` is never used | -| W066 | `src/agent/runtime_driver/entrypoints.rs:265` | function `remove_game_creator_manifest_invalidation_event_sink` is never used | -| W067 | `src/agent/runtime_driver/entrypoints.rs:585` | function `chat_with_game_creator_role_agent_runtime_at` is never used | -| W068 | `src/agent/runtime_driver/entrypoints.rs:638` | function `chat_with_game_creator_role_agent_stream_at` is never used | -| W069 | `src/agent/runtime_driver/finalization.rs:10` | variant `Deferred` is never constructed | -| W070 | `src/agent/runtime_protocol/goal_contract.rs:82` | function `game_creator_agent_runtime_goal_contract_path` is never used | -| W071 | `src/agent/runtime_driver/task_start.rs:745` | function `autonomous_root_goal_contract_persisted_for_binding_at` is never used | -| W072 | `src/agent/runtime_protocol/autonomous_completion.rs:14467` | function `inherited_gameplay_semantics_gap` is never used | -| W073 | `src/agent/runtime_protocol/context_bundle.rs:3` | function `game_creator_agent_runtime_context_bundle_path` is never used | -| W074 | `src/agent/runtime_protocol/models.rs:3` | constant `AGENT_RUNTIME_LOCK_STALE_AFTER_SECONDS` is never used | -| W075 | `src/agent/runtime_protocol/models.rs:26` | variant `HandoffPrepared` is never constructed | -| W076 | `src/agent/runtime_protocol/models.rs:87` | field `0` is never read | -| W077 | `src/agent/runtime_protocol/provider_retry.rs:328` | function `game_creator_agent_runtime_provider_config_fingerprint` is never used | -| W078 | `src/agent/runtime_protocol/provider_retry.rs:1646` | function `game_creator_agent_runtime_provider_request_slot_for_id` is never used | -| W079 | `src/agent/runtime_protocol/run_configuration.rs:3` | function `game_creator_agent_runtime_project_revision_path` is never used | -| W080 | `src/agent/runtime_protocol/run_configuration.rs:64` | function `game_creator_agent_runtime_run_profile_binding_path` is never used | -| W081 | `src/agent/runtime_protocol/verification.rs:14` | function `game_creator_agent_runtime_verification_gate_path` is never used | -| W082 | `src/agent/runtime_state.rs:283` | function `start_game_creator_agent_runtime_turn_at` is never used | -| W083 | `src/agent/runtime_state.rs:2600` | function `game_creator_agent_runtime_task_lock_is_available` is never used | -| W084 | `src/agent/runtime_state.rs:2609` | struct `AgentRuntimeTaskLockStatus` is never constructed | -| W085 | `src/agent/runtime_state.rs:2614` | function `read_game_creator_agent_runtime_lock_status` is never used | -| W086 | `src/agent/runtime_tools/delegation.rs:289` | function `observe_agent_runtime_agent_delegate` is never used | -| W087 | `src/agent/runtime_tools/isolated_joins.rs:88` | function `ready_isolated_join_status_for_parent_at` is never used | -| W088 | `src/agent/runtime_tools/isolated_joins.rs:120` | function `render_isolated_join_status_batch` is never used | -| W089 | `src/agent/runtime_tools/isolated_joins.rs:200` | function `claim_ready_isolated_joins_at` is never used | -| W090 | `src/agent/runtime_tools/isolated_joins.rs:479` | function `select_isolated_join_claim_batch` is never used | -| W091 | `src/agent/runtime_tools/policy.rs:29` | function `autonomous_design_foundation_command_is_allowed` is never used | -| W092 | `src/analytics/store.rs:24` | struct `StoreCounters` is never constructed | -| W093 | `src/analytics/store.rs:286` | method `counters` is never used | -| W094 | `src/collaboration.rs:244` | function `write_supervisor_collaboration_policy_at` is never used | -| W095 | `src/collaboration.rs:311` | function `supervisor_collaboration_policy_snapshot_path` is never used | -| W096 | `src/collaboration.rs:322` | function `supervisor_collaboration_policy_snapshot_binding_path` is never used | -| W097 | `src/command_exec.rs:1971` | function `request_project_command_process_group_termination` is never used | -| W098 | `src/command_exec.rs:2018` | function `terminate_project_command_process_group` is never used | -| W099 | `src/command_exec.rs:2375` | function `run_project_command_at` is never used | -| W100 | `src/command_exec.rs:2385` | function `run_project_command_with_output_at` is never used | -| W101 | `src/command_sandbox.rs:52` | struct `CommandSandboxLaunch` is never constructed | -| W102 | `src/command_sandbox.rs:70` | struct `CommandSandboxError` is never constructed | -| W103 | `src/command_sandbox.rs:76` | associated items `new` and `metadata` are never used | -| W104 | `src/command_sandbox.rs:110` | function `prepare_command_sandbox_launch` is never used | -| W105 | `src/commands.rs:3903` | function `fetch_agent_editor_asset_library` is never used | -| W106 | `src/commands.rs:3917` | function `list_account_editor_assets_for_agent` is never used | -| W107 | `src/config.rs:2371` | function `initialize_windows_game_creator_directory_owner_for_current_user` is never used | -| W108 | `src/config.rs:2382` | function `repair_game_creator_private_acl_for_current_user` is never used | -| W109 | `src/context_compaction.rs:91` | function `game_creator_agent_runtime_context_compaction_path` is never used | -| W110 | `src/delegation.rs:312` | method `has_external_wait` is never used | -| W111 | `src/delegation.rs:330` | function `new_static_delegate_delivery` is never used | -| W112 | `src/delegation.rs:436` | function `mark_static_delegate_delivery_ready_at` is never used | -| W113 | `src/delegation.rs:570` | function `mark_static_delegate_delivery_user_revision_requested_at` is never used | -| W114 | `src/delegation.rs:770` | function `claim_ready_static_delegate_receipts_at` is never used | -| W115 | `src/delegation.rs:965` | function `mark_static_delegate_claim_observed_at` is never used | -| W116 | `src/delegation.rs:1293` | function `static_delegate_original_awaits_user_revision_at` is never used | -| W117 | `src/editor_adapters.rs:22` | struct `RunnerManagedEditorAdapter` is never constructed | -| W118 | `src/editor_adapters/execution.rs:518` | function `unity_execution_fence_path` is never used | -| W119 | `src/editor_adapters/execution.rs:521` | function `unity_uncertain_fence_path` is never used | -| W120 | `src/editor_adapters/execution.rs:524` | function `mark_unity_execution_uncertain_at` is never used | -| W121 | `src/editor_adapters/execution.rs:527` | function `unity_execute_receipt_is_valid` is never used | -| W122 | `src/editor_adapters/execution.rs:530` | function `unity_editor_rpc_owned` is never used | -| W123 | `src/editor_adapters/execution.rs:537` | function `acknowledge_unity_editor_delivery` is never used | -| W124 | `src/error_report/queue.rs:188` | function `generation` is never used | -| W125 | `src/goal.rs:1037` | function `mark_game_creator_agent_goal_cleared_for_runtime_at` is never used | -| W126 | `src/patchset.rs:33` | methods `operation`, `before_sha256`, `after_sha256`, `before_bytes`, and `after_bytes` are never used | -| W127 | `src/patchset.rs:74` | method `is_empty` is never used | -| W128 | `src/platform_session.rs:705` | function `platform_session_service_identity` is never used | -| W129 | `src/plugin_host.rs:1876` | methods `register_editor_adapter`, `detect_editor`, `connect_editor`, `disconnect_editor`, and `translate_editor_rpc` are never used | -| W130 | `src/preview.rs:15` | method `set_running` is never used | -| W131 | `src/process_session/lifecycle.rs:231` | function `start_process_session_at` is never used | -| W132 | `src/project/agent_db.rs:2509` | function `read_agent_db_records_matching` is never used | -| W133 | `src/project/agent_db.rs:3189` | function `read_agent_db_lifecycle_transitions_matching_at` is never used | -| W134 | `src/project/agent_db.rs:4785` | function `append_jsonl_lines` is never used | -| W135 | `src/project/conversation.rs:1083` | function `read_local_conversation_at` is never used | -| W136 | `src/project/conversation.rs:1412` | function `append_local_conversation_message_at` is never used | -| W137 | `src/project/conversation.rs:1444` | function `conversation_file_path` is never used | -| W138 | `src/project/export.rs:573` | function `ensure_project_export_package_dir` is never used | -| W139 | `src/project/external_editor_bindings.rs:47` | associated functions `for_platform` and `for_developer` are never used | -| W140 | `src/project/memory.rs:97` | function `delete_local_game_memory_at` is never used | -| W141 | `src/project/verification.rs:290` | function `resolve_project_verification_spec_at` is never used | -| W142 | `src/project/verification.rs:674` | function `run_project_verification_at` is never used | -| W143 | `src/runner/client.rs:18` | constant `AGENT_RUNNER_CLIENT_EXIT_TIMEOUT` is never used | -| W144 | `src/runner/client.rs:667` | function `read_external_agent_runner_endpoint_for_shutdown` is never used | -| W145 | `src/runner/client.rs:1068` | function `shutdown_external_agent_runner` is never used | -| W146 | `src/runner/client.rs:1355` | function `shutdown_external_agent_runner_for_client_exit_at` is never used | -| W147 | `src/runner/client.rs:1405` | function `shutdown_external_agent_runner_for_client_exit` is never used | -| W148 | `src/runner/client.rs:1566` | function `ensure_external_agent_runner_started_for_gui` is never used | -| W149 | `src/runner/client.rs:1594` | function `parse_external_agent_runner_notification_kind` is never used | -| W150 | `src/runner/client.rs:1839` | function `disconnect_external_managed_editor` is never used | -| W151 | `src/runner/client.rs:2154` | function `notify_external_agent_runner` is never used | -| W152 | `src/runner/dispatch.rs:98` | function `apply_external_agent_runner_gui_owner_platform_session` is never used | -| W153 | `src/runner/server.rs:23` | function `bind_external_agent_runner_listener_with` is never used | -| W154 | `src/runner/state.rs:248` | method `runtime_directory` is never used | -| W155 | `src/swarm_cli/conversation.rs:223` | function `summarize_new_assistant_messages` is never used | -| W156 | `src/swarm_cli/conversation.rs:301` | function `print_settled_parent_reply` is never used | -| W157 | `src/swarm_cli/report.rs:5` | constant `SWARM_TURN_FAILED_ERROR` is never used | -| W158 | `src/swarm_cli/report.rs:6` | constant `SWARM_TURN_INCOMPLETE_ERROR` is never used | -| W159 | `src/swarm_cli/report.rs:7` | constant `SWARM_TURN_RECONCILIATION_ERROR` is never used | -| W160 | `src/swarm_cli/turn_wait.rs:7` | struct `SwarmTurnObservation` is never constructed | -| W161 | `src/swarm_cli/turn_wait.rs:396` | function `runtimes_are_busy` is never used | -| W162 | `src/ui_editor/html_renderer/mod.rs:17` | function `render_ui_design_state_html` is never used | -| W163 | `src/ui_editor/html_renderer/mod.rs:139` | function `render_tree` is never used | -| W164 | `src/ui_editor/html_renderer/mod.rs:157` | function `render_node` is never used | -| W165 | `src/ui_editor/workflow.rs:158` | function `run_ui_workflow_at` is never used | - -### unused_imports(44 条) - -| 编号 | 位置 | 诊断 | -| --- | --- | --- | -| W166 | `src/main.rs:13` | unused import: `std::process::Command` | -| W167 | `src/agent/codex_app_server/mod.rs:11` | unused import: `uuid::Uuid` | -| W168 | `src/agent/direct_codex_user_item/mod.rs:8` | unused imports: `DirectCodexUserAttachmentReferencePart`, `DirectCodexUserContentPart`, `DirectCodexUserMessageItem`, `DirectCodexUserRole`, and `DirectCodexUserRuntimeRegionPart` | -| W169 | `src/agent/direct_codex_user_item/mod.rs:14` | unused import: `direct_codex_user_item_to_wire_input` | -| W170 | `src/agent/direct_project_context.rs:9` | unused import: `PathBuf` | -| W171 | `src/agent/direct_runtime/mod.rs:5` | unused import: `std::future::Future` | -| W172 | `src/agent/direct_runtime/mod.rs:12` | unused import: `normalize_direct_client_turn_id` | -| W173 | `src/agent/direct_tool_bridge.rs:2` | unused import: `Query` | -| W174 | `src/agent/direct_tool_bridge.rs:3` | unused import: `get` | -| W175 | `src/agent/generation.rs:29` | unused imports: `ExternalGenerationInitialResponse`, `classify_external_generation_initial_response`, `external_generation_result_has_download_reference`, `external_generation_submit_rejection_is_definitive`, `submit_external_generation_request`, and `wait_for_external_generation_result_with_access` | -| W176 | `src/agent/runtime_actions.rs:52` | unused imports: `agent_runtime_git_commit_safe_detail_value` and `append_agent_runtime_action_receipt` | -| W177 | `src/agent/runtime_actions.rs:60` | unused import: `execute_game_creator_agent_runtime_tool_action_with_action_id` | -| W178 | `src/agent/runtime_actions.rs:76` | unused import: `game_creator_agent_runtime_parallel_read_batch_path` | -| W179 | `src/agent/runtime_actions.rs:88` | unused import: `agent_runtime_contains_secret_key_prefix` | -| W180 | `src/agent/runtime_actions.rs:98` | unused imports: `agent_runtime_observation_advances_project_revision`, `project_verification_completion_blocker`, and `try_acquire_game_creator_agent_runtime_project_write_lock` | -| W181 | `src/agent/runtime_actions.rs:144` | unused import: `tool_plan_protocol::parse_game_creator_agent_tool_plan_response` | -| W182 | `src/agent/runtime_driver.rs:309` | unused import: `agent_runtime_tool_requires_repository_context_fingerprint_gate` | -| W183 | `src/agent/runtime_driver.rs:331` | unused import: `autonomous_manifest_parent_wake_error_is_transient` | -| W184 | `src/agent/runtime_protocol.rs:35` | unused imports: `build_game_creator_agent_runtime_context_bundle`, `game_creator_agent_runtime_context_bundle_path`, and `write_game_creator_agent_runtime_context_bundle` | -| W185 | `src/agent/runtime_protocol.rs:43` | unused import: `agent_runtime_context_window_applies` | -| W186 | `src/agent/runtime_protocol.rs:73` | unused import: `real_e2e_checkpoint::AgentRuntimeRealE2eAckPublishPhase` | -| W187 | `src/agent/runtime_protocol.rs:75` | unused import: `game_creator_agent_runtime_response_stream_path` | -| W188 | `src/agent/runtime_protocol.rs:80` | unused imports: `game_creator_agent_runtime_project_revision_path` and `game_creator_agent_runtime_run_profile_binding_path` | -| W189 | `src/agent/runtime_protocol.rs:86` | unused imports: `acquire_game_creator_agent_runtime_steer_project_write_lock_with_wait` and `game_creator_agent_runtime_steer_ledger_path` | -| W190 | `src/agent/runtime_protocol.rs:103` | unused import: `game_creator_agent_runtime_verification_gate_path` | -| W191 | `src/agent/runtime_tools.rs:60` | unused import: `observe_agent_runtime_agent_delegate` | -| W192 | `src/agent.rs:54` | unused import: `direct_codex_canonical_project_identity_for_commands as direct_codex_canonical_project_identity` | -| W193 | `src/browser/playtest/mod.rs:18` | unused imports: `finish_generic_stability_observation`, `generic_non_loss_progression_phase_is_valid`, `generic_primary_action_phase_is_valid`, `generic_restart_phase_is_valid`, `generic_start_phase_is_valid`, and `validate_generic_stability_sample` | -| W194 | `src/browser/playtest/mod.rs:28` | unused imports: `LaneBattleProgress` and `lane_enemy_state_changes` | -| W195 | `src/browser.rs:11` | unused import: `discovery::discover_chrome_or_edge` | -| W196 | `src/browser.rs:24` | unused import: `validate_local_preview_in_browser_with_interaction` | -| W197 | `src/runner/server.rs:2` | unused import: `Sha256` | -| W198 | `src/runner/server.rs:3` | unused import: `std::fs` | -| W199 | `src/runner.rs:27` | unused import: `disconnect_external_managed_editor` | -| W200 | `src/tool_plan_handoff/discovery.rs:5` | unused imports: `TOOL_PLAN_HANDOFF_MAX_DISCOVERED_AGENTS` and `TOOL_PLAN_HANDOFF_MAX_DISCOVERED_FILES` | -| W201 | `src/tool_plan_handoff.rs:35` | unused imports: `AgentRuntimeToolPlanHandoffLedger` and `TOOL_PLAN_HANDOFF_SCHEMA_VERSION` | -| W202 | `src/ui_editor/commands/recognition.rs:15` | unused import: `NodeId` | -| W203 | `src/ui_editor/commands/separation/image_preprocess.rs:3` | unused import: `RgbaImage` | -| W204 | `src/ui_editor/commands/separation/persistence.rs:2` | unused import: `crate::ui_editor::commands::separation::*` | -| W205 | `src/ui_editor/persistence.rs:15` | unused import: `File` | -| W206 | `src/ui_editor/workflow.rs:22` | unused import: `Digest` | -| W207 | `src/agent/codex_provider_proxy.rs:7` | unused import: `StreamExt` | -| W208 | `src/assets.rs:2` | unused import: `Digest` | -| W209 | `src/runner/server.rs:2` | unused import: `Digest` | - -### unused_variables(13 条) - -| 编号 | 位置 | 诊断 | -| --- | --- | --- | -| W210 | `src/agent/runtime_actions/project_gates.rs:1207` | unused variable: `root` | -| W211 | `src/agent/runtime_actions/project_gates.rs:1208` | unused variable: `agent_id` | -| W212 | `src/agent/runtime_actions/project_gates.rs:1209` | unused variable: `required_run_id` | -| W213 | `src/agent/runtime_actions/provider_request_builders.rs:181` | unused variable: `project_lock` | -| W214 | `src/agent/runtime_actions/tool_plan_protocol.rs:45` | unused variable: `agent_id` | -| W215 | `src/agent/runtime_driver/task_start.rs:328` | unused variable: `project_write_lock` | -| W216 | `src/agent/runtime_driver/task_start.rs:1687` | unused variable: `task_id` | -| W217 | `src/agent/runtime_protocol/json_sidecar.rs:31` | unused variable: `path` | -| W218 | `src/agent/runtime_protocol/json_sidecar.rs:32` | unused variable: `label` | -| W219 | `src/agent_native_tools.rs:283` | unused variable: `agent_id` | -| W220 | `src/commands.rs:4800` | unused variable: `asset_id` | -| W221 | `src/project/manifest.rs:1125` | unused variable: `root` | -| W222 | `src/ui_editor/html_renderer/mod.rs:140` | unused variable: `image` | - -### unused_mut(11 条) - -| 编号 | 位置 | 诊断 | -| --- | --- | --- | -| W223 | `src/agent/codex_app_server/mod.rs:3209` | variable does not need to be mutable | -| W224 | `src/agent/codex_app_server/mod.rs:3210` | variable does not need to be mutable | -| W225 | `src/agent/codex_app_server/mod.rs:3211` | variable does not need to be mutable | -| W226 | `src/agent/codex_app_server/mod.rs:3259` | variable does not need to be mutable | -| W227 | `src/agent/runtime_actions/context_compaction.rs:63` | variable does not need to be mutable | -| W228 | `src/agent/direct_tool_bridge.rs:780` | variable does not need to be mutable | -| W229 | `src/agent/runtime_actions/provider_request_builders.rs:606` | variable does not need to be mutable | -| W230 | `src/agent/runtime_protocol/autonomous_completion.rs:6325` | variable does not need to be mutable | -| W231 | `src/commands.rs:2243` | variable does not need to be mutable | -| W232 | `src/platform_session.rs:189` | variable does not need to be mutable | -| W233 | `src/main.rs:2466` | variable does not need to be mutable | - -### unused_assignments(3 条) - -| 编号 | 位置 | 诊断 | -| --- | --- | --- | -| W234 | `src/agent/direct_runtime/mod.rs:5328` | value assigned to `response` is never read | -| W235 | `src/config.rs:3642` | value assigned to `changed` is never read | -| W236 | `src/runner/endpoint.rs:1043` | value assigned to `last_error` is never read | - -### unused_doc_comments(1 条) - -| 编号 | 位置 | 诊断 | -| --- | --- | --- | -| W237 | `src/resource_inspect.rs:354` | unused doc comment | diff --git a/docs/【协作规范】文档生命周期与现状索引-2026-09-12.md b/docs/【协作规范】文档生命周期与现状索引-2026-09-12.md index 0590d2886..7a99366ca 100644 --- a/docs/【协作规范】文档生命周期与现状索引-2026-09-12.md +++ b/docs/【协作规范】文档生命周期与现状索引-2026-09-12.md @@ -79,7 +79,6 @@ 当前 `open-todo`: -- `docs/project-memory/todos/【待解决】主要构建入口编译警告清单-2026-09-23.md` - `docs/project-memory/todos/【待解决】AI游戏创作高风险审批Rank-2026-07-20.md` - `docs/project-memory/todos/【待评估】UI编辑器字体跨运行时像素一致性-2026-08-19.md` - `docs/project-memory/todos/【已知问题】AppConfig与AppState调试输出敏感配置泄漏-Master遗留-2026-08-07.md` diff --git a/docs/【开发运维】本地开发验证与生产运维-2026-05-15.md b/docs/【开发运维】本地开发验证与生产运维-2026-05-15.md index f41e09fb2..ac0f0cb97 100644 --- a/docs/【开发运维】本地开发验证与生产运维-2026-05-15.md +++ b/docs/【开发运维】本地开发验证与生产运维-2026-05-15.md @@ -289,6 +289,14 @@ npm run check 编译警告的局部清理保持运行行为与验证断言不变:先在当前提交复现,再移除冗余导入、可变绑定及被无条件覆盖的赋值;仅测试或平台分支需要的导入按实际使用边界编译,兼容重导出和涉及锁、权限、持久化的参数单独核查。独立前端 build 可以直接执行本包已有的 TSC/Vite,避免嵌套 npm 传递配置警告;移动壳 smoke 使用 Node 直接启动本包解析出的已安装 Expo/EAS CLI,兼容 Windows,并保留原配置与导出断言。验收使用原构建入口及受影响的测试目标编译,不以全局屏蔽 warning、删除业务校验或提高包体积阈值代替修复。 +### 编译告警的保留边界与待优化项 + +- AGC 默认 Windows dev 构建在 2026-09-23 清理后的 `cargo check --locked --offline --manifest-path apps/ai-game-creator-shell/src-tauri/Cargo.toml -p genarrative-ai-game-creator-shell` 复核通过,剩余 3 条 AuthBridge 相关 Rust warning 和 5 条 ts-rs 提示。这是当次配置的检查结果,不代表后续提交、正式 editor features、其它平台、test targets、release 链接或安装包均无告警;后续按改动范围定向验证。 +- AuthBridge 的 3 条 warning 暂缓处理,支持或退役 OAuth 的决策仍未确定。完整证据、保留边界和关闭条件以 [AGC 主方案“OAuth 认证路线的契约冲突与待决边界”](./technical/【技术方案】AI游戏创作智能体App实施计划-2026-06-24.md#oauth-认证路线的契约冲突与待决边界)为准。 +- ts-rs 12.0.1 的 5 条提示来自四个枚举(`DirectCodexUserItem`、`DirectCodexUserContentPart`、`DirectThreadItem`、`DirectThreadEvent`)的 `serde(deny_unknown_fields)` 和图片组件的 `serde(deserialize_with = "deserialize_fill_amount")`。已静态核对 TypeScript 类型形状及基础类型正确、Serde 运行时校验仍有效;暂保留提示,不引入依赖补丁、不改业务校验或全局屏蔽,待上游正式版本支持后再评估。 +- AGC 前端仍有超过 Vite 默认 `500 kB` 阈值的 chunk 体积提示;主包按页面/面板拆分与 three 体积取舍尚未完成。three 及其 loader 已按需加载,不能重复以“改成动态 import”作为修复;优化须验证首屏、页面切换、面板首次打开及加载失败表现,不以提高阈值代替优化。 +- 嵌套 npm 的 `Unknown env config "global-ignore-file"` 属于工具链配置提示。已复现 npm 12 向脚本导出有效配置,而子进程切换到不认识该配置的 npm 11 后报错;应核对父子进程实际 npm 入口并统一版本,项目声明及 CI 使用的版本以 `package.json` 与当前 CI 配置为准。不要据此删除 npm 12 的有效配置,也不要把减少一层 npm 调用视为已统一本机工具链。 + ### Gitea Actions PR 门禁 Linux process-session 的 owner SIGKILL 用例必须在启动 owner 后立即建立测试清理 guard:正常退出或断言 panic 时终止、回收 owner,并在有界时间内清理其独立临时项目目录中的残留进程。原有「owner 退出后子进程自行消失」断言在兜底清理之前执行,不能由 guard 代替生产生命周期验证。清理覆盖 panic 路径及临时项目间隔离,且不得因清理失败再次 panic。