docs: record per-game switches for chores and built-ins

The data model, PRD F17, README and DESIGN described one global chores
switch and a checkbox per game for built-ins. Adds the spec and plan, and
ticks the TODO item.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Lucas Winther
2026-10-14 02:20:40 +02:00
co-authored by Claude Opus 5.5
parent a39c6a8398
commit 094e67d985
7 changed files with 257 additions and 11 deletions
+20 -7
View File
@@ -221,11 +221,21 @@ Namespaced, versioned, and small. Nothing here ever goes to the server.
// focusGame, sort, view,
// timelineDayWidth, timelineGroup, showUpcoming,
// timelineSplitUpcoming, detectDaily, showChores,
// choresOn?, choresOff?,
// showWeeklyTasks, showMonthlyTasks, showCompleted, showIgnored, theme, regionConfirmed,
// onboarded, routineGames?, routinesAsked? }
// routineGames is the games whose built-in weekly tasks
// the reader turned on; routinesAsked the games already
// asked about. Both absent means none — built-ins are
// onboarded, showRoutines?, routineGames?, routinesOff?,
// routinesAsked? }
// Chores and built-in weekly tasks are each one global
// answer plus the games that differ (src/shared/perGame.ts):
// an on-list wins, then an off-list, then the global answer.
// showChores is the chores' global answer (default true);
// choresOn / choresOff the exceptions. showRoutines is the
// built-ins' — absent means never answered, read as off,
// and while absent the strip may ask about one game.
// routineGames is the games whose built-ins are on (the
// on-list, unchanged from before showRoutines existed),
// routinesOff the off-list, routinesAsked the games already
// asked about. Every list absent means none — built-ins are
// opt-in for every install. PRD F17.
// showWeeklyTasks / showMonthlyTasks say whether tasks of
// that period sit in the strip's row under the dailies.
@@ -529,9 +539,12 @@ removes the task record only.
**Built-in tasks** (`src/shared/routines.ts`) are not stored: they ship in the bundle, each with a
`source` URL and the `asOf` date that page gives, and their ticks and numbers are stored under their
`routine:` id exactly as a reader's task's are. Two prefs govern them: `routineGames` (games whose
built-ins are on) and `routinesAsked` (games already asked), both **absent meaning none** so they
are opt-in for every install. *Make it mine* adds a `mytask:` with `from: <routine id>` and copies
`routine:` id exactly as a reader's task's are. Four prefs govern them: `showRoutines` (the answer
for every game; **absent means never answered**, read as off), `routineGames` and `routinesOff`
(games that differ from it, on and off), and `routinesAsked` (games the strip already asked about).
The lists are **absent meaning none**, so built-ins are opt-in for every install. `routineGames`
predates `showRoutines` and kept its meaning when it became the on-list — nothing was migrated, and
a tab still running an older shell reads it the same way. *Make it mine* adds a `mytask:` with `from: <routine id>` and copies
the routine's day log and amounts to it — additively, so deleting the copy shows the original
with its own numbers again.