feat: Compose pinned subworkflows with map and join #317

Closed
opened 2026-07-13 19:46:11 +02:00 by dries · 0 comments
Owner

Parent

#311

What to build

Let workflows invoke reusable pinned subworkflows, dynamically map a JSON work-item artifact across them, and join ordered results with explicit success policies. Large mapped runs remain understandable in the UI.

Acceptance criteria

  • Subworkflow references resolve and pin a specific active version before the parent run executes.
  • Validation rejects direct and indirect recursive subworkflow cycles.
  • Map consumes a declared JSON array and requires a unique stable key per item.
  • Each mapped item creates an isolated subworkflow run context while consuming the parent concurrency/budget scope.
  • Restarting or retrying a map does not duplicate completed stable keys.
  • Join emits input-ordered values and per-item status regardless of completion order.
  • Join policies support all-success, always, and minimum-success.
  • Failed mapped branches do not stop unrelated items unless fail-fast is enabled.
  • The run UI collapses/expands mapped items and links parent, child, and joined results.
  • Tests cover empty lists, duplicate keys, partial failures, out-of-order completion, restart, and large synthetic maps.

Blocked by

## Parent #311 ## What to build Let workflows invoke reusable pinned subworkflows, dynamically map a JSON work-item artifact across them, and join ordered results with explicit success policies. Large mapped runs remain understandable in the UI. ## Acceptance criteria - [ ] Subworkflow references resolve and pin a specific active version before the parent run executes. - [ ] Validation rejects direct and indirect recursive subworkflow cycles. - [ ] Map consumes a declared JSON array and requires a unique stable key per item. - [ ] Each mapped item creates an isolated subworkflow run context while consuming the parent concurrency/budget scope. - [ ] Restarting or retrying a map does not duplicate completed stable keys. - [ ] Join emits input-ordered values and per-item status regardless of completion order. - [ ] Join policies support all-success, always, and minimum-success. - [ ] Failed mapped branches do not stop unrelated items unless fail-fast is enabled. - [ ] The run UI collapses/expands mapped items and links parent, child, and joined results. - [ ] Tests cover empty lists, duplicate keys, partial failures, out-of-order completion, restart, and large synthetic maps. ## Blocked by - #315 - #316
dries closed this issue 2026-07-16 00:56:09 +02:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
dries/ocman#317
No description provided.