1ae3f9720b
fix(store): an explicit source: undefined clears a purchase's tag before validation
Lucas WintherandClaude Opus 5.52026-09-30 16:42:46 +02:00
dfbe584874
fix: keep unassigned purchases visible in budget
Lucas Winther2026-09-30 16:35:44 +02:00
f02c452d6c
fix: nest legacy bills and stamp builds with commit
Lucas Winther2026-09-30 14:35:29 +02:00
85a21c58eb
feat: place purchases and bills in budget hierarchy
Lucas Winther2026-09-30 13:48:49 +02:00
b0e8145d2e
feat: support unassigned purchases and allocation status
Lucas Winther2026-09-30 13:09:07 +02:00
c1446db39f
feat: improve recurring cost setup and folder management
Lucas Winther2026-09-30 01:50:48 +02:00
7a755f6406
fix(validation): review round 1 — close the store's source hole, fix ordering and messages
Lucas Winther2026-09-05 22:58:20 +02:00
77bd049fb9
test(domain): fold coverage for the anchored model, plus a startDate doc fix
Lucas Winther2026-09-05 22:42:35 +02:00
8d8407becf
feat(validation): occurrenceDate is required by calendar, forbidden by anchored
Lucas Winther2026-09-05 22:42:28 +02:00
6d63aafab4
feat(store): migrate to the anchored model, schema 8
Lucas Winther2026-09-05 22:32:12 +02:00
c49224d4f7
fix(domain): review round 1 — name the cost, cover the anchored throw, pin two reachable-but-untested paths
Lucas Winther2026-09-05 01:38:50 +02:00
3649a37cfa
feat(domain): anchored costs have no slots
Lucas Winther2026-09-05 01:22:26 +02:00
f8591fdc57
feat(types): occurrenceDate is optional, stepFrom takes anchoring
Lucas Winther2026-09-05 01:03:57 +02:00
1281362388
fix(recurring): never offer a coming-up row that can't be confirmed coherently
Lucas Winther2026-09-04 09:15:11 +02:00
17f9a44b65
fix(domain): export wouldAdvancePast so a caller can check before confirming
Lucas Winther2026-09-04 09:14:59 +02:00
b276573ffe
feat(recurring): datable cancellation via an "Ends" column
Lucas Winther2026-09-04 08:46:57 +02:00
9fe950bc7d
feat(recurring): offer confirmation on next occurrence beyond the month
Lucas Winther2026-09-04 08:46:45 +02:00
042bc8597d
fix(recurring): reject calendar-impossible startDate, not just wrongly-shaped (C1 residual)
Lucas WintherandClaude Opus 52026-09-04 08:16:03 +02:00
405cf0bf2d
docs+chore: everyNMonths is n-generic too; stop the demo double-charging Rent
Lucas Winther2026-09-04 07:58:09 +02:00
08abe64b55
fix(ui): refuse to confirm an unparsed amount; stop counting pre-fold occurrences as overdue (I5, M9)
Lucas Winther2026-09-04 07:58:03 +02:00
093521b2c8
fix(views): keep a post visible when its only figure is an unconfirmed occurrence (I4)
Lucas Winther2026-09-04 07:57:56 +02:00
5a047f53de
fix(domain): a monthly lastCharge bill paid a few days early no longer throws (I3)
Lucas Winther2026-09-04 07:57:51 +02:00
eb13f98610
fix(ui): normalise startDate on a kind switch, validate the Starts field (C1 UI, C2)
Lucas Winther2026-09-04 07:57:37 +02:00
397bb245d8
fix(import): reject a startDate/kind granularity mismatch, and a non-array recurring field (C1, M7)
Lucas Winther2026-09-04 07:57:30 +02:00
d1ccc65d72
fix(recurring): validate startDate granularity at both write paths (C1)
Lucas Winther2026-09-04 07:57:23 +02:00