# X_RATE_LIMIT_NOT_SHARED

## Means

the app declared a fleet-wide rate limit and the store keeps its counters per process

## Typical cause

`rateLimit.scope: 'shared'` against `memoryRateLimitStore()`, whose `scope` is `'process'`. `assertRateLimitScope` compares the two inside `httpPipeline`, **before the socket opens** — the outcome it PREVENTS is N replicas each enforcing the full bucket, so a declared `limit: 5` costs 5 × N, silently. Also raised when `enabled: false` sits under `scope: 'shared'`: a fleet-wide limit switched off is a claim with nothing behind it

## Fix

install a shared store — `httpServer({ routes, rateLimitStore: postgresRateLimitStore({ executor }) })` — or drop to `scope: 'process'` and terminate the limit at a shared proxy instead

[HTTP](/error-codes#http)
