Eight suites emit every RESULT record with major=unknown, so no ledger row for any of their checks could ever be seeded. 248 of 248 records measured.
This is the same defect #1109 fixed for concurrency, unique_conc and update_conc — one line each — in three suites that were found the same way. These eight were not in that population and were missed.
The mechanism
pgc_record writes "${PGC_MAJOR:-unknown}" (test/lib.sh:1201), and PGC_MAJOR is set inside pgc_setup (test/lib.sh:302, via pgc_major_of). A suite that sources lib.sh — so pgc_record exists and runs — but never calls pgc_setup records every check against the literal string unknown.
Measured, not inferred
Selected statically (sources lib.sh, no pgc_setup, no PGC_MAJOR=), then each one run on PG 17 and its records counted:
| suite |
RESULT records |
major=unknown |
smoke |
9 |
9 |
audit |
31 |
31 |
objstore_stash_recovery |
17 |
17 |
phase2 |
42 |
42 |
phase3 |
32 |
32 |
phase4 |
38 |
38 |
phase5 |
36 |
36 |
phase6 |
43 |
43 |
| total |
248 |
248 |
pg_upgrade meets the same static test but produced 0 records here: it exits 2 without a second major installed, so it is a ninth candidate this measurement cannot speak for.
Why it matters
A ledger row claiming majors=unknown matches no run. The gate considers a row only where its majors intersect the majors the run observed, and no run ever observes unknown. So:
- none of these 248 checks can be seeded, and
- if one were seeded anyway, it could never be matched again.
That is part of why suites_not_covered has a floor: eight suites' worth of checks are structurally unseedable, independent of anyone's intent to cover them.
How it surfaced
@OffgridwithJD saw the gate print this run observed 18, unknown during #1117's matrix and could not name the suite — the build directory is removed on success, so the evidence is gone by the time the summary is read. (That cleanup-on-success trap is worth its own note: the surviving artifact after a clean run is always the previous failure.)
They declined to file a claim they could not support. The static route does not need the builddir, which is how this one is nailed down.
The fix
The same as #1109's: set PGC_MAJOR from the PG_CONFIG these suites already resolve, one line each. #1109's diff is the template —
PGC_MAJOR="$(pgc_major_of "$PG_CONFIG")"
with a comment saying why, since the reason is not local to the line.
Worth doing in one change across all eight rather than piecemeal, and worth a guard afterwards: no suite that sources lib.sh may emit a RESULT record whose major is unknown. That is checkable from a run's own logs and would have caught all eleven — these eight and #1109's three — before either of us went looking.
🤖 Generated with Claude Code
https://claude.ai/code/session_01NhwXKAgSmYDUjteWkfajHK
Eight suites emit every RESULT record with
major=unknown, so no ledger row for any of their checks could ever be seeded. 248 of 248 records measured.This is the same defect #1109 fixed for
concurrency,unique_concandupdate_conc— one line each — in three suites that were found the same way. These eight were not in that population and were missed.The mechanism
pgc_recordwrites"${PGC_MAJOR:-unknown}"(test/lib.sh:1201), andPGC_MAJORis set insidepgc_setup(test/lib.sh:302, viapgc_major_of). A suite that sourceslib.sh— sopgc_recordexists and runs — but never callspgc_setuprecords every check against the literal stringunknown.Measured, not inferred
Selected statically (sources
lib.sh, nopgc_setup, noPGC_MAJOR=), then each one run on PG 17 and its records counted:major=unknownsmokeauditobjstore_stash_recoveryphase2phase3phase4phase5phase6pg_upgrademeets the same static test but produced 0 records here: it exits 2 without a second major installed, so it is a ninth candidate this measurement cannot speak for.Why it matters
A ledger row claiming
majors=unknownmatches no run. The gate considers a row only where its majors intersect the majors the run observed, and no run ever observesunknown. So:That is part of why
suites_not_coveredhas a floor: eight suites' worth of checks are structurally unseedable, independent of anyone's intent to cover them.How it surfaced
@OffgridwithJD saw the gate print
this run observed 18, unknownduring #1117's matrix and could not name the suite — the build directory is removed on success, so the evidence is gone by the time the summary is read. (That cleanup-on-success trap is worth its own note: the surviving artifact after a clean run is always the previous failure.)They declined to file a claim they could not support. The static route does not need the builddir, which is how this one is nailed down.
The fix
The same as #1109's: set
PGC_MAJORfrom thePG_CONFIGthese suites already resolve, one line each. #1109's diff is the template —PGC_MAJOR="$(pgc_major_of "$PG_CONFIG")"with a comment saying why, since the reason is not local to the line.
Worth doing in one change across all eight rather than piecemeal, and worth a guard afterwards: no suite that sources
lib.shmay emit a RESULT record whose major isunknown. That is checkable from a run's own logs and would have caught all eleven — these eight and #1109's three — before either of us went looking.🤖 Generated with Claude Code
https://claude.ai/code/session_01NhwXKAgSmYDUjteWkfajHK