You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Split out of #432 because #1040, which carried this as "phase 0b", is closed. It blocks 30% of the remaining port and nothing tracks it.
The number
remaining unported suites 241
carrying a NAMED gate (check_skip/pgc_skip/pgc_fail) 66 1281 names 30%
clean 175 2917 names
Measured on a95c360, over the registered suites with no pytest twin, counting distinct names with _names_in (not _bash_names — see my correction in #432 about the two disagreeing enough to reorder the queue).
The top of the queue is in the blocked set: parquet_export_stats, 70 names, three gate calls.
The mechanism
check_skip, pgc_skip and pgc_fail record under the name they are given. expect.cannot_run(reason, detail) records under the reason CODE, validated against a closed list:
So a port cannot emit the string at all, and compare_to_bash.py reports it MISSING. iceberg_fdw is the one pair that hit this and it is declared INCOMPLETE for exactly this reason, which is the precedent this issue generalises.
The entry there also refused the obvious workaround, and I agree with the refusal: naming a passing check could not read the server major, so the gate below cannot be trusted would read as an assertion that the major is unreadable.
There is a second thing going on, and it may be the real one
The grader is static; the gate is dynamic.
if [ "$PGC_MAJOR"-lt 18 ];then
check_skip "the differential analyze path""SKIP ... needs pg_restore_attribute_stats (PG18+)"
pgc_summary
fi
On PG18 and PG19 that branch is not taken, so analyze_differential.sh never records the name. It records it on PG15/16/17 as a SKIP. On the majors where a port actually runs, the bash suite emits no such name — and the grader is asking the port to cover a branch that did not execute.
Three resolutions, not equivalent
cannot_run carries a name as well as its reason code. Unblocks all 1281 at once and keeps the reason keyable for the stream. Largest change to pgc_vacuity.py.
Declare all 66 INCOMPLETE, each with a reason, as iceberg_fdw is. Costs nothing to build and is honest. It also means "one-for-one" stops describing a third of the corpus, and the INCOMPLETE dict becomes the place ports go to stop being graded.
My own preference is 1, weakly, because it is the only one that leaves the grader strict and the ports complete. But this is @jdatcmd's tool and the layer's own escape-hatch design, so I am filing the measurement rather than the patch.
Why it matters now
jd wants the pytest suite released before beta1. Whatever "released" turns out to mean, 30% of the remaining names sitting behind a design question with no open issue is the wrong state to discover late. Filed so it can be answered deliberately.
Split out of #432 because #1040, which carried this as "phase 0b", is closed. It blocks 30% of the remaining port and nothing tracks it.
The number
Measured on
a95c360, over the registered suites with no pytest twin, counting distinct names with_names_in(not_bash_names— see my correction in #432 about the two disagreeing enough to reorder the queue).The top of the queue is in the blocked set:
parquet_export_stats, 70 names, three gate calls.The mechanism
check_skip,pgc_skipandpgc_failrecord under the name they are given.expect.cannot_run(reason, detail)records under the reason CODE, validated against a closed list:So a port cannot emit the string at all, and
compare_to_bash.pyreports it MISSING.iceberg_fdwis the one pair that hit this and it is declared INCOMPLETE for exactly this reason, which is the precedent this issue generalises.The entry there also refused the obvious workaround, and I agree with the refusal: naming a passing check
could not read the server major, so the gate below cannot be trustedwould read as an assertion that the major is unreadable.There is a second thing going on, and it may be the real one
The grader is static; the gate is dynamic.
On PG18 and PG19 that branch is not taken, so
analyze_differential.shnever records the name. It records it on PG15/16/17 as a SKIP. On the majors where a port actually runs, the bash suite emits no such name — and the grader is asking the port to cover a branch that did not execute.Three resolutions, not equivalent
cannot_runcarries a name as well as its reason code. Unblocks all 1281 at once and keeps the reason keyable for the stream. Largest change topgc_vacuity.py.PGC_MAJORtest is not required of a port running on a major where the branch is dead. Smallest change — but it asks the grader to reason about reachability in shell, which is the class this tree has been burned by four times (A sweep over shell source must strip comments AND decide about string literals: four guards got this wrong in one week #1123), so it needs a false-positive budget before it is trusted.iceberg_fdwis. Costs nothing to build and is honest. It also means "one-for-one" stops describing a third of the corpus, and the INCOMPLETE dict becomes the place ports go to stop being graded.My own preference is 1, weakly, because it is the only one that leaves the grader strict and the ports complete. But this is @jdatcmd's tool and the layer's own escape-hatch design, so I am filing the measurement rather than the patch.
Why it matters now
jd wants the pytest suite released before beta1. Whatever "released" turns out to mean, 30% of the remaining names sitting behind a design question with no open issue is the wrong state to discover late. Filed so it can be answered deliberately.
🤖 Generated with Claude Code
https://claude.ai/code/session_012RSw4qMHS7ByE7PY8Ns4cs