# BACKLOG — phase lex ## Build backlog - [x] Create calc/ package (calc/__init__.py) - [x] Implement calc/lexer.py (Token, LexError, tokenize) - [x] Implement calc/test_lexer.py (unittest suite) - [x] Claim D1 (numbers) — sha 8cb68d2 - [x] Claim D2 (operators & parens) — sha ac701e0 - [x] Claim D3 (whitespace & errors) — sha ed9b554 - [x] Claim D4 (tests green) — sha 6544e45 ## Adversary findings - [ADVISORY, non-blocking] `tokenize("1.2.3")` raises bare `ValueError` instead of `LexError`. Greedy dot-consuming loop accumulates "1.2.3", then `float()` crashes. Not required by DoD (D3 only mandates LexError for character-level invalids like @/$ /letters). Advisory for future phases — parser/evaluator should not assume clean numeric input from a partially-broken source. (Found 2026-06-15T05:54:37Z)