Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions content/docs/guides/metadata/flow.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -345,7 +345,7 @@ This is the **aggregating-node** pattern (Camunda multi-instance / Step Function
`Map`): the run keeps a single program counter and pauses once, so it needs no
concurrent-token machinery. Durable pause **inside** a hand-drawn `parallel`
branch or `loop` iteration β€” where two unrelated positions pause independently β€”
is a separate, larger capability ([ADR-0037](https://github.com/objectstack-ai/framework/blob/main/docs/adr/0037-token-scope-tree-execution.md)
is a separate, larger capability ([ADR-0039](https://github.com/objectstack-ai/framework/blob/main/docs/adr/0039-token-scope-tree-execution.md)
Track B); the aggregating node covers the common parallel/batch-approval demand
without it. Worked example: `showcase_invoice_signoff` in the showcase app.

Expand Down Expand Up @@ -376,7 +376,7 @@ The run holds a **single program counter** the whole time: only one item's
approval is open at any moment; when it is decided the engine **re-enters** the
map node to start the next item. v1 is sequential and fail-fast (the first item
whose subflow fails fails the map). Concurrent fan-out (all items at once) is the
larger [ADR-0037](https://github.com/objectstack-ai/framework/blob/main/docs/adr/0037-token-scope-tree-execution.md)
larger [ADR-0039](https://github.com/objectstack-ai/framework/blob/main/docs/adr/0039-token-scope-tree-execution.md)
Track B work. Worked example: `showcase_release_signoff` β†’ `showcase_one_task_signoff`.

### Nested pause β€” pausing inside a subflow
Expand Down
2 changes: 1 addition & 1 deletion docs/adr/0019-approval-as-flow-node.md
Original file line number Diff line number Diff line change
Expand Up @@ -176,7 +176,7 @@ The open-source / enterprise split is **not** an architectural concern and is **
A pausing node inside a **subflow** now suspends the whole chain instead of failing the parent.
Model: **linked runs** (the inter-flow half of the long-term execution-state architecture β€”
cf. Step Functions nested executions / Temporal child workflows; the intra-flow half, a
token/scope tree replacing the single-program-counter continuation, is [ADR-0037](./0037-token-scope-tree-execution.md)).
token/scope tree replacing the single-program-counter continuation, is [ADR-0039](./0039-token-scope-tree-execution.md)).

- The child's continuation persists under its **own run id** (run identity keeps per-flow version
pinning, run logs, and `$runId`-based approval/wait correlation intact). The parent suspends at
Expand Down
2 changes: 1 addition & 1 deletion docs/adr/0031-advanced-flow-node-executors-and-dag.md
Original file line number Diff line number Diff line change
Expand Up @@ -199,7 +199,7 @@ with best-effort folding of foreign BPMN gateways. BPMN 2.0 **XML**
- Durable pause *inside* a `parallel` branch or `loop` iteration β€” the structured
constructs run their regions synchronously here. Generalizing the engine's
single-program-counter to a token/scope tree (the runtime dual of these
regions) is [ADR-0037](./0037-token-scope-tree-execution.md).
regions) is [ADR-0039](./0039-token-scope-tree-execution.md).

## Already shipped this line of work

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# ADR-0037: Concurrent durable pause β€” multi-instance nodes now, token/scope-tree later
# ADR-0039: Concurrent durable pause β€” multi-instance nodes now, token/scope-tree later

**Status**: Proposed (2026-06-11) β€” revised after a code + industry self-review
**Deciders**: ObjectStack Protocol Architects
Expand Down
8 changes: 4 additions & 4 deletions examples/app-showcase/src/flows/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -833,7 +833,7 @@ export const ResilientSyncFlow = defineFlow({
});

/**
* Invoice Dual Sign-off β€” the worked **parallel-approval** example (ADR-0037
* Invoice Dual Sign-off β€” the worked **parallel-approval** example (ADR-0039
* Track A: aggregating approval node, no engine-core change).
*
* "Finance AND legal must both sign off before an invoice is sent" is expressed
Expand All @@ -853,7 +853,7 @@ export const ResilientSyncFlow = defineFlow({
export const InvoiceDualSignoffFlow = defineFlow({
name: 'showcase_invoice_signoff',
label: 'Invoice Dual Sign-off (parallel approval)',
description: 'On send, requires finance AND legal to both approve via one aggregating approval node β€” demonstrates parallel approvals without a token tree (ADR-0037 Track A).',
description: 'On send, requires finance AND legal to both approve via one aggregating approval node β€” demonstrates parallel approvals without a token tree (ADR-0039 Track A).',
type: 'autolaunched',
nodes: [
{
Expand Down Expand Up @@ -957,7 +957,7 @@ export const OneTaskSignoffSubflow = defineFlow({
});

/**
* Release Sign-off β€” the worked **batch-approval** example (ADR-0037 Track A2:
* Release Sign-off β€” the worked **batch-approval** example (ADR-0039 Track A2:
* the sequential `map` / multi-instance node).
*
* "Every task in the release must be signed off, one at a time" is a **single
Expand All @@ -975,7 +975,7 @@ export const OneTaskSignoffSubflow = defineFlow({
export const ReleaseSignoffFlow = defineFlow({
name: 'showcase_release_signoff',
label: 'Release Sign-off (batch approval / map)',
description: 'Signs off every task in a release one at a time via a map node β€” demonstrates batch approval (ADR-0037 Track A2).',
description: 'Signs off every task in a release one at a time via a map node β€” demonstrates batch approval (ADR-0039 Track A2).',
type: 'autolaunched',
variables: [
{ name: 'items', type: 'list', isInput: true },
Expand Down
Loading