-
released this
2026-08-02 18:05:04 -05:00 | 221 commits to main since this releaseThe boot log now proves each dependency instead of asserting it. Five checks,
one request each, concurrent, reported as a block:preflight/db | ok server=PostgreSQL 17.10 preflight/riot | ok platform=na1 band=GOLD I entries=205 preflight/patch | ok patch=16.15 preflight/forgejo | ok target=joeyr/lol-companion-data@main push=true preflight/opgg | ok query=na/gold_plus/ranked bytes=749242 preflight/summary | every dependency answered checks=5Why at boot
This service is asleep 21 hours a day and does everything that matters in one
unattended burst, so every dependency it has was discovered broken at the worst
possible moment. A rejected Forgejo token surfaced at the commit, after a full
night of crawling had already been paid for in API requests. A bad
RIOT_API_KEYsurfaced at 02:00 with nobody watching. An op.gg block surfaced
as a coverage abort two hours in. In each case the container had been running
for hours reporting nothing wrong, because it had not yet tried anything.The Forgejo check
The one that pays for the rest. It verifies three things with three different
fixes, and a naive "does the token work" probe passes two of them:- a read-only token authenticates perfectly and then fails at the commit, so
permissions.pushis checked directly rather than inferred from a 200; - a token scoped to the wrong repo 404s in a way that reads like a deleted
repo; - a missing
dataBranchis a typo in one env var, so the branch endpoint is
checked by name — the failure line quotes the branch it looked for.
Data Dragon, listed for the first time
It is the only dependency with no credential to get wrong, which is why it went
unlisted. But every artifact is stamped with the patch resolved from it and the
crawl filters matches on it, so an outage does not degrade a window, it ends
one. The resolved patch earns its line anyway: it answers "which patch is
tonight's data for?" hours before anything else would say.op.gg reports bytes, not a status
Its failure mode is a 200. The challenge page is served with an OK status and no
data — that is whypage.tssends a desktop User-Agent at all. Four figures
where six are expected is that page, and it is visible at a glance.Nothing here is fatal
A dead Forgejo token must not cost a night of Riot data that a fixed token could
publish tomorrow; the two halves already fail independently by design. And a
boot that exited would have Swarm restart it on a loop, churning away the very
lines that say what is wrong. The checks report, the operator decides.They are probes rather than crawls: no retries, and a 10s cap each. A dependency
that is merely slow at boot is not worth delaying the boot over, and the answer
a retry would eventually get is the answer the window will get for itself.Also
Store.ping(), reporting the server version.migrate()already proved
connectivity, but only as a side effect of the DDL — it says the database was
reachable, not which database. A pool aimed at the wrong Postgres migrates
exactly as cleanly as one aimed at the right one, and an empty schema is the
expected state of both.
Minor rather than patch for the added boot output and the new
Store.ping().
No artifact, schema, or published file changes.Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- a read-only token authenticates perfectly and then fails at the commit, so