This page consolidates the official TCK results for Jakarta JSON Processing 2.1 and Jakarta JSON Binding 3.0 run against Champollion. Daily source of truth: lien:https://codeberg.org/Vidocq/champollion/src/branch/main/TCK.md[TCK.md] in the repo.
|
The |
Global summary
| TCK | Total | PASS | Fails/Errors | Status |
|---|---|---|---|---|
Jakarta JSON Processing 2.1 |
179 (api) |
178 (99.4%) |
1 ERROR (env) |
✅ 100% of applicable tests PASS |
Jakarta JSON Binding 3.0 |
~250 |
ongoing |
variable |
🔄 baseline being consolidated |
Last baseline date: 2026-05-03 (cf. lien:https://codeberg.org/Vidocq/champollion/src/branch/main/TCK.md[TCK.md] §First TCK run).
JSON-P 2.1 — detailed status
| Metric | Baseline 2026-05-03 | After M2.x + M3.4 | After M6.x |
|---|---|---|---|
Tests run |
197 |
179 (api only) |
179 |
PASS |
65 (33%) |
168 (94%) |
178 (99.4%) ✅ |
FAIL |
112 |
7 |
0 |
ERROR |
20 |
4 |
1 (env) |
The single remaining ERROR is JSONPSigTest.signatureTest — see Tests skipped due to environment below.
Major stability jump
The TCK’s JsonProviderTest.systemProperty() polluted System.getProperty("jakarta.json.provider") without cleanup, which caused JsonProvider.provider() to be shadowed by a mock in all subsequent tests. Fix: forkCount=1, reuseForks=false in surefire + isolating pluggability into its own profile. Detailed in TCK.md.
Recent fixes (M6.x)
-
ChampollionJsonObject.getString/getInt/getBoolean/isNullnow throw NPE if the key is missing (spec §2.1.4). -
ChampollionJsonObjectBuilder.remove(null)&addAll(null)throw NPE. -
JsonProvider.createValue(Number)acceptsInteger/Long/Double/Float/Short/Byte/BigDecimal. -
createObjectBuilder(JsonObject|Map)&createArrayBuilder(JsonArray|Collection)overrides. -
autoDetectingReaderthrowsJsonExceptionwhen the encoding cannot be determined (single byte0x00→jsonObjectUnknownEncoding.json). -
ChampollionJsonPointer: the exception on a malformed~nis deferred to resolution (TCKtestResolvePathWithUnencodedTildecatches the exception ingetValue(), not increatePointer()).
JSON-B 3.0 — known challenges
| Test | Status | Justification |
|---|---|---|
|
under investigation |
|
others |
under investigation |
First global run to surface divergences. Per-test fine analysis on the next-release schedule. |
The contractual target remains 100% PASS before any structural merge on champollion-jsonb. The --static (codegen) mode must achieve the same score as runtime — validated by differential testing (cf. Internals).
Tests skipped due to environment
| Test | Reason |
|---|---|
|
The official |
Tests deliberately skipped (applicative)
As of today, none. Should a spec-interpretation divergence appear later, it will be documented here with spec citation, test hash, and reactivation plan — that’s the Champollion release discipline.
Reproduce locally
Install the official TCKs
The repo-root script downloads the official ZIPs from download.eclipse.org and installs them via mvn install:install-file with their genuine POMs (idempotent — won’t re-download if already present):
cd champollion
./install-tck.sh # JSON-P + JSON-B
./install-tck.sh jsonp # JSON-P 2.1 only
./install-tck.sh jsonb # JSON-B 3.0 only
Maven coordinates installed:
-
jakarta.json:jakarta-json-tck:2.1.0 -
jakarta.json.bind:jakarta.json.bind-tck:3.0.0
Run the JSON-P 2.1 TCK
cd champollion
./run-official-tck-jsonp-2.1.sh # smoke test (default)
./run-official-tck-jsonp-2.1.sh all # full suite
./run-official-tck-jsonp-2.1.sh -Dtest=Foo # targeted test
Report: champollion-tck/target/tck-report-jsonp.txt.
Run the JSON-B 3.0 TCK
cd champollion
./run-official-tck-jsonb-3.0.sh # smoke test (default)
./run-official-tck-jsonb-3.0.sh all # full suite (runtime mode)
./run-official-tck-jsonb-3.0.sh all --static # static codegen mode
./run-official-tck-jsonb-3.0.sh -Dtest=Foo # targeted test
The --static flag recompiles the TCK fixtures with champollion-codegen-apt to validate runtime ↔ codegen consistency.
Report: champollion-tck/target/tck-report-jsonb.txt.
Behaviour when the TCK is not installed
The scripts check the presence of the TCK jar in ~/.m2/. If absent: exit 78 (EX_CONFIG, clean skip). The Forgejo CI job (.forgejo/workflows/ci.yml) treats this exit code as a skip and does not fail the build — useful while TCKs are not pre-installed on the runner.
Release discipline
-
No structural merge on
champollion-jsonporchampollion-jsonbwithout a 100% TCK PASS. -
Any change in
champollion-codegen-aptmust preserve the differential testing score before merge. -
Disabled tests are documented in
TCK.mdwith spec citation, test hash, and reactivation plan. No silent skip.