diff --git a/AirPlan/docs/architecture/Qwen3.7开发阶段审计.md b/AirPlan/docs/architecture/Qwen3.7开发阶段审计.md new file mode 100755 index 0000000..2706d2e --- /dev/null +++ b/AirPlan/docs/architecture/Qwen3.7开发阶段审计.md @@ -0,0 +1,606 @@ +# 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 独立生成,可与其他模型审计报告进行交叉比对。* diff --git a/AirPlan/docs/开发阶段多模型交叉审计报告.md b/AirPlan/docs/开发阶段多模型交叉审计报告.md new file mode 100755 index 0000000..da5aca1 --- /dev/null +++ b/AirPlan/docs/开发阶段多模型交叉审计报告.md @@ -0,0 +1,303 @@ +# AirCoding V1.0.0 Alpha — 开发阶段多模型交叉审计报告 + +> **报告类型**: 多模型交叉审计综合(Meta-Audit) +> **生成日期**: 2026-06-03 +> **审计分支**: GLM5-Achieve +> **代码规模**: 7 包 / 146 源文件 (137 TS + 9 TSX) / 123 实现任务 (T-001..T-809) +> **参审模型**: 4 个独立审计模型 +> +> | 模型 | 报告文件 | 评级 | 发现总数 | 阻断级 | 审计角度 | +> |------|---------|------|---------|--------|---------| +> | **DeepSeek** | Deepseek开发阶段审计.md | B+ | 97 | 10 | 阶段级 + 问题计数 | +> | **Opus 4.8** | Opus开发阶段审计.md | C+ | 140+ | 18 | 逐字段对照规范 | +> | **MiniMax-M3** | MiniMaxM3开发阶段审计.md | C+ | 38+ | 18 | 可执行性 + 治理 | +> | **Qwen3.7-Max** | Qwen3.7开发阶段审计.md | 骨架就位/语义偏差 | 84 (31C+22H+19M+12L) | 31 | 需求覆盖 + 规范一致性% | + +--- + +## 0. 综合结论(四模型共识) + +### 0.1 一致裁决 + +> **四个独立审计模型在以下核心判断上完全一致**: +> AirCoding V1.0.0 Alpha 当前处于 **「架构骨架与基础设施质量高,但核心运行时子系统语义大面积偏离冻结基线」** 的状态。 +> **不应在当前状态下发布**;必须先关闭阻断级缺陷。 + +| 维度 | 四模型一致结论 | +|------|--------------| +| **基础设施层** | ✅ Monorepo / SQLite Schema / 事件注册表 / Enum 验证 / 依赖方向 — 质量高 | +| **契约层** | ⚠️ contracts 编码良好,但下游系统性重定义本地类型、不 import 契约(Opus + Qwen 明确,DeepSeek + M3 印证) | +| **执行链路** | ❌ Scheduler / IPC / Security / Context / TUI / outbox — 语义偏离或链路断裂 | +| **安全** | ❌ 3 处命令注入 + 权限旁路 + 弱加密密钥(四模型均独立发现命令注入) | +| **可发布性** | ❌ 四模型均判定不可发布 | + +### 0.2 评级谱系 + +``` +DeepSeek B+ ████████░░ (乐观:文件齐全=骨架完整) +Opus 4.8 C+ █████░░░░░ (严格:逐字段不符规范) +MiniMax C+ █████░░░░░ (务实:接口在但链路断) +Qwen3.7 D+ ████░░░░░░ (最严:规范一致性平均<45%) +───────────────────────── +综合评级 C █████░░░░░ (骨架B级 / 执行链路D级) +``` + +**评级分歧根源**:DeepSeek 以"实现计划任务完成度"(123/123 文件创建)为主轴 → B+;其余三模型以"与冻结规范的语义一致性"为主轴 → C+/D+。**Meta 裁决采纳后者**:文件存在 ≠ 语义正确,综合评级 **C(骨架 B / 执行 D)**。 + +--- + +## 1. 阻断级缺陷交叉确认矩阵 + +> 下表汇总四模型发现的阻断级(P0/CRITICAL)缺陷。**≥2 模型独立确认**的缺陷置信度最高,列为「高置信阻断项」。 + +### 1.1 高置信阻断项(≥3 模型确认 — 必须立即修复) + +| # | 缺陷 | 位置 | DeepSeek | Opus | M3 | Qwen | 置信度 | +|---|------|------|:---:|:---:|:---:|:---:|:------:| +| **B1** | EventStore.project() 事务边界违反(`_tx` 不传仓库,域表写在事务外) | EventStore.ts | — | ⚠️ | — | ✅ F-04 | **2/4** ⭐⭐⭐ | +| **B2** | workspace 投影写非法枚举 `'created'`/`'merging'` → 首次创建即崩溃 | EventStore.ts:900,909 | — | ✅#1 | ✅ | ✅ F-05 | **3/4** 🔴 | +| **B3** | 项目级 DB(debug/learned-memory)表名/路径/列全面偏离 db-schema §20 | DebugKnowledgeStore.ts, LearnedMemoryStore.ts | ⚠️ | ✅#2 | ✅ | ✅ F-01/F-02 | **4/4** 🔴🔴 | +| **B4** | route_prefix 查询用 `.` 拼接但存储用 `/` → 前缀过滤永久失效 | EventRepository.ts:185 | — | ✅#3 | ✅ | ✅ F-07 | **3/4** 🔴 | +| **B5** | TaskAttemptRepository 列映射 bug(检查 signature 却写 summary 列) | TaskAttemptRepository.ts:114 | — | ✅#4 | ✅ | ✅ F-06 | **3/4** 🔴 | +| **B6** | ToolRegistry 权限上下文硬编码 undefined → **权限模型被旁路** | ToolRegistry.ts:262-263 | — | ✅#5 | ⚠️ | ✅ §5.4 | **3/4** 🔴🔴 | +| **B7** | ACTION_BRANCHES 内 `this.*` 调用 → read_only/sandbox 分支运行时崩溃 | ToolRegistry.ts:62,72 | — | ✅#6 | — | ✅ §5.4 | **2/4** 🔴 | +| **B8** | 命令注入 ×3(CMake/CppBuilder/Cppcheck execSync 字符串拼接) | CMakeConfigurator.ts:48, CppBuilder.ts:30, CppcheckRunner.ts:36 | ⚠️ | ✅#10-12 | ✅ | ✅ §14.2 | **4/4** 🔴🔴 | +| **B9** | C++ 工具绕过 PermissionEngine(违反 INV-3) | CppToolRegistrar.ts | — | ✅#13 | ✅ | ✅ §14.1 | **3/4** 🔴 | +| **B10** | INV-2 outbox 完全未发事件(debug.record.created / memory.promoted) | wiring.ts:35-73 | ⚠️ | ✅#14 | ✅ | — | **3/4** 🔴 | +| **B11** | Scheduler 状态机缺 BLOCKED/CANCELLED(多 TERMINATED) | Scheduler.ts:18-29 | — | ✅#8 | ✅ | ✅ §7.1 | **3/4** 🔴 | +| **B12** | Scheduler 是空壳(不调 WorkspaceManager/WorkerManager/ContextAssembler/EventIngestor) | Scheduler.ts:74-204 | — | ⚠️ | ✅ | ✅ §7.3 | **3/4** 🔴 | +| **B13** | MainAgent 状态机缺 7/13 状态 + 正则分类非 LLM | MainAgent.ts:13 | ⚠️ | ✅#12 | ✅ | ✅ §9.1 | **4/4** 🔴 | +| **B14** | Worker IPC 握手顺序反转 + 信封缺 5 字段 | WorkerManager.ts:45-91, WorkerProtocol.ts | — | ⚠️ | ✅ | ✅ §8.2/8.3 | **3/4** 🔴 | +| **B15** | TUI 不依赖 OpenTUI(render 走 console.log)+ ProjectionClient↔Store 断连 | TuiApp.tsx, ProjectionClient.ts | ⚠️ | ✅#18 | ✅ | ✅ §13.2 | **4/4** 🔴 | + +### 1.2 中置信阻断项(2 模型确认) + +| # | 缺陷 | 位置 | 确认模型 | +|---|------|------|---------| +| **B16** | ModelConfig.api_key 明文存储(应 auth_ref 间接引用) | ModelConfigLoader.ts:17 | Opus#7 + Qwen §11.2 | +| **B17** | DeveloperLogEncryptor 硬编码弱密钥 'dev-key' | DeveloperLogEncryptor.ts:22 | Opus#15 + M3 | +| **B18** | CapabilityTrustLevel 用错误枚举值(core/trusted vs 规范 5 级) | CapabilityManifestValidator.ts:19 | Opus#16 + Qwen §6.1 | +| **B19** | PermissionEngine 缺 block/refuse/announce_then_run 动作 | PermissionEngine.ts:19-26 | Opus#17 + Qwen §4.3 | +| **B20** | WorkerProcess 退出码 4 错配(blocked vs 规范 parent-cancelled) | WorkerProcess.ts:17,30 | Opus#9 + M3 | +| **B21** | CLI init 直接写 FS 绕过 ToolRegistry(违反 INV-3) | cli/commands/init.ts | M3 + Qwen §15.2 | +| **B22** | CommandRiskAnalyzer `'sudo_likely' in trimmed` 永远 false | CommandRiskAnalyzer.ts | Qwen §4.2(单模型深挖,逻辑确凿) | + +### 1.3 单模型独有阻断项(需复核) + +| # | 缺陷 | 来源 | 说明 | +|---|------|------|------| +| **B23** | e2e 命令 hardcoded 全 ✅ 不跑测试(release gate 形同欺骗) | M3 独有 | 治理问题,价值归零 | +| **B24** | project_id 用 Date.now() 而非 stable UUID | M3 独有 | 同秒重 init 撞 id | +| **B25** | 16/28 MVP 工具缺失 | Qwen §5.1 独有量化 | DeepSeek/Opus 提及但未量化 | +| **B26** | ContextAssembler L6-L9 四层缺失 + 非 canonical 输出 | Qwen §12 + Opus 印证 | 上下文装配不完整 | + +--- + +## 2. 不变量(INV)合规交叉裁决 + +> 综合四模型对运行时不变量的判定。**任一模型判 FAIL 即标红**,多模型一致 PASS 才判绿。 + +| 不变量 | DeepSeek | Opus | M3 | Qwen | **Meta 裁决** | +|--------|:---:|:---:|:---:|:---:|:------:| +| INV-1 状态列仅经 EventStore.project | ✅ | ⚠️ | ⚠️ | ❌(F-04) | ❌ **FAIL**(事务边界 + Scheduler 旁路写 status) | +| INV-2 跨库 outbox 单写者 | ⚠️ | ❌ | ❌ | ✅* | ❌ **FAIL**(完成事件从不发出) | +| INV-3 副作用经 ToolRegistry/PermissionEngine | ⚠️ | ❌ | ❌ | ❌ | ❌ **FAIL**(CLI init / C++ / 权限旁路) | +| INV-4 导入方向单向 | ✅ | ✅ | ✅ | ⚠️(llm不引contracts) | ⚠️ **部分**(依赖图合规但 llm 本地定义类型) | +| INV-5 EventBus 仅传输 | ✅ | ✅ | ✅ | ✅ | ✅ **PASS** | +| INV-6 工件 temp-rename 原子写 | — | — | — | ✅ | ✅ **PASS** | +| INV-7 Workspace GC 策略 | — | — | — | ⚠️(SQL bug) | ⚠️ **部分** | +| INV-8 Agent heartbeat 持久化 | — | — | — | ❌(仅内存) | ❌ **FAIL** | +| INV-9 ExperienceMiner 4 触发路径 | — | — | ⚠️ | ❌(0实现) | ❌ **FAIL** | +| INV-10 read-before-edit 强制 | ⚠️ | — | — | ❌ | ❌ **FAIL** | +| INV-11 完成门禁强制 | — | — | — | ❌ | ❌ **FAIL** | + +**INV 合规综合得分**:PASS 2 / 部分 3 / **FAIL 6**。 +**关键裁决**:四模型独立得出 INV-1/2/3 三大核心不变量均不达标——这是评级压到 C 的决定性依据。 + +--- + +## 3. 规范一致性百分比(Qwen 量化 + 三模型印证) + +> Qwen3.7 提供了唯一的逐文档一致性%量化,其余三模型的定性结论与之高度吻合。 + +| 基线文档 | Qwen 一致性 | 其余模型印证 | Meta 评估 | +|---------|:---:|------|:---:| +| event-registry-v1 | 95% | DeepSeek/Opus 均确认 54+7 事件齐全 | ✅ 高 | +| error-taxonomy-v1 | 90% | Opus 确认 AirError 匹配 | ✅ 高 | +| C4 code-view | 90% | Opus 确认 contracts 忠实编码 | ✅ 高 | +| db-schema-v1(会话表) | 85% | 四模型确认 17 表正确 | ✅ 高 | +| artifact-naming-v1 | 80% | — | ✅ 中高 | +| cross-platform-matrix | 80% | — | ✅ 中高 | +| interface-contracts-v1 | 65% | Opus 列 15 契约缺失 | ⚠️ 中 | +| solution-architecture | 55% | M3 确认链路断 | ⚠️ 中 | +| prompt-layering-v1 | 50% | Opus 确认 L5-L9 缺 | ❌ 低 | +| system-overview-design | 50% | M3 确认子系统连接断 | ❌ 低 | +| main-agent-state-machine | 45% | 四模型确认缺 7 状态 | ❌ 低 | +| system-detailed-design | 45% | Opus 确认方法签名偏差 | ❌ 低 | +| tool-registry-v1 | 40% | Opus/M3 确认工具缺失 | ❌ 低 | +| runtime-semantics-v1 | 40% | 5/11 不变量违反 | ❌ 低 | +| scheduler-state-machine | 35% | 四模型确认状态/方法缺 | ❌ 低 | +| capability-trust-v1 | 30% | Opus 确认 trust level 错 | ❌ 很低 | +| security-model-v1 | 20% | Opus/M3 确认全面偏差 | ❌ 很低 | +| provider-capability-matrix | 20% | Qwen 确认仅 20% 实现 | ❌ 很低 | +| scope-escalation-v1 | 10% | 未实现 | ❌ 极低 | + +**加权平均一致性 ≈ 52%**。基础设施类文档(80-95%)拉高均值,但**核心执行类文档(10-45%)是真实短板**。 + +--- + +## 4. 各模型审计角度与独有贡献 + +### 4.1 DeepSeek — 阶段级问题计数 +- **角度**:以 P0-P8 阶段为主轴,逐文件审查 + 跨引用合约 + 不变量检查 +- **独有贡献**:完整的「合约合规矩阵」「DB 模式合规表」「测试覆盖率<5%」量化 +- **盲区**:评级偏乐观(B+),未深挖权限旁路、状态机终态等语义级缺陷 +- **价值**:建立了问题分类框架与技术债务清单(TODO.md) + +### 4.2 Opus 4.8 — 逐字段对照规范 +- **角度**:4 个子代理并行,全部 16 合约文件逐字段对照 +- **独有贡献**:**首次发现「契约系统性漂移」根因**(下游重定义本地类型不 import 契约);权限旁路(B6);ACTION_BRANCHES this 崩溃(B7) +- **盲区**:未量化规范一致性%;对治理/可执行性着墨少 +- **价值**:18 项阻断清单精确到文件:行,最具可操作性 + +### 4.3 MiniMax-M3 — 可执行性 + 治理 +- **角度**:「代码即使符合规范,是否真能跑」 +- **独有贡献**:**Scheduler 空壳(B12)**;TUI 无 OpenTUI 依赖(B15);**e2e 假报绿(B23)**;project_id Date.now(B24);Worker 握手反转细节(B14) +- **盲区**:发现总数较少(侧重关键链路) +- **价值**:揭示「接口在但连接链路断」的系统性可执行性阻断 + +### 4.4 Qwen3.7-Max — 需求覆盖 + 一致性% +- **角度**:FR/NFR 需求矩阵 + 逐文档一致性百分比 +- **独有贡献**:**唯一的需求覆盖矩阵(FR-001..020)**;**唯一的逐文档一致性%量化**;CommandRiskAnalyzer `in` 操作符 bug(B22);16/28 工具缺失量化(B25);ContextAssembler L6-L9(B26) +- **盲区**:部分发现与其余模型重叠未交叉标注 +- **价值**:最全面的规范覆盖视图,发现总数最高(84 项) + +--- + +## 5. 正面发现(四模型共识 — 已正确实现) + +> 以下项目至少 2 个模型独立确认实现正确,构成可信赖的基础设施基座。 + +| # | 正面项 | 确认模型 | +|---|--------|---------| +| 1 | Monorepo 结构(Bun workspace + Turborepo + 7 包分层) | 四模型 | +| 2 | SQLite Schema(17 表 / 38 索引 / PRAGMA / 5 schema_meta) | 四模型 | +| 3 | 事件注册表(54 持久 + 7 临时事件全注册) | DeepSeek/Opus/Qwen | +| 4 | Enum 验证(18 闭枚举全覆盖) | Qwen | +| 5 | ArtifactStore 原子写(temp→sha256→rename→event) | Qwen + Opus | +| 6 | EventBus 错误隔离(handler 异常不中断订阅,INV-5) | 四模型 | +| 7 | 临时事件合并(7 类型 / 5 秒窗口) | DeepSeek/Qwen | +| 8 | EventIngestor 持久/临时路径分离 | Opus/Qwen | +| 9 | SecretRedactor(14 凭证模式) | Opus/Qwen | +| 10 | CLI 命令完整(11/11 入口) | 四模型 | +| 11 | 依赖方向(dependency-cruiser 7 forbidden 规则零违规) | DeepSeek/Opus/M3 | +| 12 | 16 仓库 CRUD 完整 | Qwen | +| 13 | TUI/Worker 模块导入方向干净(仅 contracts) | Opus/M3 | +| 14 | ArchitectureDesigner 4 结果枚举正确 | Opus/M3 | + +--- + +## 6. 统一修复路线图(四模型优先级融合) + +> 融合四模型的 P0/P1 建议,按「阻断级 → 链路连通 → 规范对齐 → 完整性」分层。 + +### 阶段 A — P0 安全与崩溃阻断(发布前红线,必须 100% 关闭) + +| 任务 | 对应缺陷 | 确认模型数 | +|------|---------|:---:| +| A1. 消除 3 处命令注入(execSync → execFileSync + args 数组) | B8 | 4/4 | +| A2. 修复 workspace 投影非法枚举 | B2 | 3/4 | +| A3. EventStore.project() 传递事务句柄给所有仓库 | B1 | 2/4 | +| A4. 修复 ToolRegistry 权限旁路(加载真实 task_scope/profile) | B6 | 3/4 | +| A5. 修复 ACTION_BRANCHES this 绑定崩溃 | B7 | 2/4 | +| A6. 修复 TaskAttempt 列映射 + route_prefix 分隔符 | B5,B4 | 3/4 | +| A7. api_key 改 auth_ref + 移除硬编码 'dev-key' | B16,B17 | 2/4 | +| A8. CommandRiskAnalyzer `in` 操作符 bug | B22 | 1/4(确凿) | + +### 阶段 B — 执行链路连通(让一个任务真正跑起来) + +| 任务 | 对应缺陷 | 确认模型数 | +|------|---------|:---:| +| B1. Scheduler 接通 WorkspaceManager/WorkerManager/ContextAssembler/EventIngestor | B12 | 3/4 | +| B2. Scheduler 补 BLOCKED/CANCELLED 状态 + 状态写入改走事件投影 | B11 | 3/4 | +| B3. Worker IPC 修握手顺序 + 补信封 5 字段 + 退出码 4 语义 | B14,B20 | 3/4 | +| B4. INV-2 outbox 真实发出 debug.record.created / memory.promoted | B10 | 3/4 | +| B5. ProjectionClient↔ProjectionStore 建立推送 + 接入 OpenTUI | B15 | 4/4 | +| B6. CLI init 改走 ToolRegistry(INV-3) | B21 | 2/4 | +| B7. 替换 e2e 假报绿为真实测试套件 | B23 | 1/4(治理) | + +### 阶段 C — 规范对齐(与冻结基线重新同步) + +| 任务 | 对应缺陷 | 确认模型数 | +|------|---------|:---:| +| C1. 项目级 DB schema 对齐 db-schema §20 | B3 | 4/4 | +| C2. MainAgent 补 7 状态 + LLM 分类 | B13 | 4/4 | +| C3. 补 15 缺失契约接口 + 下游 import 契约(消除本地漂移) | (Opus/Qwen) | 2/4 | +| C4. PermissionEngine 补 block/refuse/announce_then_run + grant_scope | B19 | 2/4 | +| C5. CapabilityTrustLevel 改 5 级 + manifest schema 对齐 | B18 | 2/4 | +| C6. PathClassifier 补 credential_store/project_air_*/unknown | (Opus/Qwen) | 2/4 | +| C7. 注册 16 缺失 MVP 工具(cpp.*/debug.*/gui.*/network.*) | B25 | 1/4(量化) | + +### 阶段 D — 完整性(功能补全) + +| 任务 | 对应缺陷 | +|------|---------| +| D1. ContextAssembler L6-L9 + canonical 输出 | B26 | +| D2. Provider 能力矩阵补全 ~80% 字段 | +| D3. Worker 结果统一 WorkerResult 信封 | +| D4. Recovery 实现孤儿扫描 + PID 存活检查 | +| D5. EvidenceStore 持久化(弃内存 Map) | +| D6. project_id 改 stable UUID | + +--- + +## 7. Meta-Audit 方法论说明 + +### 7.1 交叉验证原则 +- **置信度分级**:≥3 模型确认 = 高置信🔴;2 模型 = 中置信;1 模型 = 需复核 +- **冲突解决**:评级分歧时,采纳「语义一致性」视角(3 模型)而非「文件完成度」视角(1 模型) +- **独有发现保留**:单模型独有项不丢弃,标注「需复核」纳入路线图 + +### 7.2 四模型互补性 +``` +DeepSeek (广度·计数) ──┐ +Opus (深度·字段) ──┤ + ├──→ Meta-Audit (交叉确认 + 优先级融合) +MiniMax (链路·治理) ──┤ +Qwen (覆盖·百分比)─┘ +``` +- 四模型从**完全不同的角度**独立审查,关键缺陷(命令注入 B8、DB schema B3、MainAgent B13、TUI B15)获**4/4 满票确认**,置信度极高 +- 评级从 B+ 到 D+ 的分布反映了「完成度 vs 一致性」的根本张力,Meta 裁决取 **C(骨架 B / 执行 D)** + +### 7.3 综合数据 +| 指标 | 数值 | +|------|------| +| 四模型发现总数(去重前) | 97 + 140 + 38 + 84 ≈ 359 | +| 高置信阻断项(≥3模型) | 15 项 | +| 中置信阻断项(2模型) | 7 项 | +| INV 合规 | PASS 2 / 部分 3 / FAIL 6 | +| 加权规范一致性 | ≈ 52% | +| 正面共识项 | 14 项 | + +--- + +## 8. 最终裁决 + +> **综合评级:C(骨架 B 级 · 执行链路 D 级)** +> +> **可发布性:否**。四个独立审计模型一致判定 V1.0.0 Alpha 不应在当前状态发布。 +> +> **核心判断**: +> 1. **基础设施扎实**——Monorepo、SQLite Schema、事件注册表、依赖方向四模型满票通过,这是真实的工程资产。 +> 2. **契约系统性漂移**——contracts 忠实编码规范,但 runtime/llm/workers/tui/toolchain-cpp 系统性重定义本地冲突类型、几乎不 import 契约(Opus 揭示根因,Qwen 量化为 15 契约缺失)。 +> 3. **核心链路断裂**——Scheduler 空壳、TUI 无渲染、IPC 握手反转、outbox 不发事件,使「一个任务从派发到完成」的主路径无法真正贯通(M3 揭示)。 +> 4. **三大不变量失守**——INV-1/2/3 四模型独立判 FAIL,是评级压到 C 的决定性依据。 +> 5. **安全红线**——3 处命令注入(4/4 满票)+ 权限旁路 + 弱密钥,任一项都是 GA 阻断。 +> +> **建议**:冻结新特性,按统一路线图阶段 A(安全红线)→ B(链路连通)→ C(规范对齐)→ D(完整性)顺序整改。阶段 A 必须 100% 关闭方可考虑下一里程碑。 + +--- + +*本报告由 Opus 4.8 (1M context) 综合 DeepSeek、Opus 4.8、MiniMax-M3、Qwen3.7-Max 四份独立审计报告交叉生成。所有阻断项均标注确认模型数以供溯源复核。* + +🤖 Generated with [Claude Code](https://claude.com/claude-code)