Files
zclaw_openfang/docs/test-results/T4-classroom/REPORT.md
iven 4431bef71c
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
test: add T4 Classroom system audit report
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
2026-04-05 18:38:20 +08:00

143 lines
5.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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