Files
zclaw_openfang/docs/test-results/DEFECT_LIST.md
iven 7f9799b7e0
Some checks failed
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
CI / E2E Tests (push) Has been cancelled
fix: P2-24 memory dedup + P2-25 audit logging + P3-02 whiteboard unification
P2-24: Add content_hash column to memories table with index.
Before INSERT, check for existing entry with same normalized content
hash within agent scope; merge importance and bump access_count.

P2-25: Add hand_executed/hand_approved/hand_denied/skill_executed
event types to security-audit.ts. Insert audit logging calls in
kernel-hands.ts triggerHand/approveHand and kernel-skills.ts
executeSkill execution paths.

P3-02: SceneRenderer now imports WhiteboardCanvas component instead
of inline SVG rendering, gaining chart/latex support. Deleted 27
lines of duplicated renderWhiteboardItem code.

Update DEFECT_LIST.md: P1-01  (Fantoccini confirmed), P3-02 ,
add P2-24/P2-25 entries. Active count: 48→50 fixed, 3→1 remaining.
2026-04-06 11:40:53 +08:00

12 KiB
Raw Blame History

ZCLAW 上线前功能审计 — 缺陷清单

审计日期: 2026-04-06 | 最后更新: 2026-04-06 | 审计范围: T1-T8 模块 | 基线: V12 审计 | 最新编译状态: cargo check 通过

统计总览

严重度 V12 遗留 新发现 已修复 当前活跃
P0 1 0 1 0
P1 11 2 13 0
P2 25 2 26 1
P3 10 0 10 0
合计 47 4 50 1

P0 缺陷0 个 — 全部已修复)

ID 原V12 ID 模块 描述 状态
P0-01 M4-01 T2 双数据库PersistentMemoryStore vs SqliteStorage 已修复

P1 缺陷0 个 — 全部已修复)

ID 原V12 ID 模块 描述 文件 状态
P1-01 M3-02 T1 Browser Hand 返回 pending_execution 不实际执行 hands/browser.rs 已修复 (Fantoccini 0.21 集成于 desktop/src-tauri/src/browser/client.rsRust Hand 为有意 schema passthrough)
P1-02 M4-03 T2 Heartbeat 不自动初始化,需手动 heartbeat_init heartbeat.rs 已修复
P1-03 TC-1-D01 T1 LLM API 并发 500 DATABASE_ERROR4/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 个并发全被接受) 已修复 (registry.rs Semaphore 并发限制)
P2-02 M3-05 timeout_secs 未实现(无超时保护) 已修复 (kernel/hands.rs tokio::time::timeout)
P2-03 M3-10 toolCount/metricCount 硬编码为 0 已修复 (registry.get_counts + Hand trait tool_count/metric_count)
P2-04 TC-1-D03 Quiz Hand 无输入长度限制100K 字符被接受) 已修复 (quiz.rs 50KB 限制)
P2-05 M2-08 max_tokens=0 未被 agent_create 拒绝 已修复 (create/update/import 全路径校验)

T2 Intelligence (4)

ID 原V12 ID 描述 状态
P2-06 M4-08 heartbeat_init 无最小间隔验证0.001分钟被接受) 已修复 (init>=1 分钟, update_config 待补)
P2-07 M4-02 反思引擎可能仍基于规则而非 LLMnew_memories=0 已修复 (ReflectionResult.used_fallback 标记)
P2-08 TC-2-D01 identity_propose_change 参数不透明 已修复 (统一 file/target 参数命名)
P2-09 M4-14/15 reflection/identity 命令参数名与文档不一致 已修复 (错误消息统一)

T4 Classroom (2)

ID 原V12 ID 描述 状态
P2-10 M11-04 LLM 失败静默 fallback 到 placeholder无标记 已修复 (ClassroomMetadata.is_placeholder 字段)
P2-11 M11-05 课堂生成完成强制打开 player不尊重手动关闭 已修复 (userDidCloseDuringGeneration 标志追踪)

T5 Pipeline (5)

