# Todo 归档 2026-06-27

> 从 todo.md / docs/todo.md 迁移的已完成项
> 归档日期: 2026-06-27

---

## 灵感模块功能完善 — P0 数据安全/正确性

- [x] **#1 软删除机制**：ideas 表加 `deleted_at` 列 + 软删除（对标 tasks/projects 的 `delete` + `restore` 全套模板）。当前 `delete_idea` 是硬删除，误删不可恢复。
- [x] **#2 白名单收紧**：`settings.rs` ideas 白名单移除 `id` / `created_at`，防止主键和创建时间被篡改。（对标 B-260616-16 tasks 白名单修复）
- [x] **#4 priority 值域校验**：`create_idea` / `update_idea` 加 priority 校验（`parse::<i32>() ∈ 0..=3`，非法返 Err）。（对标 B-260615-15 tasks priority 修复）

## 灵感模块功能完善 — P1 架构/一致性

- [x] **#5 有损转换修复**：`record_to_idea()` 不再硬编码 `status=Draft` / `related_ids=空`，从 IdeaRecord 读取真实值，评估时不丢失上下文。
- [x] **#6 评分关键词拆文件**：将 `scoring.rs` 硬编码关键词拆到独立 const 文件（最小改动）。启发式是过渡方案，对抗式评估上线后按需升级为 JSON 配置。**不做 DB 表配置化**（过度工程）。
- [x] **#7 promote 补偿改软删除**：`promote_idea` 回写失败时的补偿删除从 `purge_with_descendants`（不可恢复）改为 `soft_delete`（软删除，可恢复）。
- [x] **#8 关联双向同步**：A 关联 B 时自动在 B 的 `related_ids` 中补入 A，解绑时同步移除，保持关联关系对称。
- [x] **#9 创建表单补 tags 输入**：捕捉灵感表单增加 tags 输入（逗号分隔或 chip 组件），`confirmCapture` 传 tags JSON 字符串给后端。

## 灵感模块功能完善 — P2 前端/UX

- [x] **#10 创建表单补全 priority/source**：捕捉模态框增加 priority 下拉（低/中/高/紧急）和 source 输入框。
- [x] **#14 雷达图正名/替换**：将 i18n key 和 CSS class 中的 "radar" 改为 "score-bar"（或引入真正的雷达图组件如 ECharts radar）。

## AI 对话目标丢失

- [x] **G3 状态机收敛目标** ✅文档衔接：`conv_state.rs`/`mod.rs` 注释明示 pinned_goals 内容态与 ConvState 生命周期态正交,不进 enum。
- [x] **G5 附 bug** ✅已排查(不改代码)：dump DB 确认 seq1(thinking 独白)+seq4(tool_result 内容)均 system+**早期 timestamp**(旧版本遗留脏数据),非当前 compress summary 机制问题(摘要四段式正常)。最新 system(seq0 topic marker)正常。**结论:历史脏数据,数据治理项**(可选清 DB),非当前 bug。anthropic_compat thinking 隔离你在进行中(M)。
- [x] **G1 多目标累积**:`pinned_goal: Option<String>` → `pinned_goals: Vec<String>`,每次发消息/编辑/强制发送提取目标追加到列表(去重),支持换目标且不丢失历史目标。`MAX_GOALS=5` 防无限膨胀。

## 对抗式评估接入 — 后端 IPC 接入

- [x] **A1 evaluate_idea 命令**：新增 IPC command，按 Provider 配置构造 `AdversarialEngine`（有 Provider → `new(provider)`，无 → `heuristic()`），调 `evaluate(idea)` 返回 `AdversarialEval`。
- [x] **A3 评估结果持久化**：评估结果写回 `ideas` 表（scores + evaluated_by + evaluated_at），避免每次重新评估。
- [x] **A4 类型导出**：`AdversarialEval` / `EvaluatedBy` / `Recommendation` 等类型经 IPC serde 暴露给前端（检查 `df-types` 是否需补充）— 已验证：当前通过 `df_ideas::adversarial::*` 路径直接可用，前端经 `IdeaRecord.ai_analysis` JSON 字符串消费，无需搬运到 `df-types`。

## 对抗式评估接入 — 前端结果展示

