From 88bf001bfffa648df6a25b7a6bacb33198b5634e Mon Sep 17 00:00:00 2001 From: Lucas Winther Date: Wed, 2 Sep 2026 21:37:42 +0200 Subject: [PATCH] docs: record the month view work, the reset, and what is still unverified MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit TODO.md: sub-project 2 marked done, with the three decisions sub-projects 3 and 4 should follow rather than re-decide — meter geometry lives in one pure module, two markups beat one reflowing grid with lying ARIA roles, and a table states its currency once rather than per cell. The year matrix faces the same responsive question with more columns to lose. Also recorded: cssTokens.test.ts matches source *text*, so it flags a token named in a comment as readily as one in a style attribute — which is exactly what it did to the comment explaining it. New in "still needs a human": nobody has confirmed the pre-destructive backup actually lands as an openable file. Both import and reset issue it and only proceed on success, but headless Chrome's download is not observable here. ARCHITECTURE.md: the two whole-dataset writes, replace() behind import and reset() behind Settings, take the same queue and the same write-before-snapshot rule as every mutation. Co-Authored-By: Claude Opus 5 (1M context) --- ARCHITECTURE.md | 7 +++++++ TODO.md | 55 +++++++++++++++++++++++++++++++++++++++++++++---- 2 files changed, 58 insertions(+), 4 deletions(-) diff --git a/ARCHITECTURE.md b/ARCHITECTURE.md index 1dba94d..9c1ae98 100644 --- a/ARCHITECTURE.md +++ b/ARCHITECTURE.md @@ -74,6 +74,13 @@ Three deliberate properties in that chain: - **Cloned.** `useSyncExternalStore` detects change by reference identity; mutating in place makes the UI silently stop re-rendering. +The two whole-dataset writes take the same queue and the same rules: +`store.replace()` behind JSON import, and `store.reset()` behind Settings' +"Reset everything". `reset()` calls the same `createSeedDataset` that `load()` +uses on a first run, so "reset" and "a brand-new browser" cannot drift apart. +Both are preceded in the UI by a JSON backup download that must succeed before +the destructive write is attempted. + ## Money A float, deliberately, with two rules that make it safe: diff --git a/TODO.md b/TODO.md index 9a5873a..abdc56e 100644 --- a/TODO.md +++ b/TODO.md @@ -3,9 +3,9 @@ Work queued for whoever picks this up next, human or agent. Ordered. Each item says enough to act on without re-deriving the reasoning. -**Current state:** merged to `main`. 419 tests passing, `bunx tsc --noEmit` +**Current state:** merged to `main`. 443 tests passing, `bunx tsc --noEmit` clean, `bun run build` succeeds on both the live-fetch and offline paths. -Sections 2 and 4 are DONE. Section 3 (redesign) is 1 of 4 sub-projects in. +Sections 2, 4 and 7 are DONE. Section 3 (redesign) is 2 of 4 sub-projects in. Section 6 (currencies) is DONE. Every screen has now actually been looked at — see section 5. @@ -61,7 +61,7 @@ The reasoning below is kept because it is the reasoning, not a plan. **argument**; the env read lives in a new `src/store/bakedRates.ts`, in the store layer, using the `try/catch` accessor pattern (see CLAUDE.md gotchas). -## 3. Visual redesign — sub-project 1 of 4 DONE +## 3. Visual redesign — sub-projects 1 and 2 of 4 DONE The owner's words: *"right now it looks a bit boring, simple and ugly. We want sleek, modern, and nice to use."* Then, on scoping: both themes with a toggle, @@ -79,10 +79,34 @@ foundation last is how that happened; do not repeat it. | # | Sub-project | State | |---|---|---| | 1 | Design foundation — two-theme tokens, theme toggle, self-hosted Inter + JetBrains Mono, one Section/Stat card, table furniture | DONE (`bb3c661`) | -| 2 | Month view | date-grouped purchases DONE (`a159189`); income/totals block and the carry meter's presentation still open | +| 2 | Month view | DONE. Date-grouped purchases (`a159189`), then the header, the post rows and the carry meter | | 3 | Year, Summary, Post detail | on the new foundation but not rethought. The 12-month matrix only fits by scrolling — decide whether compact number formatting replaces that | | 4 | Dialogs and fast entry | untouched. Native `