Commit Graph
125 Commits
Author SHA1 Message Date
Lucas WintherandClaude Opus 5.5 8cf01b427f feat(routines): Wuthering Waves' shop pulls, each version
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-22 17:38:41 +02:00
Lucas WintherandClaude Opus 5.5 b3a84757a1 feat(routines): a routine can reset with its game's version
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-22 17:14:00 +02:00
Lucas WintherandClaude Opus 5.5 34ebc401c7 feat(versions): a cited table of version timers, and the window holding now
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-22 17:11:06 +02:00
Lucas WintherandClaude Opus 5.5 9fe14114ba chore(changelog): note the shine (54d13d7) and Settings pills (9c22a85)
CI / Typecheck, test, feed (push) Successful in 18s
CI / Build site (push) Successful in 8s
CI / Container image (push) Successful in 37s
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-20 04:27:40 +02:00
Lucas WintherandClaude Opus 5.5 3e3759b1eb chore(changelog): note the kept game tab (83a2557)
CI / Typecheck, test, feed (push) Successful in 17s
CI / Build site (push) Successful in 11s
CI / Container image (push) Successful in 37s
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-20 03:40:15 +02:00
Lucas WintherandClaude Opus 5.5 94a2faa6f6 chore(changelog): note confirmed-dead codes (b8e8d44)
CI / Typecheck, test, feed (push) Successful in 18s
CI / Build site (push) Successful in 8s
CI / Container image (push) Successful in 37s
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-20 03:35:09 +02:00
Lucas WintherandClaude Opus 5.5 b8e8d44816 feat(codes): mark a code dead once the owner confirms it in game
Game8 still lists Y1INABQB6DEX, 2BJ64QRZ7RT8 and PLDXIB886Y1S as active
Genshin codes after the game refused them. CODE_CHECKS records the
owner's in-game check; build-codes stamps the matching code confirmedDead,
and the Codes tab shows it expired: "Confirmed expired in game, 2026-10-20."

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-20 03:34:52 +02:00
Lucas WintherandClaude Opus 5.5 c4d0d1b925 chore(changelog): note celebrations for each thing finished (f17b798)
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-18 22:46:53 +02:00
Lucas WintherandClaude Opus 5.5 a4426aaebc chore(changelog): note the fuller tour (874d862)
CI / Typecheck, test, feed (push) Successful in 19s
CI / Build site (push) Successful in 9s
CI / Container image (push) Successful in 40s
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-18 05:27:25 +02:00
Lucas WintherandClaude Opus 5.5 83ed9fa3fa chore(changelog): note used codes and the new-code marker (3b29010)
CI / Typecheck, test, feed (push) Successful in 19s
CI / Build site (push) Successful in 9s
CI / Container image (push) Successful in 40s
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-18 05:15:51 +02:00
Lucas WintherandClaude Opus 5.5 3c81b9b0f1 chore(changelog): note the tour highlights and safer saves (94fba4d, 5be04a7)
CI / Typecheck, test, feed (push) Successful in 18s
CI / Build site (push) Successful in 9s
CI / Container image (push) Successful in 40s
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-18 05:11:28 +02:00
Lucas WintherandClaude Opus 5.5 6720c72840 chore(changelog): note the tour for everyone (d8ce442)
CI / Typecheck, test, feed (push) Successful in 18s
CI / Build site (push) Successful in 9s
CI / Container image (push) Successful in 37s
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-18 04:45:53 +02:00
Lucas WintherandClaude Opus 5.5 0abca649fa chore(changelog): note codes for eight more games (254e78f)
CI / Typecheck, test, feed (push) Successful in 18s
CI / Build site (push) Successful in 7s
CI / Container image (push) Successful in 36s
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-18 04:21:06 +02:00
Lucas WintherandClaude Opus 5.5 254e78f4d1 feat(codes): redeem codes for eight more games, and where to redeem them
Game8 codes pages for Star Rail, ZZZ, Wuthering Waves, Endfield, NTE,
P5X, Chaos Zero Nightmare and Umamusume, read by one table parser told
each page's active-codes heading. Each page was fetched once and pinned
as a fixture. Infinity Nikki's page is stale (still titled July 2025)
and is left out.

