Let a reader switch off the chores the app invented

Today's dailies carries two different things: each game's standing chore —
"Commissions, resin", a fixed list nobody publishes — and any event with a
checklist. The first is the app guessing at a routine the reader never asked
for, and it was the only part of that strip with no way out.

So the switch removes exactly that. Events keep their checklists whatever
their source, including ones the reader added themselves and marked daily,
which was the requirement most at risk of being filtered away by a switch
aimed at something else.

Nothing is discarded. The ticks live under `dailies:<game>` and nothing here
reads or writes them, so switching back on restores every logged day and
every streak — the same promise `detectDaily` already makes. Defaulted on,
because everyone has these today and a setting that silently removes
something on upgrade is worse than one nobody notices.

Gating where the chore is built rather than where it is drawn means the
counts follow for free: "N still waiting on you today" is derived from the
items, and a game left with nothing contributes no group at all, so the
strip's own empty guard drops it rather than leaving a heading with no rows.

Named for what it removes. A switch called "dailies" would read as broken
while the strip stayed on screen showing the reader's own events.

Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
This commit is contained in:
Lucas Winther
2026-08-28 05:34:08 +02:00
co-authored by Claude Opus 5
parent f324208457
commit 4277c28e50
7 changed files with 124 additions and 4 deletions
+6 -3
View File
@@ -30,6 +30,7 @@ const PREFS: Prefs = {
showUpcoming: false,
timelineSplitUpcoming: true,
detectDaily: false,
showChores: true,
showCompleted: true,
showIgnored: false,
theme: "dark",
@@ -99,11 +100,13 @@ describe("Controls: what am I allowed to look at", () => {
test("it reads its own preference and not a neighbour's", () => {
// Both neighbours are on and this one is off, so a checkbox bound to the
// wrong key shows up as the wrong count of ticks.
// wrong key shows up as the wrong count of ticks. The chores toggle is a
// third box that is on in both renders — it defaults on — so it raises
// each count by one without changing what the delta proves.
const off = checkboxes(render(PREFS));
const on = checkboxes(render({ ...PREFS, showUpcoming: true }));
expect(off.filter(Boolean)).toHaveLength(1);
expect(on.filter(Boolean)).toHaveLength(2);
expect(off.filter(Boolean)).toHaveLength(2);
expect(on.filter(Boolean)).toHaveLength(3);
});
test("how unstarted events sit on the board is offered only when they are", () => {