# 司马懿独立审计报告：PRD→设计→代码 三层一致性审查

**审查人**: 司马懿（simayi-challenger）
**日期**: 2026-05-19
**范围**: moziplus v2.0 全链路（PRD + 7 设计文档 + 24 后端文件 + 22 前端文件）

---

## 一、总体评价

moziplus v2.0 的 F1-F18 编码完成度很高，核心链路（黑板 CRUD → Ticker 调度 → Dispatcher 分发 → Spawner 执行 → Checkpoint 人工确认）已经贯通。v2.7 SubTask 模型、v2.8 状态增强、M3 Checkpoint 均已落地。

**做得好的**：
- 黑板（Blackboard）模块设计扎实，operations.py 20+ 方法覆盖完整 CRUD + 聚合 + 归档
- Ticker 580 行实现持续指挥循环，_tick_project/_dispatch_pending/_dispatch_reviews/_check_timeouts 职责清晰
- Counter + Dispatcher + Spawner 三层限流机制设计正确（BUG-30/31 已修）
- Checkpoint 端到端实现（DDL → operations → routes → CheckpointPanel → TaskModal 集成）质量高
- 前端 12 Tab 覆盖全面，EdictBoard 任务卡片 + CARD_ACTIONS 操作按钮设计实用

**需要改进的**：
- 安全红线（PRD §10.1 六条）落地不足，6 条中只有 2.5 条有代码实现
- development-plan 文档严重滞后（v2.8/M3 仍标"待开发"，实际已完成+已评审）
- 5 个前端组件已编写但未被任何主流程引用（死代码）
- 设计文档版本混乱，存在重复/过时文件未归档

---

## 二、PRD 能力 → 设计覆盖 → 代码实现（§5 十大能力）

| # | PRD 能力 | 设计覆盖 | 代码实现 | 状态 |
|---|---------|---------|---------|------|
| C1 | 需求探索对话 | ✅ topic4 + architecture §5 苏格拉底 Skill | ⚠️ skill_system.py 有 Skill 框架，但苏格拉底 Skill 未注册 | **缺口** |
| C2 | 动态规划 | ✅ architecture §6 指挥循环 | ⚠️ Ticker 有 _dispatch_pending 但无 AI 规划环节 | **部分** |
| C3 | 持续指挥 | ✅ architecture §6 Ticker + 庞统关键节点介入 | ✅ ticker.py 580行，_tick_project 完整循环 | ✅ |
| C4 | 共享意识 | ✅ architecture §7 Blackboard + Daemon API | ✅ blackboard/ 全套 + 7 routes 模块 | ✅ |
| C5 | 自主协作 | ✅ PRD §6.2 标注 v2.1+ | ❌ 未实现（PRD 明确 v2.1+ 范围） | **预期缺口** |
| C6 | 质量门禁 | ✅ topic3 + review.py | ✅ review.py ReviewPipeline + router.py AI 路由 | ✅ |
| C7 | 主动汇报 | ✅ architecture §8 SSE 推送 | ✅ sse_routes.py + 前端 NotificationCenter | ✅ |
| C8 | 经验沉淀 | ✅ topic6 | ✅ experience.py 291行 ExperienceStore | ✅ |
| C9 | 安全护栏 | ✅ PRD §10.1 六条红线 | ⚠️ 详见下方安全红线分析 | **重大缺口** |
| C10 | 工具链集成 | ✅ PRD §10.2 标注 v2.1+ | ❌ toolchain-proposal.md 有设计但未实现 | **预期缺口** |

### 安全红线（PRD §10.1 六条）落地分析

| 红线 | 设计覆盖 | 代码实现 | 状态 |
|------|---------|---------|------|
| 实盘交易拦截 | ❌ 无专门设计 | ❌ 无代码 | **P0 缺口** |
| 数据删除拦截 | ⚠️ archive 改 metadata 不删文件 | ✅ archive_task 只改 archived=1，不删除记录 | **部分满足** |
| 系统配置变更拦截 | ❌ 无专门设计 | ❌ 无代码 | **P0 缺口** |
| 大额 token 消耗 | ⚠️ architecture 提及 L3 tripwire | ⚠️ bootstrap.py L113 有 token limit 警告，但非拦截 | **部分** |
| Agent 不受控行为 | ✅ counter.py + health.py | ✅ counter.py 并发限制 + health.py zombie 检测 | ✅ |
| 连续失败 | ✅ max_retries + review pipeline | ✅ Task.max_retries=2 + ReviewPipeline | ✅ |

**结论**：6 条安全红线中只有 2 条完整落地（Agent 不受控 + 连续失败），1.5 条部分满足（数据删除 + token），2 条完全缺失（实盘交易 + 配置变更）。这是 **P0 级缺口**——PRD 明确标注"必须 AI 拦截并拉人确认，不允许自主执行"，但代码无实现。

