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.