Failure injection
Reproduces timeout-before-write, timeout-after-write, partial completion, stale state, and other failure conditions deterministically.
See scenariosDid it fail, succeed without returning a response, or leave us unable to tell?
Relay sits between that failure and the retry.
It checks what actually happened before deciding what should happen next.
That prevents blind retries from duplicating, overwriting, or repeating actions.
An agent tries to update a claim reserve from $5,000 to $8,400. The timeout is real, but it is not enough to know whether the business change happened.
No success response comes back.
The response cannot tell us.
The effect already exists.
The request looked like it failed. The business action actually succeeded. Relay caught the difference before another write could run.
The same pattern lets Relay handle partial completion, stale state, duplicate requests, and outcomes that cannot be safely proven.
Run the failure, inspect an execution trace, or check the reliability evals.
The planner proposes intent. Deterministic software owns execution safety.
Reproduces timeout-before-write, timeout-after-write, partial completion, stale state, and other failure conditions deterministically.
See scenariosCompares intended effects with the resulting system state before deciding whether to leave an action alone, retry selectively, replan, or stop.
Inspect a traceUses idempotency, expected-version checks, retry limits, selective retry, and human review to prevent unsafe repeated mutations.
See failure casesPersists execution evidence in Postgres and exercises the reliability semantics through replayable traces, integration tests, browser workflows, and deterministic evals.
View evalsThe change succeeds, but the response is lost.
One action succeeds and the next fails.
Relay cannot prove whether the action happened.
Synthetic claims workflow. No real insurer or Guidewire integration.