The official MicroProfile Fault Tolerance 4.1 TCK validates that an implementation honours the semantics of §2.5 (composition), §4 (Retry), §5 (CircuitBreaker), §6 (Asynchronous), §7 (Timeout), §8 (Fallback), §9 (Bulkhead), §10 (Metrics) and §11 (OpenTelemetry) over a set of reference applications. Heisenberg passes 463 / 463 on version 4.1 (May 2026).
Status
| Metric | Value |
|---|---|
Tests run |
463 |
Passed |
463 ✅ |
Failed |
0 |
Errors |
0 |
Skipped |
0 |
Last reproducible run: 2026-05-28T09:05:59Z, via ./run-official-tck-mp-fault-tolerance-4.1.sh all. Any later regression is logged in the repo TCK.md with: test name, reason, fix plan.
Prerequisites
The org.eclipse.microprofile.fault-tolerance:microprofile-fault-tolerance-tck:4.1 artifact must be available on Maven Central or installed manually in the local M2 repository. Detailed procedure in heisenberg-tck/README.md.
sdk env # Java 25 + Maven 3.9.16
./mvnw -ntp install -DskipTests # installs heisenberg-api, heisenberg-core, heisenberg-cdi-vauban
Main runner
The run-official-tck-mp-fault-tolerance-4.1.sh script at the repo root orchestrates every variant.
# Smoke test — one quick non-Arquillian test to validate the install
./run-official-tck-mp-fault-tolerance-4.1.sh
# Full suite — the official TCK at 463 tests
./run-official-tck-mp-fault-tolerance-4.1.sh all
# Targeted test via -Dtest=
./run-official-tck-mp-fault-tolerance-4.1.sh -Dtest=RetryTest
./run-official-tck-mp-fault-tolerance-4.1.sh -Dtest=CircuitBreakerTest#testCircuitClosesAfterDelay
The runner uses Arquillian + TestNG. The Surefire report lands in heisenberg-tck/target/surefire-reports/, and the script generates a tck-report.txt summary with the count of PASS / FAIL / ERROR / SKIP tests.
no-observability mode
The run-tck-no-observability.sh script wraps the main runner and excludes every test depending on MP Metrics §9 and OpenTelemetry §10:
# Smoke without observability
./run-tck-no-observability.sh
# Full suite without observability
./run-tck-no-observability.sh all
# Targeted without observability
./run-tck-no-observability.sh -Dtest=RetryTest
Why this mode exists: it validates that fault tolerance works even when no observability dependency is present on the classpath. Heisenberg declares OpenTelemetry as requires static (Java static module); if OTel is absent, CDI silently ignores OtelFtMetricsRecorder, and the NoopFtMetricsRecorder is used. This mode proves that this absence does not affect the Retry, Timeout, CircuitBreaker, Bulkhead, Fallback, Asynchronous policies.
Exclusions applied by the wrapper:
**/metric/**, **/metrics/**, **/*Metric*Test.class,
**/telemetry/**, **/*Telemetry*Test.class,
**/opentelemetry/**, **/*OpenTelemetry*Test.class
If -Dsurefire.excludes=… is already provided on the command line, the exclusions are merged.
Runner architecture
heisenberg-tck is deliberately out of reactor: its pom.xml uses standalone modelVersion 4.0.0, with no <parent>.
|
This detachment is forced by ShrinkWrap Maven Resolver 3.3 (transitive of the official TCK), which cannot parse Model 4.1.0 POMs and crashes on the Vidocq reactor. The rule is documented at the workspace root: do not reintegrate |
Stack assembled by the runner:
| Layer | Component |
|---|---|
Spec |
|
Fault Tolerance implementation |
|
CDI container |
Vauban ( |
Arquillian container |
|
HTTP transport (when needed) |
Chappe — for tests that exercise an HTTP client |
Test framework |
TestNG (upstream constraint — not JUnit) |
Tuning properties
| Property | Effect |
|---|---|
|
TCK timeout multiplier. Default 1.0. Bump to 2.0 or 3.0 on slow CI. |
|
Targets a specific test or method. |
|
Surefire exclusions — useful to isolate a regression. |
Documented exclusions
No permanent exclusion at this time: the suite is run integrally and passes 463/463 in full mode. The no-observability mode is a runtime variant, not a structural exclusion — the excluded tests also pass in full mode.
If a permanent exclusion had to be added, it would be listed in the TestNG suite file (heisenberg-tck/src/test/resources/tck-suite.xml) and tracked in TCK.md.