Skip to content

feat(workflows): loop/loopExit 与 aggregator 节点全链路 - #175

Closed
wanglongan587 wants to merge 15 commits into
ora-space:mainfrom
wanglongan587:feat/639-integration
Closed

wanglongan587 wants to merge 15 commits into
ora-space:mainfrom
wanglongan587:feat/639-integration

Conversation

@wanglongan587

Copy link
Copy Markdown
Collaborator

Refs ora-space/circus#640

一次性交付两个 desktop 节点的 Cloud 全链路,便于 reviewer 在同一份改动里评审它们共享的容器/调度器接缝。

包含

Loop / loopExit(feat/633-loop-execution)

  • 发布门禁:容器结构、loopConfig(maxIterations 1..100、耗尽策略、carried 变量、until、outputs)、loopExit 只允许在 loop body。
  • 调度器:post-test 轮次、feedback 快照、until 判定、轮次归档到 loop.completed、最终轮保留、loopExit 早退、耗尽失败/成功、取消。
  • 编辑器:调色板 Loop 原子组、loopExit 类型、Loop 检查器(预算/变量/until/输出/耗尽)、loopExit 面板。

Aggregator(feat/637-aggregator)

  • 发布门禁:有序根选择器列表(非空、无嵌套、无重复、根已声明)。
  • 调度器:first-assigned 透传为 {aggregator}.output;键存在即赋值(含 null);全部未赋值失败 aggregator_no_match。
  • 编辑器:类型、调色板(workflow + iteration 作用域)、检查器(有序候选列表)、导入。

集成处理:节点 kind 联合、调色板、工厂、检查器分派、可执行集合、调度器 switch、文案 bundle(loop / aggregator / node 目录各自 sibling);无节点语义变更。

ADR 状态

两份后续 ADR 均为 proposed,待 owner 评审:

  • loop / loopExit:ora-space/specs#224
  • aggregator:ora-space/specs#225

核心用例在 ADR 批准后补;真实栈 E2E 完成前不把 ADR 标为 implemented。

验证

  • Go:go build ./...;TEST_DATABASE_URL=… go test ./internal/core -run "TestWorkflow" → ok 219s(含 loop 轮次/取消/loopExit、aggregator 顺序/未赋值/null/no-match)。
  • 前端:npm run check 全绿——154 文件 / 1297 测试、覆盖率、modules、docs、dead code、duplication、build。

已知差异 / 未做

  • selector 仍是 node.root 文本输入(选择器化属编辑器体验,不改契约)。
  • aggregator 无静态类型相等、无 producer 传递前驱校验(已写进 ADR #225 的 D3)。
  • iteration 仍未实现,不在此 PR。
  • 真实栈端到端未做。

@wanglongan587

Copy link
Copy Markdown
Collaborator Author

本 PR 的内容已合并进 #177(同一分支基线的完整交付:loop/loopExit + aggregator + iteration),#177 取代本 PR,避免两份重叠的评审。关闭本 PR,请到 #177 继续。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant