diff --git a/MobileGL/MG_Test/Util/PipeStatsTest.cpp b/MobileGL/MG_Test/Util/PipeStatsTest.cpp
index b4d57442..c1036b1c 100644
--- a/MobileGL/MG_Test/Util/PipeStatsTest.cpp
+++ b/MobileGL/MG_Test/Util/PipeStatsTest.cpp
@@ -165,6 +165,12 @@ namespace {
// base name must not exist as a file, so a reader that was not updated gets ENOENT and says so
// rather than a file that looks like a complete run and is half of one.
TEST_F(PipeStatsTest, JsonDumpPathIsRoleDerivedAndTheBaseNameIsNeverOpened) {
+#if !MOBILEGL_BUILD_DISAGGREGATED
+ // RoleDerivedJsonDumpPathForTesting is compiled only with two roles (gate G1: a monolith
+ // build has one and needs no derivation). The NAME stays registered in every build so
+ // ctest -N matches between flavours; the body only exists where the collision does.
+ GTEST_SKIP() << "role-derived dump paths only exist with two roles (MOBILEGL_BUILD_DISAGGREGATED=OFF)";
+#else
using MobileGL::MG_Util::Debug::LogRole;
const String saved = MobileGL::MG_Config::Features.PipeStatsFile;
@@ -195,6 +201,7 @@ namespace {
"that is the trunc-versus-trunc collision this derivation exists to prevent";
MobileGL::MG_Config::Features.PipeStatsFile = saved;
+#endif
}
TEST_F(PipeStatsTest, GateHitsAndMissesAreSeparateCounters) {
diff --git a/scripts/ci/runtime_mode_proof.py b/scripts/ci/runtime_mode_proof.py
index 1a49b8ec..2045fdd8 100644
--- a/scripts/ci/runtime_mode_proof.py
+++ b/scripts/ci/runtime_mode_proof.py
@@ -70,8 +70,21 @@ def logs_proof(discovery, junit):
logs = helper.marker_log_paths(lane)
proof = {}
for name in sorted(RSP_CASES):
+ # P6 splits the library log per role: MOBILEGL_LOG_FILE_PATH is a BASE NAME and the
+ # files that exist are .client.log / .server.log. Reading the base directly
+ # is FileNotFoundError after the split - the same class of reader the role-split
+ # landing already fixed everywhere else.
path = Path(logs[name])
- proof[name] = {'private_log': str(path), **inproc_log_proof(path.read_text(encoding='utf-8', errors='replace'))}
+ if not helper.any_role_file(path):
+ raise RuntimeError(
+ f'{name}: no role log under {path} '
+ f'(looked for {helper.role_paths(path)}); the library never opened the sink')
+ text = helper.read_role_logs(path)
+ proof[name] = {
+ 'private_log': str(path),
+ 'role_logs': helper.role_paths(path),
+ **inproc_log_proof(text),
+ }
return proof