# X_TIMEOUT

## Means

operation exceeded its deadline

## Typical cause

a request that ran past the configured `requestTimeoutMs` (30s), or past the shorter budget its caller sent as `x-request-timeout-ms`. The abort fires first for cooperative code, so this is what the socket gets when the handler never looked at `ctx.signal`. The same object is rethrown by a write attempted past the deadline: a transaction rolls back, an entity write and an enqueue refuse, so an unkeyed retry does not duplicate it. Core owns the code and classifies it `retryable`; `@ultimat3/http` throws it and maps it to 504

## Fix

make every vendor call with `outbound({ url, vendor, dial, deadlineMs })` from `@ultimat3/core/outbound`, which hears `ctx.signal` and the deadline, and call `throwIfAborted(ctx)` before expensive work, or call `configureHttp({ requestTimeoutMs: 60_000 })` at module scope in a file under `apps/*/`. A write past the deadline is refused: wrap work that must land whole, `runToCompletion(() => withTransaction(fn))`, never a statement inside the transaction, whose COMMIT stays refused

[Core and runtime](/error-codes#core-and-runtime)