The Codes tab links the publisher's own redeem page where one exists
(Genshin, Star Rail, ZZZ) and gives the in-game route for every game,
and names the server on a redeemed checkbox only when there are two.

Settings uses the width of a large screen: content up to 1320px and the
menu column running the full height.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-18 04:20:45 +02:00
Lucas WintherandClaude Opus 5.5 6fb084350a chore(changelog): note the redesign (ddd9673..50c6e91)
CI / Typecheck, test, feed (push) Successful in 18s
CI / Build site (push) Successful in 8s
CI / Container image (push) Successful in 40s
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-18 01:56:24 +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 cbcd8c594c chore(changelog): note battle pass windows (0a4be4e..ec66967)
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-16 06:30:04 +02:00
Lucas WintherandClaude Opus 5.5 4427f6c2e5 fix(tasks): a cycle chip counts its days left whether ticked or not
It printed the unticked days left, so ticking a cycle off dropped its
figure by one, and on the last day read 0d. Tasks now carry daysLeft, the
period's days from today, and the chip prints that. Found in the
whole-branch review.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-16 05:46:50 +02:00
Lucas WintherandClaude Opus 5.5 f19ef32e4a chore(changelog): note cycle tasks and cycle built-ins (a80f581..524b6f2)
Entries for be3c140 (Every N days in Add a task) and 524b6f2 (the cycle
built-ins), and the cycle-routines release note.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-16 05:42:42 +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 8d0b45f83a fix(tasks): refuse a cycle start that is not a real date
A corrupt import is stored as it came, and "2026-13-01" passed the
pattern, then threw in periodOf on every render. "2026-02-30" rolled into
March instead and moved the cycle. The schema now round-trips the date,
so either is kept on disk and left off screen like any unreadable task.
Found by the schema-guardian review.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-16 05:37:36 +02:00
Lucas WintherandClaude Opus 5.5 8eef068332 feat(routines): a built-in can roll on one server's reset for everyone
Routine gains clock?: Region, code only. Its day key, its countdown and
its catch-up days are cut on that server's reset rather than the
reader's: for a cycle that ends at one instant on every server. Make it
mine leaves it behind.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-16 05:31:28 +02:00
Lucas WintherandClaude Opus 5.5 a80f581d8b feat(tasks): a task can repeat every N days from a dated start
A third period, { unit: "cycle", days, from }, cut in day-key space like
weeks and months, so each game's per-server reset carries over. Tasks on
it are tallied and switched apart (showCycleTasks, on by default), show
the days left in their chip, and the lower row's heading now names the
periods it holds.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-16 05:25:14 +02:00
Lucas WintherandClaude Opus 5.5 23924db4b8 chore(changelog): note built-ins for seven games, per-item tracking and standard pulls (612e0a2..9d5b473)
CI / Typecheck, test, feed (push) Successful in 16s
CI / Build site (push) Successful in 8s
CI / Container image (push) Successful in 34s
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-16 03:01:59 +02:00
Lucas WintherandClaude Opus 5.5 9d5b473218 fix(games): roll NTE's Europe day at 05:00 UTC+2, as the game does
Game-Time-Master lists NTE Europe on UTC+1, but the game disagrees: on
2026-10-16 two in-game timers ran out at 03:00 UTC — one on 26 Oct, after the
clocks change — and Realm of Greed says "resets every Monday at 5:00". Only a
fixed UTC+2 fits all three.

