-
released this
2026-07-30 09:07:11 -05:00 | 243 commits to main since this releaseDeclining to publish is correct — the coverage floors exist so a thin crawl cannot replace a good file — and it is also completely silent. The night a failure becomes chronic logs exactly what the first night logged, and the window still reports success on the strength of the artifacts that did publish.
Patch 16.15 is the worked example:
countersaborted at 55% coverage two nights running whilechampion-counters.jsonkept serving 16.14 data, and the only trace was oneWARNamong 122 others.Added
Each of the four artifacts now carries a miss streak in a new
publish_statetable.outcome level missed, streak < STALE_AFTER_NIGHTS(3)WARNmissed, streak >= STALE_AFTER_NIGHTSERROR, naming the streak anddaysSinceSuccessmissed because something threw ERRORon the first nightpublished after a streak INFO, naming the missed nightspublished normally nothing — the commit line already said so - It counts nights, not runs. The counter advances at most once per local calendar date.
RUN_ON_STARTand a redeploy both re-enter the window, so without that guard, deploying a fix would trip the alarm it was fixing. - Faults skip the streak. A coverage abort is an expected non-result; a schema regression or a 403 from Forgejo is wrong immediately, and giving it three nights would bury the one signal worth acting on.
- The state is in Postgres, not beside the heartbeat, which lives in an ephemeral
/tmp— a redeploy would reset every alarm, and a redeploy is what happens right after shipping a fix for the thing being tracked. - Nothing is recorded when
PUBLISH_ENABLED=false. A smoke run has no publish outcome, and letting it write would leave the production streaks reading stale.
Fixed
- A damage publish failure no longer costs the benchmarks artifact. The two come from one crawl and were documented as publishing independently, but shared a single try/catch — so a schema regression in the first skipped the second, built from rows already paid for.
- The heartbeat is no longer touched after a Riot half that published nothing.
runRiotWindowreturnedvoidand the caller marked the window successful unconditionally, so a night that dedup'd to zero new rows still reported health to the container healthcheck.
Upgrading
No schema change to any published artifact; consumers need no update. The migration is additive and idempotent. One new optional env var,
STALE_AFTER_NIGHTS(default3).Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- It counts nights, not runs. The counter advances at most once per local calendar date.