Commit Graph
38 Commits
Author SHA1 Message Date
Lucas WintherandClaude Opus 5.5 5d2a9c6c57 docs(spec): version routines shipped
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-22 18:00:11 +02:00
Lucas WintherandClaude Opus 5.5 71b5077846 docs(plan): routines that reset with the game's version
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-22 17:08:46 +02:00
Lucas WintherandClaude Opus 5.5 776847e0af docs(spec): routines that reset with the game's version
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-22 17:06:32 +02:00
Lucas WintherandClaude Opus 5.5 50c6e91b00 feat: the redesigned Event Clock
The new reader app replaces the old UI: Checklist with a rail (focus
pills, Next to expire, today's dailies, pinned routines), Timeline in a
new and a classic look, Routines, Archive and a Settings area, in a
Structured (default) and a Relaxed interface. It follows the approved
Round 6 B and Round 7 mockups, corrected screen by screen with the owner.

Reader data moves to a v2 store (gacha-tracker:v2:*). Existing v1 data
is migrated on first load, a recovery copy is written first, and the v1
keys are never removed, so a rollback finds them unchanged. Redeem codes
for Genshin arrive as their own feed.

Also: live's urgency ramp, editable per theme; completion and
section-complete fireworks; a returning-user tour; the design mockups,
specs, plans, reviews and handoff record.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-18 01:55:16 +02:00
Lucas WintherandClaude Opus 5.5 256ea71cc0 docs: mark sub-projects 2 and 3 shipped; record the reviews' deferred items
CI / Typecheck, test, feed (push) Successful in 15s
CI / Build site (push) Successful in 7s
CI / Container image (push) Successful in 16s
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-16 06:45:30 +02:00
Lucas WintherandClaude Opus 5.5 63724eb783 docs: pass windows shipped for Star Rail, ZZZ and Nikki; Endfield waits
Records why Miliastra was reverted and why Endfield's Protocol Pass has
no source yet, updates AGENTS.md's parser list and marks sub-project 3
in TODO with the follow-ups.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-16 06:29:31 +02:00
Lucas WintherandClaude Opus 5.5 6e7c231160 docs(plan): battle pass windows as feed events
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-16 06:09:44 +02:00
Lucas WintherandClaude Opus 5.5 f6a82c4b1f docs(spec): battle pass windows as feed events (sub-project 3)
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-16 06:09:07 +02:00
Lucas WintherandClaude Opus 5.5 524b6f2598 feat(routines): NTE's Beyond the Rails and Tycoon Incentive Fund
Both fortnightly. Beyond the Rails is ticked once a cycle and rolls on
the Asia server's reset for every reader: on Europe the owner read it
ending Wednesday 21:00 UTC, Asia's Thursday 05:00. The Fund counts fons
against the guide's base cap of 1,000,000; the note says a reader's own
cap is higher and how to set it.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-16 05:40:54 +02:00
Lucas WintherandClaude Opus 5.5 4aa9387683 feat(routines): Wuthering Waves' Tower of Adversity
The Hazard Zone on a 28-day cycle, ticked once, anchored on the reset the
owner read in game (Monday 2026-11-09). The source says "roughly", and
the note says so.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-16 05:39:17 +02:00
Lucas WintherandClaude Opus 5.5 1c574bddc3 feat(routines): ZZZ's Shiyu Defense and Deadly Assault
Both every two weeks on alternating Fridays, ticked once a cycle,
anchored on the owner's in-game readings: Shiyu rolled 2026-10-16,
Deadly Assault rolls a week later.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-16 05:39:14 +02:00
Lucas WintherandClaude Opus 5.5 2c3d9537d9 feat(routines): Star Rail's endgame modes and weekly points
Pure Fiction, Memory of Chaos and Apocalyptic Shadow on their six-week
rotation, two weeks apart, each ticked once a cycle and anchored on the
owner's in-game end dates; and the Divergent Universe / Currency Wars
pool, weekly since 4.2, at the owner's 18,000.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-16 05:38:36 +02:00
Lucas WintherandClaude Opus 5.5 42e3325a1f docs(plan): built-ins on longer cycles
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-16 05:22:09 +02:00
Lucas WintherandClaude Opus 5.5 abf3dc8a55 docs(spec): built-ins on longer cycles (sub-project 2)
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-16 05:19:29 +02:00
Lucas WintherandClaude Opus 5.5 790cdd018f docs: record where built-in routines landed, and the starting points for N-week cycles and pass windows
The spec and plan say what shipped and what is still open. TODO.md gains the
next two sub-projects with the facts already gathered, the design questions to
settle and the sources to check, and a default check-in goal for To Temper
Thyself and Journey Far.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-16 03:10:14 +02:00
Lucas WintherandClaude Opus 5.5 e1e5fc06c3 docs: record built-in routines, per-item tracking and standard pulls
The design spec (entries with the sentence each rests on, what was looked for
and not shipped, and the facts gathered for N-week cycles and dated pass
windows), the plan, PRD F12 and F17, DATA-MODEL's prefs, and TODO.md's open
in-game checks.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-16 03:00:55 +02:00
Lucas WintherandClaude Opus 5.5 7c8fa7febc feat(client): move readers' marks off event ids that stop being published
An event id is a localStorage key, so a fix that changes one orphans every tick, note and ignore filed under it. retiredIds.ts holds an explicit table of old id -> new id, and the progress, daily and ignored stores move entries across on load and on import.

It moves rather than copies: a copy left under the old id would be carried forward again on every load and bring back a mark the reader had cleared. When both ids hold an entry, each store's own import merge decides, except that progress keeps any field only the older row held. The table starts empty; the change that moves ids adds its entries.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-14 17:46:31 +02:00
Lucas WintherandClaude Opus 5.5 0234478db0 docs: record examples to start from, and the pass over the add forms
PRD F13 said the form asked how often after Kind and had no word on
examples; F17 and DESIGN.md had no example row. Adds the spec and plan,
and ticks the TODO item.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-14 03:11:58 +02:00
Lucas WintherandClaude Opus 5.5 094e67d985 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 <[email protected]>
2026-10-14 02:20:40 +02:00
Lucas WintherandClaude Opus 5.5 ab3173adf0 fix(refresh): don't call a stored copy "nothing newer", and point an entry at its feature
CI / Typecheck, test, feed (push) Successful in 15s
CI / Build site (push) Successful in 8s
CI / Container image (push) Failing after 29s
When the network failed behind the service worker, it answered from its
own store. Check for new data then said nothing newer was published when
the server was never reached. The worker now marks that copy, and a fresh
check treats it as unreachable; ordinary loads still use it offline.

The built-in tasks entry linked to a follow-up fix instead of the
feature, and the changelog spec's details now match what shipped.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-13 14:31:04 +02:00
Lucas WintherandClaude Opus 5.5 1fc47e2864 chore(changelog): announce the changelog, and make entries a convention
The changelog's own entry names the commit before this one, since a
commit cannot contain its own hash. AGENTS.md now asks every
reader-visible change for an entry, and every multi-commit feature for a
note, so the record keeps up. PRD F18 and the storage and design records
describe what shipped.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-13 14:27:25 +02:00
Lucas WintherandClaude Opus 5.5 6b21b88f98 docs: plan the in-app changelog
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-13 14:21:43 +02:00
Lucas WintherandClaude Opus 5.5 1c7df637a4 fix(routines): test the copy, name what Yes agrees to, and true up the docs
Make it mine's copying was inline in App and untested; it is now a pure
function with a test, so a change to either store can't make the copy
silently arrive empty. The question's buttons now say what they answer
when heard out of context. The prefs block and the spec now match what
shipped.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-13 14:19:16 +02:00
Lucas WintherandClaude Opus 5.5 bcbd3cc188 docs: record built-in weekly tasks
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-13 14:13:30 +02:00
Lucas WintherandClaude Opus 5.5 641c6a52b9 docs: plan built-in weekly tasks, phase 2b
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-13 14:03:36 +02:00
Lucas WintherandClaude Opus 5.5 114a39867a docs: specify the changelog, and source the first built-in tasks
The changelog has two tiers, each tied to git: short entries shown after
a reload, and release notes summarised from the history and specs.
Ridu Weekly (1,300) and the Weekly Routine (10) are now sourced. The
first guesses of 2,100 and 10 were checked against the owner's links.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-13 14:02:16 +02:00
Lucas WintherandClaude Opus 5.5 54d8424d1e docs: record weekly and monthly tasks
The product, storage and design records now cover F17. They say why the
task and amount stores, unlike the custom-event store, never filter on
load, which is the rule a future store would most likely copy wrongly.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-13 13:50:08 +02:00
Lucas WintherandClaude Opus 5.5 e0aca3b1fb docs: plan weekly and monthly tasks, phase 2a
Task status reuses the goal status shape, so one chip, one count and one
tally serve chores, events and tasks alike.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-13 13:28:28 +02:00
Lucas WintherandClaude Opus 5.5 d5ffad38c5 docs: record check-in goals
The product, storage and design records now say what a goal is, why it
never marks an event done, and why an unreadable goal is kept rather than
stripped. That last rule is the one a future cleanup would most likely
undo by mistake.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-13 13:18:00 +02:00
Lucas WintherandClaude Opus 5.5 5223a74013 docs: plan check-in goals task by task
The goal control lives on the checklist only: "It repeats daily" already
reaches it from a non-daily event, so a second entry point added nothing.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-13 13:03:46 +02:00
Lucas WintherandClaude Opus 5.5 1deb0cb4cb docs: settle check-in goals and specify weekly and monthly tasks
The goals draft stopped at three open questions; the owner answered them,
and widened the scope to weekly and monthly chores with numeric targets.
Both share one period engine, so they are specified together and built
goals-first.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-13 12:57:37 +02:00
Lucas Winther b0ade109a0 docs: specify event check-in goals
CI / Typecheck, test, feed (push) Successful in 13s
CI / Build site (push) Successful in 8s
CI / Container image (push) Successful in 16s
Record weekly and event-wide targets so partial-week requirements can stay visible in Dailies without treating a satisfied week as event completion.
2026-10-03 20:22:48 +02:00
Lucas WintherandClaude Opus 5 dfb00aaa86 Correct a Task 4 expectation that contradicted its own rule
The "ancient anchor" test expected three occurrences and omitted 31 August.
With a daily rule anchored at 09:00 and no stated end, the 31st runs to
09:00 on the 1st — inside a window that opens at midnight on the 1st. The
brief's own rule is that an occurrence overlapping either edge is included,
so four is right and three was the plan disagreeing with itself.

Found by the Task 4 implementer, which corrected the test and left the
implementation alone. Verified by running occurrencesOf directly.

Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
2026-08-28 05:04:39 +02:00
Lucas WintherandClaude Opus 5 ee43270b2b Move the rename-stability test to where it can fail
Task 2's version called occurrenceId twice with identical arguments, which
any pure function satisfies — occurrenceId never takes a title, so it could
not fail the thing it claimed to pin. Task 5 passes the whole rule into
asOccurrenceEvent, so a rename is a real input there and the assertion has
something to bite on.

Found by the Task 2 review.

Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
2026-08-28 05:04:39 +02:00
Lucas WintherandClaude Opus 5 5acd64996b Move the movesOccurrences tests to the task that writes it
Pre-flight scan finding. The function is implemented in Task 2 and its four
tests sat in Task 4's block, so Task 2 would have shipped untested code and
Task 4 would have tested a function it did not write. Task 2's stated count
of 23 already assumed the corrected placement.

Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
2026-08-28 05:04:39 +02:00
Lucas WintherandClaude Opus 5 c07e37a4a7 Plan recurring custom events, task by task
Eleven tasks from the design, each with its own test cycle and commit.
Ordered so the schema field lands before anything derives from it and the
store migration is proved before a single row is expanded.

Three things the plan had to settle that the spec left to the implementer.
The overlap check is one exported predicate, because a form that restates
its schema's rule drifts from it and starts refusing saves that would
succeed. The timeline's expansion needs App to pass the same four scope
filters the lists use, so the predicate is extracted rather than copied.
And custom-ui.test.tsx renders statically with no testing-library in the
project at all, so anything needing a click is stated as a pure function
and tested directly rather than through a harness that does not exist.

Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
2026-08-27 02:10:05 +02:00
Lucas WintherandClaude Opus 5 98cd950e8e Design recurring events, and plan the sourced ones
The app can express a window closing and a day repeating, and nothing in
between — daily.ts counts in days and stops there. That gap is already
costing parsed data: arustats scheduleBosses is read and discarded because
"a recurring rotation with no end is not a deadline" (docs/SOURCES.md:740).

A rule fixes exactly that. Content repeating every fourteen days ends, at
the latest, when its next occurrence opens — a boundary entailed by the
interval rather than invented for a form. So an occurrence may state no end
and still be a deadline, which is the distinction the spec turns on.

Proposes it first on the reader's own events (F13), where the rule is typed
rather than fetched: no parser, no review gate, no GachaEvent change, and a
tested recurrence model in shared/ for the ingest side to adopt later.

Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
2026-08-27 01:53:43 +02:00
Lucas WintherandClaude Opus 5 5ae559de97 docs: record the game order and the catch-up window
The rules a future change could undo without noticing, written where whoever
touches that area next will read them.

Three of them are traps rather than descriptions. An absent `gameOrder` means
the reader has never placed a game, not an empty order — reading it the other
way hands every existing install a blank list, which is the `knownGames`
mistake again. `games` is left in feed order deliberately, because the code
that hides a reader's games diffs it. And the catch-up window bounds display
and never storage: a fortnight's streak exists on one device and nowhere else,
so nothing prunes the log against a window.

The spec that produced the work goes in alongside, including the helper it
specified and the implementation dropped, so the next reader sees why rather
than wondering.

Also corrects the test count in AGENTS.md, which said 772 and was already
stale before this.

Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
2026-08-20 06:02:16 +02:00