---

## 三、设计文档 → 代码一致性

### 3.1 API 路由对比

| 设计文档 API | 代码实现 | 一致性 |
|-------------|---------|--------|
| GET /api/projects/{pid}/tasks | ✅ blackboard_routes L31 | ✅ |
| GET /api/projects/{pid}/tasks/{id} | ✅ blackboard_routes L41 | ✅ |
| POST /api/projects/{pid}/tasks | ✅ blackboard_routes L66 | ✅ |
| POST /api/projects/{pid}/tasks/{id}/claim | ✅ blackboard_routes L101 | ✅ |
| PATCH /api/projects/{pid}/tasks/{id}/status | ⚠️ 代码用 POST（blackboard_routes L109） | **偏差** |
| POST /api/projects/{pid}/tasks/{id}/comments | ✅ blackboard_routes L172 | ✅ |
| POST /api/projects/{pid}/tasks/{id}/outputs | ✅ blackboard_routes L189 | ✅ |
| POST /api/projects/{pid}/tasks/{id}/decisions | ✅ blackboard_routes L264 | ✅ |
| POST /api/projects/{pid}/tasks/{id}/observations | ✅ blackboard_routes L275 | ✅ |
| POST /api/projects/{pid}/tasks/{id}/reviews | ✅ blackboard_routes L291 | ✅ |
| POST /api/projects/{pid}/tasks/{id}/archive | ✅ blackboard_routes L337 | ✅ |
| POST /api/projects/{pid}/tasks/archive-done | ✅ blackboard_routes L353 | ✅ |
| GET /api/projects/{pid}/tasks/{id}/checkpoints | ✅ checkpoint_routes | ✅ |
| POST /api/projects/{pid}/tasks/{id}/checkpoints | ✅ checkpoint_routes | ✅ |
| POST /.../checkpoints/{cid}/approve | ✅ checkpoint_routes | ✅ |
| POST /.../checkpoints/{cid}/reject | ✅ checkpoint_routes | ✅ |
| POST /api/daemon/tick | ✅ daemon_routes L26 | ✅ |
| GET /api/daemon/status | ✅ daemon_routes L10 | ✅ |
| GET /api/daemon/sessions | ❌ **未实现** | **缺口** |
| GET /api/events?project={pid} | ✅ sse_routes | ✅ |
| GET /api/projects | ✅ project_routes L20 | ✅ |
| POST /api/projects | ✅ project_routes L28 | ✅ |
| GET /api/projects/{pid} | ✅ project_routes L42 | ✅ |
| DELETE /api/projects/{pid} | ⚠️ 代码用 POST /{id}/archive | **偏差** |

### 3.2 关键偏差

**偏差1：PATCH status → POST status**（P2）
- 设计文档 technical-design-v2.6.md L749：`PATCH /api/projects/{pid}/tasks/{id}/status`
- 代码 blackboard_routes.py L109：`@router.post("/tasks/{task_id}/status")`
- 影响：语义偏差（PATCH 表示部分更新，POST 表示动作），功能无差异
- 建议：统一为 PATCH 或设计文档改 POST

**偏差2：DELETE project → POST archive**（P1）
- 设计文档 technical-design-v2.6.md L786：`DELETE /api/projects/{pid}` 归档项目
- 代码 project_routes.py：`POST /{project_id}/archive`
- 影响：违反 RESTful 约定（删除操作用 DELETE），且设计文档与代码不同步
- 建议：PRD §10.1 要求"数据删除需人工确认"，POST + 确认流程比 DELETE 更安全，代码做法更合理，应更新设计文档

**偏差3：GET /api/daemon/sessions 未实现**（P1）
- 设计文档 technical-design-v2.6.md L768 定义 `GET /api/daemon/sessions`
- 代码中无此端点
- spawner.py L142-148 有 `_sessions` 字典和 `active_sessions` 属性，但未暴露为 API
- 建议：补实现或设计文档标记为 v2.1+

### 3.3 数据模型一致性

| 设计定义 | 代码实现 | 一致性 |
|---------|---------|--------|
| tasks 表 11 状态 CHECK | ✅ db.py L87 11 状态完整 | ✅ |
| checkpoints 表 DDL | ✅ db.py L121 11 字段完整 | ✅ |
| outputs 表扩展 4 字段 | ✅ db.py _migrate_v28 | ✅ |
| events 表 FK tasks(id) | ✅ db.py L106 | ✅ |
| Task Pydantic model | ✅ models.py 28 字段 | ✅ |

---

