test: add T4 Classroom system audit report
Some checks failed
CI / E2E Tests (push) Has been cancelled
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
Some checks failed
CI / E2E Tests (push) Has been cancelled
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
T4 Classroom (health 70→75, +5): - M11-01 P1 blocking_lock 已修复 (try_lock) - M11-02 P1 map_err 已修复 - M11-03 P1 持久化已修复 (SQLite) - M11-06 Date.now→crypto.randomUUID 已修复 - NEW P1: GenerationPipeline 硬编码 model="default" 导致课堂生成 404
This commit is contained in:
142
docs/test-results/T4-classroom/REPORT.md
Normal file
142
docs/test-results/T4-classroom/REPORT.md
Normal file
@@ -0,0 +1,142 @@
|
||||
# T4 课堂系统 测试报告
|
||||
|
||||
> **执行日期**: 2026-04-05 | **测试工具**: tauri-mcp execute_js + 代码审查 | **V12 基线**: 70/100
|
||||
|
||||
## 摘要
|
||||
|
||||
- **执行用例数**: 7/12(5 个需已生成课堂数据,因 P1 缺陷无法执行)
|
||||
- **代码审查确认**: 8 项 V12 问题验证
|
||||
- **已修复**: 4 ✅
|
||||
- **未修复**: 3 ⚠️
|
||||
- **新发现缺陷**: 1 (P1)
|
||||
|
||||
### 缺陷统计
|
||||
|
||||
| 级别 | 数量 | 说明 |
|
||||
|------|------|------|
|
||||
| P0 | 0 | - |
|
||||
| P1 | 1 | GenerationPipeline 硬编码 model="default",SaaS relay 404(新发现) |
|
||||
| P2 | 2 | LLM 失败无 placeholder 标记; 生成完成强制打开 player |
|
||||
| P3 | 2 | HTML export 内容不完整; 白板两套渲染实现未统一 |
|
||||
|
||||
---
|
||||
|
||||
## V12 已知问题验证
|
||||
|
||||
| V12 ID | 描述 | V12 严重度 | 验证结果 | 备注 |
|
||||
|--------|------|-----------|---------|------|
|
||||
| M11-01 | is_cancelled() blocking_lock 死锁 | P1 | ✅ **已修复** | generate.rs:141-147 改用 `try_lock()`,避免 tokio 死锁 |
|
||||
| M11-02 | LLM 调用无 map_err | P1 | ✅ **已修复** | mod.rs:431-434 已加 `.map_err`,错误正确传播 |
|
||||
| M11-03 | 课堂数据仅存内存 | P1 | ✅ **已修复** | persist.rs 实现了 SQLite 持久化(classrooms.db) |
|
||||
| M11-04 | LLM 失败静默 fallback | P2 | ⚠️ **未修复** | chat.rs:82-93 LLM 失败 fallback 到 placeholder 无标记 |
|
||||
| M11-05 | 生成完成强制打开 player | P2 | ⚠️ **未修复** | classroomStore.ts:124 无条件 `classroomOpen: true` |
|
||||
| M11-06 | Chat Message ID 用 Date.now() | P2 | ✅ **已修复** | classroomStore.ts:176 使用 `crypto.randomUUID()` |
|
||||
| M11-07 | 白板两套渲染实现 | P3 | ⚠️ **未修复** | SceneRenderer 内嵌 SVG + WhiteboardCanvas.tsx 独立组件 |
|
||||
| M11-08 | HTML export 内容不完整 | P3 | ⚠️ **未修复** | export.rs:97-103 只渲染 title+type+duration,缺 key_points/notes |
|
||||
|
||||
---
|
||||
|
||||
## 测试用例详细结果
|
||||
|
||||
### ❌ TC-4-01 | 课堂生成(正常)
|
||||
|
||||
**结果**: FAIL(新发现 P1 缺陷)
|
||||
|
||||
```
|
||||
Error: Outline generation failed: LLM error: API error 404 Not Found:
|
||||
{"error":"NOT_FOUND","message":"未找到: 模型 default 不存在或未启用"}
|
||||
```
|
||||
|
||||
**根因**: `zclaw-kernel/src/generation/mod.rs:416` — `CompletionRequest` 硬编码 `model: "default"`,SaaS relay 需要实际模型名(如 `glm-4-flash`)。Kernel driver 返回模型配置但 GenerationPipeline 未使用。
|
||||
|
||||
**影响**: 课堂生成完全不可用。
|
||||
|
||||
### ✅ TC-4-02 | M11-01 验证: blocking_lock 死锁
|
||||
|
||||
**结果**: PASS(已修复,代码审查确认)
|
||||
|
||||
generate.rs:141-147 使用 `try_lock()` + `Err(_)` fallback,不会阻塞 tokio runtime。
|
||||
|
||||
### ✅ TC-4-03 | M11-02 验证: LLM 无 map_err
|
||||
|
||||
**结果**: PASS(已修复,代码审查确认)
|
||||
|
||||
mod.rs:431-434 `.map_err(|e| ZclawError::LlmError(...))`,Stage 1/2 均有 `.map_err`。
|
||||
|
||||
### ⏭️ TC-4-04~TC-4-09 | 场景播放/TTS/白板/持久化/聊天/导出
|
||||
|
||||
**结果**: SKIP
|
||||
|
||||
依赖课堂生成成功。因 TC-4-01 P1 缺陷,无法执行端到端测试。
|
||||
|
||||
### ✅ TC-4-07 | M11-03 验证: 课堂数据持久化(代码审查)
|
||||
|
||||
**结果**: PASS(已修复)
|
||||
|
||||
- `classroom_commands/persist.rs`: SQLite 持久化实现完整
|
||||
- DB 路径: `{app_data_dir}/classroom/classrooms.db`
|
||||
- 表: `classrooms` + `classroom_chats`
|
||||
- 生成/聊天后自动保存(generate.rs:223, chat.rs:108)
|
||||
|
||||
### ✅ TC-4-10 | M11-04 验证: LLM 失败静默 fallback(代码审查)
|
||||
|
||||
**结果**: FAIL(未修复)
|
||||
|
||||
chat.rs:82-93:
|
||||
```rust
|
||||
let agent_responses = match generate_llm_responses(...).await {
|
||||
Ok(responses) => responses,
|
||||
Err(e) => {
|
||||
tracing::warn!("LLM chat generation failed, using placeholders: {}", e);
|
||||
generate_placeholder_responses(...) // 无 isPlaceholder 标记
|
||||
}
|
||||
};
|
||||
```
|
||||
|
||||
### ✅ TC-4-11 | M11-05 验证: 生成完成强制打开(代码审查)
|
||||
|
||||
**结果**: FAIL(未修复)
|
||||
|
||||
classroomStore.ts:124:
|
||||
```typescript
|
||||
set({ classroomOpen: true }); // 无条件设置,不检查用户是否手动关闭
|
||||
```
|
||||
|
||||
### ✅ TC-4-12 | classroom_list/classroom_get 基本验证
|
||||
|
||||
**结果**: PASS
|
||||
|
||||
- `classroom_list` → `[]`(空列表,正确)
|
||||
- `classroom_get("nonexistent-id")` → `"Classroom 'nonexistent-id' not found"`(错误信息明确)
|
||||
|
||||
---
|
||||
|
||||
## 新发现问题
|
||||
|
||||
| TC-ID | 描述 | 场景类型 | 优先级 | 状态 |
|
||||
|-------|------|---------|--------|------|
|
||||
| TC-4-D01 | GenerationPipeline 硬编码 model="default",SaaS relay 404 | 正常 | **P1** | 新发现 |
|
||||
|
||||
**TC-4-D01 详情**:
|
||||
- 文件: `crates/zclaw-kernel/src/generation/mod.rs:416` 和 `:490`
|
||||
- `CompletionRequest { model: "default".to_string(), ... }` — SaaS relay 需要实际模型名
|
||||
- 修复建议: 从 kernel config 获取 `llm.model` 字段传入 GenerationPipeline
|
||||
|
||||
---
|
||||
|
||||
## 健康度评估
|
||||
|
||||
| 维度 | V12 基线 | 本次评估 | 变化 |
|
||||
|------|---------|---------|------|
|
||||
| **综合** | **70/100** | **75/100** | **+5** |
|
||||
|
||||
**提升原因**:
|
||||
- M11-01 P1 死锁风险已修复(try_lock)
|
||||
- M11-02 P1 LLM 错误处理已修复(map_err)
|
||||
- M11-03 P1 数据持久化已修复(SQLite)
|
||||
- M11-06 Chat ID 碰撞已修复(crypto.randomUUID)
|
||||
|
||||
**残留风险**:
|
||||
- **P1**: GenerationPipeline 硬编码 "default" 模型 → 课堂生成完全不可用
|
||||
- P2: LLM 失败 placeholder 无标记(M11-04)
|
||||
- P2: 生成完成强制打开 player(M11-05)
|
||||
Reference in New Issue
Block a user