Cette page consolide l’état des TCK officiels Jakarta JSON Processing 2.1 et Jakarta JSON Binding 3.0 exécutés contre Champollion. Source de vérité au quotidien : lien:https://codeberg.org/Vidocq/champollion/src/branch/main/TCK.md[TCK.md] dans le repo.

Le module champollion-tck est in-reactor, gardé derrière le profil Maven tck (harmonisation TCK, même pattern que les runners vidocq-runtime-tck-) : un mvn install normal ne télécharge ni n’exécute rien du TCK. Invocation via les scripts run-official-tck-.sh, ou directement ./mvnw -Ptck,jsonp-tck -pl champollion-tck test / ./mvnw -Ptck,jsonb-tck -pl champollion-tck test. (Note historique : le module était un POM standalone hors reactor pour contourner ShrinkWrap Maven Resolver 3.3 vs Model 4.1.0 — obsolète depuis la migration Maven 3.9.16 / Model 4.0.0.)

Synthèse globale

TCK Total PASS Échecs/Erreurs Statut

Jakarta JSON Processing 2.1

179 (api)

179 (100 %)

0

✅ 100 % des tests applicatifs PASS

Jakarta JSON Binding 3.0

295

290 (98,3 %)

0 ERROR, 5 skips upstream

✅ 100 % des tests applicables PASS

Dernier baseline daté : 2026-06-16 (cf. lien:https://codeberg.org/Vidocq/champollion/src/branch/main/TCK.md[TCK.md] §Premier run TCK).

JSON-P 2.1 — détail par état

Métrique Baseline 2026-05-03 Après M2.x + M3.4 Après M6.x

Tests exécutés

197

179 (api seulement)

179

PASS

65 (33 %)

168 (94 %)

179 (100 %)

FAIL

112

7

0

ERROR

20

4

0

Le précédent souci de harnais signature-test est corrigé ; les deux suites sont désormais à 100 % des tests applicables.

Saut majeur de stabilité

JsonProviderTest.systemProperty() du TCK polluait System.getProperty("jakarta.json.provider") sans cleanup, ce qui faisait shadow JsonProvider.provider() par un mock dans tous les tests suivants. Fix : forkCount=1, reuseForks=false dans surefire + séparation pluggability dans son propre profil. Détaillé dans TCK.md.

Fixes récents (M6.x)

  • ChampollionJsonObject.getString/getInt/getBoolean/isNull lèvent NPE si la clé n’existe pas (spec §2.1.4).

  • ChampollionJsonObjectBuilder.remove(null) & addAll(null) lèvent NPE.

  • JsonProvider.createValue(Number) accepte Integer/Long/Double/Float/Short/Byte/BigDecimal.

  • createObjectBuilder(JsonObject|Map) & createArrayBuilder(JsonArray|Collection) overrides.

  • autoDetectingReader lève JsonException si l’encoding est indéterminable (1 octet 0x00jsonObjectUnknownEncoding.json).

  • ChampollionJsonPointer : la levée d’exception sur ~n mal formé est différée à la résolution (le TCK testResolvePathWithUnencodedTilde attrape l’exception dans getValue(), pas dans createPointer()).

JSON-B 3.0 — état courant

L’objectif contractuel reste 100 % PASS avant tout merge structurel sur champollion-jsonb. Le mode --static (codegen) doit obtenir le même score que le mode runtime — c’est validé par le differential testing (cf. Fonctionnement interne). Le baseline courant est 290/295 (98,3 %) avec 5 skips upstream et plus aucune erreur environnementale.

Tests skippés pour cause d’environnement

Aucun.

Tests volontairement skippés (applicatifs)

À ce jour, aucun. Si une divergence d’interprétation spec apparaît à l’avenir, elle sera documentée ici avec citation spec, hash du test, et plan de réactivation — c’est la discipline de release Champollion.

Reproduire localement

Installer les TCK officiels

Le script à la racine télécharge les ZIP officiels depuis download.eclipse.org et les installe via mvn install:install-file avec leurs vrais POMs (idempotent — ne re-télécharge pas si présent) :

cd champollion
./install-tck.sh          # JSON-P + JSON-B
./install-tck.sh jsonp    # JSON-P 2.1 uniquement
./install-tck.sh jsonb    # JSON-B 3.0 uniquement

Coordonnées Maven installées :

  • jakarta.json:jakarta-json-tck:2.1.0

  • jakarta.json.bind:jakarta.json.bind-tck:3.0.0

Lancer le TCK JSON-P 2.1

cd champollion
./run-official-tck-jsonp-2.1.sh             # smoke test (défaut)
./run-official-tck-jsonp-2.1.sh all         # suite complète
./run-official-tck-jsonp-2.1.sh -Dtest=Foo  # test ciblé

Rapport : champollion-tck/target/tck-report-jsonp.txt.

Lancer le TCK JSON-B 3.0

cd champollion
./run-official-tck-jsonb-3.0.sh                    # smoke test (défaut)
./run-official-tck-jsonb-3.0.sh all                # suite complète (mode runtime)
./run-official-tck-jsonb-3.0.sh all --static       # mode codegen statique
./run-official-tck-jsonb-3.0.sh -Dtest=Foo         # test ciblé

Le flag --static recompile les fixtures TCK avec champollion-codegen-apt pour valider la cohérence runtime ↔ codegen.

Rapport : champollion-tck/target/tck-report-jsonb.txt.

Comportement quand le TCK n’est pas installé

Les scripts vérifient la présence du jar TCK dans ~/.m2/. Absent : exit 78 (EX_CONFIG, skip propre). Le job CI Forgejo (.forgejo/workflows/ci.yml) traite cet exit code comme un skip et n’échoue pas le build — utile tant que les TCK ne sont pas pré-installés sur le runner.

Discipline de release

  • Aucun merge structurel sur champollion-jsonp ou champollion-jsonb sans TCK PASS à 100 %.

  • Toute modification de champollion-codegen-apt doit préserver le score differential testing avant merge.

  • Les tests désactivés sont documentés dans TCK.md avec citation spec, hash du test, et plan de réactivation. Pas de skip silencieux.