## 四、超前实现（代码有但设计文档无记录）

| 组件 | 文件 | 评价 |
|------|------|------|
| MailPanel | components/MailPanel.tsx | ✅ 好事 — Mail Tab 是 v2.7 新增功能，前端-redesign 未提及但合理 |
| MorningPanel | components/MorningPanel.tsx | ⚠️ 孤立 — 未被 App.tsx 引用，无设计文档 |
| ArtifactList | components/ArtifactList.tsx | ⚠️ 孤立 — 未被引用，设计文档提到 ArtifactPanel 但未提到 ArtifactList |
| ConfirmDialog | components/ConfirmDialog.tsx | ⚠️ 孤立 — 未被引用，通用组件可保留 |
| GlobalSearch | components/GlobalSearch.tsx | ⚠️ 孤立 — 未被引用，topic7 提到全局搜索但未落地到主流程 |
| ArtifactPanel | components/ArtifactPanel.tsx | ⚠️ 孤立 — 设计文档 §5.1 提到成果物面板，但 TaskModal 未引用 |
| court Tab | CourtDiscussion.tsx | ✅ 好事 — topic3 挑战/评审体系的前端展示 |
| agent-api-contract.md | docs/design/ | ⚠️ 设计文档但未在 architecture 中引用 |
| agent-routing-redesign.md | docs/design/ | ⚠️ 设计文档但未在 architecture 中引用 |
| frontend-principles.md | docs/design/ | ⚠️ 孤立设计文档 |

---

## 五、缺口分析

### 5.1 PRD 有但代码未实现（按优先级）

| # | 优先级 | 缺口 | PRD 来源 | 影响 |
|---|--------|------|---------|------|
| 1 | **P0** | 实盘交易安全拦截 | §10.1 红线1 | 量化平台核心安全需求 |
| 2 | **P0** | 系统配置变更拦截 | §10.1 红线3 | 防止 Agent 擅自改配置 |
| 3 | **P1** | 苏格拉底需求探索 Skill | §5 C1 | PRD 定义为"核心入口能力" |
| 4 | **P1** | AI 动态规划环节 | §5 C2 | 当前 Ticker 只做调度，无 AI 规划 |
| 5 | **P2** | GET /api/daemon/sessions | technical-design L768 | 已有数据但未暴露 API |
| 6 | **P2** | ArtifactPanel 集成到 TaskModal | v2.8-state-enhancement §5 | 组件已写但未接入 |

### 5.2 PRD 标注 v2.1+ 的预期缺口（可接受）

| 能力 | PRD 声明 | 状态 |
|------|---------|------|
| C5 自主协作 | §10.2 v2.1+ | ✅ 预期缺口 |
| C10 工具链集成 | §10.2 v2.1+ | ✅ 预期缺口 |
| peer-to-peer 协作 | §6.2 | ✅ 预期缺口 |
| Agent 主动感知 | §10.2 | ✅ 预期缺口 |
| Fidelity 信息路由 | §10.2 | ✅ 预期缺口 |

---

## 六、文档版本混乱

