Merge rule (same everywhere)
| Source | Uses saved Run setup? |
|---|---|
| Studio Run / Dry-run | Always (in-session + saved; no flag) |
API POST …/command start | Only if params.use_run_setup_defaults: true |
| Inbound webhook | Only if subscription extras.use_run_setup_defaults: true |
Cron (workflow_triggers) | Only if trigger config.use_run_setup_defaults: true |
trigger_payload, trigger_steps, and Save defaults.
Inbound webhooks
Shipped today (BFF + control-service):- Sender POSTs to
/v1/inbound-webhooks/{subscription_id}with HMAC + idempotency key. - BFF loads subscription credentials from Wheelhouse.
- JSON body is mapped to
trigger_payload(merged under caller/webhook values). - If credentials include
extras.use_run_setup_defaults: true, BFF sets that flag on the start request; control-service mergesrun_setup_jsonfrom the active workflow version before forwarding to the runtime.
extras shape (Wheelhouse column extras jsonb; [DONE] prod migration 000019):
PATCH /v1/inbound-webhooks/{id} with { "extras": { ... } }.
Console gap: Inbound tab may not expose extras editing yet; use PATCH API until UI ships.
Cron (workflow_triggers)
Phase 1 shipped in control-service (disabled by default via [workflow_scheduler] ENABLED):
workflow_trigger_firesoutbox (migration000025)- Scheduler ticker: claim due triggers → insert fire → advance
next_run_at - Dispatcher ticker: claim pending fires → start run via
BuildCronStartParams+applyRunSetupMerge - REST:
GET/POST/PATCH/DELETE /workflows/{id}/triggers
config example:
WORKFLOW_CRON_SCHEDULER.md (Phase 2 Redis, Phase 3 external).
Until [workflow_scheduler] ENABLED=true and migration 000025 applied, cron rows are configuration only.
When to enable use_run_setup_defaults
| Use case | Recommendation |
|---|---|
| Webhook body is the full input | false — map body → trigger_payload only |
| Webhook sends partial delta; Studio saved the rest | true |
| Cron fires same digest weekly with fixed Run setup | true + optional config.body overrides |
| Strict API integrator owns all params | false |