test: add T1 Hands audit report and baseline results
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
This commit is contained in:
iven
2026-04-05 18:19:32 +08:00
parent 0a3ba2fad4
commit 5877e794fa
9 changed files with 7512 additions and 0 deletions

View File

@@ -0,0 +1,220 @@
# T1 Hands 自主能力 测试报告
> **执行日期**: 2026-04-05 | **测试工具**: tauri-mcp execute_js | **V12 基线**: 58/100
## 摘要
- **执行用例数**: 18/235 个需 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 | 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 返回值结构:
```json
{
"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
1. **supervised 模式**: browser/twitter 正确进入 `pending_approval` 状态
2. **approval_list**: 正确返回 2 条 pending 审批
3. **approval_respond(approved: true)**: 审批通过后 Hand 开始执行
4. **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`, `error`
- `created_at`, `started_at`, `completed_at`, `duration_ms`
- `trigger_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` 返回完整配置:
```json
{
"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 并发问题P1SaaS 后端)
- toolCount/metricCount 硬编码P2

Binary file not shown.

After

Width:  |  Height:  |  Size: 906 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 906 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 906 B