[tools] (P7): a spawn retrace with no server log is a fatal, not a clean census

Fable review of the B3 rework, should-fix: run_trace_case.cmake read the
server log only `if(EXISTS ...)`. Under spawn the server process writes its
own file, and the lines the runner counts out of it - the applier Fatal{
lines and the MGWIRE-FLOOR unsound-serial-complete line, which only the
server's VulkanRenderer::OnSubmitsCompletedUpTo emits - are nowhere else,
so a server that died before its first line read as "0 lines" and went
green. The client log was already fail-closed, and so was the tcp arm's
forwarded server log; plain spawn was not.

The plain-spawn branch of the transport block now FATALs when
mobilegl.server.log does not exist, beside the tcp arm's identical check.

Demonstration: the SPAWN ctest command line with TRACE_REPLAY_EXE replaced
by a wrapper that runs the real replay and then deletes
output/mobilegl.server.log (541 lines):
  runner at aab01275 -> rc 0, "Fatal{ lines across ... : 0",
    "MGWIRE-FLOOR unsound-serial-complete lines: 0" (green, half unseen)
  this runner        -> rc 1:
    CMake Error at run_trace_case.cmake:321 (message):
      OpenRA DirectVulkan: MOBILEGL_TRANSPORT=spawn but the run wrote no
      .../output/mobilegl.server.log, so the server role's Fatal{ and
      MGWIRE-FLOOR lines cannot be counted.  A spawn retrace with no
      server log cannot be counted as a clean one.
MobileGLTraceReplay.OpenRA.DirectVulkan.SPLIT / .SPAWN unmodified: both
pass, ssim 1.000000, 0 px, 0 MGWIRE-FLOOR lines.
This commit is contained in:
2026-09-22 20:49:45 -04:00
parent 266d6a32f8
commit 7ae1c11de0
+13
View File
@@ -311,6 +311,19 @@ if(DEFINED ENV{MOBILEGL_TRANSPORT} AND NOT "$ENV{MOBILEGL_TRANSPORT}" STREQUAL "
endif()
else()
set(split_expected_second "spawn ARMED - the server role runs in pid ")
# FAIL-CLOSED LIKE THE CLIENT LOG ABOVE AND THE TCP ARM'S SERVER LOG. Under spawn
# the server process writes its own file, and the lines this runner counts out of
# it - every applier Fatal{, and the MGWIRE-FLOOR line, which only the server's
# VulkanRenderer::OnSubmitsCompletedUpTo emits - exist nowhere else. A server that
# died before its first line leaves no file, and "no file" read as "0 lines" is a
# green census of the half of the session that was never seen.
if(NOT EXISTS "${mobilegl_server_log}")
message(FATAL_ERROR
"${split_case}: MOBILEGL_TRANSPORT=spawn but the run wrote no "
"${mobilegl_server_log}, so the server role's Fatal{ and MGWIRE-FLOOR "
"lines cannot be counted. A spawn retrace with no server log cannot be "
"counted as a clean one.")
endif()
endif()
else()
message(FATAL_ERROR