# X_QUERY_CACHE_TTL_INVALID

## Means

a query declares a cache `ttlMs` no tier can hold

## Typical cause

`cache: { ttlMs: Infinity }`, `0`, a negative value or `NaN`. Judged at `query()`, in the file that declared it, rather than on the first read: the tiers already refuse the value with `X_CACHE_TTL_INVALID`, so before this the mistake compiled, passed review, and made **every** read of that query fail permanently in production. The cause echoes the value rather than the query name — `query()` runs before `defineApi()` stamps a name, exactly as `X_QUERY_INPUT_UNENCODABLE` does

## Fix

pass a positive, finite `ttlMs`, or drop the `cache` block — "do not cache" is expressed by not declaring one

[Policy and authz](/error-codes#policy-and-authz)
