Files
zclaw_openfang/wiki/known-issues.md
iven b2758d34e9
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
docs(wiki): 添加 04-17 回归验证记录 — 13/13 PASS
- Phase 1: 6 项 bug 修复回归全部 PASS (H1/H2/M1/M2/M3/M5)
- Phase 2: Pipeline + Skill 子系统链路全部 PASS
- Phase 3: Butler + 记忆联动全部 PASS
- BUG-L2 Pipeline 反序列化已验证修复
- 记忆系统 381 条记忆, 12 agent 隔离正常
2026-04-17 10:45:49 +08:00

256 lines
11 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.

---
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 | **已修复 4/5** (Dashboard+去重+注入+invoice_id+版本号+隔离) |
| E2E 04-17 LOW | 2 | **已验证 1/2 修复** (L2 Pipeline 反序列化已修复) |
## 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 | 待处理 |
| BUG-M5 | V4 Memory | 跨会话记忆注入未工作: 新会话助手表示"没有找到对话历史" | ✅ 已修复 (a504a40) |
### LOW (2)
| ID | 模块 | 描述 | 状态 |
|----|------|------|------|
| BUG-L1 | V3 Industry | API 字段名不一致 (pain_seeds vs 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 | 全页面 CRUDDashboard 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 未注册到中间件链 | ✅ 已注册 @650Hermes 轨迹数据开始流入 |
| 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]]