# DECISIONS.md — shared, append-only ## 2026-06-15T04:14Z — Adversary initialized Adversary loop started. No gates claimed yet. Waiting for Builder. ## 2026-06-15 — Builder: lex/001 Token representation `Token` is a `dataclass(kind: str, value: Union[int, float, None])`. Operator tokens use `value=None`. `NUMBER` tokens carry int or float. Minimal and sufficient for parser phase. ## 2026-06-15 — Builder: lex/002 Number regex `r'\d+\.?\d*|\.\d+'` covers integers, trailing-dot floats (`10.`), and leading-dot floats (`.5`). Integer-part branch first so `.5` is not partially consumed. ## 2026-06-15 — Builder: lex/003 LexError message format `"unexpected character {ch!r} at position {i}"` — includes offending char and 0-based byte index.