22 KiB
title, updated, status, tags
| title | updated | status | tags | ||
|---|---|---|---|---|---|
| 变更日志 | 2026-04-22 | active |
|
变更日志
Append-only 操作记录。格式:
## [日期] 类型 | 描述
[2026-04-23] fix | 身份信号提取与持久化 — 对话中起名跨会话记忆+面板刷新
- fix(zclaw-growth): ProfileSignals 增加 agent_name/user_name 字段 + 提取提示词扩展 + 解析器+回退逻辑
- fix(zclaw-runtime): 身份信号存入 VikingStorage (importance=8)
- fix(src-tauri): post_conversation_hook 身份写回 soul.md + emit
zclaw:agent-identity-updatedTauri 事件 - fix(desktop): 双通道更新 — 前端规则检测
detectAgentNameSuggestion即时改名 + Rust 事件驱动 RightPanel 刷新 - 验证: cargo check 0 error/0 warning, tsc --noEmit 0 error
[2026-04-22] fix | agentStore stale client — getClient() 直接读 connectionStore
- fix(desktop): agentStore
_client模块缓存导致 Tauri 模式下持有旧 GatewayClient 引用 - 根因:
initializeStores()被_storesInitialized守卫阻止二次注入,KernelClient 替换后 agentStore 仍用旧引用 - 修复:
getClient()改为直接读connectionStore.getState().client,去掉本地缓存
[2026-04-22] fix | Agent tab 数据不同步 — role映射+userProfile双通道+称呼方式
- fix(desktop): updateClone role→description 字段映射修复 (kernel-agent.ts:176)
- fix(desktop): listClones 新增 agent_get + identity_get_file 双通道获取 userName/userRole
- fix(desktop): userAddressing 错误使用 agent nickname 作为用户称呼方式 → 改用 userName
[2026-04-22] docs | Wiki 重构 — 5节模板+集成契约+症状导航+归档压缩
- Phase A: log.md 归档(548→335行, 38条活跃) + hermes-analysis 归档 + known-issues 转索引(277→38行)
- Phase B: middleware.md 重构(157→136行) — 集成契约+3不变量+单真相源
- Phase C: saas.md(231→173, 移除安全重复) + security.md(158→199, 吸收安全内容) + memory.md(363→147, 最大压缩59%)
- Phase D: routing(330→131) + chat(180→134) + butler(215→150) + hands-skills(281→170) + pipeline(157→154) + data-model(181→153)
- Phase E: index.md 新增症状导航表(144→101行, ≤120预算) + 移除架构Q&A(移入各模块)
- Phase F: feature-map.md 33链路详细描述→紧凑索引(424→60行)
- CLAUDE.md: §3.3 阶段1 更新(症状导航+5节说明) + §8.3 wiki维护规则更新(新模板触发规则)
- 净减 ~1,200 行,消除所有跨3+页重复,10/10 模块页新增集成契约
[2026-04-22] docs | Wiki 一致性修复 — 数字/格式/重复内容清理
- index.md: 数据流图中间件 15→14 层
- chat.md: 中间件层引用 15→14 层
- development.md: 稳定化约束中间件 15→14 层
- memory.md: 删除"前端 Tauri 命令"与"API 接口"重复的 VikingStorage/Intelligence 表(保留 API 接口章节)
- log.md: 统一所有标题格式为
## [YYYY-MM-DD] 类型 |(27行);删除重复的# 变更日志标题;修正历史条目中"中间件 15层"→"14层";DataMasking 条目补充 Evolution@78
[2026-04-22] fix | 跨会话记忆断裂修复 (commit adf0251)
- 根因: 3个断裂点
profile_store未连接 —create_middleware_chain()中GrowthIntegration未设置UserProfileStore, extract_combined()的profile_signals被静默丢弃- 双数据库不一致 — UserProfileStore写入data.db, agent_get读取memories.db, 两库隔离导致UserProfile永远读不到
- 缺少关键日志 — 提取/存储/检索链路无info级别日志
- 修复:
with_profile_store(memory.pool())+ agent_get改用kernel.memory()+ Kernel暴露memory()方法 + growth.rs增强日志 - 验证: Tauri端E2E — 会话A提取6记忆+4 profile signals → 新会话B成功注入记忆 → 管家Tab显示用户画像+近期话题+53条记忆
[2026-04-22] feat | 管家Tab记忆展示增强
- 变更: MemorySection.tsx 重写 — L1摘要并行加载 + 按类型分组(偏好/知识/经验/会话) + 用户画像卡片(行业/角色/沟通风格/近期话题)
- 数据源: viking_ls+viking_read(L1) + agent_get(userProfile)
[2026-04-22] refactor | DataMasking 完全移除
- 变更: 删除
data_masking.rs(367行) + loop_runner unmask 逻辑 + saas-relay-client.ts 前端 mask/unmask - 原因: 正则过度匹配中文文本(commit
73d50fd已禁用),NLP方案未排期,彻底移除减少维护负担 - 影响: 中间件链 15→14 层,loop_runner 简化,SaaS relay 路径不再做前端脱敏
- 中间件链:
Evolution@78, ButlerRouter@80, Compaction@100, Memory@150, Title@180, SkillIndex@200, DanglingTool@300, ToolError@350, ToolOutputGuard@360, Guardrail@400, LoopGuard@500, SubagentLimit@550, TrajectoryRecorder@650, TokenCalibration@700
[2026-04-22] fix | Agent 搜索功能修复 — glm 空参数 + schema 简化 + 排版修复 (commit 5816f56 + 81005c3)
根因: glm-5.1 不理解 oneOf+const 复杂 JSON Schema,tool_calls arguments 始终为空 {}。
加上 DuckDuckGo 被墙导致搜索引擎选择不正确,以及 stripToolNarration 破坏了 markdown 排版。
修复 3 项:
researcher.rsinput_schema 扁平化 +_fallback_query回退 (5816f56)loop_runner.rs空参数检测 → 注入用户消息作为查询 (5816f56)ChatArea.tsxstripToolNarration 改为行级过滤,保留 markdown 结构 (81005c3)
影响文件: crates/zclaw-hands/src/hands/researcher.rs, crates/zclaw-runtime/src/loop_runner.rs, desktop/src/components/ChatArea.tsx
验证: E2E 搜索 "今日科技新闻" — Baidu + Bing CN 并行返回 10 条结果,LLM 生成排版正确的回复
[2026-04-21] fix | Phase 0+1 突破之路 — 8 项基础链路修复 (commit c1dea6e + 9a2611d)
Phase 0 地基修复 (2 项):
- 经验积累覆盖 bug: store_experience() URI 确定性覆盖 → 合并+累积 reuse_count (experience_store.rs)
- Skill 工具调用断裂: PromptOnlySkill 纯文本 → complete_with_tools() 桥接 (skill.rs + runner.rs + adapters.rs)
Phase 1 用户可感知修复 (6 项):
- Hand 执行前端字段映射: instance_id → runId (kernel-hands.ts + gateway-api.ts)
- Heartbeat 痛点感知: PAIN_POINTS_CACHE + VikingStorage 持久化 + 未解决痛点检查 (heartbeat.rs)
- Browser Hand 委托消息: pending_execution → delegated_to_frontend + 中文摘要 (browser.rs)
- 跨会话记忆检索增强: IdentityRecall 模式 26→54 + 弱身份信号(9个) + 低结果 fallback (query.rs + retriever.rs)
- Twitter Hand 凭据持久化: SetCredentials action + 文件持久化 + 启动恢复 (twitter.rs)
- Browser 测试适配: 新响应格式断言修复
验证: cargo check 0 error | cargo test 912 PASS | tsc --noEmit 0 error
[2026-04-21] test | Phase 2 自学习闭环验证 — 进化引擎全链路确认 (commit d95fda3)
审计发现: 进化引擎管道已完整连接,Phase 0 的 reuse_count 修复是唯一缺失拼图。
- 经验累积 → PatternAggregator(>=3) → EvolutionEngine → EvolutionMiddleware(@78) → 注入
- L2 SkillGenerator + QualityGate 代码完整,标记 @reserved 用于全自动化(后续)
- 当前"人在环"模式:检测到可进化模式 → 提示用户确认 → 不自动生成
6 个集成测试: 经验累积触发/阈值过滤/多模式独立/SkillGenerator prompt/QualityGate验证/FeedbackCollector计分。全量 918 PASS。
[2026-04-21] fix | 穷尽审计后 3 项修复 (browser doc / experience_store warn / identity pattern count)
- browser.rs: 过时文档注释
pending_execution→delegated_to_frontend - experience_store.rs: merge 反序列化失败时添加
warn!()日志 + fallback 覆写 - wiki/log.md: identity_patterns 数量更正 43→54
验证: cargo check 0 error | cargo test 112 PASS (growth+hands)
[2026-04-20] fix | 50 轮功能链路审计 7 项断链修复 (commit f291736)
审计报告: docs/test-evidence/FUNCTIONAL_CHAIN_AUDIT_2026_04_20.md
通过率 42/50 (84%),发现 2 P0 + 3 P1 + 2 P2 断链。
P0 修复:
- B-MEM-2 跨会话记忆丢失: IdentityRecall 查询意图 + scope-only 检索 + GrowthIntegration 缓存
- B-HAND-1 Hands 未触发: HandTool wrapper + tool registry 注册 7 个 Hands
P1 修复:
- B-SCHED-4 一次性定时: RE_ONE_SHOT_TODAY 同日触发模式
- B-CHAT-2 工具循环: 连续失败计数器 (3次上限)
- B-CHAT-5 Stream 竞态: cancelCooldown 500ms
[2026-04-19] docs | Wiki 全量深度梳理 — 11 页同步至代码实际状态
- index.md: 全面更新关键数字 — Rust 102K行/357文件/987测试、Store 25、组件 102、lib 75、@reserved 97、中间件 14层、SQL 38文件/42表、dead_code 0;新增进化引擎架构说明;修正 Hands 7注册(非9);Pipeline 18模板
- routing.md: Store 列表删除 workflowBuilderStore(已不存在)、新增 saas/ 子模块(5文件)拆分;路由决策从4分支修正为5分支+降级;lib/ 计数 76→75
- hands-skills.md: Hands 从"9启用"修正为"7注册"(6 TOML + _reminder);新增"已删除 Hands"节(Whiteboard/Slideshow/Speech 空壳清理);HAND.toml 9→6
- saas.md: SaaS 模块从"16+distill"修正为精确16目录;SQL迁移从"20文件"修正为"38文件(21up+17down)";CREATE TABLE 从104修正为42
- known-issues.md: 代码健康度指标全面更新 — @reserved 89→97、dead_code 16→0、TODO Rust 3→1、Rust测试 684→797
- memory.md: 新增进化引擎(EvolutionEngine)完整模块结构(19文件);新增 FeedbackCollector/PatternAggregator/QualityGate/SkillGenerator/WorkflowComposer 描述
- butler.md: Intelligence 层从5文件扩展到16文件完整清单;新增 experience/health_snapshot/personality_detector 等
- pipeline.md: 模板数从17修正为18;修正模板分布总计公式
- chat.md: 中间件层引用 14层(含Evolution@78)
- development.md: 稳定化约束数字全面更新(Store 25、中间件 14、组件 102);分层职责同步
- 验证方式: 3路并行代码分析(Rust crates/前端/TRUTH交叉) + 20+ grep/find 命令实际验证
[2026-04-19] fix | 穷尽审计修复 — CRITICAL×1 + HIGH×6 + MEDIUM×4
- C1: mark_key_429 设 is_active=FALSE,自动恢复路径可达化
- H1+H2: 重试查询补全日志 + fallthrough 错误信息修正 (RateLimited)
- H3+H4+M3+M4+M5: agentStore 提取 classifyAgentError() 类型化错误 + 全 CRUD 统一
- H5+H6: auth.ts 提取 triggerReconnect(),login/TOTP/restore 三路径统一
- M1: toggle_key_active(true) 清除 cooldown_until
[2026-04-19] fix | 发布前审计 5 项修复
- P0-1: key_pool.rs Provider Key cooldown 过期自动恢复(is_active=false → true)
- P0-2: agentStore.ts createClone/createFromTemplate 友好错误信息(502/503/401 分类)
- P1-2: auth.ts login 成功后触发 connectionStore.connect() 重新配置 kernel token
- P1-3: health_snapshot heartbeat engine 未初始化时返回 pending 快照(不再报错)
- P1-1: configStore.ts loadSkillsCatalog 增加延迟重试(最多2次,1.5s/3s 间隔)
[2026-04-19] chore | sqlx 0.7→0.8 统一 + 测试覆盖补充
- sqlx workspace 0.7→0.8.6 + libsqlite3-sys 0.27→0.30,消除 pgvector 引入的双版本
- 零源码修改,719→797 测试全通过
- zclaw-protocols +43 测试: MCP types serde / transport config / domain roundtrips
- zclaw-skills +47 测试: SKILL.md/TOML parsing / auto-classify / PromptOnlySkill / types roundtrips
[2026-04-18] fix | 审计后续 3 项修复
- Shell Hands 残留清理 3 处 (message.rs 注释/profiler 偏好/handStore mock)
- FTS5 CJK 查询修复: sanitize_fts_query 从精确短语改为 token OR 组合
- WASM HTTP 响应大小限制: Content-Length 预检 + 1MB 上限
- zclaw-growth 集成测试 2/2 修复, 全量 651 测试 0 失败
[2026-04-18] fix | 深度审计修复 — WASM 安全 + 编译路径
- CRITICAL: zclaw_file_read 路径遍历修复 (组件级过滤)
- CRITICAL: zclaw_http_fetch SSRF 防护 (scheme 白名单 + 私有 IP 阻止)
- CRITICAL: A2A 始终编译 (移除 zclaw-protocols a2a feature gate)
- MEDIUM: FactCategory cfg(test) 导入修复
- 移除 kernel/desktop multi-agent feature (不再控制任何代码)
- 563 测试全通过
[2026-04-17] refactor | Phase 4A multi-agent feature gate 移除
- 8 个文件移除 33 处
#[cfg(feature = "multi-agent")] - zclaw-kernel default features 新增 multi-agent,始终编译
- A2A router、agents、adapters 代码不再条件编译
[2026-04-17] feat | Phase 4B WASM host 函数真实实现
- zclaw_log: 读取 guest 内存字符串 + debug! 日志
- zclaw_http_fetch: ureq v3 同步 GET (10s timeout, network_allowed 守卫)
- zclaw_file_read: 沙箱 /workspace 读取 + 路径校验防逃逸
- 新增 ureq v3 workspace 依赖 (wasm feature gated)
- 25 测试全通过,workspace check 零错误
[2026-04-17] refactor | Phase 3A loop_runner 双路径合并
- middleware_chain 从 Option 改为 MiddlewareChain (Default = 空链)
- 移除 6 处
use_middleware分支 + 2 处 legacy loop_guard inline path - 移除 loop_guard field + Mutex import + circuit_breaker_triggered 变量
- Kernel create_middleware_chain() 返回非 Option,messaging.rs 调用简化
- 1154→1023 行,净减 131 行;
cargo check --workspace✓ |cargo test✓
[2026-04-17] refactor | Phase 2A Pipeline→Kernel 解耦
- Pipeline 代码中无任何
zclaw_kernel引用,Cargo.toml中的依赖是空壳 - 移除后
cargo check --workspace --exclude zclaw-saas✓ - 依赖图简化: Pipeline 不再拉入 Kernel 及其传递依赖
[2026-04-17] refactor | Phase 2B saasStore 拆分为子模块
- 1025行单文件 → 5个子模块 + barrel re-export
- saas/types.ts(103行) + shared.ts(93行) + auth.ts(362行) + billing.ts(84行) + index.ts(309行)
- saasStore.ts 缩减为 15行 re-export barrel,25+ 消费者零改动
tsc --noEmit✓
[2026-04-17] refactor | Phase 5 移除空壳 Hand — Whiteboard/Slideshow/Speech
- Rust: 删除 whiteboard.rs(422行) + slideshow.rs(797行) + speech.rs(442行)
- 前端: 删除 WhiteboardCanvas + SlideshowRenderer + speech-synth + 类型/常量
- 配置: 删除 3 个 HAND.toml
- Hands 9→6 启用 (Browser/Collector/Researcher/Clip/Twitter/Quiz + Reminder系统内部)
- 净减 ~5400 行,
cargo check✓ |tsc --noEmit✓
[2026-04-17] feat | Phase 1 错误体系重构 — ErrorKind + code + Serialize
- Rust:
zclaw-types/error.rs新增ErrorKind(17种) +error_codes(E4040-E5110) - ZclawError 新增
kind()/code()方法 +Serializeimpl (零破坏性) - 12 个新测试: kind 映射 + code 稳定性 + JSON 序列化
- 前端:
error-types.ts新增RustErrorKind/RustErrorDetail/tryParseRustError() classifyError()优先解析结构化错误 → 17 种中文标题映射
[2026-04-17] fix | Phase 0 阻碍项修复 — 流式事件/CI/中文化
- BLK-2: loop_runner.rs 22 处
let _ = tx.send()替换为if let Err(e) { tracing::warn!(...) },修复流式事件静默丢失 - BLK-5: 50+ 英文字符串翻译为中文 (HandApprovalModal/ChatArea/AuditLogsPanel 等 7 组件)
- BLK-6: CI/Release workflow 添加
--exclude zclaw-saas,无 DB 时 CI 绿灯 - 验证:
cargo check --workspace --exclude zclaw-saas✓ |tsc --noEmit✓
[2026-04-17] fix | M4 Admin 权限守卫 + L1 文档同步
- BUG-M4: 新增
admin_guard_middleware(auth/mod.rs),在中间件层拦截非 admin 请求billing::admin_routes()和account::admin_routes()挂载时加 guard layer- 非_admin 用户访问 admin 端点统一返回 403 (无论 body 是否合法)
account/mod.rs拆分admin_routes()(dashboard 端点独立)
- BUG-L1: 字段名已在代码中统一为
pain_seed_categories,同步 wiki/butler.md/log.md 文档
[2026-04-17] test | 回归验证 — 13/13 PASS,全部 04-17 bug 修复确认
- Phase 1: 6 项 bug 修复回归 (H1/H2/M1/M2/M3/M5) 全部 PASS
- Phase 2: Pipeline (list/create/run) + Skill (75 + route_intent) 全部 PASS
- Phase 3: Kernel init + chat_stream + health_snapshot 全部 PASS
- BUG-L2 Pipeline 反序列化已验证修复
- 记忆系统健康: 381 条记忆, 12 agent, FTS5+TF-IDF 工作正常
- 详见 known-issues#04-17 回归验证
[2026-04-17] test | 全系统功能 E2E 测试 — 129 链路覆盖
- 129 条链路全量测试 (Tauri MCP + Chrome DevTools MCP + HTTP API)
- 82 PASS / 20 PARTIAL / 1 FAIL / 26 SKIP,有效通过率 79.1%
- 0 CRITICAL 失败,核心聊天链路完整闭环
- 新发现 2 HIGH + 5 MEDIUM + 2 LOW bug
- SaaS API 覆盖率 ~78% (50/64 端点已测试)
- 完整报告:
docs/test-evidence/2026-04-17/E2E_TEST_REPORT_2026_04_17.md - 详见 known-issues
[2026-04-17] fix | 7 项 E2E Bug 修复 — Dashboard 404 / 记忆去重 / 记忆注入 / invoice_id / Prompt 版本
- fix(admin): Dashboard 404 — 路由注册修复
- fix(memory): viking_add 记忆去重 — URI+content 双重校验
- fix(memory): 跨会话记忆注入修复 — FTS5→注入环节断裂修复
- fix(billing): invoice_id 暴露给用户端
- fix(prompt): 版本号自增修复
- fix(memory): viking_find agent 隔离
- fix(industry): API 字段名统一 (pain_seeds → pain_seed_categories)
- commit:
a504a40
[2026-04-16] fix | Agent 面板信息不随对话更新 — 事件时序 + clones 刷新
- fix(desktop): Agent 面板信息不随对话更新 — 事件时序 + clones 刷新
- commit:
1309101
[2026-04-16] fix | 3 项 P0 安全/功能修复 + TRUTH.md 数字校准
- fix(saas): 3 项 P0 修复 (详见 known-issues)
- TRUTH.md 数字同步更新
- commit:
0d79993
[2026-04-16] fix | 5 项 E2E 测试 Bug 修复
- Agent 502 / 错误持久化 / 模型标记 / 侧面板 / 记忆页
- commit:
a0d1392
[2026-04-16] fix | useButlerInsights 使用 resolvedAgentId 查询痛点/方案
- commit:
7db9eb2
[2026-04-16] fix | Heartbeat 参数名 + Relay 解密自愈 + 设置清理
- fix(heartbeat): Tauri invoke 参数名修正 snake_case → camelCase (
f6c5dd2)- intelligence-client.ts 3 处 invoke 调用: agentId/taskCount/totalEntries 等
- 教训: Tauri 2.x 默认 rename_all=camelCase
- fix(relay): API Key 解密失败自愈 — 启动迁移 + 容错跳过 (
b69dc61)- key_pool: 解密失败 skip 到下一个 key (不再 500)
- key_pool: heal_provider_keys() 启动自愈迁移
- chore(settings): 删除用量统计和积分详情页面 (
7dea456)- 与"订阅与计费"功能重复,-240 行
[2026-04-15] feat | Heartbeat 统一健康系统
- feat(runtime): health_snapshot.rs — 统一健康快照收集器 (LLM连接/记忆/会话/系统资源)
- feat(runtime): heartbeat.rs 重构 — HeartbeatManager + HealthSnapshot 集成
- feat(desktop): HealthPanel.tsx — 桌面端健康状态面板组件
- chore(desktop): 删除 intelligence-client/ 目录 9 个废弃文件
- docs: TRUTH.md + wiki 数字同步 (Tauri 183命令, React 105组件, lib 76文件, intelligence 16文件)
- 验证: cargo check 0 error, tsc 0 error
[2026-04-15] fix | 聊天定时功能断链接通 — NlScheduleParser + _reminder Hand
- fix(runtime): NlScheduleParser 接入 chat.rs — has_schedule_intent() 意图检测 + parse_nl_schedule() cron 解析
- fix(hands): 新增 _reminder 系统内部 Hand — 定时触发器桥接
- fix(kernel): TriggerManager hand_id 验证放宽 —
_前缀系统 Hand 免验证 - fix(desktop): agent_chat_stream 定时拦截 — 确认消息通过 LoopEvent::Delta 流式返回
- docs(wiki): hands-skills.md 新增定时提醒链路说明
- 验证: cargo check 0 error, 49 tests passed, Tauri MCP 实操验证 "每天早上9点提醒我查房" → cron
0 9 * * *确认消息正确显示
[2026-04-15] fix | 发布前冲刺 Day1 — 5项修复 + 2项标注 + 文档同步
- fix(saas): SSE 用量统计一致性 — 回写 usage_records 真实 token + 消除 relay_requests 双重计数
- fix(saas): relay_tasks 超时自动清理 — 每5分钟扫描 processing>10min 标记 failed
- fix(desktop): 模型自动路由 — 首次登录自动选择第一个可用模型 (saasStore + connectionStore)
- chore: Cargo warnings 清零 — 39→0 (仅剩 sqlx-postgres 外部依赖)
- chore: Tauri 命令 @reserved 全量标注 — 89个 (孤儿命令 0)
- docs: TRUTH.md 数字更新 (Tauri 182命令、95 invoke、89 @reserved、0 孤儿)
- 验证: tsc 0错误、vitest 344通过、cargo check 0 warning、pnpm build 成功
[2026-04-15] fix | 三端联调 V2 — SSE Token 捕获修复 + 调试环境文档
- fix(saas): SseUsageCapture 增加
stream_done标志,修复 SSE 路径 Token 始终为 0 的根因 - fix(saas):
parse_sse_line兼容data:和data:两种前缀 +total_tokens兜底 - docs(wiki): development.md 新增完整调试环境信息(Windows 环境要求/数据库/端口/账号/启动顺序)
- docs(wiki): known-issues.md 新增 V2 联调测试结果(17 项通过 + 3 项待处理)
- 验证方式: Chrome DevTools MCP + Tauri MCP 实际界面操作
[2026-04-14] docs | Wiki 全量更新 — 2026-04-14 代码验证驱动
- 全部 12 个 wiki 页面基于最新代码扫描验证更新
- 关键数字修正: Rust 77K行(274 .rs)、Tauri 189命令、SaaS 137 routes、Admin 17页、SaaS 16模块
- known-issues: V13-GAP 全部标记已修复 + 三端联调测试结果
- middleware: 14层 runtime + 10层 SaaS HTTP 完整清单
- saas: 16模块(含industry)、20迁移/42表、137 routes
- routing: SaaS降级流程、Store含industryStore、lib/85文件
- chat: 14层中间件经过
- butler: 行业配置接入ButlerPanel
- development: Admin 17页、SaaS 137 routes
- log: 链接三端联调测试报告
[2026-04-14] fix | 三端联调测试 2 P0 + 6 P1 修复
- P0: SaaS 模型选择残留模型 ID → 模型可用性前置校验
- P1: API 密钥页崩溃 / 桌面端 401 恢复 / 用量统计全零 / 行业选择 500 / 管理员订阅 500 / SaaS 启动崩溃
- 完整报告:
docs/INTEGRATION_TEST_REPORT_20260414_V2.md
更新规则: 每次重大变更后追加一条,最新在最上面