优化: AI Chat全栈多批审查修复与架构清理(risk_level清理/路由解耦/工具渲染/测试补测/死代码)
This commit is contained in:
@@ -3,11 +3,34 @@
|
||||
> **真相源**(本文档唯一展开完整设计)。功能决策记录仅放摘要 + 指针。
|
||||
>
|
||||
> 背景:B-260614-03 — df-workflow `HumanNode` 假实现(`human_node.rs:55` 注释"等待审批"但首次迭代直接 return "同意")。
|
||||
> 状态:📐 **设计完成,未实施** | 创建:2026-06-14 | 来源:多代理探索
|
||||
> 状态:📐 设计完成 | 创建:2026-06-14 | 来源:多代理探索
|
||||
> 依赖:B-260614-06(execution_id 硬编码)、B-260614-07(每节点全新空 StateMachine)
|
||||
|
||||
---
|
||||
|
||||
> ## 实施状态(2026-06-18 核对)
|
||||
>
|
||||
> **B-03a(响应等待 + 超时)— 已落地**。`HumanNode.execute` 完整实现 subscribe → send(Request)(`.await` 修复 send 缺 poll 死 bug) → `select!` 循环(响应/超时/取消):
|
||||
> - `crates/df-nodes/src/human_node.rs:70` 先 subscribe;`:74-83` `.send(HumanApprovalRequest).await`(原审查报告头号 bug 已修);`:90-175` `select!` 循环(rx.recv() / sleep_until(deadline) / cancel_tick)。
|
||||
> - 单测覆盖:`human_node.rs:286 normal_approval_returns_decision` / `:339 mismatched_execution_id_filtered_then_timeout` / `:378 timeout_when_no_response` / `:388 invalid_decision_ignored_then_timeout` 等。
|
||||
>
|
||||
> **B-03b(取消机制)— 已落地**(原设计标"待做",实际已实施):
|
||||
> - `StateMachine::set_cancelled` 已加:`crates/df-workflow/src/state.rs:95`(注释为"唯一受控旁路")。
|
||||
> - `cancel_workflow_node` IPC 已加:`src-tauri/src/commands/workflow.rs:486`,并在 `src-tauri/src/lib.rs:107` 注册;含终态前置守卫(Pending/Running/Waiting 才允许 set_cancelled)。
|
||||
> - 前端取消按钮已接:`src/views/ProjectDetail.vue:425` + `src/stores/project/workflow.ts:131`(经 `src/api/workflow.ts:66` invoke)。
|
||||
> - B-07(共享 StateMachine)已解:`NodeContext.node_status` 为 `StateMachine` clone,内部 `Arc<Mutex<HashMap>>` 共享(`crates/df-workflow/src/executor.rs:39` 注释、`state.rs:88-95`);`run_workflow` 把执行器状态机注册到 AppState 全局表,IPC 经 execution_id 取引用直达运行中节点。
|
||||
> - 端到端测试:`human_node.rs:488 end_to_end_human_approval_completes_workflow` / `:551 end_to_end_human_approval_cancelled`。
|
||||
>
|
||||
> **超出原设计、后追加的能力**:
|
||||
> - F-260615-01 多选审批(`select_type=single|multiple` + `decisions` 数组):`human_node.rs:63-66` 解析、`:102-111` 数量/合法性校验、`src-tauri/src/commands/workflow.rs:404 approve_human_approval` 签名含 `decisions/select_type`。
|
||||
> - F-260616-06 阶段2 审批拒绝语义化:decision 命中拒绝关键字(`human_node.rs:19-22 REJECT_KEYWORDS`)→ 返 Err 触发工作流 failed(原设计拒绝与同意一样 Ok 的行为已反转)。
|
||||
>
|
||||
> **B-06(execution_id 下沉)— 未单独核验状态**,本设计标注当时为"dummy-execution-id";现 `approve_human_approval` IPC 签名已显式收 `execution_id: String`(`workflow.rs:407`),由调用方传入。是否已从 `run_workflow` 真 ID 下沉到 executor 再到 NodeContext,本次仅标注未深核。
|
||||
>
|
||||
> 原文以下设计正文保持不变,作为历史设计记录;落地形态以上方"实施状态"为准。
|
||||
|
||||
---
|
||||
|
||||
## 一、背景与问题
|
||||
|
||||
`HumanNode` 是工作流中唯一的阻塞节点,用于在 DAG 执行链路上插入人工确认门控(如"发布前确认""删除前确认")。当前实现 `crates/df-nodes/src/human_node.rs` 已正确发送 `WorkflowEvent::HumanApprovalRequest` 到事件总线,但**紧接着直接 `return NodeOutput { decision: "同意" }`**,从不等待前端审批响应。这导致:
|
||||
|
||||
Reference in New Issue
Block a user