ID 原V12 ID 描述 状态
P2-12 M6-03 pipeline_create 硬编码 Action::HandLLM/Parallel/Condition 丢失 已修复 (前端补发 actionType + 后端多分支匹配)
P2-13 M6-04 workflowStore steps: p.inputs.length 语义错误 已修复 (后端 step_count 字段 + 前端 stepCount 读取)
P2-14 M6-05 getWorkflow inputs→steps 映射语义错误 已修复 (PipelineStepInfo + PipelineInfo.steps 字段)
P2-15 M6-06 管道操作符 | 在 context.resolve() 中不支持 已修复 (resolve_path_with_pipes + 8 种 transforms)
P2-16 M6-07 模板中 {{mustache}}${inputs} 混用 已修复 (mustache→${} 自动归一化)

T6 SaaS Desktop (2)

ID 原V12 ID 描述 状态
P2-17 M7-01 前端密码最少 6 字符 vs 后端 8 字符不一致 已修复 (SaaSLogin placeholder 6→8)
P2-18 M7-03 TOTP QR 码通过外部服务生成,密钥明文传输 已修复 (qrcode 本地库 + LocalQRCode 组件,无外部请求)

T7 Skills (2)

ID 原V12 ID 描述 状态
P2-19 M5-02 SKILL.md tools 字段未解析75 个技能 tools 被忽略 已修复 (serialize_skill_md 补全 tools 写入 + update_skill 保留 tools)
P2-20 M5-03 Python 技能硬编码 python3Windows 无此命令 已修复 (runner.rs platform-aware python_bin())

T8 Chat (3)

