feat(prefs): remember whether the board plots what hasn't started

The timeline draws its window from what it plots, so a lane's next patch
sitting on the board pushes every running bar right to make room for
things nobody can do yet. That wants to be the reader's answer rather
than ours, and it wants to survive a reload like `view` and
`timelineGroup` do.

Defaults to false, which is what every existing board already looks
like — the rows were there but nothing was asked, so shipping this moves
nobody. A stored pref wins either way.

Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
This commit is contained in:
Lucas Winther
2026-08-19 05:30:37 +02:00
co-authored by Claude Opus 5
parent f38fe49d30
commit 329902d7d8
+14
View File
@@ -86,6 +86,19 @@ export interface Prefs {
* A stored pref wins, so shipping this moves nobody's view.
*/
timelineGroup: TimelineGroup;
/**
* Whether the board plots events that have not started yet.
*
* Off by default, and that is a claim about what the board is *for*: it
* answers "how does the time I am in lay out?", and a reader with fourteen
* lanes has a next patch queued behind every one of them. Plotting those by
* default pushes the right edge of the board weeks past today, shrinks every
* running bar to make room, and fills the space with things nobody can do
* yet. Nothing is lost by leaving them off — the checklist's "Not started
* yet" section has listed them all along, and the toggle in the board's
* header says how many are being held back.
*/
timelineUpcoming: boolean;
/**
* Whether to guess which events repeat daily from what the source printed.
* Off leaves only the ones the reader marked themselves; it never discards a
@@ -124,6 +137,7 @@ function defaults(): Prefs {
view: "soon",
timelineDayWidth: DEFAULT_DAY_WIDTH,
timelineGroup: "game",
timelineUpcoming: false,
detectDaily: false,
showCompleted: true,
showIgnored: false,