Files
zclaw_openfang/docs/superpowers/specs/2026-04-04-module-audit-design.md
iven ade534d1ce
Some checks failed
CI / Lint & TypeCheck (push) Has been cancelled
CI / Unit Tests (push) Has been cancelled
CI / Build Frontend (push) Has been cancelled
CI / Rust Check (push) Has been cancelled
CI / Security Scan (push) Has been cancelled
CI / E2E Tests (push) Has been cancelled
feat: 添加MCP调试插件并优化流式超时处理
refactor(relay): 将Provider Key管理路由移至model_config模块
fix(saas): 修复demo_keys与provider_keys的匹配逻辑
perf(runtime): 将流式响应超时从60秒延长至180秒以适配思考型模型
docs: 新增模块化审计和上线前功能测试方案文档
chore: 添加tauri-plugin-mcp依赖及相关配置
2026-04-08 13:39:06 +08:00

11 KiB
Raw Permalink Blame History

ZCLAW 模块化端到端深度功能验证审计方案

版本: v1.1 (review fix) 日期: 2026-04-04 状态: 设计完成,待执行 审计目标: 端到端功能验证——系统性找出每个模块从 UI 到后端的断链


1. 背景与动机

ZCLAW 项目已有 14 次审计历史V1-V11 共 11 轮版本化审计 + 3 轮专项审计),前几轮以"技术层横向扫描"为主:检查 Tauri 命令调用率、SaaS API 前端消费、死代码清理等。这些审计修复了大量问题,但存在三个结构性盲区:

  1. 缺乏功能视角 — 已知 24 个 Tauri 命令无前端调用,但不知属于哪些用户故事
  2. 缺乏边界验证 — 只查"调了没有",没查"调错了怎么表现"、"空数据怎么表现"
  3. 缺乏累积性 — 每轮从头扫,无模块级基线

本方案以功能领域为主轴组织审计,以标准化的五维检查清单确保不遗漏,以三波并行策略高效执行。


2. 审计模块划分

模块清单

模块 功能领域 核心链路 涉及关键文件
M1 智能对话 用户输入 → ChatArea → chatStore → Kernel → LLM Driver → 流式回传 components/ai/*, store/chat/*, lib/kernel-chat.ts, kernel_commands/chat.rs, zclaw-runtime/src/driver/*
M2 Agent 分身 创建/切换/配置 Agent → agentStore → Kernel → SQLite agentStore.ts, lib/kernel-agent.ts, kernel_commands/agent.rs, zclaw-memory/src/agent_store.rs
M3 Hands 自主能力 触发 Hand → handStore → Kernel → Hand 执行 → 事件回调 handStore.ts, lib/kernel-hands.ts, crates/zclaw-hands/src/hands/*, hands/*.HAND.toml
M4 智能层 记忆/身份/反思/心跳/自主授权/压缩 各链路 intelligence-client/*, store/memoryGraphStore.ts, intelligence/*.rs
M5 技能生态 技能浏览/搜索/执行 → Skills 语义路由 → SKILL.md lib/kernel-skills.ts, crates/zclaw-skills/src/*, skills/*.md
M6 Pipeline 工作流 创建/编辑/执行 Pipeline → workflowStore → DSL Engine components/pipeline/*, workflowStore.ts, crates/zclaw-pipeline/src/*
M7 SaaS 平台(Desktop) 登录/配置/支付 → saasStore → saas-client → SaaS API components/SaaS/*, saasStore.ts, lib/saas-client.ts, crates/zclaw-saas/src/*
M8 Admin V2 14 页面 CRUD → 18 services → SaaS API → PostgreSQL admin-v2/src/pages/*, admin-v2/src/services/*
M9 通信与安全 连接管理/认证/TOTP/加密/限流/MCP 协议 connectionStore.ts, securityStore.ts, gateway-client.ts, lib/mcp-client.ts, crates/zclaw-saas/src/auth/*, crates/zclaw-protocols/src/mcp/*
M10 横切关注点 错误一致性、类型一致性、并发安全(汇总分析) 全局横切
M11 Classroom 课堂 课堂场景播放/聊天/笔记/白板/TTS store/classroomStore.ts, components/classroom_player/*, lib/classroom-adapter.ts

3. 五维检查模板

每个模块必须完成以下五个维度的检查:

维度 1: 链路完整性

  • 画出该模块的完整调用链UI → Store → Client → IPC/API → Rust → DB/网络)
  • 标注每个节点的文件路径
  • 检查每条边的连通性("写了没接"检查)

维度 2: 参数/类型一致性

检查点 方法
前端调用参数 vs Rust 命令签名 逐字段比对名称、类型、Optionality
返回值类型链路 Rust struct → Tauri IPC → TS type → Store state
枚举值/常量两端同步 比对 Rust enum 与 TS union type
数据库字段与 API 字段对齐 SQL 列 vs handler struct field

维度 3: 边界与错误处理

场景 检查内容
空状态 数据库无数据时 UI 表现;空字符串/空数组/null 参数传递
错误状态 网络 5xx / 4xx / 超时 / 序列化失败 → 是否有用户可见反馈
并发 快速双击多操作并行Token 刷新并发
性能降级 大数据量1000+ 消息FTS 全表扫描;连接池满
输入边界 超长文本、特殊字符、非 UTF-8、负数、零值

维度 4: 状态管理

  • Store 状态机完整性loading / success / error / reset
  • 组件是否正确订阅 Store 变化
  • 持久化/恢复路径是否完整
  • 竞态条件风险stale closure、过期 setState

维度 5: 安全与资源

  • 敏感数据加密/脱敏
  • 资源泄漏(事件监听器未清理、定时器未清除、连接未释放)
  • 权限检查完整性
  • 日志是否包含敏感信息

4. 断链检测方法

步骤 1: Tauri 命令调用矩阵

对模块涉及的所有 Tauri 命令:
  1. 从 kernel_commands/mod.rs 提取 #[tauri::command] 注册名
  2. grep desktop/src/ 找 invoke('commandName') 调用
  3. 对比 → 标注 connected / reserved / broken

步骤 2: 参数签名级比对

对每个 connected 命令:
  1. 提取 Rust 端参数类型定义 (struct/derive)
  2. 提取 TS 端调用参数
  3. 逐字段比对名称/类型/Optionality
  4. 不匹配 → 记为 P1 断链

步骤 3: 事件链路追踪

  1. grep desktop/src-tauri/src/ 找 .emit("event-name") 发射点
  2. grep desktop/src/ 找 .listen("event-name") 监听点
  3. 交叉比对 → 找出 emit 但无 listen 的断裂

步骤 4: 数据库-API-UI 三端对齐

  1. grep crates/zclaw-saas/src/ 找 SELECT/INSERT 语句
  2. 对比 API handler 暴露的端点
  3. 对比前端 service 层调用
  4. 找出"有表无 API" 或 "有 API 前端未调"

5. 边界验证方法

采用三层验证策略:

第一层: 静态分析工具辅助60% 工作量)

检查 命令
TypeScript 类型安全 tsc --noEmit
Rust 编译检查 cargo check
潜在 panic grep -rn "unwrap()" crates/
静默忽略 grep -rn "let _ =" crates/
类型逃逸 grep -rn "as any" desktop/src/
技术债标记 grep -rn "TODO|FIXME|HACK"

第二层: 代码推理人工审查30% 工作量)

对每条链路的每个"edge",推理:

  • 上游返回 null/undefined/Err 时,下游如何处理?
  • 上游超时 30s 无响应UI 如何表现?
  • 用户在 loading 期间切换页面,状态如何恢复?

第三层: 实机验证P0/P1 必须,高频模块加强)

标准模块M2/M4-M11: 10% 工作量,仅 P0/P1 级发现做实机验证。

高频模块M1/M3: 20-30% 工作量,除 P0/P1 外还需验证:

  • 并发场景:快速连续发送消息、快速连续触发 Hand
  • 流式中断:中途断网、切换模型、切换 Agent
  • 大数据场景1000+ 消息加载、长时间会话压缩

实机验证启动命令:pnpm start:dev

  • 空数据场景:清空相关表,验证 UI 不崩溃
  • 错误场景:关闭后端服务,验证前端降级提示
  • 并发场景:快速连续触发同一操作

6. 优先级分级标准

级别 定义 示例 修复时限
P0 必然崩溃或数据丢失,用户无法绕过 skill_execute 空参数导致 serde panic 立即
P1 功能失效但不崩溃;核心功能断链 API 路径 404、参数不匹配静默失败 24h
P2 功能部分可用但不完整;可能演变为 P1 静默忽略错误、fire-and-forget spawn 1 周
P3 不影响功能但影响可维护性 类型命名不一致、文档数字偏差 下个迭代
P4 信息级建议改进 配置参数预留未消费、feature-gated 未启用 backlog

判断流程

用户是否看到异常? → 是 → P0/P1
数据是否丢失/损坏? → 是 → P0
核心路径是否受阻? → 是 → P1
是否可能引发 P1 → 是 → P2
是否仅影响开发者体验? → 是 → P3/P4

7. 执行策略

执行假设与节奏

  • 执行者假设: 单人执行AI Agent 辅助 + 人工决策)
  • 模块粒度: 每模块约 1 个工作日(含五维检查 + 报告编写)
  • 总工期: 11 个工作日11 模块 x 1 天/模块),跨约 2.5 周

波次安排

波次 模块 耗时 说明
第一波 M1(对话) + M2(Agent) + M3(Hands) 3 天 核心路径,历史断链最密集区
第二波 M4(智能层) + M5(技能) + M6(Pipeline) 3 天 智能与编排
第三波 M7(SaaS) + M8(Admin) + M11(Classroom) 3 天 平台层
第四波 M9(通信安全) + M10(横切汇总) 2 天 基础设施+全量汇总

每波内模块顺序执行(单 Agent 每日 1 模块),避免 context 窗口溢出。

模块内部执行顺序

五维检查串行执行:链路图 → 参数比对 → 边界验证 → 状态管理 → 安全检查


8. 报告格式

每个模块独立输出一份审计报告,格式如下:

# 模块 [Mx] [模块名] 审计报告

## 1. 模块概况
- 功能描述
- 涉及文件清单(按层分类)
- 调用链路图
- 前次审计已知问题继承

## 2. 五维检查结果

### 2.1 链路完整性
| 链路 | 起点 | 终点 | 状态 | 断裂点 |

### 2.2 参数/类型一致性
| 接口 | 前端类型 | 后端类型 | 一致性 | 不匹配字段 |

### 2.3 边界与错误处理
| 场景 | 输入 | 预期行为 | 实际行为 | 级别 |

### 2.4 状态管理
| Store | 状态机完整性 | 持久化 | 竞态风险 |

### 2.5 安全与资源
| 检查项 | 状态 | 说明 |

## 3. 问题清单
| ID | 描述 | 文件:行号 | 级别 | 修复建议 | 验证方法 |

## 4. 改进建议
- 短期修复项(按优先级排序)
- 长期架构建议

最终汇总为 docs/features/MODULE_AUDIT_SUMMARY.md,包含:

  • 各模块问题统计表
  • P0/P1 问题优先修复清单
  • 整体健康度评分
  • 对 TRUTH.md 数字更新的建议

9. 与已有审计的衔接

  • 继承 AUDIT_TRACKER.md:每个模块开头从已有追踪表继承已知问题
  • 更新 TRUTH.md:审计中发现的数字偏差回写真相源
  • 延续版本线:本审计为 V12第 15 次),报告编号继续递增
  • 新 P0 处理流程:审计中发现的 P0 级问题立即中断当前模块审计,优先修复并验证,再继续审计
  • 避免重复:已标记为"已修复"的问题仅做验证性检查,不重新审计

10. 前几轮审计盲区(本次重点关注)

盲区 说明 本次覆盖维度
Store 状态机完整性 前几轮几乎未检查 loading/error/reset 维度 4
错误传播链路 后端 Err 是否能传到 UI 维度 3
事件监听对称性 emit 但无 listen 的断裂 维度 1
并发安全 约 15 处 fire-and-forget spawn 未审计 维度 5
空数据降级 Desktop 端空数据表现未验证 维度 3
Desktop 前端零测试 边界验证只能靠代码推理+实机 维度 3M1/M3 加强实机验证
Classroom 课堂 27 个 Tauri 命令中 7 个无前端调用,未审计 新增 M11
MCP 协议链路 MCP 服务发现→工具列举→执行 链路未验证 M9 增加检查项