docs: record why hololive Dreams stopped refreshing, and what lapsed means
CI / Typecheck, test, feed (push) Successful in 13s
CI / Build site (push) Successful in 7s
CI / Container image (push) Successful in 31s

SOURCES.md § 16 holds the diagnosis (run 317's rejected zeros, the page
unchanged in shape with nothing current since 19 Sep) and the replacements
assessed and declined: NamuWiki behind a Cloudflare challenge, an official
site with no event posts, no Game8 page. AGENTS.md says when a person may set
`lapsed` and what it does not excuse. TODO ticks the item and notes the
cosmetic "last confirmed never" seen in the CI state.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
Lucas Winther
2026-10-14 02:35:16 +02:00
co-authored by Claude Opus 5.5
parent ae701de74e
commit 0701e5e16e
4 changed files with 76 additions and 2 deletions
+23
View File
@@ -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
+1 -1
View File
@@ -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 |
+8 -1
View File
@@ -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
+44
View File
@@ -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: