POST /api/builds/<artifactKey>/restart builds a run again; atOriginHead=true builds the newest commit.
BuildRestarts names why one cannot run; the rows show it as the disabled button's title, the API answers 409.
Follow-ups, pull-request targets and gone branches never start at the newest commit.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
claude-code
marked the pull request as ready for review 2026-10-10 23:27:03 +02:00
hint REST API compatibility according to Jev, a hint: src/main/kotlin/de/hoennig/werkator/server/BuildsApiController.kt (0.95)
hint 21 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 2 changed files were given to the AI only as diff, not in full, so it could not check them against the rest of their file (each larger than [review] max_full_file_chars = 80000, and no excerpt fits the limits either): src/main/resources/static/werkator.js, src/main/resources/templates/releases.html (advisory: Jev judged every changed file)
hint 2 changed files were given to the AI as excerpt of the selected lines and 5 lines around each changed line, not in full (all full files together would exceed [review] max_full_files_chars = 160000): src/main/resources/static/werkator.css, src/main/resources/templates/artifact.html
hint 10 changed files were given to the AI only as diff, not in full, so it could not check them against the rest of their file (all full files together would exceed [review] max_full_files_chars = 160000, and no excerpt fits the limits either): src/main/resources/templates/builds.html, src/main/resources/templates/fragments.html, src/test/kotlin/de/hoennig/werkator/server/BranchListingUnitTest.kt and 7 more (advisory: Jev judged every changed file)
hint excerpt selection by openrouter/openai/gpt-6-luna failed, the fixed window was used: src/test/kotlin/de/hoennig/werkator/server/BranchListingUnitTest.kt (a range lies outside the file)
8 of 11 units passed all questions (1 PR document(s)).
2 answers ignored because of a confidence below [classifier] min_confidence.
Usage: model `openrouter/minimax/minimax-m3`, LLM done, tokens counted before the call 80493, calls 1, tokens in 77402 / out 25266 (reasoning included in out), duration 192.1 s, cost 0.0535 USD (reported), classifier `jev-1.13.0` calls 11, tokens in 9387, cost 0.0004 USD, excerpt selection `openrouter/openai/gpt-6-luna` calls 14, tokens in 126778 / out 3148, cost 0.0174 USD (reported), build file judge `jev-1.13.0` calls 22, tokens in 33802, cost 0.0014 USD, phases: path_judge 1.4 s, classifier 0.7 s, context 73.1 s, model_review 116.3 s, config: defaults + host + repository (.werkrevisor.toml at main ace6024).
Reviewed head `ad61b874f1aa1a37fea9ee93967af3c7b6e6a0ed` against base `ace602454b9484c226808c5ad328d122318cefac`, werkrevisor 0.32.2.
<!-- werkrevisor:ad61b874f1aa1a37fea9ee93967af3c7b6e6a0ed -->
<!-- werkrevisor-verdict:YELLOW -->
<!-- werkrevisor-blocks:82386717a348307a5fb7475b31a8766b,4d73b2ce38129a7939680739887d7e31,dbb52771b6b40f3529363603a2269a0d,101e1fc7c9f74257f3d0e773f4c14f43,71ada6c14635c9481e5a6ab7491477b1,89e687499cf3e45c6a39c35bddde0f9f,57a729ce543d1cb90f93a57f20e1d145,615ea38473d2eb2a47c8bfffa2edf050,0f148811039fc6c5eb0e595c584b0cb2,00eed7efc952f84f6cacb92df4e633bd,09ef78957e693a97a679ecf1440420c0,ac49bd3178eecca4adc360569bad53ee,e4b2f6ae44b236d5d7f6f4164ecf479a,d51bd61958967421064e049d08d79700,7021398f424089a5aa587a4f72367464,3e804be479f53b02e49e96d74e829d1c,c23bcfc46f0c7e84ba1556b955feeb5a,9aa43d5dfa7aef3bdf6b146a6ef10def,20c5541d56030b6779b0eaea9e60cadd,1ae0b552f3029bf5afc9b5d8fae991ee,20c5541d56030b6779b0eaea9e60cadd,1ae0b552f3029bf5afc9b5d8fae991ee,e48848e7978208226117b7fb22a35e3b,f4ec1854b2299861994702fc96e886bb,fda2ffd8b20645079efa634b5bcbc454,10fc04a367d36ed314d86106012ebd1d,30f6aaa1e9d85ae39d7ec7352f044aec,641ffca33206d3a655b4ae950b506e81,de9876868c6dde494c6ff0876de26bcb,2d767f1d286924e1d431527cfd76d306,590ab6b6bd86134a4c2819fcc6fe2846,19d89d0f20b012ee84fd4b172230030d,f31c57ebeadd638b5c1b4a1b36477c4c,f7cc076d41df89ff66d293ba838f11b9,9fe23b7a9dba59977008eccf74a778a0,c7b46dfb7eccb005ce24e8e69efe546b,009bda02b0bcc211e2f16e1a7d8b32fa,1141ff1c389c60a1cf61f2f7f4c2e80b,9fe23b7a9dba59977008eccf74a778a0,c7b46dfb7eccb005ce24e8e69efe546b,55aaea86272822990db13ae5c2a0b892,7c36fc769c396d2677ba4fc6bc08e4d6,fd4f3922bcddb79b39c4e18e194b1229,17eff09a7e748d9128362cc2123d7c09,43ed7a98a3655b51f2134a32a2da36ff,1fb66b24a27bb104ba898245a5345340,b5c259c1e8398be96c77e55547b23412,4a4c9613f1f78fb10375c971f26949a8,4bd08c159cca33304406dec9a592a15d,e20b7db9a38667939bf28a711680331d,66eb724c565edd03d64dacb2bb8b7eac,4d536f7549ad9e58976adc3085e0a5b1,d1bc4b74b15a3d4afabbe2d635e595fc,b7e971b25d6421e05974fd3d1584bb6b,67c5b3ca41915f7d626a088686922560,425c4783b30a3f741f085738a566dc81,867d21cad73951988c1ebd4fe0d763f8,be7c9d66c56f46ce057207462399b86e,0a431ad51b251f95ea87d3aa23ed97a9,0785462fb9a12eb39f6f2a76dfc9a634,fe955ffdff7f90947769b0f1482b89b9,527f7bd3b28cf787abf66a6007a32e90,bce2a4489c55ea20e633acc87fd76474,c99533981ba772c0df79b042c0d1c62a,57f9ee23356da4ea33945d159477a175,bcc1fd9b3f624c73c4b8c70914165d9c,48b355127bc4bf9d8c4e7a74830aa1df,3d18d119d4ab55bc4d211074c70f7965,e7d78994e3c948433b1be20237ebe453,7dfdf367cd3d687fc7f0ee4b55f93264,92e5e684d0662934c030e64e01de4d28,925c9b77317819aa0887d9ce067e3f10,c911f41be2a67dab3185a9cad28337ea,1dfe636ed7fe05018b5eac96f0ed27c1,38c3dac6ddabd244e4963caf34a8ea90,b23c9e92e4a5f903ee1c65bac3d97a4f,1223ed5947a1b842a2938447443bbf1e,3cbe93ef9388dc9b4f13ef31b1967756,d0b7e7f3a06c37465604023766e1e087,ab0c7cd1f9c2516c20647e8d6c261bde,6f7723328806813624f08618ddf4931d,8f5ecb0a0034ef6f82cb3353e54cf783,c9e9885f914d8b5d59521572a58150c3,622daac3ddc8f3b07204438c9cec3b04,8f6023d4ff2a8d624aeaa787d29224a8,abfa6bf254a838c06c563378a5c11f67 -->
<!-- werkrevisor-folded -->
<details><summary>🟡 werkrevisor YELLOW for <code>ad61b87</code>, superseded by <a href="http://git.javagil.de/mi/werkator/pulls/150#issuecomment-3462">the result for <code>4923513</code></a></summary>
## 🟡 werkrevisor: YELLOW / HUMAN_REVIEW
Change kind: `mixed`.
### Reasons
- **YELLOW** spec: docs/prs/2026-10-10-PR#150-two-restarts.md Scenario#150.02 hard_to_read (0.54 > yellow_above = 0.5)
- **YELLOW** spec: docs/prs/2026-10-10-PR#150-two-restarts.md Scenario#150.06 hard_to_read (0.55 > yellow_above = 0.5)
- **YELLOW** spec: docs/prs/2026-10-10-PR#150-two-restarts.md Scenario#150.07 more_than_one_aspect (0.62 > yellow_above = 0.6)
- **hint** REST API compatibility according to Jev, a hint: src/main/kotlin/de/hoennig/werkator/server/BuildsApiController.kt (0.95)
- **hint** 21 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** 2 changed files were given to the AI only as diff, not in full, so it could not check them against the rest of their file (each larger than [review] max_full_file_chars = 80000, and no excerpt fits the limits either): src/main/resources/static/werkator.js, src/main/resources/templates/releases.html (advisory: Jev judged every changed file)
- **hint** 2 changed files were given to the AI as excerpt of the selected lines and 5 lines around each changed line, not in full (all full files together would exceed [review] max_full_files_chars = 160000): src/main/resources/static/werkator.css, src/main/resources/templates/artifact.html
- **hint** 10 changed files were given to the AI only as diff, not in full, so it could not check them against the rest of their file (all full files together would exceed [review] max_full_files_chars = 160000, and no excerpt fits the limits either): src/main/resources/templates/builds.html, src/main/resources/templates/fragments.html, src/test/kotlin/de/hoennig/werkator/server/BranchListingUnitTest.kt and 7 more (advisory: Jev judged every changed file)
- **hint** excerpt selection by openrouter/openai/gpt-6-luna failed, the fixed window was used: src/test/kotlin/de/hoennig/werkator/server/BranchListingUnitTest.kt (a range lies outside the file)
### Classifier
| Unit | Question | Problem | Confidence | Verdict |
|---|---|---|---|---|
| docs/prs/2026-10-10-PR#150-two-restarts.md Scenario#150.02 | hard_to_read | 0.54 | 0.55 | YELLOW |
| docs/prs/2026-10-10-PR#150-two-restarts.md Scenario#150.06 | hard_to_read | 0.55 | 0.52 | YELLOW |
| docs/prs/2026-10-10-PR#150-two-restarts.md Scenario#150.07 | more_than_one_aspect | 0.62 | – | YELLOW |
8 of 11 units passed all questions (1 PR document(s)).
2 answers ignored because of a confidence below [classifier] min_confidence.
<sub>
Usage: model `openrouter/minimax/minimax-m3`, LLM done, tokens counted before the call 80493, calls 1, tokens in 77402 / out 25266 (reasoning included in out), duration 192.1 s, cost 0.0535 USD (reported), classifier `jev-1.13.0` calls 11, tokens in 9387, cost 0.0004 USD, excerpt selection `openrouter/openai/gpt-6-luna` calls 14, tokens in 126778 / out 3148, cost 0.0174 USD (reported), build file judge `jev-1.13.0` calls 22, tokens in 33802, cost 0.0014 USD, phases: path_judge 1.4 s, classifier 0.7 s, context 73.1 s, model_review 116.3 s, config: defaults + host + repository (.werkrevisor.toml at main ace6024).<br>
Reviewed head `ad61b874f1aa1a37fea9ee93967af3c7b6e6a0ed` against base `ace602454b9484c226808c5ad328d122318cefac`, werkrevisor 0.32.2.
</sub>
</details>
ai-reviewer
scheduled this pull request to auto merge when all checks succeed 2026-10-10 23:30:22 +02:00
ai-reviewer
requested review from mi 2026-10-10 23:30:22 +02:00
claude-code
marked the pull request as work in progress 2026-10-10 23:30:44 +02:00
ai-review/assessment AI findings; a developer approval after checking them unlocks the merge; a human review request is pending; merge already scheduled
ORANGE 1 finding(s) that Jev rates as probably real and severe: src/main/kotlin/de/hoennig/werkator/server/BuildRestarts.kt:56-62
hint REST API compatibility according to Jev, a hint: src/main/kotlin/de/hoennig/werkator/server/BuildsApiController.kt (0.95)
hint 21 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 2 changed files were given to the AI only as diff, not in full, so it could not check them against the rest of their file (each larger than [review] max_full_file_chars = 80000, and no excerpt fits the limits either): src/main/resources/static/werkator.js, src/main/resources/templates/releases.html (advisory: Jev judged every changed file)
hint 2 changed files were given to the AI as excerpt of the selected lines and 5 lines around each changed line, not in full (all full files together would exceed [review] max_full_files_chars = 160000): src/main/resources/static/werkator.css, src/main/resources/templates/artifact.html
hint 10 changed files were given to the AI only as diff, not in full, so it could not check them against the rest of their file (all full files together would exceed [review] max_full_files_chars = 160000, and no excerpt fits the limits either): src/main/resources/templates/builds.html, src/main/resources/templates/fragments.html, src/test/kotlin/de/hoennig/werkator/server/BranchListingUnitTest.kt and 7 more (advisory: Jev judged every changed file)
hint model recommends merge with caution
Findings
Branch-defined follow-up not refused at src/main/kotlin/de/hoennig/werkator/server/BuildRestarts.kt:56-62, severity unknown, counted as medium, ORANGE, as a line comment
Classifier
12 of 12 units passed all questions (1 PR document(s)).
3 answers ignored because of a confidence below [classifier] min_confidence.
Usage: model `openrouter/minimax/minimax-m3`, LLM done, tokens counted before the call 80505, calls 1, tokens in 77417 / out 21785 (reasoning included in out), duration 164.6 s, cost 0.0493 USD (reported), classifier `jev-1.13.0` calls 12, tokens in 10214, cost 0.0004 USD, finding judge `jev-1.13.0` calls 1, tokens in 2023, cost 0.0001 USD, excerpt selection `openrouter/openai/gpt-6-luna` calls 14, tokens in 126778 / out 2680, cost 0.0041 USD (reported), build file judge `jev-1.13.0` calls 22, tokens in 33802, cost 0.0014 USD, phases: path_judge 1.3 s, classifier 0.8 s, context 59.2 s, model_review 102.6 s, finding_judge 0.2 s, config: defaults + host + repository (.werkrevisor.toml at main ace6024).
Reviewed head `4923513e7601f8d26b75e0f1106cc00ee746751b` against base `ace602454b9484c226808c5ad328d122318cefac`, werkrevisor 0.32.2.
<!-- werkrevisor:4923513e7601f8d26b75e0f1106cc00ee746751b -->
<!-- werkrevisor-verdict:ORANGE -->
<!-- werkrevisor-blocks:82386717a348307a5fb7475b31a8766b,4d73b2ce38129a7939680739887d7e31,dbb52771b6b40f3529363603a2269a0d,3c23de67084611907552a9e4fff60e95,71ada6c14635c9481e5a6ab7491477b1,89e687499cf3e45c6a39c35bddde0f9f,57a729ce543d1cb90f93a57f20e1d145,615ea38473d2eb2a47c8bfffa2edf050,0f148811039fc6c5eb0e595c584b0cb2,00eed7efc952f84f6cacb92df4e633bd,09ef78957e693a97a679ecf1440420c0,ac49bd3178eecca4adc360569bad53ee,e4b2f6ae44b236d5d7f6f4164ecf479a,d51bd61958967421064e049d08d79700,7021398f424089a5aa587a4f72367464,3e804be479f53b02e49e96d74e829d1c,c23bcfc46f0c7e84ba1556b955feeb5a,9aa43d5dfa7aef3bdf6b146a6ef10def,20c5541d56030b6779b0eaea9e60cadd,1ae0b552f3029bf5afc9b5d8fae991ee,20c5541d56030b6779b0eaea9e60cadd,1ae0b552f3029bf5afc9b5d8fae991ee,e48848e7978208226117b7fb22a35e3b,f4ec1854b2299861994702fc96e886bb,fda2ffd8b20645079efa634b5bcbc454,10fc04a367d36ed314d86106012ebd1d,30f6aaa1e9d85ae39d7ec7352f044aec,641ffca33206d3a655b4ae950b506e81,de9876868c6dde494c6ff0876de26bcb,2d767f1d286924e1d431527cfd76d306,590ab6b6bd86134a4c2819fcc6fe2846,19d89d0f20b012ee84fd4b172230030d,f31c57ebeadd638b5c1b4a1b36477c4c,f7cc076d41df89ff66d293ba838f11b9,9fe23b7a9dba59977008eccf74a778a0,c7b46dfb7eccb005ce24e8e69efe546b,009bda02b0bcc211e2f16e1a7d8b32fa,1141ff1c389c60a1cf61f2f7f4c2e80b,9fe23b7a9dba59977008eccf74a778a0,c7b46dfb7eccb005ce24e8e69efe546b,55aaea86272822990db13ae5c2a0b892,7c36fc769c396d2677ba4fc6bc08e4d6,fd4f3922bcddb79b39c4e18e194b1229,17eff09a7e748d9128362cc2123d7c09,43ed7a98a3655b51f2134a32a2da36ff,1fb66b24a27bb104ba898245a5345340,b5c259c1e8398be96c77e55547b23412,4a4c9613f1f78fb10375c971f26949a8,4bd08c159cca33304406dec9a592a15d,e20b7db9a38667939bf28a711680331d,66eb724c565edd03d64dacb2bb8b7eac,4d536f7549ad9e58976adc3085e0a5b1,d1bc4b74b15a3d4afabbe2d635e595fc,b7e971b25d6421e05974fd3d1584bb6b,67c5b3ca41915f7d626a088686922560,425c4783b30a3f741f085738a566dc81,867d21cad73951988c1ebd4fe0d763f8,be7c9d66c56f46ce057207462399b86e,0a431ad51b251f95ea87d3aa23ed97a9,0785462fb9a12eb39f6f2a76dfc9a634,fe955ffdff7f90947769b0f1482b89b9,527f7bd3b28cf787abf66a6007a32e90,bce2a4489c55ea20e633acc87fd76474,c99533981ba772c0df79b042c0d1c62a,57f9ee23356da4ea33945d159477a175,93a6b20bd602d4ac32e2f070b9646c60,48b355127bc4bf9d8c4e7a74830aa1df,3d18d119d4ab55bc4d211074c70f7965,e7d78994e3c948433b1be20237ebe453,7dfdf367cd3d687fc7f0ee4b55f93264,92e5e684d0662934c030e64e01de4d28,925c9b77317819aa0887d9ce067e3f10,c911f41be2a67dab3185a9cad28337ea,1dfe636ed7fe05018b5eac96f0ed27c1,38c3dac6ddabd244e4963caf34a8ea90,b23c9e92e4a5f903ee1c65bac3d97a4f,1223ed5947a1b842a2938447443bbf1e,3cbe93ef9388dc9b4f13ef31b1967756,d0b7e7f3a06c37465604023766e1e087,ab0c7cd1f9c2516c20647e8d6c261bde,6f7723328806813624f08618ddf4931d,8f5ecb0a0034ef6f82cb3353e54cf783,c9e9885f914d8b5d59521572a58150c3,622daac3ddc8f3b07204438c9cec3b04,8f6023d4ff2a8d624aeaa787d29224a8,abfa6bf254a838c06c563378a5c11f67 -->
<!-- werkrevisor-folded -->
<details><summary>🟠 werkrevisor ORANGE for <code>4923513</code>, superseded by <a href="http://git.javagil.de/mi/werkator/pulls/150#issuecomment-3469">the result for <code>c8e1842</code></a></summary>
## 🟠 werkrevisor: ORANGE / FINDINGS
Change kind: `mixed`.
### Reasons
- **ORANGE** 1 finding(s) that Jev rates as probably real and severe: src/main/kotlin/de/hoennig/werkator/server/BuildRestarts.kt:56-62
- **hint** REST API compatibility according to Jev, a hint: src/main/kotlin/de/hoennig/werkator/server/BuildsApiController.kt (0.95)
- **hint** 21 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** 2 changed files were given to the AI only as diff, not in full, so it could not check them against the rest of their file (each larger than [review] max_full_file_chars = 80000, and no excerpt fits the limits either): src/main/resources/static/werkator.js, src/main/resources/templates/releases.html (advisory: Jev judged every changed file)
- **hint** 2 changed files were given to the AI as excerpt of the selected lines and 5 lines around each changed line, not in full (all full files together would exceed [review] max_full_files_chars = 160000): src/main/resources/static/werkator.css, src/main/resources/templates/artifact.html
- **hint** 10 changed files were given to the AI only as diff, not in full, so it could not check them against the rest of their file (all full files together would exceed [review] max_full_files_chars = 160000, and no excerpt fits the limits either): src/main/resources/templates/builds.html, src/main/resources/templates/fragments.html, src/test/kotlin/de/hoennig/werkator/server/BranchListingUnitTest.kt and 7 more (advisory: Jev judged every changed file)
- **hint** model recommends merge with caution
### Findings
1. **Branch-defined follow-up not refused** at `src/main/kotlin/de/hoennig/werkator/server/BuildRestarts.kt:56-62`, severity unknown, counted as medium, ORANGE, as a line comment
### Classifier
12 of 12 units passed all questions (1 PR document(s)).
3 answers ignored because of a confidence below [classifier] min_confidence.
<sub>
Usage: model `openrouter/minimax/minimax-m3`, LLM done, tokens counted before the call 80505, calls 1, tokens in 77417 / out 21785 (reasoning included in out), duration 164.6 s, cost 0.0493 USD (reported), classifier `jev-1.13.0` calls 12, tokens in 10214, cost 0.0004 USD, finding judge `jev-1.13.0` calls 1, tokens in 2023, cost 0.0001 USD, excerpt selection `openrouter/openai/gpt-6-luna` calls 14, tokens in 126778 / out 2680, cost 0.0041 USD (reported), build file judge `jev-1.13.0` calls 22, tokens in 33802, cost 0.0014 USD, phases: path_judge 1.3 s, classifier 0.8 s, context 59.2 s, model_review 102.6 s, finding_judge 0.2 s, config: defaults + host + repository (.werkrevisor.toml at main ace6024).<br>
Reviewed head `4923513e7601f8d26b75e0f1106cc00ee746751b` against base `ace602454b9484c226808c5ad328d122318cefac`, werkrevisor 0.32.2.
</sub>
</details>
werkrevisor: ORANGE / FINDINGS for 4923513e7601f8d26b75e0f1106cc00ee746751b.
The result comment of werkrevisor holds the details.
werkrevisor: ORANGE / FINDINGS for `4923513e7601f8d26b75e0f1106cc00ee746751b`.
The result comment of werkrevisor holds the details.
<!-- werkrevisor-review:4923513e7601f8d26b75e0f1106cc00ee746751b -->
Branch-defined follow-up not refused, severity unknown, counted as medium (werkrevisor)
ORANGE; Jev: real 0.85, severity 3.0 of 3
RestartPolicy.predecessors() reads only the primary configuration via
configLoader.load(repo.workingDir), without loading the branch layer. A branch that defines
a sandboxed trigger.afterSuccessOf (explicitly allowed by AGENTS.md: "ordinary sandboxed
trigger.afterSuccessOf definitions remain branch-configurable") is therefore not in the
predecessors map, so BuildRestarts.newestCommitRefusal() returns null for it. The "Build
the newest commit of ..." button stays enabled, and POST /api/builds/restart with
atOriginHead=true starts the follow-up at the head commit without its predecessor having
turned green — the very thing the PR's own Non-Goals ("A follow-up build never starts at the
newest commit: without its predecessor's green run it would, e.g., deploy untested code")
says the refusal exists to prevent. The code comment documents the choice ("the privileged
ones are host-pinned and stand here"), but the rationale does not distinguish between
sandboxed and privileged follow-ups. No test exercises a branch-defined follow-up against the
real RestartPolicy: BuildsApiControllerRestTest injects the predecessors map directly.
**Branch-defined follow-up not refused**, severity unknown, counted as medium (werkrevisor)
ORANGE; Jev: real 0.85, severity 3.0 of 3
RestartPolicy.predecessors() reads only the primary configuration via
configLoader.load(repo.workingDir), without loading the branch layer. A branch that defines
a sandboxed trigger.afterSuccessOf (explicitly allowed by AGENTS.md: "ordinary sandboxed
trigger.afterSuccessOf definitions remain branch-configurable") is therefore not in the
predecessors map, so BuildRestarts.newestCommitRefusal() returns null for it. The "Build
the newest commit of ..." button stays enabled, and POST /api/builds/restart with
atOriginHead=true starts the follow-up at the head commit without its predecessor having
turned green — the very thing the PR's own Non-Goals ("A follow-up build never starts at the
newest commit: without its predecessor's green run it would, e.g., deploy untested code")
says the refusal exists to prevent. The code comment documents the choice ("the privileged
ones are host-pinned and stand here"), but the rationale does not distinguish between
sandboxed and privileged follow-ups. No test exercises a branch-defined follow-up against the
real RestartPolicy: BuildsApiControllerRestTest injects the predecessors map directly.
Fixed in c8e1842: RestartPolicy now reads each branch's definitions with its own layer at its origin head, like the watcher, cached per head commit. A branch-defined follow-up refuses the newest commit too. Scenario#150.09, RestartPolicyUnitTest.
Fixed in `c8e1842`: `RestartPolicy` now reads each branch's definitions with its own layer at its origin head, like the watcher, cached per head commit. A branch-defined follow-up refuses the newest commit too. Scenario#150.09, `RestartPolicyUnitTest`.
claude-code marked this conversation as resolved
claude-code
marked the pull request as work in progress 2026-10-10 23:46:00 +02:00
A follow-up a branch defines for itself refuses the newest commit too.
The definitions are read once per branch and head commit; a gone or unreadable branch falls back to the primary configuration.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
claude-code
marked the pull request as ready for review 2026-10-10 23:49:30 +02:00
hint REST API compatibility according to Jev, a hint: src/main/kotlin/de/hoennig/werkator/server/BuildsApiController.kt (0.95)
hint 22 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
hint 1 changed file was given to the AI only as diff, not in full, so it could not check it against the rest of its file (each larger than [review] max_full_file_chars = 80000, and no excerpt fits the limits either): src/main/resources/static/werkator.js (advisory: Jev judged every changed file)
hint 3 changed files were given to the AI as excerpt of the selected lines and 5 lines around each changed line, not in full (all full files together would exceed [review] max_full_files_chars = 160000): src/main/resources/templates/artifact.html, src/main/resources/templates/builds.html, src/test/kotlin/de/hoennig/werkator/server/BranchListingUnitTest.kt
hint 10 changed files were given to the AI only as diff, not in full, so it could not check them against the rest of their file (all full files together would exceed [review] max_full_files_chars = 160000, and no excerpt fits the limits either): src/main/resources/static/werkator.css, src/main/resources/templates/fragments.html, src/test/kotlin/de/hoennig/werkator/server/BuildRestartsUnitTest.kt and 7 more (advisory: Jev judged every changed file)
12 of 13 units passed all questions (1 PR document(s)).
4 answers ignored because of a confidence below [classifier] min_confidence.
Usage: model `openrouter/minimax/minimax-m3`, LLM done, tokens counted before the call 82085, calls 1, tokens in 78950 / out 20055 (reasoning included in out), duration 141.4 s, cost 0.0477 USD (reported), classifier `jev-1.13.0` calls 13, tokens in 11143, cost 0.0005 USD, excerpt selection `openrouter/openai/gpt-6-luna` calls 15, tokens in 129304 / out 3178, cost 0.0062 USD (reported), build file judge `jev-1.13.0` calls 23, tokens in 36152, cost 0.0015 USD, phases: path_judge 1.3 s, classifier 0.8 s, context 55.4 s, model_review 83.3 s, config: defaults + host + repository (.werkrevisor.toml at main ace6024).
Reviewed head `c8e1842dc71cff3d9d2ef3b51ed3fc7090ab5276` against base `ace602454b9484c226808c5ad328d122318cefac`, werkrevisor 0.32.2.
<!-- werkrevisor:c8e1842dc71cff3d9d2ef3b51ed3fc7090ab5276 -->
<!-- werkrevisor-verdict:YELLOW -->
<!-- werkrevisor-blocks:82386717a348307a5fb7475b31a8766b,4d73b2ce38129a7939680739887d7e31,dbb52771b6b40f3529363603a2269a0d,ebd1b4616622a389527030e39804339f,71ada6c14635c9481e5a6ab7491477b1,89e687499cf3e45c6a39c35bddde0f9f,57a729ce543d1cb90f93a57f20e1d145,615ea38473d2eb2a47c8bfffa2edf050,0f148811039fc6c5eb0e595c584b0cb2,00eed7efc952f84f6cacb92df4e633bd,09ef78957e693a97a679ecf1440420c0,ac49bd3178eecca4adc360569bad53ee,e4b2f6ae44b236d5d7f6f4164ecf479a,ca761bf424d5736d8dfce47037d0954d,67cca113d219ca347480d95aaacb00a1,3d348c4b2f21ec6cb257c1780bf36700,c23bcfc46f0c7e84ba1556b955feeb5a,9aa43d5dfa7aef3bdf6b146a6ef10def,20c5541d56030b6779b0eaea9e60cadd,123737321ae8323392540f2561fcc57b,20c5541d56030b6779b0eaea9e60cadd,123737321ae8323392540f2561fcc57b,e48848e7978208226117b7fb22a35e3b,f4ec1854b2299861994702fc96e886bb,c9d4fd41beb373f77f88ab672fd21b34,10fc04a367d36ed314d86106012ebd1d,30f6aaa1e9d85ae39d7ec7352f044aec,641ffca33206d3a655b4ae950b506e81,de9876868c6dde494c6ff0876de26bcb,2d767f1d286924e1d431527cfd76d306,590ab6b6bd86134a4c2819fcc6fe2846,19d89d0f20b012ee84fd4b172230030d,f31c57ebeadd638b5c1b4a1b36477c4c,f7cc076d41df89ff66d293ba838f11b9,9fe23b7a9dba59977008eccf74a778a0,c7b46dfb7eccb005ce24e8e69efe546b,009bda02b0bcc211e2f16e1a7d8b32fa,1141ff1c389c60a1cf61f2f7f4c2e80b,9fe23b7a9dba59977008eccf74a778a0,c7b46dfb7eccb005ce24e8e69efe546b,55aaea86272822990db13ae5c2a0b892,eb02567d638af959d23d8dc4169c5cdd,b3de9eea627dca94ce71dc5aeb343079,a89fe7867ea389ad5a035f2b3bba2e24,43ed7a98a3655b51f2134a32a2da36ff,1fb66b24a27bb104ba898245a5345340,b5c259c1e8398be96c77e55547b23412,4a4c9613f1f78fb10375c971f26949a8,4bd08c159cca33304406dec9a592a15d,e20b7db9a38667939bf28a711680331d,66eb724c565edd03d64dacb2bb8b7eac,4d536f7549ad9e58976adc3085e0a5b1,d1bc4b74b15a3d4afabbe2d635e595fc,b7e971b25d6421e05974fd3d1584bb6b,67c5b3ca41915f7d626a088686922560,425c4783b30a3f741f085738a566dc81,867d21cad73951988c1ebd4fe0d763f8,be7c9d66c56f46ce057207462399b86e,0a431ad51b251f95ea87d3aa23ed97a9,0785462fb9a12eb39f6f2a76dfc9a634,fe955ffdff7f90947769b0f1482b89b9,20bdb4f049b5ccbc121599d99c87d9b7,bce2a4489c55ea20e633acc87fd76474,c99533981ba772c0df79b042c0d1c62a,53eac1e91151af7e040dc7e468e8e5a0,93a6b20bd602d4ac32e2f070b9646c60,48b355127bc4bf9d8c4e7a74830aa1df,3d18d119d4ab55bc4d211074c70f7965,e7d78994e3c948433b1be20237ebe453,7dfdf367cd3d687fc7f0ee4b55f93264,e5ec30a75d0634c1335e38435cdb3aa6,925c9b77317819aa0887d9ce067e3f10,a873541efbab27fd0b7b0211744ceec5,1dfe636ed7fe05018b5eac96f0ed27c1,beba0f4acbdf03694509e7fa9b349e7a,38c3dac6ddabd244e4963caf34a8ea90,b23c9e92e4a5f903ee1c65bac3d97a4f,1223ed5947a1b842a2938447443bbf1e,3cbe93ef9388dc9b4f13ef31b1967756,35a20ec97459d41f941c3526d9d2b80a,ab0c7cd1f9c2516c20647e8d6c261bde,6f7723328806813624f08618ddf4931d,8f5ecb0a0034ef6f82cb3353e54cf783,c9e9885f914d8b5d59521572a58150c3,622daac3ddc8f3b07204438c9cec3b04,8f6023d4ff2a8d624aeaa787d29224a8,30b0b02849f36b55fd4d570d854e4637 -->
<!-- werkrevisor-folded -->
<details><summary>🟡 werkrevisor YELLOW for <code>c8e1842</code>, superseded by <a href="http://git.javagil.de/mi/werkator/pulls/150#issuecomment-3473">the result for <code>d6c574f</code></a></summary>
## 🟡 werkrevisor: YELLOW / HUMAN_REVIEW
Change kind: `mixed`.
### Reasons
- **YELLOW** spec: docs/prs/2026-10-10-PR#150-two-restarts.md Scenario#150.09 hard_to_read (0.51 > yellow_above = 0.5)
- **hint** REST API compatibility according to Jev, a hint: src/main/kotlin/de/hoennig/werkator/server/BuildsApiController.kt (0.95)
- **hint** 22 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
- **hint** 1 changed file was given to the AI only as diff, not in full, so it could not check it against the rest of its file (each larger than [review] max_full_file_chars = 80000, and no excerpt fits the limits either): src/main/resources/static/werkator.js (advisory: Jev judged every changed file)
- **hint** 3 changed files were given to the AI as excerpt of the selected lines and 5 lines around each changed line, not in full (all full files together would exceed [review] max_full_files_chars = 160000): src/main/resources/templates/artifact.html, src/main/resources/templates/builds.html, src/test/kotlin/de/hoennig/werkator/server/BranchListingUnitTest.kt
- **hint** 10 changed files were given to the AI only as diff, not in full, so it could not check them against the rest of their file (all full files together would exceed [review] max_full_files_chars = 160000, and no excerpt fits the limits either): src/main/resources/static/werkator.css, src/main/resources/templates/fragments.html, src/test/kotlin/de/hoennig/werkator/server/BuildRestartsUnitTest.kt and 7 more (advisory: Jev judged every changed file)
### Classifier
| Unit | Question | Problem | Confidence | Verdict |
|---|---|---|---|---|
| docs/prs/2026-10-10-PR#150-two-restarts.md Scenario#150.09 | hard_to_read | 0.51 | 0.43 | YELLOW |
12 of 13 units passed all questions (1 PR document(s)).
4 answers ignored because of a confidence below [classifier] min_confidence.
<sub>
Usage: model `openrouter/minimax/minimax-m3`, LLM done, tokens counted before the call 82085, calls 1, tokens in 78950 / out 20055 (reasoning included in out), duration 141.4 s, cost 0.0477 USD (reported), classifier `jev-1.13.0` calls 13, tokens in 11143, cost 0.0005 USD, excerpt selection `openrouter/openai/gpt-6-luna` calls 15, tokens in 129304 / out 3178, cost 0.0062 USD (reported), build file judge `jev-1.13.0` calls 23, tokens in 36152, cost 0.0015 USD, phases: path_judge 1.3 s, classifier 0.8 s, context 55.4 s, model_review 83.3 s, config: defaults + host + repository (.werkrevisor.toml at main ace6024).<br>
Reviewed head `c8e1842dc71cff3d9d2ef3b51ed3fc7090ab5276` against base `ace602454b9484c226808c5ad328d122318cefac`, werkrevisor 0.32.2.
</sub>
</details>
claude-code
marked the pull request as work in progress 2026-10-10 23:53:01 +02:00
hint REST API compatibility according to Jev, a hint: src/main/kotlin/de/hoennig/werkator/server/BuildsApiController.kt (0.96)
hint 22 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
hint 1 changed file was given to the AI only as diff, not in full, so it could not check it against the rest of its file (each larger than [review] max_full_file_chars = 80000, and no excerpt fits the limits either): src/main/resources/static/werkator.js (advisory: Jev judged every changed file)
hint 2 changed files were given to the AI as excerpt of the selected lines and 5 lines around each changed line, not in full (all full files together would exceed [review] max_full_files_chars = 160000): src/main/resources/templates/artifact.html, src/main/resources/templates/builds.html
hint 11 changed files were given to the AI only as diff, not in full, so it could not check them against the rest of their file (all full files together would exceed [review] max_full_files_chars = 160000, and no excerpt fits the limits either): src/main/resources/static/werkator.css, src/main/resources/templates/fragments.html, src/test/kotlin/de/hoennig/werkator/server/BranchListingUnitTest.kt and 8 more (advisory: Jev judged every changed file)
Classifier
13 of 13 units passed all questions (1 PR document(s)).
4 answers ignored because of a confidence below [classifier] min_confidence.
Usage: model `openrouter/minimax/minimax-m3`, LLM done, tokens counted before the call 81967, calls 1, tokens in 78834 / out 20127 (reasoning included in out), duration 234.6 s, cost 0.0478 USD (reported), classifier `jev-1.13.0` calls 13, tokens in 11135, cost 0.0005 USD, excerpt selection `openrouter/openai/gpt-6-luna` calls 15, tokens in 129304 / out 2711, cost 0.0027 USD (reported), build file judge `jev-1.13.0` calls 23, tokens in 36152, cost 0.0015 USD, phases: path_judge 1.5 s, classifier 0.9 s, context 50.6 s, model_review 181.1 s, config: defaults + host + repository (.werkrevisor.toml at main ace6024).
Reviewed head `d6c574f0ec066558aa01912f22f3a6fa2d722ef5` against base `ace602454b9484c226808c5ad328d122318cefac`, werkrevisor 0.32.2.
<!-- werkrevisor:d6c574f0ec066558aa01912f22f3a6fa2d722ef5 -->
<!-- werkrevisor-verdict:GREEN -->
<!-- werkrevisor-blocks:82386717a348307a5fb7475b31a8766b,4d73b2ce38129a7939680739887d7e31,dbb52771b6b40f3529363603a2269a0d,2477ea411cf37a8a4e04efa8e1615453,71ada6c14635c9481e5a6ab7491477b1,89e687499cf3e45c6a39c35bddde0f9f,57a729ce543d1cb90f93a57f20e1d145,615ea38473d2eb2a47c8bfffa2edf050,0f148811039fc6c5eb0e595c584b0cb2,00eed7efc952f84f6cacb92df4e633bd,09ef78957e693a97a679ecf1440420c0,ac49bd3178eecca4adc360569bad53ee,e4b2f6ae44b236d5d7f6f4164ecf479a,ca761bf424d5736d8dfce47037d0954d,67cca113d219ca347480d95aaacb00a1,3d348c4b2f21ec6cb257c1780bf36700,c23bcfc46f0c7e84ba1556b955feeb5a,9aa43d5dfa7aef3bdf6b146a6ef10def,20c5541d56030b6779b0eaea9e60cadd,123737321ae8323392540f2561fcc57b,20c5541d56030b6779b0eaea9e60cadd,123737321ae8323392540f2561fcc57b,e48848e7978208226117b7fb22a35e3b,f4ec1854b2299861994702fc96e886bb,c9d4fd41beb373f77f88ab672fd21b34,10fc04a367d36ed314d86106012ebd1d,30f6aaa1e9d85ae39d7ec7352f044aec,641ffca33206d3a655b4ae950b506e81,de9876868c6dde494c6ff0876de26bcb,2d767f1d286924e1d431527cfd76d306,590ab6b6bd86134a4c2819fcc6fe2846,19d89d0f20b012ee84fd4b172230030d,f31c57ebeadd638b5c1b4a1b36477c4c,f7cc076d41df89ff66d293ba838f11b9,9fe23b7a9dba59977008eccf74a778a0,c7b46dfb7eccb005ce24e8e69efe546b,009bda02b0bcc211e2f16e1a7d8b32fa,1141ff1c389c60a1cf61f2f7f4c2e80b,9fe23b7a9dba59977008eccf74a778a0,c7b46dfb7eccb005ce24e8e69efe546b,55aaea86272822990db13ae5c2a0b892,eb02567d638af959d23d8dc4169c5cdd,b3de9eea627dca94ce71dc5aeb343079,a89fe7867ea389ad5a035f2b3bba2e24,43ed7a98a3655b51f2134a32a2da36ff,1fb66b24a27bb104ba898245a5345340,b5c259c1e8398be96c77e55547b23412,4a4c9613f1f78fb10375c971f26949a8,4bd08c159cca33304406dec9a592a15d,e20b7db9a38667939bf28a711680331d,66eb724c565edd03d64dacb2bb8b7eac,4d536f7549ad9e58976adc3085e0a5b1,d1bc4b74b15a3d4afabbe2d635e595fc,b7e971b25d6421e05974fd3d1584bb6b,67c5b3ca41915f7d626a088686922560,425c4783b30a3f741f085738a566dc81,867d21cad73951988c1ebd4fe0d763f8,be7c9d66c56f46ce057207462399b86e,0a431ad51b251f95ea87d3aa23ed97a9,0785462fb9a12eb39f6f2a76dfc9a634,fe955ffdff7f90947769b0f1482b89b9,20bdb4f049b5ccbc121599d99c87d9b7,bce2a4489c55ea20e633acc87fd76474,c99533981ba772c0df79b042c0d1c62a,53eac1e91151af7e040dc7e468e8e5a0,93a6b20bd602d4ac32e2f070b9646c60,48b355127bc4bf9d8c4e7a74830aa1df,3d18d119d4ab55bc4d211074c70f7965,e7d78994e3c948433b1be20237ebe453,7dfdf367cd3d687fc7f0ee4b55f93264,e5ec30a75d0634c1335e38435cdb3aa6,925c9b77317819aa0887d9ce067e3f10,a873541efbab27fd0b7b0211744ceec5,1dfe636ed7fe05018b5eac96f0ed27c1,beba0f4acbdf03694509e7fa9b349e7a,38c3dac6ddabd244e4963caf34a8ea90,b23c9e92e4a5f903ee1c65bac3d97a4f,1223ed5947a1b842a2938447443bbf1e,3cbe93ef9388dc9b4f13ef31b1967756,35a20ec97459d41f941c3526d9d2b80a,ab0c7cd1f9c2516c20647e8d6c261bde,6f7723328806813624f08618ddf4931d,8f5ecb0a0034ef6f82cb3353e54cf783,c9e9885f914d8b5d59521572a58150c3,622daac3ddc8f3b07204438c9cec3b04,8f6023d4ff2a8d624aeaa787d29224a8,30b0b02849f36b55fd4d570d854e4637 -->
## 🟢 werkrevisor: GREEN / PASS
Change kind: `mixed`.
### Reasons
- **hint** REST API compatibility according to Jev, a hint: src/main/kotlin/de/hoennig/werkator/server/BuildsApiController.kt (0.96)
- **hint** 22 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
- **hint** 1 changed file was given to the AI only as diff, not in full, so it could not check it against the rest of its file (each larger than [review] max_full_file_chars = 80000, and no excerpt fits the limits either): src/main/resources/static/werkator.js (advisory: Jev judged every changed file)
- **hint** 2 changed files were given to the AI as excerpt of the selected lines and 5 lines around each changed line, not in full (all full files together would exceed [review] max_full_files_chars = 160000): src/main/resources/templates/artifact.html, src/main/resources/templates/builds.html
- **hint** 11 changed files were given to the AI only as diff, not in full, so it could not check them against the rest of their file (all full files together would exceed [review] max_full_files_chars = 160000, and no excerpt fits the limits either): src/main/resources/static/werkator.css, src/main/resources/templates/fragments.html, src/test/kotlin/de/hoennig/werkator/server/BranchListingUnitTest.kt and 8 more (advisory: Jev judged every changed file)
### Classifier
13 of 13 units passed all questions (1 PR document(s)).
4 answers ignored because of a confidence below [classifier] min_confidence.
<sub>
Usage: model `openrouter/minimax/minimax-m3`, LLM done, tokens counted before the call 81967, calls 1, tokens in 78834 / out 20127 (reasoning included in out), duration 234.6 s, cost 0.0478 USD (reported), classifier `jev-1.13.0` calls 13, tokens in 11135, cost 0.0005 USD, excerpt selection `openrouter/openai/gpt-6-luna` calls 15, tokens in 129304 / out 2711, cost 0.0027 USD (reported), build file judge `jev-1.13.0` calls 23, tokens in 36152, cost 0.0015 USD, phases: path_judge 1.5 s, classifier 0.9 s, context 50.6 s, model_review 181.1 s, config: defaults + host + repository (.werkrevisor.toml at main ace6024).<br>
Reviewed head `d6c574f0ec066558aa01912f22f3a6fa2d722ef5` against base `ace602454b9484c226808c5ad328d122318cefac`, werkrevisor 0.32.2.
</sub>
werkrevisor: GREEN / PASS for d6c574f0ec066558aa01912f22f3a6fa2d722ef5.
The result comment of werkrevisor holds the details.
werkrevisor: GREEN / PASS for `d6c574f0ec066558aa01912f22f3a6fa2d722ef5`.
The result comment of werkrevisor holds the details.
<!-- werkrevisor-review:d6c574f0ec066558aa01912f22f3a6fa2d722ef5 -->
ai-reviewer
removed review request for mi 2026-10-10 23:59:50 +02:00
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
See docs/prs/2026-10-10-PR#150-two-restarts.md
🤖 Generated with Claude Code
🟡 werkrevisor YELLOW for
ad61b87, superseded by the result for4923513🟡 werkrevisor: YELLOW / HUMAN_REVIEW
Change kind:
mixed.Reasons
Classifier
8 of 11 units passed all questions (1 PR document(s)).
Usage: model `openrouter/minimax/minimax-m3`, LLM done, tokens counted before the call 80493, calls 1, tokens in 77402 / out 25266 (reasoning included in out), duration 192.1 s, cost 0.0535 USD (reported), classifier `jev-1.13.0` calls 11, tokens in 9387, cost 0.0004 USD, excerpt selection `openrouter/openai/gpt-6-luna` calls 14, tokens in 126778 / out 3148, cost 0.0174 USD (reported), build file judge `jev-1.13.0` calls 22, tokens in 33802, cost 0.0014 USD, phases: path_judge 1.4 s, classifier 0.7 s, context 73.1 s, model_review 116.3 s, config: defaults + host + repository (.werkrevisor.toml at main2 answers ignored because of a confidence below [classifier] min_confidence.
ace6024).Reviewed head `ad61b874f1aa1a37fea9ee93967af3c7b6e6a0ed` against base `ace602454b9484c226808c5ad328d122318cefac`, werkrevisor 0.32.2.
🟠 werkrevisor ORANGE for
4923513, superseded by the result forc8e1842🟠 werkrevisor: ORANGE / FINDINGS
Change kind:
mixed.Reasons
Findings
src/main/kotlin/de/hoennig/werkator/server/BuildRestarts.kt:56-62, severity unknown, counted as medium, ORANGE, as a line commentClassifier
12 of 12 units passed all questions (1 PR document(s)).
Usage: model `openrouter/minimax/minimax-m3`, LLM done, tokens counted before the call 80505, calls 1, tokens in 77417 / out 21785 (reasoning included in out), duration 164.6 s, cost 0.0493 USD (reported), classifier `jev-1.13.0` calls 12, tokens in 10214, cost 0.0004 USD, finding judge `jev-1.13.0` calls 1, tokens in 2023, cost 0.0001 USD, excerpt selection `openrouter/openai/gpt-6-luna` calls 14, tokens in 126778 / out 2680, cost 0.0041 USD (reported), build file judge `jev-1.13.0` calls 22, tokens in 33802, cost 0.0014 USD, phases: path_judge 1.3 s, classifier 0.8 s, context 59.2 s, model_review 102.6 s, finding_judge 0.2 s, config: defaults + host + repository (.werkrevisor.toml at main3 answers ignored because of a confidence below [classifier] min_confidence.
ace6024).Reviewed head `4923513e7601f8d26b75e0f1106cc00ee746751b` against base `ace602454b9484c226808c5ad328d122318cefac`, werkrevisor 0.32.2.
werkrevisor: ORANGE / FINDINGS for
4923513e7601f8d26b75e0f1106cc00ee746751b.The result comment of werkrevisor holds the details.
@@ -0,0 +53,4 @@* The follow-ups of a repository as its primary configuration defines them. A follow-up a branch* defines in its own layer runs sandboxed; the privileged ones are host-pinned and stand here.*/@ComponentBranch-defined follow-up not refused, severity unknown, counted as medium (werkrevisor)
ORANGE; Jev: real 0.85, severity 3.0 of 3
RestartPolicy.predecessors() reads only the primary configuration via
configLoader.load(repo.workingDir), without loading the branch layer. A branch that defines
a sandboxed trigger.afterSuccessOf (explicitly allowed by AGENTS.md: "ordinary sandboxed
trigger.afterSuccessOf definitions remain branch-configurable") is therefore not in the
predecessors map, so BuildRestarts.newestCommitRefusal() returns null for it. The "Build
the newest commit of ..." button stays enabled, and POST /api/builds/restart with
atOriginHead=true starts the follow-up at the head commit without its predecessor having
turned green — the very thing the PR's own Non-Goals ("A follow-up build never starts at the
newest commit: without its predecessor's green run it would, e.g., deploy untested code")
says the refusal exists to prevent. The code comment documents the choice ("the privileged
ones are host-pinned and stand here"), but the rationale does not distinguish between
sandboxed and privileged follow-ups. No test exercises a branch-defined follow-up against the
real RestartPolicy: BuildsApiControllerRestTest injects the predecessors map directly.
Fixed in
c8e1842:RestartPolicynow reads each branch's definitions with its own layer at its origin head, like the watcher, cached per head commit. A branch-defined follow-up refuses the newest commit too. Scenario#150.09,RestartPolicyUnitTest.🟡 werkrevisor YELLOW for
c8e1842, superseded by the result ford6c574f🟡 werkrevisor: YELLOW / HUMAN_REVIEW
Change kind:
mixed.Reasons
Classifier
12 of 13 units passed all questions (1 PR document(s)).
Usage: model `openrouter/minimax/minimax-m3`, LLM done, tokens counted before the call 82085, calls 1, tokens in 78950 / out 20055 (reasoning included in out), duration 141.4 s, cost 0.0477 USD (reported), classifier `jev-1.13.0` calls 13, tokens in 11143, cost 0.0005 USD, excerpt selection `openrouter/openai/gpt-6-luna` calls 15, tokens in 129304 / out 3178, cost 0.0062 USD (reported), build file judge `jev-1.13.0` calls 23, tokens in 36152, cost 0.0015 USD, phases: path_judge 1.3 s, classifier 0.8 s, context 55.4 s, model_review 83.3 s, config: defaults + host + repository (.werkrevisor.toml at main4 answers ignored because of a confidence below [classifier] min_confidence.
ace6024).Reviewed head `c8e1842dc71cff3d9d2ef3b51ed3fc7090ab5276` against base `ace602454b9484c226808c5ad328d122318cefac`, werkrevisor 0.32.2.
🟢 werkrevisor: GREEN / PASS
Change kind:
mixed.Reasons
Classifier
13 of 13 units passed all questions (1 PR document(s)).
Usage: model `openrouter/minimax/minimax-m3`, LLM done, tokens counted before the call 81967, calls 1, tokens in 78834 / out 20127 (reasoning included in out), duration 234.6 s, cost 0.0478 USD (reported), classifier `jev-1.13.0` calls 13, tokens in 11135, cost 0.0005 USD, excerpt selection `openrouter/openai/gpt-6-luna` calls 15, tokens in 129304 / out 2711, cost 0.0027 USD (reported), build file judge `jev-1.13.0` calls 23, tokens in 36152, cost 0.0015 USD, phases: path_judge 1.5 s, classifier 0.9 s, context 50.6 s, model_review 181.1 s, config: defaults + host + repository (.werkrevisor.toml at main4 answers ignored because of a confidence below [classifier] min_confidence.
ace6024).Reviewed head `d6c574f0ec066558aa01912f22f3a6fa2d722ef5` against base `ace602454b9484c226808c5ad328d122318cefac`, werkrevisor 0.32.2.
werkrevisor: GREEN / PASS for
d6c574f0ec066558aa01912f22f3a6fa2d722ef5.The result comment of werkrevisor holds the details.