The official MicroProfile Metrics 5.1.1 TCK (org.eclipse.microprofile.metrics:microprofile-metrics-tck:5.1.1) validates that an implementation honours the whole spec โ€” exposition formats, scopes, types, configuration. Dirac’s target is 100 % PASS (milestone M8). The runner ships in the dirac-tck module, part of the reactor but gated behind the tck Maven profile.

Status

Metric Value

Target

100 % PASS on the official 5.1.1 suite

Milestone

M8 (ROADMAP.md)

Current count

๐Ÿšง status to be confirmed in dirac-tck/target/tck-report.txt

Smoke test (out of Arquillian)

โœ… DiracTckSmokeTest operational

M9 jlink smoke

โœ… dirac-image-smoke image built (run-jlink-smoke.sh)

As long as the full suite is not green, the exact figure lives in dirac-tck/target/tck-report.txt (regenerated on each run by run-official-tck-mp-metrics-5.1.sh). This page does not freeze a score in advance.

Prerequisites

The artefact org.eclipse.microprofile.metrics:microprofile-metrics-tck:5.1.1 is available on Maven Central. The runner first installs the required Dirac modules in the local M2, then runs the reactor on dirac-tck with the tck profile.

sdk env                                              # Java 25 + Maven 3.9.16
./mvnw -ntp install -DskipTests                      # full reactor build

Running the runner

The script run-official-tck-mp-metrics-5.1.sh at the repository root orchestrates every variant.

# Smoke test โ€” DiracTckSmokeTest, no Arquillian
./run-official-tck-mp-metrics-5.1.sh

# Full suite โ€” TestNG/Arquillian, tck-official profile
./run-official-tck-mp-metrics-5.1.sh all

# Targeted test โ€” tck-official profile + -Dtest=
./run-official-tck-mp-metrics-5.1.sh -Dtest=CounterTest

The runner installs dirac-api, dirac-core, dirac-cdi-vauban in the local M2 (step 1), then invokes ./mvnw -Ptck,<profile> -pl dirac-tck test (step 2). The summary report lands in dirac-tck/target/tck-report.txt. Direct invocation without the script:

./mvnw -Ptck -pl dirac-tck test                  # smoke
./mvnw -Ptck,tck-official -pl dirac-tck test     # full suite

Runner architecture

dirac-tck is an in-reactor module gated behind the tck Maven profile (TCK harmonisation โ€” Dirac is the pilot brick, mirroring the vidocq-runtime-tck-* pattern of the Vidocq runtime): a plain mvn install neither downloads nor runs anything TCK-related, and the release reactor never sees the module.

Historically dirac-tck was a standalone out-of-reactor POM: ShrinkWrap Maven Resolver 3.3, transitive to the official TCK, could not parse Model 4.1.0 POMs. That constraint disappeared with the workspace-wide migration to Maven 3.9.16 / Model 4.0.0, and the MP Metrics api-tck builds its deployments with addClass/addPackage only (no ShrinkWrap Maven resolver), so it is safe in-reactor โ€” the same verification already backs vidocq-runtime-tck-dirac-metrics.

Stack assembled by the runner:

Layer Component

Spec

microprofile-metrics-api 5.1.1, jakarta.enterprise.cdi-api 4.1, jakarta.interceptor-api 2.2, jakarta.annotation-api 3.0, jakarta.ws.rs-api 4.0

Metrics implementation

dirac-api + dirac-core + dirac-cdi-vauban + dirac-rest

CDI container

Vauban (io.vidocq.vauban.core) embedded

Arquillian container

Dirac container that deploys the archive and exposes /metrics via Cassini + Chappe

HTTP transport

Chappe (io.vidocq.chappe.http)

Test framework

TestNG (upstream constraint โ€” not JUnit)

Arquillian configuration in dirac-tck/src/test/resources/arquillian.xml. Current smoke test: dirac-tck/src/test/java/io/vidocq/dirac/tck/DiracTckSmokeTest.java.

The jlink smoke validates that the whole Dirac stack can be assembled into a Java native image without an automatic module lacking a canonical name. The blocker is lifted by dirac-mp-metrics-api, which repackages the MP Metrics spec with an explicit module-info.class (module microprofile.metrics.api { exports …​; }).

./run-jlink-smoke.sh           # build + jlink + dirac-image-smoke image
./run-jlink-smoke-ci.sh        # blocking CI wrapper
./mvnw -ntp -N -Pjlink-smoke verify

Details in JLINK.md.

Quality contract

Any structural modification of dirac-core, dirac-cdi-vauban or dirac-rest must preserve the TCK score before merge. A TCK regression is a CI-level blocker: the PR does not pass. Any excluded test (if any) must be listed in the TestNG suite and justified in TCK.md (to be created on first exclusion).

Further reading

  • Internals โ€” what the TCK validates.

  • Reference โ€” annotations and keys exercised.

  • BUG.md โ€” tracked reproducible bugs.

  • BENCH.md โ€” consolidated JMH benchmarks.