Files
AirCoding/AirPlan/docs/architecture/Qwen3.7开发阶段审计.md
AirCoding 79d776fdc9 docs(audit): add Qwen3.7 audit + multi-model cross-audit report
- Qwen3.7开发阶段审计.md: 4th independent audit (84 findings, 31 critical)
- 开发阶段多模型交叉审计报告.md: meta-audit combining DeepSeek/Opus/MiniMax-M3/Qwen3.7

Cross-audit consensus:
- Overall rating: C (skeleton B / execution-path D)
- Not releasable: all 4 models agree
- 15 high-confidence blockers (>=3 models confirm)
- INV compliance: PASS 2 / partial 3 / FAIL 6 (INV-1/2/3 all fail)
- Weighted spec consistency ~52%
- 4/4 unanimous blockers: command injection x3, project DB schema, MainAgent state machine, TUI no rendering

Unified remediation roadmap: Phase A (security red lines) -> B (link connectivity) -> C (spec alignment) -> D (completeness)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-03 11:17:54 +08:00

607 lines
28 KiB
Markdown
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 rendererProjectionStore.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<ProviderSupports>` | provider.ts:146 |
| `ProviderManager` | (额外方法) | 不存在 | `load_config(): Promise<void>` | 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 工具命名空间验证
设计要求 `<capability-id>.<tool-name>` 命名空间,保留内置命名空间。`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<T>` 信封:
| 角色 | 设计要求 | 实际返回 |
|---|---|---|
| Executor | `WorkerResult<ExecutorResult>` (12 字段) | `{status, changes?, verification?, error?}` (4 字段) |
| Reviewer | `WorkerResult<ReviewerResult>` + `verdict` 枚举 | `{status, findings[], summary}` |
| Debugger | `WorkerResult<DebuggerResult>` + `BlockerReport?` | `{status, root_cause, fix_applied?, evidence_refs}` |
| Compactor | `WorkerResult<CompactorResult>` + `summary_id` | `{status, summary_content, tokens_freed}` |
| ExperienceMiner | `WorkerResult<ExperienceMinerResult>` + `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 + Turborepo7 个包分层清晰
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<T>` 信封
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 独立生成,可与其他模型审计报告进行交叉比对。*