From 30d35952135b1944c8e272c719f8fc2f806ad072 Mon Sep 17 00:00:00 2001 From: Swung0x48 Date: Tue, 22 Sep 2026 21:20:29 -0400 Subject: [PATCH] [ci] (P7): the verify-split artifact keeps the green lane run, not the controls that overwrote it - both negative-control steps re-run 12 ambient VerifySplit. entries with a knob exported, and an ambient entry writes to its own per-entry path under verify-split-logs/ which the library opens "w" - so the upload at the end of the job collected twelve CONTROL logs sitting under the LANE's names - if: always() made it worse rather than better: a failure investigation is exactly when the overwritten half is the half somebody needs - the arm proof is now followed by a cp -a to verify-split-logs-lane/ (plus the lane's JUnit), and the upload takes both trees - the green run the arm proof read, and whatever the controls left behind --- .github/workflows/test.yml | 22 +++++++++++++++++++++ docs/Disaggregated/notes/p7/verify-split.md | 5 +++++ 2 files changed, 27 insertions(+) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 01e523da..68bc9aac 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -1039,6 +1039,23 @@ jobs: verify-split-arming verify-split-logs "${RUNNER_TEMP}/verify-split.xml" \ "${GITHUB_WORKSPACE}/MobileGL/MG_IntegrationTest/Harness/verify-split-unarmed-expected.txt" + # THE GREEN LANE'S LOGS, KEPT BEFORE THE CONTROLS OVERWRITE THEM. Each control step below + # re-runs ambient VerifySplit. entries with a knob exported, and an ambient entry writes to + # ITS OWN per-entry path under verify-split-logs/ - which the library opens "w". So by the + # time the upload step at the end of this job runs, twelve of those files are the CONTROL + # runs' logs sitting under the LANE's names: an artifact showing deliberate divergences, + # with the green run they were meant to be evidence of already gone. `if: always()` on the + # upload made that worse rather than better, because a failure investigation is exactly + # when the overwritten half is the half somebody needs. + - name: Keep the green lane logs before the controls overwrite them + if: always() + working-directory: build-verify-split/MobileGL/MG_IntegrationTest + run: | + rm -rf verify-split-logs-lane + cp -a verify-split-logs verify-split-logs-lane + cp -p "${RUNNER_TEMP}/verify-split.xml" verify-split-logs-lane/ || true + echo "kept $(ls verify-split-logs-lane | wc -l) file(s) from the green lane run" + # NEGATIVE CONTROL A ON THE SPLIT ARM - integration-verify's step A, same knob, same shape # (this step passes when ctest FAILS), aimed at the ambient VerifySplit. entries of BOTH @@ -1124,12 +1141,17 @@ jobs: fi echo "the omitted stamp turned the split lane red, as it must" + # BOTH SETS, AND THEY ARE DIFFERENT EVIDENCE. verify-split-logs-lane/ is the green run the + # arm proof read; verify-split-logs/ is whatever the control steps left behind, which for + # twelve entries is a deliberately red re-run under the same name. Uploading only the + # second - which is what this step did before the copy above existed - loses the first. - name: Upload verify-split lane logs if: always() uses: actions/upload-artifact@v7 with: name: integration-verify-split-logs path: | + build-verify-split/MobileGL/MG_IntegrationTest/verify-split-logs-lane/** build-verify-split/MobileGL/MG_IntegrationTest/verify-split-logs/** build-verify-split/MobileGL/MG_IntegrationTest/pipe-*split*.log* if-no-files-found: warn diff --git a/docs/Disaggregated/notes/p7/verify-split.md b/docs/Disaggregated/notes/p7/verify-split.md index f886531d..efe9e9d0 100644 --- a/docs/Disaggregated/notes/p7/verify-split.md +++ b/docs/Disaggregated/notes/p7/verify-split.md @@ -111,6 +111,11 @@ upload,所以描述符宣告 `(target, level)` 而调用递空指针,会走 完整性查询(2,只有 DirectGLES 半边——DirectVulkan 上这两条 skip,由 skip 规则吸收);只 fork 的 poison 父进程(2, 帧画在子进程里、写子进程自己的日志)。 +- **CI 上传的是两套日志(V1 修复轮改)。** 两个负控步骤各自用旋钮重跑 12 条 ambient `VerifySplit.` 条目,而 + ambient 条目写的就是 `verify-split-logs/` 下它自己那份私有路径(库以 `"w"` 打开),于是上传步骤收走的那 12 个 + 文件是**负控那次红跑**的日志、却顶着车道条目的名字——绿跑的证据已经没了,而且 `if: always()` 让这件事在**失败 + 排查时**最严重。现在臂证明之后先 `cp -a` 出 `verify-split-logs-lane/`(连同 JUnit),两套一起上传。 + ### 2.2 发现 A(真实分歧,已定位;改的是预言,不是规则) **用例与首个分歧记录。** 第一次整车道运行(`MOBILEGL_PIPE_VERIFY_FATAL=0` 普查):1068 条里 **220** 条、