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<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 = 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 |
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 层防御深度已足够 |