feat: add Chaos Zero Nightmare, which the game8 parser already reads

No parser work at all — a GameId, a games entry, a SOURCES line, a fixture and
a test. The page lists six current events and the parser publishes four; the
two it skips print "Start Date: -", and no start means no event ID, so that is
the skip-never-guess rule working rather than a silent drop.

The cost is worth stating plainly: this is the ninth game8 source, and game8's
edge answers the Actions runner with a 202 and a bot-management body, so the
lane is built from a checked-in fixture in CI from day one and only a manual
`bun run refresh` moves it. freshness() discloses that in the footer, which is
what it is for.

Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
This commit is contained in:
Lucas Winther
2026-08-19 03:50:33 +02:00
co-authored by Claude Opus 5
parent ecbf9c0422
commit 6c7369db10
10 changed files with 1120 additions and 15 deletions
+3
View File
@@ -132,6 +132,9 @@ export const GAMES: Record<GameId, GameMeta> = {
// starts, 12:59 and 19:59 ends), so there is no reset hour to read off it
// either. See the fgo entry below for the same reasoning at more length.
stellasora: { id: "stellasora", name: "Stella Sora", short: "Stella Sora", hue: "#2E9E9E", studio: "Yostar", dailyTasks: "Daily missions" },
// No `resetOffsets`: the source is Game8, which states day-precision prose
// and no clock at all — the same silence p5x has, and the same answer.
czn: { id: "czn", name: "Chaos Zero Nightmare", short: "CZN", hue: "#B84A9C", studio: "Smilegate", dailyTasks: "Daily missions" },
};
export const GAME_LIST: GameMeta[] = Object.values(GAMES);