# DECISIONS (shared, append-only) _Phase: lex_ ## 2026-06-15 - Token implemented as a dataclass with `kind: str` and `value` (int | float | str | None). - NUMBER tokens store int for integers, float for floats (not string). - EOF token has value None. - LexError is a plain Exception subclass defined in calc/lexer.py.