docs: 登记 codex_provider 的 #[allow(dead_code)] 限定例外
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Has been cancelled
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Has been cancelled
Project CI / AI game creator shell Rust crates (pull_request) Has been cancelled
Project CI / Backend tests (pull_request) Has been cancelled
Project CI / Native shell tests (pull_request) Has been cancelled
Project CI / Frontend tests (pull_request) Has been cancelled
Project CI / Repository checks (pull_request) Has been cancelled
Project CI / AI game creator shell web tests (pull_request) Has been cancelled
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Has been cancelled
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Has been cancelled
Project CI / AI game creator shell Rust crates (pull_request) Has been cancelled
Project CI / Backend tests (pull_request) Has been cancelled
Project CI / Native shell tests (pull_request) Has been cancelled
Project CI / Frontend tests (pull_request) Has been cancelled
Project CI / Repository checks (pull_request) Has been cancelled
Project CI / AI game creator shell web tests (pull_request) Has been cancelled
仓库原有口径明文禁止新增 `#[allow(dead_code)]`(开发运维文档「Rust 编译告警门禁」、 development-workflow「验证路由」)。本次按用户决策登记**限定例外**,两处同步,避免文档与代码自相矛盾。 - 作用域:AGC 壳 `agent/codex_provider`(`app_server` = `agent/codex_app_server/**`,含凭据、模型目录与 OAuth 交接;`cli` = `agent/codex_cli.rs`,含 CLI 请求路径)。其它 crate、其它目录、其它 lint 与 CI 不受影响。 - 理由:该子树在 AGC 交付口径下休眠(生产恒走平台会话 / DirectProject 路由,原生 app-server 与内置 CLI 请求入口在 Windows 生产构建里没有调用方),而上游 master 正在活跃编辑这些文件,删除会与其在飞工作反复冲突。 - 失效边界:该子树内今后新增的 `dead_code` 不再被任何机器检查发现;`unused_imports` / `unused_variables` 等其它 lint 仍必须真修(已实测:allow(dead_code) 压不住未使用的 `use`)。 - 退出条件:该子树被重新启用(恢复个人 Codex OAuth 登录态或原生 app-server 路径)或确定整体退役删除时, 必须一并移除该 `#![allow(dead_code)]` 并删除登记条。 - 同时修订原「不得模块级 `#![allow]`」一句,指向唯一登记例外。
This commit is contained in:
@@ -57,7 +57,7 @@ AGC 生成准备只通过单目录 GET 确认当前账号绑定,不能重新
|
||||
|
||||
Windows 下的移动壳 smoke 通过 Node 启动从当前 workspace 包解析出的 Expo/EAS CLI,不直接 `spawnSync('npm.cmd')`;保留原配置与导出断言。具体入口和警告清理边界见本地开发运维文档。
|
||||
|
||||
AGC 的纯桌面/生产接入按模块排除测试编译,共享实现与受测入口保持可测试;拆分后同时检查普通目标和测试目标,并保留原有行为断言。命令注册与退出接线的源码检查跟随真实模块位置更新,不能因移动文件而漏检;不通过全局允许死代码或虚假调用消除告警。Rust 侧编译 warning 已纳入门禁:workspace 根 `[workspace.lints.rust] warnings = "deny"`,成员 crate 用 `[lints] workspace = true` 继承,被 `exclude` 或自带 manifest 的独立 crate 各自声明 `[lints.rust] warnings = "deny"`;能直接修的一律修掉、不用 `#[allow]` 掩盖,条件编译拆分不作为消警手段;例外清单与关闭条件见开发运维文档「Rust 编译告警门禁」。具体边界见开发运维文档“编译告警的保留边界与待优化项”。
|
||||
AGC 的纯桌面/生产接入按模块排除测试编译,共享实现与受测入口保持可测试;拆分后同时检查普通目标和测试目标,并保留原有行为断言。命令注册与退出接线的源码检查跟随真实模块位置更新,不能因移动文件而漏检;不通过全局允许死代码或虚假调用消除告警。Rust 侧编译 warning 已纳入门禁:workspace 根 `[workspace.lints.rust] warnings = "deny"`,成员 crate 用 `[lints] workspace = true` 继承,被 `exclude` 或自带 manifest 的独立 crate 各自声明 `[lints.rust] warnings = "deny"`;能直接修的一律修掉、不以 `#[allow]` 掩盖,条件编译拆分不作为消警手段;**唯一登记的模块级例外**是 AGC 壳 `agent/codex_provider`(休眠的 codex provider 子树:app-server + 内置 CLI 请求路径)顶部的 `#![allow(dead_code)]`,其作用域、理由、失效边界与退出条件见开发运维文档「Rust 编译告警门禁」的登记条。具体边界见开发运维文档“编译告警的保留边界与待优化项”。
|
||||
|
||||
提示词外置变更运行 `runtime_prompt_bundle_build` 与 `prompt_source_boundaries` 两个 Rust 集成测试,验证编译期文本、目录登记和源码边界;现有 `agc-rust-shard-1` 本地/CI 入口先执行这组检查,再运行分片单测。
|
||||
|
||||
|
||||
@@ -350,7 +350,7 @@ npm run check
|
||||
### 编译告警的保留边界与待优化项
|
||||
|
||||
- 设计会话的水合、重置和调试快进通过共享核心验证损坏会话隔离、不确定批次恢复和事件失败后的落盘状态;仅 Tauri 包装限定生产编译,资源与模型客户端仍在原校验阶段之后按需加载。旧 UI 绑定、合并及语义建议命令已随现役 UI 工作流替换而删除;分离恢复测试验证已完成的绑定和图片不被重新生成,不代表首次生成全链路已覆盖。音频派发测试验证使用派发时的 revision、保留提交身份,并在远程上下文失败时保持 Prepared 账本及项目内容不变。
|
||||
- AGC 纯生产接入按模块限定 `cfg(not(test))`:桌面启动、Tauri 命令注册和没有测试消费者的命令接入集中到对应生产模块;共享业务实现、被测试直接调用的入口和现有断言仍参与测试编译。拆分不改变命令名、注册集合、权限校验或启动/退出顺序,不新增 `#[allow(dead_code)]`、不制造假引用、不为消警删除测试;`#[allow]` 仅在确无本地修法且有明确关闭条件时,经登记后以最窄范围使用(挂在具体项上、带理由注释,不得模块级 `#![allow]`)。每批同时检查 AGC 普通目标和测试目标,源码结构检查跟随真实接线位置更新;不能用测试目标通过代替生产目标检查,也不以清零告警为由排除已有测试覆盖。拆分只用于把「仅生产入口」移出测试构建,不作为消除告警的手段:仅测试或平台分支需要的导入按真实使用边界条件编译,失去调用方的测试 helper 与多余重导出直接删除,能直接修掉的一律直接修。
|
||||
- AGC 纯生产接入按模块限定 `cfg(not(test))`:桌面启动、Tauri 命令注册和没有测试消费者的命令接入集中到对应生产模块;共享业务实现、被测试直接调用的入口和现有断言仍参与测试编译。拆分不改变命令名、注册集合、权限校验或启动/退出顺序,不新增 `#[allow(dead_code)]`、不制造假引用、不为消警删除测试;`#[allow]` 仅在确无本地修法且有明确关闭条件时,经登记后以最窄范围使用(挂在具体项上、带理由注释,不得模块级 `#![allow]`;**唯一登记的模块级例外**是 `agent/codex_provider`,见下文「已登记的 `#[allow(dead_code)]` 例外」)。每批同时检查 AGC 普通目标和测试目标,源码结构检查跟随真实接线位置更新;不能用测试目标通过代替生产目标检查,也不以清零告警为由排除已有测试覆盖。拆分只用于把「仅生产入口」移出测试构建,不作为消除告警的手段:仅测试或平台分支需要的导入按真实使用边界条件编译,失去调用方的测试 helper 与多余重导出直接删除,能直接修掉的一律直接修。
|
||||
- 插件/客户端扩展、模板库和预览的桌面命令与所属模块的共享实现分离:插件进程及权限逻辑、扩展仓库、模板访问授权/归档校验/建项、预览注册表与生命周期继续由原测试验证。模板命令和普通建项命令共用的 AppData 根目录选择接入随生产模块编译,用户所选目录的安全校验仍保留在共享实现中。
|
||||
- 编辑器适配器注册、随包资源定位和平台会话 fixture 加载属于桌面/Runner 启动接入,按生产模块编译;fixture 的发行版拒绝、路径边界、文件大小及凭据校验不得随拆分改变。配置 setup、Windows 提权 helper 的票据消费和 Runner bootId 初始化随其生产调用方限定范围,配置迁移、ACL 安全规则、平台身份/凭据轮换、编辑器执行回执及进程归属的已有测试继续编译。
|
||||
- 项目快照的周期调度、窗口事件、退出等待和桌面命令与共享同步核心分离;Analytics 的服务初始化、窗口/退出事件、上传定时启动和启动时补投同样属于生产接入。窗口登记状态机、快照索引与同步事务、埋点状态机、上传轮次和补投资格处理继续参与测试,不能用移除这些测试的方式消除告警。
|
||||
@@ -368,7 +368,12 @@ npm run check
|
||||
|
||||
### Rust 编译告警门禁
|
||||
|
||||
- 口径:全仓 Rust **first-party** 编译 warning 清零,能直接修的一律修掉,不用 `#[allow]` 掩盖;与既有文档口径冲突的优先修订口径(同批同步改文档);确实不能修的逐条登记原因与关闭条件。仍然禁止:新增 `#[allow(dead_code)]`、假引用、仅为消警删除测试;生成代码不手改(要改就改生成器)。
|
||||
- 口径:全仓 Rust **first-party** 编译 warning 清零,能直接修的一律修掉,不用 `#[allow]` 掩盖;与既有文档口径冲突的优先修订口径(同批同步改文档);确实不能修的逐条登记原因与关闭条件。仍然禁止:新增**未登记**的 `#[allow(dead_code)]`、假引用、仅为消警删除测试;生成代码不手改(要改就改生成器)。下面一条是当前**唯一**登记的例外。
|
||||
- **已登记的 `#[allow(dead_code)]` 例外(2026-10-07,PR #650「Rust 编译告警」)**:`apps/ai-game-creator-shell/src-tauri/src/agent/codex_provider/mod.rs` 顶部的 `#![allow(dead_code)]`,覆盖它用 `#[path]` 挂载的两棵子树——`app_server`(= `agent/codex_app_server/**`,含凭据、模型目录与 OAuth 交接)与 `cli`(= `agent/codex_cli.rs`,含 CLI 请求路径)。
|
||||
- **作用域**:只作用于该模块子树。其它 crate、其它目录、其它 lint(例如 `unused_imports`)与 CI 门禁都不受影响;`unused_imports` / `unused_variables` 等仍必须真修,`allow(dead_code)` 压不住它们(已实测:模块级 allow 下未使用的 `use` 依旧报错)。
|
||||
- **理由**:这棵子树在 AGC 交付口径下**休眠**——生产恒走平台会话 / DirectProject 路由,原生 app-server 与内置 CLI 的请求入口在 Windows 生产构建里没有调用方(生产口径会报 18 条 `never used`),而它们只在用例里被引用;同时上游 master 正在**活跃编辑**这些文件(错误正文贯通)。删除会与其在飞工作反复冲突,因此经决策改为「不删除 + 限定范围 allow」,本条的模块级 `#![allow]` 即该决策的落点。
|
||||
- **失效边界(代价)**:该子树内**今后新增的 `dead_code` 不会再被任何机器检查发现**。注意 AGC 壳的门禁只在 Windows 生产口径生效、CI 也不跑 clippy,所以这道口子没有兜底;`cargo check` 仍会报宏展开类提示(如 ts-rs 的 `failed to parse serde attribute`),那不属于 lint。
|
||||
- **退出条件**:该子树被重新启用(恢复个人 Codex OAuth 登录态或原生 app-server 路径),或确定整体退役并删除时,**必须一并移除**这道 `#![allow(dead_code)]`,并删除本条登记。
|
||||
- 落法:workspace 根写 `[workspace.lints.rust] warnings = "deny"`,成员 crate 用 `[lints] workspace = true` 继承;被 `exclude` 或自带 manifest 的独立 crate 各自声明 `[lints.rust] warnings = "deny"`。
|
||||
- 依据:cargo 只对**目标 crate** 传 `--deny=warnings`,**不改 `RUSTFLAGS`**,因此不会让 CI 的 Rust 编译缓存整体失效(已用一个最小 crate 实证)。缓存边界见本节「Rust 测试组的隔离编译缓存」。
|
||||
- 覆盖范围:`server-rs` workspace(成员见 `server-rs/Cargo.toml` 的 `members`)、4 个被 `exclude` 的独立 crate(`agent-runtime-core`、`agent-runtime-orchestration`、`editor-adapter-api`、`platform-agent`)、`apps/desktop-shell/src-tauri`、三个编辑器 native bridge;AGC 壳(`apps/ai-game-creator-shell/src-tauri`)已于 2026-10-06 由起始基线 613 条清零,并按下面特例启用生产口径门禁。
|
||||
|
||||
Reference in New Issue
Block a user