# SOURCES.md — event sources for the games still missing A source assessment for the games named in `docs/FEEDBACK.md` § P1 that still have no adapter, plus § 12, a sweep of thirteen Game8 hubs, and § 13, one URL offered for Honkai Impact 3rd — both asked for separately on 2026-08-19. Written 2026-08-18. **Acted on 2026-08-19**: four of the games below were built, one turned out to be blocked rather than merely awkward, and the rest were declined. Each section keeps its original reconnaissance and carries its outcome at the top, because the reasoning is what stops the next pass re-deriving it. What changed on 2026-08-19, in one paragraph. **Built:** Girls' Frontline 2 (`iopwiki`, new parser), Stella Sora (`stellasorawiki`, new parser), Chaos Zero Nightmare (`game8`, no parser work) and Umamusume (`game8`, after widening its section and column vocabulary). **Built on 2026-08-19 after the permission was read in a browser:** Nikke, whose `robots.txt` turned out to be the standard Fandom file. **Declined:** Punishing: Gray Raven, Guardian Tales, Azur Lane and Aether Gazer, all as proposed. One thing not on the original list also came out of the pass: the **Infinity Nikki source is stale** and has no reachable replacement — see § 11. Later the same day a second, unrelated request added § 12: thirteen Game8 hubs checked for a schedule page, of which **MementoMori** needs no parser work at all and **Fire Emblem Heroes** has the best data in that sweep behind a shape the parser does not read. The other eleven are declines. Verdicts here are proposals. Once one is acted on — built or declined — the *decision* belongs in `AGENTS.md` § Scraping conduct, whose table exists so a source is not re-litigated every pass and which `.github/ISSUE_TEMPLATE/feature_request.yml` points readers at. This file is the working, not the ruling. ## Method Every page below was fetched from this machine with the refresh runner's own `User-Agent` (`gacha-event-tracker/1.0 (+https://github.com/StereotypicalCat/gacha-event-tracker)`), one or two requests per host, `robots.txt` first. No browser-shaped headers, no proxy, no JS execution — anything that only answers a browser is treated as closed, per the `uma.moe` precedent. Where an existing parser could plausibly read a page, it was run against the fetched bytes offline (`src/ingest/parsers/index.ts`) rather than guessed at. Two things this method cannot tell you, and both matter: - **Whether a host answers the GitHub Actions runner.** game8.co does not (`AGENTS.md` § Scraping conduct). The only hard evidence we hold is what CI has actually committed: `git log` on `snapshots/` shows `github-actions[bot]` landing **arknights.wiki.gg**, **endfield.wiki.gg** and **bluearchive.wiki** (Miraheze). Fandom sources have never refreshed in CI, because `robots.txt` itself is challenged from a datacentre address and the gate fails closed — and as of 2026-08-19 that challenge covers every Fandom wiki from *any* address tried here, not just CI's. Of the 2026-08-19 additions, **Stella Sora** is Miraheze and so is the one likely to refresh in CI; **IOP Wiki** is permissive but unproven; **Chaos Zero Nightmare** and **Umamusume** are game8 and therefore blind in CI by construction. - **Whether a page will still look like this in six weeks.** Each recommendation below names the assertion `canParse` should make, so a redesign fails the source loudly instead of emptying a lane. ## Where P1 stands | Game | Status | |---|---| | Arknights, Reverse: 1999, Blue Archive, Persona 5X | **Built** (2026-08-17/18) | | **Girls' Frontline 2, Stella Sora, Chaos Zero Nightmare, Umamusume** | **Built** (2026-08-19) | | Nikke | **Built** (2026-08-19), once the `robots.txt` was read in a browser — see § 3 | | Azur Lane | Declined on conduct (`azurlane.koumakan.jp` `ai-input=no`), and both Fandom alternatives are dead archives | | Punishing: Gray Raven, Guardian Tales, Aether Gazer | Declined — see §§ 6, 7, 9 | | Infinity Nikki | **Rebuilt** (2026-08-19) on `infinity-nikki.fandom.com` at day precision, replacing a Game8 page stale since August 2025 — see § 11 | | Silver Palace | Unreleased | | Honkai Impact 3rd | **Built** (2026-08-27) on `arustats.com`, and the only lane here whose dates are **estimates** — see § 14 | ## Summary of findings | Game | Best source found | Parser | Refreshes in CI? | Verdict | |---|---|---|---|---| | Girls' Frontline 2 | `iopwiki.com/wiki/GFL2_Events` | new (`iopwiki`) | likely (permissive robots, unproven) | **BUILT** 2026-08-19 — best data quality of anything here | | Stella Sora | `stellasora.miraheze.org/wiki/Main_Page` | new (`stellasorawiki`) | yes (Miraheze proven) | **BUILT** 2026-08-19 — banners only, from the main page | | Nikke | `nikke-…-international.fandom.com/api.php?…page=Event` | `fandom`, third template | **no** — Fandom robots fails closed | **BUILT** 2026-08-19 — story events *and* dated pickup banners, with an evidenced reset clock | | Chaos Zero Nightmare | `game8.co/games/Chaos-Zero-Nightmare/archives/559899` | **existing** `game8` | **no** — game8 202s the runner | **BUILT** 2026-08-19 — no parser work, fixture-only lane | | Umamusume | `game8.co/games/Umamusume-Pretty-Derby/archives/536311` | `game8` + section and column vocabulary | **no** | **BUILT** 2026-08-19 — cost more than "two header words"; see § 5 | | Punishing: Gray Raven | `grayravens.com/wiki/Events` | — | — | **Decline for now** — one dated string on the whole page | | Guardian Tales | `guardian-tales.fandom.com/wiki/Events` | — | — | **Decline** — wiki stopped dating events in 2025 | | Azur Lane | none | — | — | **Still declined** — the Fandom alternatives are 2021 archives | | Aether Gazer | — | — | — | **Do not build. The game is shutting down.** | | Silver Palace | — | — | — | Unreleased; beta only | --- ## 1. Girls' Frontline 2: Exilium — BUILT 2026-08-19 **Source:** `https://iopwiki.com/wiki/GFL2_Events` (IOP Wiki, the Girls' Frontline universe wiki) **Conduct.** `robots.txt` is two lines — `User-agent: *` / `Crawl-Delay: 20` — with no `Disallow` anywhere and no named-agent block. No `Content-Signal` header. Our 6-hour floor is three orders of magnitude inside a 20s crawl delay. The response carries `Last-Modified`, so `If-Modified-Since` will do real work here. **Shape.** An `