Documentation / Advanced
Choose how each phase runs
Dependencies choose when work is ready. Lanes choose where it runs. Scopes choose how many completions a barrier expects.
Mix synchronous and queued work
sync_lambda waits for a Lambda response; async_sqs queues work. Local execution simulates both. FIFO grouping orders dispatch; it does not replace a concurrency budget.
For a local run, download the manifest and handler with the definition.
{
"inline": {
"mode": "sync_lambda",
"target": "lambda://local-inline"
},
"workers": {
"mode": "async_sqs",
"target": "local://workers",
"concurrency_group": "$.tenant_id"
}
}Complete example · JSON / YAML
JSON
{
"name": "advanced-sync-async",
"version": "1.0.0",
"lanes": {
"inline": {
"mode": "sync_lambda",
"target": "lambda://local-inline"
},
"workers": {
"mode": "async_sqs",
"target": "local://example-workers",
"concurrency_group": "$.tenant_id"
}
},
"phases": {
"start": {
"service": "hello",
"lane": "inline",
"scope": "root"
},
"process": {
"service": "hello",
"lane": "workers",
"scope": "per_shard",
"requires": [
"start"
]
},
"finish": {
"service": "hello",
"lane": "inline",
"scope": "fan_in_all",
"requires": [
"process"
],
"terminal": true
}
}
}YAML
name: advanced-sync-async
version: 1.0.0
lanes:
inline:
mode: sync_lambda
target: lambda://local-inline
workers:
mode: async_sqs
target: local://example-workers
concurrency_group: $.tenant_id
phases:
start:
service: hello
lane: inline
scope: root
process:
service: hello
lane: workers
scope: per_shard
requires:
- start
finish:
service: hello
lane: inline
scope: fan_in_all
requires:
- process
terminal: truerippflow controls validate advanced-execution.workflow.yaml --jsonExpected: ok: true. This checks the contract; deployment/enforcement is separate.
Run the local simulation
Expected: two shards complete and the final barrier opens. No Lambda or SQS request is made.
rippflow dev advanced-execution.workflow.json --handlers handlers.json --shards jan,feb --report execution.jsonBranch or rework deliberately
root runs once, per_shard runs per active shard, and fan_in_all waits across shards. requires joins parents. Named outcomes can choose next, re-run a phase and override its inputs.
Rework exhaustion can advance. Use an explicit blocked/failure route when publication must stop.
{
"rework": {
"rerun_phase": "process",
"max_loops": 2,
"override_inputs": {
"dpi": 600
}
}
}