werkcrappit measures itself every night (0.16.1) #30

Merged
mi merged 1 commits from mihoe/nightly-mutation into main 2026-10-03 14:58:35 +02:00
Owner

The Problem

werkcrappit computes how well other projects' tests catch changes, but nobody measured its own tests that way.

Non-Goals

  • A gate: no maxMutationCrap yet; the first reports decide where a limit belongs.
  • The Gradle plugin module: its five classes are tested by the functional tests, which start real Gradle builds with PIT, minutes per mutant.

The Solution

  • werkcrappit-pit/build.gradle.kts applies info.solidsoft.pitest 1.19.0 and the released Gradle plugin de.javagil.werkcrappit 0.16.0.
    • PIT 1.30.0 with pitest-junit5-plugin 1.2.3 runs the unit tests; the history plugin keeps incremental results in .pitest/, outside build/.
    • The Gradle plugin adds werkcrappit-pit to PIT's classpath by its coordinates, which are this project's; Gradle takes this project for them, whatever the version, and no substitution rule changes that.
      So werkcrappit measures itself with the listener of the same commit, and pitest depends on jar, which the PIT plugin does not know is needed.
    • -Dwerkcrappit.version reaches PIT's minions too: VersionConsistencyTest needs it, and a test failing without mutation aborts the run.
  • settings.gradle.kts: the Maven registry of git.javagil.de for the Gradle plugin.
  • .werkator.yml: the definition mutation, nightly at 03:00 UTC on main after new commits, the slot after Werkator's own mutation build on mih09; timeout: 30m; it cleans only its own reports, as main's worktree is shared.
  • Version 0.16.1.

Open Questions

  • The first run starts right after the merge, as the day's 03:00 slot is past; it takes some minutes.

Attachments

The local full run of 2026-10-03

6 min 19 s with 2 threads: 836 mutants, 688 killed (82 %), 40 without coverage; 600 methods, 271 scored, the highest values

  • Levelization.breakCycles 22.9
  • RealLines.count 20.1
  • Json.compact 16.1
  • Gate.judge 16.0
  • MethodEvaluator.evaluate 16

The run also found a bug: 0.15.0's progress lines never appeared, because PIT's start time is System.nanoTime(); fixed in 0.15.2 (PR#28).

🤖 Generated with Claude Code

## The Problem werkcrappit computes how well other projects' tests catch changes, but nobody measured its own tests that way. ## Non-Goals - A gate: no `maxMutationCrap` yet; the first reports decide where a limit belongs. - The Gradle plugin module: its five classes are tested by the functional tests, which start real Gradle builds with PIT, minutes per mutant. ## The Solution - `werkcrappit-pit/build.gradle.kts` applies `info.solidsoft.pitest` 1.19.0 and the released Gradle plugin `de.javagil.werkcrappit` 0.16.0. - PIT 1.30.0 with `pitest-junit5-plugin` 1.2.3 runs the unit tests; the history plugin keeps incremental results in `.pitest/`, outside `build/`. - The Gradle plugin adds `werkcrappit-pit` to PIT's classpath by its coordinates, which are this project's; Gradle takes this project for them, whatever the version, and no substitution rule changes that. So werkcrappit measures itself with the listener of the same commit, and `pitest` depends on `jar`, which the PIT plugin does not know is needed. - `-Dwerkcrappit.version` reaches PIT's minions too: `VersionConsistencyTest` needs it, and a test failing without mutation aborts the run. - `settings.gradle.kts`: the Maven registry of git.javagil.de for the Gradle plugin. - `.werkator.yml`: the definition `mutation`, nightly at 03:00 UTC on `main` after new commits, the slot after Werkator's own mutation build on mih09; `timeout: 30m`; it cleans only its own reports, as `main`'s worktree is shared. - Version 0.16.1. ## Open Questions - The first run starts right after the merge, as the day's 03:00 slot is past; it takes some minutes. ## Attachments ### The local full run of 2026-10-03 6 min 19 s with 2 threads: 836 mutants, 688 killed (82 %), 40 without coverage; 600 methods, 271 scored, the highest values - `Levelization.breakCycles` 22.9 - `RealLines.count` 20.1 - `Json.compact` 16.1 - `Gate.judge` 16.0 - `MethodEvaluator.evaluate` 16 The run also found a bug: 0.15.0's progress lines never appeared, because PIT's start time is `System.nanoTime()`; fixed in 0.15.2 (PR#28). 🤖 Generated with [Claude Code](https://claude.com/claude-code)
mi added 1 commit 2026-10-03 14:44:44 +02:00
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
mi merged commit 4d4391e82a into main 2026-10-03 14:58:35 +02:00
mi deleted branch mihoe/nightly-mutation 2026-10-03 14:58:35 +02:00
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: mi/werkcrappit#30