Files
DevFlow/docs/todo.md
绝尘 f0c525d0e7 新增: todo 补 aichat 审查报告 11 项(AR-1~11)+ S-02/B-05 去重标注
修审查→执行断点:aichat-review-2026-06-14.md 11 项原仅留 memory 指针未回流看板,今按 P0/P1/P2 补入;S-02 标与 AR-3 重叠、B-05 标与 AR-M5 同类
2026-06-14 15:43:59 +08:00

16 KiB
Raw Blame History

DevFlow 工作看板

来源:docs/02-架构设计/功能决策记录.md「需求与待办」+ PROGRESS.md 各 Sprint 遗留2026-06-14 汇总去重 + 代码核对修正。 互操作:执行走 mission-control回写 mission_id审查走 cr发布走 publish-*。 核对说明2026-06-14 经代码勘察后修正——detached 卡死已部分修复降 P2、Sprint 19 遗留 3 项补入、依赖关系标注。


交接状态2026-06-14

代码健康度cargo test --workspace 全过、npx vue-tsc --noEmit 0 error主代理独立验证非 mission 自报)。

工作区状态(重要)git diff 104 文件8066+/6941-)是三层混合——①会话前未提交基线Sprint 19 等大量工作i18n 拆目录、knowledge 全栈、Settings 拆分、appSettings 迁移…)②本次会话重构 ③代理越权修复。接手前务必 git diff 通览区分,勿整体当作单一改动提交。

本次会话完成

  • 重构(用户授权):删 5 僵尸 cratedf-evolve/plugin/stages/task/traceability、清 7 死模块df-execute docker/git_ops/ssh + df-project scheduler/timeline/context + df-ideas graph、拆 ai.rs→commands/ai/ 11 文件、拆 ai.ts→6 composable、models 字段 bug 修复、coordinator B 路线标注
  • 代理越权追加修复 6 处(已标,主代理验证编译+测试通过;逐行正确性建议接手方 git diff 复核B-01 审批持久化 / B-02 ConditionEngine 默认 false / B-04 删 NodeRegistry Default impl / T-05 工具结果截断 50KB / B-08 promote 补偿删除 / T-07 诊断日志清理

待设计交其他会话(核心)df-workflow 审批闭环三连 B-06/B-07/B-03。 B-03 设计已完成接手会话2026-06-14B-03-人工审批响应机制.md,通道选型定为 工作流独立审批通道(复用 EventBus broadcast + HumanApprovalResponse 事件 + approve_human_approval IPC非 ai.rs AiApprovalRequired——后者是 AI Chat 工具审批路径,与工作流节点审批是两条独立链路)。拆 B-03a响应等待 + 超时,不依赖 B-07/ B-03b取消机制B-06 / B-07 仍待实施B-06 = execution_id 下沉并发隔离B-07 = 共享 StateMachine 取消前置),是 B-03a 并发安全 / B-03b 的前置。

失控代理教训:本次会话派的后台拆分代理在 stop hook 循环里失控,越权改代码/文档(先斩后奏)。接手方若再派 agent注意约束其不碰决策记录用户已要求手动触发+ 限定单任务不自主续推。


待办

P0 — 阻断性 bug

  • B-260614-01 — 待审批持久化根治(重启恢复)未生效 mission:T-260614-01 已修复commands.rs:444 clear→retain 保其他对话 pendingai_approve 两处 if !recovered 守卫移除cargo check 0 err / 19 test pass(06-14)
  • B-260614-02 — df-workflow ConditionEngine 默认 true mission:T-260614-02 已修复conditions.rs:31 Ok(true)Ok(false) 保守拒绝5 个原断言错误行为的测试同步改断言df-workflow 7 test pass(06-14)
  • B-260614-04 — df-workflow NodeRegistry::default() script 工厂 unimplemented! mission:T-260614-03 已修复(删除整个 Default impl——零调用方 + 违反铁律state.rs build_registry 已用 new() + 手动注册真实 ScriptNode(06-14)

🔴 aichat 审查报告待修项(来源:aichat-review-2026-06-14.md 第八章)

2026-06-14 aichat 模块代码审查产出,原仅留 memory 指针未回流看板,今补入。去重:S-02 审批可见性 ⊂ AR-3(修 AR-3 卡片可读性直接缓解"看不到审批批什么"B-05 detach = AR-M5 同类(跨窗口 state 隔离aichat 审查描述更深)。

P0用户可感硬伤

  • AR-1 流式 Markdown 全量重解析renderMd 缓存 key=完整文本,每 delta 全量 marked.parse+sanitize长回复主线程阻塞掉帧— AiChat.vue:343-354 — ⚠️复杂,需先设计增量渲染/流式纯文本态+rAF
  • AR-2 审批态新建对话永久卡死ai_conversation_create 缺 generating 守卫,直接 clear session审批返回 Err→generating 永不复位→面板卡死需重启)— commands.rs:362-375
  • AR-3 审批卡片不可读(后端 reason 两句固定模板不含对象名 + 前端 id/project_id 裸值 + resultSummary 缺 delete/restore/purge 分支)— audit.rs:179-182 + ToolCard.vue:149-169,272-288
  • AR-4 create_project 双审双 APIAI schema 仅 name/description 缺 path/stack比 IPC 接口窄触发二次确认)— tool_registry.rs:148

P1

  • AR-5 审批态 stop 无本地兜底stopChat 只 await 不复位 streamingAiCompleted 竞态丢失则卡死)— useAiSend.ts:111-113
  • AR-6 Low 工具失败语义冲突emit AiError 置 streaming=false 但 agentic loop 续跑,残留文本 flush 又"完成",状态紊乱)— audit.rs + agentic.rs:195
  • AR-7 clean 无 UI 入口(后端 ai_chat_clear 有但零组件调用 + 只清内存不删 DB— AiChat.vue + useAiPanel.ts:89-96

P2

  • AR-8 delta 节流+滚动(后端无 50ms 合批/前端无 rAF叠加 AR-1 掉帧)— stream_recv.rs + AiChat.vue:625-633
  • AR-9 friendlyError 硬编码中文绕 i18nen 用户见中文)— useAiEvents.ts:42-48
  • AR-10「想法→灵感」迁移残留aiTool.ts/ideas.ts/projectDetail.ts/idea.rs 大量"想法"文案)— 跨前后端 — 详见 审查第六章
  • AR-11 数据变更联动刷新推荐方案A 后端 emit + store 监听)— 跨层 — 详见 审查第五章

已完成 — df-workflow 审批闭环Workflow D, commit 22964a2

  • B-260614-06 — execution_id 硬编码 "dummy-execution-id" DagExecutor::new 接收 execution_id 下沉 NodeContextworkflow.rs 传真 ID(06-14)
  • B-260614-07 — 每节点全新空 StateMachine NodeContext.node_status 共享 self.state_machine.clone()is_cancelled 可工作)(06-14)
  • B-260614-03a — HumanNode 假返回"同意" execute 重写 subscribe→send→select!(响应/超时/取消 + execution_id+node_id 双键 + Lagged 容忍),照 B-03 设计7 单测eventbus 删死代码 (06-14)
  • B-260614-03b — HumanNode 取消机制 WF-E 完成set_cancelled + cancel_workflow_node IPC + 前端取消按钮 + 端到端补完StateMachine 内部 Arc 共享 + execution_id 注册表)。agent 初版留半成品workflow_cancel_state 全局孤立实例IPC 写了读不到Explore 审查漏抓语义缺陷),主代理补完 IPC→共享 HashMap→HumanNode is_cancelled 真通clone_shares 单测验证共享语义 (06-14, commit 4aa689e)

P1 — 重要缺陷

  • B-260614-08 — promote_idea 两步写非事务 mission:T-260614-05 已修复idea.rs 第二步 update_full 失败时补偿删除已建 projectRepository 不支持跨 repo 共享事务对象,选补偿删除非真事务,改动最小;附 logging(06-14)
  • T-260614-01 — [P1] Sprint 9/10/14/15/16/18 多项未 tauri dev 实测 — 评分 IPC 缩放 / update_full / promote_idea / Store getter / token 落库 / 知识库 Tier 1 全栈 / LLM 并发 Semaphore / 知识生命线(#54 跟踪)— source:Sprint 9-18 (06-14)
  • T-260614-02 — [P1] 切对话不中断路由部分场景运行时实测A 路线场景 2/3 — source:Sprint 8 (06-14)

P1 — 设计完成待实施

  • F-260614-01 — [P1] 模型能力系统 Phase 1 — ModelCapability 数据模型 + ModelRouter 重写 + 7 调用点接入 + Settings 模型池编辑 UI + AiChat 模型下拉。按任务需求(模态/功能/成本)自动匹配合适模型,不再所有场景共用 default_model — source:📐 设计完成 (06-14)

P1 — Sprint 19 遗留

  • T-260614-05 — 工具结果入库前截断 50KB mission:T-260614-04 已修复conversation.rs 加 truncate_for_persist 纯函数50KB 阈值 + 头尾各 20KB + 中段标注省略字符数仅作用于持久化视图不污染内存真相源3 单测 pass(06-14)
  • T-260614-06 — [P2→中等风险] Settings.vue 拆 panel 子组件 — 当前 1042 行 god file4 大功能域AI 模型/Provider 表单/连接管理/通用设置)清晰可拆到 src/components/settings/评估:非低风险,纯重构零功能价值,要新建 4 子组件 + props/emits 接线 + CSS 拆分,单独立项做更稳 — source:Sprint 19 待评估 (06-14)
  • T-260614-07 — 诊断日志清理 mission:T-260614-06 已清理useAiEvents/useAiSend 3 处调试 console.log 直接删AiChat.vue/main.ts 3 处启动计时改 console.debug 保留诊断能力但不污染 consolevue-tsc 0 errsrc/ console.log 0 残留)(06-14)

