Skip to content

ci(conformance): run the xerial control profile as a reference probe - #138

Merged
magnusp merged 1 commit into
mainfrom
fix/i117-control-profile
Oct 22, 2026
Merged

magnusp merged 1 commit into
mainfrom
fix/i117-control-profile

Conversation

@magnusp

@magnusp magnusp commented Oct 22, 2026 •

Copy link
Copy Markdown
Owner

Fixes #117

Three-layer contract. Hrana 3 is the source of truth for transport, values, metadata, batching, transactions, and error reporting; java.sql is the source of truth for the JDBC surface. xerial/sqlite-jdbc is a behavioral reference only. This PR runs the reference and does not assert parity with it.

Base 1bed15e4c8a5be7fa47fac173eada95ad3b0a7e5 · Head 9c9b66daa3749e637925e7fdb482eaa97c2e24e8

What changed

  • .github/workflows/ci.yml and .github/workflows/pr.yml: new Xerial Control (reference probe) job that runs mvn --batch-mode -pl libsql-conformance -am -Pxerial-control verify. The existing Build & Test (Java 25|26) job names are unchanged.
  • libsql-conformance/pom.xml: a generate-test-sources-phase guard fails when conformance.control.driver is set outside the xerial-control profile. The profile sets an internal marker, so the profile run is unaffected. The guard shares the phase of the existing vendored-upstream check, so mvn validate still resolves no test dependencies; binding it to validate made the CI Validate reactor step fail before the other modules were built.

The control run is a reference probe: a failure means a vendored test is not true for sqlite-jdbc itself (or the driver diverges without a recorded reason), not that libSQL must match xerial.

Red / green

  • Red (guard absent at trunk): ./mvnw -pl libsql-conformance -Dconformance.control.driver=xerial generate-test-sources → exit 0. No workflow passes -Pxerial-control.
  • Green (guard present at head): same command → exit 1 with conformance.control.driver is only set by the xerial-control profile. Run with -Pxerial-control instead....
  • Green (probe): ./mvnw -pl libsql-conformance -am -Pxerial-control verify → 100 tests, 0 failures, 1 skipped, BUILD SUCCESS.

Lanes

  1. Regression: behavior absent at trunk, present at head. Pass.
  2. Control profile locally: 100 tests, 1 skipped. Pass.
  3. Guard failure: BUILD FAILURE with the message above. Pass.
  4. YAML parse of all 4 workflow files. Pass.
  5. ./mvnw -pl libsql-jdbc test: BUILD SUCCESS. Pass.
  6. Workflow diff vs trunk: only the new job. Pass.
  7. Jobs: trunk set preserved; one job added per workflow. Pass.
  8. ./mvnw -q validate: BUILD SUCCESS. Pass.
  9. Control job log in PR checks: Xerial Control (reference probe) ran all 9 selected org.sqlite classes (100 tests, 0 failures, 1 skipped), BUILD SUCCESS.
  10. Required checks: Build & Test (Java 25), Build & Test (Java 26) still the required contexts; both pass, and all PR checks are green.

Perf: ./mvnw -pl libsql-jdbc test median 2.08 s at trunk vs 2.06 s at head (3 interleaved runs each), no Java change.

Divergences

  • pr.yml is outside the plan's Files list. Lane 9 requires the control job log in this PR's checks, and ci.yml only runs on pushes to main. pr.yml is a near-identical copy of ci.yml, so it gets the same job.
  • mvn --batch-mode instead of mise exec -- ./mvnw. CI uses actions/setup-java and never installs mise; both existing workflows call mvn --batch-mode, so the new job matches them.

Evidence logs: /tmp/xerial-parity-i117/.

…117)

Run the pinned sqlite-jdbc control run on main and on pull requests in its
own job, so a vendored divergence that is not true for xerial itself is
visible. Guard the module so conformance.control.driver can only be set by
the xerial-control profile.
@magnusp
magnusp force-pushed the fix/i117-control-profile branch from a801b24 to 9c9b66d Compare October 22, 2026 23:31
@magnusp
magnusp merged commit 91ad4c3 into main Oct 22, 2026
6 checks passed
@magnusp
magnusp deleted the fix/i117-control-profile branch October 22, 2026 23:37
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

CI does not run the xerial control profile

1 participant