ADR-056: Retire the gated serving seam¶
Status¶
Accepted (Phase B/B4).
Context¶
BotStateDb::storage_ref carried an env-gated seam that returned the engine’s packed
typed pool state for tracked scalar slots instead of the RPC fallback’s value. It was
built to test the “stale engine state causes CurrencyNotSettled” hypothesis (“path
A”). Mainnet data refuted the premise: V3 hops matched the actual swap output exactly
(the engine state was correct) while only the V4 swap diverged by 1-8 units — a solver
calc rounding divergence, not stale state. The gate was default-off, so the seam was
already run-dead in production.
Decision¶
The serving seam, its env gate, and its config-schema key retire; storage_ref
returns the RPC fallback’s value for every read, exactly as production ran.
The seam’s premise that the anchor’s always-live payload was only pool membership
was incomplete: the always-on divergence observer is a second consumer of the anchor’s
scalar words. So the sim DB depends on a SimAnchorOracle seam rather than the
concrete anchor — the boot-snapshot RouteRegistry answers membership (and offers no
words) for the sidecar, while the engine’s SimAnchorState snapshot still supplies
the observation words. Pool membership migrates to the registry where one exists; the
observation path is preserved unchanged.
Consequences¶
A host without a registry answers membership from its own world-view; the sidecar’s leaked empty anchor (the affordance the deleted seam required) disappears.
The serving env key and its inventory entry are removed.
The recorded refutation stands: tracked scalar engine state matches the RPC at sim time; the V4 divergence is a solver rounding artifact, not state staleness.