Files
DevFlow/docs/05-代码审查/定时走查-2026-06-15-第5轮.md
绝尘 f30df333b3 docs: 巡检简报+todo 回写(2026-06-15 第2轮)
巡检发现:
- 2196c77 workflow 整文件替换回退破坏(AiChat+Ideas 12项功能)
- B-260615-03 truncated 标志已落地
- AR-8-scroll scrollToBottom smooth 已补
- CR-260615-09 .ai-md 残余:4详情页各21处 scoped .ai-md
  (全局 ai-md.css 75行已建,旧副本待清理但非阻塞)
2026-06-15 17:23:57 +08:00

5.6 KiB
Raw Blame History

定时代码走查 — 第 5 轮2026-06-15

触发:定时走查 cron每 30 分钟)。范围 = api 层垂直切片9 文件此前从未深查IPC 契约边界。无新提交自第4轮起 src/ 干净)。 方法2 路后台代理Aapi invoke 契约层 / Btypes 类型对齐层)+ 主代理地面核对 + WebSearch 权威裁决。 性质:核对记录,不改产品代码(本会话 session-role-diagnose-only。todo 待修项见 docs/todo.md。 关联:第1-4轮


🚨 核心发现Tauri v2 camelCase 行为权威裁决(代理矛盾 → 纠正假阳性)

矛盾

  • 代理 ATauri v2 不转 camelCase6 处 IPC 参数遗漏ai_approve/ai_save_provider/knowledge_events/ai_set_concurrency_config/ai_set_provider/ai_pending_tool_calls真 P0B-34 同类)
  • 代理 BTauri v2 默认转 camelCase宏生成别名6 处全误判

权威裁决WebSearch Tauri v2 官方文档 + StackOverflow

Tauri v2 默认自动转换 snake_caseRust↔ camelCaseJavaScript。 Rust #[tauri::command] fn greet(tool_call_id: String) ↔ JS invoke('greet', { toolCallId }) 自动匹配。 除非 #[tauri::command(rename_all = "snake_case")] 才需 JS 传 snake_case。

项目地面核对:grep rename_all src-tauri/state.rs:30KnowledgeConfig 的 serde非 command 参数无任何 #[tauri::command] 用 rename_all → 全部走默认camelCase 转换)。

结论

代理 B 对,代理 A 6 处全误判(假阳性)

  • api/ai.ts:15 { toolCallId } → 后端 tool_call_id 自动转换,工作
  • api/ai.ts:20 { convId } / :47-54 { providerType/baseUrl/apiKey/defaultModel } / :59/64 { providerId } / :69 { globalLimit/perConvLimit } → 全
  • api/knowledge.ts:80 { knowledgeId/eventType }

camelCase 和 snake_case 都工作项目混用ai.ts 用 camelCaseworkflow.ts 用 snake_case均正常


🔑 根因B-34 错误注释传播误导

src/stores/project.ts:273 B-34 注释「Tauri 2 IPC 不转 camelCase,须 snake_case 对齐后端 workflow.rs:211」与权威矛盾(实际转)。

  • 代理 A 据此错误注释判 6 处假阳性 P0认为 camelCase 失效)
  • B-34 实际「修复」selectType→select_typeno-opcamelCase 本工作snake_case 也工作,两种都接受。改了无害,但注释错误传播误导
  • 若「多选审批静默失效」曾为真症状,根因非 selectType 命名需复核camelCase 转换正常)

本轮最高价值:揭露 B-34 技术债(错误注释),避免后续维护者/走查代理据此做无用「修复」(代理 A 已踩坑)。


代理 B 发现types 对齐)— 良好4 项低风险

字段名/可选/枚举/响应包装全对齐(无 P0 undefined 风险7 Record structIdea/Project/Task/Workflow/AiProvider/Knowledge/KnowledgeEvent字段名全 snake_case 对齐Option↔可选对齐AiChatEvent/WorkflowEvent union 变体对齐。

4 项低风险CR-260615-22

  1. TaskRecord.statustypes.ts:88注释 review_ready/merged/abandoned ,后端 TaskStatustypes.rs:165= todo/in_progress/in_review/testing/done/blocked/cancelled
  2. IdeaRecord.status:11注释漏 archivedIdeaStatus 6 变体)
  3. ProjectRecord.status:39注释漏 testing/releasingProjectStatus 7 变体)
  4. AiConversationSummary.models:233冗余后端返但前端无消费点

status 字段类型是 string(非 literal union注释不阻断运行时仅误导维护者。


亮点

  • api/types.ts 类型对齐质量高7 Record struct + union 类型全对齐,无字段漂移
  • IPC 命令名零漂移(代理 A 核 60+ 命令注册):无拼写错/未注册/已删残留
  • 越层下沉治理store 不直碰 invokeworkflow.ts:7-8 注释api 是唯一 IPC 边界
  • workflow.ts 契约自觉:虽「不转 camelCase」判断有误但 snake_case 风格统一 + options 透传注释R-PD-5是好的防回归实践

📊 本轮摘要

类别 代表
权威裁决 1 Tauri v2 默认转 camelCase代理 B 对)
假阳性纠正 6 代理 A IPC camelCase 遗漏全误判
根因澄清 1 B-34 错误注释传播误导CR-23
低风险新发现 4 types 枚举注释错/漏 + 冗余字段CR-22

本轮价值:多代理交叉验证暴露矛盾 → WebSearch 权威裁决 → 纠正 6 处假阳性(避免后续基于错误注释的无用修复)+ 揭露 B-34 注释技术债。

方法论

  1. 走查须以权威行为为准(官方文档/实际运行),非代码注释 — 注释可能错误(如 B-34代理 A 据错误注释判 6 处假阳性
  2. 多代理交叉验证有效 — 代理 A/B 结论矛盾触发权威裁决,单代理走查无此纠错机制
  3. api 层垂直切片证实类型对齐质量高(与前几轮横切互补)

todo 映射:不记代理 A 6 处(假阳性)+ CR-260615-22types 注释/冗余 P3+ CR-260615-23B-34 注释修正 P2


Sources