feat: let the reader mark an event as repeating daily
Dailiness was read off the source's wording alone, which is wrong in both directions: a grind that resets every day but whose page never prints "daily" got no checklist, and a banner whose blurb mentions "daily login rewards" got one nobody could dismiss. The reader's answer now wins. The control sits exactly where the checklist goes — the one place the answer visibly matters — so marking an event and ticking today off are the same gesture in the same place. An override is stored only when it disagrees with detection. Recording agreement would freeze today's guess into the reader's own data, so a later parser improvement could never reach that event. Marked events also join today's dailies at the top of the page, beside the per-game chores: at 23:50 a login campaign and a commission run are the same job, and ticking one should not mean opening a sheet to find its checklist. Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
This commit is contained in:
co-authored by
Claude Opus 5
parent
6177633abc
commit
7f384eb9db
@@ -211,6 +211,7 @@ Namespaced, versioned, and small. Nothing here ever goes to the server.
|
||||
| `status` | `"doing"` \| `"done"` \| absent | Where they are with it |
|
||||
| `effort` | `"quick"` \| `"short"` \| `"long"` \| `"grind"` \| absent | How much work they reckon it is |
|
||||
| `note` | free text | Anything worth remembering |
|
||||
| `daily` | `true` \| `false` \| absent | Whether it repeats daily, overruling detection |
|
||||
|
||||
An entry with none of the three set is deleted rather than kept, so the store stays a set of things
|
||||
the reader actually said something about.
|
||||
@@ -256,6 +257,13 @@ Dailiness is derived from the published event — `type: "login"`, or wording li
|
||||
"check-in", "7-day" in the title or summary — and never from a game's habits or an event's length.
|
||||
It adds no schema field, so nothing about the feed contract or the event ID changes.
|
||||
|
||||
**The reader overrules detection.** `progress.daily` records their answer and wins outright
|
||||
(`resolveDaily`); absent means they have not said, so detection stands. An override that merely
|
||||
agrees with detection is **not stored** (`dailyOverride`) — freezing today's guess into their data
|
||||
would stop a later parser improvement from ever reaching that event. This is the only field in
|
||||
`progress` that changes what the app *shows* rather than recording what the reader did, which is
|
||||
why it lives beside their other notes rather than in the feed.
|
||||
|
||||
### Migration from `completions`
|
||||
|
||||
`completions` used membership to mean "done", which cannot express "started". `progress` replaces it
|
||||
|
||||
Reference in New Issue
Block a user