| 文件 | 问题 | 建议 |
|------|------|------|
| architecture-v2.md (2757行) | 旧版，被 v2.6 替代但仍保留 | **归档到 archive/** |
| topic7-9-interaction-dashboard-proposal.md (247行) | 与 topic7-interaction-dashboard-proposal.md (456行) 重复 | 保留 456 行版本，删除旧版 |
| topic4-skill-checklist-draft.md (96行) | topic4-decomposition-skill-proposal.md (638行) 的草稿 | 归档到 archive/ |
| product-direction-notes.md | 产品方向笔记，非正式设计文档 | 归档到 archive/ |
| agent-integration-v2.6.md | 可能与 architecture §9 重叠 | 检查后归档或合并 |
| agent-routing-redesign.md | 可能与 architecture §8 重叠 | 检查后归档或合并 |
| **development-plan-v2.6.md** | **v2.8/M3 仍标"待开发"，实际已完成+已评审** | **立即更新** |

**权威文档定义**：
- architecture-v2.6.md：主架构（权威）
- technical-design-v2.6.md：技术设计（权威）
- development-plan-v2.6.md：开发计划（需更新）
- frontend-redesign-v2.6.md：前端设计（权威）
- v2.7-subtask-model.md：SubTask 补充（权威）
- v2.8-state-enhancement.md：状态增强补充（权威）

---

## 七、代码质量问题

### 7.1 死代码（已编写但未被主流程引用）

| # | 优先级 | 组件 | 证据 | 建议 |
|---|--------|------|------|------|
| 1 | P1 | MorningPanel.tsx | App.tsx 未 import | 接入 morning tab 或删除 |
| 2 | P1 | ArtifactList.tsx | 无 import | TaskModal 产出区域集成或删除 |
| 3 | P1 | ArtifactPanel.tsx | 无 import（设计文档 §5.1 要求接入） | TaskModal 产出区域集成 |
| 4 | P2 | ConfirmDialog.tsx | 无 import | 通用组件保留，后续使用 |
| 5 | P2 | GlobalSearch.tsx | 无 import | topic7 提到但未落地，v2.1+ 接入 |

### 7.2 集成缺失

| # | 优先级 | 问题 | 证据 |
|---|--------|------|------|
| 1 | P1 | F19-F22 开发计划标注"设计评审中/待开始" | development-plan L280-282 |
| 2 | P1 | experience.py ExperienceStore 未被 Ticker 自动调用 | 无 auto-distill 逻辑 |
| 3 | P2 | router.py AgentRouter.route() 未被 Dispatcher 调用 | dispatcher.py 用 _legacy_dispatch |

### 7.3 已知 Bug（本轮及之前评审发现，已修或待修）

| Bug | 状态 | 说明 |
|-----|------|------|
| BUG-30/31 Counter leak | ✅ 已修 | on_complete 回调链 |
| BUG-32 resolve 状态校验 | ✅ 已修 | waiting_human 守卫 |
| BUG-33 payload version 校验 | ✅ 已修 | version 字段校验 |
| BUG-34 CheckpointPanel 索引 | ✅ 已修 | pendingIdx 管理 |
| FK 恢复缺 finally | ⚠️ 待修 | db.py _migrate_v28 |

---

## 八、问题汇总（按优先级排序）

### P0（必须修）

| # | 问题 | 证据 |
|---|------|------|
| 1 | **安全红线未落地**：实盘交易拦截 + 系统配置变更拦截无代码实现 | PRD §10.1 红线1/3，代码中无任何拦截逻辑 |
| 2 | **development-plan 严重滞后**：v2.8/M3 标"待开发"，实际已完成+评审通过 | development-plan-v2.6.md L277-278 |

### P1（应该修）

| # | 问题 | 证据 |
|---|------|------|
| 3 | GET /api/daemon/sessions 未实现 | technical-design L768，spawner.py L146 有数据 |
| 4 | 5 个前端组件死代码 | MorningPanel/ArtifactList/ArtifactPanel/ConfirmDialog/GlobalSearch 无 import |
| 5 | ArtifactPanel 未集成到 TaskModal | v2.8-state-enhancement §5.1 要求，组件已写未接入 |
| 6 | design 文档版本混乱 | architecture-v2.md + 3 份重复 topic 文件未归档 |
| 7 | FK 恢复缺 finally 保护 | db.py _migrate_v28，异常时 FK 永久 OFF |
| 8 | ExperienceStore 未被 Ticker 自动调用 | experience.py 291 行写好但无 auto-distill |

### P2（可以后修）

| # | 问题 | 证据 |
|---|------|------|
| 9 | PATCH status → POST status 偏差 | technical-design L749 vs blackboard_routes L109 |
| 10 | DELETE project → POST archive 偏差 | technical-design L786 vs project_routes |
| 11 | 苏格拉底 Skill 未注册 | PRD C1 核心能力，skill_system.py 有框架无 Skill |
| 12 | AI 动态规划环节缺失 | PRD C2，Ticker 只有调度无规划 |
| 13 | agent-api-contract.md / agent-routing-redesign.md 未在主架构引用 | 孤立设计文档 |

---

## 九、结论

### 做得好的 ✅
1. **黑板模块完整**：operations.py 20+ 方法 + 7 API routes 模块，覆盖设计文档全部要求
2. **v2.8 + M3 端到端贯通**：DDL → operations → routes → CheckpointPanel → TaskModal，质量高
3. **Ticker 持续指挥**：580 行实现，调度/超时/依赖推进/审查分发 职责清晰
4. **Counter 限流**：BUG-30/31 修复后三层限流机制完整
5. **前端 12 Tab 全覆盖**：EdictBoard + TaskModal + MailPanel + 9 个辅助面板

### 必须立即修的 🔴
1. **安全红线 P0**：实盘交易 + 配置变更拦截必须实现，这是 PRD 硬性要求
2. **development-plan P0**：立即更新 v2.8/M3 状态为"已完成"

### 应该近期修的 🟡
1. daemon/sessions API 补实现
2. ArtifactPanel 集成到 TaskModal
3. 死代码清理或接入
4. 设计文档归档（architecture-v2.md + 重复 topic 文件）
5. FK 恢复 finally 保护
6. ExperienceStore auto-distill 接入 Ticker

---

*审查完毕。司马懿 🗡️ 2026-05-19*
