# src/core/json — the hand-rolled JSON lexical layer ## Scope The ONE hand-rolled JSON lexical layer used across the pure core: string/number/ bool/null tokens, the scoped object `Writer`, and the bounds-checked `Reader` cursor. Domain grammars — what fields a bank, view-mode, or manifest blob actually has — stay in the consumers; this module owns lexing/emitting only. ## Modules - `json` (`core/json`) — the ONE hand-rolled JSON lexical layer (Q-W1): string/number/bool/null tokens, the scoped object `Writer`, and the bounds-checked `Reader` cursor, byte-compatible with the five pre-extraction per-module writers it replaced (`bank_model` / `bank_book` / `view_mode_model` / `owned_manifest` / `tail_control`). Domain grammars stay in the consumers; this owns lexing/emitting only. ## Gotchas - Byte-compatible with the five pre-extraction per-module writers it replaced (`bank_model` / `bank_book` / `view_mode_model` / `owned_manifest` / `tail_control`) — a change here risks silently breaking round-trip compatibility with ext-state blobs already persisted by projects written before the Q-W1 extraction.