Skip to content

Eleven suites record every check as major=unknown, so none of their 481 checks can ever be seeded (the #1109 defect, wider) #1121

Description

@jdatcmd

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

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions