Shape-valid but out-of-range months (e.g., month 13 or 00) previously
normalized silently through ordinal arithmetic, resulting in wrong months
downstream. Now throw on invalid month values (< 1 or > 12), with the
offending value in the error message.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Missing rates throw MissingRateError rather than silently treating the
value as base currency.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Distribution computes the remainder part by subtraction so float splits
always sum exactly to the total. Omits money() and addAmounts() from the
brief since no downstream task consumes either and the brief's own tests
don't cover them.
bun init --react=shadcn, with the demo API routes removed since this app
has no backend. Adds project invariants to CLAUDE.md and a smoke test
proving the domain layer imports with no DOM.