待澄清 / A-B 待定

  • S-260614-01 — 「显示多开」需求待澄清 — 用户报"设置勾选显示多开但 AiChat 未显示",全 src grep 零命中,疑似旧版本/指分离窗口/想新增开关,待用户截图确认 (06-14)
  • S-260614-02 — 审批可见性 A/B 待定 — B-01 修复后 pending_approvals 内存态不再被 switch 清空,前端 ai_pending_tool_calls 查询有数据,但 state.pendingApprovals 在 AiChat.vue 是否有兜底渲染仍需实测确认。A. 加兜底渲染 / B. 实测 tc 卡片是否渲染 — 去重:与 AR-3 审批卡片可读化重叠AR-3 修完reason 拼对象名 + id 特化 + 卡片完整)后改实测重评 (06-14)

P2 — 不阻断缺陷 / 增强

  • B-260614-05 — [P2→降级] 分离窗口detached跨窗口状态 — 核对修正reattachPanel 已接线(不再死代码)+ tauri://destroyed 监听已复位状态,"detached 永真卡死"已修复;剩余 localStorage df-ai-gen/df-ai-text 是 Sprint 19 有意保留(流式临时快照高频写),非 bug。仅在出现新场景失效时再评估改全局 emit/listen — 去重:与 AR-M5跨窗口 state 完全隔离同类aichat 审查描述更深 — source:代码审查 + Sprint 19 (06-14)
  • T-260614-03 — 工具层白名单与 crud 白名单双份去重 WF-B ⑤ 已解决tool_registry update_project 复用 is_allowed_column与 CRUD 白名单同源,删硬编码 match(06-14)
  • F-260614-02 — 技能联想「使用」 — 首批 3 类联想已做,联想后实际触发/执行技能未实现 (06-14)
  • F-260614-03 — [需设计] 灵感对抗评估接 LLM — 核对 adversarial.rsevaluate() 纯启发式,接 LLM 需改签名注入 provider。3 种注入方式待定A.trait 解耦df-ideas 定义 IdeaAnalyzer trait推荐/ B.df-ideas 直接依赖 df-ai / C.closure。属架构决策非直接做 (06-14)
  • T-260614-04 — 路径校验根治 已完成resolve_workspace_path 加 canonicalize 防 symlink 逃逸 + 词法 starts_with 兜底仅校验、返回词法路径保持前端友好cargo check 0 err / 22 test pass(06-14)
  • F-260614-04 — 多 Provider 负载均衡池 — 备用模型/多账号聚合,全局容量=min(各 provider 上限之和, global_cap) (06-14)
  • F-260614-05 — 模型能力系统 Phase 2 — 多模态消息支持ChatMessage.content: String → Vec(Text/Image);前端粘贴/拖拽图片vision 模型自动路由 (06-14)
  • F-260614-06 — 导入历史项目scan 第二步) — 复用 scan/relocate/checkBinding加 monorepo 子目录识别 + README 首段抽 description + 批量 (06-14)
  • T-260614-09 — idea.rs 物理删不级联 WF-E 完成idea.rs:149 delete→purge_with_descendants1 行,签名兼容)(06-14, commit 89da9fa)
  • T-260614-10 — findBinding canonicalize WF-E 判定已解决normalize_path 已含 canonicalize 优先 + 词法回退find_binding_conflict 两端对称已用,无需重复加;零改动)(06-14, commit 89da9fa)
  • F-260614-07 — [架构前置] df-ai-core trait 下沉拆 crate — F-03 注入方式前置(决策记录已收敛:原 F-03 的 A/B/C 选型作废,统一为全局 AI trait 下沉独立 cratedf-ideas/df-nodes 依赖 trait 而非 df-ai 具体 impl。解锁 F-03 — source:功能决策记录 (06-14)
  • F-260614-08 — 决策治理产品化 — 活契约/规格契约自检机制产品化为可操作功能(当前散落文档机制) — source:功能决策记录缺口
  • F-260614-09 — 项目 status 字段治理 — status 状态机规范化planning/active/archived 等枚举约束) — source:功能决策记录缺口
  • F-260614-10 — 知识库 MCP Server + Tier 2/3 — 对外 MCP 暴露 + 分层存储(当前仅 Tier 1 全栈) — source:PROGRESS Sprint15
  • T-260614-11 — 全局#6 条件表达式引擎升级 — df-workflow conditions 仅支持 true/false 字面量,升级为真表达式求值 — source:PROGRESS 全局问题
  • T-260614-12 — df-ideas 死代码 WF-E 部分完成capture.rs 删 CaptureInput/IdeaCapture 死码,保留 Idea/IdeaScores 共享实体promotion/scoring/adversarial 内"两套 Recommendation/PromotionPolicy 死枚举"嫌疑 agent 未确认存在/保留为对外契约,本次未动,待复查)(06-14, commit 89da9fa)

