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.

json
{
  "inline": {
    "mode": "sync_lambda",
    "target": "lambda://local-inline"
  },
  "workers": {
    "mode": "async_sqs",
    "target": "local://workers",
    "concurrency_group": "$.tenant_id"
  }
}
Complete example · JSON / YAML

JSON

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

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: true

Download JSON · YAML

shell
rippflow controls validate advanced-execution.workflow.yaml --json

Expected: 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.

shell
rippflow dev advanced-execution.workflow.json --handlers handlers.json --shards jan,feb --report execution.json

Branch 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.

json
{
  "rework": {
    "rerun_phase": "process",
    "max_loops": 2,
    "override_inputs": {
      "dpi": 600
    }
  }
}
Verified sources

Checked 2026-11-05.

Let's talk

Contact Rippflow

Tell us about your workflows, deployment or pricing.

We'll reply to your email.

Search docs

Search workflows, handlers and operations.