docs: add pre-release functional test design + screenshots

This commit is contained in:
iven
2026-04-09 17:48:40 +08:00
parent 2f25316e83
commit d6ccb18336
15 changed files with 471 additions and 0 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 906 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

View File

@@ -0,0 +1,53 @@
uid=2_0 RootWebArea "ZCLAW" url="http://localhost:1420/"
uid=5_0 complementary
uid=5_1 button "返回应用"
uid=5_2 navigation
uid=5_3 button "通用"
uid=5_4 button "用量统计"
uid=5_5 button "积分详情"
uid=5_6 button "模型与 API"
uid=5_7 button "MCP 服务"
uid=5_8 button "IM 频道"
uid=5_9 button "工作区"
uid=5_10 button "数据与隐私"
uid=5_11 button "安全存储"
uid=5_12 button "SaaS 平台"
uid=5_13 button "订阅与计费"
uid=5_14 StaticText "高级"
uid=5_15 button "技能管理"
uid=5_16 button "语义记忆"
uid=5_17 button "安全状态"
uid=5_18 button "审计日志"
uid=5_19 button "定时任务"
uid=5_20 button "心跳配置"
uid=5_21 button "提交反馈"
uid=5_22 button "关于"
uid=5_23 main
uid=5_24 heading "通用设置" level="1"
uid=5_25 heading "GATEWAY 连接" level="2"
uid=5_26 StaticText "状态"
uid=5_27 StaticText "已连接"
uid=5_28 StaticText "地址"
uid=5_29 StaticText "http://127.0.0.1:8080"
uid=5_30 StaticText "Token"
uid=5_31 textbox "可选Gateway auth token" value="••••••••••••••••••••••••••••••••••••••••••••••••"
uid=5_32 StaticText "版本"
uid=5_33 StaticText "saas-relay"
uid=5_34 StaticText "当前模型"
uid=5_35 StaticText "GLM-4 Flash"
uid=5_36 button "断开连接"
uid=5_37 heading "外观与行为" level="2"
uid=5_38 StaticText "主题模式"
uid=5_39 StaticText "选择浅色或深色模式。"
uid=5_40 button
uid=5_41 button
uid=5_42 StaticText "开机自启"
uid=5_43 StaticText "登录时自动启动 ZCLAW。"
uid=5_44 button
uid=5_45 StaticText "显示工具调用"
uid=5_46 StaticText "在对话消息中显示模型的工具调用详情块。"
uid=5_47 button
uid=5_48 StaticText "界面模式"
uid=5_49 StaticText "切换简洁界面或完整专业界面。"
uid=5_50 button "简洁模式 适合日常使用,只显示聊天窗口"
uid=5_51 button "专业模式 完整功能,包括侧边栏和工具面板" focusable focused

Binary file not shown.

After

Width:  |  Height:  |  Size: 658 KiB

View File

@@ -0,0 +1,418 @@
# ZCLAW 发布前功能测试方案
> 日期: 2026-04-08
> 状态: Draft
> 基于: 两轮头脑风暴产品愿景 + 25 轮 tauri-mcp 测试结果
> 目标: 全功能可用验证 — 所有 UI 入口点接通真实后端,允许有 bug 但不能 crash
---
## Context
ZCLAW 经过 12 轮审计修复1048 个自动化测试通过25 轮 tauri-mcp 实景测试已完成核心路径验证SSE、多轮对话、话题切换。但在发布前仍有
1. **未验证的能力**Pipeline 实际执行、Hand 触发、Skill 安装/卸载、Agent 完整创建流程、模型切换
2. **遗留问题**6 个 P2/P3Token 计数为 0、Kimi ENTITY bug、配额 429、对话列表冗余等
3. **产品愿景验证**:两轮头脑风暴确立了"成长性问题解决者"定位,需要用真实行业场景验证
本方案旨在通过多角色真实 LLM 交互测试,全面验证系统发布就绪度。
---
## 0. 范围澄清
### 0.1 与 04-05 预发布审计的关系
本方案**补充而非替代** `2026-04-05-pre-launch-functional-audit-design.md`。04-05 方案是模块级功能审计12 模块 T1-T12本方案是角色驱动的端到端集成测试。
| 04-05 模块 | 本方案覆盖 | 状态 |
|------------|-----------|------|
| T1 Hands | 角色 A (Researcher/Collector/Browser) | 本方案 |
| T2 Intelligence | 角色 B (记忆+反思) | 本方案 |
| T3 Chat/SSE | 角色 A+B+C | 本方案 |
| T4 Agent | 角色 B (创建/切换/人格) | 本方案 |
| T5 Skills | 角色 B (执行+结果) | 本方案 |
| T6 Pipeline | 角色 A (模板+执行) | 本方案 |
| T7 Browser Hand | 角色 A (导航+截图) | 本方案 |
| T8 Memory | 角色 B (VikingPanel) | 本方案 |
| T9 Admin V2 | 不在本方案范围 | 已有 61 测试覆盖 |
| T10 Security | 角色 B (Audit 日志) | 部分 |
| T11 SaaS API | 角色 B (配额+计费) | 部分 |
| T12 E2E 集成 | 三角色本身就是 E2E | 本方案 |
### 0.2 前序测试基线
开始本方案前,确认以下自动化测试基线通过:
```bash
# Rust 全量(排除 SaaS
cargo test --workspace --exclude zclaw-saas # 580 tests passing
# SaaS 集成(需 PostgreSQL
cargo test -p zclaw-saas -- --test-threads=1 # 138 tests passing
# 前端
cd desktop && pnpm vitest run # 330 passed, 1 skipped
# 类型检查
pnpm tsc --noEmit # 0 errors
```
### 0.3 Phase 0环境就绪检查
在 Phase 1 开始前,确认以下环境就绪:
| # | 检查项 | 验证方法 | 通过标准 |
|---|--------|----------|----------|
| 0.1 | Tauri 开发服务 | `pnpm start:dev` | 应用窗口正常打开,无白屏 |
| 0.2 | tauri-mcp 连接 | Chrome DevTools MCP 连接 | `take_snapshot` 返回页面结构 |
| 0.3 | SaaS 后端 | Admin 页面可访问 | Dashboard 正常加载 |
| 0.4 | LLM API 冒烟测试 | 三模型各发一条消息 | Kimi/GLM/DeepSeek 均有响应 |
| 0.5 | 自动化基线 | 运行 §0.2 命令 | 全部通过 |
---
## 1. 测试策略
### 1.1 方案选择:角色驱动 + 功能矩阵混合式
以三个不同行业角色为主线驱动测试,同时用功能矩阵确保 100% UI 入口点覆盖:
```
Phase 1: 基础连接+认证(无角色,通用验证)
Phase 2: 角色 A — 玩具厂老板 + Kimi
Phase 3: 角色 B — 医院行政 + GLM-4-Flash
Phase 4: 角色 C — 高中教师 + DeepSeek-V3
Phase 5: 功能矩阵交叉验证checklist 补漏)
Phase 6: 修复验证 + 发布评估
```
### 1.2 测试方式
- **工具**: tauri-mcp / tauri-devtools 真实 LLM 交互
- **执行方式**: 边测边修(发现问题当场修复或记录后当轮修复)
- **预计总轮次**: 60-72 轮Phase 0: ~5, Phase 1: ~10, Phase 2: 18-22, Phase 3: 18-22, Phase 4: 15-18, Phase 5-6: ~5
### 1.3 配额预算
| 角色 | 预计 API 调用 | 含 Hands/Skills 开销 | 总计 |
|------|-------------|---------------------|------|
| Phase 0-1 | ~15 | 0 | 15 |
| 角色 A (Kimi) | ~22 | Researcher(3) + Collector(2) + Browser(2) + Pipeline(3) | 32 |
| 角色 B (GLM) | ~22 | Skills(2) + 记忆(1) | 25 |
| 角色 C (DeepSeek) | ~18 | Quiz(2) + Slideshow(1) + TTS(1) | 22 |
| Phase 5-6 | ~5 | 0 | 5 |
| **总计** | | | **~99** |
**配额策略**:
- 使用付费套餐(非 free plan 100 次限制),或 Admin 后台将测试账号配额提升至 200 次
- 准备 2 个测试账号,一个主用(配额 200+),一个备用
- 如果主账号配额耗尽,切换到备用账号继续测试
- 每个 Phase 结束后检查剩余配额,低于 20 次时切换账号
### 1.4 测试数据隔离
- 三个角色使用**同一个 SaaS 账号**但**不同的 Agent 分身**,状态共享
- 角色 B 的记忆测试可以观察到角色 A 的对话(验证跨 Agent 记忆隔离)
- 配额在三个角色间共享,按角色 A → B → C 的顺序消耗
- 每个 Phase 开始前记录当前对话数和配额余量
---
## 2. 测试角色与功能分工
### 2.1 三个测试角色
| 角色 | 身份 | LLM 模型 | 测试重点 | 预计轮次 |
|------|------|----------|----------|----------|
| **A. 玩具厂老板** | 汕头澄海,盲盒+注塑 | Kimi (kimi-for-coding) | 核心聊天、HandsResearcher/Collector/Browser、Pipeline 行业模板、配额管理 | 18-22 轮 |
| **B. 医院行政** | 某三甲医院行政主任 | GLM-4-Flash | Agent 多分身管理、Skills 调用、记忆系统、SaaS 配额/计费、模型切换 | 18-22 轮 |
| **C. 高中教师** | 高二语文/班主任 | DeepSeek-V3 | 多轮对话深度、Classroom/Quiz 生成、Slideshow、Speech TTS、对话搜索 | 15-18 轮 |
### 2.2 功能覆盖矩阵
**B** = 主测,**X** = 交叉验证
| 功能域 | 角色 A | 角色 B | 角色 C |
|--------|--------|--------|--------|
| SaaS 登录/认证 | **B** | X | X |
| SSE 流式响应 | **B** | X | X |
| 多轮对话 | **B** | X | **B** |
| 话题切换 | **B** | X | X |
| 取消流式 | X | X | **B** |
| Agent 创建/切换 | X | **B** | X |
| Agent 人格编辑 | X | **B** | X |
| 记忆提取/回顾 | X | **B** | X |
| Skills 执行 | X | **B** | X |
| Hands 触发 | **B** | X | X |
| Pipeline 执行 | **B** | X | X |
| Classroom/Quiz | X | X | **B** |
| Slideshow | X | X | **B** |
| Speech TTS | X | X | **B** |
| Browser Hand | **B** | X | X |
| 模型切换 | X | **B** | X |
| 对话搜索 | X | X | **B** |
| 配额/计费 | X | **B** | X |
| Thinking 渲染 | **B** | X | X |
| 离线队列 | X | **B** | X |
| 侧边栏 Tab 切换 | **B** | **B** | **B** |
---
## 3. 六阶段执行流程
### Phase 1基础连接与认证~10 轮)
**目标**: 确保所有连接模式可用,不被底层问题干扰后续角色测试
| # | 测试项 | 验证方法 | Pass 标准 |
|---|--------|----------|-----------|
| 1.1 | SaaS 登录 | 通过 tauri-mcp 发送消息 | 成功获取 session + 模型列表加载 |
| 1.2 | 会话恢复 | 重启 Tauri 应用后检查 | 自动恢复登录态,无需重新认证 |
| 1.3 | SSE 流式响应 | 发送简单问题 | thinking + content 双流正常渲染 |
| 1.4 | 取消流式 | 发送长问题后点击取消 | 状态正确恢复,可立即发新消息 |
| 1.5 | 侧边栏 Tab 切换 | 逐个点击 Chat/Agent/Memory/Automation/Skills | 每个 Tab 内容区正确更新,无白屏 |
| 1.6 | 对话列表 | 创建新对话 → 切换 → 搜索关键词 | CRUD 完整,搜索结果准确 |
| 1.7 | 模型列表加载 | 打开模型选择器 | 显示当前 SaaS 账户可用模型 |
| 1.8 | 遗留问题重现 | 逐个检查上次 6 个 P2/P3 | 确认已修复/仍存在/部分改善 |
**Pass 条件**: 1.1-1.5 全部通过才能进入 Phase 2。1.6-1.8 允许有问题但不阻塞。
---
### Phase 2角色 A — 玩具厂老板 + Kimi18-22 轮)
**场景**: 汕头澄海玩具厂老板,想开发盲盒产品线,需要市场调研、供应商联系、展会信息。
| # | 测试项 | 场景动作 | 验证点 |
|---|--------|----------|--------|
| A1 | 多轮行业对话 | "我想做盲盒,市面上哪些品牌卖得好?" → "这些材质有什么区别?" → "注塑成本怎么算?" | 上下文连续、行业知识准确、无信息丢失 |
| A2 | 话题切换 | 盲盒 → 供应商采购 → 展会 → 回到盲盒话题 | 回溯准确,不丢失之前的讨论细节 |
| A3 | Hands: Researcher | "帮我调研一下 2026 年盲盒市场趋势" | 工具调用成功,返回结构化研究报告 |
| A4 | Hands: Collector | "整理一份注塑机供应商对比表,包含价格和产能" | 输出结构化表格,格式正确 |
| A5 | Pipeline 执行 | 触发"市场调研"行业模板 | Pipeline 步骤逐步执行,状态跟踪正确,结果可查看 |
| A6 | Thinking 渲染 | 观察含 thinking 的回复 | 折叠/展开正常thinking 内容完整,不影响 content |
| A7 | 长消息处理 | "详细列出从设计到量产的完整开模流程" | 完整输出,不被截断,段落格式正确 |
| A8 | 中英文混合 | "帮我写一封给 Hasbro 的英文合作邮件" → 后续用中文讨论 | 语言切换自然,上下文不混乱 |
| A9 | 数学计算 | "月产 5 万个盲盒,每个成本 3.5 元,利润率 40%,月利润多少?" | 计算正确70,000 元) |
| A10 | 配额边界 | 持续使用观察配额消耗 | 接近上限时有友好提示429 响应处理正确 |
| A11 | Browser Hand | "打开 1688 搜一下注塑机价格" | 若 Fantoccini 已安装:触发自动化 + Approval 弹窗;若未安装:标注 KNOWN跳过测试 |
| A12 | Kimi ENTITY bug | 切换到 Flash 模式测试 | 检查 `__ENTITY_N__` 是否仍出现,评估影响 |
| A13 | 侧边栏导航 | 在 Chat ↔ Hands ↔ Pipeline 间频繁切换 | 内容区更新正确,无白屏或残留 |
**Pass 条件**: 核心项 A1-A5 全部通过。A6-A10 为扩展项,允许 <= 2 项失败。A11 Browser Hand 若 Fantoccini 未安装则标注为 KNOWN不计入 Pass/Fail。
---
### Phase 3角色 B — 医院行政 + GLM-4-Flash18-22 轮)
**场景**: 某三甲医院行政主任,管理多个科室文档,需要 AI 助手处理不同科室事务并记住各科室特殊要求。
| # | 测试项 | 场景动作 | 验证点 |
|---|--------|----------|--------|
| B1 | Agent 创建 | 创建"内科助手"、"外科助手"两个分身 | Agent 表单完整,保存成功,出现在列表 |
| B2 | Agent 人格编辑 | 给内科助手设置专业人格 + 科室术语 | 人格 prompt 生效,后续对话体现专业术语 |
| B3 | Agent 切换 | 在两个分身间切换对话 | 上下文独立不串台,各自记住自己的话题 |
| B4 | 记忆积累 | 多次提及"我们医院 ICU 床位 30 张" | 后续对话 AI 记住并引用这个事实 |
| B5 | 记忆回顾 | 打开 VikingPanel 查看记忆列表 | 显示已积累的记忆条目,可搜索 |
| B6 | Skills 执行 | 触发文档处理 skill | Skill 正确执行并返回结果 |
| B7 | 模型切换 | 从 GLM 切到 DeepSeek → 再切回 GLM | 切换立即生效,对话不中断,模型特性可感知 |
| B8 | SaaS 配额查看 | 打开账户/计费面板 | 用量正确显示(验证 Token 计数修复) |
| B9 | 离线测试 | 断网 → 发消息 → 恢复网络 | 离线队列缓存消息,恢复后自动发送 |
| B10 | 搜索对话 | 搜索"ICU"关键词 | 正确过滤出包含 ICU 的对话 |
| B11 | Thinking 模式 | 开启/关闭 Thinking | 状态正确切换,渲染正常 |
| B12 | 反思系统 | 多轮对话后检查反思日志 | reflection 自动触发并记录,日志可查看 |
| B13 | 安全面板 | 打开 Audit 日志 | 显示操作记录,内容完整 |
**Pass 条件**: 核心项 B1-B7 全部通过。B8-B13 为扩展项,允许 <= 2 项失败。B9 离线测试允许有已知限制。
---
### Phase 4角色 C — 高中教师 + DeepSeek-V315-18 轮)
**场景**: 高二语文老师兼班主任,需要生成测验、制作课件、用语音朗读课文。
| # | 测试项 | 场景动作 | 验证点 |
|---|--------|----------|--------|
| C1 | 深度多轮对话 | 讨论文言文教学方法 15+ 轮 | 上下文持续积累无丢失,后续引用前文准确 |
| C2 | Quiz 生成 | "生成一套《赤壁赋》理解测验10 道选择题" | 题目生成完整,格式正确,答案合理 |
| C3 | Slideshow | "帮我做一页《赤壁赋》赏析幻灯片" | 幻灯片生成并预览,可翻页 |
| C4 | Speech TTS | "朗读《赤壁赋》第一段" | 语音合成播放正常,中文发音准确 |
| C5 | Quiz 评估 | 模拟学生答题,系统评分 | 评分逻辑正确,反馈有针对性 |
| C6 | 取消流式 | 在长文生成过程中取消 | 干净取消UI 状态恢复,可立即继续操作 |
| C7 | 对话搜索 | 搜索"赤壁赋" | 正确匹配相关对话 |
| C8 | 新建对话 | 创建新对话讨论班会方案 | 独立上下文,不与之前的讨论混淆 |
| C9 | 跨话题记忆 | "上次我们讨论的教学方法叫什么?" | 记忆回溯准确,能引用之前对话内容 |
| C10 | 长文本输出 | "写一份完整的家长会发言稿800 字" | 完整输出,格式正确,不被截断 |
| C11 | DeepSeek 稳定性 | 持续使用 15+ 轮 | 无超时、无 crash、无异常中断 |
| C12 | Classroom 相关 | Classroom 面板查看生成结果 | 生成历史可查看,可复用 |
| C13 | Whiteboard | "在白板上画一个文言文知识图谱" | 白板渲染正常,可导出(允许标注 demo |
| C14 | 记忆飞轮验证 | 不提关键词,问"我们医院有多少张病床?" | 如果角色 B 的记忆跨 Agent 可见则验证飞轮;否则验证本角色记忆 |
**Pass 条件**: 核心项 C1-C6 全部通过。C7-C12 为扩展项,允许 <= 2 项失败。C4 TTS 允许有浏览器兼容性限制。
---
### Phase 5功能矩阵交叉验证checklist
逐项检查每个 UI 入口点,确保至少被一个角色覆盖。对照 Phase 2-4 的结果,标记未覆盖项并补充测试。
| 类别 | UI 入口点 | 覆盖角色 | 状态 |
|------|-----------|----------|------|
| **侧边栏** | Chat Tab | Phase 1 | ☐ |
| **侧边栏** | Agent Tab | B | ☐ |
| **侧边栏** | Memory Tab | B | ☐ |
| **侧边栏** | Automation Tab | A | ☐ |
| **侧边栏** | Skills Tab | B | ☐ |
| **聊天区** | 发送消息 | A+B+C | ☐ |
| **聊天区** | 取消流式 | C | ☐ |
| **聊天区** | Thinking 展开/折叠 | A | ☐ |
| **聊天区** | 代码块渲染 | A (中英文) | ☐ |
| **聊天区** | 消息搜索 | C | ☐ |
| **聊天区** | 对话切换 | A+B | ☐ |
| **聊天区** | 新建对话 | C | ☐ |
| **Agent** | 创建 Agent | B | ☐ |
| **Agent** | 编辑人格 | B | ☐ |
| **Agent** | 切换 Agent | B | ☐ |
| **Agent** | 删除 Agent | B (必测 — 安全相关) | ☐ |
| **Hands** | 列表展示 | A | ☐ |
| **Hands** | 触发执行 | A (Researcher/Collector) | ☐ |
| **Hands** | Approval 弹窗 | A (Browser) | ☐ |
| **Hands** | 执行日志 | A | ☐ |
| **Skills** | 列表展示 | B | ☐ |
| **Skills** | 执行 Skill | B | ☐ |
| **Skills** | 结果展示 | B | ☐ |
| **Pipeline** | 模板列表 | A | ☐ |
| **Pipeline** | 执行 Pipeline | A | ☐ |
| **Pipeline** | 进度跟踪 | A | ☐ |
| **Pipeline** | 结果查看 | A | ☐ |
| **Memory** | VikingPanel | B | ☐ |
| **Memory** | 记忆列表 | B | ☐ |
| **Memory** | 记忆搜索 | B | ☐ |
| **Browser** | 创建会话 | A | ☐ |
| **Browser** | 导航+截图 | A | ☐ |
| **Classroom** | Quiz 生成 | C | ☐ |
| **Classroom** | Quiz 评估 | C | ☐ |
| **Slideshow** | 生成+预览 | C | ☐ |
| **Speech** | TTS 播放 | C | ☐ |
| **Settings** | 连接配置 | B | ☐ |
| **Settings** | 模型选择 | B | ☐ |
| **Settings** | Autonomy 级别 | B (必测 — 安全相关) | ☐ |
| **SaaS** | 登录/登出 | A+B | ☐ |
| **SaaS** | 账户信息 | B | ☐ |
| **SaaS** | 配额/计费 | B | ☐ |
| **自动化** | Triggers | A | ☐ |
| **自动化** | Scheduled Tasks | A (如时间允许) | ☐ |
| **安全** | Audit 日志 | B | ☐ |
| **安全** | Approval 队列 | A (Browser) | ☐ |
---
### Phase 6修复验证 + 发布评估
**流程**:
1. 汇总 Phase 1-5 所有发现的问题
2. 按缺陷分级处理:
- P0: 已在测试过程中立即修复
- P1: Phase 6 集中修复
- P2/P3: 记录到发布说明的 known issues
3. 修复后回归验证(只测修复点相关的功能)
4. 生成发布评估报告
---
## 4. 缺陷分级标准
| 级别 | 定义 | 处理方式 | 例子 |
|------|------|----------|------|
| **P0 - Crash** | 应用崩溃、白屏、数据丢失 | 立即停止测试,当场修复 | 窗口崩溃、IndexedDB 损坏 |
| **P1 - 阻塞** | 核心功能不可用,无法继续测试 | 当轮修复后重新验证 | SSE 无响应、登录失败、Agent 无法切换 |
| **P2 - 功能缺陷** | 功能可用但结果不正确或不完整 | 记录Phase 6 统一修复 | Token 计数为 0、Pipeline 步骤状态不更新 |
| **P3 - 体验问题** | 功能可用但体验不佳 | 记录,发布后迭代 | 对话列表冗余、动画卡顿 |
| **KNOWN** | 已知的外部限制 | 标注为 known limitation | Kimi `__ENTITY_N__`、模型 API 超时 |
---
## 5. 发布标准Go/No-Go
| 指标 | Go可发布 | No-Go不可发布 |
|------|-------------|-------------------|
| P0 缺陷 | 0 | >= 1 |
| P1 缺陷 | <= 2 且有 workaround | >= 3 或无 workaround |
| 核心路径 | 聊天+Agent+认证 100% 通过 | 任一核心路径未覆盖 |
| 功能矩阵覆盖 | >= 90% UI 入口点已测 | < 80% |
| 稳定性 | 单次 50+ 消息无 crash | 50 消息内 crash |
| 多模型验证 | >= 2 个模型完整通过 | 仅 1 个模型通过 |
| React 稳定性 | 无 Maximum update depth 异常 | 出现无限渲染 |
---
## 6. 测试报告模板
每个角色测试完成后生成一份结构化报告:
```markdown
## 角色 X 测试报告
### 基本信息
- 角色: [身份描述]
- 模型: [LLM Provider + Model]
- 执行日期: YYYY-MM-DD
- 轮次: X/Y (实际/计划)
- ZCLAW 版本: [git commit hash 前 8 位]
- Tauri 版本: [从 package.json 获取]
- OS: [Windows 11 / macOS / Linux]
- WebView2 版本: [Edge WebView2 Runtime 版本]
- LLM 套餐: [free / paid]
### 结果汇总
- Pass: X 项
- Fail: Y 项 (P0: _ P1: _ P2: _ P3: _ KNOWN: _)
### 新发现缺陷
| ID | 级别 | 测试项 | 描述 | 复现步骤 | 状态 |
|----|------|--------|------|----------|------|
### 已修复缺陷
| ID | 原级别 | 描述 | 修复方式 | 验证结果 |
|----|--------|------|----------|----------|
### 已知限制
| 描述 | 影响范围 | 建议处理 |
|------|----------|----------|
### 功能覆盖
- 已测 UI 入口点: [列表]
- 未测 UI 入口点: [列表] + 原因
```
---
## 7. 关键文件参考
| 用途 | 文件路径 |
|------|----------|
| Tauri 命令注册 | `desktop/src-tauri/src/lib.rs` |
| 前端 Store | `desktop/src/store/` (19 文件) |
| Gateway Client | `desktop/src/lib/gateway-client.ts` |
| SaaS Client | `desktop/src/lib/saas-client.ts` |
| Kernel Client | `desktop/src/lib/kernel-client.ts` |
| WebMCP 工具 | `desktop/src/lib/webmcp-tools.ts` |
| Hands 配置 | `hands/` (9 HAND.toml) |
| 技能定义 | `skills/` (75 SKILL.md) |
| Pipeline 模板 | `crates/zclaw-pipeline/templates/` (17 YAML) |
| 组件目录 | `desktop/src/components/` (~53 组件) |
| 系统真实状态 | `docs/TRUTH.md` |
---
## 8. 风险与缓解
| 风险 | 概率 | 影响 | 缓解措施 |
|------|------|------|----------|
| 模型 API 不稳定 | 高 | 测试轮次浪费 | 准备备用模型Kimi 挂了切 GLM |
| 配额提前耗尽 | 高 | 无法完成测试 | Admin 预充值、准备多个测试账号 |
| Kimi ENTITY bug | 中 | 角色A数据被污染 | 测到即标注,不影响其他角色 |
| 底层 P0 阻塞 | 低 | 全部测试暂停 | Phase 1 先验证基础,尽早暴露 |
| Browser Hand 失败 | 高 | 11 个 browser 命令不可测 | 若 Fantoccini 未安装则标注 KNOWN 并跳过不阻塞发布若已安装则只测试简单导航打开URL+截图),不测试复杂表单填写 |