# 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)` — the contact URL at the time; the repo has since moved to Gitea and the runner now sends that address instead), 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 CI runner.** This is a property of the runner's address, not of the page, so it has to be re-established whenever that address changes — and it just did: CI moved from GitHub Actions to a Gitea runner (`AGENTS.md` § Scraping conduct). **Everything in this bullet below is evidence about the old GitHub address.** Treat it as the prior, not the current state, until a cycle has run on Gitea. game8.co did not answer the GitHub runner. The only hard evidence we held was what CI had actually committed: `git log` on `snapshots/` shows `github-actions[bot]` landing **arknights.wiki.gg**, **endfield.wiki.gg** and **bluearchive.wiki** (Miraheze). Fandom sources 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 covered every Fandom wiki from *any* address tried here, not just CI's. Of the 2026-08-19 additions, **Stella Sora** is Miraheze and so was the one likely to refresh in CI; **IOP Wiki** is permissive but unproven; **Chaos Zero Nightmare** and **Umamusume** are game8 and were therefore blind in CI by construction. The Gitea runner may well be served where GitHub's was not — that is one of the two remedies `AGENTS.md` allows — but "may well be" is not evidence. The check is the same one that produced the list above: run a cycle, then read `git log` on `snapshots/` for what actually landed. - **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 | **Built** (2026-09-12) on `karendar.com` — see § 6 | | Guardian Tales, Aether Gazer | Declined — see §§ 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 | | Genshin Impact (Fandom) | **Built** (2026-09-12) on `genshin-impact.fandom.com`, second source for a blind lane — see § 15 | ## 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 | `karendar.com` | new (`karendar`) | yes (Cloudflare / open robots) | **BUILT** 2026-09-12 — 57 active events across week/ongoing/upcoming, exact UTC timestamps | | 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 | | Genshin Impact (Fandom) | `genshin-impact.fandom.com/api.php?…page=Event` | `fandom`, fifth template | yes (via `api.php`) | **BUILT** 2026-09-12 — adds 11 events Game8 missed; Game8 priority preserves localStorage IDs | --- ## 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 `