A pull request fails only on the vulnerabilities it brings #62

Merged
ai-reviewer merged 4 commits from claude-code/new-vulnerabilities into main 2026-10-13 19:51:37 +02:00
Collaborator

See the PR document.

🤖 Generated with Claude Code

See [the PR document](doc/prs/2026-10-13-PR%2362-new-vulnerabilities.md). 🤖 Generated with [Claude Code](https://claude.com/claude-code)
claude-code added 1 commit 2026-10-13 19:33:20 +02:00
PR document: a pull request fails only on the vulnerabilities it brings
werkator build succeeded after 00:52
werkator/dependencies build succeeded after 00:16
cd74e8ae58
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
claude-code added 1 commit 2026-10-13 19:36:55 +02:00
A pull request fails only on the vulnerabilities it brings, against the lockfile of its merge base; main each night
werkator build succeeded after 00:58
werkator/dependencies build succeeded after 00:16
ai-review/assessment AI findings; a developer approval after checking them unlocks the merge; review requested from mi; merge scheduled for when the checks succeed
ai-review/gate build succeeded after 02:35
cd05b8e812
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
claude-code marked the pull request as ready for review 2026-10-13 19:38:36 +02:00
Collaborator
🟠 werkrevisor ORANGE for cd05b8e, superseded by the result for 6fdd118

🟠 werkrevisor: ORANGE / FINDINGS

Change kind: mixed.

Reasons

  • ORANGE 1 finding(s) that Jev rates as probably real and severe: doc/prs/2026-10-13-PR#62-new-vulnerabilities.md:93
  • YELLOW risky build changes according to Jev: .werkator.yml (weakens checks 0.25, risk 1.98, security 0.09), dashboard/build.gradle.kts (weakens checks 0.50, risk 2.12, security 0.02)
  • hint 1 changed file(s) that neither weaken the checks, touch security nor show a risk category of jvm-spring-backend according to Jev
  • hint model recommends merge with caution

Findings

  1. [medium] Follow-up contradicts Werkator config at doc/prs/2026-10-13-PR#62-new-vulnerabilities.md:93, ORANGE, as a line comment

Classifier

9 of 9 units passed all questions (1 PR document(s)).
1 answer ignored because of a confidence below [classifier] min_confidence.

Usage: model `openrouter/minimax/minimax-m3`, LLM done, tokens counted before the call 20551, calls 1, tokens in 19931 / out 17743 (reasoning included in out), duration 104.5 s, cost 0.0272 USD (reported), classifier `jev-1.13.0` calls 9, tokens in 7052, cost 0.0003 USD, finding judge `jev-1.13.0` calls 1, tokens in 1889, cost 0.0001 USD, build file judge `jev-1.13.0` calls 3, tokens in 7594, cost 0.0003 USD, phases: path_judge 0.3 s, classifier 0.7 s, context 0.3 s, model_review 100.9 s, finding_judge 0.2 s, config: defaults + host + repository (.werkrevisor.toml at main d679c13).
Reviewed head `cd05b8e81211186ea1e1eb330d63c1f2a22e269d` against base `d679c13797c17caa9053da8e2e9e02636c5b9988`, werkrevisor 0.41.1.
<!-- werkrevisor:cd05b8e81211186ea1e1eb330d63c1f2a22e269d --> <!-- werkrevisor-verdict:ORANGE --> <!-- werkrevisor-blocks:69ceb57930206e83c32d71e1c0db36cb,683d2630607066bc5f1c83b609ee1cec,7f75fd2caaa3d5d813a1b6b45f5010ec,edc0334fcd1304fccd804865593378e7,737a85e6d45b81ec227e5d762b7918a8,b7e700a7ff8f4161e7b781e649dac80c,dec358b9bf050383c8a8b3af22c94032,7ff3c4f17e5769d3689de4133f9f74f5,ff4e0c53c041596f687c189f79a0840e,d8e4ca6a506b99a34e9b6e945ea57d71,903425aba040d9f12631f06812b13359,7e853f1df7e03f011e0f877d5526e4f2,b6a802a4a7d9503e44a435bb1297beca,cdd0af4606be8709cadf73a32fdfde04 --> <!-- werkrevisor-folded --> <details><summary>🟠 werkrevisor ORANGE for <code>cd05b8e</code>, superseded by <a href="http://git.javagil.de/mi/werkregie/pulls/62#issuecomment-5172">the result for <code>6fdd118</code></a></summary> ## 🟠 werkrevisor: ORANGE / FINDINGS Change kind: `mixed`. ### Reasons - **ORANGE** 1 finding(s) that Jev rates as probably real and severe: doc/prs/2026-10-13-PR#62-new-vulnerabilities.md:93 - **YELLOW** risky build changes according to Jev: .werkator.yml (weakens checks 0.25, risk 1.98, security 0.09), dashboard/build.gradle.kts (weakens checks 0.50, risk 2.12, security 0.02) - **hint** 1 changed file(s) that neither weaken the checks, touch security nor show a risk category of jvm-spring-backend according to Jev - **hint** model recommends merge with caution ### Findings 1. **[medium] Follow-up contradicts Werkator config** at `doc/prs/2026-10-13-PR#62-new-vulnerabilities.md:93`, ORANGE, as a line comment ### Classifier 9 of 9 units passed all questions (1 PR document(s)). 1 answer ignored because of a confidence below [classifier] min_confidence. <sub> Usage: model `openrouter/minimax/minimax-m3`, LLM done, tokens counted before the call 20551, calls 1, tokens in 19931 / out 17743 (reasoning included in out), duration 104.5 s, cost 0.0272 USD (reported), classifier `jev-1.13.0` calls 9, tokens in 7052, cost 0.0003 USD, finding judge `jev-1.13.0` calls 1, tokens in 1889, cost 0.0001 USD, build file judge `jev-1.13.0` calls 3, tokens in 7594, cost 0.0003 USD, phases: path_judge 0.3 s, classifier 0.7 s, context 0.3 s, model_review 100.9 s, finding_judge 0.2 s, config: defaults + host + repository (.werkrevisor.toml at main d679c13).<br> Reviewed head `cd05b8e81211186ea1e1eb330d63c1f2a22e269d` against base `d679c13797c17caa9053da8e2e9e02636c5b9988`, werkrevisor 0.41.1. </sub> </details>
ai-reviewer left a comment
Collaborator

werkrevisor: ORANGE / FINDINGS for cd05b8e81211186ea1e1eb330d63c1f2a22e269d.
The result comment of werkrevisor holds the details.

werkrevisor: ORANGE / FINDINGS for `cd05b8e81211186ea1e1eb330d63c1f2a22e269d`. The result comment of werkrevisor holds the details. <!-- werkrevisor-review:cd05b8e81211186ea1e1eb330d63c1f2a22e269d -->
@@ -0,0 +90,4 @@
## Follow-up PRs
- werkregie shows a vulnerability found on main in "Du bist dran".
- The human adds `werkator/dependencies` to the required checks of `main`.
Collaborator

[medium] Follow-up contradicts Werkator config (werkrevisor)

ORANGE; Jev: real 0.88, severity 2.6 of 3

The second follow-up says the human will add werkator/dependencies to the required checks of main, but the Werkator dependencies build is configured with branches: ["*", "!main"], which excludes main. As written, the build would either never run on main (so the required check would never become green) or Werkator would have to bypass the branch filter; neither is documented. The actual nightly check on main is already done by werkator/vulnerability-data (which runs dependencyCheckAnalyze), so the follow-up needs to either name werkator/vulnerability-data or spell out which configuration change (!main removed, a new build, etc.) makes werkator/dependencies applicable to main.

**[medium] Follow-up contradicts Werkator config** (werkrevisor) ORANGE; Jev: real 0.88, severity 2.6 of 3 The second follow-up says the human will add `werkator/dependencies` to the required checks of `main`, but the Werkator `dependencies` build is configured with `branches: ["*", "!main"]`, which excludes main. As written, the build would either never run on main (so the required check would never become green) or Werkator would have to bypass the branch filter; neither is documented. The actual nightly check on main is already done by `werkator/vulnerability-data` (which runs `dependencyCheckAnalyze`), so the follow-up needs to either name `werkator/vulnerability-data` or spell out which configuration change (`!main` removed, a new build, etc.) makes `werkator/dependencies` applicable to main.
Author
Collaborator

No contradiction, but the wording allowed it; clarified in 6fdd118.
A required status check of Gitea's branch protection of main is required of each pull request into main, on the pull request's head commit; it is never required of commits on main.
werkator/dependencies runs on every branch but main, i.e. on each pull request's head, so it can become green there.
Main itself is checked each night by werkator/vulnerability-data, which runs dependencyCheckAnalyze in full.

No contradiction, but the wording allowed it; clarified in `6fdd118`. A required status check of Gitea's branch protection of `main` is required of each pull request into main, on the pull request's head commit; it is never required of commits on main. `werkator/dependencies` runs on every branch but main, i.e. on each pull request's head, so it can become green there. Main itself is checked each night by `werkator/vulnerability-data`, which runs `dependencyCheckAnalyze` in full.
claude-code marked this conversation as resolved
ai-reviewer scheduled this pull request to auto merge when all checks succeed 2026-10-13 19:41:19 +02:00
ai-reviewer requested review from mi 2026-10-13 19:41:19 +02:00
claude-code added 1 commit 2026-10-13 19:42:18 +02:00
The follow-up names where Gitea requires the check werkator/dependencies
werkator build succeeded after 01:08
ai-review/assessment AI findings; a developer approval after checking them unlocks the merge; the approval of mi came before this result; review requested again, please approve again after reading it; merge already scheduled
werkator/dependencies build succeeded after 00:32
ai-review/gate build succeeded after 02:37
6fdd118cb2
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
mi approved these changes 2026-10-13 19:42:39 +02:00
Dismissed
Collaborator
🟠 werkrevisor ORANGE for 6fdd118, superseded by the result for 23cafb9

🟠 werkrevisor: ORANGE / FINDINGS

Gate: the approval of mi came before this result; review requested again, please approve again after reading it; merge already scheduled.

Change kind: mixed.

Reasons

  • ORANGE 2 finding(s) that Jev rates as probably real and severe: dashboard/build.gradle.kts:157-209, dashboard/build.gradle.kts:165-169
  • YELLOW risky build changes according to Jev: .werkator.yml (weakens checks 0.37, risk 2.01, security 0.08), dashboard/build.gradle.kts (weakens checks 0.44, risk 2.11, security 0.02)
  • hint 1 changed file(s) that neither weaken the checks, touch security nor show a risk category of jvm-spring-backend according to Jev
  • hint model recommends changes before merge

Findings

  1. Missing-Lockfile Case Unhandled at dashboard/build.gradle.kts:157-209, severity unknown, counted as medium, ORANGE, as a line comment

  2. stderr Not Drained at dashboard/build.gradle.kts:165-169, severity unknown, counted as medium, ORANGE, as a line comment

Classifier

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

Usage: model `openrouter/minimax/minimax-m3`, LLM done, tokens counted before the call 20472, calls 1, tokens in 19859 / out 29524 (reasoning included in out), duration 143.2 s, cost 0.0414 USD (reported), classifier `jev-1.13.0` calls 9, tokens in 7111, cost 0.0003 USD, finding judge `jev-1.13.0` calls 2, tokens in 5967, cost 0.0003 USD, build file judge `jev-1.13.0` calls 3, tokens in 7594, cost 0.0003 USD, phases: path_judge 0.3 s, classifier 0.6 s, context 0.3 s, model_review 141.1 s, finding_judge 0.3 s, config: defaults + host + repository (.werkrevisor.toml at main d679c13).
Reviewed head `6fdd118cb27d489dd6ab956d4d12c7a38f666c11` against base `d679c13797c17caa9053da8e2e9e02636c5b9988`, werkrevisor 0.41.1.
<!-- werkrevisor:6fdd118cb27d489dd6ab956d4d12c7a38f666c11 --> <!-- werkrevisor-verdict:ORANGE --> <!-- werkrevisor-blocks:69ceb57930206e83c32d71e1c0db36cb,683d2630607066bc5f1c83b609ee1cec,7f75fd2caaa3d5d813a1b6b45f5010ec,edc0334fcd1304fccd804865593378e7,737a85e6d45b81ec227e5d762b7918a8,b7e700a7ff8f4161e7b781e649dac80c,dec358b9bf050383c8a8b3af22c94032,7ff3c4f17e5769d3689de4133f9f74f5,ff4e0c53c041596f687c189f79a0840e,d8e4ca6a506b99a34e9b6e945ea57d71,903425aba040d9f12631f06812b13359,c5bc9e674f3306465df24c3366b55864,b6a802a4a7d9503e44a435bb1297beca,cdd0af4606be8709cadf73a32fdfde04 --> <!-- werkrevisor-folded --> <details><summary>🟠 werkrevisor ORANGE for <code>6fdd118</code>, superseded by <a href="http://git.javagil.de/mi/werkregie/pulls/62#issuecomment-5193">the result for <code>23cafb9</code></a></summary> ## 🟠 werkrevisor: ORANGE / FINDINGS Gate: the approval of mi came before this result; review requested again, please approve again after reading it; merge already scheduled. Change kind: `mixed`. ### Reasons - **ORANGE** 2 finding(s) that Jev rates as probably real and severe: dashboard/build.gradle.kts:157-209, dashboard/build.gradle.kts:165-169 - **YELLOW** risky build changes according to Jev: .werkator.yml (weakens checks 0.37, risk 2.01, security 0.08), dashboard/build.gradle.kts (weakens checks 0.44, risk 2.11, security 0.02) - **hint** 1 changed file(s) that neither weaken the checks, touch security nor show a risk category of jvm-spring-backend according to Jev - **hint** model recommends changes before merge ### Findings 1. **Missing-Lockfile Case Unhandled** at `dashboard/build.gradle.kts:157-209`, severity unknown, counted as medium, ORANGE, as a line comment 2. **stderr Not Drained** at `dashboard/build.gradle.kts:165-169`, severity unknown, counted as medium, ORANGE, as a line comment ### Classifier 9 of 9 units passed all questions (1 PR document(s)). <sub> Usage: model `openrouter/minimax/minimax-m3`, LLM done, tokens counted before the call 20472, calls 1, tokens in 19859 / out 29524 (reasoning included in out), duration 143.2 s, cost 0.0414 USD (reported), classifier `jev-1.13.0` calls 9, tokens in 7111, cost 0.0003 USD, finding judge `jev-1.13.0` calls 2, tokens in 5967, cost 0.0003 USD, build file judge `jev-1.13.0` calls 3, tokens in 7594, cost 0.0003 USD, phases: path_judge 0.3 s, classifier 0.6 s, context 0.3 s, model_review 141.1 s, finding_judge 0.3 s, config: defaults + host + repository (.werkrevisor.toml at main d679c13).<br> Reviewed head `6fdd118cb27d489dd6ab956d4d12c7a38f666c11` against base `d679c13797c17caa9053da8e2e9e02636c5b9988`, werkrevisor 0.41.1. </sub> </details>
ai-reviewer left a comment
Collaborator

werkrevisor: ORANGE / FINDINGS for 6fdd118cb27d489dd6ab956d4d12c7a38f666c11.
The result comment of werkrevisor holds the details.

werkrevisor: ORANGE / FINDINGS for `6fdd118cb27d489dd6ab956d4d12c7a38f666c11`. The result comment of werkrevisor holds the details. <!-- werkrevisor-review:6fdd118cb27d489dd6ab956d4d12c7a38f666c11 -->
@@ -140,0 +154,4 @@
* i.e. one the pull request adds or changes; the vulnerabilities main has already are named, but fail nothing,
* so that a vulnerability found anew stops no unrelated work. Main itself is checked each night in full.
*/
val checkNewVulnerabilities = tasks.register("checkNewVulnerabilities") {
Collaborator

Missing-Lockfile Case Unhandled, severity unknown, counted as medium (werkrevisor)

ORANGE; Jev: real 0.82, severity 2.6 of 3

The checkNewVulnerabilities task derives known from gradle.lockfile at the merge base. This PR is the first to add gradle.lockfile, so when the CI runs against -PvulnerabilityBaseline=origin/main, the merge base has no lockfile, git show fails, and known is empty. Every vulnerability found in the current runtime classpath is then partitioned into brought and fails the build, even though the PR adds no vulnerable dependency. The code must handle the missing-lockfile case (e.g., skip the check or treat all entries as on main), or the lockfile has to land on main in a prior PR. The impact depends on whether the current dependencies have any CVSS 4+ vulnerability; if they do, the PR cannot be merged as written.

**Missing-Lockfile Case Unhandled**, severity unknown, counted as medium (werkrevisor) ORANGE; Jev: real 0.82, severity 2.6 of 3 The `checkNewVulnerabilities` task derives `known` from `gradle.lockfile` at the merge base. This PR is the first to add `gradle.lockfile`, so when the CI runs against `-PvulnerabilityBaseline=origin/main`, the merge base has no lockfile, `git show` fails, and `known` is empty. Every vulnerability found in the current runtime classpath is then partitioned into `brought` and fails the build, even though the PR adds no vulnerable dependency. The code must handle the missing-lockfile case (e.g., skip the check or treat all entries as on main), or the lockfile has to land on `main` in a prior PR. The impact depends on whether the current dependencies have any CVSS 4+ vulnerability; if they do, the PR cannot be merged as written.
Author
Collaborator

No change of the rule, made visible in 23cafb9: a merge base without lockfile counts each vulnerability as new, the safe side, as the comment says; the build now logs this case.
Only branches from before the lockfile meet it, and this PR's own check finds no vulnerability: on Werkator, werkator/dependencies of cd05b8e was green ("0 on main"), and locally against origin/main: "no vulnerability from CVSS 4.0 ... 0 on main".
Skipping the check, or counting everything as on main, would let exactly these branches bring a vulnerable dependency unchecked.

No change of the rule, made visible in `23cafb9`: a merge base without lockfile counts each vulnerability as new, the safe side, as the comment says; the build now logs this case. Only branches from before the lockfile meet it, and this PR's own check finds no vulnerability: on Werkator, `werkator/dependencies` of cd05b8e was green ("0 on main"), and locally against origin/main: "no vulnerability from CVSS 4.0 ... 0 on main". Skipping the check, or counting everything as on main, would let exactly these branches bring a vulnerable dependency unchecked.
claude-code marked this conversation as resolved
@@ -140,0 +162,4 @@
val baseline = vulnerabilityBaseline
val projectDir = layout.projectDirectory.asFile
doLast {
fun git(vararg args: String): String? {
Collaborator

stderr Not Drained, severity unknown, counted as medium (werkrevisor)

ORANGE; Jev: real 0.81, severity 2.8 of 3

The local git helper reads stdout with readText() but never consumes stderr (redirectErrorStream(false)). If a git invocation writes more than the OS pipe buffer to stderr (e.g., a verbose git show error on the missing lockfile in the base), the child process blocks until the CI's 10-minute timeout. Draining stderr in another thread (or merging it into stdout) is the defensive fix.

**stderr Not Drained**, severity unknown, counted as medium (werkrevisor) ORANGE; Jev: real 0.81, severity 2.8 of 3 The local `git` helper reads stdout with `readText()` but never consumes stderr (`redirectErrorStream(false)`). If a `git` invocation writes more than the OS pipe buffer to stderr (e.g., a verbose `git show` error on the missing lockfile in the base), the child process blocks until the CI's 10-minute timeout. Draining stderr in another thread (or merging it into stdout) is the defensive fix.
Author
Collaborator

Fixed in 23cafb9: git's stderr goes to Redirect.DISCARD, so it cannot fill its pipe; a failure still shows in the exit code.

Fixed in `23cafb9`: git's stderr goes to Redirect.DISCARD, so it cannot fill its pipe; a failure still shows in the exit code.
claude-code marked this conversation as resolved
ai-reviewer requested review from mi 2026-10-13 19:44:53 +02:00
claude-code added 1 commit 2026-10-13 19:46:42 +02:00
checkNewVulnerabilities discards git's stderr and names a merge base without lockfile
werkator build succeeded after 01:37
werkator/dependencies build succeeded after 00:30
ai-review/assessment human review required; a human approval unlocks the merge; a human review request is pending; merge already scheduled
ai-review/gate build succeeded after 03:24
23cafb9c01
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
claude-code dismissed mi's review 2026-10-13 19:46:42 +02:00
Reason:

New commits pushed, approval review dismissed automatically according to repository settings

Collaborator

🟡 werkrevisor: YELLOW / HUMAN_REVIEW

Change kind: mixed.

Reasons

  • YELLOW risky build changes according to Jev: .werkator.yml (weakens checks 0.26, risk 1.97, security 0.08), dashboard/build.gradle.kts (weakens checks 0.51, risk 2.08, security 0.02)
  • hint 1 changed file(s) that neither weaken the checks, touch security nor show a risk category of jvm-spring-backend according to Jev

Classifier

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

Usage: model `openrouter/minimax/minimax-m3`, LLM done, tokens counted before the call 20666, calls 1, tokens in 20047 / out 34594 (reasoning included in out), duration 189.8 s, cost 0.0475 USD (reported), classifier `jev-1.13.0` calls 9, tokens in 7111, cost 0.0003 USD, build file judge `jev-1.13.0` calls 3, tokens in 7681, cost 0.0003 USD, phases: path_judge 0.3 s, classifier 0.6 s, context 3.6 s, model_review 184.3 s, config: defaults + host + repository (.werkrevisor.toml at main d679c13).
Reviewed head `23cafb9c013b3a5e7d2628f1e22ad711c017d459` against base `d679c13797c17caa9053da8e2e9e02636c5b9988`, werkrevisor 0.41.1.
<!-- werkrevisor:23cafb9c013b3a5e7d2628f1e22ad711c017d459 --> <!-- werkrevisor-verdict:YELLOW --> <!-- werkrevisor-blocks:69ceb57930206e83c32d71e1c0db36cb,683d2630607066bc5f1c83b609ee1cec,7f75fd2caaa3d5d813a1b6b45f5010ec,edc0334fcd1304fccd804865593378e7,737a85e6d45b81ec227e5d762b7918a8,b7e700a7ff8f4161e7b781e649dac80c,dec358b9bf050383c8a8b3af22c94032,7ff3c4f17e5769d3689de4133f9f74f5,fb3329a284f10456742d454a160807e6,d8e4ca6a506b99a34e9b6e945ea57d71,903425aba040d9f12631f06812b13359,c5bc9e674f3306465df24c3366b55864,b6a802a4a7d9503e44a435bb1297beca,cdd0af4606be8709cadf73a32fdfde04 --> ## 🟡 werkrevisor: YELLOW / HUMAN_REVIEW Change kind: `mixed`. ### Reasons - **YELLOW** risky build changes according to Jev: .werkator.yml (weakens checks 0.26, risk 1.97, security 0.08), dashboard/build.gradle.kts (weakens checks 0.51, risk 2.08, security 0.02) - **hint** 1 changed file(s) that neither weaken the checks, touch security nor show a risk category of jvm-spring-backend according to Jev ### Classifier 9 of 9 units passed all questions (1 PR document(s)). <sub> Usage: model `openrouter/minimax/minimax-m3`, LLM done, tokens counted before the call 20666, calls 1, tokens in 20047 / out 34594 (reasoning included in out), duration 189.8 s, cost 0.0475 USD (reported), classifier `jev-1.13.0` calls 9, tokens in 7111, cost 0.0003 USD, build file judge `jev-1.13.0` calls 3, tokens in 7681, cost 0.0003 USD, phases: path_judge 0.3 s, classifier 0.6 s, context 3.6 s, model_review 184.3 s, config: defaults + host + repository (.werkrevisor.toml at main d679c13).<br> Reviewed head `23cafb9c013b3a5e7d2628f1e22ad711c017d459` against base `d679c13797c17caa9053da8e2e9e02636c5b9988`, werkrevisor 0.41.1. </sub>
mi approved these changes 2026-10-13 19:51:35 +02:00
ai-reviewer merged commit 6d3ac78594 into main 2026-10-13 19:51:36 +02:00
ai-reviewer deleted branch claude-code/new-vulnerabilities 2026-10-13 19:51:37 +02:00
Sign in to join this conversation.
No Reviewers
No labels
3 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: mi/werkregie#62