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
221 lines
7.6 KiB
Markdown
221 lines
7.6 KiB
Markdown
# 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 | 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 并发问题(P1,SaaS 后端)
|
||
- toolCount/metricCount 硬编码(P2)
|