Re-labels the hour 03:00-04:00 UTC of every European reader's NTE day.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-16 03:00:58 +02:00
Lucas WintherandClaude Opus 5.5 af2ad942cd feat(routines): let a reader add standard-banner pulls beside the premium ones
Most shops sell both banners' pulls. A shop's premium line is offered like any
built-in; its standard line (Acquaint Fates, Star Rail Pass, Master Tapes,
Resonite Crystals) only when the reader switches on Include standard-banner
pulls under the built-ins switch. A new pref, standardPulls, absent meaning
off, so no install gains anything until it asks.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-16 03:00:52 +02:00
Lucas WintherandClaude Opus 5.5 9cf7649cc2 feat(routines): Infinity Nikki's weekly and monthly built-ins
Mira Journey's weekly EXP cap and the Resonance Store's Revelation Crystals on
the 1st, confirmed in game, and Realm of Breakthrough from the wiki, which the
owner could not check yet (TODO.md). The wiki answers again after refusing
every request with HTTP 402.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-16 03:00:48 +02:00
Lucas WintherandClaude Opus 5.5 88c850416f feat(routines): NTE's weekly built-ins
Anomaly Pilgrimage (3 claims in total, settling a source conflict), City
Stamina (700), Realm of Greed and the Special City Commission, beside the
Season Pass weekly EXP cap — all confirmed in game by the owner.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-16 03:00:45 +02:00
Lucas WintherandClaude Opus 5.5 d635780c72 feat(routines): Wuthering Waves' weekly built-ins
Weekly Challenge, Pioneer Podcast weekly EXP and Weekly Activities, confirmed
in game. The Podcast cap is 12,000 — the wiki's newest season page (v3.1)
still says 10,000.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-16 03:00:42 +02:00
Lucas WintherandClaude Opus 5.5 39e04c6139 feat(routines): Endfield's Focus Commissions
Etchspace Salvage: Focus Commissions, 3 a week, from the wiki; the owner could
not check it in game yet (TODO.md). The Weekly Routine and Endfield's EU reset
hour are confirmed in game.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-16 03:00:38 +02:00
Lucas WintherandClaude Opus 5.5 6d6db9c11c feat(routines): more of ZZZ's weekly and monthly built-ins
Bounty Commissions (one 8,000-point cap shared by Lost Void and Enigma of the
Labyrinth), Notorious Hunt, the New Eridu City Fund's weekly EXP cap, and the
Signal Shop's Encrypted Master Tapes and Boopons on the 1st — all confirmed in
game by the owner.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-16 03:00:35 +02:00
Lucas WintherandClaude Opus 5.5 387fc1d2e4 fix(routines): Ridu Weekly tops out at 2,100 points, not 1,300
The wiki recorded 2,100 on 2026-01-05 and the owner confirmed it in game;
Game8's page still says 1,300. Same id, so logged numbers are kept — a week
logged at 1,300 now reads 1,300 of 2,100.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-16 03:00:31 +02:00
Lucas WintherandClaude Opus 5.5 cd52641d88 feat(routines): Star Rail's weekly and monthly built-ins
Nameless Honor's weekly EXP cap (8,000, which no page states; confirmed in
game) and the Embers Exchange's Star Rail Special Passes on the 1st, beside
Echo of War, now confirmed in game. The EU reset hour is confirmed too.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-16 03:00:28 +02:00
Lucas WintherandClaude Opus 5.5 af6a02cb34 feat(routines): Genshin's weekly and monthly built-ins
Weekly Bosses, Battle Pass weekly EXP, Reputation Bounties and Requests, the
Realm Depot, Paimon's Bargains (Intertwined Fates), Spiral Abyss and
Imaginarium Theater, each from a dated wiki page and confirmed in game by the
owner. Records the one exception to "a page states it": a figure the owner
confirmed in game says so in its note, with the day, and a test holds it.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-16 03:00:25 +02:00
Lucas WintherandClaude Opus 5.5 f322061c88 feat(routines): say "weekly and monthly" for built-ins
Built-ins now include monthly items, so the strip's question, Settings and Your
own say "weekly and monthly". The per-game tooltip quotes the oldest source
date when a game has several.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-16 03:00:21 +02:00
Lucas WintherandClaude Opus 5.5 612e0a23e4 feat(routines): let a reader stop tracking one built-in
A new pref, routinesHidden, lists built-ins stopped one at a time by id. It
narrows the game's answer and never widens it, so stopping one changes nothing
else, and a built-in shipped later still arrives. Tracking one of a game that
is off turns the game on with that item alone (trackRoutinePatch).

