You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
XPathRecordedMatchIT fails on the EMBEDDED conformance lane (rift 0.23.0 and 0.24.0) #349
rift-java-conformance/src/test/java/io/github/achirdlabs/rift/conformance/XPathRecordedMatchIT.java:49 asserts imposter.recorded(RequestMatch.of(List.of(body(equalTo("undefined")).xPath("//a").build()))) returns 1 match (the <a><b/>z</a> request, whose //a selection reads as undefined per rift#1495). On CONFORMANCE_TRANSPORT=EMBEDDED it returns 0. The SPAWN lane passes, and the assertion on the line above (equalTo("x")) passes on both lanes.
CI's EMBEDDED conformance jobs did not fail on it. Either CI does not exercise this IT on the embedded lane, or the difference is platform-specific (macOS arm64 only so far).
First step: dump imposter.recorded() for the XPath request on both lanes and diff the recorded body. Working hypothesis: the embedded journal stores or returns the request body differently from the HTTP path (for example via the FFI rift_get_imposter recorded path), so the client-side XPath filter in verify/PredicateEvaluator sees a different body than over HTTP. Once the root cause is confirmed, either fix the embedded body path so both lanes match, or correct the test if the embedded behaviour is the intended contract. Also confirm which CI job runs XPathRecordedMatchIT on the EMBEDDED lane, and add it there if it is missing.
Provenance
Found by an agent while verifying PR #346 (engine 0.24.0 bump), /ship-issues run 21. Out of scope for that work, filed as a follow-up.
Triage: not a product bug. Root cause: a stale rift-java-core SNAPSHOT in ~/.m2 during the local repro
Root cause
The repro command runs ./mvnw verify -pl rift-java-conformancewithout -am. The conformance module therefore resolves rift-java-core:0.3.8-SNAPSHOT from the local ~/.m2 repository instead of building it. The jar there predated #335 (7c6ab16, 2026-10-16), the change that reads an XPath-selected element as its first child, or "undefined" (rift#1495). That older PredicateEvaluator never yields "undefined", so the second assertion gets 0 matches. The first assertion ("x") passes under both versions, which is exactly the observed split.
The SPAWN run passed because it was a full-reactor verify, which builds core in the reactor. CI is green on every EMBEDDED job because ci.yml:253 runs ./mvnw -pl rift-java-conformance -am verify.
Evidence (2026-10-27, macOS arm64, JDK 21, v0.24.0 dylib and binary)
Fresh worktree at origin/master (9fbaae7), after ./mvnw install -DskipTests -pl rift-java-conformance -am:
The recorded bodies are byte-identical on both lanes (<a>x<b/>y</a>, <a><b/>z</a>), so the embedded journal is not involved.
Resolution
Closing as not planned. The local-verify recipe should always pass -am, or install core first. Note also that #337 moves recorded(match) onto the engine's verify, which removes the client-side evaluator from this path entirely.
Activity
EtaCassiopeia commentedon Oct 27, 2026
Triage: not a product bug. Root cause: a stale
rift-java-coreSNAPSHOT in~/.m2during the local reproRoot cause
The repro command runs
./mvnw verify -pl rift-java-conformancewithout-am. The conformance module therefore resolvesrift-java-core:0.3.8-SNAPSHOTfrom the local~/.m2repository instead of building it. The jar there predated #335 (7c6ab16, 2026-10-16), the change that reads an XPath-selected element as its first child, or"undefined"(rift#1495). That olderPredicateEvaluatornever yields"undefined", so the second assertion gets 0 matches. The first assertion ("x") passes under both versions, which is exactly the observed split.The SPAWN run passed because it was a full-reactor
verify, which builds core in the reactor. CI is green on every EMBEDDED job becauseci.yml:253runs./mvnw -pl rift-java-conformance -am verify.Evidence (2026-10-27, macOS arm64, JDK 21, v0.24.0 dylib and binary)
origin/master(9fbaae7), after./mvnw install -DskipTests -pl rift-java-conformance -am:CONFORMANCE_TRANSPORT=EMBEDDED … -Dit.test=XPathRecordedMatchIT→ Tests run: 1, Failures: 0CONFORMANCE_TRANSPORT=SPAWN→ Tests run: 1, Failures: 0<a>x<b/>y</a>,<a><b/>z</a>), so the embedded journal is not involved.Resolution
Closing as not planned. The local-verify recipe should always pass
-am, orinstallcore first. Note also that #337 movesrecorded(match)onto the engine's verify, which removes the client-side evaluator from this path entirely.