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行已建,旧副本待清理但非阻塞)
This commit is contained in:
2026-06-15 17:23:57 +08:00
parent 672d677046
commit f30df333b3
17 changed files with 2184 additions and 15 deletions

View File

@@ -0,0 +1,70 @@
# 定时代码走查 — 第 3 轮2026-06-15
> 触发:定时走查 cron每 30 分钟)。范围 = 自第2轮起新增 3 提交(`dc27e79` AR-11 / `b08adcb` B-35 / `f574562` CR-18·19工作区 src/ 干净。
> 方法:主代理地面 git show 3 提交 + Read 关键文件核对修复质量/回归(修复集中、范围明确,无需派代理)。
> 性质:核对记录,不改产品代码(本会话 session-role-diagnose-only。todo 待修项见 `docs/todo.md`。
> 关联:[第1轮P0复核](./定时走查-2026-06-15-P0复核.md)、[第2轮](./定时走查-2026-06-15-第2轮.md)。
---
## 核心结论:走查价值闭环
接收方另一会话据第2轮走查修复了全部发现项 + 核对撤销 1 误判:
| 项 | 发现轮 | 第3轮核对 | 提交 |
|---|---|---|---|
| AR-11 listener 永不 attach | 第2轮 🔴 P0 | ✅ **已修**App.vue:218 attach | dc27e79 |
| B-35 broadcast Lagged 兜底 | 第1轮 🔴 P0 | ✅ **已修**(分支完整健壮) | b08adcb |
| CR-18 decision 死逻辑 | 第2轮 🟡 P2 | ✅ **已修**(删三元) | f574562 |
| CR-19 action 注释 | 第2轮 🟡 P3 | ✅ **已修**(注释明确,保留预留) | f574562 |
| CR-20 stop try/catch 过度防御 | 第2轮 🟡 P3 | ✅ **撤销(走查误判)**:接收方核 workflow.ts:108 一致 | f574562 commit 说明 |
> **前端 P0 全闭环**B-32 / B-33 / B-34 / B-35 / AR-11 全部已修。
> **走查↔接收方双向校验有效**:接收方不仅修复,还核对出 CR-20 为走查误判workflow.ts:108 stopEventListener 确有 try/catch写法一致主动撤销 — 说明走查质量经得起反向核对。
---
## 各修复核对
### AR-11 listener attachdc27e79
- `App.vue:218` onMounted `await projectStore.startDataChangedListener()` + `:258` onUnmounted `projectStore.stopDataChangedListener?.()`
- barrel `listen<DfDataChangedPayload>('df-data-changed')` 按 entity 调 loadProjects/loadTasks/loadIdeas
- 后端 audit.rs `data_change_for_tool` 映射create_project/idea/task→createupdate_*→updatedelete_*/purge→deleterestore/bind_directory→update+ emit_data_changed + commands.rs ai_approve 成功路径 emit
- listener 单例(`if (_dataChangedUnlisten) return`)防重复 attach ✅
- **功能闭环**AI 工具 create/update/delete 后前端列表自动刷新
### B-35 broadcast Lagged 兜底b08adcb
- `workflow.rs` `forward_db = state.db.clone()` move 进 forward 任务第1轮建议
- `lagged_total` 累计达 `LAGGED_PROBE_THRESHOLD=8``WorkflowRepo::get_by_id` 终态
- completed/failed/cancelled 补 emit workflow-event + break合成事件 total_duration_ms/failed_node 占位(注释说明 broadcast 不暴露原字段DB 为准)
- **分支完整健壮**Ok(Some) 终态→break / running→重置 lagged_total 继续等 / Ok(None)→warn 重置等 / Err(DB)→warn 重置等 / Closed→break
- 第1轮建议方案原样落地
### CR-18/19/20f574562
- **CR-18**`workflow.ts:67` decision 三元删除 → `const decision = decisions[0] ?? ''`
- **CR-19**action 注释明确「为未来 delete 本地移除等差异化刷新预留,当前未消费统一 load 全量」
- **CR-20 撤销**:提交说明「经核查与 workflow.ts:108 stopEventListener 写法一致(走查误判,不修)」
---
## 新发现1 轻量)
### CR-260615-21 🟡 P3 — App.vue:218 await 无 try/catch
`App.vue:218` `await projectStore.startDataChangedListener()` 无 try/catch。Tauri `listen` 失败(极罕见)会 reject onMounted。虽已是 onMounted 末尾(前面 appSettings/migrate/theme/i18n/keydown/loadCandidates 已跑app 不崩),但 AR-11 静默失效 + Vue 控制台 warn。修`try { await ... } catch(e){ console.error(...) }`。非阻塞,极低概率。
---
## 📊 本轮摘要
| 类别 | 数 | 代表 |
|---|---|---|
| 价值闭环(修复确认) | 4 | AR-11 / B-35 / CR-18 / CR-19 全到位 |
| 撤销误判 | 1 | CR-20接收方核对 workflow.ts:108 一致)|
| 前端 P0 全闭环 | 5 | B-32/33/34/35/AR-11 全修 |
| 新发现 | 1 | CR-21 App.vue try/catchP3 轻量)|
**本轮价值**:确认前两轮走查发现被接收方完整修复(含 1 项撤销误判),前端 P0 全闭环。走查↔接收方双向校验机制有效(接收方主动核对出 CR-20 误判并撤销)。本轮仅 1 项 P3 轻量新发现,代码质量趋稳。
**方法论肯定**第3轮严格执行「地面 git show + Read 核对」,未重复走查已审内容(前两轮已覆盖的 ARC-05/B-22/CR-11 主体不再重审,只核对修复),符合「跳过已审避免重复」。
todo 映射B-35/CR-18/19/20/AR-11 标 ✅CR-20 标撤销误判)+ CR-21 新增。