Developer Preview — 2026-04-22
Proof — durable execution under failure
The system acts, detects failure, and reverses.
This is a behavior proof, not a vertical proof. A Decision passes Policy, a Workflow starts executing, a downstream channel call fails, and the system compensates earlier successful steps to restore the platform to its prior state. The Mutation Log preserves all three mutations under one decision_id — the original, the failure, and the undo.
The visual centerpiece here is a populated timeline. Absence-as-evidence (the shape of the industrial proofs on /solutions/industrial) does not apply. This proof's shape is lineage-through-failure.
Context
A rebalance_spend Decision proposes shifting $800/day from Meta into Google on a rising search-intent signal. The Decision passes Policy evaluation cleanly; it is a non-territorial market-demand rebalance. The Workflow starts running.
{
"id": "dec_01J1B7K9C8N3RXQK9VPYZW2QF4",
"type": "rebalance_spend",
"priority": "medium",
"confidence": 0.74,
"summary": "Shift $800/day from Meta to Google on rising search-intent signal",
"reasoning": "Google auction density on industrial-circulation terms rose 12% week-over-week. Meta conversion signal is flat. Reallocating to match observed demand.",
"auto_executable": true,
"action": {
"type": "rebalance_spend",
"source_channel": "meta",
"target_channel": "google",
"amount": 800,
"currency": "USD",
"cadence": "daily",
"scope": { "market": "all" },
"reason": "rising_search_intent"
},
"computed_at": "2026-04-22T18:12:04Z",
"policy_version": "budget_policy_v1"
}
Mutation Log timelinedecision_id: dec_01J1B7K9C8N3RXQK9VPYZW2QF4
Three mutations, one decision, deterministic reversal.
The populated Mutation Log is the centerpiece of this proof. Where Proofs 1 and 2 on /solutions/industrial close with an empty log (absence as evidence), Proof 3 closes with a populated log (lineage as evidence). Read the three rows as one trace.
Source-channel debit
successplatform: meta · −$800/day · actor: agent · 18:12:11Z
Original mutation. Platform state changed: Meta campaign budget reduced by $800/day. Mutation Log entry records status: "success".
Target-channel credit
failedplatform: google · +$800/day · actor: agent · 18:12:16Z
Target step returns a rate-limit error from the channel API. The Workflow does not retry indefinitely — retry policy limits are hit, and the step is marked failed. Platform state on Google does not change.
Source-channel credit (compensation)
rolled_backplatform: meta · +$800/day · actor: compensation · 18:12:21Z
Compensation step reverses mutation #1. Actor is compensation, not the agent. Linkage to the original mutation is carried inside payload.compensates_mutation_id. Status is rolled_back — the mutation itself executed successfully, but its role is to reverse an earlier successful mutation.
Raw query result
{
"query": {
"decision_id": "dec_01J1B7K9C8N3RXQK9VPYZW2QF4"
},
"entries": [
{
"mutation_id": "mut_01J1B7K9E0Q5TZNU1BNQQGW4RF",
"decision_id": "dec_01J1B7K9C8N3RXQK9VPYZW2QF4",
"platform": "meta",
"mutation_type": "update_budget",
"payload": { "daily_budget_delta_micros": -800000000 },
"result": { "applied_at": "2026-04-22T18:12:11Z" },
"status": "success",
"actor_type": "agent:decision-runtime-cron",
"created_at": "2026-04-22T18:12:10Z",
"error_message": null
},
{
"mutation_id": "mut_01J1B7K9F1R6UAOV2CPOQHX5SG",
"decision_id": "dec_01J1B7K9C8N3RXQK9VPYZW2QF4",
"platform": "google",
"mutation_type": "update_budget",
"payload": { "daily_budget_delta_micros": 800000000 },
"result": null,
"status": "failed",
"actor_type": "agent:decision-runtime-cron",
"created_at": "2026-04-22T18:12:16Z",
"error_message": "google_ads_api: rate_limit_exceeded (code 429, retry_after=120s)"
},
{
"mutation_id": "mut_01J1B7K9G2S7VBPW3DQORIY6TH",
"decision_id": "dec_01J1B7K9C8N3RXQK9VPYZW2QF4",
"platform": "meta",
"mutation_type": "update_budget",
"payload": {
"daily_budget_delta_micros": 800000000,
"compensates_mutation_id": "mut_01J1B7K9E0Q5TZNU1BNQQGW4RF",
"compensation_reason": "downstream_step_failure"
},
"result": { "applied_at": "2026-04-22T18:12:21Z" },
"status": "rolled_back",
"actor_type": "compensation",
"created_at": "2026-04-22T18:12:20Z",
"error_message": null
}
],
"count": 3
}
Workflow run
The Workflow terminates in status: "compensated". This is a terminal state, not an intermediate one — the contract treats completed and compensated as the two legitimate terminal success/failure shapes of a run. A compensated run is not a failure. It is a run that reached a deterministic resting point by reversing earlier steps.
{
"run_id": "wf_01J1B7K9D9P4SYMT0ANMPDX3QE",
"workflow_id": "execute_rebalance_spend",
"status": "compensated",
"idempotency_key": "dec_01J1B7K9C8N3RXQK9VPYZW2QF4-attempt-1",
"current_step_id": "compensation_complete",
"requested_by": "agent:decision-runtime-cron",
"org_id": "org_01HW3T9P2Q8YXZ3N5B7C9DFA2V",
"retry_count": 0,
"awaiting_approval": false,
"created_at": "2026-04-22T18:12:04Z",
"updated_at": "2026-04-22T18:12:22Z"
}
Runtime event — event-trace plane
A compensation event lands on the event-trace plane with before_state_hash == after_state_hash. That equality is not an accident — compensation restored platform state to where it was before mutation #1 ran. Net change is zero. The three mutation entries are preserved under the decision_id so the lineage stays addressable, but the aggregate effect on the channel is nil.
{
"event_id": "evt_01J1B7K9H3T8WCQX4ERPSJZ7UI",
"org_id": "org_01HW3T9P2Q8YXZ3N5B7C9DFA2V",
"workspace_id": "ws_01HW5RN8K2P7Q3VXY4Z5A6B7C8",
"user_id": null,
"decision_id": "dec_01J1B7K9C8N3RXQK9VPYZW2QF4",
"trace_id": "trc_01J1B7K9I4U9XDRY5FSQTKA8VJ",
"surface": "decision_runtime",
"timestamp": "2026-04-22T18:12:21Z",
"policy_ids": [],
"before_state_hash": "h_d8e2f5a9b140",
"after_state_hash": "h_d8e2f5a9b140",
"delta_summary": "Workflow compensated after downstream step failure (google_ads rate_limit)",
"payload": {
"workflow_run_id": "wf_01J1B7K9D9P4SYMT0ANMPDX3QE",
"terminal_status": "compensated",
"failed_step_id": "credit_target_channel",
"compensated_mutations": ["mut_01J1B7K9E0Q5TZNU1BNQQGW4RF"]
}
}
Three mutations written. Zero net change to platform state. The record shows both the action and the undo — one decision, one trace, both halves addressable.
A dashboard logs what happened. A control plane reverses what should not have.
Footnotes
Compensation linkage. The reference from the compensating mutation back to the original is carried inside payload.compensates_mutation_id. The top- level payload field is published as open- shape on the Mutation Log primitive; this convention for compensation linkage is illustrative of how the system represents the link today, not yet a committed top-level schema. If the linkage is ever elevated to a named top-level field, it ships as a /developers extension under a new dated preview.
Workflow adapter. The active workflow adapter is a local in-memory runner, as noted in the Status band below. The compensation semantics demonstrated here — idempotency_key, compensating steps, terminal compensated state — are vendor-neutral and hold regardless of which durable-workflow engine eventually ships behind the adapter interface.
Scenario and IDs. The rebalance_spend and rate-limit specifics are illustrative of durable-execution shape under channel-API failure. All identifiers, timestamps, state hashes, and textual content are sanitized stand-ins; values do not correspond to any real account, campaign, or channel event.