Files
DevFlow/docs/05-代码审查/定时走查-2026-06-15-第7轮.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.3 KiB
Raw Blame History

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

触发:定时走查 cron每 30 分钟)。范围 = stores 独立 store 垂直切片ai/knowledge/appSettings/index未审+ 核 CR-24/26/27 修复。 方法:主代理 git show 3 提交 + 1 路代理走查 stores。 性质:核对记录,不改产品代码(本会话 session-role-diagnose-only。todo 见 docs/todo.md。 关联:第1-6轮


CR-24/26/27 (价值第 6 次闭环)

提交 CR 修复
ef2d033 CR-24 AiChat onBeforeUnmount 补 store.stopListener() + useAiEvents stopListener 补 clearStreamWatchdog()(卸载清 130s watchdog 避免写已卸载 state
7637f29 CR-26 project.ts _activeTaskProject 三态undefined 不触发/all 全量/具体 id+ Tasks.vue 空态兜底89 行)
5e6aa79 CR-27 Dashboard 删决策/批注死代码(-96 行)+ stage 颜色 + refresh try/catch

CR-25分离窗口状态机 R3/R4/R5仍存(无提交提及,接收方未修或在做)。


🔴 knowledge error 通道断P1CR-08 深化)

CR-260615-28 [P1] state.error 死字段 + create 语义矛盾

  • state.error 死字段knowledge.ts:19,49,53,64,74,105 写入 state.error,但 grep 全应用零消费Knowledge.vue store.error 零命中)→ 用户遭遇加载/检索/配置失败只看空白列表,无错误提示
  • CR-08 深化CR-08「store error fallback 11 处中文」只记了硬编码,整个 error 通道前端是断的(写了从不读)— 比中文硬编码更严重
  • create 语义矛盾create(:80-85) 成功后调 loadCandidates若 loadCandidates 失败把错误塞 state.error但 create 已返回 record 给调用方(认为成功)

Knowledge.vue 接 error banner/toast或删 state.error 改 throw 由调用方 catch + create 内 loadCandidates 失败不污染 error。


ai.ts 状态机完整(亮点,验证修复质量)

四核心态 streaming/generatingConvId/currentText/queue6 复位点闭环,无卡死 streaming=true 缺口:

  • AiCompleteduseAiEvents:189-217/ AiError(:220-235) + queue=[]B-32
  • onStreamTimeout(useAiStream:25-28) + queue=[] + running→rejected(B-33)
  • sendMessage catch(useAiSend:99-105)/ approveToolCall catch(:121-133) + queue=[]
  • stopChat(:149-154) 本地先复位再发停止信号(不依赖后端 AiCompleted防审批态看门狗已 clear 致 AiCompleted 竞态丢失)
  • 分离窗口 resumeInDetached(useAiWindow:111) 先 invoke('ai_is_generating') 核对R4 防 df-ai-gen 残留假气泡)

验证B-32/33/ef2d033 修复质量扎实,状态机无非法组合残留。

appSettings 双源同步(亮点)

三态 cache(reactive)↔SQLite↔ref

  • set 乐观写 cache + debounce 300ms 合并 + pendingValues 取最新值非定时器快照落库失败仅日志UI 一致性优先,不回滚致不一致)
  • useSetting 双 watch Object.is 守卫防循环
  • switchConversation 双 token 竞态防护useAiConversations:44,48,52,122 _latestSwitchId

🟡 P2/P3 新发现

CR-260615-29 [P2] ai.ts messages 无上限 + knowledge 竞态/错误不一致

  • ai.ts messages 单对话无上限useAiSend push user+ai / useAiEvents push err/审批 / useAiStream push delta单对话线性增长切换对话整体替换是减负点但同对话不轮换长会话+大工具结果内存可观
  • knowledge 异步无竞态loadList/search/loadConfig 无请求序号messages 有 switch token快速连点后返回覆盖先
  • knowledge 错误处理不一致load*/search 有 catch 兜底create/updateStatus/archive/saveConfig/extractNow 直抛(调用方无 catch 致 unhandled

CR-260615-30 [P3] appSettings useSetting 对象值不落库(边界)

useSetting 双 watch Object.is 守卫对值类型完美防循环,但对象/数组值深 mutater.value.x=1)时 Object.is(v,cache[key]) 同引用恒 true → 不触发 set 落库,静默不持久化。当前无 buguseSetting 多绑值类型df-ai-ui 走 set 整对象替换),隐式契约。


📊 本轮摘要

类别 代表
价值闭环 3 CR-24/26/27 全修(修复质量好)
P1 新发现 1 knowledge error 通道断CR-28CR-08 深化)
P2/P3 新发现 2 ai.ts messages 无上限 + knowledge 竞态CR-29/ useSetting 对象值边界CR-30
亮点 2 ai.ts 状态机完整6 复位点,验证修复质量)/ appSettings 双源同步设计扎实

本轮价值

  1. knowledge error 通道断是新维度发现 — CR-08 只记中文硬编码,实际整个 error 通道前端断的(写了从不读),用户看不到知识库错误
  2. ai.ts 状态机完整肯定前几轮修复质量B-32/33/ef2d033 闭环无卡死缺口)— 走查不仅找问题也验证修复
  3. CR-24/26/27 三项 P1/P2 全修,走查↔接收方闭环高效(第 6 次闭环)

方法论:第 5 个垂直切片storesknowledge error 通道断是新发现维度(超越 i18n 的功能缺陷。ai.ts 状态机完整是「走查验证修复」价值(非只找 bug

todo 映射CR-260615-28P1 knowledge error/ CR-29P2 messages+竞态)/ CR-30P3 useSetting 边界)。