From 9f060e12a03623cf6b28306015a677060ca7a390 Mon Sep 17 00:00:00 2001 From: Joe Wicentowski Date: Sun, 10 May 2026 11:46:10 -0400 Subject: [PATCH] [ci] compare-results.xslt: surface runner-JAR drift warning when build SHAs differ Adds a `cr:warnings` block to the comparison report that fires when the previous and current XQTS runs were produced by different runner JAR builds. Without this, develop-branch deltas, runner-source bugfixes, and shaded-`exist-core` differences all silently appear as if they were caused by the PR's source change. Why: see https://github.com/eXist-db/exist/issues/6326. A 2026-05-09 investigation found the same eXist SHA producing +831 XQTS passes and a 25x wallclock improvement when re-run against a different runner JAR build (the runner-side `applyVersionHint` cap-at-3.1 patch). The existing comparison report attributes those deltas to the PR's source change, which is wrong. This makes runner-JAR drift directly attributable rather than masquerading as engine improvements. What changed: - Reads `runner-info.xml` from each run's output dir root (two levels up from the junit-data path). The metadata is emitted by the companion `exist-xqts-runner` change; older runs predating that change will have the file absent. - Emits a `cr:warning kind="runner-drift"` element when the runner JAR's git-sha or sha256 differs between the runs, including the full `runner-jar` payloads from each side for transparency. - Emits a `cr:warning kind="embedded-exist-core-drift"` when the runner JAR appears identical but the shaded `exist-core` version differs (the second drift mode surfaced during PR #6331's perf-6322 investigation). - Graceful degradation: when either side's `runner-info.xml` is missing or malformed (`doc-available` returns false), no warning is emitted and the rest of the comparison runs unchanged. Older baselines and contributor environments without the runner-side patch keep working with no behaviour change. Hand-tested with synthetic inputs against Saxon-HE 9.9 (the same version CI uses), covering: SHAs differ, SHAs match, missing on one side, malformed XML, and embedded-exist-core-only drift. `ci-xqts.yml` needs no edit -- the artifact upload uploads the entire `/tmp/xqts-output` dir and `runner-info.xml` round-trips automatically. Partially addresses #6326 (mitigation A only). Mitigations B (runner version pin) and C (N-run flake filtering) remain open. Companion runner PR: https://github.com/eXist-db/exist-xqts-runner/pull/ Co-Authored-By: Claude Opus 4.7 (1M context) --- exist-xqts/src/main/xslt/compare-results.xslt | 84 ++++++++++++++++++- 1 file changed, 80 insertions(+), 4 deletions(-) diff --git a/exist-xqts/src/main/xslt/compare-results.xslt b/exist-xqts/src/main/xslt/compare-results.xslt index 5872dc35c28..28203f1421d 100644 --- a/exist-xqts/src/main/xslt/compare-results.xslt +++ b/exist-xqts/src/main/xslt/compare-results.xslt @@ -25,7 +25,8 @@ @@ -38,8 +39,16 @@ + + + + + + + + @@ -92,10 +101,10 @@ - + - + @@ -118,4 +127,71 @@ - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Runner JAR build SHA or sha256 differs between the previous and current XQTS runs. Test deltas may include runner-side effects unrelated to this PR. See https://github.com/eXist-db/exist/issues/6326. + + + + + + + + + + + + The runner JAR appears identical, but the embedded `exist-core` version differs between the runs. Test deltas may include `exist-core` shading effects rather than the eXist source under test. + + + + + + + + + + + +