From a458e3f7d85ba341929e247f9e2e97eb21532547 Mon Sep 17 00:00:00 2001 From: iven Date: Sun, 5 Apr 2026 18:52:39 +0800 Subject: [PATCH] docs: add pre-launch audit defect list and release readiness assessment MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit DEFECT_LIST.md: 38 active defects (0 P0, 6 P1, 23 P2, 9 P3) - 13 V12 issues confirmed fixed - 4 new issues discovered during testing RELEASE_READINESS.md: Overall health 73→79 (+6) - 2 blocking items: classroom model hardcode + LLM API concurrency - T5-T8 modules at 78-91/100 (low risk) - Recommended: fix 2 blockers then release as Beta --- docs/test-results/DEFECT_LIST.md | 132 +++++++++++++++++++++++++ docs/test-results/RELEASE_READINESS.md | 109 ++++++++++++++++++++ 2 files changed, 241 insertions(+) create mode 100644 docs/test-results/DEFECT_LIST.md create mode 100644 docs/test-results/RELEASE_READINESS.md diff --git a/docs/test-results/DEFECT_LIST.md b/docs/test-results/DEFECT_LIST.md new file mode 100644 index 0000000..f08e8a2 --- /dev/null +++ b/docs/test-results/DEFECT_LIST.md @@ -0,0 +1,132 @@ +# ZCLAW 上线前功能审计 — 缺陷清单 + +> **审计日期**: 2026-04-05 | **审计范围**: T1-T8 模块 | **基线**: V12 审计 + +## 统计总览 + +| 严重度 | V12 遗留 | 新发现 | 已修复 | 当前活跃 | +|--------|---------|--------|--------|---------| +| **P0** | 1 | 0 | 1 | **0** | +| **P1** | 11 | 2 | 7 | **6** | +| **P2** | 25 | 2 | 4 | **23** | +| **P3** | 10 | 0 | 1 | **9** | +| **合计** | **47** | **4** | **13** | **38** | + +--- + +## P0 缺陷(0 个 — 全部已修复) + +| ID | 原V12 ID | 模块 | 描述 | 状态 | +|----|---------|------|------|------| +| ~~P0-01~~ | M4-01 | T2 | 双数据库(PersistentMemoryStore vs SqliteStorage) | ✅ 已修复 | + +--- + +## P1 缺陷(6 个) + +| ID | 原V12 ID | 模块 | 描述 | 文件 | 状态 | +|----|---------|------|------|------|------| +| P1-01 | M3-02 | T1 | Browser Hand 返回 pending_execution 不实际执行 | hands/browser.rs | ⚠️ 未修复 | +| P1-02 | M4-03 | T2 | Heartbeat 不自动初始化,需手动 heartbeat_init | heartbeat.rs | ⚠️ 未修复 | +| P1-03 | TC-1-D01 | T1 | LLM API 并发 500 DATABASE_ERROR(4/5 并发失败) | saas/relay | ⚠️ 新发现 | +| P1-04 | TC-4-D01 | T4 | GenerationPipeline 硬编码 model="default",SaaS relay 404 | zclaw-kernel/generation/mod.rs:416 | ⚠️ **新发现** | +| P1-05 | M2-05 | T3 | 删除活跃 Agent 无警告,无自动切换 | kernel_commands/agent.rs | ⚠️ 未修复 | +| P1-06 | M2-01 | T3 | agent_get 不返回 soul/system_prompt/temperature/max_tokens | kernel_commands/agent.rs | ⚠️ 部分修复 | + +--- + +## P2 缺陷(23 个) + +### T1 Hands (5) + +| ID | 原V12 ID | 描述 | 状态 | +|----|---------|------|------| +| P2-01 | M3-04 | max_concurrent 未实现(5 个并发全被接受) | ⚠️ 未修复 | +| P2-02 | M3-05 | timeout_secs 未实现(无超时保护) | ⚠️ 未修复 | +| P2-03 | M3-10 | toolCount/metricCount 硬编码为 0 | ⚠️ 未修复 | +| P2-04 | TC-1-D03 | Quiz Hand 无输入长度限制(100K 字符被接受) | ⚠️ 新发现 | +| P2-05 | M2-08 | max_tokens=0 未被 agent_create 拒绝 | ⚠️ 部分修复 | + +### T2 Intelligence (4) + +| ID | 原V12 ID | 描述 | 状态 | +|----|---------|------|------| +| P2-06 | M4-08 | heartbeat_init 无最小间隔验证(0.001分钟被接受) | ⚠️ 未修复 | +| P2-07 | M4-02 | 反思引擎可能仍基于规则而非 LLM(new_memories=0) | ⚠️ 需确认 | +| P2-08 | TC-2-D01 | identity_propose_change 参数不透明 | ⚠️ 新发现 | +| P2-09 | M4-14/15 | reflection/identity 命令参数名与文档不一致 | ⚠️ 确认 | + +### T4 Classroom (2) + +| ID | 原V12 ID | 描述 | 状态 | +|----|---------|------|------| +| P2-10 | M11-04 | LLM 失败静默 fallback 到 placeholder,无标记 | ⚠️ 未修复 | +| P2-11 | M11-05 | 课堂生成完成强制打开 player,不尊重手动关闭 | ⚠️ 未修复 | + +### T5 Pipeline (5) + +| ID | 原V12 ID | 描述 | 状态 | +|----|---------|------|------| +| P2-12 | M6-03 | pipeline_create 硬编码 Action::Hand,LLM/Parallel/Condition 丢失 | ⚠️ 未修复 | +| P2-13 | M6-04 | workflowStore steps: p.inputs.length 语义错误 | ⚠️ 未修复 | +| P2-14 | M6-05 | getWorkflow inputs→steps 映射语义错误 | ⚠️ 未修复 | +| P2-15 | M6-06 | 管道操作符 `\|` 在 context.resolve() 中不支持 | ❓ 未验证 | +| P2-16 | M6-07 | 模板中 `{{mustache}}` 和 `${inputs}` 混用 | ⚠️ 未修复 | + +### T6 SaaS Desktop (2) + +| ID | 原V12 ID | 描述 | 状态 | +|----|---------|------|------| +| P2-17 | M7-01 | 前端密码最少 6 字符 vs 后端 8 字符不一致 | ⚠️ 未修复 | +| P2-18 | M7-03 | TOTP QR 码通过外部服务生成,密钥明文传输 | ❓ 未验证 | + +### T7 Skills (2) + +| ID | 原V12 ID | 描述 | 状态 | +|----|---------|------|------| +| P2-19 | M5-02 | SKILL.md tools 字段未解析,75 个技能 tools 被忽略 | ❓ 未验证 | +| P2-20 | M5-03 | Python 技能硬编码 python3,Windows 无此命令 | ❓ 未验证 | + +### T8 Chat (3) + +| ID | 原V12 ID | 描述 | 状态 | +|----|---------|------|------| +| P2-21 | M1-01 | GeminiDriver API Key 在 URL query 参数中 | ❓ 未验证 | +| P2-22 | M1-02 | ToolOutputGuard 只 warn 不 block 敏感信息 | ❓ 未验证 | +| P2-23 | M1-03/04 | Mutex::unwrap() 在 async 中可能 panic | ❓ 未验证 | + +--- + +## P3 缺陷(9 个) + +| ID | 原V12 ID | 模块 | 描述 | 状态 | +|----|---------|------|------|------| +| P3-01 | TC-2-D02 | T2 | memory_store entry ID 重复 (knowledge/knowledge) | ⚠️ 新发现 | +| P3-02 | M11-07 | T4 | 白板两套渲染实现未统一(SceneRenderer SVG + WhiteboardCanvas) | ⚠️ 未修复 | +| P3-03 | M11-08 | T4 | HTML export 只渲染 title+duration,缺少 key_points | ⚠️ 未修复 | +| P3-04 | M6-08 | T5 | get_progress() 百分比只有 0/50/100 三档 | ⚠️ 未修复 | +| P3-05 | M7-05 | T6 | saveSaaSSession fire-and-forget,失败静默 | ❓ 未验证 | +| P3-06 | M7-06 | T6 | chatStream 不传 sessionKey/agentId | ❓ 未验证 | +| P3-07 | M5-04 | T7 | YAML triggers 引号只处理双引号 | ❓ 未验证 | +| P3-08 | M5-05 | T7 | ShellSkill duration_ms 未设置 | ❓ 未验证 | +| P3-09 | M5-06 | T7 | CATEGORY_CONFIG 仅覆盖 9 分类,75 技能全为 null | ⚠️ 未修复 | + +--- + +## 修复确认清单 + +| 原V12 ID | 模块 | 描述 | 修复证据 | +|----------|------|------|---------| +| M4-01 P0 | T2 | 双数据库统一 | unified-client.ts isTauriRuntime() 路由到 SqliteStorage | +| M3-01 P1 | T1 | run_id 丢失 | hand_execute 返回 runId 字段 | +| M3-06 P1 | T1 | 返回值类型不匹配 | {success, output, error, durationMs, runId} | +| M6-01 P1 | T5 | route_intent 未注册 | lib.rs:220 已注册 | +| M6-02 P1 | T5 | v1/v2 解析器分裂 | helpers.rs:93-115 fallback 到 v2 | +| M7-02 P1 | T6 | PUT 布尔值路径参数 | ConfigMigrationWizard.tsx:118 使用 existing.id | +| M7-04 P1 | T6 | refreshToken 未传 body | saas-auth.ts:70-71 发送 refresh_token | +| M11-01 P1 | T4 | blocking_lock 死锁 | generate.rs:141-147 改用 try_lock() | +| M11-02 P1 | T4 | LLM 无 map_err | mod.rs:431-434 .map_err() | +| M11-03 P1 | T4 | 数据仅存内存 | persist.rs SQLite 持久化 | +| M11-06 P2 | T4 | Chat Message ID Date.now() | classroomStore.ts:176 crypto.randomUUID() | +| M2-08 P2 | T3 | 部分参数验证 | 空 name + temperature 越界已拒绝 | +| M5-01 P1 | T7 | tags→triggers 误映射 | skill-discovery.ts:117 优先使用 backend.triggers | diff --git a/docs/test-results/RELEASE_READINESS.md b/docs/test-results/RELEASE_READINESS.md new file mode 100644 index 0000000..b92f8e8 --- /dev/null +++ b/docs/test-results/RELEASE_READINESS.md @@ -0,0 +1,109 @@ +# ZCLAW 发布就绪评估 + +> **评估日期**: 2026-04-05 | **基于**: T1-T8 功能审计(8 个模块) + +## 总体评分 + +| 模块 | V12 基线 | 本次评分 | 变化 | 状态 | +|------|---------|---------|------|------| +| T1 Hands 自主能力 | 58 | **68** | +10 | ⚠️ 可用 | +| T2 智能层 | 61 | **74** | +13 | ✅ 良好 | +| T3 Agent 分身 | 67 | **73** | +6 | ✅ 良好 | +| T4 课堂系统 | 70 | **75** | +5 | ⚠️ 受阻 | +| T5 Pipeline 工作流 | 72 | **78** | +6 | ✅ 良好 | +| T6 SaaS 桌面集成 | 85 | **89** | +4 | ✅ 良好 | +| T7 技能生态 | 85 | **87** | +2 | ✅ 良好 | +| T8 智能对话 | 91 | **91** | 0 | ✅ 优秀 | +| **加权平均** | **73** | **79** | **+6** | - | + +--- + +## 发布就绪判定 + +### 阻断项(必须修复才能发布) + +| # | 缺陷 | 影响 | 修复建议 | +|---|------|------|---------| +| 1 | **P1-04**: 课堂生成 model="default" 硬编码 | 课堂功能完全不可用 | generation/mod.rs:416 从 kernel config 读取模型名 | +| 2 | **P1-03**: LLM API 并发 500 DATABASE_ERROR | 高并发场景下 80% 请求失败 | SaaS 后端连接池扩容或添加队列 | + +### 强烈建议修复(影响用户体验) + +| # | 缺陷 | 影响 | +|---|------|------| +| 3 | P1-01: Browser Hand 不实际执行 | 自主浏览能力不可用 | +| 4 | P1-05: 删除活跃 Agent 无警告 | 用户可能误删唯一 Agent | +| 5 | P1-06: agent_get 不返回完整配置 | Agent 管理功能不完整 | + +### 可接受已知问题(P2/P3,可带缺陷发布) + +- 23 个 P2 问题(大部分为边界条件、参数验证、API 一致性) +- 9 个 P3 问题(UI 细节、日志、配置边缘情况) + +--- + +## 模块风险评估 + +### HIGH RISK + +**T1 Hands (68/100)** +- 核心问题: Browser Hand 不执行、并发失败 +- 可缓解: Quiz/Slideshow/Whiteboard 等正常工作的 Hand 可用 +- 建议: 标注 Browser Hand 为 "实验性" + +**T4 Classroom (75/100)** +- 核心问题: 课堂生成不可用(model 硬编码) +- 可缓解: 持久化、死锁、错误处理已修复 +- 建议: 修复 P1-04 后即可发布 + +### MEDIUM RISK + +**T2 Intelligence (74/100)** +- 核心问题: Heartbeat 不自动启动 +- 可缓解: 手动 init 可用 + +**T3 Agent (73/100)** +- 核心问题: agent_get 字段不全、删除无警告 +- 可缓解: CRUD 基本工作 + +### LOW RISK + +**T5-T8 (78-91/100)** +- 核心功能正常,P2/P3 问题不影响主要用户流程 + +--- + +## 测试覆盖 + +| 类型 | 结果 | +|------|------| +| Rust cargo test | ✅ 511/511 全部通过(10 crates, 0 failures) | +| Desktop vitest | ⚠️ 174/185 通过(11 失败在 chatStore 重构同步) | +| Admin vitest | ⚠️ 36/71 通过(29 失败在 mock/API 依赖) | +| 功能审计 (T1-T8) | ✅ 51 用例执行,13 已修复,6 P1 未修复 | +| 端到端 (T9-T12) | ⏭️ Phase 3/4,待执行 | + +--- + +## 发布建议 + +### 推荐路径: 修复 2 个阻断项后发布 + +1. **立即修复** P1-04 (generation model 硬编码) — 1 行代码改动 +2. **立即修复** P1-03 (并发 DATABASE_ERROR) — SaaS 连接池配置 +3. **发布 Beta 版本** 标注已知限制 +4. **跟进修复** P1-01/05/06 在 Beta 期间 + +### 已知限制标注 + +发布时应在 release notes 中注明: +- Browser Hand 为实验性功能 +- 课堂生成需要正确的模型配置 +- Agent 删除前请手动确认 +- Python 技能在 Windows 需手动配置 python3 命令 + +### 不建议发布的场景 + +如果以下条件不满足,不建议正式发布: +- SaaS 后端连接池未扩容(并发问题) +- 课堂 model 硬编码未修复(课堂功能不可用)