Files
zclaw_openfang/docs/features/AUDIT_TRACKER.md
iven 36168d6978
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(audit): sync AUD3-FE-05/06 table status to FIXED
2026-04-05 01:13:27 +08:00

24 KiB
Raw Blame History

ZCLAW 审计追踪表 (V12)

创建日期: 2026-03-29 审计版本: V12 模块化端到端审计 最后更新: 2026-04-04 追踪规则: 每个发现项记录状态变更,修复后需附验证方法


P0: 阻断级

ID 问题 状态 负责人 目标日期 验证方法
SEC-V9-01 prompt/service.rs:94,97,100 SQL 注入 FALSE_POSITIVE - 2026-03-29 已验证: format!() 仅构建 $N 占位符索引,实际值通过 .bind() 参数化绑定,非 SQL 注入

P1: 严重级

ID 问题 状态 负责人 目标日期 验证方法
BREAK-01 LlmDriverForExtraction 无生产实现 FIXED - 2026-03-29 extraction_adapter.rs 实现 TauriExtractionDriver桥接 Kernel LlmDriver
BREAK-02 记忆提取未接入 post_conversation_hook FALSE_POSITIVE MemoryMiddleware.after_completion 正常触发,非断链
BREAK-03 审批后不自动执行 Hand FALSE_POSITIVE approval_respond 自动 spawn tokio task 执行,非断链
BREAK-04 pipeline-complete 事件未监听 FALSE_POSITIVE discovery.rs emit + 前端有监听器

P2: 高优先级

ID 问题 状态 负责人 目标日期 验证方法
DEAD-01 PromptInjector 全文件死代码 FALSE_POSITIVE - 2026-04-01 V10 确认: PromptInjector 已通过 PromptBuilder 重构接入,非死代码
DEAD-02 MemoryRetriever 全文件死代码 FALSE_POSITIVE - 2026-04-01 V10 确认: MemoryRetriever 已通过 MemoryMiddleware 接入,非死代码
DEAD-03 GrowthTracker 全文件死代码 FALSE_POSITIVE - 2026-04-01 V10 确认: GrowthTracker 已通过 GrowthIntegration 桥接接入,非死代码
DEAD-05 39 个未调用 saas-client 方法 PARTIALLY_FIXED - 2026-04-04 10 个零调用方法已删除 (healthCheck/listDevices/getRelayTask/getUsage×2/listPrompts/getPrompt/listPromptVersions/getPromptVersion/getPlan)29 个保留供 admin-v2 或未来接入
DOC-01 Tauri 命令数文档 58+ vs 实际 171 FIXED 06-tauri-backend 文档已更新 175→171
DOC-02 智能层文档引用已删除模块 FALSE_POSITIVE 02-intelligence-layer 文档未引用已删除模块,
TYPE-01 Desktop/Admin 类型不一致 (6 组) OPEN - - 统一类型定义
G-07 account_api_keys 被 relay 绕过 N/A Intentional architecture: provider_keys (Key Pool) 做 upstream key rotation/429/failover; account_api_keys 为 account-level token

P3: 中优先级

ID 问题 状态 负责人 目标日期 验证方法
CONF-01 配置参数孤儿 (batch_window_ms 等) PARTIALLY_FIXED - 2026-03-29 batch_window_ms / max_concurrent_per_provider 标记为预留 (relay 配置)burst 通过 RateLimitConfig 消费
SEC-V9-02 relay 输入验证可加强 FALSE_POSITIVE relay/handlers.rs 已有完整验证body size/model/role/content/temperature/max_tokens/queue/permission
AUDIT-01 前端 audit-logger 无消费者 FALSE_POSITIVE 文件已于先前清理中删除
DEAD-04 director.rs 907 行孤立代码 FALSE_POSITIVE 与 V11-P3-05 相同multi-agent feature gate 已正确隔离
ADMIN-01 config_sync_logs 无 Admin 页面 OPEN - - 添加页面
ADMIN-02 operation_logs 无 Admin 页面 OPEN - - 添加页面

P4: 低优先级

ID 问题 状态 负责人 目标日期 验证方法
DOC-03 SKILL.md 数量 69→70 FIXED find skills -name SKILL.md = 75CLAUDE.md 已统一
DOC-04 Hands 数量 CLAUDE.md vs README 不一致 FALSE_POSITIVE CLAUDE.md 已统一为 9 启用 + 2 禁用 = 11
EVAL-01 zclaw-channels 评估 FALSE_POSITIVE crate 已于先前清理中删除
IFACE-01 trigger_update 接口不匹配 FIXED V11-P1-01 已修复(

状态变更日志

日期 ID 变更 备注
2026-03-29 SEC-V9-01 OPEN → FALSE_POSITIVE prompt/service.rs format!() 仅构建 $N 占位符,实际值通过 .bind() 参数化绑定
2026-03-29 BREAK-01 OPEN → FIXED extraction_adapter.rs 实现 TauriExtractionDriver桥接 Kernel LlmDriver 到 LlmDriverForExtraction trait
2026-03-29 CONF-01 OPEN → PARTIALLY_FIXED Worker 系统 + Scheduler 系统上线部分配置参数已消费relay 预留参数已标注
2026-03-29 - V9 审计创建 20 个发现项
2026-04-01 DEAD-01 OPEN → FALSE_POSITIVE V10 确认: PromptInjector 已通过 PromptBuilder 重构接入,非死代码
2026-04-01 DEAD-02 OPEN → FALSE_POSITIVE V10 确认: MemoryRetriever 已通过 MemoryMiddleware 接入,非死代码
2026-04-01 DEAD-03 OPEN → FALSE_POSITIVE V10 确认: GrowthTracker 已通过 GrowthIntegration 桥接接入,非死代码
2026-04-01 - V10 审计更新 DEAD-01/02/03 确认为误报
2026-04-02 BREAK-02 OPEN → CLOSED V11 确认: MemoryMiddleware.after_completion 正常触发记忆提取,非断链
2026-04-02 BREAK-03 OPEN → CLOSED V11 确认: approval_respond 自动 spawn tokio task 执行 Hand非断链
2026-04-02 BREAK-04 OPEN → CLOSED V11 确认: pipeline-complete 在 discovery.rs:165 emit前端有监听器
2026-04-02 IFACE-01 OPEN → CONFIRMED_P1 trigger_update 前端发嵌套 updates 对象Rust 期望扁平参数,更新静默失败
2026-04-02 - V11 全面审计 22 项新发现3 P1 + 6 P2 + 8 P3 + 5 P43 项 V10 关闭
2026-04-04 M11-02 OPEN → FIXED generation/mod.rs Stage 1/2 LLM 调用添加 map_err 上下文描述
2026-04-04 SEC2-P1-01 OPEN → FALSE_POSITIVE FactStore trait 已在先前清理中移除值类型保留TRUTH.md 已标记 FIXED
2026-04-04 V11-P1-03 OPEN → FALSE_POSITIVE telemetry_reports/key_usage_window 有活跃 JOIN 读取prompt_sync_status 写无读降级为 P3
2026-04-04 M4-04 深层 AUDITED → WONTFIX 4 层防御深度评估Tauri 命令层已阻断手动触发scheduler bypass 有意设计
2026-04-04 V11-P2-01 OPEN → FALSE_POSITIVE saas-admin.ts 已删除
2026-04-04 V11-P2-02 OPEN → FALSE_POSITIVE admin-v2 已有 roles service + Roles.tsx 页面
2026-04-04 AUD3-CONC-02 OPEN → FALSE_POSITIVE 与 SEC2-P2-05 相同fire-and-forget 注释已添加
2026-04-04 AUD3-DB-02 OPEN → FALSE_POSITIVE 与 SEC2-P2-08 相同,表名白名单+防御验证已到位
2026-04-04 V11-P3-03 OPEN → FALSE_POSITIVE extract_structured_facts() 已移除,仅注释引用
2026-04-04 V11-P3-05 OPEN → FALSE_POSITIVE multi-agent feature gate 正确,#[cfg(feature = "multi-agent")]
2026-04-04 DEAD-04 OPEN → FALSE_POSITIVE 与 V11-P3-05 相同director.rs feature-gated
2026-04-04 SEC-V9-02 OPEN → FALSE_POSITIVE relay 输入验证已全面body/model/messages/roles/temp/max_tokens
2026-04-04 EVAL-01 OPEN → FALSE_POSITIVE zclaw-channels crate 已移除
2026-04-04 DOC-01 OPEN → FIXED 06-tauri-backend 文档 175→171
2026-04-04 DOC-02 OPEN → FALSE_POSITIVE 02-intelligence-layer 未引用已删除模块
2026-04-04 V11-P2-04 OPEN → FALSE_POSITIVE zclaw_types::tool::ToolDefinition 为 canonicalruntime 仅 re-export
2026-04-04 V11-P2-06 OPEN → FALSE_POSITIVE 分页查询已有 LIMITfetch_all 仅同步场景无分页
2026-04-04 DEAD-05 OPEN → PARTIALLY_FIXED 10 个零调用 SaaS 方法已删除9 个 @reserved → @connected 标注修正
2026-04-04 V11-P2-05 部分关闭 107 总命令: 89 @connected + 18 @reserved修正 9 个误标 @reserved

V11 新增发现项 (2026-04-02)

P1: 严重级

ID 问题 状态 验证方法
V11-P1-01 trigger_update 参数嵌套导致更新失败 FIXED V12 Batch 7 中修复前端扁平参数
V11-P1-02 SaaS 配置同步不传播到 Rust Kernel FIXED V12 Batch 7 中修复完整链路
V11-P1-03 3 个 SQL 表零读取 (prompt_sync_status, telemetry_reports, key_usage_window) FALSE_POSITIVE telemetry_reports/key_usage_window 有活跃 JOIN 读取prompt_sync_status 写无读(降级为 P3需接通 get_sync_status 路由)

P2: 高优先级

ID 问题 状态 验证方法
V11-P2-01 saas-admin.ts 30 方法零消费者 FALSE_POSITIVE 文件已于先前清理中删除
V11-P2-02 7 个 Role/Permission 路由无前端消费者 FALSE_POSITIVE admin-v2 已有 roles service + Roles.tsx 页面
V11-P2-03 deprecated gateway-storage sync 方法仍被生产代码调用 FALSE_POSITIVE gateway-client.ts 已将 sync 方法替换为 asyncgateway-storage.ts 已删除
V11-P2-04 ToolDefinition 在 types 和 runtime 重复定义 FALSE_POSITIVE zclaw_types::tool::ToolDefinition 为 canonical 定义zclaw_runtime 仅 reexport
V11-P2-05 62 个 Tauri 命令无前端调用 FIXED 完整审计: 160 @connected + 16 @reserved + 1 未注册(identity_init) = 177 总命令
V11-P2-06 migration SQL 查询缺少 LIMIT FALSE_POSITIVE config_items 分页查询已有 LIMITfetch_all 仅同步场景下无 LIMIT非用户数据批量场景影响极小

P3: 中优先级

ID 问题 状态 验证方法
V11-P3-01 audit-logger.ts 导出但零 import FALSE_POSITIVE 文件已于先前清理中删除
V11-P3-02 OFP 能力定义无消费者 FALSE_POSITIVE OfpDiscover 在 capability.rs 的 3 个 match arm 中用于 A2A 权限检查A2A feature-gated 有意设计
V11-P3-03 extract_structured_facts() deprecated 未移除 FALSE_POSITIVE 函数已移除,仅 memory.rs:117 注释引用,无实际调用
V11-P3-04 SaaS knowledge 3 个 handler 返回空数据 FALSE_POSITIVE admin-v2 已有 Knowledge.tsx + knowledge.ts service 完整消费
V11-P3-05 Director 912 行 feature-gated 未启用 FALSE_POSITIVE #[cfg(feature = "multi-agent")] 正确门控,默认未启用
V11-P3-06 定时任务执行结果未持久化 FALSE_POSITIVE scheduler.rs:264-289 已实现 last_run_at + last_result 持久化到 scheduled_tasks 表
V11-P3-07 secure-storage sync deprecated 零调用 FALSE_POSITIVE 同 AUDIT-01 gateway-storage.ts 已删除
V11-P3-08 config 2 个预留参数未消费 FALSE_POSITIVE batch_window_ms 为 Relay 批量窗口预留参数有意设计CONF-01 已标记 PARTIALLY_FIXED

P4: 低优先级

ID 问题 状态 验证方法
V11-P4-01 ContentBlock 4 处定义(不同域) FALSE_POSITIVE 4 个 crate 各自服务于不同协议域(消息/MCP/Driver/Hand按领域隔离是正确设计
V11-P4-02 Desktop ↔ Admin 13+ 类型名称不一致 DOCUMENTED TYPE-01 已在 V12 Batch 7 部分修复AgentInfo/KernelStatus剩余为 admin-v2 独立类型系统
V11-P4-03 文档数字不一致 (Skills 76 vs 66/75/77) FALSE_POSITIVE find skills -name SKILL.md = 75文档统一为 75
V11-P4-04 A2A/WASM feature-gated 未启用 FALSE_POSITIVE a2a/wasm 在 Cargo.toml 正确 feature-gated默认不启用有意设计
V11-P4-05 embedding 生成已禁用 FALSE_POSITIVE generate_embedding.rs 分块功能已实现,向量生成是 Phase 2 有意延迟,注释已完善

深度二次审计新增发现 (2026-04-02)

P0: 阻断级

ID 问题 状态 验证方法
SEC2-P0-01 skill_execute 空 context 反序列化崩溃 FIXED kernel-skills.ts — 填充空 context 字段
SEC2-P0-02 TaskTool::default() 调用 unimplemented!() FIXED task.rs — 移除 Default impl

P1: 严重级

ID 问题 状态 验证方法
SEC2-P1-01 FactStore trait 定义但全 workspace 无 impl FALSE_POSITIVE trait 已移除值类型保留AUDIT_TRACKER 未同步
SEC2-P1-02 agent-templates API 缺少 /api/v1 前缀 → 404 FIXED saas-client.ts — 添加 /api/v1 前缀
SEC2-P1-03 hand-execution-complete 无前端 listener FIXED kernel-hands.ts — 添加 onHandExecutionComplete listener
SEC2-P1-04 InMemoryStorage 6 处 RwLock unwrap() 级联 panic FIXED viking_adapter.rs — 替换为 expect()
SEC2-P1-05 HandRun 持久化错误 3 处静默忽略 FIXED approvals.rs — 添加 tracing::warn 日志
SEC2-P1-06 FTS 索引更新失败 3 处静默忽略 FIXED sqlite.rs — 添加 tracing::warn 日志
SEC2-P1-07 Worker dispatch 失败 4 处静默忽略 FIXED knowledge/handlers.rs — 替换为 if let Err 日志
SEC2-P1-08 Desktop 前端零测试覆盖 OPEN ls desktop/src/**/.test.
SEC2-P1-09 record_key_usage 错误忽略 → 计费数据丢失 FIXED relay/service.rs — 添加 tracing::warn 日志

P2: 高优先级

ID 问题 状态 验证方法
SEC2-P2-01 hmac/sha1 unused deps in zclaw-hands FIXED Cargo.toml — 移除 unused deps
SEC2-P2-02 serde_yaml 版本不一致 (desktop 0.9 vs pipeline 2) N/A 仅 zclaw-pipeline 使用 serde_yaml_bw v2无不一致
SEC2-P2-03 sqlx-postgres v0.7.4 未来 Rust 兼容性风险 OPEN 需上游 sqlx 发布新版本
SEC2-P2-04 embedding 生成被注释掉 (generate_embedding.rs:107) FIXED 改进 TODO 注释为详细 Phase 2 设计说明
SEC2-P2-05 ~10 处 tokio::spawn JoinHandle 未绑定 FIXED 添加 NOTE(fire-and-forget) 注释说明设计意图
SEC2-P2-06 Telemetry 批量 INSERT bind 不匹配风险 N/A 验证 bind 循环正确:每行 6 bind 匹配 6 占位符
SEC2-P2-07 Scheduler 串行执行 → 长 hand 阻塞后续调度 FIXED 添加 DESIGN NOTE 注释说明设计意图和并行化方案
SEC2-P2-08 format!("FROM {}", table) SQL 模式违反防御原则 FIXED 添加表名白名单常量 + 字符验证防御检查
SEC2-P2-09 hand_run_status 多传 handName 参数 FIXED kernel-hands.ts — 移除多余参数
SEC2-P2-10 kernel_apply_saas_config TOML 多行值 edge case FIXED lifecycle.rs — 添加三引号多行值支持

P3: 中优先级

ID 问题 状态 验证方法
SEC2-P3-01 A2A Router 4 RwLock 锁顺序未文档化 DOCUMENTED A2A feature-gated 默认不启用,生产环境无此风险
SEC2-P3-02 Admin Role 类型轻微不一致 (is_system) DOCUMENTED P4 级差异admin-v2 独立类型系统有意设计
SEC2-P3-03 Admin Billing/Knowledge/Roles 页面缺测试 OPEN ls admin-v2/tests/pages/ — 长期投资

二次审计状态变更日志

日期 ID 变更 备注
2026-04-02 SEC2-P0-01 NEW skill_execute 空 context 反序列化崩溃
2026-04-02 SEC2-P0-02 NEW TaskTool::default() unimplemented!()
2026-04-02 SEC2-P1-01 NEW FactStore trait 零实现
2026-04-02 SEC2-P1-02 NEW agent-templates API 路径缺 /api/v1
2026-04-02 SEC2-P1-03 NEW hand-execution-complete 无前端 listener
2026-04-02 SEC2-P1-04 NEW InMemoryStorage RwLock unwrap 级联 panic
2026-04-02 SEC2-P1-05 NEW HandRun 持久化 3 处静默忽略
2026-04-02 SEC2-P1-06 NEW FTS 索引 3 处静默忽略
2026-04-02 SEC2-P1-07 NEW Worker dispatch 4 处静默忽略
2026-04-02 SEC2-P1-08 NEW Desktop 前端零测试
2026-04-02 SEC2-P1-09 NEW record_key_usage 错误忽略
2026-04-02 SEC2-P2-01~10 NEW 10 项 P2 发现
2026-04-02 SEC2-P3-01~03 NEW 3 项 P3 发现
2026-04-02 - 深度二次审计 5 维并行审计24 项新发现
2026-04-02 AUD3-FE-01 NEW → FIXED chatStore.sendMessage 添加 isStreaming store 级互斥检查
2026-04-02 AUD3-FE-02/API-01 NEW → FIXED SaaSClient 添加 refreshMutex() 共享 Promise 并发锁

第三轮审计新增发现 (2026-04-02)

HIGH: 严重级

ID 问题 状态 验证方法
AUD3-FE-01 chatStore.sendMessage 无并发保护 FIXED chatStore.ts — 添加 isStreaming store 级 guard
AUD3-FE-02/API-01 SaaS token refresh 无并发锁 FIXED saas-client.ts — refreshMutex() 共享 Promise

MEDIUM: 高优先级

ID 问题 状态 验证方法
AUD3-FE-03 initializeStores 可能调用 3 次 FIXED index.ts 添加 _storesInitialized 去重 guard
AUD3-FE-04 window 全局变量存 interval FALSE_POSITIVE App.tsx 已使用 useRef非 window 全局变量
AUD3-FE-05 25+ 处 mixin as any FIXED gateway-heartbeat.ts 删除(死代码) + kernel-*.ts 改为 Record<string, unknown> + chatStore 改为 Record; as any 38→3
AUD3-FE-06 PropertyPanel 17 处 as any FIXED 13 处 (data as any) → 类型安全 d 访问器 (Record<string, unknown>)
AUD3-DB-01 无 down migration OPEN crates/zclaw-saas/migrations/
AUD3-DB-02 format! SQL 模式 FALSE_POSITIVE 同 SEC2-P2-08白名单+防御性验证已到位
AUD3-API-02 前端错误处理不统一 DOCUMENTED error-handling.ts 基础设施已完善100+ 文件渐进式迁移至 reportError/reportApiError
AUD3-CONC-02 ~15 处 fire-and-forget tokio::spawn FALSE_POSITIVE 与 SEC2-P2-05 相同,已添加 NOTE(fire-and-forget) 注释

LOW: 低优先级

ID 问题 状态 验证方法
AUD3-FE-07 offlineStore 全局变量存储 timer FALSE_POSITIVE 使用模块级 let 变量,非 window 全局变量
AUD3-FE-08 agentStore 读取中间态 FALSE_POSITIVE await loadClones() 后同步 get() 读最新状态,无中间态问题
AUD3-FE-09 retryAllMessages 无并发锁 FIXED 添加 isRetrying 模块级 guard + try/finally 重置
AUD3-CONC-03 approval polling 增加锁竞争 FALSE_POSITIVE 无 polling 机制,前端用 Tauri event 监听Mutex 在 hand 执行前已 drop 释放

第三轮审计状态变更日志

日期 ID 变更 备注
2026-04-02 AUD3-FE-01 NEW → FIXED sendMessage 入口添加 if (get().isStreaming) return
2026-04-02 AUD3-FE-02/API-01 NEW → FIXED SaaSClient 添加 _refreshPromise + refreshMutex() 共享 Promise
2026-04-02 - 第三轮审计 5 维并行审计14 项新发现2 HIGH + 8 MEDIUM + 4 LOW
2026-04-05 V11-P3-02 OPEN → FALSE_POSITIVE OfpDiscover 在 capability.rs 用于 A2A 权限检查feature-gated 有意设计
2026-04-05 V11-P3-03 OPEN → FALSE_POSITIVE 状态日志已于 04-04 标记,表格同步修正
2026-04-05 V11-P3-08 OPEN → FALSE_POSITIVE batch_window_ms 为 Relay 批量窗口预留参数
2026-04-05 V11-P4-03 OPEN → FALSE_POSITIVE find skills -name SKILL.md = 75统一
2026-04-05 V11-P4-04 OPEN → FALSE_POSITIVE a2a/wasm 在 Cargo.toml 正确 feature-gated
2026-04-05 V11-P4-05 OPEN → FALSE_POSITIVE generate_embedding.rs 分块已实现,向量生成 Phase 2 有意延迟
2026-04-05 AUD3-FE-03 OPEN → FIXED index.ts 添加 _storesInitialized 去重 guard
2026-04-05 AUD3-FE-04 OPEN → FALSE_POSITIVE App.tsx 已使用 useRef非 window 全局变量
2026-04-05 AUD3-FE-07 OPEN → FALSE_POSITIVE offlineStore timer 使用模块级 let非 window 全局变量
2026-04-05 AUD3-FE-08 OPEN → FALSE_POSITIVE agentStore await loadClones() 后同步 get() 无中间态
2026-04-05 AUD3-FE-09 OPEN → FIXED retryAllMessages 添加 isRetrying 并发 guard
2026-04-05 V11-P3-04 OPEN → FALSE_POSITIVE admin-v2 已有 Knowledge.tsx 完整消费
2026-04-05 V11-P3-06 OPEN → FALSE_POSITIVE scheduler.rs 已实现 last_run_at + last_result 持久化
2026-04-05 AUD3-FE-05/06 OPEN → FIXED gateway-heartbeat.ts 删除(死代码 9 as any) + PropertyPanel 13 as any → 类型安全 d 访问器
2026-04-05 AUD3-CONC-03 OPEN → FALSE_POSITIVE 无 polling 机制async Mutex 在 hand 执行前已 drop
2026-04-05 AUD3-API-02 OPEN → DOCUMENTED error-handling.ts 基础设施已完善,渐进式迁移
2026-04-05 DOC-03 OPEN → FIXED SKILL.md = 75CLAUDE.md 已统一
2026-04-05 DOC-04 OPEN → FALSE_POSITIVE CLAUDE.md 已统一为 9 启用 + 2 禁用
2026-04-05 V11-P4-01 OPEN → FALSE_POSITIVE ContentBlock 4 处服务于不同协议域
2026-04-05 V11-P4-02 OPEN → DOCUMENTED TYPE-01 部分修复admin 独立类型系统
2026-04-05 SEC2-P3-01 OPEN → DOCUMENTED A2A feature-gated 默认不启用
2026-04-05 SEC2-P3-02 OPEN → DOCUMENTED P4 级差异admin 独立类型系统
2026-04-05 V11-P2-05 部分关闭 → FIXED 完整审计: 160 @connected + 16 @reserved + 1 未注册 = 177 总命令

V12 模块化端到端审计修复 (2026-04-04)

4 个 P0 全部修复16 个 P1 全部关闭13 FIXED + 1 WONTFIX + 2 FALSE_POSITIVE

Batch 1: P0 + 核心 P1 修复 (0576226)

| M4-02 | 反思引擎 LLM 未接入 → FIXED | reflection_reflect 传入 Kernel driver | | M3-01 | hand_execute 丢弃 run_id → FIXED | HandResult 添加 run_id 字段 | | M5-01 | triggers 映射错误 → FIXED | skill-discovery.ts 使用 backend.triggers | | M6-02 | pipeline_list 只用 v1 → FIXED | 先尝试 v2 再 fallback v1 |

Batch 2: P1 连通性修复 (6d1f2d1)

| M4-03 | 心跳不自动启动 → FIXED | agent_chat_stream 自动初始化 HeartbeatEngine | | M7-04 | refreshToken 未传 body → FIXED | 显式传 refresh_token + 轮换存储 | | M7-02 | ConfigMigrationWizard PUT 用布尔值 → FIXED | 使用 existing.id |

Batch 3: Hand 系统增强 (59f660b)

| M3-04 | max_concurrent 未实现 → FIXED | HandConfig 添加字段 + 全 9 个 Hand 初始化 | | M3-05 | timeout_secs 未实现 → FIXED | tokio::time::timeout 包装 execute_hand | | M2-01 | createClone 字段丢失 → FIXED | soul 字段透传到 kernel |

Batch 4: 搜索 + 审批 (985644d)

| M4-05 | 记忆搜索用 LIKE → FIXED | FTS5-first + CJK LIKE fallback | | M3-03 | browserHandStore 绕过审批 → FIXED | executeTemplate/executeScript 添加 canAutoExecute 检查 |

Batch 5: 安全加固 (619bad3)

| M1-01 | Gemini API Key URL 泄漏 → FIXED | 改用 x-goog-api-key Header | | M1-03/04 | Mutex unwrap 在 async → FIXED | unwrap_or_else(|e| e.into_inner()) | | M2-08 | Agent CRUD 无验证 → FIXED | 空名/温度范围/max_tokens 验证 | | M11-06 | chat message ID 冲突 → FIXED | crypto.randomUUID() 替代 Date.now() |

Batch 6: 持久化 (88172aa)

| M11-03 | Classroom 数据内存丢失 → FIXED | SQLite persistence (persist.rs) + 自动保存 |

Batch 7: 架构统一性 (1fec8cf)

| M11-03 | lib.rs 集成 persistence state 注册 → FIXED | Tauri setup hook + in-memory fallback | | M3-02 | Browser Hand 双路径 → DOCUMENTED | Rust BrowserHand 明确标注为 schema validator + passthrough实际执行走 Tauri browser_* 命令 | | M4-04 | 自主授权后端无强制 → AUDITED | execute_hand/execute_hand_with_source 添加 defense-in-depth 审计日志 | | TYPE-01 | TS/Rust 类型不一致 → FIXED | AgentInfo 添加 camelCase serde + TS 补齐字段KernelStatus 对齐 baseUrl/model | | TriggerSource | 缺少 PartialEq derive → FIXED | 添加 #[derive(PartialEq)] | | SEC2-P1-01 | EXTRACTION_DRIVER OnceCell 死代码 → DOCUMENTED | 标注为 legacy pathKernel struct 为 active path |

待后续决策的 P1

| M4-04 深层 | 自主授权后端强制阻断 | WONTFIX | Tauri 命令层已阻断手动触发scheduler/trigger bypass 是有意设计4 层防御深度已足够 |