新增: AI Chat多项增强(审批去重/编辑重发/导出/实体引用/会话置顶搜索)+任务推进链df-nodes落地

This commit is contained in:
2026-06-16 12:41:13 +08:00
parent 212a927eee
commit 7d5cd4c89a
62 changed files with 4576 additions and 248 deletions

View File

@@ -449,6 +449,30 @@
- **边界**:取消分支在 B-07 + `set_cancelled` 补齐前恒 false等价无取消功能不残跨工作流并发 HumanNode 在 B-06 修前有 Response 错配风险。
- **状态**:📐 设计完成2026-06-14未实施。详见 [B-03-人工审批响应机制-2026-06-14.md](./B-03-人工审批响应机制-2026-06-14.md)。
## 任务推进链7 态状态机 + 工作流联动)
> tasks 表从 todo→done 的状态推进链路。阶段17 态状态机 + advance_task CAS 原子写 + 软删除已落地阶段2工作流联动task_id + 完成回调 advance_task + DAG 模板)进行中。详细实施路径见 [任务推进链实施路径-2026-06-16.md](./任务推进链实施路径-2026-06-16.md) / [推进链阶段2实施路径-2026-06-16.md](./推进链阶段2实施路径-2026-06-16.md)。关联决策 D-260616-01~04前端7态对齐 / 软删除 / Node trait 归属 / 阶段1先行
### advance_task / 状态机走 df-nodes Node trait不复活 df-taskD-260616-03
- **决策**:任务推进业务逻辑(`can_transition_to` 状态机 / `advance_task` 原子写 / 闸门节点)落在 **df-nodes crate 的 Node trait 扩展**`task_state_machine.rs` / `task_advance_node.rs`IPC 层 thin 入口。不复活 2026-06-12 刚因零引用删除cf017f8的 df-task crate不塞 commands/task.rs。
- **原因/取舍**:① 对齐 D3「业务逻辑在 df-nodes 实现Node trait 纯接口df-workflow/src/node.rs:67」原则② 复活一个零引用刚删的 crate 是制造新死码df-nodes 补 `df-storage` 依赖读 TaskRecord 即可(核实无循环依赖);③ IPC 层保持 thintask.rs 仅 3 行转发)守住 D3 不让业务逻辑下沉 IPC。前端对齐后端 7 态D-260616-01types.rs:131激活 InReview/Testing/Blocked 三闸门态)。
- **状态**:✅ 阶段1 落地commit d2cb38c7态状态机 + advance_task CAS + 软删除25 测试);🚧 阶段2 进行中batch32注册 TaskAdvanceNode + config 下沉 + HumanNode reject
### DagExecutor config 下沉:节点级覆盖全局级 deep_merge④-1
- **决策**`DagExecutor.run` 构造 `NodeContext.config` 从「`initial_config.clone()` 覆盖一切」改为「`deep_merge(node_def_config, initial_config)`」——节点级配置覆盖全局级节点定义优先。Dag 加 `node_configs: HashMap<NodeId, Value>`build_dag 填入 NodeDef.configrun 合并下沉。
- **原因/取舍**原实现executor.rs:99-107用全局 initial_config 覆盖 NodeDef.config**节点级配置被完全忽略**——TaskAdvanceNode.execute 读 `ctx.config.task_id` 拿到全局 config 而非节点定义写的 task_id节点参数化失效。这是阶段2 的架构前置阻塞点:不修则 TaskAdvanceNode 无法从 DAG 接收 task_id。选「节点级覆盖全局级」节点定义优先而非全局覆盖节点级因节点是更具体的配置源。deep_merge 对 Object 递归合并,非 Object 节点级直接覆盖。现有 HumanNode/AiNode 也受益(它们当前读 ctx.config 拿全局 config但无人通过 NodeDef.config 定义节点参数故未暴露)。
- **状态**:🚧 实施中batch32 ④-1 agentdag.rs + executor.rs + registry.rs + workflow.rs配 deep_merge / node_config_overrides 测试)。
### DAG 模板硬编码,不建 workflow_defs 表(②-6
- **决策**:任务推进的工作流 DAG 模板todo→in_progress / in_review→testing / testing→done 三条推进边 + 退回)**硬编码**在 `df-nodes/task_workflow_templates.rs`(导出 `template_for(target_status) -> DagDef`**不建 workflow_defs 表**。`tasks.workflow_def_id` 字段留 None。
- **原因/取舍**模板数量少且稳定3 条推进边 + 退回),建表需 CRUD UI + 版本管理 + 关联维护,过度工程。[业务系统设计-2026-06-12.md](./业务系统设计-2026-06-12.md) 确认 workflow_defs 从未建表(工作流定义 dag_json 内嵌 workflow_executions延续此约定。硬编码模板随代码版本管理零运行时配置开销。
- **状态**:📐 设计定稿待实施(②-6batch33+)。
### 工作流回调语义:成功与任务推进解耦,失败按 target 退回(②-3/②-4/②-5
- **决策**:工作流完成后回调 advance_task 的语义——**成功**executor Oktask_id + target_status 都 Some 时调 `advance_task_atomic`,回调失败只 warn 不回滚工作流(工作流已完成是事实,任务推进失败前端提示手动处理);**失败**executor Err按 target_status 推算退回态testing→in_review / in_review→in_progress调 advance或加 `failure_target_status` 参数。HumanNode reject②-5从 Ok 改返 Err使审查拒绝走 failed 触发退回。
- **原因/取舍**工作流成功与任务推进是两个独立事实解耦避免「工作流成功但任务推进失败时回滚已完成工作流」的复杂性失败退回让审查拒绝能回流上一态review_rounds+1。CAS 已防回调与手动 advance 并发撞advance_task_atomic 捕获 InvalidState 降级。跨表事务缺失阶段2 回调失败降级阶段3/4 补 Database.transaction())。
- **状态**:📐 设计定稿待实施batch32 做 ②-5 HumanNode reject 语义化batch33 做 ②-3/②-4 回调)。
## 需求与待办
> 汇集散落于各决策条目状态(📐/🚧)的待办 + 新增需求细节 + 需求澄清。单一清单,避免遗漏。