Absent means none; ticks and numbers stay under the id.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-16 03:00:15 +02:00
Lucas WintherandClaude Opus 5.5 653195fce6 chore(changelog): note Genshin listed once, not twice (7c8fa7f..16c277b)
CI / Typecheck, test, feed (push) Successful in 14s
CI / Build site (push) Successful in 7s
CI / Container image (push) Successful in 31s
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-14 17:50:19 +02:00
Lucas WintherandClaude Opus 5.5 2924605bd4 feat(feed): name the ids merge absorbed, and carry marks off them
When merge fuses two sources' copies, the loser's id leaves the calendar, and it may already hold a reader's ticks from a day it was published alone. Until now that needed a hand-edited RETIRED_IDS entry per fusion.

The survivor now lists what it absorbed in an optional mergedIds field. When a feed arrives the client turns those into carry-forward pairs, skipping any id the feed still publishes, and an import takes the same table. Optional, so an older cached feed still validates and an older bundle drops it unread. RETIRED_IDS stays for parser changes, whose old ids no feed will name again.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-14 17:48:15 +02:00
Lucas WintherandClaude Opus 5.5 b174295e48 chore(changelog): note examples to start from in the add forms (6c66b81)
CI / Typecheck, test, feed (push) Canceled after 0s
CI / Build site (push) Canceled after 0s
CI / Container image (push) Canceled after 0s
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-14 03:12:19 +02:00
Lucas WintherandClaude Opus 5.5 6c66b812b1 feat(forms): start an event or a task from an example, and say what Save needs
Readers who knew what they wanted could not see which answers in Add an
event or Add a task produced it. Both add forms now open with a row of
examples (templates.ts) that set the form's shape only: kind, how often,
how it repeats, how it is measured. Never a name, date, target or game,
and no date is guessed, so nothing an example set can be saved unread.

Both forms also had a pass: plain words and pills for how often and
repeat, the name asked first and the kind after the dates, each message
beside its field, and a "Still needed" line read from the same check that
disables Save. The event form's derived state is now one pure function,
eventFormState, so the examples are proved to complete into a saveable
event without a click.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-14 03:10:15 +02:00
Lucas WintherandClaude Opus 5.5 3d32ab8d21 chore(changelog): note per-game switches for chores and built-ins (a39c6a8)
CI / Typecheck, test, feed (push) Successful in 14s
CI / Build site (push) Successful in 8s
CI / Container image (push) Successful in 32s
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-14 02:21:19 +02:00
Lucas WintherandClaude Opus 5.5 47c395379b feat(prefs): switch chores and built-in tasks per game, on one rule
Chores had one global switch and built-ins only a per-game opt-in, so the
two answered the same question two different ways. perGame.ts is now the
one rule for both: a global answer, then the games that differ.

Nothing is migrated. routineGames keeps its meaning as the built-ins'
on-list and an absent showRoutines still reads as off, so every reader's
answers, and an older cached tab, see what they saw before. The strip
stops asking about one game once the reader has answered for all.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-14 02:20:18 +02:00
Lucas WintherandClaude Opus 5.5 7a68613f3e chore(changelog): note editing the dailies strip in place (9477ac5)
CI / Typecheck, test, feed (push) Successful in 14s
CI / Build site (push) Successful in 7s
CI / Container image (push) Successful in 33s
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-14 01:41:59 +02:00
Lucas WintherandClaude Opus 5.5 9477ac54b6 feat(dailies): edit the strip in place, and give weekly and monthly tasks their own row
Giving Genshin's "To Temper Thyself and Journey Far" its five-of-seven goal
meant finding it in the list, opening its sheet, saying it repeats and only
then setting the goal. The strip now has an Edit mode beside Catch up that
lists its events by game with their goals, opens the sheet's goal control in
place, and adds any running event a game at a time. It calls the same
setDaily/setGoal the sheet does, so it can store nothing the sheet would not.

Weekly and monthly tasks are not due tonight, so they move to a row under the
dailies, and each period can be switched off (showWeeklyTasks,
showMonthlyTasks; default on, so nothing disappears on upgrade).

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-14 01:41:37 +02:00
Lucas WintherandClaude Opus 5.5 e467582350 chore(changelog): note upcoming events shown to new readers
CI / Typecheck, test, feed (push) Successful in 13s
CI / Build site (push) Successful in 8s
CI / Container image (push) Successful in 31s
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-13 14:42:17 +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