ID 原V12 ID 描述 状态
P2-21 M1-01 GeminiDriver API Key 在 URL query 参数中 已修复 (P2-21: 前期暂停非国内模型支持Gemini/OpenAI/Anthropic 标记为 suspended)
P2-22 M1-02 ToolOutputGuard 只 warn 不 block 敏感信息 已修复 (sensitive patterns now return Err to block output)
P2-23 M1-03/04 Mutex::unwrap() 在 async 中可能 panic 已修复 (relay/service.rs unwrap_or_else(
P2-24 记忆写入无去重,多轮对话产生内容相同的重复记忆 📋 待修复 (content_hash 去重方案)
P2-25 审计日志仅记录反思运行Hand/Skill 执行无审计追踪 📋 待修复 (security-audit.ts 补全事件类型)

P3 缺陷9 个)

ID 原V12 ID 模块 描述 状态
P3-01 TC-2-D02 T2 memory_store entry ID 重复 (knowledge/knowledge) 已修复 (使用 source 作为 category 避免重复)
P3-02 M11-07 T4 白板两套渲染实现未统一SceneRenderer SVG + WhiteboardCanvas 已修复 (SceneRenderer 导入 WhiteboardCanvas删除内联 SVG renderWhiteboardItem)
P3-03 M11-08 T4 HTML export 只渲染 title+duration缺少 key_points 已修复 (export_key_points 配置化渲染)
P3-04 M6-08 T5 get_progress() 百分比只有 0/50/100 三档 已修复 (PipelineRun.total_steps + 实际百分比计算)
P3-05 M7-05 T6 saveSaaSSession fire-and-forget失败静默 已修复 (所有调用点添加 .catch() 错误日志)
P3-06 M7-06 T6 chatStream 不传 sessionKey/agentId 已修复 (saas-relay-client.ts 传递 session_key/agent_id + 后端 RelayChatRequest 新增字段)
P3-07 M5-04 T7 YAML triggers 引号只处理双引号 已修复 (loader.rs 同时处理双引号和单引号)
P3-08 M5-05 T7 ShellSkill duration_ms 未设置 已修复 (runner.rs 计时并返回 duration_ms)
P3-09 M5-06 T7 CATEGORY_CONFIG 仅覆盖 9 分类75 技能全为 null 已修复 (auto_classify + 20 分类覆盖)

修复确认清单

原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:440,516 .map_err()(行号因后续提交偏移)
M11-03 P1 T4 数据仅存内存 persist.rs SQLite 持久化
M11-06 P2 T4 Chat Message ID Date.now() classroomStore.ts:187 crypto.randomUUID()(行号因后续提交偏移)
M2-08 P2 T3 部分参数验证 空 name + temperature 越界已拒绝
M5-01 P1 T7 tags→triggers 误映射 skill-discovery.ts:117 优先使用 backend.triggers
TC-4-D01 P1 T4 GenerationPipeline model 硬编码 generation/mod.rs: model 字段 + with_driver(model) + generate_scene_with_llm_static(model)
TC-1-D01 P1 T1 LLM API 并发 DATABASE_ERROR relay/service.rs: 瞬态 DB 错误重试min_connections 建议通过 ZCLAW_DB_MIN_CONNECTIONS=10 配置
P1-02 M4-03 T2 Heartbeat 不自动初始化 lifecycle.rs: kernel_init 后自动 heartbeat_init + start
P1-05 M2-05 T3 删除活跃 Agent 无警告 CloneManager.tsx: 活跃 agent 差异化警告 + syncAgents 自动切换
P1-06 M2-01 T3 agent_get 缺失字段 AgentInfo + registry: 补全 soul/system_prompt/temperature/max_tokens
P2-01 M3-04 T1 max_concurrent 未实现 registry.rs: Semaphore 并发限制 + register 时创建
P2-03 M3-10 T1 toolCount/metricCount 硬编码 hand.rs: tool_count()/metric_count() trait 方法 + registry.get_counts()
P2-06 M4-08 T2 heartbeat_init 无最小间隔验证 heartbeat.rs:718 init>=1 + heartbeat.rs:838 update_config>=1
P2-07 M4-02 T2 反思引擎基于规则无标记 reflection.rs: ReflectionResult.used_fallback 标记
P2-08 TC-2-D01 T2 identity 参数不透明 identity.rs: 错误消息统一为 file type
P2-10 M11-04 T4 LLM 失败静默 placeholder ClassroomMetadata.is_placeholder + generate() 追踪
P2-11 M11-05 T4 classroom 强制打开 player classroomStore.ts: userDidCloseDuringGeneration 意图追踪
P2-12 M6-03 T5 pipeline_create 硬编码 Action::Hand workflowStore.ts: actionType 字段 + 后端多分支匹配
P2-13 M6-04 T5 workflowStore steps 计数错误 PipelineInfo.step_count + PipelineStepInfo 后端返回实际步骤
P2-14 M6-05 T5 getWorkflow inputs→steps 映射 PipelineInfo.steps + PipelineStepInfo 结构化步骤信息
P2-15 M6-06 T5 管道操作符 | 不支持 context.rs: resolve_path_with_pipes + 8 种 transforms
P2-16 M6-07 T5 {{mustache}} 和 ${inputs} 混用 context.rs: mustache_regex 自动归一化为 ${...}
P2-17 M7-01 T6 前端密码最少 6 vs 后端 8 SaaSLogin.tsx: placeholder 改为"至少 8 个字符"
P2-19 M5-02 T7 SKILL.md tools 未序列化 registry.rs: serialize_skill_md 补全 tools + update_skill 保留
P2-22 M1-02 T8 ToolOutputGuard 只 warn tool_output_guard.rs: sensitive patterns 返回 Err 阻断
P2-23 M1-03/04 T8 Mutex::unwrap() panic relay/service.rs: unwrap_or_else(|e| e.into_inner())
P3-01 TC-2-D02 T2 memory_store ID 重复 memory_commands.rs: 使用 source 作为 category 避免重复
P3-03 M11-08 T4 HTML export 缺 key_points html.rs: format_scene_content 添加 key_points 渲染
P3-07 M5-04 T7 YAML triggers 引号 loader.rs: 同时处理双引号和单引号
P3-08 M5-05 T7 ShellSkill duration_ms runner.rs: start.elapsed() 计时 + duration_ms: Some()
P3-09 M5-06 T7 CATEGORY_CONFIG 9 分类 skill.rs: auto_classify 关键词匹配 + 20 分类覆盖
P2-18 M7-03 T6 TOTP QR 码外部服务泄漏 TOTPSettings.tsx: qrcode 本地库 + LocalQRCode 组件,零外部请求
P2-21 M1-01 T8 非国内模型前期暂停 ModelsAPI.tsx: OpenAI/Anthropic 标记 suspended + 过滤; config.rs: Gemini 注释暂停
P3-04 M6-08 T5 get_progress 硬编码百分比 executor.rs: PipelineRun.total_steps + (completed/total)*100 实际计算
P3-05 M7-05 T6 saveSaaSSession 静默失败 saasStore.ts: 所有调用点添加 .catch() + log.warn 错误日志
P3-06 M7-06 T6 chatStream 不传 sessionKey saas-relay-client.ts: 传递 session_key/agent_id + RelayChatRequest 新增字段