## The Problem The first run of the build `mutation` (PR#93) on mih09, right after the merge on 2026-10-03, failed twice: - PIT stopped in its coverage run: `BuildExecutorIntegrationTest` did not pass without mutation, although the normal test build on mih09 and PIT locally pass it. - The deploy of v1.28.0, queued behind it, found no runtime bundle: `mutation` runs in `main`'s worktree, and its `cleanCommand: rm -rf build` deleted the bundle the test build had left there. The run started at once instead of at 02:00, because the definition was new and the day's slot was due. ## The Solution - `mutation` cleans only `build/reports/pitest` and `build/reports/codecharta`; PIT recompiles what changed, and the runtime bundle stays for the deploy. - `mutation` runs at 00:00 UTC instead of 02:00: 01:00 or 02:00 in Germany, depending on daylight saving time, which UTC does not have; later nightly builds of other repositories follow it on mih09. - `BuildExecutorIntegrationTest` no longer runs under PIT. Two probe builds on this branch, with PIT's verbose output, could not reproduce the failure: the spec passed alone and with every other spec. It is most likely a timing-dependent case; the best guess is Scenario#67.04, where `true` must use no measurable processor time, which one clock tick under PIT's instrumentation breaks. One failing spec in the coverage run aborts the whole night, and the spec costs 24-29 s per covering mutant. `BuildExecutor` shows mostly uncovered until its logic moves into unit tests. ## Follow-up PRs - `BuildExecutor`: its decisions into small classes with unit tests (already planned in PR#93). - Make the timing-dependent cases of `BuildExecutorIntegrationTest` robust, starting with Scenario#67.04. 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: mhoennig <michael@hoennig.de> Reviewed-on: #94
29 lines
1.9 KiB
Markdown
29 lines
1.9 KiB
Markdown
# PR#94: Fixes for the Nightly Mutation Build
|
|
|
|
> This document describes the change of this pull request at the time it was made.
|
|
> Later pull requests may change the behaviour without updating it.
|
|
|
|
## The Problem
|
|
|
|
The first run of the build `mutation` (PR#93) on mih09, right after the merge on 2026-10-03, failed twice:
|
|
|
|
- PIT stopped in its coverage run: `BuildExecutorIntegrationTest` did not pass without mutation, although the normal test build on mih09 and PIT locally pass it.
|
|
- The deploy of v1.28.0, queued behind it, found no runtime bundle: `mutation` runs in `main`'s worktree, and its `cleanCommand: rm -rf build` deleted the bundle the test build had left there.
|
|
|
|
The run started at once instead of at 02:00, because the definition was new and the day's slot was due.
|
|
|
|
## The Solution
|
|
|
|
- `mutation` cleans only `build/reports/pitest` and `build/reports/codecharta`; PIT recompiles what changed, and the runtime bundle stays for the deploy.
|
|
- `mutation` runs at 00:00 UTC instead of 02:00: 01:00 or 02:00 in Germany, depending on daylight saving time, which UTC does not have; later nightly builds of other repositories follow it on mih09.
|
|
- `BuildExecutorIntegrationTest` no longer runs under PIT.
|
|
Two probe builds on this branch, with PIT's verbose output, could not reproduce the failure: the spec passed alone and with every other spec.
|
|
It is most likely a timing-dependent case; the best guess is Scenario#67.04, where `true` must use no measurable processor time, which one clock tick under PIT's instrumentation breaks.
|
|
One failing spec in the coverage run aborts the whole night, and the spec costs 24-29 s per covering mutant.
|
|
`BuildExecutor` shows mostly uncovered until its logic moves into unit tests.
|
|
|
|
## Follow-up PRs
|
|
|
|
- `BuildExecutor`: its decisions into small classes with unit tests (already planned in PR#93).
|
|
- Make the timing-dependent cases of `BuildExecutorIntegrationTest` robust, starting with Scenario#67.04.
|