feat: add month breakdown and session backups
Continuous Integration / lint-and-test (push) Successful in 17s
Continuous Integration / docker-build-and-push (push) Successful in 35s

Allow recurring costs and confirmations to remain unassigned when created from a purchase without a post. Add browser backup retention and restore controls, with coverage and documentation updates.
This commit is contained in:
Lucas Winther committed 2026-10-01 04:01:49 +02:00
1 parent 019517e6e9
commit 7cccd7a41a
32 files changed
+640 -41

No files matched your search

+4 -14
View File
@@ -9,9 +9,10 @@ each recording the alternatives that were rejected. Rules that outlived their
task moved to `AGENTS.md`.
**Current state:** the anchored model is merged with budget folders and
placement. 870 tests passing across 61 files. `bunx tsc --noEmit` is clean;
`bun run --bun build` succeeds using the committed seed rates when live-fetch
is unavailable. The runtime override bypasses a broken local Bun shim.
placement. The month pie showcase, browser-stored session backups, and
unassigned recurring costs are implemented. 881 tests pass across 64 files;
`bunx tsc --noEmit` is clean, and `SKIP_FX_FETCH=1 bun run build` succeeds
using the committed seed rates.
**Schema is at version 11.** v1 -> v2 made allocation rules a dated series;
v2 -> v3 moved currencies into the dataset; v3 -> v4 drops a stored rate-service
@@ -153,17 +154,6 @@ reintroduce the bug the anchored model exists to fix.
The anchored model was merged on 2026-09-30, after main had gained budget
folders, placement and nested bills. Everything below is known and unfinished.
### "+ New recurring cost…" is offered for a purchase with no post
`newCostOptionIsSelectable` in `src/ui/recurringForm.ts` checks only the date.
A bill needs at least one destination post (`requireRecurringSplitDestinations`
in `src/store/actions.ts`), so a purchase left unassigned (no splits) can pick
the option, and Save is then refused with "A bill needs a destination post".
The error surfaces and the dialog stays open, so nothing is lost — but it is a
doomed save the dialog could have prevented. Disable the option, with the
reason, while the draft has no splits, the same way a month-only date disables
the day-granular units.
### A bill created from the purchase dialog has no folder choice
Settings' new-bill form picks a folder; the dialog's "+ New recurring cost…"