docs: one switch for unstarted events, across both views
F1 described a board-only setting and said in as many words that the checklist "has listed them all along", which is now the opposite of what happens. F2 did not mention the section at all. Both say it once, in the place a reader of either would look. The prefs key space records the rename and why the old value is carried rather than dropped — the next person to move a field will want the precedent, and the reasoning is the half a diff cannot show. Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
This commit is contained in:
co-authored by
Claude Opus 5
parent
2cb4dd214c
commit
0e87d061b6
+17
-9
@@ -218,7 +218,7 @@ Namespaced, versioned, and small. Nothing here ever goes to the server.
|
|||||||
"gacha-tracker:v1:daily" // { [id]: { days: ["2026-08-15", ...], at } }
|
"gacha-tracker:v1:daily" // { [id]: { days: ["2026-08-15", ...], at } }
|
||||||
"gacha-tracker:v1:ignored" // { [eventId]: { at } } — "stop showing me this"
|
"gacha-tracker:v1:ignored" // { [eventId]: { at } } — "stop showing me this"
|
||||||
"gacha-tracker:v1:prefs" // { region, hiddenGames[], knownGames[]?, focusGame, sort, view,
|
"gacha-tracker:v1:prefs" // { region, hiddenGames[], knownGames[]?, focusGame, sort, view,
|
||||||
// timelineDayWidth, timelineGroup, timelineUpcoming,
|
// timelineDayWidth, timelineGroup, showUpcoming,
|
||||||
// timelineSplitUpcoming, detectDaily, showCompleted,
|
// timelineSplitUpcoming, detectDaily, showCompleted,
|
||||||
// showIgnored, theme, regionConfirmed, onboarded }
|
// showIgnored, theme, regionConfirmed, onboarded }
|
||||||
// timelineDayWidth is px per day on the board, stored as the
|
// timelineDayWidth is px per day on the board, stored as the
|
||||||
@@ -228,17 +228,25 @@ Namespaced, versioned, and small. Nothing here ever goes to the server.
|
|||||||
// timelineGroup is "game" (a lane each) or "ending" (every game
|
// timelineGroup is "game" (a lane each) or "ending" (every game
|
||||||
// in one deadline queue). Defaults to "game", so shipping it
|
// in one deadline queue). Defaults to "game", so shipping it
|
||||||
// moved nobody's board; see PRD F1.
|
// moved nobody's board; see PRD F1.
|
||||||
// timelineUpcoming plots events that have not started yet.
|
// showUpcoming shows events that have not started yet, in
|
||||||
// Defaults to false — the board's window is drawn from what it
|
// BOTH views — the board plots them, the checklist keeps its
|
||||||
// plots, so on by default would push every running bar right to
|
// "Not started yet" section. Defaults to false; set from
|
||||||
// make room for things nobody can do yet. Set from settings
|
// settings alongside showCompleted / showIgnored, which is the
|
||||||
// alongside showCompleted / showIgnored, and the only one of
|
// same question. See PRD F1.
|
||||||
// the three scoped to one view. See PRD F1.
|
// It was named timelineUpcoming while it governed the board
|
||||||
|
// alone. `adoptRenamed` in usePrefs.ts carries a stored old
|
||||||
|
// value across on load — nothing is lost by dropping it, since
|
||||||
|
// this is one blob under one key rather than a key space, but
|
||||||
|
// resetting a reader's answer for them is not nothing either.
|
||||||
|
// A stored new name always wins, so it cannot overwrite a
|
||||||
|
// fresher answer with a stale one.
|
||||||
// timelineSplitUpcoming keeps those events in their own block
|
// timelineSplitUpcoming keeps those events in their own block
|
||||||
// under a "Not started yet" heading (true, the default) or puts
|
// under a "Not started yet" heading (true, the default) or puts
|
||||||
// them in one deadline order with the running ones (false).
|
// them in one deadline order with the running ones (false).
|
||||||
// Only read when timelineUpcoming is on, but stored either way
|
// The board only: the checklist splits them into a section of
|
||||||
// so switching that back on restores the answer given. PRD F1.
|
// its own either way. Read only when showUpcoming is on, but
|
||||||
|
// stored regardless, so switching that back on restores the
|
||||||
|
// answer given. PRD F1.
|
||||||
// knownGames is every lane the reader has been offered. Absent
|
// knownGames is every lane the reader has been offered. Absent
|
||||||
// means unrecorded, not "offered nothing" — see PRD F8; a lane
|
// means unrecorded, not "offered nothing" — see PRD F8; a lane
|
||||||
// missing from it is new to them and arrives switched off.
|
// missing from it is new to them and arrives switched off.
|
||||||
|
|||||||
+24
-12
@@ -111,21 +111,25 @@ few pixels apart the board is being asked the one question it exists to answer a
|
|||||||
reader to squint. It also gives a one-day event a bar to read and to tap rather than the 34px
|
reader to squint. It also gives a one-day event a bar to read and to tap rather than the 34px
|
||||||
minimum every short bar collapses to.
|
minimum every short bar collapses to.
|
||||||
|
|
||||||
**What has not started yet is off by default, and the reader can switch it on.** The board answers
|
**What has not started yet is off by default, and the reader can switch it on** — `prefs.showUpcoming`,
|
||||||
"how does the time I am in lay out?", and every lane has a next patch queued behind it — so plotting
|
which governs **both views**: the board plots them, and the checklist keeps its "Not started yet"
|
||||||
all of it unasked stretched the window weeks past today and squeezed the running bars the reader
|
section (F2). One question, asked once, because they are the same events. It defaults to `false`
|
||||||
came for down to nothing. `prefs.timelineUpcoming` defaults to `false`, which is what every existing
|
because this app answers *what expires next*, and a reader with fourteen lanes has a next patch
|
||||||
board already looked like on the day it shipped, since the window is drawn from what is plotted.
|
queued behind every one of them.
|
||||||
Nothing is hidden by that: the checklist's own "Not started yet" section (F2) has listed them all
|
|
||||||
along, and a board with nothing left running says exactly that and names the setting, instead of
|
On the board that is structural as well as editorial: the window is drawn from what is plotted, so
|
||||||
reading as an empty calendar.
|
showing the future stretches the right edge weeks past today and squeezes the running bars the
|
||||||
|
reader came for down to nothing.
|
||||||
|
|
||||||
|
**Held back is never merely absent.** A section that simply is not there is indistinguishable from a
|
||||||
|
quiet fortnight, and this app does not leave a reader to infer what it is not showing them. So the
|
||||||
|
page header states `N live · N upcoming` whatever the setting says, and either view left with
|
||||||
|
nothing to show says so in words and names the setting rather than rendering an empty column.
|
||||||
|
|
||||||
The switch is in settings (F4), with the two other answers to *what am I allowed to look at* —
|
The switch is in settings (F4), with the two other answers to *what am I allowed to look at* —
|
||||||
`showCompleted` and `showIgnored` — and **not** in the board's own header beside the stacking and
|
`showCompleted` and `showIgnored` — and **not** in the board's own header beside the stacking and
|
||||||
scale controls. That is the line those two draw: they reshape what is already on the board, which is
|
scale controls. That is the line those two draw: they reshape what is already on the board, which is
|
||||||
why they are reached for while reading it, and this one decides what is on it at all. It is the only
|
why they are reached for while reading it, and this one decides what is on it at all.
|
||||||
one of the three scoped to a single view, so its row says so rather than reading as a promise about
|
|
||||||
the whole app.
|
|
||||||
|
|
||||||
**Switched on, the board says in words where they begin.** A bar drawn to the right of the "now"
|
**Switched on, the board says in words where they begin.** A bar drawn to the right of the "now"
|
||||||
rule is only *implicitly* in the future, and implicitly is not a standard this product holds itself
|
rule is only *implicitly* in the future, and implicitly is not a standard this product holds itself
|
||||||
@@ -144,7 +148,8 @@ bar to answer the question the reader opened it with. So the line between the tw
|
|||||||
muted ink rather than a hue, since a hue on this board means *whose event is this*. One per lane,
|
muted ink rather than a hue, since a hue on this board means *whose event is this*. One per lane,
|
||||||
because "where does this stop running?" is a different answer for each of them.
|
because "where does this stop running?" is a different answer for each of them.
|
||||||
|
|
||||||
**Two readings of that board, and the reader picks** (`prefs.timelineSplitUpcoming`, default
|
**Two readings of that board, and the reader picks** — the board's alone, since the checklist splits
|
||||||
|
these into a section with a heading of its own either way (`prefs.timelineSplitUpcoming`, default
|
||||||
`true` — the board as it was before the choice existed). Split keeps the unstarted events in their
|
`true` — the board as it was before the choice existed). Split keeps the unstarted events in their
|
||||||
own block under that heading, and answers "what is on now, and what is queued behind it" — the shape
|
own block under that heading, and answers "what is on now, and what is queued behind it" — the shape
|
||||||
of a patch. **Mixed in** drops the block for one deadline order, started or not, and answers "what
|
of a patch. **Mixed in** drops the block for one deadline order, started or not, and answers "what
|
||||||
@@ -167,6 +172,13 @@ A flat list of all *currently running* events sorted ascending by end date, with
|
|||||||
countdown ("ends in 2 days", "ends in 4 hours"). Under 24 hours, the row is emphasized. This is the
|
countdown ("ends in 2 days", "ends in 4 hours"). Under 24 hours, the row is emphasized. This is the
|
||||||
view that justifies the app, and it is one tap from the timeline.
|
view that justifies the app, and it is one tap from the timeline.
|
||||||
|
|
||||||
|
**"Not started yet" is a second section, and it is off by default** (`prefs.showUpcoming`, F1 — the
|
||||||
|
same switch the board reads). Running events are the list's whole claim; what has not opened is
|
||||||
|
context, and on fourteen lanes it is more rows than the thing the reader came for. Split into its
|
||||||
|
own section rather than mixed into the order, because that is what the list *is*: a queue of jobs
|
||||||
|
you can do now, and one you cannot do yet does not belong among them. The board offers the mixed
|
||||||
|
reading instead, where a nearer deadline genuinely is a nearer deadline (F1).
|
||||||
|
|
||||||
The tab reads **Checklist**, which is what a reader with four games is doing with it: working down a
|
The tab reads **Checklist**, which is what a reader with four games is doing with it: working down a
|
||||||
list of jobs with deadlines. Its stored id stays `"soon"` — that value is in `prefs.view` on real
|
list of jobs with deadlines. Its stored id stays `"soon"` — that value is in `prefs.view` on real
|
||||||
devices, and renaming a label must never move a reader to the other view.
|
devices, and renaming a label must never move a reader to the other view.
|
||||||
|
|||||||
Reference in New Issue
Block a user