# Qwen3.7-Max 开发阶段全量审计报告 **审计模型:** Qwen3.7-Max **审计日期:** 2026-06-03 **审计范围:** V1.0.0 Alpha 全部代码实现 vs 原始需求/基线/设计文档/UML类图 **审计分支:** GLM5-Achieve **代码规模:** 7 个包, 137 个 TypeScript/TSX 源文件, 4 个根配置文件 --- ## 0. 审计总览 | 严重程度 | 数量 | 说明 | |---|---|---| | CRITICAL | 31 | 架构性缺陷,阻塞核心不变量或导致运行时崩溃 | | HIGH | 22 | 功能性缺陷,子系统与设计断连或关键逻辑缺失 | | MEDIUM | 19 | 部分实现偏差,影响完整性但不阻塞骨架 | | LOW | 12 | 命名/结构偏差、多余类型、文档注释问题 | **总体评估:** 代码骨架覆盖了 V1.0.0 Alpha 的 8 个阶段目标,monorepo 结构、包分层、SQLite schema、事件注册表均存在。但实现与设计文档之间存在大量结构性偏差,核心子系统(Scheduler 状态机、IPC 协议、安全模型、上下文装配)与冻结基线的匹配度不足 40%。当前代码属于 **Phase 0-1 骨架 + Phase 2-7 桩代码** 状态,多数子系统有类无逻辑或有逻辑但语义不匹配。 --- ## 1. 需求覆盖度审计 (requirements.md → 代码) ### 1.1 功能需求 (FR) 覆盖矩阵 | FR ID | 需求 | 覆盖状态 | 说明 | |---|---|---|---| | FR-001 | CLI 启动与项目初始化 | PARTIAL | CLI 命令齐全 (11 个),但 `init` 不创建 17 个规范子目录 | | FR-002 | 项目本地状态 `.air/` | PARTIAL | ProjectInitializer 存在,但 `.air/shared/plan/docs/` 等子目录缺失 | | FR-003 | 会话持久化 SQLite | PASS | 17 表、38 索引、WAL/NORMAL/FK-OFF 全部正确 | | FR-004 | 事件驱动运行时 | PARTIAL | EventStore/EventBus/EventIngestor 存在,但事务边界违反 (F-04) | | FR-005 | 主代理对话 | PARTIAL | MainAgent 存在但缺 7/13 个状态,分类用正则而非 LLM | | FR-006 | 架构设计师 | PARTIAL | ArchitectureDesigner 存在但不产出 BlockerReport,不发事件 | | FR-007 | 调度器与 TaskGraph | FAIL | Scheduler 缺 BLOCKED/CANCELLED 状态,3 个方法缺失,接口不匹配 | | FR-008 | 独立 Worker 进程 | PARTIAL | 5 个角色均存在,但 WorkerResult 形状不匹配,IPC 协议偏差大 | | FR-009 | Claude Code 级执行原语 | FAIL | read-before-edit 未强制,工具 schema 字段名大量偏差 | | FR-010 | ToolRegistry 与内置工具 | FAIL | 28 个 MVP 工具中 16 个缺失 | | FR-011 | 权限与安全模型 | FAIL | 0/10 cut line 项完全满足;profile/action/grant_scope 类型不匹配 | | FR-012 | 插件与能力基础 | PARTIAL | CapabilityRegistry 存在但 manifest schema、trust level、依赖模型全部偏差 | | FR-013 | Provider 层 | PARTIAL | AnthropicAdapter 和 OpenAICompatibleAdapter 存在,能力矩阵仅实现 ~20% | | FR-014 | 上下文装配与压缩 | FAIL | L6-L9 层缺失,输出非 Anthropic canonical 格式,无冲突检测 | | FR-015 | 工件与证据管理 | PARTIAL | ArtifactStore 正确实现 temp-rename 流程,EvidenceStore 用内存 map | | FR-016 | TUI 与 HUD | PARTIAL | 9 个组件齐全,无 OpenTUI renderer,ProjectionStore.rebuild() 为桩 | | FR-017 | 完整 C++ 开发工作流 | FAIL | CppToolRegistrar 注册工具但 6 个 cpp.* 工具未注册到 ToolRegistry | | FR-018 | Doctor | PARTIAL | DoctorService 存在但无 provider 检查和平台检测 | | FR-019 | 日志与诊断 | PARTIAL | Logger 存在但与 DeveloperLogEncryptor 完全断连 | | FR-020 | 发布门禁 | FAIL | release 命令为桩,无 fixture 项目 | ### 1.2 非功能需求 (NFR) 覆盖矩阵 | NFR ID | 需求 | 覆盖状态 | 说明 | |---|---|---|---| | NFR-001 | 本地优先 | PASS | 所有状态在 `.air/` 下 | | NFR-002 | 可恢复性 | FAIL | Recovery 的 scanOrphanReferences 和 checkPidLiveness 均为桩 | | NFR-003 | 可扩展性 | PARTIAL | toolchain-* 包模式存在但能力注册不完整 | | NFR-004 | Provider 灵活性 | PARTIAL | 适配器模式存在但能力矩阵验证不完整 | | NFR-005 | UI 响应性 | PASS | ProjectionStore 架构正确隔离了 UI 与 DB | | NFR-006 | 基于证据的完成 | FAIL | 完成门禁未强制,验证桩代码 | | NFR-007 | Linux 优先 | PASS | 代码无平台特定障碍 | | NFR-008 | 安全边界保持 | FAIL | PathClassifier 类别错误,无 credential_store 检测 | --- ## 2. 契约包审计 (packages/contracts vs interface-contracts-v1.md) ### 2.1 缺失的契约接口 (15 个) | # | 契约名 | 设计位置 | 严重程度 | |---|---|---|---| | 1 | `EventBus` | SS7 | CRITICAL | | 2 | `EventStore` | SS7 | CRITICAL | | 3 | `EventIngestor` | SS7 | CRITICAL | | 4 | `ContextAssembler` | SS16 | CRITICAL | | 5 | `EventSchemaRegistry` | SS7 | HIGH | | 6 | `EventAppendOptions` | SS7 | HIGH | | 7 | `SessionRecord` | SS6 | HIGH | | 8 | `MessageRecord` | SS6 | HIGH | | 9 | `PersistedEventRecord` | SS6 | HIGH | | 10 | `PersistedEventInsert` | SS6 | HIGH | | 11 | `EventRepository` | SS6 | HIGH | | 12 | `ContextAssembleInput` | SS16 | HIGH | | 13 | `AssembledContext` | SS16 | HIGH | | 14 | `CompactionPolicy` | SS16 | HIGH | | 15 | `CompactionResult` | SS16 | HIGH | ### 2.2 字段级偏差 | 契约 | 字段 | 设计 | 代码 | 文件:行 | |---|---|---|---|---| | `ProviderCapabilityMatrix` | `supports` | `JsonObject` | `ProviderSupports` (强类型) | provider.ts:70 | | `ProviderCapabilityMatrix` | `conversion` | `JsonObject` | `ProviderConversion` (强类型) | provider.ts:71 | | `ProviderCapabilityMatrix` | (额外字段) | 不存在 | `display_name?`, `limits?`, `default_use?`, `notes?` | provider.ts:64,72-74 | | `ModelRequirement` | `required` | `JsonObject` | `Partial` | provider.ts:146 | | `ProviderManager` | (额外方法) | 不存在 | `load_config(): Promise` | provider.ts:277 | | `DoctorIssueSeverity` | (缺失值) | 包含 `"error"` | 缺少 `"error"` | platform.ts:41 | | `TaskGraph` | `dependencies` | `TaskDependencyRecord[]` | 内联结构等价物 | task.ts:147 | | `PromptLayerLoader` | 参数类型 | `ProjectContext`, `TaskSpec` | 内联结构子集 | runtime.ts:94-104 | ### 2.3 多余契约 (需 ADR) `ProviderIdentity`, `ProviderConversionReport`, `ProviderLimits`, `ProviderDefaultUse`, `DoctorIssue`, `DoctorIssueCategory`, `ToolErrorOutput` (来自 error-taxonomy-v1.md 但未实现) 等均为代码中新增但设计文档中不存在的契约。 --- ## 3. 存储层审计 (packages/runtime/src/storage/ vs db-schema-v1.md) ### 3.1 会话 DB Schema: 完整 (PASS) 17 个表、38 个索引、3 个 PRAGMA、5 个 schema_meta 种子键全部正确匹配。 ### 3.2 CRITICAL 发现 **F-01: DebugKnowledgeStore schema 完全不匹配 db-schema-v1.md §20.1** - DB 路径: 代码 `.air/shared/debug-records.db` vs 设计 `.air/local/debug-records.db` - 7 个列名/语义不匹配: `failure_signature` → `signature`, `fix_ref` → `fix_applied`, 缺失 `summary`/`evidence_json`/`verification_json`/`updated_at`/`metadata_json` - 多余列: `session_id`, `error_kind`, `status`, `resolved_at` - 索引名不匹配 **F-02: LearnedMemoryStore schema 完全不匹配 db-schema-v1.md §20.2** - DB 路径: 代码 `.air/shared/learned-memory.db` vs 设计 `.air/local/learned-memory.db` - 表名: 代码 `learned_memory` vs 设计 `learned_memories` - 6 个列名/语义不匹配 - 枚举值完全不匹配: 设计 `project_rule|toolchain_rule|skill_update|debug_experience` vs 代码 `pattern|rule|skill|experience` - 状态枚举不匹配: 设计 `candidate|promoted|archived|rejected` vs 代码 `draft|promoted|archived` **F-04: EventStore.project() 未将事务句柄传递给仓库** - `append()` 正确开启事务,但 `project()` 方法接收 `_tx` 参数后从不传给仓库方法 - 违反 db-schema-v1.md §1 规则 8: "持久事件插入与域表更新必须在同一事务中" - 影响: 域表写入失败时事件行仍会提交,造成不一致状态 **F-05: EventStore 写入无效的 workspace status 值** - `workspace.created` 写入 `status: 'created'`,但有效枚举为 `active|merged|conflicted|abandoned|cleaned` - `workspace.merge.started` 写入 `status: 'merging'`,不在枚举中 - 导致 `assertEnumValues` 抛出 AirError,**首次 workspace 创建即崩溃** **F-06: TaskAttemptRepository.update() 列映射 bug** - 检查 `patch.failure_signature` 但更新 `failure_summary` 列 - 导致 `failure_signature` 永远不会被更新,`failure_summary` 被静默覆盖 **F-07: EventRepository 路由前缀过滤器使用错误分隔符** - 过滤用 `.` 拼接,但存储用 `/` 分隔 - 所有路由前缀查询返回零结果 ### 3.3 HIGH 发现 **F-08: Recovery.scanOrphanReferences() 为桩** — FK-off 孤儿扫描未实现 **F-09: Recovery.checkPidLiveness() 为桩** — PID 存活检查未实现 **F-10: Workspace GC SQL 逻辑错误** — AND/OR 缺少括号,`session_id` 过滤被绕过 **F-11: EvidenceStore 使用内存 Map** — 重启后证据查询为空 **F-12: SessionManager.close_session() 不刷新 ui_state** — 违反退出时刷新不变量 ### 3.4 MEDIUM 发现 **F-13:** `command.completed` 投影传递 `diagnostic_ids` 但 `command_runs` 表无此列 **F-14:** EventStore 单例用空 `DatabaseHandle` 初始化 **F-15/F-16:** 多个仓库在 insert 时硬编码 status,与 EventStore 传递值冲突 --- ## 4. 安全模型审计 (packages/runtime/src/security/ vs security-model-v1.md) ### 4.1 路径分类器 (CRITICAL 偏差) | 设计 PathRiskCategory | 实现 | 状态 | |---|---|---| | `project` | `project_source`, `project_config` | 拆分为二 | | `project_air_shared` | — | **缺失** | | `project_air_local` | — | **缺失** | | `credential_store` | — | **完全缺失** (`~/.ssh`, `~/.gnupg` 等均不检测) | | `unknown` | — | **缺失**; 默认为 `project_config` (过于宽松) | ### 4.2 命令风险分析器 (CRITICAL 偏差) | 设计 CommandRisk | 实现 | 状态 | |---|---|---| | `build_or_test` | — | **缺失** | | `dependency_install` | — | **缺失** | | `privilege_escalation` | — | **缺失** | | `unknown` | — | **缺失** | **运行时 Bug:** `'sudo_likely' in trimmed` — `in` 操作符在字符串上检查 String 原型属性,永远为 `false`。 ### 4.3 权限引擎 (CRITICAL 偏差) | 设计要素 | 实现 | 状态 | |---|---|---| | 4 个 Profile (`low/normal/high/developer`) | 按 agent 类型的 profile | **完全不匹配** | | 6 个 Action (`allow/deny/ask_user/block/refuse/announce_then_run`) | 7 个 Action (3 个不同) | **缺失 `block/refuse/announce_then_run`** | | `PermissionGrantScope` (5 级) | **完全缺失** | 无授权范围追踪 | | `risk_level` 字段 | **缺失** | | | `backup_required` 字段 | **缺失** | 无写入前备份逻辑 | | 策略违规 `refuse` | **缺失** | 无拒绝检测 | **Cut line 合规: 0/10 项完全满足, 4 项部分满足, 6 项不满足。** ### 4.4 SecretRedactor: 良好但有缺口 14 个模式类别覆盖良好。缺失: `.env` 文件路径级检测、云凭证目录模式、`auth_ref` 引用系统、Provider 适配器集成。 --- ## 5. 工具注册表审计 (ToolRegistry vs tool-registry-v1.md) ### 5.1 MVP 工具缺失 (16/28 缺失) | 缺失工具 | 类别 | |---|---| | `fs.stat` | 文件系统 | | `process.kill` | 进程 | | `git.worktree.create` | Git | | `git.merge_workspace` | Git | | `project.scan` | 项目 | | `project.profile.write` | 项目 | | `cpp.detect` | C++ 工具链 | | `cpp.cmake.configure` | C++ 工具链 | | `cpp.build` | C++ 工具链 | | `cpp.test` | C++ 工具链 | | `cpp.static.cppcheck` | C++ 工具链 | | `cpp.clangd.query` | C++ 工具链 | | `debug.run` | 调试 | | `debug.parse_logs` | 调试 | | `gui.screenshot` | GUI 证据 | | `network.capture` | 网络证据 | ### 5.2 多余工具 (10 个不在 MVP 索引中) `git.commit`, `git.branch`, `project.rules`, `project.context`, `artifact.read`, `context.compact`, `permission.check`, `permission.prompt`, `doctor.check`, `doctor.fix` ### 5.3 工具 Schema 偏差 (主要工具) | 工具 | 设计字段 | 代码字段 | 偏差 | |---|---|---|---| | `fs.edit` | `old_string`, `new_string`, `expected_existing_sha256?` | `find`, `replace` | 字段名全部不同,缺安全校验和 | | `shell.run` | `cwd` (required), `timeout_ms?`, `stdin?`, `capture_mode?`, `purpose?` | `workdir` (optional), `timeout?`, `env?` | 名称/必需性/字段均不匹配 | | `artifact.create` | `type`, `original_name?`, `content?`, `source_path?`, `associated_entity_type?`, `associated_entity_id?`, `metadata?` | `name`, `type`, `content`, `metadata` | 缺 5 个字段 | | `context.assemble` | `purpose` (required enum), `refs?`, `token_budget?` | `max_tokens?` | 缺必需 `purpose` 枚举和 `refs` | ### 5.4 ToolRegistry 运行时 Bug **CRITICAL:** `this.downgrade_to_readonly()` 和 `this.apply_sandbox_restrictions()` 在模块作用域 `ACTION_BRANCHES` 对象中被调用,`this` 不是 ToolRegistry 实例,运行时将抛出异常。 --- ## 6. 能力系统审计 (CapabilityRegistry vs capability-trust-v1.md) ### 6.1 Manifest Schema (CRITICAL 偏差) | 设计字段 | 实现 | 状态 | |---|---|---| | `capability_id` | `name` | 重命名 | | `display_name` | — | **缺失** | | `source` (CapabilitySource) | — | **完全缺失** | | `trust_level` (5 级) | `trust_level` (3 级) | **不匹配**: 设计 `built_in/project_local/user_installed/verified_publisher/untrusted` vs 代码 `core/trusted/untrusted` | | `publisher?` | — | **缺失** | | `events?` | — | **缺失** | | `config_schema?` | — | **缺失** | | `entrypoint?` | — | **缺失** | ### 6.2 依赖模型 设计: 富 `CapabilityDependency` 对象 (7 种 kind、检测器、安装器策略)。 实现: 简单 `string[]`。所有结构信息丢失。 ### 6.3 工具命名空间验证 设计要求 `.` 命名空间,保留内置命名空间。`CapabilityManifestValidator` 无命名空间验证。 --- ## 7. 调度器审计 (Scheduler vs scheduler-state-machine-v1.md) ### 7.1 缺失状态 (CRITICAL) | 设计状态 | 实现 | 状态 | |---|---|---| | `BLOCKED` | — | **缺失** | | `CANCELLED` | — | **缺失** | | `TERMINATED` | — | **多余** (非设计规范) | ### 7.2 Scheduler 接口不匹配 | 设计方法 | 实现 | 状态 | |---|---|---| | `create_tasks(session_id, specs: TaskSpec[])` | `create_tasks({id,type,title,depends_on}[])` | 签名不匹配,缺 `session_id` | | `add_dependency(session_id, task_id, dep)` | — | **完全缺失** | | `load_graph(session_id)` | — | **完全缺失** | | `run_until_idle(session_id): SchedulerRunResult` | `run_until_idle(): SchedulerState` | 返回值类型不匹配 | | `cancel_task(task_id, reason)` | — | **完全缺失** | ### 7.3 状态逻辑空洞 | 状态 | 设计要求 | 实现 | |---|---|---| | DISPATCHING | 4 个动作 (workspace, events, control message, attempt) | 仅标记 running | | COLLECTING_RESULTS | 5 个动作 (validate, persist, terminal, classify, unblock) | 直通到 MERGING | | MERGING | 策略选择 (main/worktree/isolated_copy) | 直通到 REVIEWING_WAVE | | REVIEWING_WAVE | 调度 review 任务 | 直通到 REPAIRING_OR_CONTINUING | ### 7.4 TaskGraph 偏差 - 缺失 `serialization` 依赖类型 (4 种中缺 1 种) - `soft` 依赖对调度无任何影响 - 冲突依赖不阻止同波次并发 - TaskNode 缺少 `spec`, `assigned_agent_id`, `retry_count`, `workspace_id` ### 7.5 WavePlanner 偏差 - 所有任务分配到 `'default'` write area — write-area 串行化无效 - `wave_id` 为 `number` (Date.now()) 而非设计要求的 `string` - 无 `workspace_assignments`, `model_assignments`, `reason` 字段 - 8 条波次规划规则中仅 1 条部分实现 ### 7.6 RetryPlanner: 死代码 逻辑正确 (重复失败签名升级),但从未被 Scheduler 调用。 --- ## 8. IPC 协议审计 (WorkerProtocol vs interface-contracts-v1.md §10) ### 8.1 缺失 IPC 类型 | 设计 IpcKind | 实现 | 状态 | |---|---|---| | `control` | — | **缺失** (个别控制消息存在但无 `control` 信封) | | `log` | — | **完全缺失** | | `tool.stream` | — | **完全缺失** | | `protocol.error` | — | **缺失** (用非标准 `worker.error` 替代) | ### 8.2 信封形状不匹配 设计 `IpcEnvelope` 有 9 个字段: `id, direction, kind, timestamp, session_id, agent_id, correlation_id?, protocol_version, payload` 实现 `WorkerMessage` 有 5 个字段: `id, type, direction, timestamp, payload` **缺失:** `kind`, `session_id`, `agent_id`, `correlation_id`, `protocol_version` ### 8.3 握手顺序反转 设计: 父进程先发 `agent.start`,worker 回 `worker.ready` 实现: worker 先发 `worker.ready`,父进程后发 `agent.start` — **顺序相反** --- ## 9. 主代理状态机审计 (MainAgent vs main-agent-state-machine.md) ### 9.1 缺失状态 (7/13) | 设计状态 | 实现 | 状态 | |---|---|---| | `CLASSIFYING` | — | **缺失** | | `SCHEDULING` | — | **缺失** | | `ARCHITECTURE_DESIGNING` | — | **缺失** | | `CONFIRMING` | — | **缺失** (用 `AWAITING_CONFIRMATION` 替代,语义不同) | | `EXECUTING` | — | **缺失** | | `INTERRUPTING` | — | **缺失** | | `ARCHITECTURE_REVISING` | — | **缺失** | ### 9.2 其他偏差 - 分类用正则而非 LLM - Direct Mode `/direct`/`/done` 不完整 - SUMMARIZING 不触发 ExperienceMiner - 无 `requirement.changed` 处理 --- ## 10. Worker 角色审计 (packages/workers/ vs 设计) ### 10.1 结果形状不匹配 所有 5 个角色均返回局部结果类型而非设计要求的 `WorkerResult` 信封: | 角色 | 设计要求 | 实际返回 | |---|---|---| | Executor | `WorkerResult` (12 字段) | `{status, changes?, verification?, error?}` (4 字段) | | Reviewer | `WorkerResult` + `verdict` 枚举 | `{status, findings[], summary}` | | Debugger | `WorkerResult` + `BlockerReport?` | `{status, root_cause, fix_applied?, evidence_refs}` | | Compactor | `WorkerResult` + `summary_id` | `{status, summary_content, tokens_freed}` | | ExperienceMiner | `WorkerResult` + `MemoryCandidate[]` | `{status, entries[], summary}` | ### 10.2 执行纪律缺失 - read-before-edit 未强制 - 完成门禁 (verification pass or explicit skip) 未强制 - DebuggerRole 不查 DebugKnowledgeStore - ExperienceMiner 触发路径未接入 Scheduler --- ## 11. LLM Provider 层审计 (packages/llm/ vs provider-capability-matrix-v1.md) ### 11.1 能力矩阵覆盖度: ~20% 缺失: - `quality_tier`, `cost_tier` 字段未在矩阵中使用 - 17 个 `supports` 字段中仅 5 个实现 - 整个 `conversion` 块、`limits` 块、`default_use` 块缺失 - `ProviderKind` 分类未使用 - Fallback 策略、调度器分配模式缺失 ### 11.2 Provider 配置安全 代码直接存储 `api_key` 原始值,设计要求 `auth_ref` 间接引用,密钥永不进入 session DB/events/artifacts。 ### 11.3 LLM 包未引用 contracts `packages/llm` 在本地定义所有类型而非从 `packages/contracts` 导入,违反了基线 §4 依赖方向规则。 --- ## 12. 上下文装配审计 (ContextAssembler vs prompt-layering-v1.md) ### 12.1 层级缺失 (4/10) | 层 | 设计 | 实现 | 状态 | |---|---|---|---| | L0 System | 系统身份 | 硬编码字符串 | PARTIAL | | L1 Capability | 能力声明 | 存在 | PASS | | L2 Safety | 安全规则 | 硬编码 | PARTIAL | | L3 Project Rules | 项目规则 | 存在但路径错误 | PARTIAL | | L4 Architecture | 架构上下文 | 存在 | PASS | | L5 Plan/Task | 计划/任务 | 存在 | PASS | | L6 Evidence | 证据上下文 | — | **缺失** (TODO) | | L7 Conversation | 对话历史 | — | **缺失** (TODO) | | L8 Tool Output | 工具输出 | — | **缺失** (TODO) | | L9 Immediate | 即时指令 | — | **缺失** (TODO) | ### 12.2 输出格式 设计要求输出 Anthropic canonical messages。实现输出自定义 `PromptLayer[]` 结构,未转换为 canonical 格式。 ### 12.3 冲突检测: 缺失 设计要求层间冲突报告 (如安全规则与项目规则矛盾)。实现无任何冲突检测。 ### 12.4 CompactionPolicy: 无 copy-on-write 设计要求 copy-on-write 压缩,保留回溯引用。实现仅有阈值检查,无工件持久化,无回溯保留。 --- ## 13. TUI/HUD 审计 (packages/tui/ vs 设计) ### 13.1 组件覆盖: 完整 9 个视图组件全部存在: SessionView, TaskListView, AgentStatusView, ToolRunView, DiffView, PermissionPrompt, BlockerReport, HudView + TuiApp。 ### 13.2 缺口 - 无 OpenTUI renderer 集成 (组件定义但无渲染引擎) - 无对话消息渲染表面 - PermissionPrompt/BlockerReport 无路由连接 - ProjectionStore.rebuild() 为桩 — 仅处理 5 种事件类型 - HUD 预设 (Full/Essential/Minimal) 未实现 --- ## 14. C++ 工具链审计 (packages/toolchain-cpp/ vs FR-017) ### 14.1 组件存在但断连 - `CppProjectDetector`, `CppBuilder`, `CMakeConfigurator`, `CppTestRunner`, `DiagnosticParser`, `ClangdClient`, `CppcheckRunner` 均存在 - `CppToolRegistrar` 注册了工具定义但 **未注册到 ToolRegistry** (与 FR-010 的 16 个缺失工具一致) - `ClangdClient` 方法全部为桩 - 源文件发现返回空数组 ### 14.2 安全风险 `CppBuilder.build()` 和 `CppTestRunner.run()` 使用 `execSync` 字符串拼接,存在命令注入风险。 --- ## 15. CLI 命令审计 (packages/cli/ vs 设计) ### 15.1 命令覆盖: 完整 (PASS) 所有 11 个必需命令存在: `init`, `run`, `doctor`, `provider`, `resume`, `compact`, `history`, `session`, `restore`, `e2e`, `release`。 ### 15.2 init 命令偏差 - 不创建 17 个规范 `.air/` 子目录 - 直接写文件系统,绕过 ToolRegistry/PermissionEngine (违反 INV-3) ### 15.3 额外包 代码中存在 `packages/workers/` 包,不在基线 §4 的规范包列表中。这是一个合理的分离 (worker 入口点独立于 runtime),但需要 ADR 记录。 --- ## 16. 运行时语义合规审计 (vs runtime-semantics-v1.md) | 不变量 | 合规 | 说明 | |---|---|---| | INV-1: 持久事件+域表同事务 | FAIL | F-04: EventStore.project() 不传事务 | | INV-2: EventIngestor 不创建调度任务 | PASS | | | INV-3: 副作用经 ToolRegistry/PermissionEngine | FAIL | init 直接写 FS | | INV-4: EventBus handler 错误不中断订阅 | PASS | | | INV-5: 临时事件合并 | PASS | 5 秒窗口正确 | | INV-6: 工件 temp-rename 原子写 | PASS | | | INV-7: Workspace GC 策略 | PARTIAL | GC 逻辑正确但 SQL 有 bug (F-10) | | INV-8: Agent heartbeat 持久化 | FAIL | 仅内存,不写 DB | | INV-9: ExperienceMiner 4 种触发路径 | FAIL | 0 种实现 | | INV-10: read-before-edit 强制 | FAIL | 未实现 | | INV-11: 完成门禁强制 | FAIL | 未实现 | --- ## 17. 正面发现 (代码与设计匹配的部分) 1. **Monorepo 结构正确:** Bun workspace + Turborepo,7 个包分层清晰 2. **SQLite Schema 完整:** 17 表、38 索引、PRAGMA、schema_meta 完全匹配 3. **事件注册表完整:** 54 个持久事件 + 7 个临时事件全部注册 4. **Enum 验证完整:** 18 个闭枚举全部覆盖 5. **ArtifactStore 原子写入正确:** temp → sha256 → rename → event 流程完整 6. **EventBus 错误隔离正确:** handler 异常不中断订阅 7. **临时事件合并正确:** 7 种临时事件类型全部识别,5 秒窗口 8. **EventIngestor 分离正确:** 持久/临时路径分离,不创建调度任务 9. **SecretRedactor 覆盖良好:** 14 种凭证模式 10. **CLI 命令完整:** 11/11 必需命令 11. **WorkspaceManager GC 保留策略正确:** merged 7 天, abandoned 3 天 12. **Heartbeat 合并窗口正确:** 5 秒 13. **RetryPlanner 失败签名升级逻辑正确:** (但未接入) 14. **所有 16 个仓库 CRUD 操作完整:** get/insert/update + 领域查询方法 --- ## 18. 修复优先级建议 ### P0 (立即修复 — 阻塞核心不变量) 1. **F-04: EventStore 事务边界** — 将 `_tx` 传递给所有仓库方法 2. **F-05: Workspace status 枚举值** — `'created'` → `'active'`, `'merging'` → metadata 3. **F-06: TaskAttemptRepository 列映射** — `failure_summary` → `failure_signature` 4. **F-07: EventRepository 路由分隔符** — `.` → `/` 5. **ToolRegistry `this` 绑定 bug** — 重构 ACTION_BRANCHES 为方法调用 6. **CommandRiskAnalyzer `in` 操作符 bug** — `'sudo_likely' in trimmed` → `trimmed.includes('sudo')` ### P1 (短期修复 — 功能性缺陷) 7. **F-01/F-02: 项目级 DB schema** — 对齐 DebugKnowledgeStore 和 LearnedMemoryStore 8. **补全 15 个缺失契约接口** — EventBus/EventStore/EventIngestor/ContextAssembler 等 9. **PathClassifier 类别对齐** — 添加 `credential_store`, `project_air_shared/local`, `unknown` 10. **PermissionEngine 类型对齐** — 4 profile, 6 action, grant scope 11. **Scheduler 状态机补全** — BLOCKED/CANCELLED 状态, cancel_task, load_graph 12. **IPC 信封补全** — 添加 5 个缺失字段, 修正握手顺序 13. **注册 16 个缺失 MVP 工具** — fs.stat, process.kill, cpp.*, debug.*, gui.*, network.* 14. **Main Agent 状态机补全** — 7 个缺失状态 ### P2 (中期修复 — 完整性) 15. **ContextAssembler L6-L9** — 补全 4 个缺失层 16. **Provider 能力矩阵** — 补全 ~80% 缺失字段 17. **Worker 结果形状对齐** — 统一为 `WorkerResult` 信封 18. **Capability manifest 对齐** — 5 级 trust, 富依赖模型, 命名空间验证 19. **Recovery 实现** — 孤儿扫描、PID 存活检查 20. **EvidenceStore 持久化** — 从 EvidenceRepository 查询而非内存 Map ### P3 (长期 — 质量与文档) 21. **ADR 记录** — workers 包、Provider 类型强化、Doctor 扩展等设计偏差 22. **DoctorIssueSeverity** — 添加缺失的 `"error"` 值 23. **工具 Schema 对齐** — fs.edit, shell.run, artifact.create 等字段名/类型 24. **Scope Escalation 实现** — ScopeImpactLevel, BlockerReport 集成 25. **TUI renderer 集成** — OpenTUI/Solid 渲染引擎接入 --- ## 19. 与设计文档冻结基线的一致性总结 | 基线文档 | 一致性 | 主要偏差 | |---|---|---| | interface-contracts-v1.md | 65% | 15 个契约缺失,Provider 字段偏差 | | db-schema-v1.md | 85% | 2 个项目级 DB 完全不匹配,事务边界违反 | | event-registry-v1.md | 95% | 事件计数注释偏差 1,其余完整 | | tool-registry-v1.md | 40% | 16/28 MVP 工具缺失,schema 字段名偏差 | | security-model-v1.md | 20% | 分类器/权限/Profile 类型全面偏差 | | capability-trust-v1.md | 30% | Manifest schema、trust level、依赖模型不匹配 | | scheduler-state-machine-v1.md | 35% | 缺 2 状态、3 方法、3 空状态、依赖类型缺失 | | main-agent-state-machine.md | 45% | 缺 7/13 状态 | | prompt-layering-v1.md | 50% | L6-L9 缺失,输出格式不匹配 | | provider-capability-matrix-v1.md | 20% | 能力矩阵仅实现 ~20% | | runtime-semantics-v1.md | 40% | 11 个不变量中 5 个违反 | | error-taxonomy-v1.md | 90% | ErrorKind/AirError 匹配,ToolErrorOutput 缺失 | | artifact-naming-v1.md | 80% | ArtifactStore 路径正确,命名规范部分偏差 | | scope-escalation-v1.md | 10% | ScopeImpactLevel/BlockerReport 未实现 | | cross-platform-matrix-v1.md | 80% | 平台检测类型存在但 Doctor 未使用 | | C4 module.md | 85% | 包结构匹配,workers 包为额外添加 | | C4 code-view.md | 90% | contracts 文件结构匹配 | | solution-architecture.md | 55% | 分层架构存在,Agent 交互链不完整 | | system-overview-design.md | 50% | 子系统存在但连接断 | | system-detailed-design.md | 45% | 类存在但方法签名/状态机偏差大 | --- ## 20. 结论 当前 V1.0.0 Alpha 代码实现处于 **骨架基本就位、语义大面积偏差** 的状态。monorepo 结构、SQLite schema、事件注册表等基础设施质量较高,但核心运行时子系统(Scheduler、IPC、Security、Context)与冻结基线之间存在结构性分歧。 **最高风险项** 是 EventStore 事务边界违反 (F-04),它会导致每个持久事件的域表更新在事务外执行,破坏数据一致性不变量。其次是 workspace status 枚举错误 (F-05) 会导致首次 workspace 创建即崩溃。 建议在继续 Phase 2-8 实现之前,先完成 P0 和 P1 修复,确保核心不变量和接口契约与设计文档对齐。 --- *审计完毕。本报告由 Qwen3.7-Max 独立生成,可与其他模型审计报告进行交叉比对。*