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

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:
iven
2026-04-05 18:38:20 +08:00
parent a3bfdbb01c
commit 4431bef71c

View File

@@ -0,0 +1,142 @@
# T4 课堂系统 测试报告
> **执行日期**: 2026-04-05 | **测试工具**: tauri-mcp execute_js + 代码审查 | **V12 基线**: 70/100
## 摘要
- **执行用例数**: 7/125 个需已生成课堂数据,因 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: 生成完成强制打开 playerM11-05