Files
claude-code d441b059af
werkator build succeeded after 03:23
werkator/publish build succeeded after 00:21
Example reports with every state of a method (0.26.10) (#65)
Co-authored-by: claude-code <claude-code@javagil.de>
2026-10-11 18:02:48 +02:00

5.7 KiB

Final Report of the Java MVP

The report that section 8.5 of the specification asks for, as of 2026-10-11, version 0.26.8, commit 0819bd4 of main; PR#65 added the example reports of section 8.4 afterwards. It names only what ran; nothing here is claimed without a run.

What Is Implemented

Step of section 8.3 State PRs
1. Repository, Gradle wrapper, pinned versions, walking skeleton, ADR 0001 done #1, #2
2. Metric core and status policy strict-v1 done; default timeouts-killed-v1 (ADR 0006) #3, #9
3. Original bytecode, method inventory, JaCoCo complexity done #4
4. Complete aggregation of PIT results, identity and error cases done #5
5. JSON schema, JSON and Markdown reports, console summary done #6
6. Opt-in Gradle gate, multi-project fixture done #7
7. Kotlin/JVM basis support, limits documented done, optional goal (ADR 0009) #61
8. Packaging from an isolated repository, documentation, report done #8, #62, #63, #64, #65

Beside the steps: the CodeCharta code city (RFC 0001, ADR 0007), cohesion and coupling (RFC 0002), the change risk (ADR 0008), and the structure page and matrix (RFC 0003). The plan with every node and its PRs is werkcrappit.werkbaum.

Tested Versions

compatibility.md lists the combination the functional tests run: Gradle 9.8.0, the Gradle PIT plugin 1.19.0, PIT 1.30.0, the PIT JUnit 5 plugin 1.2.3, JUnit Jupiter 5.14.4 in the fixtures, JaCoCo Core 0.8.15, ASM 9.10.1, Java 21 bytecode, Kotlin 2.4.21 for the Kotlin fixture, build scripts in the Kotlin DSL and in the Groovy DSL. Nothing else is claimed to work.

Commands That Ran

On 2026-10-11, on a fresh clone of main at 0819bd4, with Temurin 25.0.4 as Gradle's JVM:

git clone https://git.javagil.de/mi/werkcrappit.git
./gradlew build

BUILD SUCCESSFUL in 4 minutes 21 seconds, 369 tests, none failed or skipped:

Test set Tests
werkcrappit-pit, unit tests 297
werkcrappit-pit, functional tests: real PIT runs on Java and Kotlin fixtures 18
werkcrappit-pit, browser tests of the structure page and matrix in a headless Chromium 22
werkcrappit-gradle-plugin, unit tests 6
werkcrappit-gradle-plugin, functional tests: the gate and the export in real builds 26

The functional tests consume both plugins as published into build/functional-test-repo, never the classes of the build. Werkator on werkator.javagil.de runs the same ./gradlew build for every push.

Also ran on 2026-10-11:

  • werkcrappit's own mutation build, pitest mutationCrapCodeCharta mutationCrapCheck on werkcrappit-pit, locally: gate passed at its ratchet 9, highest Mutation-CRAP 9 (PR#56).
  • werkprobe's shop demo, pitest mutationCrapCodeCharta in the Groovy DSL, locally (werkprobe PR#14).

Acceptance Tests

acceptance-test-map.md maps 124 IDs to JUnit tests, which the build above ran; all are passing. FeatureFilesTest parses every feature file and checks that the map names exactly their IDs. JUnit tests check the scenarios; there is no Gherkin runner.

  • The five @MC-KT-… scenarios are @optional-kotlin and not part of the binding MVP.
  • Four IDs pass with a remark in the map: MC-002 and MC-003 on the level of the core, MC-007 under strict-v1, MC-009 on the adapter level.
  • The specification's Kotlin IDs MC-032 and MC-033 were taken by the progress scenarios; Kotlin uses MC-KT-….

Definition of Done

Section 8.5 asks Shown by
A clean checkout builds reproducibly with documented prerequisites the fresh clone above; a JDK 17 or newer suffices
The packaged plugin works in a real Gradle/PIT run the functional tests; hsadmin-ng, Werkator and werkprobe
Every binding scenario is shown automatically the acceptance map, all passing
Reports carry real per-method values from PIT and JaCoCo the functional tests read the report of real PIT runs

A JDK 17 or newer starts Gradle; Gradle loads the Temurin 25 toolchain where it is missing (PR#60). hsadmin-ng, Werkator and werkprobe apply the published plugins in their own builds.

The artifacts of section 8.4:

Artifact Where
README: purpose, experimental status, installation, configuration, reports, gate, quickstart README.md
The metric: formula, strict-v1, states without a score, limits, what it does not say metric.md
Compatibility and the integration ADR compatibility.md, ADR 0001
Features and acceptance map features/, acceptance-test-map.md
Versioned JSON schema werkcrappit-pit/src/main/resources/de/javagil/werkcrappit/pit/report/mutation-crap.schema.json
Small expected example reports examples/, kept current by ExampleReportsTest (PR#65)
Runtime dependencies and their licenses README, "Runtime Dependencies"

Remaining Limits

  • The metric is an experiment: neither its superiority nor any threshold is proven.
  • Only Gradle is supported, and only the versions above are tested.
  • Kotlin: an inline function's own body never runs, and PIT mutates the state machine of a suspend function (ADR 0009).
  • Whether CodeCharta renders the city is a manual probe; where the viewer comes from is open until hsadmin-ng moves (RFC 0003).

Deviations From the Specification

Each is documented where it was decided:

  • The default status policy is timeouts-killed-v1; strict-v1 is unchanged and selectable (ADR 0006).
  • The Kotlin scenarios use @MC-KT-…, as MC-032 and MC-033 were taken (ADR 0009).
  • werkcrappit builds with Temurin 25 and writes Java 21 bytecode (PR#60).