report a source that is quiet rather than broken, instead of a bare 0

The build log prints a count per source, and CI now declines to fail on
a page that states its own emptiness — which leaves that source showing
an unexplained 0, reading as exactly the fault the gate just decided it
was not. The zero we are content with is the one that has to say why.

It is also the only line that would ever prompt anyone to ask whether a
lane quiet for a month is a game between patches or a wiki that reworded
the sentence a statesNoEvents check is still matching. Nothing else in
the pipeline can tell those apart.

The test count in the layout block was stale at 898 and moves with these
two commits, so it is corrected here.

Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
This commit is contained in:
Lucas Winther
2026-09-06 18:03:46 +02:00
co-authored by Claude Opus 5
parent 1156c358a7
commit 8f3e851274
5 changed files with 60 additions and 4 deletions
+19
View File
@@ -165,3 +165,22 @@ export function staleSources(sources: readonly SourceHealth[]): SourceHealth[] {
(s) => s.parsedCount !== null && s.parsedCount > 0 && s.eventCount === 0,
);
}
/**
* Sources whose page says it currently lists no events.
*
* The third empty, and the only one that is neither a fault nor a gap: a gacha
* calendar goes quiet between versions and this page said so in words. Not
* thrown, for the reason `statesNoEvents` exists at all.
*
* Reported, though, and that is the half worth defending. Excusing this zero
* from the build is not the same as saying nothing about it — the build log
* prints a count per source, and an unexplained `0` reads as exactly the fault
* this distinction denies. It is also the only thing that would ever prompt
* somebody to check whether a lane has been quiet for a month because the game
* is between patches or because the page's wording changed under a
* `statesNoEvents` that still matches.
*/
export function quietSources(sources: readonly SourceHealth[]): SourceHealth[] {
return sources.filter((s) => s.statesNoEvents);
}