已完成

2026-06-14

  • R-260614-01 ai.rs 拆 11 子 modulecommands/ai/+ glob 重导出保路径 + models bug 修复 — cargo check 0 error / 19 test passed
  • B-260614-01 待审批持久化根治 — mission:T-260614-01
  • B-260614-02 df-workflow ConditionEngine 默认 true→false — mission:T-260614-02
  • B-260614-04 NodeRegistry unimplemented!→删 Default impl — mission:T-260614-03
  • T-260614-05 工具结果入库前截断 50KB含 3 单测)— mission:T-260614-04
  • B-260614-08 promote_idea 补偿删除保最终一致性 — mission:T-260614-05
  • T-260614-07 诊断日志清理3 删 + 3 改 debug— mission:T-260614-06
  • D-260614-01 B-03 人工审批响应机制设计完成 — 新建 B-03-人工审批响应机制.md9 节完整设计)+ 功能决策记录摘要章节 + PROGRESS/todo/INDEX 同步;核心结论:链路基础设施已通仅缺 HumanNode 一处、通道选型=工作流独立审批通道(非 ai.rs AiApprovalRequired、拆 B-03a响应等待+超时,不依赖 B-07/B-03b取消机制 B-06/B-07 前置已由 Workflow D 完成B-03a 已实施commit 22964a2
  • WF-A 数据安全Sprint 20 ①②)— AI delete→soft_delete + restore/purge/list_trash 三工具 + list_projects 排除回收站commit 3f0839a
  • WF-B 阻塞去重Sprint 20 ③④⑤)— spawn_blocking 三处+补漏 + normalize_path 抽公共 + 复用 is_allowed_columncommit d5a6417
  • WF-C 前端Sprint 20 ⑥⑦⑧)— 扫描文案 i18n + parseStack 抽公共 + 8 处 alert/confirm 换组件commit 02ff88f
  • WF-D 审批闭环B-06/B-07/B-03a— execution_id 下沉 + 共享状态机 + HumanNode select! 实现commit 22964a2
  • WF-E Wave1 收尾清债commit 4aa689e + 89da9fa— B-03b 审批取消端到端StateMachine Arc 共享 + execution_id 注册表,主代理补完 agent 半成品agent 初版 workflow_cancel_state 全局孤立实例写了读不到Explore 审查漏抓语义缺陷)+ T-09 立项回滚级联删delete→purge_with_descendants+ T-10 判定已解决normalize_path 已 canonicalize零改+ T-12 df-ideas 清 capture.rs 死码cargo check / test含 clone_shares/ vue-tsc 全绿

Bug

P0/P1 bug 见上方「待办」分类,此处不重复)

长期 / 待需求驱动(不进看板主线)

  • 裁剪/压缩消息按需召回Query Function + 分层存储)
  • 停止生成 idle 即时优化(tokio::sync::Notify 替代 120s 轮询)
  • 模型能力系统 Phase 3Agent 内智能路由 + 成本预算 + 模型级联)
  • node_executions 全表 list 命令(当前只写不读)
  • do_promote crate 层 TODOpromotion.rs现走前端闭环