AR-10 文案统一(65c475b) + R6 human_node send await + R7 前端契约 snake_case/扁平(0bb96fc,31-agent 审查报告头号 P0 审批链断裂);R3/R4/R5 评估维持现状合理(std Mutex 纳秒级/&self 放宽无害/poison fail-fast)
20 KiB
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 僵尸 crate(df-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-14):见 B-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 保其他对话 pending;ai_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:31Ok(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
审批态新建对话卡死✅ WF-F 完成(ai_conversation_create 加 generating 守卫,位于 clear 前,对齐 switch:433 写法)(commit057a212) - AR-3
审批卡片不可读✅ WF-F 完成(audit.rs build_approval_reason 按 9 工具特化拼对象名 + ToolCard resultSummary 补 restore/purge case + ARG_LABEL_MAP id 加友好标签 + i18n 双语补 4 key)(commit057a212) - AR-4
create_project 双审双 API✅ WF-F 完成(schema 加 path/stack + handler 有 path 时合并绑定 spawn_blocking 探测栈,消除二次 bind_directory;TODO 标注可抽公共绑定函数)(commit057a212)
P1
- AR-5
审批态 stop 无兜底✅ Wave3 完成(stopChat 本地先复位 streaming + clearStreamWatchdog,防审批态看门狗已 clear + AiCompleted 竞态丢失卡死)(commit9e2aeff) - AR-6 Low 工具失败语义冲突(emit AiError 置 streaming=false 但 agentic loop 续跑,残留文本 flush 又"完成",状态紊乱)— audit.rs + agentic.rs:195
- AR-7
clean 无 UI 入口✅ Wave3 完成(crud.rs clear_messages 真删 DB messages JSON+清 token 保留壳 + AiChat 垃桶按钮二次确认);主代理补完 agent 半成品:agent impl 声称改 commands.rs ai_chat_clear 调 clear_messages,实际 diff 零改动(self_boundary_check 造假),审查 semantic_check 正确抓到 gap(commit 9e2aeff)
P2
- AR-8 delta 节流+滚动(后端无 50ms 合批/前端无 rAF,叠加 AR-1 掉帧)— stream_recv.rs + AiChat.vue:625-633
- AR-9
friendlyError 硬编码中文✅ Wave3 完成(friendlyError 全走 i18n.global.t + zh/en 双语补 4 key;TS2589 用 as any 规避 vue-i18n 深度泛型)(commit9e2aeff) - AR-10
想法→灵感迁移残留✅ 已统一(13 文件批量:i18n zh-CN + 后端错误 + LLM 描述/提示词 + store toast;en 待定 Ideas/Idea、docs 注释低优先略)(commit65c475b) - AR-11 数据变更联动刷新(推荐方案A 后端 emit + store 监听)— 跨层 — 详见 审查第五章
🟡 B-03b 复核后续(独立深度复核,2026-06-14)
B-03b 端到端补完(commit 4aa689e)后独立复核发现 2 加重 + 3 低优。①为真实 bug:取消链 IPC→set_cancelled→HumanNode is_cancelled→Err 通了,但 HumanNode 返 Err 后 executor run:115
set_failed走 transition,而 Cancelled 不在is_legal转换图 → bail → 工作流因状态转换错误异常终止(非优雅标记取消)。补完时只验 IPC→HumanNode 链,漏验 HumanNode→executor Err 处理。
- B-03b-R1
Cancelled 转换图双踩✅ 已修(executor Err 处理加 is_cancelled 检测,已取消节点跳 set_failed,Cancelled→Failed 非法 transition 不再 bail;emit NodeFailed 仍发,状态保 Cancelled;采修法 B 不动 is_legal 转换图) - B-03b-R2
零端到端取消测试✅ 已补(test_cancelled_node_skips_set_failed:CancelSelfNode 经共享 node_status 自取消→Err→executor 不 bail→状态保 Cancelled;df-workflow 14 test pass) - B-03b-R3 — [评估维持] std::sync::Mutex — 快速临界区纳秒级持锁不阻塞 runtime,保持 std 合理
- B-03b-R4 — [评估维持] set_* 改 &self 后调用方 &mut — &self 是放宽,&mut self 上下文调 &self 无害,清理为可选优化不影响正确性
- B-03b-R5 — [评估维持]
lock().expect()poison panic — poison=持锁 panic 严重错误,fail-fast 合理,非用户态可恢复 - B-03b-R6
human_node send 缺 await✅ 已修(human_node.rs:41 加 .await;async fn send 的 Future 不再被 let _ = 丢弃,Request 真进 channel)(commit0bb96fc) - B-03b-R7
前端契约失配✅ 已修(project.ts:214 type→snake_case + :215 取 event 本体扁平字段 + as unknown as 绕过联合类型)(commit0bb96fc);遗留:types.ts event.type 收窄字面量联合(防再写错 type 字符串,报告 §4 第3项)待补 - B-03b-R8 — [P0 根因] 缺 human 节点端到端集成测试(前端无 human DAG 入口,demoDag 仅 script),单测绿但不覆盖 human→弹窗→审批→返回链路,是 R6/R7 存活土壤
- B-03b-R9 — [P2] 其余 8 项对抗裁定(③串扰/④单槽/⑤终态不清/⑥set_cancelled覆盖终态/⑦互斥/⑧approve不校验/⑨⑩Lagged/⑪failed_node空)多数潜伏或零危害,详见 审查报告 §2
✅ 已完成 — df-workflow 审批闭环(Workflow D, commit 22964a2)
- B-260614-06 —
execution_id 硬编码 "dummy-execution-id"✅ DagExecutor::new 接收 execution_id 下沉 NodeContext(workflow.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, commit4aa689e)
P1 — 重要缺陷
- B-260614-08 —
promote_idea 两步写非事务✅ mission:T-260614-05 已修复(idea.rs 第二步 update_full 失败时补偿删除已建 project;Repository 不支持跨 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 file,4 大功能域(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 保留诊断能力但不污染 console;vue-tsc 0 err,src/ 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 永真卡死"已修复;剩余 localStoragedf-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.rs:
evaluate()纯启发式,接 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_descendants,1 行,签名兼容)(06-14, commit89da9fa) - T-260614-10 —
findBinding canonicalize✅ WF-E 判定已解决(normalize_path 已含 canonicalize 优先 + 词法回退,find_binding_conflict 两端对称已用,无需重复加;零改动)(06-14, commit89da9fa) - F-260614-07 — [架构前置] df-ai-core trait 下沉拆 crate — F-03 注入方式前置(决策记录已收敛:原 F-03 的 A/B/C 选型作废,统一为全局 AI trait 下沉独立 crate,df-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, commit89da9fa)
已完成
2026-06-14
- R-260614-01 ai.rs 拆 11 子 module(commands/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-人工审批响应机制.md(9 节完整设计)+ 功能决策记录摘要章节 + 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_column(commit 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 全绿 - WF-F Wave2 aichat P0 三项(commit 057a212)— AR-2 新建对话守卫 + AR-3 审批卡片可读化(reason 拼 9 工具对象名 + restore/purge case + id 标签 + i18n)+ AR-4 create_project schema 加 path/stack 合并绑定;审查 boundary 全误判(3 agent 并行同工作区,审查 git diff 被三人累计改动污染互相指责越权;correctness "i18n 未添加"亦臆断),主代理独立核查三任务代码全正确,cargo check/vue-tsc 全过;遗留:task-advance-concept.md(agent 越权自主产出,保留未追踪待评估)
- WF-G Wave3 aichat P1/P2(commit 9e2aeff)— AR-5 stop 兜底 + AR-7 clean UI 真删 + AR-9 friendlyError i18n;审查 semantic_check 抓对 AR-7 gap(agent impl 声称改 commands.rs 实际零改动=幻觉,主代理补完);boundary 仍全局 diff 误判(审查 prompt 加固对 correctness 有效、对 boundary 根除不掉 agent 跑全局本能)
Bug
(P0/P1 bug 见上方「待办」分类,此处不重复)
长期 / 待需求驱动(不进看板主线)
- 裁剪/压缩消息按需召回(Query Function + 分层存储)
- 停止生成 idle 即时优化(
tokio::sync::Notify替代 120s 轮询) - 模型能力系统 Phase 3(Agent 内智能路由 + 成本预算 + 模型级联)
node_executions全表 list 命令(当前只写不读)do_promotecrate 层 TODO(promotion.rs,现走前端闭环)