The processor-time test burns until it measured enough, so a loaded host no longer turns it red #157

Merged
ai-reviewer merged 3 commits from claude-code/cpu-time-test-under-load into main 2026-10-12 17:55:10 +02:00
Collaborator

See the PR-doc.

The main build of c218a0c failed in ProcessTreeCpuTimeIntegrationTest. The host was loaded, and two seconds of wall clock held less than 300 ms of processor time. The test now burns until it has measured enough, with a 30 s deadline, and kills the whole tree.

🤖 Generated with Claude Code

See [the PR-doc](docs/prs/2026-10-12-PR%23157-cpu-time-test-under-load.md). The main build of c218a0c failed in ProcessTreeCpuTimeIntegrationTest. The host was loaded, and two seconds of wall clock held less than 300 ms of processor time. The test now burns until it has measured enough, with a 30 s deadline, and kills the whole tree. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
claude-code added 1 commit 2026-10-12 17:23:40 +02:00
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
claude-code added 1 commit 2026-10-12 17:45:40 +02:00
PR-doc and Werkbaum for the processor-time test
werkator build succeeded after 02:56
ai-review/assessment human review required; a human approval unlocks the merge; review requested from mi; merge scheduled for when the checks succeed
ai-review/gate build succeeded after 01:10
8a2eab8833
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
claude-code marked the pull request as ready for review 2026-10-12 17:49:11 +02:00
Collaborator
🟡 werkrevisor YELLOW for 8a2eab8, superseded by the result for ae688a0

🟡 werkrevisor: YELLOW / HUMAN_REVIEW

Change kind: mixed.

Reasons

  • YELLOW tests lost or disabled: src/test/kotlin/de/hoennig/werkator/build/ProcessTreeCpuTimeIntegrationTest.kt:37 removes 1 test(s) or assertion(s) without a replacement
  • hint 2 changed file(s) that neither weaken the checks, touch security nor show a risk category of jvm-spring-backend according to Jev
  • hint 1 build change(s) of low risk according to Jev: build.gradle.kts (weakens checks 0.03, risk 0.00, security 0.01)
  • hint 1 changed file was given to the AI as excerpt of the selected lines and 5 lines around each changed line, not in full (each larger than [review] max_full_file_chars = 80000): src/main/resources/templates/releases.html

Classifier

3 of 3 units passed all questions (1 PR document(s)).

Usage: model `openrouter/minimax/minimax-m3`, LLM done, tokens counted before the call 18281, calls 1, tokens in 17545 / out 5026 (reasoning included in out), duration 40.6 s, cost 0.0113 USD (reported), classifier `jev-1.13.0` calls 3, tokens in 2346, cost 0.0001 USD, excerpt selection `openrouter/openai/gpt-6-luna` calls 1, tokens in 31226 / out 126, cost 0.0040 USD (reported), build file judge `jev-1.13.0` calls 3, tokens in 3364, cost 0.0001 USD, phases: path_judge 0.2 s, classifier 0.2 s, context 4.0 s, model_review 35.8 s, config: defaults + host + repository (.werkrevisor.toml at main c218a0c).
Reviewed head `8a2eab8833cd7310a325609915f2dd9c6e886850` against base `c218a0c0c2f7b8169b4e9c8108d4c5b69328dec4`, werkrevisor 0.39.0.
<!-- werkrevisor:8a2eab8833cd7310a325609915f2dd9c6e886850 --> <!-- werkrevisor-verdict:YELLOW --> <!-- werkrevisor-blocks:853c92f22ad9f5e272f17c95e63d891f,b1023f4b5577b59cc8ef8975b143a32b,78a3905c8810a82d4266a94a7dcfa6ea,bfe49dc3fe39dcd689b2cfec8859c937,0a5f51ce5c9ee0df446bb1bab0691a6f,a583d632e341cb52b31a05a0263e551e,ea0db61c66bd9d965285938c4e278c2c,1f132a813b4c6855063b1019a4fbad4a,c22dd247dcda28f3b0e134565eb73ec3,251804718a646697d0c94d11671f220c --> <!-- werkrevisor-folded --> <details><summary>🟡 werkrevisor YELLOW for <code>8a2eab8</code>, superseded by <a href="http://git.javagil.de/mi/werkator/pulls/157#issuecomment-4861">the result for <code>ae688a0</code></a></summary> ## 🟡 werkrevisor: YELLOW / HUMAN_REVIEW Change kind: `mixed`. ### Reasons - **YELLOW** tests lost or disabled: src/test/kotlin/de/hoennig/werkator/build/ProcessTreeCpuTimeIntegrationTest.kt:37 removes 1 test(s) or assertion(s) without a replacement - **hint** 2 changed file(s) that neither weaken the checks, touch security nor show a risk category of jvm-spring-backend according to Jev - **hint** 1 build change(s) of low risk according to Jev: build.gradle.kts (weakens checks 0.03, risk 0.00, security 0.01) - **hint** 1 changed file was given to the AI as excerpt of the selected lines and 5 lines around each changed line, not in full (each larger than [review] max_full_file_chars = 80000): src/main/resources/templates/releases.html ### Classifier 3 of 3 units passed all questions (1 PR document(s)). <sub> Usage: model `openrouter/minimax/minimax-m3`, LLM done, tokens counted before the call 18281, calls 1, tokens in 17545 / out 5026 (reasoning included in out), duration 40.6 s, cost 0.0113 USD (reported), classifier `jev-1.13.0` calls 3, tokens in 2346, cost 0.0001 USD, excerpt selection `openrouter/openai/gpt-6-luna` calls 1, tokens in 31226 / out 126, cost 0.0040 USD (reported), build file judge `jev-1.13.0` calls 3, tokens in 3364, cost 0.0001 USD, phases: path_judge 0.2 s, classifier 0.2 s, context 4.0 s, model_review 35.8 s, config: defaults + host + repository (.werkrevisor.toml at main c218a0c).<br> Reviewed head `8a2eab8833cd7310a325609915f2dd9c6e886850` against base `c218a0c0c2f7b8169b4e9c8108d4c5b69328dec4`, werkrevisor 0.39.0. </sub> </details>
ai-reviewer scheduled this pull request to auto merge when all checks succeed 2026-10-12 17:50:29 +02:00
ai-reviewer requested review from mi 2026-10-12 17:50:29 +02:00
claude-code added 1 commit 2026-10-12 17:52:07 +02:00
Review: the asserted bound stays as it was
ai-review/assessment AI review passed; approved by werkrevisor; merge already scheduled; review request of mi withdrawn
ai-review/gate build succeeded after 00:50
werkator build succeeded after 02:58
ae688a07a4
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Collaborator

