[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
This commit is contained in:
2026-09-22 21:35:06 -04:00
parent b4f830942b
commit 30d3595213
2 changed files with 27 additions and 0 deletions
+22
View File
@@ -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
@@ -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** 条、