修复: 前端 TS 阻断 + G1/G2 单测 + 归档已完成项

- 修复 vue-tsc 3 阻断: i18n 重复 err key 删除 + store 补 relateIdeas
- G1: extract_pinned_goal 单测 10 条(mention剥离/截断/空输入/全角冒号)
- G2: is_empty_tool_result 单测 11 条(JSON标记/中文/英文/非空判定)
- 归档: todo.md/docs/todo.md/待决策.md/待审查.md 已完成项迁入归档
This commit is contained in:
2026-06-27 22:35:37 +08:00
parent 6e1485e4f9
commit 5c539fe764
12 changed files with 615 additions and 2761 deletions

View File

@@ -0,0 +1,368 @@
# 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` IPCloading 状态 + 错误提示。
- [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🟠]** — 假雷达图

View File

@@ -351,3 +351,95 @@
- **决策点**:临时本地构建 vs 有意入库?
- **选项**:A 临时本地构建(提交前 revert 此行) / B 有意入库(改按平台条件配置而非硬编码单 target)
- **状态**:✅ 已决(2026-06-18) — **决策:A 临时本地构建,要求高速**`["nsis"]` 已是 Windows 单一最快安装包目标。提交前须 revert 为 `"all"`。若进一步提速可用 `["app"]`(裸 .exe 无安装包)或 `tauri build --no-bundle`
### 当前队列已决项迁入2026-06-26 ~ 2026-06-27
> 来源:待决策.md ✅ 2026-06-26 任务图谱推进待决策 + 🟡 各节已决项批量迁入。
#### ✅ DEC-260626-01 父② 知识图谱 Phase 1 多工程合并
- **决策**:**b** — 知识图谱独立 Phase 1(**V29**,V28 已被灵感软删除占用)。多工程代码零行(grep 全空),合并无理由,多工程后续 V30+。
- **关联**:todo 父②
- **状态**:✅ 已决(2026-06-26)
#### ✅ DEC-260626-02 ⑤.2 #7 promote 补偿删除方式
- **决策**:**b** — 保留 purge。补偿是内部回滚建错的 project(非用户删除),purge 干净不污染回收站。
- **关联**:todo ⑤.2 #7(标"保留 purge 不改")
- **状态**:✅ 已决(2026-06-26)
#### ✅ DEC-260626-03 ⑤.2 #6 评分关键词配置形式
- **决策**:**c** — 先拆 const 到独立文件(中/英两套,最小改动)。原推荐 a 修正:启发式是过渡(scoring.rs TODO 接 LLM 语义评分),接 LLM 后按需升 a(JSON 文件)。
- **关联**:todo ⑤.2 #6
- **状态**:✅ 已决(2026-06-26)
#### ✅ DEC-260626-04 ⑤.2 #9/#10 表单补全交互
- **决策**:**a** — tags 逗号分隔输入框(对标 Knowledge.vue 先例)+ priority 下拉 + source 输入。chip 组件留 UX 升级。
- **关联**:todo ⑤.2 #9/#10
- **状态**:✅ 已决(2026-06-26)
#### ✅ DEC-260626-05 BUG-260620-05 层2 授权政策
- **决策**:**a** — 维持方案①(白名单+弹窗三档)。层1(工程内免授权,F-260619-03 方案①)已解痛点,层2 黑名单制安全风险 + 分发冲突。
- **关联**:todo BUG-260620-05 层2(标"维持①不做")
- **状态**:✅ 已决(2026-06-26)
#### ✅ DEC-260626-06 父③ ToolCard 跨轮合并 + 审批状态机排期
- **决策**:**b** — 等 G1 实测 + 父② 后再做。审批是高危路径,AiChat.vue 仍在频繁改动,择稳定窗口专项。
- **关联**:todo 父③(排父②后)
- **状态**:✅ 已决(2026-06-26)
#### ✅ DEC-260626-07 父④ F-09 per-conv 真多会话排期
- **决策**:**a** — 父② Phase 1 后启动。F-09 是 Phase 4 前置,大改不与父② 并行(回归交叉)。
- **关联**:todo 父④(排父②后)
- **状态**:✅ 已决(2026-06-26)
#### ✅ 专题-1 workspace_root 分发适配
- **决策**:**① 先行**(去默认白名单,dev 自用 projects.path 自动授权够),**分发前定②**(去相对锚)。
- **状态**:✅ 已决(2026-06-26,① 立即/② 分发前)
#### ✅ 专题-2 BUG-260623-03 审批 pending 超时兜底
- **决策**:**c 无超时**(不做超时兜底)。用户:等待审批就是等待,一直等待,超时概念多余。审批是用户主动行为,不审批自然挂起等待,无需超时强制 reject/倒计时。
- **状态**:✅ 已决(2026-06-26,不做超时,关闭 BUG-260623-03)
#### ✅ 专题-3 F-09 streaming/currentText per-conv
- **决策**:**暂缓**(随 B 路线多会话并发同批做,即 DEC-07 父④)。
- **状态**:✅ 已决(2026-06-26,归父④)
#### ✅ S-260623-01 「自托管」含义澄清
- **决策**:**自用阶段定案(2026-06-23)** —— 用户决策:小程序当前自用(开发阶段),分发是产品终态但留后续(过渡期靠改 device_id 实现多机)。故「自托管」现阶段 = 已实现的自主执行(autoExecuteMode all 含高危),无另义。分发阶段再做配置层(MINIDEC-01)+ 配对(MINIDEC-02)。
- **关联**:task105 / memory(设置自主执行已实现)
- **状态**:✅ 自用阶段定案(2026-06-23)
#### ✅ B-260618-03 路由解耦 cost_tier/intelligence(用户已全局决策去掉,工程大需专项)
- **决策**:用户已全局决策去掉。自主推进(2026-06-18 workflow wexu1isx1,主代核查 cargo check --workspace EXIT 0 + cargo test df-ai 109 passed + vue-tsc EXIT 0)。title/compress 纯 weight 选模型退化点:用户核对 Settings weight 配置(同 weight 并列 max_by_key 返回最后一个)。
- **关联**:todo B-260618-03/04/05 · UX-260618-04 前端 cost/intel 标签(依赖本项)
- **状态**:✅ 已实施(2026-06-18)
#### ✅ SW-260618-21 死代码预留功能清理批(清理 vs 保留)
- **决策**:**b 保留+标 allow**(预留设计意图明确·清理失去未来扩展点 ROI 低;标 allow 消 warning 即可·零波及)。risk_level 删 + 预留/diff 标 allow·cargo 0 warning。
- **关联**:批次7 transition_status 已删 / CR-22 删 risk_level / CR-23 标 allow 5 处
- **状态**:✅ 已实施 b(2026-06-18)
#### ✅ F-260616-09-B 多会话并发架构 B 阶段实施决策(设计完成 2026-06-19·待拍板)
- **决策**:**✅ b-1 采纳(messages per-conv,技术必然)+ c-1 保持 3 + Settings 配置 + e-1 原路径**。主代自主裁决采纳(2026-06-19)。用户授权「自主推进,能多角度确定的方案不等审批」。启动阶段2 批1。
- **关联**:todo F-260616-09 / 设计文档 / memory aichat-arch-extensibility
- **状态**:✅ 主代自主裁决采纳(2026-06-19)
#### ✅ F-260619-05 任务可关联灵感(产品粒度/方向决策·todo 已登记)
- **决策**:tasks 加 `idea_id REFERENCES ideas(id)`(复用 projects 模式,1对1 起步,单向,后续按需扩展)。**已实施**(2026-06-20 调研确认)。前端任务卡片展示灵感来源(可选增强)待补。
- **关联**:todo.md F-260619-05
- **状态**:✅ 已实施(2026-06-20)
#### ✅ MINIDEC-260623-03 WS 重连续流策略(F10·行为差异·需拍板)
- **决策**:**已实施 a**(2026-06-23)——用户决策「断网不丢消息 + 从远端拉完整」。useAiChat syncOnConnect:ws 'connected' → 发 load_messages 拉完整历史。cargo check 0 + vue-tsc 0 + build DONE。
- **状态**:✅ 已实施(2026-06-23)
#### ✅ MINIDEC-260623-04 审批双源状态分裂统一(F4/F5/F6/F13·渲染源决策)
- **决策**:**已实施 a 单一渲染源**(2026-06-23)——用户决策「审批断网重连恢复卡片状态」。审批卡改从 pendingApprovals 独立面板渲染;remote_bridge 加 sync_pending 路由;useAiChat onStatus 'connected' 清 pendingApprovals + 发 sync_pending 重建;handleEvent 加同 id 去重。cargo 0 + vue-tsc 0 + build DONE。
- **状态**:✅ 已实施(2026-06-23)
#### ✅ MINIDEC-260623-05 会话页管理缺口(删除/重命名·需后端命令)
- **决策**:**重命名已实施 / 删除暂缓**(2026-06-23)——用户决策「小程序对齐桌面端能改会话名」。remote_bridge 加 rename_conversation 路由;useAiChat renameConversation 方法;conversations/index.vue 长按会话编辑。删除会话暂不做(桌面端管理)。cargo 0 + vue-tsc 0 + build DONE。
- **状态**:✅ 重命名已实施 / 删除暂缓(2026-06-23)
#### ✅ MINIDEC-260623-07 regenerate 零调用方 + 备份组件漂移(P3 收尾)
- **决策**:**随 P1-F 选 a**(2026-06-23)—— 🟡 收尾批给 regenerate 加「重发」UI 入口(对齐桌面端),故保留函数不再删;备份组件(MdView/MentionInput)保留预留注释(绕工具解析 bug,未来拆回)。
- **状态**:✅ 随 P1-F 选 a(2026-06-23)

View File

@@ -1060,3 +1060,11 @@
- [P3] **CR-01-G** TaskDetail.vue:218 advance 失败错误走 i18n 分级(en locale 也中文)
- [P3] **CR-01-H** task_advance_node.rs:297 测试改名(实际未测 CAS 失败)
- [P3] **CR-01-I** i18n `taskDetail.advancing` 冗余 key 处理
### 当前队列已审项迁入2026-06-27
## 当前队列
### CR-260624-01 AI 路径授权三档化(once/session/always) — ✅ 已审(PASS·单 agent + 6-agent 对抗深审 0 finding)
- **范围**:AllowedDirs 加 `once` 层(state.rs:444)+ ai_authorize_dir decision 改 match 四分支 once/session/always(chat.rs:846)+ 执行后 clear_once(chat.rs:924)+ 前端 DirAuthDialog 加"