[scripts] (P7): the pull-library control accepts the no-client-log sentence a pull build has produced since the per-role log rename

- retrace_pull_library_control.sh required run_trace_case.cmake's "never reported resolving
  it", the marker-search sentence. Since P6's one-log-per-role rename a pull library never
  reaches that search: it has one role and writes MOBILEGL_LOG_FILE_PATH unchanged
  (output/mobilegl.log, Log.h's pull arm of RoleLogPath), the runner reads
  output/mobilegl.client.log and stops one check earlier with "the run wrote no <client log>,
  so there is no evidence the transport ever resolved" - so the control's hole-2 check
  refused its own red and the step exited 1 on every pull-library run
- measured on this tree with the real ctest, build-linux's pull library over build-split's
  frozen split library, SPLIT_TRANSPORT=inproc: control rc 1, "::error::the split retrace
  went red (ctest exit 8) ... never says the library did not resolve the transport", the
  runner's fatal at the no-client-log check. With this change the same run passes for its
  own reason on both inproc and spawn
- EVIDENCE carries both sentences as grep -F's newline-separated patterns, so the evidence
  line the red-check perturbs is unchanged; both are the transport-identity assertion
  refusing the same library for the same reason, and neither is a loader failure, a missing
  fixture, a timeout or an SSIM drop
- stub_ctest.sh gains retrace-evidence-nolog, the no-client-log fatal CMake-wrapped across
  lines the way the real one arrives; control_smoke_test.sh expects it to PASS (23/23); the
  red-check still reds "red without the transport-resolution message"
This commit is contained in:
2026-09-22 21:28:02 -04:00
parent 4d54027f82
commit 46bda06226
3 changed files with 41 additions and 4 deletions
+5
View File
@@ -116,6 +116,11 @@ expect FAILED "red without the transport-resolution message" -- run_retrace retr
# The real thing - and note the stub emits it CMake-wrapped across two lines, which a line-oriented
# grep for the literal sentence would miss.
expect PASSED "run_trace_case.cmake's own sentence, wrapped" -- run_retrace retrace-evidence
# The sentence a pull library ACTUALLY gets since P6's log rename: it wrote the unsuffixed
# mobilegl.log, the runner reads mobilegl.client.log, and the no-log check fires before the marker
# search. The control accepted only the marker sentence until B3's fix round 2, and was red on
# every real pull-library run (measured on the B3 package tree).
expect PASSED "the no-client-log sentence a pull library gets" -- run_retrace retrace-evidence-nolog
# The pull library replaying green is the failure this control exists to catch.
expect FAILED "a pull library passed the split retrace" -- run_retrace retrace-green
+20 -4
View File
@@ -49,9 +49,25 @@ PULL_LIBRARY="${PULL_LIBRARY:?PULL_LIBRARY must name the pull build libMobileGL.
FROZEN_LIBRARY="${FROZEN_LIBRARY:?FROZEN_LIBRARY must name the path the cases have baked in}"
mkdir -p "${CONTROL_TMPDIR}"
# run_trace_case.cmake's own sentence for "this library never resolved the transport". Anchored on
# the distinctive clause rather than on the whole paragraph, which carries substituted paths.
EVIDENCE='never reported resolving it'
# run_trace_case.cmake's own sentences for "this library never resolved the transport", one per
# line (grep -F takes its patterns newline-separated). Anchored on the distinctive clause rather
# than on the whole paragraph, which carries substituted paths.
#
# TWO SENTENCES SINCE P6's LOG RENAME, and the second is the one a pull library actually gets.
# A pull build has one log role and writes MOBILEGL_LOG_FILE_PATH unchanged - output/mobilegl.log
# (MG_Util/Debug/Log.h, the pull arm of RoleLogPath) - while the disaggregated build's readers,
# run_trace_case.cmake among them, read output/mobilegl.client.log. So the pull library never
# reaches the marker search that says "never reported resolving it": the runner stops one check
# earlier, at "the run wrote no <client log>, so there is no evidence the transport ever
# resolved". Both are the transport-identity assertion refusing the same library for the same
# reason (a pull build has no split log for the marker to be in); neither is a loader failure, a
# missing fixture, a timeout or an SSIM drop, which are the reds hole 2 below exists to refuse.
# MEASURED on the B3 package tree with the real ctest and the real pull library: with only the
# first sentence here, the control exited 1 through hole 2 on every pull-library run - the step
# had been red for no product reason since the rename. scripts/ci/testdata/stub_ctest.sh's
# retrace-evidence-nolog mode reproduces the shape.
EVIDENCE='never reported resolving it
no evidence the transport ever resolved'
selector="^MobileGLTraceReplay\.${CASE}\.${BACKEND}$"
@@ -130,7 +146,7 @@ fi
# indent, and a line-oriented grep for the literal finds nothing. That is not hypothetical - it is
# the shape the stub reproduces in scripts/ci/testdata/stub_ctest.sh.
if ! tr -s '[:space:]' ' ' < "${out}" | grep -qF "${EVIDENCE}"; then
echo "::error::the split retrace went red (ctest exit ${control_rc}) with the pull library in place, but the failure never says the library did not resolve the transport - run_trace_case.cmake's \"${EVIDENCE}\" is absent from the output. A loader failure, a missing fixture, a timeout or an SSIM drop all land here, and none of them establishes that the transport-identity assertion is what caught the pull library. Only 'non-zero ctest' used to be checked (ID-46 finding 8b)."
echo "::error::the split retrace went red (ctest exit ${control_rc}) with the pull library in place, but the failure never says the library did not resolve the transport - neither of run_trace_case.cmake's sentences (\"${EVIDENCE//$'\n'/\" / \"}\") is in the output. A loader failure, a missing fixture, a timeout or an SSIM drop all land here, and none of them establishes that the transport-identity assertion is what caught the pull library. Only 'non-zero ctest' used to be checked (ID-46 finding 8b)."
exit 1
fi
Vendored Executable → Regular
+16
View File
@@ -28,6 +28,10 @@
# retrace-noselect `ctest -N` matches nothing; the run exits 8 the way --no-tests=error does
# retrace-unrelated one match; the run fails without naming the transport
# retrace-evidence one match; the run fails with run_trace_case.cmake's own sentence
# retrace-evidence-nolog
# one match; the run fails one check earlier, with the runner's "wrote no
# <client log> ... no evidence the transport ever resolved" - the shape a
# PULL library produces since P6's per-role log rename
# retrace-green one match; the run PASSES
#
# EXIT GATE E2's DRAW-DROP CONTROL (scripts/ci/retrace_drop_draw_control.sh). The library's own
@@ -291,6 +295,18 @@ case "${mode}" in
echo ' "MOBILEGL_TRANSPORT=inproc - the MGPipe record stream".'
exit 8
;;
retrace-evidence-nolog)
# What a pull library gets since P6: it wrote output/mobilegl.log (one role, no suffix), the
# runner reads output/mobilegl.client.log and stops at the no-log check BEFORE the marker
# search. CMake-wrapped like the mode above, with the clause split across lines.
echo "1/1 Test #1: MobileGLTraceReplay.OpenRA.DirectGLES ...***Failed"
echo "CMake Error at run_trace_case.cmake:270 (message):"
echo " MOBILEGL_TRANSPORT=inproc is set for OpenRA DirectGLES but the run wrote no"
echo " OpenRA/DirectGLES/output/mobilegl.client.log, so there is no evidence the"
echo " transport ever resolved. A split retrace with no library log cannot be"
echo " counted as a split retrace."
exit 8
;;
retrace-green)
echo "100% tests passed, 0 tests failed out of 1"
exit 0