The Repositories page's status line split by status, gate at the target of 15 (v1.37.7) #126

Merged
mi merged 2 commits from mihoe/repo-status-line into main 2026-10-05 20:19:38 +02:00
Owner

Historic PR-documentation is not maintained along with new PRs — treat it as a snapshot, not as current documentation.

The Problem

UiFormats.repoStatusLine is the last method above the Kotlin target of 15:

Method Mutation-CRAP Complexity Mutation score
UiFormats.repoStatusLine 16.03 16 0.95

It words the second line of a Repositories page entry for a running, a pending and a finished newest build in one method.
Its complexity alone is above 15, so tests cannot bring it down; it needs the split.

Non-Goals

  • No change in behaviour: every line reads as before, and werkator.js (repoStatusLine) is untouched.

The Scenarios

Feature: the status line names what there is

Scenario#126.01: the status line names only what there is

So that a line never ends in a separator or names a count of zero.

  • Given a pending newest build with no other build running
  • Then the line reads waiting 2:14
  • Given a running newest build with no other build pending
  • Then the line reads running for 2:14
  • Given a finished build with a permalink and no artifact
  • Then the line reads 4:51 · permalink
  • Given a finished build with an artifact and no duration
  • Then the line reads artifact
Verified by
  • UiViewsUnitTest the status line names only what there is: no other builds, no duration, no artifact (Scenario#126.01), and the status line says what the newest build's status means in numbers (Scenario#37.02)

The Solution

repoStatusLine picks the line by the newest build's status:

  • activeLine words a running and a pending build alike: how long it has been at it, and the builds of the other kind beside it;
  • finishedLine words the duration and what the build left.

This follows the shape of the script's repoStatusLine, which already handles the two active states alike.

A local PIT run of UiFormats afterwards:

Method Mutation-CRAP Complexity Mutation score
UiFormats.repoStatusLine 5 5 1.00
UiFormats.activeLine 3 3 1.00
UiFormats.finishedLine 10 10 1.00

The highest score left in UiFormats is swapLevel at 12.05.
No method of the project is above 15 any more; the highest is ConfigLoader.checkRestartsInstance at exactly 15.00, with complexity 15 and every mutant killed.
So the gate goes down from 17 to the target of 15.
The gate refuses a method that exceeds the limit, so 15.00 passes; but a single surviving mutant in checkRestartsInstance would now fail the nightly build.

Additional Changes

  • maxMutationCrap in build.gradle.kts lowered from 17 to 15, and its comment says the ratchet has reached the target.
  • Version 1.37.7 with its entry in releases.html.

Prerequisite PRs

  • PR#104: the target of 15 and the first gate.
  • PR#111 to PR#125: the refactorings that brought the gate down from 35.

🤖 Generated with Claude Code

> Historic PR-documentation is not maintained along with new PRs — treat it as a snapshot, not as current documentation. ## The Problem `UiFormats.repoStatusLine` is the last method above the Kotlin target of 15: | Method | Mutation-CRAP | Complexity | Mutation score | |----------------------------|---------------|------------|----------------| | `UiFormats.repoStatusLine` | 16.03 | 16 | 0.95 | It words the second line of a Repositories page entry for a running, a pending and a finished newest build in one method. Its complexity alone is above 15, so tests cannot bring it down; it needs the split. ## Non-Goals - No change in behaviour: every line reads as before, and `werkator.js` (`repoStatusLine`) is untouched. ## The Scenarios ### Feature: the status line names what there is #### Scenario#126.01: the status line names only what there is So that a line never ends in a separator or names a count of zero. - **Given** a pending newest build with no other build running - **Then** the line reads `waiting 2:14` - **Given** a running newest build with no other build pending - **Then** the line reads `running for 2:14` - **Given** a finished build with a permalink and no artifact - **Then** the line reads `4:51 · permalink` - **Given** a finished build with an artifact and no duration - **Then** the line reads `artifact` ##### Verified by - [UiViewsUnitTest](../../src/test/kotlin/de/hoennig/werkator/server/UiViewsUnitTest.kt) `the status line names only what there is: no other builds, no duration, no artifact (Scenario#126.01)`, and `the status line says what the newest build's status means in numbers (Scenario#37.02)` ## The Solution `repoStatusLine` picks the line by the newest build's status: - `activeLine` words a running and a pending build alike: how long it has been at it, and the builds of the other kind beside it; - `finishedLine` words the duration and what the build left. This follows the shape of the script's `repoStatusLine`, which already handles the two active states alike. A local PIT run of `UiFormats` afterwards: | Method | Mutation-CRAP | Complexity | Mutation score | |----------------------------|---------------|------------|----------------| | `UiFormats.repoStatusLine` | 5 | 5 | 1.00 | | `UiFormats.activeLine` | 3 | 3 | 1.00 | | `UiFormats.finishedLine` | 10 | 10 | 1.00 | The highest score left in `UiFormats` is `swapLevel` at 12.05. No method of the project is above 15 any more; the highest is `ConfigLoader.checkRestartsInstance` at exactly 15.00, with complexity 15 and every mutant killed. So the gate goes down from 17 to the target of 15. The gate refuses a method that exceeds the limit, so 15.00 passes; but a single surviving mutant in `checkRestartsInstance` would now fail the nightly build. ## Additional Changes - `maxMutationCrap` in `build.gradle.kts` lowered from 17 to 15, and its comment says the ratchet has reached the target. - Version 1.37.7 with its entry in `releases.html`. ## Prerequisite PRs - PR#104: the target of 15 and the first gate. - PR#111 to PR#125: the refactorings that brought the gate down from 35. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
mi added 1 commit 2026-10-05 20:05:27 +02:00
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
mi changed title from WIP: The Repositories page's status line split by status to The Repositories page's status line split by status, gate at the target of 15 (v1.37.7) 2026-10-05 20:13:37 +02:00
mi added 1 commit 2026-10-05 20:13:38 +02:00
mi merged commit 87d40f34da into main 2026-10-05 20:19:38 +02:00
mi deleted branch mihoe/repo-status-line 2026-10-05 20:19:38 +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/werkator#126