Skip to content

fix(nightly): fail on empty filters, correct the coverage claim, detect upstream drift - #349

Merged
elronbandel merged 1 commit into
mainfrom
elron/nightly-drift
Aug 12, 2026
Merged

fix(nightly): fail on empty filters, correct the coverage claim, detect upstream drift#349
elronbandel merged 1 commit into
mainfrom
elron/nightly-drift

Conversation

@elronbandel

Copy link
Copy Markdown
Contributor

The nightlies' role changed when PRs started testing what changed (#327, #333): they are no longer the safety net for changed code — they are the only thing that can catch what changes when the repo does not.

Three fixes

1. Silent green. nightly-replay and nightly-agents-smoke exited 0 when a dispatch filter matched no tests, so a typo'd or stale filter reported success having run nothing. Now a loud failure.

2. Stale claim. nightly-oracle advertised "~78 checks" in two comments; the suite has 27 (11 auto-covered exact-match benchmarks + 16 pinned SPECIAL). Corrected, with how to list them (ORACLE_LIST=1).

3. Upstream drift — the gap no PR can close. The input hash sees the repository, so an upstream rebuild (a new python:3.12-slim, a moved :latest) changes what our images contain while every hash and every freshness verdict stays put. That is exactly how mmmu's dataset could 404 for months. New containers/scripts/external-drift.sh resolves the digest of all 18 external bases — taken from fleet-hash's own externals column, so it cannot drift from what the fleet actually builds FROM — and warns per moved digest. The Fleet status workflow now also runs nightly, comparing against the previous run via the Actions cache and publishing the digest table to the job summary.

Report-only: the response to drift is a force_rebuild dispatch, which stays a human decision.

Deliberately not done

Filtering the nightlies by the affected set. I recommended this earlier and it is wrong: on a quiet day the affected set is empty, so a filtered nightly would test nothing — precisely when drift detection matters most. The affected set belongs on PRs, where it already is.

Verified

18 bases resolved live. Seeding a previous-digest file with one altered digest produces ::warning::upstream base moved: alpine:3.20 … and exit 1; an unchanged file exits 0. actionlint/shellcheck clean.

Rules checked against

  • .agents/contributing/RULES.md 1–3 (code-only; this section).
  • .agents/verification/RULES.md 2 (nightly scope), 8 (fail loud — the whole point of fix 1).
  • .agents/delivery/RULES.md 11 (external digests are inputs; this makes their movement observable ahead of the release-time resolution the rule defers).

…ct upstream drift

The nightlies' job changed when PRs started testing what changed: they
are no longer the safety net for changed code, they are the only thing
that can catch what changes when the repo does NOT. Three fixes:

1. Silent green. nightly-replay and nightly-agents-smoke exited 0 when
   a filter matched no tests, so a typo'd or stale dispatch filter
   reported success having run nothing. Now a loud failure.

2. Stale claim. nightly-oracle advertised '~78 checks' in two places;
   the suite actually has 27 (11 auto-covered exact-match benchmarks +
   16 pinned SPECIAL). Comment now states the real number and how to
   list it (ORACLE_LIST=1).

3. Upstream drift — the gap no PR can close. The input hash sees the
   repository, so an upstream rebuild (a new python:3.12-slim, a moved
   :latest) changes what our images contain while every hash and every
   freshness verdict stays put; mmmu's dataset 404'd for months exactly
   that way. containers/scripts/external-drift.sh resolves the digest of
   all 18 external bases (from fleet-hash's own externals column, so it
   cannot drift from what we build FROM) and warns per moved digest; the
   Fleet status workflow now also runs nightly, comparing against the
   previous run's digests via the Actions cache and publishing the table
   to the job summary. Report-only: the response to drift is a
   force_rebuild dispatch, which stays a human decision.

Deliberately NOT done: filtering the nightlies by the affected set. On a
quiet day that set is empty, so a filtered nightly would test nothing —
exactly when drift detection matters most.

Verified live: 18 bases resolved; seeding a previous-digest file with
one altered digest produces the warning and exit 1, and an unchanged
file exits 0.

Signed-off-by: Elron Bandel <elron.bandel@ibm.com>
@elronbandel
elronbandel merged commit fe154f3 into main Aug 12, 2026
6 checks passed
@elronbandel
elronbandel deleted the elron/nightly-drift branch August 12, 2026 07:36
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant