Skip to main content

Failure taxonomy

Every bundle failure is classified into one of five canonical classes. Each class has a distinct recovery policy that the agent applies automatically.

Injecting a fault

The fault injection system lets you trigger any failure class on demand — without real network conditions. Register a one-shot fault before enqueueing a transaction:
The fault is consumed after a single use. The next submit after the faulted one goes to real Jito.

How it works

When a fault is registered via POST /debug/fault, the sidecar stores it in a next_fault field. The next call to POST /internal/submit:
  1. Drains the tx queue normally (bytes are retained for retry)
  2. Detects the pending fault
  3. Synthesizes a failed lifecycle entry with the specified failure_class
  4. Emits TxStatusChanged + BundleSettled SSE events
  5. Returns HTTP 200 with a structured result — no Jito call is made
The agent receives the SSE events and executes the correct retry policy as if the failure happened on mainnet.

Running the full demo

The fault_demo.ts script in the agents/ directory automates the full sequence:
Expected output:

Valid fault classes

string
required
One of the five canonical classes:
  • fee_too_low
  • expired_blockhash
  • bundle_failed
  • compute_exceeded
  • slot_skip
string
Optional custom error string stored in the lifecycle entry’s raw_error field. Defaults to "Injected fault: {failure_class} (demo)".