# 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.