🟢 werkrevisor: GREEN / PASS

Change kind: mixed.

Reasons

  • hint 2 changed file(s) that neither weaken the checks, touch security nor show a risk category of jvm-spring-backend according to Jev
  • hint 1 build change(s) of low risk according to Jev: build.gradle.kts (weakens checks 0.03, risk 0.00, security 0.01)
  • hint 1 changed file was given to the AI as excerpt of the selected lines and 5 lines around each changed line, not in full (each larger than [review] max_full_file_chars = 80000): src/main/resources/templates/releases.html

Classifier

3 of 3 units passed all questions (1 PR document(s)).

Usage: model `openrouter/minimax/minimax-m3`, LLM done, tokens counted before the call 18228, calls 1, tokens in 17502 / out 5994 (reasoning included in out), duration 47.5 s, cost 0.0124 USD (reported), classifier `jev-1.13.0` calls 3, tokens in 2346, cost 0.0001 USD, excerpt selection `openrouter/openai/gpt-6-luna` calls 1, tokens in 31226 / out 185, cost 0.0004 USD (reported), build file judge `jev-1.13.0` calls 3, tokens in 3322, cost 0.0001 USD, phases: path_judge 0.2 s, classifier 0.3 s, context 3.6 s, model_review 43.0 s, config: defaults + host + repository (.werkrevisor.toml at main c218a0c).
Reviewed head `ae688a07a4f7fe70dab708ec0f07111765ae604a` against base `c218a0c0c2f7b8169b4e9c8108d4c5b69328dec4`, werkrevisor 0.39.0.
<!-- werkrevisor:ae688a07a4f7fe70dab708ec0f07111765ae604a --> <!-- werkrevisor-verdict:GREEN --> <!-- werkrevisor-blocks:853c92f22ad9f5e272f17c95e63d891f,b1023f4b5577b59cc8ef8975b143a32b,78a3905c8810a82d4266a94a7dcfa6ea,bfe49dc3fe39dcd689b2cfec8859c937,0a5f51ce5c9ee0df446bb1bab0691a6f,a583d632e341cb52b31a05a0263e551e,c987ac2628e8266cdc5426223ee546d2,1f132a813b4c6855063b1019a4fbad4a,d0ed58b08104055c1bb8a77a44a08eab,3e6fed078a214c59036c67ed63804c02,a79227c904cc1f7ca48eb54ee79d7604 --> ## 🟢 werkrevisor: GREEN / PASS Change kind: `mixed`. ### Reasons - **hint** 2 changed file(s) that neither weaken the checks, touch security nor show a risk category of jvm-spring-backend according to Jev - **hint** 1 build change(s) of low risk according to Jev: build.gradle.kts (weakens checks 0.03, risk 0.00, security 0.01) - **hint** 1 changed file was given to the AI as excerpt of the selected lines and 5 lines around each changed line, not in full (each larger than [review] max_full_file_chars = 80000): src/main/resources/templates/releases.html ### Classifier 3 of 3 units passed all questions (1 PR document(s)). <sub> Usage: model `openrouter/minimax/minimax-m3`, LLM done, tokens counted before the call 18228, calls 1, tokens in 17502 / out 5994 (reasoning included in out), duration 47.5 s, cost 0.0124 USD (reported), classifier `jev-1.13.0` calls 3, tokens in 2346, cost 0.0001 USD, excerpt selection `openrouter/openai/gpt-6-luna` calls 1, tokens in 31226 / out 185, cost 0.0004 USD (reported), build file judge `jev-1.13.0` calls 3, tokens in 3322, cost 0.0001 USD, phases: path_judge 0.2 s, classifier 0.3 s, context 3.6 s, model_review 43.0 s, config: defaults + host + repository (.werkrevisor.toml at main c218a0c).<br> Reviewed head `ae688a07a4f7fe70dab708ec0f07111765ae604a` against base `c218a0c0c2f7b8169b4e9c8108d4c5b69328dec4`, werkrevisor 0.39.0. </sub>
ai-reviewer left a comment
Collaborator

