Runtime Error Catalog
server/src/modules/runtime/errors/runtimeErrorCatalog.ts:RUNTIME_ERROR_CATALOG.This generated snapshot is derived from RUNTIME_ERROR_CATALOG in server/src/modules/runtime/errors/runtimeErrorCatalog.ts. It is the closed taxonomy of runtime gateway error codes: every runtime failure reaches the boundary already carrying one of these machine codes, and the boundary maps that code to the static player-safe copy recorded here.
The frontend presentation registry (web_client/spa/src/runtime/generated/runtimeErrorRegistry.gen.ts) is generated from this same catalog by scripts/generate-runtime-error-registry.mjs, so the player title, player message, category, retryable, and terminal values on both sides cannot drift.
The operator description is log-facing and is not shown to a player.
Error code count: 64. Category count: 10. Engine-contract code prefix: runtime_engine_contract_.
Categories
Every code belongs to one closed top-level category. The disposition is the total, compile-checked classification from runtimeErrorCategoryDisposition.
| Category | Disposition | Code count |
|---|---|---|
auth | denied | 8 |
schema_violation | malformed | 7 |
release_mismatch | stale_release | 10 |
boot_failure | booting | 9 |
overload | shedding | 6 |
transport | transport | 5 |
lifecycle | lifecycle | 13 |
revoked | revoked | 1 |
capacity | at_capacity | 2 |
rate_limited | throttled | 3 |
Error codes
| Code | Category | Retryable | Terminal | Player title | Player message | Description |
|---|---|---|---|---|---|---|
runtime_auth_invalid | auth | no | yes | Sign in to play | We couldn't verify your game session. Refresh the page or sign in again to continue. | Runtime player credential MAC/signature invalid, malformed, or an impostor token: genuine auth failure. Terminal. |
runtime_credential_expired | auth | yes | no | Reconnecting | Refreshing your game session. | Runtime player credential expired (expiresAtMs <= now). Sliding re-mint over the live socket (03 section 2); degraded, not terminal. |
runtime_connection_unverified | auth | yes | yes | Sign in to play | Refresh the page or sign in again to continue. | Legacy unverified-connection catch-all. Migrate throw sites to runtime_auth_invalid / runtime_credential_expired / runtime_release_stale_link / runtime_session_ended. |
game_access_denied | auth | no | yes | You don't have access | Ask the creator for access to this game. | Principal is not authorized for this game/room (private room, ban, missing grant, wrong player session). |
runtime_schema_violation | schema_violation | no | yes | Game couldn't load | The game sent an update this app couldn't read. Refresh and try again. | Malformed client frame: ZodError from RuntimeClientEnvelopeSchema.parse or an otherwise unparseable envelope. |
runtime_identity_mismatch | schema_violation | no | yes | Game couldn't load | Refresh and try again. | Runtime envelope identity mismatch: a supplied room, player session or deployment coordinate differs from the authenticated connection. |
game_connection_payload_too_large | schema_violation | no | yes | Game couldn't load | The game sent too much data. Refresh and try again. | Inbound envelope exceeds RUNTIME_GATEWAY_POLICY.maxEnvelopeBytes. |
runtime_protocol_unsupported | release_mismatch | no | yes | Update to keep playing | This game connection is out of date. Refresh and try again. | Client protocol version does not equal server RUNTIME_PROTOCOL_VERSION. |
runtime_engine_contract | release_mismatch | no | yes | Game version not supported | This game version is not supported yet. Refresh and try again. | Engine-contract mismatch. Code is a prefix family: runtime_engine_contract_<suffix>. |
runtime_admission_missing | release_mismatch | no | yes | Game unavailable | This game has no published release for this environment yet. Try again soon. | Versioned admission: no versioned release for the requested environment (VersioningV1Error). |
runtime_admission_superseded | release_mismatch | yes | yes | Update to keep playing | This game was updated to a newer version. Refresh and try again. | Versioned admission: pinned deployment was superseded by a newer release. A fresh attempt admits to the new release. |
runtime_target_unhealthy | release_mismatch | yes | no | Getting the game ready | The game runtime is not ready yet. Try again in a moment. | Versioned admission: target deployment is not healthy yet. |
runtime_admission_incoherent | release_mismatch | no | yes | Game needs attention | This game's release needs attention before it can start. Try again soon. | Versioned admission: the release resolved to an incoherent state and cannot start. |
admission_identity_required | auth | yes | yes | Sign in to play | We couldn't confirm your session. Sign in to continue. | Admission policy: the principal carried no account identity; the player shell retries once through guest start before surfacing this. |
admission_account_required | auth | no | yes | Account required | This game requires an account. Sign in or create one to play. | Admission policy: the deployment denies guest accounts and the participant is a guest account. |
admission_banned | auth | no | yes | You can't join this game | Your account can't join this game right now. | Admission: an active ban (deployment, game or platform scope) matched the participant's account, device or network coordinates. |
admission_account_too_new | auth | no | yes | Account too new | This game is open to established accounts. Try again once your account is a little older. | Admission policy: the account is younger than the deployment's minimum account age. |
runtime_room_policy_invalid | release_mismatch | no | yes | Game unavailable | This game is not available with those settings. Refresh and try again. | Room-creation request violated a non-capacity policy bound (tick/snapshot rate, snapshot > tick, unsupported region). |
runtime_protocol_epoch_unservable | release_mismatch | no | yes | Game unavailable | This game is not available right now. Try again in a moment. | Room's immutable authority protocol epoch has no corridor for the requested operation. Operator/deployment invariant violation; no retry advances an immutable epoch. |
runtime_release_stale_link | release_mismatch | no | yes | Game link is out of date | This game link points to an older version. Refresh and try again. | Credential game/room/deployment scope mismatch (verifyRuntimePlayerCredential game/room/deployment checks). Stale link, not auth fraud. |
game_not_found | release_mismatch | no | yes | Game not found | Check the link and try again. | Requested game or deployment does not resolve (deployment not found / resource not found). |
runtime_snapshot_timeout | boot_failure | yes | no | Game world is taking too long | The server accepted you, but the first playable world update has not arrived. | First full snapshot did not arrive within the boot deadline. Terminal only once the transport is disconnected (applied FE-side). |
runtime_delta_gap | boot_failure | yes | no | Game world is taking too long | The server accepted you, but the first playable world update has not arrived. | A delta arrived with a sequence gap before the first playable frame. Terminal only once the transport is disconnected (applied FE-side). |
runtime_delta_without_snapshot | boot_failure | yes | no | Game world is taking too long | The server accepted you, but the first playable world update has not arrived. | A delta arrived before any baseline snapshot. Terminal only once the transport is disconnected (applied FE-side). |
runtime_resync_failed | boot_failure | no | yes | Game couldn't load | Refresh and try again. | Warm-resume resync failed to weld to the replay window. |
runtime_play_session_timeout | boot_failure | no | yes | Game couldn't load | Refresh and try again. | Play-session boot exceeded its deadline. |
runtime_play_session_failed | boot_failure | no | yes | Game couldn't load | Refresh and try again. | Play-session boot failed terminally. |
rejected_terminal_policy | boot_failure | no | yes | Game couldn't load | Refresh and try again. | Admission rejected under a terminal policy: no retry can satisfy it. |
game_admission_blocked | boot_failure | no | yes | Game needs an update | This game needs an update before it can start. Try again soon. | Content admission gate (e.g. a ProjectAsset lineage receipt / backfill) blocks any session start until the game's stored content is updated. |
game_content_not_publishable | boot_failure | no | yes | Game couldn't load | One of this game's assets isn't stored durably yet. Re-import the asset or finish its upload, then try again. | Immutable publication refused the content-version mint: a runtime asset variant lacks immutable byte identity (versionless s3 reference, null object version, or identity disagreement). The server log names the asset and variant. |
runtime_compute_unavailable | overload | yes | no | Game is busy | The game is getting ready. Please try again in a moment. | Canonical compute admission, worker failure or deadline prevented snapshot preparation. Retry the same idempotent admission; never run the snapshot on the serving loop. |
runtime_handshake_budget | overload | yes | no | Too many attempts | The game is busy. Wait a moment and try again. | Handshake admission budget exceeded (WS 1013). Client honors retryAfterMs under the reconnect jitter. |
runtime_command_rate_limited | overload | yes | no | Slow down | You're sending input too fast. It will catch up in a moment. | Per-connection command pressure budget exceeded (connection-scope reject). |
runtime_room_pressure_shedding | overload | yes | no | Game is busy | The game is under heavy load and may feel choppy for a moment. | Runtime ingress or room pressure exceeded: reject before admission, resumably close an overloaded raw socket (WS 1013), or shed low-priority room replication / use thin snapshots. |
runtime_shard_shedding | overload | yes | no | Game is busy | The game is under heavy load and may feel choppy for a moment. | Shard-level overload ladder active (thin snapshots / reduced rate / paused non-essential lanes / joins refused). Shard-scope shed; per-room order composes underneath. |
game_full | capacity | yes | yes | Game is full | Try again in a little while. | Room fan-out or per-room player cap exhausted. Overflow is retryable (queues in P2), so terminal-but-retryable. |
runtime_shard_over_budget | capacity | yes | yes | Game is full | Try again in a little while. | Placement refused: per-instance or per-shard room/player budget exhausted (capacity floor, D14). A fresh attempt admits once a room closes and frees budget. |
game_connection_rate_limited | rate_limited | yes | no | Too many attempts | Wait a moment and try again. | Connection-attempt rate limit for this principal/IP. |
game_connection_failed | transport | yes | yes | Game couldn't load | The game connection failed. Try again. | Generic transport failure. Post-taxonomy this is rare: an UNTYPED error at the boundary maps to runtime_internal, not here. |
runtime_liveness_reaped | transport | yes | no | Reconnecting | The game connection dropped. Reconnecting now. | Liveness ping/pong reaped a half-open socket (WS 1008 gateway_liveness_timeout). Resumable. |
runtime_transport_dropped | transport | yes | no | Reconnecting | The game connection dropped. Reconnecting now. | Abnormal (1006) transport drop. Resumable via warm resume. |
runtime_reconnect_exhausted | transport | no | yes | Connection lost | We couldn't reconnect to the game. Refresh and try again. | Client reconnect attempt ceiling reached (bounded + full jitter, 03 section 4). |
runtime_internal | transport | no | yes | Game couldn't load | Something went wrong. Refresh and try again. | An UNTYPED error reached the boundary: a missing coded throw. Logs loudly (logRuntimeGatewayLaunderedFallback); it signals a bug, not an accepted fallback path. |
runtime_authority_recovering | lifecycle | yes | no | Reconnecting | The game connection is being restored. | Owner-lease/routing transient (isRuntimeRecoverableAuthorityError). |
runtime_authoritative_frame_conflict | lifecycle | yes | no | Reconnecting | The game connection is catching up. | Authority persistence conflict (Postgres 23505 unique violation). Reconciles forward. |
runtime_session_ended | lifecycle | no | yes | Game session ended | This game session has ended. Refresh to start a new one. | Player session not found for credential (service.ts openGatewayConnection). Session lifecycle ended, not an auth failure. |
runtime_superseded | lifecycle | no | yes | Playing somewhere else | You started playing in another tab or on another device. You can close this tab. | Occupancy supersede (WS 4001, reason occupancy_superseded). A newer admission of the same Account departed this seat; the process-local registry or the backplane closed the socket. FE renders 'playing elsewhere' and never reconnects; never an auth failure (docs/cycles/occupancy-law/SPEC.md S13). |
game_open_in_progress | lifecycle | yes | yes | Game is already open | Close the other tab or refresh this one to continue. | Still-opening idempotency race (transient duplicate join). Retryable; a durable idempotency mismatch is a different, non-retryable outcome. |
reconnect_or_exit | lifecycle | yes | no | Reconnecting | The game connection is being restored. | Lifecycle-continuable drain notice: a still-rendering game keeps drawing and rolls forward to the live deployment (INV3 active-never-fails). |
game_server_starting | lifecycle | yes | no | Getting the game ready | The game server is getting ready. Try again in a moment. | Room owner lease is not active yet (room warming up). |
game_server_restarting | lifecycle | yes | no | Server is restarting | Try again in a moment. | Room draining / sleeping / recovering / restarting. |
game_updating | lifecycle | yes | no | Game is updating | Try again in a moment. | Deployment superseded by a redeploy in flight; rolls forward once the new deployment admits. |
game_unavailable | lifecycle | yes | no | Game unavailable | Check the link or try again in a moment. | Game has no active deployment / no published world right now. |
runtime_session_revoked | revoked | no | yes | You've been signed out | Your access to this game was ended. Sign in again to continue. | Explicit revocation, fence loss, kick, ban, or logout-everywhere (03 section 3). The only non-supersede path to instant termination. |
occupancy_conflict | lifecycle | yes | no | Moving your session | Your session is being moved. One moment. | An occupancy invariant refused a write (a partial unique index on Postgres, the mirrored predicate on the memory twin): a second live seat for the Account, a second live seat for a Profile in one room, or a duplicate live ticket, party membership, or match participant. Retry once; the retry observes the committed state (docs/cycles/occupancy-law/SPEC.md S4.1, I-01, I-02, I-15). |
occupancy_client_mismatch | lifecycle | no | no | Session belongs to another window | This seat is being driven from another window. Start playing here to take it over. | A socket attach for a live seat came from a client instance that is not the seat's client instance. The client admits instead, which supersedes (docs/cycles/occupancy-law/SPEC.md S4.2, I-12). |
admission_rate_limited | rate_limited | yes | no | Slow down | Too many attempts to join. Try again in a moment. | The admission budget keyed by Account or by network denied a seat-minting request; the response carries the retry delay (docs/cycles/occupancy-law/SPEC.md S10, I-18). |
room_creation_rate_limited | rate_limited | yes | no | Slow down | Too many attempts to join. Try again in a moment. | The room-creation budget keyed by Account or by game denied a request that would have created a room; the response carries the retry delay (docs/cycles/occupancy-law/SPEC.md S10, I-18). |
placement_not_client_owned | schema_violation | no | yes | Update to keep playing | This game link is out of date. Refresh and try again. | A public play request carried a client placement field (room key, shard, capacity, rates, region, join policy). Public placement derives from the deployment; a client defect, never a player action (docs/cycles/occupancy-law/SPEC.md S9, I-17). |
identity_field_not_allowed | schema_violation | no | yes | Update to keep playing | This game link is out of date. Refresh and try again. | A human or guest principal supplied an identity field (player id) on a ticket, party, or admission request. Identity derives from the principal inside the occupancy authority; a client defect (docs/cycles/occupancy-law/SPEC.md S8, I-14). |
runtime_request_conflict | schema_violation | no | yes | Game couldn't load | Refresh and try again. | A mutation reused an idempotency key with a different request body (IdempotencyReplayConflictError). A durable mismatch, not the still-opening join race (game_open_in_progress): repeating the same request can never succeed, so it is never retryable. |
runtime_request_invalid | schema_violation | no | yes | Game couldn't load | Refresh and try again. | A mutation arrived without its required x-idempotency-key header (runtimeRequestInvalidError). A client contract defect, not a transient state: the same request can never succeed until the client sends the header, so it is never retryable. |
observer_bound_exceeded | overload | yes | no | Too many views open | You are already watching this room from too many places. Close one and try again. | An Account asked to observe one room past the observer bound, refused inside createObserverSession under the room lock on both twins. The bound is a policy value, not a literal (docs/cycles/occupancy-law/SPEC.md S8, I-16). |
occupancy_connection_not_current | lifecycle | no | no | Connection replaced | Another connection is driving this session now. | The occupancy fence refused a packet or a close from a socket that is not the seat's current connection (a superseded or replaced socket). Compared against the seat row, never a message; the stale socket closes on its own typed close (docs/cycles/occupancy-law/SPEC.md S5, I-08, I-09). |
Code details
The engine-contract family is matched by code prefix rather than an exact key; its canonical entry is keyed by the bare stem.
runtime_auth_invalid
| Field | Value |
|---|---|
| Category | auth |
| Disposition | denied |
| Retryable | no |
| Terminal | yes |
| Player title | Sign in to play |
| Player message | We couldn't verify your game session. Refresh the page or sign in again to continue. |
| Operator description | Runtime player credential MAC/signature invalid, malformed, or an impostor token: genuine auth failure. Terminal. |
runtime_credential_expired
| Field | Value |
|---|---|
| Category | auth |
| Disposition | denied |
| Retryable | yes |
| Terminal | no |
| Player title | Reconnecting |
| Player message | Refreshing your game session. |
| Operator description | Runtime player credential expired (expiresAtMs <= now). Sliding re-mint over the live socket (03 section 2); degraded, not terminal. |
runtime_connection_unverified
| Field | Value |
|---|---|
| Category | auth |
| Disposition | denied |
| Retryable | yes |
| Terminal | yes |
| Player title | Sign in to play |
| Player message | Refresh the page or sign in again to continue. |
| Operator description | Legacy unverified-connection catch-all. Migrate throw sites to runtime_auth_invalid / runtime_credential_expired / runtime_release_stale_link / runtime_session_ended. |
game_access_denied
| Field | Value |
|---|---|
| Category | auth |
| Disposition | denied |
| Retryable | no |
| Terminal | yes |
| Player title | You don't have access |
| Player message | Ask the creator for access to this game. |
| Operator description | Principal is not authorized for this game/room (private room, ban, missing grant, wrong player session). |
runtime_schema_violation
| Field | Value |
|---|---|
| Category | schema_violation |
| Disposition | malformed |
| Retryable | no |
| Terminal | yes |
| Player title | Game couldn't load |
| Player message | The game sent an update this app couldn't read. Refresh and try again. |
| Operator description | Malformed client frame: ZodError from RuntimeClientEnvelopeSchema.parse or an otherwise unparseable envelope. |
runtime_identity_mismatch
| Field | Value |
|---|---|
| Category | schema_violation |
| Disposition | malformed |
| Retryable | no |
| Terminal | yes |
| Player title | Game couldn't load |
| Player message | Refresh and try again. |
| Operator description | Runtime envelope identity mismatch: a supplied room, player session or deployment coordinate differs from the authenticated connection. |
game_connection_payload_too_large
| Field | Value |
|---|---|
| Category | schema_violation |
| Disposition | malformed |
| Retryable | no |
| Terminal | yes |
| Player title | Game couldn't load |
| Player message | The game sent too much data. Refresh and try again. |
| Operator description | Inbound envelope exceeds RUNTIME_GATEWAY_POLICY.maxEnvelopeBytes. |
runtime_protocol_unsupported
| Field | Value |
|---|---|
| Category | release_mismatch |
| Disposition | stale_release |
| Retryable | no |
| Terminal | yes |
| Player title | Update to keep playing |
| Player message | This game connection is out of date. Refresh and try again. |
| Operator description | Client protocol version does not equal server RUNTIME_PROTOCOL_VERSION. |
runtime_engine_contract
| Field | Value |
|---|---|
| Category | release_mismatch |
| Code family | prefix runtime_engine_contract_ |
| Disposition | stale_release |
| Retryable | no |
| Terminal | yes |
| Player title | Game version not supported |
| Player message | This game version is not supported yet. Refresh and try again. |
| Operator description | Engine-contract mismatch. Code is a prefix family: runtime_engine_contract_<suffix>. |
runtime_admission_missing
| Field | Value |
|---|---|
| Category | release_mismatch |
| Disposition | stale_release |
| Retryable | no |
| Terminal | yes |
| Player title | Game unavailable |
| Player message | This game has no published release for this environment yet. Try again soon. |
| Operator description | Versioned admission: no versioned release for the requested environment (VersioningV1Error). |
runtime_admission_superseded
| Field | Value |
|---|---|
| Category | release_mismatch |
| Disposition | stale_release |
| Retryable | yes |
| Terminal | yes |
| Player title | Update to keep playing |
| Player message | This game was updated to a newer version. Refresh and try again. |
| Operator description | Versioned admission: pinned deployment was superseded by a newer release. A fresh attempt admits to the new release. |
runtime_target_unhealthy
| Field | Value |
|---|---|
| Category | release_mismatch |
| Disposition | stale_release |
| Retryable | yes |
| Terminal | no |
| Player title | Getting the game ready |
| Player message | The game runtime is not ready yet. Try again in a moment. |
| Operator description | Versioned admission: target deployment is not healthy yet. |
runtime_admission_incoherent
| Field | Value |
|---|---|
| Category | release_mismatch |
| Disposition | stale_release |
| Retryable | no |
| Terminal | yes |
| Player title | Game needs attention |
| Player message | This game's release needs attention before it can start. Try again soon. |
| Operator description | Versioned admission: the release resolved to an incoherent state and cannot start. |
admission_identity_required
| Field | Value |
|---|---|
| Category | auth |
| Disposition | denied |
| Retryable | yes |
| Terminal | yes |
| Player title | Sign in to play |
| Player message | We couldn't confirm your session. Sign in to continue. |
| Operator description | Admission policy: the principal carried no account identity; the player shell retries once through guest start before surfacing this. |
admission_account_required
| Field | Value |
|---|---|
| Category | auth |
| Disposition | denied |
| Retryable | no |
| Terminal | yes |
| Player title | Account required |
| Player message | This game requires an account. Sign in or create one to play. |
| Operator description | Admission policy: the deployment denies guest accounts and the participant is a guest account. |
admission_banned
| Field | Value |
|---|---|
| Category | auth |
| Disposition | denied |
| Retryable | no |
| Terminal | yes |
| Player title | You can't join this game |
| Player message | Your account can't join this game right now. |
| Operator description | Admission: an active ban (deployment, game or platform scope) matched the participant's account, device or network coordinates. |
admission_account_too_new
| Field | Value |
|---|---|
| Category | auth |
| Disposition | denied |
| Retryable | no |
| Terminal | yes |
| Player title | Account too new |
| Player message | This game is open to established accounts. Try again once your account is a little older. |
| Operator description | Admission policy: the account is younger than the deployment's minimum account age. |
runtime_room_policy_invalid
| Field | Value |
|---|---|
| Category | release_mismatch |
| Disposition | stale_release |
| Retryable | no |
| Terminal | yes |
| Player title | Game unavailable |
| Player message | This game is not available with those settings. Refresh and try again. |
| Operator description | Room-creation request violated a non-capacity policy bound (tick/snapshot rate, snapshot > tick, unsupported region). |
runtime_protocol_epoch_unservable
| Field | Value |
|---|---|
| Category | release_mismatch |
| Disposition | stale_release |
| Retryable | no |
| Terminal | yes |
| Player title | Game unavailable |
| Player message | This game is not available right now. Try again in a moment. |
| Operator description | Room's immutable authority protocol epoch has no corridor for the requested operation. Operator/deployment invariant violation; no retry advances an immutable epoch. |
runtime_release_stale_link
| Field | Value |
|---|---|
| Category | release_mismatch |
| Disposition | stale_release |
| Retryable | no |
| Terminal | yes |
| Player title | Game link is out of date |
| Player message | This game link points to an older version. Refresh and try again. |
| Operator description | Credential game/room/deployment scope mismatch (verifyRuntimePlayerCredential game/room/deployment checks). Stale link, not auth fraud. |
game_not_found
| Field | Value |
|---|---|
| Category | release_mismatch |
| Disposition | stale_release |
| Retryable | no |
| Terminal | yes |
| Player title | Game not found |
| Player message | Check the link and try again. |
| Operator description | Requested game or deployment does not resolve (deployment not found / resource not found). |
runtime_snapshot_timeout
| Field | Value |
|---|---|
| Category | boot_failure |
| Disposition | booting |
| Retryable | yes |
| Terminal | no |
| Player title | Game world is taking too long |
| Player message | The server accepted you, but the first playable world update has not arrived. |
| Operator description | First full snapshot did not arrive within the boot deadline. Terminal only once the transport is disconnected (applied FE-side). |
runtime_delta_gap
| Field | Value |
|---|---|
| Category | boot_failure |
| Disposition | booting |
| Retryable | yes |
| Terminal | no |
| Player title | Game world is taking too long |
| Player message | The server accepted you, but the first playable world update has not arrived. |
| Operator description | A delta arrived with a sequence gap before the first playable frame. Terminal only once the transport is disconnected (applied FE-side). |
runtime_delta_without_snapshot
| Field | Value |
|---|---|
| Category | boot_failure |
| Disposition | booting |
| Retryable | yes |
| Terminal | no |
| Player title | Game world is taking too long |
| Player message | The server accepted you, but the first playable world update has not arrived. |
| Operator description | A delta arrived before any baseline snapshot. Terminal only once the transport is disconnected (applied FE-side). |
runtime_resync_failed
| Field | Value |
|---|---|
| Category | boot_failure |
| Disposition | booting |
| Retryable | no |
| Terminal | yes |
| Player title | Game couldn't load |
| Player message | Refresh and try again. |
| Operator description | Warm-resume resync failed to weld to the replay window. |
runtime_play_session_timeout
| Field | Value |
|---|---|
| Category | boot_failure |
| Disposition | booting |
| Retryable | no |
| Terminal | yes |
| Player title | Game couldn't load |
| Player message | Refresh and try again. |
| Operator description | Play-session boot exceeded its deadline. |
runtime_play_session_failed
| Field | Value |
|---|---|
| Category | boot_failure |
| Disposition | booting |
| Retryable | no |
| Terminal | yes |
| Player title | Game couldn't load |
| Player message | Refresh and try again. |
| Operator description | Play-session boot failed terminally. |
rejected_terminal_policy
| Field | Value |
|---|---|
| Category | boot_failure |
| Disposition | booting |
| Retryable | no |
| Terminal | yes |
| Player title | Game couldn't load |
| Player message | Refresh and try again. |
| Operator description | Admission rejected under a terminal policy: no retry can satisfy it. |
game_admission_blocked
| Field | Value |
|---|---|
| Category | boot_failure |
| Disposition | booting |
| Retryable | no |
| Terminal | yes |
| Player title | Game needs an update |
| Player message | This game needs an update before it can start. Try again soon. |
| Operator description | Content admission gate (e.g. a ProjectAsset lineage receipt / backfill) blocks any session start until the game's stored content is updated. |
game_content_not_publishable
| Field | Value |
|---|---|
| Category | boot_failure |
| Disposition | booting |
| Retryable | no |
| Terminal | yes |
| Player title | Game couldn't load |
| Player message | One of this game's assets isn't stored durably yet. Re-import the asset or finish its upload, then try again. |
| Operator description | Immutable publication refused the content-version mint: a runtime asset variant lacks immutable byte identity (versionless s3 reference, null object version, or identity disagreement). The server log names the asset and variant. |
runtime_compute_unavailable
| Field | Value |
|---|---|
| Category | overload |
| Disposition | shedding |
| Retryable | yes |
| Terminal | no |
| Player title | Game is busy |
| Player message | The game is getting ready. Please try again in a moment. |
| Operator description | Canonical compute admission, worker failure or deadline prevented snapshot preparation. Retry the same idempotent admission; never run the snapshot on the serving loop. |
runtime_handshake_budget
| Field | Value |
|---|---|
| Category | overload |
| Disposition | shedding |
| Retryable | yes |
| Terminal | no |
| Player title | Too many attempts |
| Player message | The game is busy. Wait a moment and try again. |
| Operator description | Handshake admission budget exceeded (WS 1013). Client honors retryAfterMs under the reconnect jitter. |
runtime_command_rate_limited
| Field | Value |
|---|---|
| Category | overload |
| Disposition | shedding |
| Retryable | yes |
| Terminal | no |
| Player title | Slow down |
| Player message | You're sending input too fast. It will catch up in a moment. |
| Operator description | Per-connection command pressure budget exceeded (connection-scope reject). |
runtime_room_pressure_shedding
| Field | Value |
|---|---|
| Category | overload |
| Disposition | shedding |
| Retryable | yes |
| Terminal | no |
| Player title | Game is busy |
| Player message | The game is under heavy load and may feel choppy for a moment. |
| Operator description | Runtime ingress or room pressure exceeded: reject before admission, resumably close an overloaded raw socket (WS 1013), or shed low-priority room replication / use thin snapshots. |
runtime_shard_shedding
| Field | Value |
|---|---|
| Category | overload |
| Disposition | shedding |
| Retryable | yes |
| Terminal | no |
| Player title | Game is busy |
| Player message | The game is under heavy load and may feel choppy for a moment. |
| Operator description | Shard-level overload ladder active (thin snapshots / reduced rate / paused non-essential lanes / joins refused). Shard-scope shed; per-room order composes underneath. |
game_full
| Field | Value |
|---|---|
| Category | capacity |
| Disposition | at_capacity |
| Retryable | yes |
| Terminal | yes |
| Player title | Game is full |
| Player message | Try again in a little while. |
| Operator description | Room fan-out or per-room player cap exhausted. Overflow is retryable (queues in P2), so terminal-but-retryable. |
runtime_shard_over_budget
| Field | Value |
|---|---|
| Category | capacity |
| Disposition | at_capacity |
| Retryable | yes |
| Terminal | yes |
| Player title | Game is full |
| Player message | Try again in a little while. |
| Operator description | Placement refused: per-instance or per-shard room/player budget exhausted (capacity floor, D14). A fresh attempt admits once a room closes and frees budget. |
game_connection_rate_limited
| Field | Value |
|---|---|
| Category | rate_limited |
| Disposition | throttled |
| Retryable | yes |
| Terminal | no |
| Player title | Too many attempts |
| Player message | Wait a moment and try again. |
| Operator description | Connection-attempt rate limit for this principal/IP. |
game_connection_failed
| Field | Value |
|---|---|
| Category | transport |
| Disposition | transport |
| Retryable | yes |
| Terminal | yes |
| Player title | Game couldn't load |
| Player message | The game connection failed. Try again. |
| Operator description | Generic transport failure. Post-taxonomy this is rare: an UNTYPED error at the boundary maps to runtime_internal, not here. |
runtime_liveness_reaped
| Field | Value |
|---|---|
| Category | transport |
| Disposition | transport |
| Retryable | yes |
| Terminal | no |
| Player title | Reconnecting |
| Player message | The game connection dropped. Reconnecting now. |
| Operator description | Liveness ping/pong reaped a half-open socket (WS 1008 gateway_liveness_timeout). Resumable. |
runtime_transport_dropped
| Field | Value |
|---|---|
| Category | transport |
| Disposition | transport |
| Retryable | yes |
| Terminal | no |
| Player title | Reconnecting |
| Player message | The game connection dropped. Reconnecting now. |
| Operator description | Abnormal (1006) transport drop. Resumable via warm resume. |
runtime_reconnect_exhausted
| Field | Value |
|---|---|
| Category | transport |
| Disposition | transport |
| Retryable | no |
| Terminal | yes |
| Player title | Connection lost |
| Player message | We couldn't reconnect to the game. Refresh and try again. |
| Operator description | Client reconnect attempt ceiling reached (bounded + full jitter, 03 section 4). |
runtime_internal
| Field | Value |
|---|---|
| Category | transport |
| Disposition | transport |
| Retryable | no |
| Terminal | yes |
| Player title | Game couldn't load |
| Player message | Something went wrong. Refresh and try again. |
| Operator description | An UNTYPED error reached the boundary: a missing coded throw. Logs loudly (logRuntimeGatewayLaunderedFallback); it signals a bug, not an accepted fallback path. |
runtime_authority_recovering
| Field | Value |
|---|---|
| Category | lifecycle |
| Disposition | lifecycle |
| Retryable | yes |
| Terminal | no |
| Player title | Reconnecting |
| Player message | The game connection is being restored. |
| Operator description | Owner-lease/routing transient (isRuntimeRecoverableAuthorityError). |
runtime_authoritative_frame_conflict
| Field | Value |
|---|---|
| Category | lifecycle |
| Disposition | lifecycle |
| Retryable | yes |
| Terminal | no |
| Player title | Reconnecting |
| Player message | The game connection is catching up. |
| Operator description | Authority persistence conflict (Postgres 23505 unique violation). Reconciles forward. |
runtime_session_ended
| Field | Value |
|---|---|
| Category | lifecycle |
| Disposition | lifecycle |
| Retryable | no |
| Terminal | yes |
| Player title | Game session ended |
| Player message | This game session has ended. Refresh to start a new one. |
| Operator description | Player session not found for credential (service.ts openGatewayConnection). Session lifecycle ended, not an auth failure. |
runtime_superseded
| Field | Value |
|---|---|
| Category | lifecycle |
| Disposition | lifecycle |
| Retryable | no |
| Terminal | yes |
| Player title | Playing somewhere else |
| Player message | You started playing in another tab or on another device. You can close this tab. |
| Operator description | Occupancy supersede (WS 4001, reason occupancy_superseded). A newer admission of the same Account departed this seat; the process-local registry or the backplane closed the socket. FE renders 'playing elsewhere' and never reconnects; never an auth failure (docs/cycles/occupancy-law/SPEC.md S13). |
game_open_in_progress
| Field | Value |
|---|---|
| Category | lifecycle |
| Disposition | lifecycle |
| Retryable | yes |
| Terminal | yes |
| Player title | Game is already open |
| Player message | Close the other tab or refresh this one to continue. |
| Operator description | Still-opening idempotency race (transient duplicate join). Retryable; a durable idempotency mismatch is a different, non-retryable outcome. |
reconnect_or_exit
| Field | Value |
|---|---|
| Category | lifecycle |
| Disposition | lifecycle |
| Retryable | yes |
| Terminal | no |
| Player title | Reconnecting |
| Player message | The game connection is being restored. |
| Operator description | Lifecycle-continuable drain notice: a still-rendering game keeps drawing and rolls forward to the live deployment (INV3 active-never-fails). |
game_server_starting
| Field | Value |
|---|---|
| Category | lifecycle |
| Disposition | lifecycle |
| Retryable | yes |
| Terminal | no |
| Player title | Getting the game ready |
| Player message | The game server is getting ready. Try again in a moment. |
| Operator description | Room owner lease is not active yet (room warming up). |
game_server_restarting
| Field | Value |
|---|---|
| Category | lifecycle |
| Disposition | lifecycle |
| Retryable | yes |
| Terminal | no |
| Player title | Server is restarting |
| Player message | Try again in a moment. |
| Operator description | Room draining / sleeping / recovering / restarting. |
game_updating
| Field | Value |
|---|---|
| Category | lifecycle |
| Disposition | lifecycle |
| Retryable | yes |
| Terminal | no |
| Player title | Game is updating |
| Player message | Try again in a moment. |
| Operator description | Deployment superseded by a redeploy in flight; rolls forward once the new deployment admits. |
game_unavailable
| Field | Value |
|---|---|
| Category | lifecycle |
| Disposition | lifecycle |
| Retryable | yes |
| Terminal | no |
| Player title | Game unavailable |
| Player message | Check the link or try again in a moment. |
| Operator description | Game has no active deployment / no published world right now. |
runtime_session_revoked
| Field | Value |
|---|---|
| Category | revoked |
| Disposition | revoked |
| Retryable | no |
| Terminal | yes |
| Player title | You've been signed out |
| Player message | Your access to this game was ended. Sign in again to continue. |
| Operator description | Explicit revocation, fence loss, kick, ban, or logout-everywhere (03 section 3). The only non-supersede path to instant termination. |
occupancy_conflict
| Field | Value |
|---|---|
| Category | lifecycle |
| Disposition | lifecycle |
| Retryable | yes |
| Terminal | no |
| Player title | Moving your session |
| Player message | Your session is being moved. One moment. |
| Operator description | An occupancy invariant refused a write (a partial unique index on Postgres, the mirrored predicate on the memory twin): a second live seat for the Account, a second live seat for a Profile in one room, or a duplicate live ticket, party membership, or match participant. Retry once; the retry observes the committed state (docs/cycles/occupancy-law/SPEC.md S4.1, I-01, I-02, I-15). |
occupancy_client_mismatch
| Field | Value |
|---|---|
| Category | lifecycle |
| Disposition | lifecycle |
| Retryable | no |
| Terminal | no |
| Player title | Session belongs to another window |
| Player message | This seat is being driven from another window. Start playing here to take it over. |
| Operator description | A socket attach for a live seat came from a client instance that is not the seat's client instance. The client admits instead, which supersedes (docs/cycles/occupancy-law/SPEC.md S4.2, I-12). |
admission_rate_limited
| Field | Value |
|---|---|
| Category | rate_limited |
| Disposition | throttled |
| Retryable | yes |
| Terminal | no |
| Player title | Slow down |
| Player message | Too many attempts to join. Try again in a moment. |
| Operator description | The admission budget keyed by Account or by network denied a seat-minting request; the response carries the retry delay (docs/cycles/occupancy-law/SPEC.md S10, I-18). |
room_creation_rate_limited
| Field | Value |
|---|---|
| Category | rate_limited |
| Disposition | throttled |
| Retryable | yes |
| Terminal | no |
| Player title | Slow down |
| Player message | Too many attempts to join. Try again in a moment. |
| Operator description | The room-creation budget keyed by Account or by game denied a request that would have created a room; the response carries the retry delay (docs/cycles/occupancy-law/SPEC.md S10, I-18). |
placement_not_client_owned
| Field | Value |
|---|---|
| Category | schema_violation |
| Disposition | malformed |
| Retryable | no |
| Terminal | yes |
| Player title | Update to keep playing |
| Player message | This game link is out of date. Refresh and try again. |
| Operator description | A public play request carried a client placement field (room key, shard, capacity, rates, region, join policy). Public placement derives from the deployment; a client defect, never a player action (docs/cycles/occupancy-law/SPEC.md S9, I-17). |
identity_field_not_allowed
| Field | Value |
|---|---|
| Category | schema_violation |
| Disposition | malformed |
| Retryable | no |
| Terminal | yes |
| Player title | Update to keep playing |
| Player message | This game link is out of date. Refresh and try again. |
| Operator description | A human or guest principal supplied an identity field (player id) on a ticket, party, or admission request. Identity derives from the principal inside the occupancy authority; a client defect (docs/cycles/occupancy-law/SPEC.md S8, I-14). |
runtime_request_conflict
| Field | Value |
|---|---|
| Category | schema_violation |
| Disposition | malformed |
| Retryable | no |
| Terminal | yes |
| Player title | Game couldn't load |
| Player message | Refresh and try again. |
| Operator description | A mutation reused an idempotency key with a different request body (IdempotencyReplayConflictError). A durable mismatch, not the still-opening join race (game_open_in_progress): repeating the same request can never succeed, so it is never retryable. |
runtime_request_invalid
| Field | Value |
|---|---|
| Category | schema_violation |
| Disposition | malformed |
| Retryable | no |
| Terminal | yes |
| Player title | Game couldn't load |
| Player message | Refresh and try again. |
| Operator description | A mutation arrived without its required x-idempotency-key header (runtimeRequestInvalidError). A client contract defect, not a transient state: the same request can never succeed until the client sends the header, so it is never retryable. |
observer_bound_exceeded
| Field | Value |
|---|---|
| Category | overload |
| Disposition | shedding |
| Retryable | yes |
| Terminal | no |
| Player title | Too many views open |
| Player message | You are already watching this room from too many places. Close one and try again. |
| Operator description | An Account asked to observe one room past the observer bound, refused inside createObserverSession under the room lock on both twins. The bound is a policy value, not a literal (docs/cycles/occupancy-law/SPEC.md S8, I-16). |
occupancy_connection_not_current
| Field | Value |
|---|---|
| Category | lifecycle |
| Disposition | lifecycle |
| Retryable | no |
| Terminal | no |
| Player title | Connection replaced |
| Player message | Another connection is driving this session now. |
| Operator description | The occupancy fence refused a packet or a close from a socket that is not the seat's current connection (a superseded or replaced socket). Compared against the seat row, never a message; the stale socket closes on its own typed close (docs/cycles/occupancy-law/SPEC.md S5, I-08, I-09). |