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

5.2 KiB
Raw Blame History

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:416CompletionRequest 硬编码 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:

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:

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