- 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>
607 lines
28 KiB
Markdown
Executable File
607 lines
28 KiB
Markdown
Executable File
# 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<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 + 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<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 独立生成,可与其他模型审计报告进行交叉比对。*
|