diff --git a/AGENTS.md b/AGENTS.md index a6f63e9..54d51c9 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -226,8 +226,17 @@ These come from how gacha games actually schedule things, and they cause most bu between the calendar and a year of expired banners. - **Check what fences a section off.** Inclusion is decided by headings, and the level varies: Persona 5 hides fifty finished events behind nothing but an `

Finished Events

` in a collapsed - accordion, while Genshin uses `h4` for sub-headings *inside* one event. So `h4` gates sections but - never names one — an unrecognised `h4` must leave the current event title alone. + accordion, while Genshin uses `h4` for sub-headings *inside* one event and Wuthering Waves titles + each event of its summary block with one. So `h4` gates sections, and names one only when nothing + else has: an unrecognised `h4` may **fill an empty event title but never take one**. Genshin's h3 + has already claimed the slot before its labels arrive; Wuthering Waves' block sits under a + recognised section heading, so the slot is empty and the `h4` is the only name there is. +- **A blurb the listing table lacks is usually further down the page.** Two Game8 templates put + unlock conditions (`Reach Union Level 8`, `Unlocked by default`) in the cell where a description + belongs, and `isRequirementOnly` drops those rather than answer "what is this event?" with "how + do I qualify for it?". The real prose sits in a per-event section — under an `h3` on Persona 5's + page and an `h4` on Wuthering Waves'. `dedupe` blends it onto the better-dated copy and never + blends a date, so reading both shapes adds information and can never contradict any. - **Prefer a source that states machine-readable times.** wiki.gg emits ISO timestamps with a timer per server region, which is the only reason `regionEnds` carries real data anywhere. - **Silent drops are the dangerous failure.** A date format the parser does not recognise makes diff --git a/docs/INGESTION.md b/docs/INGESTION.md index 107870d..5d4a569 100644 --- a/docs/INGESTION.md +++ b/docs/INGESTION.md @@ -250,17 +250,31 @@ several: contains both column words, resolves, and puts the range at an index no data row has, so the table yields nothing at all with no error. `readColumnTable` therefore decides the header by what it produces — row 1 is tried **only when row 0 produced nothing**. *(Umamusume)* +9. **An events-summary block** — shape 7's idea one heading level down: a + `

3.6 Events Summary

` section whose every event is a sub-section titled by an `h4`, over + an `Event Duration` row and a paragraph of prose. The listing tables above it put *unlock + conditions* where a blurb would go, so this block is the only place on the page a description + exists, and two events are dated nowhere else. *(Wuthering Waves)* -Shapes 1, 2, 4, 5, 6, 7 and 8 are handled. Before assuming a new Game8 page will work, dump its heading/table -structure and check which shape it uses — and check **every** table, not just the obvious one. -Endfield was written off as undatable on a first pass that only inspected its `Duration` rows; its -two real events were in a table further down. +Shapes 1, 2, 4, 5, 6, 7, 8 and 9 are handled. Before assuming a new Game8 page will work, dump its +heading/table structure and check which shape it uses — and check **every** table, not just the +obvious one. Endfield was written off as undatable on a first pass that only inspected its +`Duration` rows; its two real events were in a table further down. **Check what ends a section, too.** Headings decide inclusion and the level is not consistent: Persona 5 puts its whole finished back catalogue behind an `

Finished Events

` inside a collapsed accordion, so a reader that ignores `h4` publishes fifty dead events. Genshin uses `h4` the opposite -way — for sub-headings *within* one event ("Availability Period") — so an unrecognised `h4` gates the -section but must never claim the event title. +way — for sub-headings *within* one event ("Availability Period"), while Wuthering Waves names +each event of its summary block with one. Both are served by the same rule: an unrecognised `h4` +may **fill an empty event title but never take one**. Genshin's event has already claimed the slot +by the time its labels arrive, so they cannot rename it; Wuthering Waves' block sits under a +*recognised* section heading, which leaves the slot empty for the `h4` that is the only name on +offer. + +That last part is why `events summary` is in the section vocabulary rather than left to fall +through. An unrecognised heading is read as an event name, so falling through would spend the title +on the section and leave every `h4` beneath it unable to take it back — publishing +"3.6 Events Summary" as an event and dropping the ten real ones under it. ## Stage 1 — fetch