docs: record the TBA drop and what a one-row source means
Two things the last two commits taught, written down where the next person looking at a parser will hit them. The date table now carries the slash-dated open range, and the prose beside it says the year is required and why — that reader is tried last, so a guess there reaches the feed unchallenged. It also names the second copy of the open-end vocabulary, because the two lists being out of step is not a hypothetical failure any more. The second is the one worth having on record. `eventCount` in a snapshot's meta is not a count of the page. Endfield's Game8 lane read 1 for a week — one row of an *upcoming* table, while four live events sat in a card grid the parser cannot read — so the first time the page moved, the lane read 0 and the gate reported a shape change. Neither number described the page. A count far below what the page shows is a shape being skipped, and it is worth finding before it reaches zero and the gate has to guess on your behalf. Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
This commit is contained in:
co-authored by
Claude Opus 5
parent
0307d24b92
commit
dbcd14eb70
@@ -240,9 +240,17 @@ These come from how gacha games actually schedule things, and they cause most bu
|
|||||||
- **Prefer a source that states machine-readable times.** wiki.gg emits ISO timestamps with a timer
|
- **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.
|
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
|
- **Silent drops are the dangerous failure.** A date format the parser does not recognise makes
|
||||||
events vanish with no error. Abbreviated months (`Apr. 29 - May 13, 2026`) are supported for
|
events vanish with no error. Abbreviated months (`Apr. 29 - May 13, 2026`) and slash-dated open
|
||||||
exactly this reason. When adding a source, compare the parser's event count against an
|
ends (`09/02/2026 - TBA`) are supported for exactly this reason. When adding a source, compare the
|
||||||
independent count of the page.
|
parser's event count against an independent count of the page.
|
||||||
|
- **A source resting on one row is a source about to read zero.** `eventCount` in a snapshot's
|
||||||
|
`.meta.json` is the count the whole lane depends on, and a small one is a warning rather than a
|
||||||
|
fact about the game. Endfield's Game8 page read `1` for a week — one row of an *upcoming* table,
|
||||||
|
while four live events sat in a card grid the parser cannot see — and when Game8 re-cut that table
|
||||||
|
for the next version in a notation `parseOpenRange` did not know, the source read `0` and the
|
||||||
|
refresh reported a shape change. Neither number was ever a count of the page. When a source's
|
||||||
|
count is far below what the page shows, find out which shape is being skipped before the count
|
||||||
|
reaches zero and the gate has to guess for you.
|
||||||
|
|
||||||
## Event IDs are localStorage keys
|
## Event IDs are localStorage keys
|
||||||
|
|
||||||
|
|||||||
+13
-2
@@ -146,7 +146,7 @@ All live in `src/ingest/dates.ts`, each returning null rather than inferring any
|
|||||||
| `parseIsoOffsetInstant` | `2026-08-03T21:00-07:00` (a machine-readable `<time datetime>` attribute; **offset required**) | Stella Sora |
|
| `parseIsoOffsetInstant` | `2026-08-03T21:00-07:00` (a machine-readable `<time datetime>` attribute; **offset required**) | Stella Sora |
|
||||||
| `parseDayMonthYearClock` | `12 August 2026`, `10 September 202604:59:59` (day-first; the offset comes from the **column header**, and a clockless boundary keeps its printed day) | Nikke |
|
| `parseDayMonthYearClock` | `12 August 2026`, `10 September 202604:59:59` (day-first; the offset comes from the **column header**, and a clockless boundary keeps its printed day) | Nikke |
|
||||||
| `parseZonelessClockRange` | `July 20, 2026 04:00 – August 10, 2026 03:49` (reads the clock and **discards** it — the page states no zone, so only the printed day is publishable) | Infinity Nikki |
|
| `parseZonelessClockRange` | `July 20, 2026 04:00 – August 10, 2026 03:49` (reads the clock and **discards** it — the page states no zone, so only the printed day is publishable) | Infinity Nikki |
|
||||||
| `parseOpenRange` | `Jul. 24, 2026 - End of 4.6`, `July 10, 2026 - Permanent` | Star Rail, Wuthering Waves |
|
| `parseOpenRange` | `Jul. 24, 2026 - End of 4.6`, `July 10, 2026 - Permanent`, `09/02/2026 - TBA` (**a year is required**, in either notation) | Star Rail, Wuthering Waves, Endfield |
|
||||||
|
|
||||||
**A day-precision result is 00:00Z, and that is a placeholder rather than a time.** Every reader
|
**A day-precision result is 00:00Z, and that is a placeholder rather than a time.** Every reader
|
||||||
above returns `precision: "day"` when the source printed no clock, and stores the date at UTC
|
above returns `precision: "day"` when the source printed no clock, and stores the date at UTC
|
||||||
@@ -168,7 +168,18 @@ reader rather than for the earliest of them. Being generous by nine hours costs
|
|||||||
the bottom of a list; being strict costs a live one.
|
the bottom of a list; being strict costs a live one.
|
||||||
|
|
||||||
`parseOpenRange` is tried last because it is the most permissive — it accepts any leading full date
|
`parseOpenRange` is tried last because it is the most permissive — it accepts any leading full date
|
||||||
and reports no end.
|
and reports no end. It reads **both** notations, month-name and slash, because which one a page uses
|
||||||
|
is house style rather than a statement about certainty: Star Rail writes `End of 4.6` after a month
|
||||||
|
name, and Endfield's Game8 page published its entire 1.5 schedule as `09/02/2026 - TBA`. Reading only
|
||||||
|
the first notation made all nine of those rows undatable, and an undatable row is dropped in silence —
|
||||||
|
the source went from one event to zero and the run reported a shape change. What it may never do is
|
||||||
|
infer a missing year: Game8's summary rows write `08/12 - 08/24`, and this being the last reader tried
|
||||||
|
means a year guessed here becomes a confidently dated event with nothing left to catch it.
|
||||||
|
|
||||||
|
The open-end vocabulary is listed in two places that must agree — `parseOpenRange` decides whether the
|
||||||
|
row is datable, and `RANGE_PREFIX` in `game8.ts` strips the range off the cell to recover the blurb. A
|
||||||
|
word the first knows and the second does not still yields the event, with the leftover end tacked onto
|
||||||
|
the front of its summary (`- TBA Sign-in to get extra pulls for Typhoeus!`).
|
||||||
|
|
||||||
`parseAdjacentFullRange` and `parseYearFirstSlashRange` are anchored at both ends and require a year
|
`parseAdjacentFullRange` and `parseYearFirstSlashRange` are anchored at both ends and require a year
|
||||||
on each half, which is what keeps them from eating prose. `August 12, 2026 Day 3 rewards are doubled`
|
on each half, which is what keeps them from eating prose. `August 12, 2026 Day 3 rewards are doubled`
|
||||||
|
|||||||
Reference in New Issue
Block a user