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
Phase 1 baseline + T1 Hands functional audit: - Desktop vitest: 174/185 passed (chatStore refactoring) - Admin vitest: 36/71 passed (API mock issues) - Cargo check: 0 errors - T1 Hands: 18/23 TCs executed, health 58→68 (+10) - Key findings: M3-01/M3-06 fixed, M3-02/M3-04 unfixed - New P1: LLM API concurrent DATABASE_ERROR
7.6 KiB
7.6 KiB
T1 Hands 自主能力 测试报告
执行日期: 2026-04-05 | 测试工具: tauri-mcp execute_js | V12 基线: 58/100
摘要
- 执行用例数: 18/23(5 个需 UI 交互或长时间等待,未执行)
- 通过: 11 ✅
- 未修复(已知问题确认): 5 ⚠️
- 已修复(V12 问题): 2 ✅
- 未验证: 5 ❓
- 新发现缺陷: 3
缺陷统计
| 级别 | 数量 | 说明 |
|---|---|---|
| P0 | 0 | - |
| P1 | 2 | LLM API 并发 DATABASE_ERROR; Browser Hand 不实际执行 |
| P2 | 3 | 无输入长度限制; toolCount/metricCount 硬编码; max_concurrent 未实现 |
| P3 | 1 | timeout_secs 未实现 |
V12 已知问题验证
| V12 ID | 描述 | V12 严重度 | 验证结果 | 备注 |
|---|---|---|---|---|
| M3-01 | run_id 丢失 | P1 | ✅ 已修复 | hand_execute 返回值含 runId 字段(如 8267f7a0-...) |
| M3-02 | Browser Hand 只返回指令不执行 | P1 | ⚠️ 未修复 | 返回 status: "pending_execution" 但未实际操作浏览器 |
| M3-03 | browserHandStore 绕过审批 | P1 | ✅ 行为正确 | supervised 模式正确进入审批流程,autonomous 直接执行 |
| M3-04 | max_concurrent 未实现 | P2 | ⚠️ 未修复 | 5 个并发 quiz 全部被接受(max_concurrent: 0) |
| M3-05 | timeout_secs 未实现 | P2 | ⚠️ 未修复 | timeout_secs: 0,无超时保护 |
| M3-06 | hand_execute 返回值类型不匹配 | P2 | ✅ 已修复 | 返回 { success, output, error, durationMs, runId } 完整结构 |
| M3-07 | hand-execution-complete 事件未监听 | P1 | ❓ 未验证 | 需 UI 交互观察 |
| M3-08 | 审批条目永不过期 | P2 | ❓ 未验证 | 需长时间等待 |
| M3-09 | 重复审批路径 | P2 | ✅ 两条路径存在 | hand_approve 和 approval_respond 参数名不同但功能重叠 |
| M3-10 | tool_count/metric_count 硬编码为 0 | P2 | ⚠️ 未修复 | 所有 Hand 的 toolCount: 0, metricCount: 0 |
| M3-11 | Hand 列举正常 | - | ✅ 通过 | 9 个 Hand 全部返回 |
| M3-12 | hand_trigger 自主级别映射 | P1 | ⚠️ 部分修复 | supervised 正确要求审批,但 autonomous 下 Browser 返回 pending_execution |
| M3-13 | Clip Hand 路径单引号 | P2 | ❓ 未验证 | 需 FFmpeg 环境 |
测试用例详细结果
✅ TC-1-01 | Hand 列举(正常)
结果: PASS
hand_list 返回 9 个已启用 Hand:
| Hand | name | enabled | needsApproval | requirementsMet | dependencies |
|---|---|---|---|---|---|
| clip | 视频剪辑 | true | false | ❌ | ffmpeg |
| Twitter 自动化 | true | true | ❌ | twitter_api_key | |
| researcher | 研究员 | true | false | ❌ | network |
| browser | 浏览器 | true | true | ❌ | webdriver |
| slideshow | 幻灯片 | true | false | ✅ | - |
| quiz | 测验 | true | false | ✅ | - |
| whiteboard | 白板 | true | false | ✅ | - |
| collector | 数据采集器 | true | false | ❌ | network |
| speech | 语音合成 | true | false | ✅ | - |
✅ TC-1-02 | Quiz Hand 直接触发(正常)
结果: PASS
- 输入:
{ action: "generate", topic: "Rust 基础测试" } - 输出: 成功生成 5 道选择题,含
runId: "58d296cc-1be3-4632-8325-f15b4a7708dc" - 耗时: ~24 秒
✅ TC-1-03 | M3-01 run_id 丢失验证
结果: PASS(已修复)
hand_execute 返回值结构:
{
"success": true/false,
"output": { ... },
"error": null,
"durationMs": 24499,
"runId": "58d296cc-..."
}
runId 字段已稳定存在于所有返回值中。
⚠️ TC-1-05 | M3-02 Browser Hand 断裂
结果: FAIL(未修复)
- 输入:
{ action: "navigate", url: "https://example.com" } - 输出:
{ action: "navigate", status: "pending_execution", url: "https://example.com" } - 问题: 返回结构化指令但未实际执行浏览器操作
✅ TC-1-06 | 审批流程(正常)
结果: PASS
- supervised 模式: browser/twitter 正确进入
pending_approval状态 - approval_list: 正确返回 2 条 pending 审批
- approval_respond(approved: true): 审批通过后 Hand 开始执行
- approval_respond(approved: false): 拒绝成功
⚠️ TC-1-08 | M3-04 max_concurrent 未实现
结果: FAIL(未修复)
- 同时触发 5 个 quiz Hand
- 5/5 全部被接受执行(1 个成功,4 个因 LLM API 500 失败)
hand_get返回max_concurrent: 0表示无限制
✅ TC-1-12 | 不存在 Hand 触发(异常)
结果: PASS
- 输入:
id: "nonexistent-hand" - 输出:
"Hand not found: nonexistent-hand" - 错误信息明确
✅ TC-1-15 | Hand 执行状态查询(正常)
结果: PASS
hand_run_list 返回 13 条历史记录,包含完整字段:
id,hand_name,status,params,result,errorcreated_at,started_at,completed_at,duration_mstrigger_source: "manual"
✅ TC-1-16 | M3-06 返回值类型验证
结果: PASS(已修复)
返回值结构 { success, output, error, durationMs, runId } 完整。
⚠️ TC-1-17 | M3-10 toolCount/metricCount 硬编码
结果: FAIL(未修复)
所有 9 个 Hand 的 toolCount: 0, metricCount: 0。
✅ TC-1-18 | TOML 配置加载验证
结果: PASS
hand_get 返回完整配置:
{
"dependencies": [],
"description": "生成和管理测验题目...",
"enabled": true,
"id": "quiz",
"input_schema": { "properties": { "action": ..., "quiz_id": ..., "topic": ... } },
"max_concurrent": 0,
"name": "测验",
"needs_approval": false,
"tags": ["assessment", "education"],
"timeout_secs": 0
}
✅ TC-1-19 | Hand 错误处理(异常)
结果: PASS
input: null→"invalid type: null, expected internally tagged enum ResearcherAction"- 错误信息明确,非 panic
⚠️ TC-1-20 | M3-12 自主级别映射
结果: PARTIAL
- supervised: ✅ 正确要求审批("监督模式下所有 Hand 执行需要用户审批")
- autonomous: ⚠️ Browser 返回 pending_execution 而非实际执行
- Quiz 在 autonomous 下正常执行
⚠️ TC-1-23 | 超长输入触发
结果: FAIL(无输入验证)
- 100K 字符 topic 被 quiz 接受并尝试执行
- 最终因 LLM API 问题失败,但未在输入层拒绝
新发现问题
| TC-ID | 描述 | 场景类型 | 优先级 | 状态 | 备注 |
|---|---|---|---|---|---|
| TC-1-D01 | LLM API 并发时 500 DATABASE_ERROR | 边界 | P1 | 新发现 | 5 个并发 quiz 请求,4 个返回 {"error":"DATABASE_ERROR"},仅第 1 个成功。SaaS 后端数据库连接池可能不足 |
| TC-1-D02 | Browser Hand autonomous 返回 pending_execution | 正常 | P1 | 已知(M3-02) | 即使 autonomous 模式也不实际执行浏览器操作 |
| TC-1-D03 | Quiz 无输入长度限制 | 边界 | P2 | 新发现 | 100K 字符 topic 被接受,应设上限 |
健康度评估
| 维度 | V12 基线 | 本次评估 | 变化 |
|---|---|---|---|
| 功能完整性 | 58 | 68 | +10 |
| 代码质量 | - | - | N/A |
| 测试覆盖 | - | - | N/A |
| 文档完备 | - | - | N/A |
| 集成连通性 | - | - | N/A |
| 综合 | 58/100 | 68/100 | +10 |
提升原因:
- M3-01 run_id 丢失已修复
- M3-06 返回值类型已修复
- 审批流程基本闭环(approval_list/respond 工作正常)
- hand_run_list 历史记录功能完整
- 错误处理改善(null input / 不存在 Hand 都返回明确错误)
残留风险:
- Browser Hand 不实际执行(P1)
- max_concurrent/timeout_secs 未实现(P2)
- LLM API 并发问题(P1,SaaS 后端)
- toolCount/metricCount 硬编码(P2)