- 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>
28 KiB
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.dbvs 设计.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.dbvs 设计.air/local/learned-memory.db - 表名: 代码
learned_memoryvs 设计learned_memories - 6 个列名/语义不匹配
- 枚举值完全不匹配: 设计
project_rule|toolchain_rule|skill_update|debug_experiencevs 代码pattern|rule|skill|experience - 状态枚举不匹配: 设计
candidate|promoted|archived|rejectedvs 代码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|cleanedworkspace.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. 正面发现 (代码与设计匹配的部分)
- Monorepo 结构正确: Bun workspace + Turborepo,7 个包分层清晰
- SQLite Schema 完整: 17 表、38 索引、PRAGMA、schema_meta 完全匹配
- 事件注册表完整: 54 个持久事件 + 7 个临时事件全部注册
- Enum 验证完整: 18 个闭枚举全部覆盖
- ArtifactStore 原子写入正确: temp → sha256 → rename → event 流程完整
- EventBus 错误隔离正确: handler 异常不中断订阅
- 临时事件合并正确: 7 种临时事件类型全部识别,5 秒窗口
- EventIngestor 分离正确: 持久/临时路径分离,不创建调度任务
- SecretRedactor 覆盖良好: 14 种凭证模式
- CLI 命令完整: 11/11 必需命令
- WorkspaceManager GC 保留策略正确: merged 7 天, abandoned 3 天
- Heartbeat 合并窗口正确: 5 秒
- RetryPlanner 失败签名升级逻辑正确: (但未接入)
- 所有 16 个仓库 CRUD 操作完整: get/insert/update + 领域查询方法
18. 修复优先级建议
P0 (立即修复 — 阻塞核心不变量)
- F-04: EventStore 事务边界 — 将
_tx传递给所有仓库方法 - F-05: Workspace status 枚举值 —
'created'→'active','merging'→ metadata - F-06: TaskAttemptRepository 列映射 —
failure_summary→failure_signature - F-07: EventRepository 路由分隔符 —
.→/ - ToolRegistry
this绑定 bug — 重构 ACTION_BRANCHES 为方法调用 - CommandRiskAnalyzer
in操作符 bug —'sudo_likely' in trimmed→trimmed.includes('sudo')
P1 (短期修复 — 功能性缺陷)
- F-01/F-02: 项目级 DB schema — 对齐 DebugKnowledgeStore 和 LearnedMemoryStore
- 补全 15 个缺失契约接口 — EventBus/EventStore/EventIngestor/ContextAssembler 等
- PathClassifier 类别对齐 — 添加
credential_store,project_air_shared/local,unknown - PermissionEngine 类型对齐 — 4 profile, 6 action, grant scope
- Scheduler 状态机补全 — BLOCKED/CANCELLED 状态, cancel_task, load_graph
- IPC 信封补全 — 添加 5 个缺失字段, 修正握手顺序
- 注册 16 个缺失 MVP 工具 — fs.stat, process.kill, cpp., debug., gui., network.
- Main Agent 状态机补全 — 7 个缺失状态
P2 (中期修复 — 完整性)
- ContextAssembler L6-L9 — 补全 4 个缺失层
- Provider 能力矩阵 — 补全 ~80% 缺失字段
- Worker 结果形状对齐 — 统一为
WorkerResult<T>信封 - Capability manifest 对齐 — 5 级 trust, 富依赖模型, 命名空间验证
- Recovery 实现 — 孤儿扫描、PID 存活检查
- EvidenceStore 持久化 — 从 EvidenceRepository 查询而非内存 Map
P3 (长期 — 质量与文档)
- ADR 记录 — workers 包、Provider 类型强化、Doctor 扩展等设计偏差
- DoctorIssueSeverity — 添加缺失的
"error"值 - 工具 Schema 对齐 — fs.edit, shell.run, artifact.create 等字段名/类型
- Scope Escalation 实现 — ScopeImpactLevel, BlockerReport 集成
- 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 独立生成,可与其他模型审计报告进行交叉比对。