--- title: 已知问题 updated: 2026-04-17 status: active tags: [issues, bugs] --- # 已知问题 > 从 [[index]] 导航。完整清单见 `docs/TRUTH.md §3` ## 当前状态 | 级别 | 数量 | 状态 | |------|------|------| | P0 (崩溃) | 2 | 全部已修复 | | P1 (功能失效) | 9 | 全部已修复 | | P1.5 (代码质量) | 7 | 全部已修复 | | P2 (代码质量) | 10 | 待处理 | | V13 P1 (断链) | 3 | **全部已修复** | | V13 P2 (差距) | 3 | **全部已修复** | | E2E 04-17 HIGH | 2 | **全部已修复** (commit a504a40) | | E2E 04-17 MEDIUM | 5 | **全部已修复** (M4 admin_guard_middleware 已添加) | | E2E 04-17 LOW | 2 | **全部已验证修复** (L1 代码已统一 + L2 反序列化已修复) | ## E2E 全系统功能测试 04-17 (129 链路) > AI Agent 自动执行 (Tauri MCP + Chrome DevTools MCP + HTTP API) > 完整报告: `docs/test-evidence/2026-04-17/E2E_TEST_REPORT_2026_04_17.md` ### 通过率概要 | 指标 | 值 | |------|-----| | 总链路 | 129 | | PASS | 82 (63.6%) | | PARTIAL | 20 (15.5%) | | FAIL | 1 (0.8%) | | SKIP | 26 (20.2%) | | 有效通过率 | 102/129 = 79.1% | | CRITICAL 失败 | 0 | | SaaS API 覆盖率 | ~78% (50/64 端点) | ### HIGH (2) — ✅ 已修复 | ID | 模块 | 描述 | 状态 | |----|------|------|------| | BUG-H1 | V7 Admin | Dashboard 端点 404: `/api/v1/admin/dashboard` 未注册路由 | ✅ 已修复 (a504a40) | | BUG-H2 | V4 Memory | 记忆不去重: viking_add 相同 URI+content 添加两次均返回 "added" | ✅ 已修复 (a504a40) | ### MEDIUM (5) | ID | 模块 | 描述 | 状态 | |----|------|------|------| | BUG-M1 | V8 Billing | invoice_id 未暴露给用户端 | ✅ 已修复 (a504a40) | | BUG-M2 | V7 Prompt | 版本号不自增: PUT 更新后 current_version 保持 1 | ✅ 已修复 (a504a40) | | BUG-M3 | V4 Memory | viking_find 不按 agent 隔离: 查询返回所有 agent 记忆 | ✅ 已修复 (a504a40) | | BUG-M4 | V3 Auth | Admin 端点对非 admin 用户返回 404 非 403 | ✅ 已修复 (admin_guard_middleware) | | BUG-M5 | V4 Memory | 跨会话记忆注入未工作: 新会话助手表示"没有找到对话历史" | ✅ 已修复 (a504a40) | ### LOW (2) | ID | 模块 | 描述 | 状态 | |----|------|------|------| | BUG-L1 | V3 Industry | API 字段名不一致 (pain_seeds vs pain_seed_categories) | ✅ 已验证修复 (代码已统一为 pain_seed_categories) | | BUG-L2 | V9 Pipeline | pipeline_create Tauri 命令参数反序列化失败 | ✅ 已验证修复 (04-17 回归) | ### 04-17 回归验证 (13/13 PASS) > Tauri MCP + HTTP API 全量回归,验证 commit a504a40 修复有效性 + 子系统链路 **Phase 1 — Bug 修复回归 (6/6 PASS)** | ID | 验证方法 | 结果 | |----|----------|------| | H1 Dashboard | HTTP GET /admin/dashboard → 200 | PASS | | H2 Memory 去重 | viking_add × 2 → 第二次 "deduped" | PASS | | M1 Invoice ID | POST /billing/payments → 含 invoice_id | PASS | | M2 Prompt 版本 | PUT → current_version 1→2 | PASS | | M3 Agent 隔离 | viking_find scope → 各返回 1 条无泄漏 | PASS | | M5 跨会话注入 | memory_build_context → 检索到旧记忆 | PASS | **Phase 2 — 子系统链路 (4/4 PASS)** | 测试项 | 结果 | |--------|------| | Pipeline list → 17 模板 | PASS | | Pipeline create → camelCase 反序列化 | PASS | | Pipeline run → DAG 构建+执行(未配LLM) | PASS (链路通) | | Skill 75 + route_intent 匹配 | PASS | **Phase 3 — Butler + 记忆 (3/3 PASS)** | 测试项 | 结果 | |--------|------| | Kernel init → 4 agents | PASS | | agent_chat_stream → 事件分发 | PASS | | health_snapshot + memory_stats → 381 记忆 | PASS | ### 子系统健康度 | 子系统 | PASS率 | 评分 | 说明 | |--------|--------|------|------| | 核心聊天链路 | 91.7% | 95/100 | 注册→登录→JWT→聊天→流式→持久化全闭环 | | SaaS 后端 | — | 90/100 | 137 端点,78% 已测试 | | Admin 后台 | 66.7% | 88/100 | 全页面 CRUD,Dashboard 404 已修复 | | Hands 自主能力 | 70.0% | 85/100 | 10 Hand 全部 enabled,审批机制正确 | | 计费系统 | 70.0% | 85/100 | 套餐/配额/支付全闭环 | | 管家模式 | 60.0% | 80/100 | 路由+追问+tool_call 正常 | | 记忆管道 | 62.5% | 70/100 | 存储+检索正常,去重/注入已修复 | | Pipeline+Skill | 37.5% | 65/100 | Tauri IPC 可用但参数格式问题多 | ## V13 审计修复 (2026-04-13 全部完成) ### P1 — 功能断链 ✅ 全部已修复 | ID | 问题 | 修复 | |----|------|------| | V13-GAP-01 | TrajectoryRecorderMiddleware 未注册到中间件链 | ✅ 已注册 @650,Hermes 轨迹数据开始流入 | | V13-GAP-02 | industryStore 存在但无组件导入 | ✅ 已接入 ButlerPanel,桌面端展示行业专长卡片 | | V13-GAP-03 | 桌面端未接入 Knowledge Search API | ✅ saas-knowledge mixin + VikingPanel SaaS KB 搜索 UI | ### P2 — 代码清洁度 ✅ 全部已修复 | ID | 问题 | 修复 | |----|------|------| | V13-GAP-04 | Webhook 孤儿表 | ✅ deprecated 标注 + down migration 注释 | | V13-GAP-05 | Structured Data Source 无 Admin UI | ✅ Admin Knowledge 新增"结构化数据"Tab | | V13-GAP-06 | PersistentMemoryStore 遗留模块 | ✅ 全量移除 — persistent.rs 611→57 行 | ## Heartbeat 参数名修复 (2026-04-16) | 问题 | 级别 | 状态 | |------|------|------| | Tauri invoke 参数名 snake_case 错误 | P1 | ✅ 已修复 | **根因**: Tauri 2.x `#[tauri::command]` 默认 `rename_all = "camelCase"`,前端 invoke 必须用 camelCase(`agentId` 不是 `agent_id`)。`intelligence-client.ts` 中 3 处 invoke 调用使用了错误的 snake_case。 **修复**: commit `f6c5dd2` — 3 处参数名修正 + HealthPanel.tsx 恢复正确命名。 **教训**: 所有 Tauri invoke 调用的参数名必须用 camelCase,与 Rust 端 snake_case 参数名对应。参见 `browser-client.ts` 中已有的正确示例。 ## Relay API Key 解密自愈 (2026-04-16) | 问题 | 级别 | 状态 | |------|------|------| | Provider Key 解密失败导致整个 relay 500 | P1 | ✅ 已修复 | **根因**: `key_pool.rs` 的 `select_best_key` 遍历 key 时,第一个解密失败的 key 就通过 `?` 直接返回 500,不会尝试下一个。如果 DB 中有旧的加密 key(密钥已变更),整个 relay 请求被阻断。重新保存只能临时解决,旧 key 仍在 DB 中。 **修复**: commit `b69dc61`: - 解密失败时 `warn + continue` 跳到下一个 key - 启动自愈 `heal_provider_keys()`: 逐个解密并重新加密,无法解密的标记 inactive **教训**: 密钥池选择应容错(skip bad keys),而不是 fail-fast。加密数据迁移应自动化。 ## 设置页面清理 (2026-04-16) | 变更 | 说明 | |------|------| | 删除"用量统计"页面 | 与"订阅与计费"功能重复 | | 删除"积分详情"页面 | 与"订阅与计费"功能重复 | commit `7dea456` — 移除 UsageStats + Credits 组件及菜单项。 ## 三端联调测试 V2 (2026-04-15) 通过 Chrome DevTools MCP + Tauri MCP 实际界面操作验证。 ### 已修复 | 问题 | 级别 | 修复 | |------|------|------| | SSE 中转任务 Token (入/出) 全部为 0 | P2 | ✅ SseUsageCapture 增加 stream_done 标志 + 前缀兼容 | ### 已验证通过 | 功能 | 状态 | 验证方式 | |------|------|----------| | 桌面端登录 (SaaS 模式) | ✅ | Tauri MCP 实际登录 | | 聊天流 (kimi-for-coding) | ✅ | 发送消息并收到流式回复 | | 模型切换 | ✅ | 切换 deepseek → kimi | | 智能体面板 | ✅ | 显示"默认助手" | | 设置 20 个选项卡 | ✅ | 逐页检查:用量统计/模型/记忆/SaaS平台 | | 语义记忆搜索 | ✅ | 100 条记忆,FTS5 + TF-IDF | | Admin V2 仪表盘 | ✅ | Chrome DevTools: 30 账号/3 服务商/17 请求 | | Admin V2 账号管理 | ✅ | 30 用户正常展示 | | Admin V2 模型服务 | ✅ | DeepSeek/Kimi/zhipu 3 个 Provider | | Admin V2 API 密钥 | ✅ | 不再崩溃(上次修复验证) | | Admin V2 知识库 | ✅ | 6 条目 + 5 个 Tab | | Admin V2 行业配置 | ✅ | 4 个内置行业 | | Admin V2 计费管理 | ✅ | 团队版 570/20000 中转请求 | | Admin V2 角色权限 | ✅ | 3 角色(超管/管理/用户) | | Admin V2 操作日志 | ✅ | 2088 条记录 | | Admin V2 Agent 模板 | ✅ | 10 模板(3 内置 + 7 自定义) | ### 待处理 / 观察项 | 问题 | 级别 | 说明 | |------|------|------| | Admin 用量统计 0/0 | P2 | 用量统计页显示请求=0/Token=0,但仪表盘显示 17 请求/6304 Token。数据来源不同 | | Deepseek 中转任务卡 processing | P3 | Provider Key 禁用后已有任务不会自动清理,需手动处理 | | 桌面端 Token 统计为 0 | P2 | 用量统计页 Token 输入/输出=0,但图表显示 ~3.6M,数据不一致 | ## 三端联调测试 (2026-04-14) 30+ API / 16 Admin / 8 Tauri 全量测试结果: | 问题 | 级别 | 状态 | |------|------|------| | API 密钥页崩溃 (undefined .map) | P1 | ✅ 已修复 | | 桌面端 401 后不自动恢复 | P1 | ✅ 已修复 | | 用量统计全零 (telemetry SQL timestamptz) | P1 | ✅ 已修复 | | 行业选择 500 (industry 类型匹配) | P1 | ✅ 已修复 | | 管理员切换订阅计划 500 | P1 | ✅ 已修复 | | SaaS 启动崩溃 (config_items 约束) | P1 | ✅ 已修复 | | SaaS 模型选择残留模型 ID | P0 | ✅ 已修复 | ## 代码健康度指标(2026-04-17) | 指标 | 值 | 变化 | 说明 | |------|-----|------|------| | TODO/FIXME 前端 | 1 | 不变 | memory-extractor.ts | | TODO/FIXME Rust | 3 | 不变 | html_export/nl_schedule/knowledge | | @reserved 标注 | 89 | 22→89 | 04-15 全量标注 | | dead_code 标记 | 16 | 76→16 | 大幅减少 | | 前端孤立 invoke | 0 | 不变 | 已清理 | | Cargo Warnings | 0 | 不变 | 非 SaaS,仅 sqlx 外部 | | 前端测试通过 | 344+1 skipped | 不变 | pnpm vitest run | ## 长期观察项 | 问题 | 说明 | 位置 | |------|------|------| | Tauri 命令孤儿 | 注册 190 命令,前端调用 104 处,@reserved 89 个,剩余 ~0 个 (差异来自内部命令调用) | `desktop/src-tauri/src/lib.rs` | | Embedding 未激活 | NoOpEmbeddingClient 为默认值,用户配置后替换为真实 provider | `zclaw-growth/src/retrieval/semantic.rs` | | SaaS embedding deferred | pgvector 索引就绪,生成未实现 | `zclaw-saas/src/workers/generate_embedding.rs` | | SkillIndex 条件注册 | 无技能时 skill_index 中间件不注册 | `kernel/mod.rs:309` | ## 已修复的关键问题(历史记录) | ID | 问题 | 修复日期 | |----|------|----------| | SEC2-P0-01 | skill_execute 反序列化崩溃 | 04-02 | | SEC2-P0-02 | TaskTool::default() panic | 04-02 | | SEC2-P1-01~09 | 9 项功能失效 (FactStore/路径/监听/...) | 04-02 | | SEC2-P1.5-01~07 | 7 项代码质量修复 | 04-02 | | P0-2/P0-3 | usage 端点 + refresh token 类型 | 04-10 | | P1-02 | 浏览器聊天 SaaS fixture | 04-10 | | P1-04 | AuthGuard 竞态条件 | 04-10 | | BREAKS 全部 | 全部 P0/P1/P2 已修复 | 04-10 | | V13-GAP-01~06 | 6 项断链/差距全部修复 | 04-13 | | 三端联调 P0/P1 | 7 项全部修复 | 04-14 | → 模块详情见各模块页面: [[routing]] [[chat]] [[saas]] [[memory]] [[middleware]]