- [x] **B1 灵感详情页评估面板**：展示正方论点 / 反方论点 / 分析师综合评分，`evaluated_by` 标签区分（LLM / 启发式兜底 / 纯启发式）。
- [x] **B2 评估触发按钮**：灵感详情页加「深度评估」按钮，调 `evaluate_idea` IPC，loading 状态 + 错误提示。
- [x] **B3 评分维度可视化**：可行性 / 影响力 / 紧急度三维度展示（复用现有 score-bar 或引入 radar）。

---

## 🔍 2026-06-21 AI Chat 技术债审查

### P1 已即时修

- [x] ✅(主代修·chat.rs:458-461 ai_approve exec_result 包 tokio::time::timeout(60s) 对齐 ai_authorize_dir:658·cargo check EXIT 0) **TD-260621-05a** — **[P1🔴]** ai_approve 缺 60s 执行超时(用户"静默吞消息"bug F-260620 同型复发)。ai_authorize_dir 有超时 ai_approve 漏。卡死→generating 永真→前端 130s 看门狗吞消息。
- [x] ✅(主代修·useAiConversations.ts:99 switchConversation activeConversationId 设定后加 `state.streaming = state.generatingConvs.has(id)`·vue-tsc EXIT 0) **TD-260621-06a** — **[P1🔴]** switchConversation 不复位 streaming,真并发切非生成会话残留 stop 按钮→点 stop 发错会话。

### P1 归路线

- [x] TD-260621-01 [P1·归 F-09 B 路线 per-conv state] ✅(批2-A 落地·useAiStream `_watchdogTimers` Map<convId,timer> + `_legacyWatchdog` fallback 双路·onStreamTimeout 携 convId 仅清该 conv·2026-06-21) — **watchdog 单计时器全清误杀并发会话**。
- [x] TD-260621-02 [P1·归 F-09 B 路线 per-conv state] ✅(批2-A 落地·pendingMaxRounds ref<string|null> 挂起 convId + 守卫比对 activeConversationId·DirAuthDialog visibleDirAuths filter conversationId·2026-06-21) — **pendingDirAuth/pendingMaxRounds 全局单 ref 非 per-conv**。
- [x] TD-260621-03 [P1·patch_file 落地债 F-260615] ✅(读改写整体移入 _patch_guard 锁内串行化防 lost update + 删 entry().or_insert() 内存泄漏 + drop 写序列后释放·2026-06-21) — **patch_file 读改写在 FILE_LOCKS 外,lost update**。
- [x] TD-260621-04 [P1·patch_file 落地债 F-260615] ✅(read_file 三返回点返 file_hash 闭环 + 抽 compute_file_hash helper read_file/patch_file 共用消格式漂移·2026-06-21) — **expected_hash 契约破裂,指纹防并发形同虚设**。
- [x] ✅(2026-06-24·ba811ea chat.rs executed→completed 6处:460幂等读/584 ai_approve写/634判定/668 IPC返回/885 authorize_dir日志/889 authorize_dir写 + df-storage V27 迁移 UPDATE 存量 executed→completed + v27 两测试 unify/idempotent·cargo check EXIT 0 + df-storage 78 passed) **TD-260621-05** [P1·归 SMELL-P1-6] — **审批状态字符串双轨**(已统一)。

### P2 精选 — 2026-06-24 核验销账