werkrevisor: GREEN / PASS for ae688a07a4f7fe70dab708ec0f07111765ae604a.
The result comment of werkrevisor holds the details.

werkrevisor: GREEN / PASS for `ae688a07a4f7fe70dab708ec0f07111765ae604a`. The result comment of werkrevisor holds the details. <!-- werkrevisor-review:ae688a07a4f7fe70dab708ec0f07111765ae604a -->
ai-reviewer removed review request for mi 2026-10-12 17:52:57 +02:00
ai-reviewer merged commit b05347c972 into main 2026-10-12 17:55:10 +02:00
ai-reviewer deleted branch claude-code/cpu-time-test-under-load 2026-10-12 17:55:10 +02:00
ai-reviewer left a comment
Collaborator

Codex review of ae688a07a4f7fe70dab708ec0f07111765ae604a

Codex review of `ae688a07a4f7fe70dab708ec0f07111765ae604a` <!-- werkrevisor-codex -->
@@ -14,0 +13,4 @@
* can see it; `& wait` keeps the outer shell from handing its process over to the loop.
*/
private fun burner(): Process =
ProcessBuilder("sh", "-c", "sh -c 'while :; do :; done' & wait")
Collaborator

[medium] The infinite burner can survive a mutation-test timeout (Codex review)

This spec is included in PIT. A mutant that makes sample() return null or zero keeps the test waiting for 30 seconds, but build.gradle.kts configures PIT with a 20-second timeout allowance beyond its short normal runtime (PIT timeout calculation). PIT can therefore terminate the test JVM before finally executes. The external shell loop then survives and burns CPU indefinitely; repeated mutants can accumulate such processes. Previously the burner stopped itself after two seconds. Give the external process its own bounded lifetime.

Fix it, or reply why it does not hold, and resolve this comment.

**[medium] The infinite burner can survive a mutation-test timeout** (Codex review) This spec is included in PIT. A mutant that makes sample() return null or zero keeps the test waiting for 30 seconds, but build.gradle.kts configures PIT with a 20-second timeout allowance beyond its short normal runtime ([PIT timeout calculation](https://pitest.org/faq/#im-seeing-a-lot-of-timeouts-whats-going-on)). PIT can therefore terminate the test JVM before finally executes. The external shell loop then survives and burns CPU indefinitely; repeated mutants can accumulate such processes. Previously the burner stopped itself after two seconds. Give the external process its own bounded lifetime. Fix it, or reply why it does not hold, and resolve this comment. <!-- werkrevisor-codex -->
Collaborator

Codex review: critical

The change introduces an unbounded external CPU burner whose cleanup depends on the test JVM surviving. Mutation-test timeouts can leave these processes consuming the shared host’s CPU, which an ordinary green test run would not reveal.

Findings

  1. [medium] The infinite burner can survive a mutation-test timeout at src/test/kotlin/de/hoennig/werkator/build/ProcessTreeCpuTimeIntegrationTest.kt:16, as a line comment

This review only advises; it holds no merge.

Model `gpt-6-astra`, effort high, tokens in 306346 (cached 254720) / out 1263, 76.3 s, 6 commands; reviewed head `ae688a07a4f7fe70dab708ec0f07111765ae604a`.
<!-- werkrevisor-codex:ae688a07a4f7fe70dab708ec0f07111765ae604a --> <!-- werkrevisor-codex-critical:true --> <!-- werkrevisor-codex-unattached:0 --> <!-- werkrevisor-codex --> ## Codex review: critical The change introduces an unbounded external CPU burner whose cleanup depends on the test JVM surviving. Mutation-test timeouts can leave these processes consuming the shared host’s CPU, which an ordinary green test run would not reveal. ### Findings 1. **[medium] The infinite burner can survive a mutation-test timeout** at `src/test/kotlin/de/hoennig/werkator/build/ProcessTreeCpuTimeIntegrationTest.kt:16`, as a line comment This review only advises; it holds no merge. <sub> Model `gpt-6-astra`, effort high, tokens in 306346 (cached 254720) / out 1263, 76.3 s, 6 commands; reviewed head `ae688a07a4f7fe70dab708ec0f07111765ae604a`. </sub>
Sign in to join this conversation.
No Reviewers
No labels
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: mi/werkator#157