From 46bda06226b9f020763459321ffa2327d5a596ed Mon Sep 17 00:00:00 2001 From: Swung0x48 Date: Tue, 22 Sep 2026 21:22:21 -0400 Subject: [PATCH] [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 , 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" --- scripts/ci/control_smoke_test.sh | 5 +++++ scripts/ci/retrace_pull_library_control.sh | 24 ++++++++++++++++++---- scripts/ci/testdata/stub_ctest.sh | 16 +++++++++++++++ 3 files changed, 41 insertions(+), 4 deletions(-) mode change 100755 => 100644 scripts/ci/testdata/stub_ctest.sh diff --git a/scripts/ci/control_smoke_test.sh b/scripts/ci/control_smoke_test.sh index 8ef470c8..520ddbd1 100644 --- a/scripts/ci/control_smoke_test.sh +++ b/scripts/ci/control_smoke_test.sh @@ -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 diff --git a/scripts/ci/retrace_pull_library_control.sh b/scripts/ci/retrace_pull_library_control.sh index 16ef9821..51ede2a2 100644 --- a/scripts/ci/retrace_pull_library_control.sh +++ b/scripts/ci/retrace_pull_library_control.sh @@ -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 , 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 diff --git a/scripts/ci/testdata/stub_ctest.sh b/scripts/ci/testdata/stub_ctest.sh old mode 100755 new mode 100644 index 9cb80dac..947a9da9 --- a/scripts/ci/testdata/stub_ctest.sh +++ b/scripts/ci/testdata/stub_ctest.sh @@ -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 +# ... 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