Skip to content

Commit f3271f5

Browse files
committed
gate: fail loudly when python_gate copy can't be made
Pushes 36, 37, 38 all gated against the stale python_gate from push 33 (8382896), not their respective HEAD binaries. Root cause: 'cp "$PYTHON" "${PYTHON}_gate" 2>/dev/null || true'. When a prior gate left python_gate held open (or otherwise busy), cp failed with 'Text file busy', stderr was discarded, '|| true' swallowed the exit code, and PYTHON pointed to the leftover stale copy. Subsequent test runs reported 981 PASS — against a binary from 3 commits ago. Fix: rm -f the destination first, then cp without || true. If cp fails for any reason, set -e aborts the gate. No more silent fallback to a stale binary. Discovery: testkeeper investigated SIGSEGV during G1.6 LIR-capture prep on the actual HEAD binary (carrying generalist's in-flight LOAD_ATTR_SLOT stash). The crash didn't reproduce on python_gate because python_gate was 3 commits old and predated the SLOT work. The version-string mismatch ('79890e7b73-dirty' vs '8382896c85') made the stale-binary substitution visible. Also adds catch python#4 to docs/wiring_catches.md per supervisor 2026-04-22 00:42:38Z directive.
1 parent 79890e7 commit f3271f5

2 files changed

Lines changed: 10 additions & 2 deletions

File tree

docs/wiring_catches.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ caught it> <root cause class> <test-bug | emit-bug | gate-script bug>`.
1616
| 1 | 2026-04-21 | 0e62d9108b | wiring smoke `load_attr_generic` | `import sys` in body → IMPORT_NAME → JIT PYJIT_RESULT_UNKNOWN_ERROR at force_compile | test-bug |
1717
| 2 | 2026-04-21 | 15feea07c9 | ARM64 gate (push 36 stash bracket) | `git stash push -u` captured SCP'd bundle inside cpython tree → fetch failed silently | gate-script bug |
1818
| 3 | 2026-04-21 | 91d5b60f5d | ARM64 commit-match check | `grep -oP 'ARM64_COMMIT=\K\S+'` matched heredoc body literal `$(git rev-parse...)` not runtime echo | gate-script bug |
19+
| 4 | 2026-04-22 | 79890e7b73 | testkeeper G1.6 prep investigation | `cp "$PYTHON" "${PYTHON}_gate" \|\| true` silently tolerated 'Text file busy' → gate ran against stale `python_gate` (8382896c85) for pushes 36/37/38; masked emitGetIter validation AND latent LOAD_ATTR_SLOT segfault in generalist's in-flight stash | gate-script bug |
1920

2021
## Meta-observation (supervisor 2026-04-22 00:17:13Z)
2122

scripts/gate_phoenix.sh

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,8 +73,15 @@ if ! "$SCRIPT_DIR/build_phoenix.sh" $BUILD_FLAGS; then
7373
fi
7474
echo "Build: PASS" | tee -a "$RESULTS_FILE"
7575

76-
# Copy binary to avoid "Text file busy" if another process holds the original
77-
cp "$PYTHON" "${PYTHON}_gate" 2>/dev/null || true
76+
# Copy binary to avoid "Text file busy" if another process holds the original.
77+
# rm before cp so a busy ${PYTHON}_gate from a prior run cannot leave a
78+
# stale binary in place — that masquerades as PASS while the gate actually
79+
# tests the OLD binary. Pre-2026-04-22 the cp was '|| true' which silently
80+
# tolerated 'Text file busy' and ran the gate against whatever stale
81+
# ${PYTHON}_gate happened to already exist (caught at 00:41Z, push 38).
82+
# Now: rm forces a fresh copy; cp failure aborts the gate.
83+
rm -f "${PYTHON}_gate"
84+
cp "$PYTHON" "${PYTHON}_gate"
7885
PYTHON="${PYTHON}_gate"
7986

8087
# Step 1b: _reg usage policy gate (no-FS DeoptBase factories banned in simplify_c.c)

0 commit comments

Comments
 (0)