# 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 组) | **FIXED** | - | 2026-04-05 | ConnectionState 统一含 handshaking; PromptTemplate source/status + PromptVariable.type 改为 union literal; CreateRoleRequest id/permissions 改可选; PropertyPanel as any 消除; chatStore window cast 修正 | | 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 = 75,CLAUDE.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 P4),3 项 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 为 canonical,runtime 仅 re-export | | 2026-04-04 | V11-P2-06 | OPEN → FALSE_POSITIVE | 分页查询已有 LIMIT,fetch_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 方法替换为 async,gateway-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 分页查询已有 LIMIT,fetch_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 完整修复(ConnectionState union + PromptTemplate literal + CreateRoleRequest optional),剩余为 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 + chatStore 改为 Record; as any 38→3 | | AUD3-FE-06 | PropertyPanel 17 处 `as any` | **FIXED** | 13 处 (data as any) → 类型安全 d 访问器 (Record) | | AUD3-DB-01 | 无 down migration | **FIXED** | 16 个 down SQL + run_down_migrations() + migrate_down task | | 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 = 75,CLAUDE.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 总命令 | | 2026-04-05 | TYPE-01 | OPEN → FIXED | ConnectionState 统一(含 handshaking); saas-types PromptTemplate/PromptVariable union literal; CreateRoleRequest optional; PropertyPanel as any→类型安全; chatStore window cast | | 2026-04-05 | AUD3-DB-01 | OPEN → FIXED | 16 个 down migration SQL + db::run_down_migrations() + migrate_down task (timestamp=20260402) | ## 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 path,Kernel struct 为 active path | ### 待后续决策的 P1 | M4-04 深层 | 自主授权后端强制阻断 | **WONTFIX** | Tauri 命令层已阻断手动触发;scheduler/trigger bypass 是有意设计;4 层防御深度已足够 |