- [x] ✅已修(commit a7dbd50,finalize:35 `let _ =`→match Err tracing::error,对齐 audit_finalize) — audit_tool_call 吞错
- [x] ✅已修(a7dbd50,conversation/chat finalize_pending_placeholders pub(crate)) — switch+delete retain 占位终态化
- [x] ✅已修(TD-260621-03 06-21,_patch_guard 串行化 + 删 entry().or_insert()) — patch_file FILE_LOCKS 永不清理
- [x] ✅已是正确态(mod.rs:772 #[allow(dead_code)]+预留注释) — PerConvState.created_at
- [x] ✅已是正确态(阶段3a 下沉 enum ApprovalKind::Risk{diff}) — PendingApproval.diff

## 🔍 2026-06-21 查询能力缺口 + run_workflow 缺陷

- [x] BUG-260621-01 [P1🔴·确定修法] — **run_workflow 空 dag 反序列化失败(missing field nodes),阻塞任务工作流推进** ✅ **2026-06-22 修复**
- [x] F-260621-02 [P2] — **任务/项目/灵感列表查询维度补全(下沉后端+关键词搜索+排序分页)** ✅ **2026-06-22 实施**

## 🔴 2026-06-19 BUG-260619-06 L0 clear 致冷启动审批丢失(已修复)

- [x] **BUG-260619-06** — L0 clear 致冷启动审批丢失。方案 A 修复：`lib.rs:62` `clear()` → `retain(|_, a| !a.recovered)`。

## 🔴 2026-06-18 Agentic 最大轮次设置不生效

- [x] ✅(workflow wuirgcxoy) **B-260618-23 [P1]** — **Agentic 最大轮次设置不生效（设 30 仍按 10 截断）**。修复：sync 上提到 App.vue 根 onMounted。

## 🔧 2026-06-17 走查·tauri 打包目标收窄 + 状态映射 DRY

- [x] ✅(主代核验·tauri.conf.json:28 `["nsis"]` 已入库) B-260617-11 [P2] — **tauri.conf.json 打包目标收窄**。

## 🔧 2026-06-17 走查·DeepSeek reasoning_content 实施审查

- [x] ✅(2026-06-20 核验) B-260617-16 [P3·可选] — **Partial(MidStream 保文)回填半截 reasoning_content 语义待评**。

## 🔧 2026-06-17 对话标题不更新

- [x] ✅(2026-06-18) **B-260617-17 [P2]** — **对话标题不更新（对话很久/刷新后仍"新对话"）**。

## 💡 2026-06-16 新需求（UX 交互优化）

- [x] ✅(F-15 全阶段完成) **F-260616-15** [P1] — **AI Chat 上下文管理增强：会话分段 + 手动压缩 + 智能裁剪**。

## P1 — 重要缺陷

- [x] ✅(workflow w999qdu86) **BUG-260618-11** — **[P0🔴]** `commands.rs:289` ai_approve 幂等路径 `unwrap_or_default` 吞 DB 错误。

## 🔴 架构坏味道全面扫描 — P0 必须修复

- [x] ✅(workflow w5siwnipj) **SMELL-P0-1** — **[P0🔴]** `unwrap_or_default` 吞错 **5 高危闭环**。
- [x] ✅(workflow w2xkw4ybh) **SMELL-P0-2** — **[P0🔴]** `tool_registry.rs:363 build_ai_tool_registry` **1091 行单函数**。
- [x] ✅(2026-06-20 核验) **SMELL-P0-3** — **[P0🔴]** `AiChat.vue` **4026 行 God 组件**。
- [x] ✅(workflow wowdnw4ba) **SMELL-P0-4** — **[P0🔴]** `df-execute` crate **零测试**。

## 🔴 架构坏味道全面扫描 — P1 应该改进

- [x] ✅(workflow w8774xcev) **SMELL-P1-1** — **[P1🟡]** 生产代码 206 处 `unwrap()` 排查。
- [x] ✅(workflow wuirgcxoy no-action) **SMELL-P1-2** — **[P1🟡]** IPC 层 `.map_err(err_str)?` 样板。
- [x] ✅(workflow wuirgcxoy no-action) **SMELL-P1-3** — **[P1🟡]** Vue views try-catch-finally invoke 模式。
- [x] ✅(workflow w8774xcev) **SMELL-P1-4** — **[P1🟡]** df-nodes 聚合点依赖 5 crate。
- [x] ✅(workflow weckqp9mv no-action) **SMELL-P1-5** — **[P1🟡]** IPC 层职责泄漏。
- [x] ✅(workflow weckqp9mv no-action) **SMELL-P1-7** — **[P1🟡]** bool 参数陷阱。
- [x] ✅(workflow wowdnw4ba) **SMELL-P1-8** — **[P1🟡]** 架构文档过时 6 篇更新。
- [x] ✅(agent crud-split 实施) **SMELL-P1-9** — **[P1🟡]** crud.rs 2212 行按表拆分。

## 🔴 架构坏味道全面扫描 — P2 可选优化

- [x] ✅(workflow wowdnw4ba no-action) **SMELL-P2-1** — run_workflow_inner 282 行+8 参数。
- [x] ✅(workflow wowdnw4ba) **SMELL-P2-2** — 前端全局 ErrorBoundary。
- [x] ✅(workflow w8774xcev) **SMELL-P2-3** — HashMap<String,String> → 结构体。
- [x] ✅(workflow w5siwnipj) **SMELL-P2-4** — coordinator.rs 空壳标注 roadmap。
- [x] ✅(workflow w5siwnipj) **SMELL-P2-5** — #[allow(dead_code)] **7 处全部标注完成**。

## 🔴 架构坏味道全面扫描 — sweep 派生登记

- [x] ✅(2026-06-22 核验) **ARC-260618-01-e** — adversarial evaluate_with_llm 一致性。
- [x] ✅(2026-06-20) SW-260618-21 [P2] — **formatRelativeZh 重命名 formatRelative**。
- [x] ✅(2026-06-20 核验) SW-260618-22 [P2] — **useAiSend resolveLang DRY**。

## P2 — 不阻断缺陷/增强

- [x] ✅(2026-06-20 核验) B-260614-05 — **[P2→降级]** 分离窗口（detached）跨窗口状态。

## 🔧 2026-06-18 6 域并行走查 sweep-fix — 已修 12 处

- [x] ① context.rs `estimate_message` 累加 parts Text/Image.base64 token
- [x] ② anthropic_compat.rs Image 转换 clone→move
- [x] ③ scan.rs `is_pure_badge_line` to_lowercase→to_ascii_lowercase
- [x] ④ scan.rs `is_monorepo` workspaces null 误判
- [x] ⑤ adversarial.rs MockProvider 补 reasoning_content
- [x] ⑥ audit.rs `audit_finalize` 拆 unwrap_or_default 吞错
- [x] ⑦ commands.rs `ai_conversation_delete` 补非活跃对话 pending_approvals retain
- [x] ⑧ audit.rs 抽 PENDING_APPROVAL_PLACEHOLDER 常量
- [x] ⑨ ToolCard.vue isToolFailure/commandOutput 下沉 computed
- [x] ⑩ AiChat.vue 清 4 处虚拟滚动残留死注释
- [x] ⑪ Projects.vue onUnmounted 清 _toastTimer
- [x] ⑫ Knowledge.vue refConvTitle parseContext 两次→一次

## 🔧 2026-06-18 6 域并行走查 sweep-fix — 新 todo 24 项

### P1

- [x] ✅(workflow wexu1isx1) SW-260618-01 [P1] — **executor Ok 路径取消节点事件/状态不一致(TOCTOU 残留)**。
- [x] ✅(workflow wexu1isx1 + 主代修) SW-260618-02 [P1] — **审批占位 tool_result 在 stop/clear/create/delete 清 pending_approvals 时未替换终态文本**。

### P2

- [x] ✅(评估暂缓) SW-260618-03 [P2] — **Anthropic 图片 url 模式静默 400**。
- [x] ✅(workflow wexu1isx1) SW-260618-04 [P2] — **knowledge_events 通用 query 硬编码 ORDER BY created_at 崩溃**。
- [x] ✅(评估暂缓) SW-260618-05 [P2] — **pending 占位靠内容字符串匹配**。
- [x] ✅(主代修·SW-06) SW-260618-06 [P2] — **ToolCard 双 watch(props.tc.status) 合并**。
- [x] ✅(主代修·SW-07) SW-260618-07 [P2] — **AiChat 双 watch(currentText) 合并**。
- [x] ✅(主代修·SW-08) SW-260618-08 [P2] — **AuditLog.vue 全硬编码中文未 i18n**。
- [x] ✅(主代修·SW-09) SW-260618-09 [P2] — **AiNode/AiSelfReviewNode provider 解析+构建 DRY 重复**。
- [x] ✅(主代修·SW-10) SW-260618-10 [P2] — **reqwest Client 构建重复(OpenAI/Anthropic Provider::new)**。

### P3

- [x] ✅(评估暂缓) SW-260618-11 [P3] — **OpenAI 图片构造防御缺失**。
- [x] ✅(评估确认) SW-260618-12 [P3] — **ai_conversations 白名单 pinned 与 archived 不对称**。
- [x] ✅(评估暂缓) SW-260618-13 [P3] — **find_path_conflict 跨层规范化靠文档约定**。
- [x] ✅(评估不做) SW-260618-14 [P3] — **keyring failcount sidecar 用 current_dir 跨启动不稳**。
- [x] ✅(主代修·SW-16) SW-260618-16 [P3] — **F-05 去重审计 status 固定 completed 不透传 rejected/failed**。
- [x] ✅(评估不做) SW-260618-17 [P3] — **ToolCardList 4 Set 跨会话不重置累积**。
- [x] ✅(主代修·SW-19) SW-260618-19 [P3] — **combineAndTruncateLines 与 cmdOutput 合并逻辑冗余**。
- [x] ✅(主代修·SW-20) SW-260618-20 [P3] — **Ideas 本地 parseTags 与 store 版 DRY 重复**。
- [x] ✅(评估暂缓) SW-260618-22 [P3] — **Knowledge getCategoryCount+parseTags 模板重复求值**。

## 🔧 2026-06-18 模型能力维度

- [x] ✅(workflow wexu1isx1) **B-260618-03 [P1] 后端路由解耦 cost_tier/intelligence**。
- [x] ✅(workflow wexu1isx1) **B-260618-04 [P2] model_probe 去瞎填 + 预设表机制存废**。
- [x] ✅(主代修·UX-04) **UX-260618-04 [P2] 前端删 cost/intel 标签**。
- [x] ✅(workflow wexu1isx1 + 主代修前端) **B-260618-05 [P3] CostTier::Free 死档 + 枚举清理**。

## 🔧 2026-06-18 AI Chat markdown 表格布局破坏

- [x] ✅(workflow w5siwnipj) **B-260618-06 [P1]** — **markdown 表格 display:block 破坏布局**。

## 🔧 2026-06-18 aichat 工具结果渲染核对

- [x] ✅(workflow w2drz3ppo) UX-260618-05 [P0] — **run_workflow 结果丢 execution_id**。
- [x] ✅(workflow w2drz3ppo+主代) UX-260618-06 [P1] — **patch_file 丢 diff**。
- [x] ✅(workflow w2drz3ppo+主代) UX-260618-07 [P1] — **delete_file 软删丢 backup_path**。
- [x] ✅(workflow w2drz3ppo+主代) UX-260618-08 [P1] — **read_file 丢截断提示**。
- [x] ✅(workflow w2drz3ppo+主代) UX-260618-09 [P1] — **advance_task body 裸 JSON**。
- [x] ✅(workflow w2drz3ppo+主代) UX-260618-10 [P1] — **list_trash 缺 header 摘要**。
- [x] ✅(workflow w2drz3ppo+主代) UX-260618-11 [P2] — **list_directory 丢 truncated**。
- [x] ✅(workflow w2drz3ppo+主代) UX-260618-12 [P2] — **list_* body 全裸 JSON + 各工具零散字段丢失**。

## 🔧 2026-06-18 列表摘要 Markdown 语法字符泄露

- [x] ✅(主代串行) **UX-260618-13** [P2] — **列表摘要 Markdown 语法字符泄露**。

## 🔧 2026-06-18 用户实测·aichat bug 反馈

- [x] ✅(workflow wwchro468) **UX-260618-14 [P1]** — **advance_task 审批卡/结果渲染缺任务名 + 显 UUID/空白**。
- [x] ✅(agent ux15-batch1 方案A) **UX-260618-15 [P1] 第一批(方案A根治N+1)** — **流式失败重试每轮独立气泡**。
- [x] ✅(主代串行) **UX-260618-16 [P1🔴]** — **`time.ts:44` formatDate 漏 `.value` 致 en locale i18n 失效**。
- [x] ✅(2026-06-20 核验) **UX-260618-17 [P1🟡]** — **ProjectDetail.handleApprovalMulti 漏 submitting 复位(防双击破口)**。

## 🔧 2026-06-19 文件拆分升级 — P0

- [x] ✅(2026-06-20 核验已拆分) **REFACTOR-260619-01 [P0]** — **commands.rs(ai,1923 行)拆 5 模块**。
- [x] ✅(2026-06-22 核验) **REFACTOR-260619-02** — anthropic_compat.rs 拆模块。
- [x] ✅(2026-06-20 核验已拆分) **REFACTOR-260619-03 [P0]** — **audit.rs(959 行)拆 5 模块**。

## 🔧 2026-06-19 文件拆分升级 — P1

- [x] ✅(2026-06-20 核验已拆分·agentic.rs 已删除) **REFACTOR-260619-05 [P1]** — **agentic.rs(1231 行)抽 agentic_runtime.rs + agentic_stream.rs**。
- [x] ✅(2026-06-20 核验·已拆) **REFACTOR-260619-06 [P1]** — **ai_node.rs(1107 行)拆 3 模块**。
- [x] ✅(2026-06-20 核验已拆分) **REFACTOR-260619-07 [P1]** — **(已有 SMELL-P0-3)AiChat.vue(4075)拆 ConversationSidebar/ChatHeader/MessageList/ChatInput**。
- [x] ✅(2026-06-22 核验) **REFACTOR-260619-08** — tool_registry.rs 按功能分组注册函数拆。
- [x] ✅(2026-06-22) **REFACTOR-260619-10** — scan.rs 拆 4 模块。
- [x] ✅(2026-06-20 核验) **(已有 SMELL-P1-9)crud.rs(2212)按表拆**。

## 🔧 2026-06-19 命令行黑窗修复 + GLM 1214 数据调查

- [x] ✅(2026-06-19) **B-260619-01 [P1]** — **执行命令行弹黑色窗口闪烁**。
- [x] ✅(2026-06-22) **B-260619-02** — GLM 1214 tool_result 过大截断。
- [x] ✅(2026-06-20) **CR-260620-04 [P0]** — **1214/400 messages 非法·配对错根因(compress 绕过 sanitize)+ 停用模型路由穿透**。

## 💡 2026-06-19 新需求（任务关联灵感）

- [x] ✅(2026-06-20 核验已落地) **F-260619-01 [P2]** — **任务关联灵感：TaskRecord 新增 idea_id 字段**。

## 💡 2026-06-19 新需求（MCP Server）

- [x] ✅(2026-06-20 核验已落地) **F-260619-02 [P2]** — **DevFlow MCP Server：对外暴露任务/项目/灵感管理能力**。

## 💡 2026-06-19 新需求（AI 工具文件访问动态权限模型）

- [x] **F-260619-03 [P1]** ✅ — **AI 工具文件访问动态权限模型**(Phase A-D 全完成)。

## 💡 灵感模块升级

- [x] ✅ 批1 可信度+体验
- [x] ✅ 批2 评估历史全栈
- [x] ✅ 批3 IdeasPanel 统计看板
- [x] ✅ 批3a 晋升携带
- [x] ✅ 批3b 关联关系 schema
- [x] ✅ 批3c 关联关系前端
- [x] ✅ P1 信号词否定前缀
- [x] ✅ 连带修：`augmentation/resolvers.rs` 缺 `ResolverRegistry` import

## ⚠️ 灵感升级-遗留缺陷

- [x] ✅(2026-06-22 核验) **related_ids 白名单** — 实际已落地。

## ⚠️ 预存债 — ToolResult 类型缺字段

- [x] ✅(2026-06-22 核验) **TD-260621-07 [P2/预存债]** — **ToolResult 类型缺 output_mode/files/counts/matches/total_files 字段**。
- [x] ✅(workflow wf 批1) **TD-260621-GUARD** — **[P0·用户实测卡死根因]** generating 状态机前端落地。

## F-260620-01 跨端 AI Chat — Phase3 联调

- [x] ✅(2026-06-22) F-260622-01-阶段1
- [x] ✅(2026-06-22) F-260622-01-阶段2
- [x] ✅(2026-06-22) F-260622-01-阶段3

## AI Chat 跑题/抓不住重点改进

- [x] ✅ P0-P2 全完成

## 单对话内并行多轮推理

- [x] ✅ Phase1 已落

## 🟡 F-09 决策e 前端 newConversation 未跟进

- [x] ✅ 已实施(CR-260620-02 审查 PASS)

## 🟡 MED-1 bind/create/update_project AI 工具路径审批执行后 reload 未兑现

- [x] ✅ 已实施(chat.rs ai_approve)

## ⚪ LOW F-09 stale 注释 + 死 i18n key 清理

- [x] ✅ 已实施

## 🔍 2026-06-22 miniapp 功能走查 — 已修项

- [x] P1-B-260622 [P1🔴·首屏连不上·✅2026-06-23核验已修]
- [x] P1-C-260622 [P1🔴·体验阻断·✅2026-06-23 核验已修]
- [x] P1-E-260622 [P1🟡·多轮场景·✅2026-06-23]
- [x] P2-B-260622 [P2·quickfix·✅2026-06-23核验已修]
- [x] P2-C-260622 [P2·quickfix·✅2026-06-23]
- [x] P2-A-260622 [P2·defer·✅2026-06-23]
- [x] P3-A-260622 [P3·defer·✅2026-06-23]
- [x] P1-F-260622 [P1🟡·✅2026-06-23]
- [x] P1-G-260622 [P1🟡·体验·✅2026-06-23]
- [x] P2-D-260622 [P2·健壮·✅2026-06-23核验已修]
- [x] P2-E-260622 [P2·健壮·✅2026-06-23]
- [x] P3-C-260622 [P3·清理·✅2026-06-23 核验已清]
- [x] P3-D-260622 [P3·体验·✅2026-06-23]

## ✅ 2026-06-23 miniapp 全功能审查加固

- [x] F1 AiConvStateChanged idle/error 终态漏 clearWatchdog → 补 clearWatchdog
- [x] F2 regenerate() 无 generating 守卫 → 加守卫 + toast
- [x] F3 flushCurrentText 启发式回填错位 → 引入 currentAssistantMsgId 按 id 精确回填
- [x] F9 stop() 无终态兜底 + chat 页无停止按钮
- [x] F21 连接状态裸枚举字符串 → 中文文案
- [x] switch 加 default warn / ws.ts 二进制帧 warn / scheduleReconnect 加 MAX_RECONNECT_ATTEMPTS=20
- [x] 删 pages/test 死页

## ✅ 2026-06-23 miniapp 用户需求批

- [x] req1 会话重命名
- [x] req2 断网不丢消息
- [x] req3 审批重连恢复

## ✅ 2026-06-23 miniapp 收尾批

- [x] P1-E MaxRounds 继续/停止
- [x] P1-F 重发 + 复制
- [x] P3-D token 用量
- [x] P2-C 注释陈旧
- [x] P2-A messages 内存上限

## ✅ 2026-06-23 miniapp polish 批

- [x] P2-E 审批失败回填
- [x] P1-G Markdown 渲染
- [x] P3-A textarea 多行

## ✅ 2026-06-24 aichat 可靠性修复

- [x] BUG-260624-01 消息重叠/堆叠根治
- [x] BUG-260624-02 授权弹窗卡死根治
- [x] BUG-260624-03 工具执行心跳误报根治
- [x] BUG-260624-04 搜索工具误授权根治
- [x] BUG-260624-05 压缩后每轮停止根治
- [x] BUG-260625-01 grep 传单文件路径报「目录名称无效」根治
- [x] BUG-260625-02 read_file search 模式显示「0 行」根治

## ✅ 2026-06-25 generating 状态机双轨收口 + 自动压缩路径残留修复

- [x] ✅(2026-06-25) Task#1 自动压缩成功路径残留
- [x] ✅(2026-06-25) Task#2 双轨状态机收口

## 🔍 2026-06-26 灵感模块诊断待办（已完成）

- [x] **IDEA-FIX-01 [P0🔴]** — ideas 表无软删除
- [x] **IDEA-FIX-02 [P0🔴]** — ideas 白名单含 id/created_at
- [x] **IDEA-FIX-03 [P0🔴]** — priority 无值域校验
- [x] **IDEA-FIX-04 [P1🟡]** — record_to_idea 有损转换
- [x] **IDEA-FIX-05 [P1🟡]** — 评分关键词硬编码
- [x] **IDEA-FIX-06 [P1🟡]** — promote 补偿用 purge（不可恢复）
- [x] **IDEA-FIX-07 [P1🟡]** — 关联单向
- [x] **IDEA-FIX-08 [P1🟡]** — 创建表单无 tags 输入
- [x] **IDEA-FIX-09 [P2🟠]** — 创建表单缺 priority/source
- [x] **IDEA-FIX-11 [P2🟠]** — 假雷达图
