diff --git a/AGENTS.md b/AGENTS.md index 8e1f8b7..d1ed56d 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -416,6 +416,24 @@ section, `README.md` § Status, `docs/SOURCES.md` § Method and `docs/FEEDBACK.m A single manual `--only` dispatch is enough to answer it for one source; note that `--dry-run` cannot, because it makes no requests at all by design. +**A source that has lapsed is recorded, not repaired.** A wiki can keep answering `200` with an +intact page whose editors simply stopped, and then every cycle parses to zero and is rejected. That is +correct, because a zero is never published, but after three cycles it fails the workflow over +something no code here can fix. When a person has looked, found the page unchanged in shape and +merely stale, and found no fetchable replacement, they set `lapsed: { recorded, reason }` on the +registry entry. Refresh then reports that source's empty answers as a warning instead of `broken`. +Three limits keep this honest: + +- It excuses only a source that answers `200`. A lapsed source that starts answering `403` or `5xx` + is broken like any other. +- It changes nothing a reader sees. The held snapshot keeps ageing, and the staleness footer goes + on saying so. +- It asks to be removed. The first cycle that lists events again warns that `lapsed` should come out + of the entry. + +Never set it from code or on a guess. hololive Dreams carries it since 2026-10-14 +(docs/SOURCES.md § 16). + A source whose ToS forbids automated access does not get an adapter. Flag it and ask. **Sources assessed and declined** (2026-08-17, extended 2026-08-19), so these are not @@ -845,6 +863,11 @@ is the quality of what is there, and three things are worth knowing: robots.txt disallows. The parser refuses a href with a query and falls back to the events page; when the articles exist, they get linked with no change. +**The wiki lapsed after 19 Sep 2026** and the source carries `lapsed` (§ Scraping conduct; +docs/SOURCES.md § 16). The page still parses: an empty `Current Events` here means the editors +stopped, not that the parser broke. `fixtures/holodori/holodoriwiki-events-2026-10-14.html` pins +that. + Two rows on the page are not events and are meant to be missing. `Beginner Mission` runs `Game Launch` → `Unknown`: no start means no event ID, and a permanent tutorial chore is not what a calendar of deadlines is for. An `Unknown` **end** is kept, though — that is `endsAt: null`, and diff --git a/README.md b/README.md index 533dd07..a4af85f 100644 --- a/README.md +++ b/README.md @@ -137,7 +137,7 @@ date makes you miss content. Given the choice, this ships nothing rather than a | Goddess of Victory: Nikke | Fandom | | Infinity Nikki | Fandom | | Girls' Frontline 2 | IOP Wiki | -| hololive Dreams | holodori.wiki | +| hololive Dreams | holodori.wiki (lapsed since 19 Sep 2026; see docs/SOURCES.md § 16) | | Stella Sora | stellasora.miraheze.org | | Honkai Impact 3rd | arustats.com | diff --git a/TODO.md b/TODO.md index ed24dfd..5cc4f25 100644 --- a/TODO.md +++ b/TODO.md @@ -21,7 +21,14 @@ built-ins should keep answering the same setting. - Code: `src/client/components/Controls.tsx` (*What you see*), `src/client/state/usePrefs.ts`, `src/shared/routines.ts` (`activeRoutines`, `routineToAsk`), `src/client/components/Dailies.tsx`. -- [ ] hololive Dreams has not refreshed in three weeks — find out why, or find it a new source. +- [x] hololive Dreams has not refreshed in three weeks — find out why, or find it a new source. + Resolved 2026-10-14: the wiki lapsed after 19 Sep (still answering, still parsing, nothing + current), and no replacement can be fetched. The source is recorded as `lapsed` — see + `docs/SOURCES.md` § 16. + - Still open: run 317 reported `last confirmed never` for it, while the committed meta says + 2026-09-22. The CI state in the Actions cache appears to have lost that date, perhaps by + restoring from a chain that never held it. It is cosmetic (the message only), but worth a + look if another source shows it. The footer says (2026-10-13): *"Of the games you have switched on, this one has not refreshed in over two days, so some end dates may have moved: hololive Dreams (21d 7h ago)."* - What the repo shows: `snapshots/holodori-holodoriwiki-events.meta.json` was last confirmed diff --git a/docs/SOURCES.md b/docs/SOURCES.md index 15a768b..1010bcb 100644 --- a/docs/SOURCES.md +++ b/docs/SOURCES.md @@ -71,6 +71,7 @@ Two things this method cannot tell you, and both matter: | 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 | +| hololive Dreams | Built (2026-08-18) on `holodori.wiki`, which **lapsed** after 19 Sep 2026; no fetchable replacement exists — see § 16 | ## Summary of findings @@ -87,6 +88,7 @@ Two things this method cannot tell you, and both matter: | 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 | +| hololive Dreams | `holodori.wiki/wiki/Events` (still) | `holodoriwiki` | yes, but nothing new to fetch | **LAPSED** 2026-10-14 — NamuWiki is behind a Cloudflare challenge, the official site posts no events, Game8 has no page | --- @@ -810,6 +812,48 @@ note is what stops the next person re-deriving the reason it does not. - **Priority & IDs:** Game8 is assigned `priority: 10` while Fandom is default/0. Two live events differ slightly in naming (`To Temper Thyself and Journey Far` vs `… Cycle 5`, and `Stygian Onslaught` vs `…: Battle of the Starburst`). Game8's higher priority breaks near-match ties in `merge.ts`, ensuring existing localStorage event IDs survive and reader completion marks remain intact. Fandom contributes 11 net-new events Game8 missed, 0 date conflicts occur, and overlapping events gain corroboration bonuses. - **336-day event:** Genshin's anniversary 5-star selection runs 336 days (`2025-10-22` → `2026-09-23`), prompting the test duration ceiling to be raised from 180 to 365 days across the test suite and ingestion specs. +## 16. hololive Dreams — the wiki lapsed (2026-10-14); nothing else can be fetched + +> **Outcome: kept, and recorded as lapsed.** `holodori.wiki` answers every cycle and the parser +> still reads it, but its editors stopped adding events after 19 Sep 2026. No replacement passes +> § Method. The source stays registered with `lapsed` set (`src/ingest/adapters/index.ts`), so the +> refresh reports it as a warning rather than failing every run, and it recovers by itself if the +> editors return. Readers still see the lane's age in the staleness footer, which is the honest +> signal here. + +**How it showed up.** The footer said *"hololive Dreams (21d 7h ago)"*, and refresh run 317 +(2026-10-13) logged `rejected — kept previous snapshot; new body yielded 0 events (had 1)` then +`broken` after 21 failing cycles with `last status 200`. So the source was answering, not blocked. + +**What the page shows.** One request on 2026-10-14 (our User-Agent, about 7h after the last CI +fetch; kept as `fixtures/holodori/holodoriwiki-events-2026-10-14.html`): + +- **Same template.** `canParse` passes and the two-heading layout is unchanged. The parser is + reading the page correctly. +- **Nothing current.** `Current Events` holds only `Beginner Mission`, which has no start date and + is skipped by design (AGENTS.md § hololive Dreams). The newest row anywhere is + `A Dreamy Summer Escape`, 09/19–09/25 JST, under `Past Events`. +- **The game did not pause; the page did.** Rows had been added every week or two from 7 Aug to + 19 Sep. The game's X account then ran a score challenge from 7 to 13 Oct and announced a + "Neon Sunshine Festival". Neither is on the page. + +**Candidates assessed:** + +| Candidate | Finding | Verdict | +|---|---|---| +| NamuWiki `hololive Dreams/이벤트` | Lists the 7–13 Oct event with times. `robots.txt` allows `/w/` for `*`, but the page answers our client `403` with `cf-mitigated: challenge` (Cloudflare's JavaScript check) | **Decline.** That is an access control; § Method and AGENTS.md § Scraping conduct rule out working around it | +| `www.hololive-dreams.com/news` (official) | No `robots.txt` (404), so nothing is disallowed. But the news list has four posts in all: launch, system requirements, and two on 29 Sep (Ver.1.2.0, the Soda Pop Lagoon area). The site posts no events | **Decline** — no event data | +| Game8 | No hololive Dreams events page found, only a launch news article | **Decline** — nothing to read | +| X (`@holo_dreams_en`), press releases | X has no fetchable surface for us. Press releases (CyberAgent, syndicated) are prose about single events, not a schedule | **Decline** | + +**Worth doing instead.** `holodori.wiki` is a CC BY-SA wiki, so adding the missing events there +fixes it for every reader of that wiki, and refresh picks them up with no code change. When the +page lists events again, the refresh warns that the source is listing events again and that +`lapsed` should come out of its registry entry. Do that, and update this section. + +**Re-check:** `bun run refresh --only holodori-holodoriwiki-events` once the six-hour floor has +passed. A `fetched` with more than zero events means the wiki is back. + ## What every one of these costs, beyond the source Adding a game is never only a `SOURCES` entry: