Files

210 lines
15 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# todo 归档(2026-10-05)
> 本文件由 2026-10-05 归档拆批自动迁移:docs/todo.md 中经实测核验全完成的历史走查段。拆分判据=段内零未完成勾选项 + 标题无「未修/未核对」残余标注。
---
### 💡 2026-08-04 父子任务支持(✅ 已完成)
> 目标:完成父任务/子任务的完整支持(数据→后端→前端),UI/UX 重点设计。
> 详情:[04-功能迭代/父子任务支持设计-2026-08-04.md](./04-功能迭代/父子任务支持设计-2026-08-04.md)
- [x] **后端** ✅ 父聚合下沉 df-nodes 共享层(`recompute_parent_status`/`advance_task_with_parent`),IPC/AI 工具/MCP 三方统一;df-mcp create_task 支持 parent_id(1 级嵌套校验);delete_task 级联软删子任务(返回 `{ok,cascaded}`)
- [x] **前端** ✅ Tasks.vue 树形列表(折叠箭头+📑图标+子进度徽章 n/m+迷你进度条+缩进竖线圆点);新建弹窗「父任务」下拉(项目锁定);TaskDetail 父面包屑+子任务面板(进度条+快捷推进+添加子任务);i18n zh/en 双份
- [x] **核查** ✅ cargo check(df-nodes/df-mcp/src-tauri 三 crate) + vue-tsc 全部通过
### 💡 2026-06-27 对话上下文透明化(✅ 全部完成)
> 用户看不到 AI 接收到的上下文信息(目标钉扎/enrichment/system_prompt),导致行为不可理解。
- [x] **L1 目标可见** ✅ 对话顶部显示当前 pinned_goals 列表(TopBar.vue 🎯 图标,可查看/清理)
- [x] **L2 Enrichment 可见** ✅ @[项目] 发送前展开 enrichment 摘要(ChatInput.vue enrichment 预览面板,展开/收起/取消关联)
- [x] **L3 完整上下文** ✅ 可展开面板查看 system_prompt / augmentations(TopBar.vue 底部 context 面板)
### 🔧 2026-06-19 文件拆分升级(核验结论:全部完成)
> **2026-06-28 核验**:三项 God 文件拆分已全部完成:
> - **tool_registry.rs** ✅ 1091行单函数已拆为按域注册函数
> - **AiChat.vue** ✅ 4026→**767行**(已抽子组件)
> - **crud.rs** ✅ 2212→拆为 `crud/` 下11个文件
**P1 ToolCard 拆分(已核验完成)**
- [x] **REFACTOR-260619-04 [P1]** ✅ **ToolCard.vue 拆分完成**:
- ToolCard.vue 1527→**373行**
- `ToolResultBody.vue` + `useToolCardHeader.ts`(160行) + `useToolCardRender.ts`(45行)
- `useToolApproval.ts`(审批状态机独立,220行,B-260616-08 loading/挂起时长/toast 完整)
- `useToolCard.ts`(666行,通用工具函数) — 原 ToolCard 组件拆分的目标全部到位
**P2 暂缓(窗口未到/收益低)**
- [ ] **REFACTOR-260619-09 [P2 暂缓]** — **✅事实完成销账(2026-10-04 勘误)**:原 context.rs(1332)已拆为 context/{mod,sanitize,manager_tests}.rs 目录模块,条目过时。**新超标对象=context_helpers.rs(1733 行)**,拆分备勘已出(2026-10-04 [设计文档](./02-架构设计/专项设计/context-helpers拆分备勘-设计-2026-10-04.md),四批迁移+压缩热点殿后+触发条件=上下文管理批稳定后等用户指令) — `crates/df-ai/src/context_helpers.rs`
---
### 🔧 2026-06-19 ToolCard 同批/跨轮 UI 合并(子代理方案·其他会话实施·P1)
> 用户需求:AI 多轮 read_file(轮1×2 + 轮2×2)前端一排展开卡片("上面两个下面两个"),希望 UI 合并。后端 convert 已合并连续 tool_result(B-260619-03),前端展示层对齐。子代理分析:同批同类合并**已存在**(ToolCardList groupedToolCalls L92-110,calls>=2 显标题行+默认收起),**痛点是跨轮**(轮1/轮2 各独立 ToolCardList 实例→各成分组)。用户强调"谨慎不出错"。
- [x] **B-260619-04 [P1]** ✅ **ToolCard UI 合并方案 A 全部落地**:
- **现状(已查清)**:`ToolCardList.vue` groupedToolCalls 按 tc.name 全局聚合,calls>=2 显「[图标] 读取文件 [N] ▸」标题行 + 默认收起(initDefaultCollapse L139-147)。**同批 read_file×2 应已是折叠组**;用户「下面又两个」=下一轮新 message 的独立 ToolCardList 实例→第二个分组(跨轮未合并)。
- ✅ **步骤 ① 标题信息增强(已落地)**:groupFileSummary(group) 从 group.calls[].args.path 取前 2-3 个 shortPath 截断显示(“读取 2 个文件 · shortPath1 · shortPath2”),模板已渲染。
- ⏸️ **步骤 ③ 新轮到达自动收起旧轮**:当前跨轮收起未实现,保留作为低优先增量需求(需在 AiChat.vue watch messages 调 collapseCompletedGroups,风险中)。
- **不推荐方案 B**(跨轮全局合并,破坏 message 边界,审批/折叠重构高风险)/ **C**(纯视觉框,不解决占用)。
— `src/components/ToolCardList.vue`
---
### 🔍 2026-06-26 灵感模块诊断待办(合并推进·单任务)
> ✅ 全部修复完成(2026-06-27 核验)
- [x] **IDEA-FIX-10 [P2🟠]** — **前端 filter + 后端分页漏数据**。团队决策:`hot`/`pending` 保留前端 filter(扩多值属性过度设计);keyword/order_by 已下沉后端。✅ 关闭(2026-08-15:团队决策定案,无后续动作)
---
### 🔍 2026-07-17 aichat 对话功能深度走查待办
> 详单:[05-代码审查/aichat-对话功能走查-2026-07-17.md](./05-代码审查/aichat-对话功能走查-2026-07-17.md)
- [x] **AIC-FIX-17-P0-1** — 流式 watchdog legacy 路径 `convStates.clear()` 全局误杀 → `delete(state.activeConversationId)` ✅
- [x] **AIC-FIX-17-P0-2** — 审批计时器切/删会话不清 → switch/delete 入口 `clearAllApprovalTimers()` + 注释修正 ✅
- [x] **AIC-FIX-17-P1-1~11** ✅ 已销账(2026-08-15 核验,1 agent 全量核验 + 主代 4 项抽查源码属实):P1-1/3/4/5(queue/modelOverride/spans/_lastDelta per-conv,F-09 收尾)/ P1-2 drainQueue 互斥 `_drainingConvs` Set(useAiSend:274)/ P1-6 flushCurrentText 守卫 / P1-7 MessageItem 收敛仅 user 角色 / P1-8 _blockCache LRU 300+切会话 resetStreamCache / P1-9 指纹 watch 替代 deep / P1-10 approving 防重入前置(useToolApproval:133)/ P1-11 deleteConversation 相邻回落(useAiConversations:520)。余「MessageList 内联渲染组件化」「缓存主动失效」为优化空间非缺陷
- [x] **AIC-FIX-17-P2** ✅ 已销账(2026-08-15):7 条中 5 条核验为此前批次已修(ApprovalOverlay 响应式冷却/aiShared 对称收敛/flash watch/maximized 三元/emit 类型),2 条本批落地(tailSeq 注释与实现对齐 useStreamRenderer:142-196、isCompressing 单例补 known limitation 注释 useAiContext:28)
- [x] **AIC-FIX-17-根因** ✅ **2026-08-07 核验销账**(queue/modelOverride/审批/_lastDelta 均已 per-conv) — F-09 per-conv 收尾(queue / modelOverride / _approvalTimers / _lastDelta 单例化)
---
### 🔍 2026-08-09 TaskDetail 操作按钮缺陷走查(用户实测 + AI 深度审查)
> 用户反馈"产出部分只有标题空白",触发对 TaskDetail.vue 所有操作按钮的全量走查。覆盖模板/脚本/后端 advance_task / run_workflow 回调链路。共发现 10 项缺陷,按严重度 P0×2 / P1×4 / P2×4 分组。守 session-role-diagnose-only:本会话仅走查+登记,未实施代码。
>
> **✅ 2026-08-09 全部修复并核验销账**:主代理独立核查(vue-tsc EXIT 0 + diff 语义审)通过。补充说明:P1-4 核验当前代码已满足(advanceChild/setChildPriority 已含 `childMenuId.value = null`),仅销账未改;P1-5 实现位置优化为 watch(taskId)/refresh/handleAdvance 成功三入口调用 `resetWorkflowUi()`(load() 内不加,避免工作流推进中 df-data-changed 触发刷新误清进度面板);P2-10 描述编辑对齐 IdeaDetail 模式(有描述/空描述均可编辑,taskApi.update 落库)。验收标准 1-9 全部满足。
**涉及文件**:
- `src/views/TaskDetail.vue`(987 行,主要改动点)
- `src-tauri/src/commands/task.rs`(advance_task,仅参考)
- `src-tauri/src/commands/workflow.rs`(run_workflow 回调,仅参考)
- `crates/df-nodes/src/task_advance_node.rs`(advance_task_atomic,仅参考)
---
## 🔴 P0 缺陷(2 项,必须修)
### P0-1 双重推进竞态:工作流推进中手动推进按钮仍可用
- **位置**:TaskDetail.vue:48 vs :55
- **现状**:工作流按钮 `:disabled="wfAdvancing || advancing"`(检查两者),手动按钮 `:disabled="advancing"`(只检查 advancing)
- **问题**:`wfAdvancing=true` 时手动按钮仍可点 → 同时发起 `run_workflow`(回调 advance)+ 直调 `advance_task` 两个推进请求 → 第一个成功改 status,第二个 CAS 失败返回 Err → 前端显示红色错误,用户困惑"明明成功了为什么报错"
- **修复**:手动推进按钮 `:disabled` 加 `|| wfAdvancing`(1 行)
### P0-2 工作流推进与手动推进按钮语义重复(todo 状态双"开始")
- **位置**:TaskDetail.vue:45-57
- **现状**:todo 状态同时显示「工作流推进」+「开始」两个按钮,都推进到 in_progress
- **问题**:用户不知道该点哪个;设计意图是工作流推进会跑 AiNode 生成产出,手动"开始"只是纯改状态,但按钮文案没有区分
- **修复**:工作流推进按钮文案改为「AI 执行推进」或「工作流推进(含 AI 产出)」
---
## 🟠 P1 缺陷(4 项)
### P1-3 子任务快捷菜单不校验状态机合法性
- **位置**:TaskDetail.vue:286-296
- **现状**:`quickStatuses` 硬编码列出全部 6 态 [todo, in_progress, in_review, testing, done, blocked],不按子任务当前 status 过滤
- **问题**:todo 状态子任务的菜单显示 testing/done/in_review 等非法目标,点下去后端 can_transition 拒绝 → 红色错误
- **对比**:顶部手动推进按钮用 `ADVANCE_MAP` 严格按状态机过滤,子任务菜单却无此逻辑
- **修复**:子任务菜单复用 `ADVANCE_MAP[child.status]` 过滤合法目标
### P1-4 子任务操作后快捷菜单不关闭
- **位置**:TaskDetail.vue:326 advanceChild / :337 setChildPriority
- **现状**:操作完成后不 `childMenuId.value = null`
- **问题**:点了"推进到 done"或"改优先级"后菜单仍挂着悬浮
- **修复**:两函数操作完成后 `childMenuId.value = null`(2 处)
### P1-5 refresh/切任务后工作流进度/DAG 残留
- **位置**:TaskDetail.vue:619 load() 函数
- **现状**:load() 只重置 task/projects/ideas,不清 `wfExecId` / `wfDagJson` / `wfResult`
- **问题**:切任务或点 refresh 后右栏仍显示旧任务的工作流进度和 DAG
- **修复**:load() 开头加 `wfExecId.value = null; wfDagJson.value = ''; wfResult.value = null`(3 行)
### P1-6 手动推进后工作流进度面板不清空
- **位置**:TaskDetail.vue:470 handleAdvance
- **现状**:成功后只 `task.value = updated`,不清工作流相关 ref
- **问题**:手动推进后右栏仍显示旧工作流进度
- **修复**:handleAdvance 成功后清空 wfExecId/wfDagJson/wfResult
---
## 🟡 P2 缺陷(4 项)
### P2-7 子任务创建无长度/重名校验
- **位置**:TaskDetail.vue:365-381 confirmSubtask
- **现状**:标题只 `trim()` 判空,不校验长度上限/重名;成功路径不清 `errorMsg.value`
- **修复**:加长度上限(如 128 字)、同父重名校验、成功路径清 errorMsg
### P2-8 wfResult timer 生命周期不严谨
- **位置**:TaskDetail.vue:424 watch 回调
- **现状**:工作流完成后 setTimeout 3s 清 wfResult;切任务时 timer 仍在但 wfExecId 已清
- **影响**:低风险(最多多等 3s),但 timer 引用管理不严谨
- **修复**:load() 重置时清 `_wfResultTimer`
### P2-9 子任务页无"是子任务"提示
- **位置**:TaskDetail.vue:108(父面包屑)+ :133(子任务面板仅顶层显示)
- **现状**:子任务详情页结构与顶层任务几乎一样,只有顶部多一行父面包屑
- **修复**:加一行提示「该任务为子任务,隶属于:{parentTitle}」
### P2-10 空描述无编辑入口
- **位置**:TaskDetail.vue:68 `<section v-if="task.description">`
- **现状**:无描述时描述面板整块消失,无"添加描述"入口
- **修复**:无描述时显示空态 + "添加描述"入口
---
## 验收标准
1. 工作流推进中手动推进按钮禁用,无双重推进竞态
2. todo 状态两个按钮文案可区分(工作流推进 vs 纯手动开始)
3. 子任务快捷菜单只显示状态机合法目标
4. 子任务操作后菜单自动关闭
5. 切任务/refresh/手动推进后右栏工作流进度正确重置
6. 子任务创建有长度/重名校验,错误提示清晰
7. 子任务页有"是子任务"明确提示
8. 空描述有编辑入口
9. vue-tsc EXIT 0
---
**关联**:父任务「总览页 + 项目列表 UI/UX 优化(持续更新)」(id: 0115aea6-b423-482a-8a64-b793a66a0417)—— 本走查作为该任务的子任务延伸。
---
---
## 滞后勘误(2026-10-05 归档拆批时源码核验批注)
> 以下条目在迁移/核对时发现「文档标注」与「实际代码」不符,已按现场源码勘误。对应知识库条目:AI记忆与TODO状态滞后导致无效开发。
### 「2026-08-09 AI 自审/工作流推进链路缺陷」段(已迁本文件)
原段标题「三条推进链 100% 失败」已过时。核验(2026-10-05,任务 e9ab1729 销账记录 + 源码实证):
- **P0-A task_id 断裂** ✅ 已修:`workflow.rs:340` `obj.insert("task_id", tid)` 已注入 config,AiSelfReviewNode 可读任务
- **P0-B AiNode 缺 prompt** ✅ 已实现(超原方案):`ai_node.rs` AiNode 持 `db: Arc<Database>` 构造 + `ctx.config["task_id"]` 存在时 `TaskRepo.update_field(task_id,"output_json",json)` 自审结果落库;state.rs:755-765 build_registry 支持 agent 模式(AiAgentNode)
- **P0-C TaskDetail 无审批 UI** ✅ 已实现(归 DevFlow agent 审批重设计批):ApprovalPopup + ToolCard pending_approval 态 + 风险着色 + 高危二次确认(提交 2eea011)
- 单测 `update_field_writes_output_json`(ai_self_review_node.rs:356)锁定 output_json 白名单+写入
### 「aichat 切换/新建对话缺陷走查」段(2026-08-07)
- 段首注记「**CSW-P1-4 未修**」过时:该条目本体已标 ✅ 已修(2026-08-09 前端 round0 占位补回),仅段头汇总行未同步,保留时已核对无实际缺口
- CSW-P2-7 已销项(段尾已注记)
### 「aichat 可用性与交互成本研究」第二批 P2(2026-09-29)
- **R4 代码块复制 / V4 浮窗高风险二次确认** 两项已随 aichat 二批 P2 落地(2026-10-04,任务 8e29271f),该 P2 批次行 16 项中至少 2 项已完成,剩余项以现场核销为准(V8 草稿 per-conv/R3 长回复带量/I5 错误分类兜底/V7 排队时钟/R5+V9 检索 仍待批)
### 「devflow 集成 u-claw」接入实施条(2026-09-28)
- **ask_uclaw 工具 + 配置页** ✅ 已落地(2026-10-05,任务 5fb916ac):tools/uclaw.rs 470 行 + UclawPanel 设置面板 + i18n + 流式链补全,cargo test 685→693 passed
- 「per-conv channel_id 隔离」**不成立已勘误**(2026-10-05 源码终核):u-claw WS 渠道单 channel 单链,配置死 channel_id,run() 一次常驻链不走 chainPool;MVP 接受单链共享上下文语义,多实例隔离放 phase2
- 剩余:真机全链冒烟(runtime 验证,需 u-relay+u-claw 在线配合)