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

109 lines
5.7 KiB
Markdown

# 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](werkcrappit.werkbaum).
## Tested Versions
[compatibility.md](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:
```bash
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](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](../README.md) |
| The metric: formula, `strict-v1`, states without a score, limits, what it does not say | [metric.md](metric.md) |
| Compatibility and the integration ADR | [compatibility.md](compatibility.md), [ADR 0001](adr/0001-pit-integration.md) |
| Features and acceptance map | [features/](features/), [acceptance-test-map.md](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/](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).