title, updated, status, tags
| title |
updated |
status |
tags |
| 已知问题 |
2026-04-17 |
active |
|
已知问题
从 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