hint 7 changed file(s) that neither weaken the checks, touch security nor show a risk category of the repository config according to Jev
hint 1 build change(s) of low risk according to Jev: statistics/build.gradle.kts (weakens checks 0.02, risk 0.00, security 0.02)
hint 10 changed file(s) agree with the PR document according to Jev
hint 1 changed file was given to the AI as excerpt with 40 lines around each changed line, not in full (each larger than [review] max_full_file_chars = 80000): werkrevisor/cli.py
hint excerpt selection by openrouter/openai/gpt-6-luna failed, the fixed window was used: werkrevisor/cli.py (a range lies outside the file)
Classifier
6 of 6 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 36382, calls 1, tokens in 35092 / out 14537 (reasoning included in out), duration 155.8 s, cost 0.0279 USD (reported), classifier `jev-1.13.0` calls 6, tokens in 4940, cost 0.0002 USD, excerpt selection `openrouter/openai/gpt-6-luna` calls 1, tokens in 24557 / out 278, cost 0.0032 USD (reported), PR document check `jev-1.13.0` calls 10, tokens in 23812, cost 0.0010 USD, build file judge `jev-1.13.0` calls 8, tokens in 7560, cost 0.0003 USD, phases: path_judge 0.5 s, classifier 0.4 s, doc_check 0.8 s, context 4.8 s, model_review 148.9 s, config: defaults + host + repository (.werkrevisor.toml at main 88772c4).
Reviewed head `0426c14e50ac65b9013d779b313931b54edcdf0f` against base `88772c494abe8d265952e10c082327a0785451c2`, werkrevisor 0.54.1.
<!-- werkrevisor:0426c14e50ac65b9013d779b313931b54edcdf0f -->
<!-- werkrevisor-verdict:GREEN -->
<!-- werkrevisor-blocks:8102a2f34ad23d90ba6b6c1cdf516e40,ccec1e866aa9f91e4ba83029a486a285,cc1909b243b6d269efa410c1e89d3f41,eeefe1ebcde182613197ec0aefd5f5f5,df8711a9adfffba37063837cdbd3d331,c53429501a14ae6a34c05e2f32c10734,57e0e1ac4af3a94adeb4276f1a8096fb,1e28cea6304297f8b0b92c1f750c03f8,9403d822502d4e6d0041029529eb5fa5,5baf2af922ba1244d38efd9556c32311,052fcdd9797bd2a50907739e223a15a8,bae46659f9425b760c925d8320ff2044,bfaf56a6bf0ea377623f1c8717a5e28d,97f0de698613ce7de2257f9530bccd39,8b6c3141398852433efb8e76d8811886,4b06d771e9ea486137956fd556b69740,30c46b4057f41f08604058c6f427826c,c6e107fc0249091957d7498f62ff7266,4c01e722232ac67c14e1963070c3f79b,536732d6c22e29671a203371bac9fcea,295c95068c6a06b13448cf2e0729a460,ed9eae77367d93fab6543b374ccc24c8,947c65bfa7fc89e4c20ade2785f06e17,5ec17ca5c8bd0506bbe5288127941958,edcc3585c67144de1e1f1f443d7ee0f5,5175f3ba702c93939279724837b299c4,e43f099488f94f9db59910913d4c8751,8d8135960f4a25705d5dee92337a6fa3,2c749db59f8bcf6f7388f0c3870c4a73 -->
<!-- werkrevisor-folded -->
<details><summary>🟢 werkrevisor GREEN for <code>0426c14</code>, superseded by <a href="http://git.javagil.de/mi/werkrevisor/pulls/129#issuecomment-6847">the result for <code>c20a7ea</code></a></summary>
## 🟢 werkrevisor: GREEN / PASS
Change kind: `mixed`.
### Reasons
- **hint** 7 changed file(s) that neither weaken the checks, touch security nor show a risk category of the repository config according to Jev
- **hint** 1 build change(s) of low risk according to Jev: statistics/build.gradle.kts (weakens checks 0.02, risk 0.00, security 0.02)
- **hint** 10 changed file(s) agree with the PR document according to Jev
- **hint** 1 changed file was given to the AI as excerpt with 40 lines around each changed line, not in full (each larger than [review] max_full_file_chars = 80000): werkrevisor/cli.py
- **hint** excerpt selection by openrouter/openai/gpt-6-luna failed, the fixed window was used: werkrevisor/cli.py (a range lies outside the file)
### Classifier
6 of 6 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 36382, calls 1, tokens in 35092 / out 14537 (reasoning included in out), duration 155.8 s, cost 0.0279 USD (reported), classifier `jev-1.13.0` calls 6, tokens in 4940, cost 0.0002 USD, excerpt selection `openrouter/openai/gpt-6-luna` calls 1, tokens in 24557 / out 278, cost 0.0032 USD (reported), PR document check `jev-1.13.0` calls 10, tokens in 23812, cost 0.0010 USD, build file judge `jev-1.13.0` calls 8, tokens in 7560, cost 0.0003 USD, phases: path_judge 0.5 s, classifier 0.4 s, doc_check 0.8 s, context 4.8 s, model_review 148.9 s, config: defaults + host + repository (.werkrevisor.toml at main 88772c4).<br>
Reviewed head `0426c14e50ac65b9013d779b313931b54edcdf0f` against base `88772c494abe8d265952e10c082327a0785451c2`, werkrevisor 0.54.1.
</sub>
</details>
werkrevisor: GREEN / PASS for 0426c14e50ac65b9013d779b313931b54edcdf0f.
The result comment of werkrevisor holds the details.
werkrevisor: GREEN / PASS for `0426c14e50ac65b9013d779b313931b54edcdf0f`.
The result comment of werkrevisor holds the details.
<!-- werkrevisor-review:0426c14e50ac65b9013d779b313931b54edcdf0f -->
ai-reviewer
scheduled this pull request to auto merge when all checks succeed 2026-10-20 17:30:33 +02:00
[medium] Previous diagrams are copied when the current run produces none (Codex review)
The diagram directory persists across runs, and this call copies its SVGs unconditionally. Cleanup in cli.py only runs when diagrams are enabled and the review finishes without ERROR or supersession. After a successful run, a model failure or disabling diagrams therefore makes the next draft include the previous run's diagrams, potentially from an older commit. Clear the source before each run or copy only artifacts identified as belonging to the current run.
Fix it, or reply why it does not hold, and resolve this comment.
**[medium] Previous diagrams are copied when the current run produces none** (Codex review)
The diagram directory persists across runs, and this call copies its SVGs unconditionally. Cleanup in cli.py only runs when diagrams are enabled and the review finishes without ERROR or supersession. After a successful run, a model failure or disabling diagrams therefore makes the next draft include the previous run's diagrams, potentially from an older commit. Clear the source before each run or copy only artifacts identified as belonging to the current run.
Fix it, or reply why it does not hold, and resolve this comment.
<!-- werkrevisor-codex -->
Fixed in c20a7ea: review-report empties the directory of the diagrams before each dry run (clear_diagrams), so a run that draws none shows no SVGs of an earlier run. Scenario#129.02.
Fixed in `c20a7ea`: `review-report` empties the directory of the diagrams before each dry run (`clear_diagrams`), so a run that draws none shows no SVGs of an earlier run. Scenario#129.02.
The change adds local diagram export and draft links without changing authorization, merge gates, or existing data formats. It does not weaken tests or introduce checked-in secrets.
Findings
[medium] Previous diagrams are copied when the current run produces none at werkrevisor/reviewreport.py:141, as a line comment
The merge waits for the status ai-review/codex: every line comment resolved, and the approval of a human for a critical PR or for a finding that is only here.
Model `gpt-6-astra`, effort high, tokens in 337384 (cached 280192) / out 2303, 80.8 s, 12 commands; reviewed head `0426c14e50ac65b9013d779b313931b54edcdf0f`.
<!-- werkrevisor-codex:0426c14e50ac65b9013d779b313931b54edcdf0f -->
<!-- werkrevisor-codex-critical:false -->
<!-- werkrevisor-codex-unattached:0 -->
<!-- werkrevisor-codex -->
<!-- werkrevisor-folded -->
<details><summary>⚠️ werkrevisor ERROR for <code>?</code>, superseded by <a href="http://git.javagil.de/mi/werkrevisor/pulls/129#issuecomment-6847">the result for <code>c20a7ea</code></a></summary>
## Codex review: not critical
The change adds local diagram export and draft links without changing authorization, merge gates, or existing data formats. It does not weaken tests or introduce checked-in secrets.
### Findings
1. **[medium] Previous diagrams are copied when the current run produces none** at `werkrevisor/reviewreport.py:141`, as a line comment
The merge waits for the status `ai-review/codex`: every line comment resolved, and the approval of a human for a critical PR or for a finding that is only here.
<sub>
Model `gpt-6-astra`, effort high, tokens in 337384 (cached 280192) / out 2303, 80.8 s, 12 commands; reviewed head `0426c14e50ac65b9013d779b313931b54edcdf0f`.
</sub>
</details>
hint approval of werkrevisor for 0426c14 not carried over: 5 approved block(s) are missing
hint 7 changed file(s) that neither weaken the checks, touch security nor show a risk category of the repository config according to Jev
hint 1 build change(s) of low risk according to Jev: statistics/build.gradle.kts (weakens checks 0.02, risk 0.00, security 0.02)
hint 10 changed file(s) agree with the PR document according to Jev
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): werkrevisor/cli.py
hint 1 finding(s) of low severity or rated minor by Jev: docs/prs/2026-10-20-PR#129-hs-review-diagrams.md:73-74
Findings
Misleading Wording at docs/prs/2026-10-20-PR#129-hs-review-diagrams.md:73-74, severity unknown, counted as medium
hint; Jev: real 0.87, severity 1.4 of 3
The Solution section describes the rule as "a fresh review with the model, no possible secret, no GREEN", but the same PR sets skip_green = false in config/hsadmin-ng.toml, so a GREEN verdict still gets diagrams. The actual condition is not (skip_green and verdict is GREEN), so the bare "no GREEN" contradicts the new config and the new scenario.
Classifier
7 of 7 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 36255, calls 1, tokens in 34954 / out 15336 (reasoning included in out), duration 125.8 s, cost 0.0289 USD (reported), classifier `jev-1.13.0` calls 7, tokens in 5941, cost 0.0002 USD, finding judge `jev-1.13.0` calls 1, tokens in 1558, cost 0.0001 USD, excerpt selection `openrouter/openai/gpt-6-luna` calls 1, tokens in 24557 / out 341, cost 0.0032 USD (reported), PR document check `jev-1.13.0` calls 10, tokens in 26601, cost 0.0011 USD, build file judge `jev-1.13.0` calls 8, tokens in 7929, cost 0.0003 USD, phases: path_judge 0.6 s, classifier 0.5 s, doc_check 0.7 s, context 5.1 s, model_review 117.9 s, finding_judge 0.4 s, config: defaults + host + repository (.werkrevisor.toml at main 88772c4).
Reviewed head `c20a7eaa54d38fd3573cfed4d8cfd5748e806f8c` against base `88772c494abe8d265952e10c082327a0785451c2`, werkrevisor 0.54.1.
<!-- werkrevisor:c20a7eaa54d38fd3573cfed4d8cfd5748e806f8c -->
<!-- werkrevisor-verdict:GREEN -->
<!-- werkrevisor-blocks:8102a2f34ad23d90ba6b6c1cdf516e40,ccec1e866aa9f91e4ba83029a486a285,6bbe500ad9f04602f60b04cfd0eee12c,2cb9a90e1cad46d2433b410f7cefcc79,df8711a9adfffba37063837cdbd3d331,c53429501a14ae6a34c05e2f32c10734,57e0e1ac4af3a94adeb4276f1a8096fb,1e28cea6304297f8b0b92c1f750c03f8,9403d822502d4e6d0041029529eb5fa5,ce4fab40070583a5cd89f31c1d15cc16,5baf2af922ba1244d38efd9556c32311,61a4639c1a4f4e8d1a2f02cb2546ec67,bae46659f9425b760c925d8320ff2044,bfaf56a6bf0ea377623f1c8717a5e28d,97f0de698613ce7de2257f9530bccd39,8b6c3141398852433efb8e76d8811886,4b06d771e9ea486137956fd556b69740,30c46b4057f41f08604058c6f427826c,c6e107fc0249091957d7498f62ff7266,4c01e722232ac67c14e1963070c3f79b,536732d6c22e29671a203371bac9fcea,295c95068c6a06b13448cf2e0729a460,ed9eae77367d93fab6543b374ccc24c8,947c65bfa7fc89e4c20ade2785f06e17,5ec17ca5c8bd0506bbe5288127941958,2ae02745d44129aa71047e4a9194f35e,3b6987f082a19157120341c6460fbaae,e43f099488f94f9db59910913d4c8751,8d8135960f4a25705d5dee92337a6fa3,2c749db59f8bcf6f7388f0c3870c4a73 -->
<!-- werkrevisor-folded -->
<details><summary>🟢 werkrevisor GREEN for <code>c20a7ea</code>, superseded by <a href="http://git.javagil.de/mi/werkrevisor/pulls/129#issuecomment-6870">the result for <code>1c33cf7</code></a></summary>
## 🟢 werkrevisor: GREEN / PASS
Change kind: `mixed`.
### Reasons
- **hint** approval of werkrevisor for `0426c14` not carried over: 5 approved block(s) are missing
- **hint** 7 changed file(s) that neither weaken the checks, touch security nor show a risk category of the repository config according to Jev
- **hint** 1 build change(s) of low risk according to Jev: statistics/build.gradle.kts (weakens checks 0.02, risk 0.00, security 0.02)
- **hint** 10 changed file(s) agree with the PR document according to Jev
- **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): werkrevisor/cli.py
- **hint** 1 finding(s) of low severity or rated minor by Jev: docs/prs/2026-10-20-PR#129-hs-review-diagrams.md:73-74
### Findings
1. **Misleading Wording** at `docs/prs/2026-10-20-PR#129-hs-review-diagrams.md:73-74`, severity unknown, counted as medium
hint; Jev: real 0.87, severity 1.4 of 3
The Solution section describes the rule as "a fresh review with the model, no possible secret, no GREEN", but the same PR sets `skip_green = false` in `config/hsadmin-ng.toml`, so a GREEN verdict still gets diagrams. The actual condition is `not (skip_green and verdict is GREEN)`, so the bare "no GREEN" contradicts the new config and the new scenario.
### Classifier
7 of 7 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 36255, calls 1, tokens in 34954 / out 15336 (reasoning included in out), duration 125.8 s, cost 0.0289 USD (reported), classifier `jev-1.13.0` calls 7, tokens in 5941, cost 0.0002 USD, finding judge `jev-1.13.0` calls 1, tokens in 1558, cost 0.0001 USD, excerpt selection `openrouter/openai/gpt-6-luna` calls 1, tokens in 24557 / out 341, cost 0.0032 USD (reported), PR document check `jev-1.13.0` calls 10, tokens in 26601, cost 0.0011 USD, build file judge `jev-1.13.0` calls 8, tokens in 7929, cost 0.0003 USD, phases: path_judge 0.6 s, classifier 0.5 s, doc_check 0.7 s, context 5.1 s, model_review 117.9 s, finding_judge 0.4 s, config: defaults + host + repository (.werkrevisor.toml at main 88772c4).<br>
Reviewed head `c20a7eaa54d38fd3573cfed4d8cfd5748e806f8c` against base `88772c494abe8d265952e10c082327a0785451c2`, werkrevisor 0.54.1.
</sub>
</details>
werkrevisor: GREEN / PASS for c20a7eaa54d38fd3573cfed4d8cfd5748e806f8c.
The result comment of werkrevisor holds the details.
werkrevisor: GREEN / PASS for `c20a7eaa54d38fd3573cfed4d8cfd5748e806f8c`.
The result comment of werkrevisor holds the details.
<!-- werkrevisor-review:c20a7eaa54d38fd3573cfed4d8cfd5748e806f8c -->
[low] Failed dry runs leave diagrams from the previous run (Codex review)
When a direct run with --no-publish --diagrams-out reuses a directory and the model fails or the review is superseded, this branch skips _write_diagrams, including its cleanup. SVGs from the previous review therefore remain in the output directory. review-report clears its source directory separately, but direct CLI and tools/dry-run invocations do not.
Fix it, or reply why it does not hold, and resolve this comment.
**[low] Failed dry runs leave diagrams from the previous run** (Codex review)
When a direct run with --no-publish --diagrams-out reuses a directory and the model fails or the review is superseded, this branch skips _write_diagrams, including its cleanup. SVGs from the previous review therefore remain in the output directory. review-report clears its source directory separately, but direct CLI and tools/dry-run invocations do not.
Fix it, or reply why it does not hold, and resolve this comment.
<!-- werkrevisor-codex -->
Fixed in 1c33cf7: execute removes the old SVGs of --diagrams-out at the start of each run, so a run that ends in ERROR or is superseded leaves none. Scenario#129.01, test_a_failed_dry_run_leaves_no_diagrams_of_an_earlier_run.
Fixed in `1c33cf7`: `execute` removes the old SVGs of `--diagrams-out` at the start of each run, so a run that ends in ERROR or is superseded leaves none. Scenario#129.01, `test_a_failed_dry_run_leaves_no_diagrams_of_an_earlier_run`.
The change adds local diagram output and draft links without changing merge decisions or weakening security checks. Failures affect review artifacts rather than protected data or authorization.
Findings
[low] Failed dry runs leave diagrams from the previous run at werkrevisor/cli.py:1127, as a line comment
The merge waits for the status ai-review/codex: every line comment resolved, and the approval of a human for a critical PR or for a finding that is only here.
Model `gpt-6-astra`, effort high, tokens in 416773 (cached 355072) / out 2487, 95.2 s, 10 commands; reviewed head `c20a7eaa54d38fd3573cfed4d8cfd5748e806f8c`.
<!-- werkrevisor-codex:c20a7eaa54d38fd3573cfed4d8cfd5748e806f8c -->
<!-- werkrevisor-codex-critical:false -->
<!-- werkrevisor-codex-unattached:0 -->
<!-- werkrevisor-codex -->
<!-- werkrevisor-folded -->
<details><summary>⚠️ werkrevisor ERROR for <code>?</code>, superseded by <a href="http://git.javagil.de/mi/werkrevisor/pulls/129#issuecomment-6870">the result for <code>1c33cf7</code></a></summary>
## Codex review: not critical
The change adds local diagram output and draft links without changing merge decisions or weakening security checks. Failures affect review artifacts rather than protected data or authorization.
### Findings
1. **[low] Failed dry runs leave diagrams from the previous run** at `werkrevisor/cli.py:1127`, as a line comment
The merge waits for the status `ai-review/codex`: every line comment resolved, and the approval of a human for a critical PR or for a finding that is only here.
<sub>
Model `gpt-6-astra`, effort high, tokens in 416773 (cached 355072) / out 2487, 95.2 s, 10 commands; reviewed head `c20a7eaa54d38fd3573cfed4d8cfd5748e806f8c`.
</sub>
</details>
ORANGE 1 finding(s) that Jev rates as probably real and severe: werkrevisor/reviewreport.py:87-102
hint approval of werkrevisor for c20a7ea not carried over: 3 approved block(s) are missing
hint 7 changed file(s) that neither weaken the checks, touch security nor show a risk category of the repository config according to Jev
hint 1 build change(s) of low risk according to Jev: statistics/build.gradle.kts (weakens checks 0.02, risk 0.00, security 0.02)
hint 10 changed file(s) agree with the PR document according to Jev
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): werkrevisor/cli.py
hint 2 finding(s) of low severity or rated minor by Jev: docs/prs/2026-10-20-PR#129-hs-review-diagrams.md:71-86, tests/test_prlens.py:291-294
Findings
duplicated prefix constant at werkrevisor/reviewreport.py:87-102, severity unknown, counted as medium, ORANGE, as a line comment
unclear GREEN rule at docs/prs/2026-10-20-PR#129-hs-review-diagrams.md:71-86, severity unknown, counted as medium, hint, as a line comment
weak Scenario#129.03 test at tests/test_prlens.py:291-294, severity unknown, counted as medium, hint, as a line comment
Classifier
7 of 7 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 37230, calls 1, tokens in 35895 / out 20143 (reasoning included in out), duration 243.6 s, cost 0.0349 USD (reported), classifier `jev-1.13.0` calls 7, tokens in 5942, cost 0.0002 USD, finding judge `jev-1.13.0` calls 3, tokens in 5316, cost 0.0002 USD, excerpt selection `openrouter/openai/gpt-6-luna` calls 1, tokens in 24711 / out 354, cost 0.0033 USD (reported), PR document check `jev-1.13.0` calls 10, tokens in 27334, cost 0.0011 USD, build file judge `jev-1.13.0` calls 8, tokens in 8252, cost 0.0003 USD, phases: path_judge 0.4 s, classifier 0.4 s, doc_check 0.7 s, context 6.0 s, model_review 235.3 s, finding_judge 0.2 s, config: defaults + host + repository (.werkrevisor.toml at main 88772c4).
Reviewed head `1c33cf7ce176b456ab5be3ad2b99adfd1a34f207` against base `88772c494abe8d265952e10c082327a0785451c2`, werkrevisor 0.54.1.
Diagrams
Drawn by a model from the diff with PR Lens: a view of what the PR touches, not a statement of what it does.
<!-- werkrevisor:1c33cf7ce176b456ab5be3ad2b99adfd1a34f207 -->
<!-- werkrevisor-verdict:ORANGE -->
<!-- werkrevisor-blocks:8102a2f34ad23d90ba6b6c1cdf516e40,ccec1e866aa9f91e4ba83029a486a285,6bbe500ad9f04602f60b04cfd0eee12c,a8559d03dcccd38b3ed39cccc562626a,df8711a9adfffba37063837cdbd3d331,c53429501a14ae6a34c05e2f32c10734,57e0e1ac4af3a94adeb4276f1a8096fb,1e28cea6304297f8b0b92c1f750c03f8,c4f4de8021bfe4b5e381b6696f1837f3,ce4fab40070583a5cd89f31c1d15cc16,5baf2af922ba1244d38efd9556c32311,61a4639c1a4f4e8d1a2f02cb2546ec67,bae46659f9425b760c925d8320ff2044,bfaf56a6bf0ea377623f1c8717a5e28d,97f0de698613ce7de2257f9530bccd39,8b6c3141398852433efb8e76d8811886,0f0e26df8c36576638961a4e7395d919,4b06d771e9ea486137956fd556b69740,30c46b4057f41f08604058c6f427826c,60428ae98d0a5dd68a3142c3bffebba1,4c01e722232ac67c14e1963070c3f79b,536732d6c22e29671a203371bac9fcea,295c95068c6a06b13448cf2e0729a460,ed9eae77367d93fab6543b374ccc24c8,947c65bfa7fc89e4c20ade2785f06e17,5ec17ca5c8bd0506bbe5288127941958,2ae02745d44129aa71047e4a9194f35e,3b6987f082a19157120341c6460fbaae,e43f099488f94f9db59910913d4c8751,8d8135960f4a25705d5dee92337a6fa3,2c749db59f8bcf6f7388f0c3870c4a73 -->
<!-- werkrevisor:diagrams -->
<!-- werkrevisor-folded -->
<details><summary>🟠 werkrevisor ORANGE for <code>1c33cf7</code>, superseded by <a href="http://git.javagil.de/mi/werkrevisor/pulls/129#issuecomment-6885">the result for <code>175b7fc</code></a></summary>
## 🟠 werkrevisor: ORANGE / FINDINGS
Change kind: `mixed`.
### Reasons
- **ORANGE** 1 finding(s) that Jev rates as probably real and severe: werkrevisor/reviewreport.py:87-102
- **hint** approval of werkrevisor for `c20a7ea` not carried over: 3 approved block(s) are missing
- **hint** 7 changed file(s) that neither weaken the checks, touch security nor show a risk category of the repository config according to Jev
- **hint** 1 build change(s) of low risk according to Jev: statistics/build.gradle.kts (weakens checks 0.02, risk 0.00, security 0.02)
- **hint** 10 changed file(s) agree with the PR document according to Jev
- **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): werkrevisor/cli.py
- **hint** 2 finding(s) of low severity or rated minor by Jev: docs/prs/2026-10-20-PR#129-hs-review-diagrams.md:71-86, tests/test_prlens.py:291-294
### Findings
1. **duplicated prefix constant** at `werkrevisor/reviewreport.py:87-102`, severity unknown, counted as medium, ORANGE, as a line comment
2. **unclear GREEN rule** at `docs/prs/2026-10-20-PR#129-hs-review-diagrams.md:71-86`, severity unknown, counted as medium, hint, as a line comment
3. **weak Scenario#129.03 test** at `tests/test_prlens.py:291-294`, severity unknown, counted as medium, hint, as a line comment
### Classifier
7 of 7 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 37230, calls 1, tokens in 35895 / out 20143 (reasoning included in out), duration 243.6 s, cost 0.0349 USD (reported), classifier `jev-1.13.0` calls 7, tokens in 5942, cost 0.0002 USD, finding judge `jev-1.13.0` calls 3, tokens in 5316, cost 0.0002 USD, excerpt selection `openrouter/openai/gpt-6-luna` calls 1, tokens in 24711 / out 354, cost 0.0033 USD (reported), PR document check `jev-1.13.0` calls 10, tokens in 27334, cost 0.0011 USD, build file judge `jev-1.13.0` calls 8, tokens in 8252, cost 0.0003 USD, phases: path_judge 0.4 s, classifier 0.4 s, doc_check 0.7 s, context 6.0 s, model_review 235.3 s, finding_judge 0.2 s, config: defaults + host + repository (.werkrevisor.toml at main 88772c4).<br>
Reviewed head `1c33cf7ce176b456ab5be3ad2b99adfd1a34f207` against base `88772c494abe8d265952e10c082327a0785451c2`, werkrevisor 0.54.1.
</sub>
### Diagrams
Drawn by a model from the diff with [PR Lens](https://github.com/coldteadotai/pr-lens): a view of what the PR touches, not a statement of what it does.


</details>
werkrevisor: ORANGE / FINDINGS for 1c33cf7ce176b456ab5be3ad2b99adfd1a34f207.
The result comment of werkrevisor holds the details.
werkrevisor: ORANGE / FINDINGS for `1c33cf7ce176b456ab5be3ad2b99adfd1a34f207`.
The result comment of werkrevisor holds the details.
<!-- werkrevisor-review:1c33cf7ce176b456ab5be3ad2b99adfd1a34f207 -->
unclear GREEN rule, severity unknown, counted as medium (werkrevisor)
hint; Jev: real 0.80, severity 1.7 of 3
The Solution bullet for --diagrams-out says diagrams are written under the same rules as the result comment, including "no GREEN". The PR's focus is hs-review, and config/hsadmin-ng.toml sets [diagrams] skip_green = false, so a GREEN result of hs-review does get diagrams (this is the whole point of Scenario#129.03). A reader could wrongly conclude that a GREEN PR of hs-review will end up with an empty diagrams directory. The Solution should make clear that "no GREEN" is the default of the flag (which hsadmin-ng.toml overrides via skip_green = false) or drop that clause from this bullet.
**unclear GREEN rule**, severity unknown, counted as medium (werkrevisor)
hint; Jev: real 0.80, severity 1.7 of 3
The Solution bullet for `--diagrams-out` says diagrams are written under the same rules as the result comment, including "no GREEN". The PR's focus is `hs-review`, and `config/hsadmin-ng.toml` sets `[diagrams] skip_green = false`, so a GREEN result of `hs-review` does get diagrams (this is the whole point of Scenario#129.03). A reader could wrongly conclude that a GREEN PR of `hs-review` will end up with an empty diagrams directory. The Solution should make clear that "no GREEN" is the default of the flag (which `hsadmin-ng.toml` overrides via `skip_green = false`) or drop that clause from this bullet.
weak Scenario#129.03 test, severity unknown, counted as medium (werkrevisor)
hint; Jev: real 0.82, severity 2.1 of 3
Scenario#129.03 says "hs-review draws the diagrams also for a GREEN result", but test_hs_review_draws_also_for_green only asserts that example_config("hsadmin-ng.toml").diagrams.skip_green is False. It does not run werkrevisor with that config on a GREEN result to confirm that diagrams are actually produced and written. A regression that broke the GREEN-drawing path on the loaded config would not be caught.
**weak Scenario#129.03 test**, severity unknown, counted as medium (werkrevisor)
hint; Jev: real 0.82, severity 2.1 of 3
Scenario#129.03 says "hs-review draws the diagrams also for a GREEN result", but `test_hs_review_draws_also_for_green` only asserts that `example_config("hsadmin-ng.toml").diagrams.skip_green` is `False`. It does not run werkrevisor with that config on a GREEN result to confirm that diagrams are actually produced and written. A regression that broke the GREEN-drawing path on the loaded config would not be caught.
Fixed in 175b7fc: test_hs_review_draws_also_for_green runs a GREEN dry run with the [diagrams] of config/hsadmin-ng.toml and checks that the SVGs are written.
Fixed in `175b7fc`: `test_hs_review_draws_also_for_green` runs a GREEN dry run with the `[diagrams]` of `config/hsadmin-ng.toml` and checks that the SVGs are written.
duplicated prefix constant, severity unknown, counted as medium (werkrevisor)
ORANGE; Jev: real 0.73, severity 2.7 of 3
clear_diagrams and copy_diagrams hardcode the prefix "pr-lens-" to identify diagrams, while the matching filter in werkrevisor/cli.py (_write_diagrams) uses prlens.ASSET_PREFIX. Both must stay in sync; if the asset prefix in prlens ever changes, the report tool will quietly drop diagrams. Importing the constant from prlens keeps them aligned.
**duplicated prefix constant**, severity unknown, counted as medium (werkrevisor)
ORANGE; Jev: real 0.73, severity 2.7 of 3
`clear_diagrams` and `copy_diagrams` hardcode the prefix `"pr-lens-"` to identify diagrams, while the matching filter in `werkrevisor/cli.py` (`_write_diagrams`) uses `prlens.ASSET_PREFIX`. Both must stay in sync; if the asset prefix in `prlens` ever changes, the report tool will quietly drop diagrams. Importing the constant from `prlens` keeps them aligned.
Fixed in 175b7fc: clear_diagrams and copy_diagrams use prlens.ASSET_PREFIX.
Fixed in `175b7fc`: `clear_diagrams` and `copy_diagrams` use `prlens.ASSET_PREFIX`.
claude-code marked this conversation as resolved
ai-reviewer
requested review from mi 2026-10-20 18:44:54 +02:00
claude-code
changed title from werkrevisor 0.56.0: hs-review puts the diagrams of PR Lens next to its draft to werkrevisor 0.57.0: hs-review puts the diagrams of PR Lens next to its draft2026-10-20 18:46:15 +02:00
The change adds local diagram generation and links in draft reports without changing merge decisions, authorization, or secret checks. It does not weaken CI gates or tests or introduce irreversible changes to existing application data.
No findings.
The merge waits for the status ai-review/codex: every line comment resolved, and the approval of a human for a critical PR or for a finding that is only here.
Model `gpt-6-astra`, effort high, tokens in 304761 (cached 243840) / out 1482, 60.8 s, 8 commands; reviewed head `1c33cf7ce176b456ab5be3ad2b99adfd1a34f207`.
<!-- werkrevisor-codex:1c33cf7ce176b456ab5be3ad2b99adfd1a34f207 -->
<!-- werkrevisor-codex-critical:false -->
<!-- werkrevisor-codex-unattached:0 -->
<!-- werkrevisor-codex -->
<!-- werkrevisor-folded -->
<details><summary>⚠️ werkrevisor ERROR for <code>?</code>, superseded by <a href="http://git.javagil.de/mi/werkrevisor/pulls/129#issuecomment-6885">the result for <code>175b7fc</code></a></summary>
## Codex review: not critical
The change adds local diagram generation and links in draft reports without changing merge decisions, authorization, or secret checks. It does not weaken CI gates or tests or introduce irreversible changes to existing application data.
No findings.
The merge waits for the status `ai-review/codex`: every line comment resolved, and the approval of a human for a critical PR or for a finding that is only here.
<sub>
Model `gpt-6-astra`, effort high, tokens in 304761 (cached 243840) / out 1482, 60.8 s, 8 commands; reviewed head `1c33cf7ce176b456ab5be3ad2b99adfd1a34f207`.
</sub>
</details>
Gate: approved by werkrevisor; merge waits for 1 open hint(s): reply to each line comment and resolve it, then restart the review or push a commit.
Change kind: mixed.
Reasons
hint 7 changed file(s) that neither weaken the checks, touch security nor show a risk category of the repository config according to Jev
hint 1 build change(s) of low risk according to Jev: statistics/build.gradle.kts (weakens checks 0.02, risk 0.00, security 0.02)
hint 10 changed file(s) agree with the PR document according to Jev
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): werkrevisor/cli.py
hint 1 finding(s) of low severity or rated minor by Jev: tests/test_reviewreport.py:104-114
Findings
Test misaligned with scenario at tests/test_reviewreport.py:104-114, severity unknown, counted as medium, hint, as a line comment
Classifier
7 of 7 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 35819, calls 1, tokens in 34533 / out 16463 (reasoning included in out), duration 200.4 s, cost 0.0298 USD (reported), classifier `jev-1.13.0` calls 7, tokens in 5965, cost 0.0003 USD, finding judge `jev-1.13.0` calls 1, tokens in 1591, cost 0.0001 USD, excerpt selection `openrouter/openai/gpt-6-luna` calls 1, tokens in 24711 / out 413, cost 0.0005 USD (reported), PR document check `jev-1.13.0` calls 10, tokens in 27768, cost 0.0012 USD, build file judge `jev-1.13.0` calls 8, tokens in 8456, cost 0.0004 USD, phases: path_judge 0.5 s, classifier 0.5 s, doc_check 0.7 s, context 6.0 s, model_review 192.0 s, finding_judge 0.2 s, config: defaults + host + repository (.werkrevisor.toml at main 88772c4).
Reviewed head `175b7fce2e6cb4772342f64d1bcaa4c63bfe24d3` against base `88772c494abe8d265952e10c082327a0785451c2`, werkrevisor 0.54.1.
<!-- werkrevisor:175b7fce2e6cb4772342f64d1bcaa4c63bfe24d3 -->
<!-- werkrevisor-verdict:GREEN -->
<!-- werkrevisor-blocks:8102a2f34ad23d90ba6b6c1cdf516e40,ccec1e866aa9f91e4ba83029a486a285,6bbe500ad9f04602f60b04cfd0eee12c,93407103964b9441b2cf0292921d43ea,df8711a9adfffba37063837cdbd3d331,de3d2307239c96df1404cdf93c9152a2,57e0e1ac4af3a94adeb4276f1a8096fb,1e28cea6304297f8b0b92c1f750c03f8,c4f4de8021bfe4b5e381b6696f1837f3,604db6aecff6d7ba31b1bee339fc82a4,5baf2af922ba1244d38efd9556c32311,61a4639c1a4f4e8d1a2f02cb2546ec67,bae46659f9425b760c925d8320ff2044,bfaf56a6bf0ea377623f1c8717a5e28d,266aa8cec98f13e77a5467fa768a8403,8b6c3141398852433efb8e76d8811886,0f0e26df8c36576638961a4e7395d919,4b06d771e9ea486137956fd556b69740,30c46b4057f41f08604058c6f427826c,60428ae98d0a5dd68a3142c3bffebba1,4c01e722232ac67c14e1963070c3f79b,536732d6c22e29671a203371bac9fcea,295c95068c6a06b13448cf2e0729a460,ed9eae77367d93fab6543b374ccc24c8,5361121e622f218a9d27240cecff0972,947c65bfa7fc89e4c20ade2785f06e17,5ec17ca5c8bd0506bbe5288127941958,024fce43174fec160325887cd4ca7b7b,3b6987f082a19157120341c6460fbaae,e43f099488f94f9db59910913d4c8751,8d8135960f4a25705d5dee92337a6fa3,2c749db59f8bcf6f7388f0c3870c4a73 -->
<!-- werkrevisor-folded -->
<details><summary>🟢 werkrevisor GREEN for <code>175b7fc</code>, superseded by <a href="http://git.javagil.de/mi/werkrevisor/pulls/129#issuecomment-6965">the result for <code>7cc5832</code></a></summary>
## 🟢 werkrevisor: GREEN / PASS
Gate: approved by werkrevisor; merge waits for 1 open hint(s): reply to each line comment and resolve it, then restart the review or push a commit.
Change kind: `mixed`.
### Reasons
- **hint** 7 changed file(s) that neither weaken the checks, touch security nor show a risk category of the repository config according to Jev
- **hint** 1 build change(s) of low risk according to Jev: statistics/build.gradle.kts (weakens checks 0.02, risk 0.00, security 0.02)
- **hint** 10 changed file(s) agree with the PR document according to Jev
- **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): werkrevisor/cli.py
- **hint** 1 finding(s) of low severity or rated minor by Jev: tests/test_reviewreport.py:104-114
### Findings
1. **Test misaligned with scenario** at `tests/test_reviewreport.py:104-114`, severity unknown, counted as medium, hint, as a line comment
### Classifier
7 of 7 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 35819, calls 1, tokens in 34533 / out 16463 (reasoning included in out), duration 200.4 s, cost 0.0298 USD (reported), classifier `jev-1.13.0` calls 7, tokens in 5965, cost 0.0003 USD, finding judge `jev-1.13.0` calls 1, tokens in 1591, cost 0.0001 USD, excerpt selection `openrouter/openai/gpt-6-luna` calls 1, tokens in 24711 / out 413, cost 0.0005 USD (reported), PR document check `jev-1.13.0` calls 10, tokens in 27768, cost 0.0012 USD, build file judge `jev-1.13.0` calls 8, tokens in 8456, cost 0.0004 USD, phases: path_judge 0.5 s, classifier 0.5 s, doc_check 0.7 s, context 6.0 s, model_review 192.0 s, finding_judge 0.2 s, config: defaults + host + repository (.werkrevisor.toml at main 88772c4).<br>
Reviewed head `175b7fce2e6cb4772342f64d1bcaa4c63bfe24d3` against base `88772c494abe8d265952e10c082327a0785451c2`, werkrevisor 0.54.1.
</sub>
</details>
werkrevisor: GREEN / PASS for 175b7fce2e6cb4772342f64d1bcaa4c63bfe24d3.
The result comment of werkrevisor holds the details.
werkrevisor: GREEN / PASS for `175b7fce2e6cb4772342f64d1bcaa4c63bfe24d3`.
The result comment of werkrevisor holds the details.
<!-- werkrevisor-review:175b7fce2e6cb4772342f64d1bcaa4c63bfe24d3 -->
Test misaligned with scenario, severity unknown, counted as medium (werkrevisor)
hint; Jev: real 0.82, severity 2.0 of 3
test_a_run_without_new_diagrams_shows_none_of_an_earlier_run is cited as verifying the "a run that draws none shows none of an earlier run" branch of Scenario#129.02, but the setup places the "earlier" SVG in source (the dry-run output directory) rather than in target (the draft directory, where a prior run's SVGs would actually persist for the scenario to be relevant). The assertion that copy_diagrams(source, target) == [] passes trivially because target was empty to begin with, so the test never exercises the actual cleanup of earlier SVGs from the draft directory. The functional behavior is incidentally covered by test_the_draft_links_the_diagrams_next_to_it (which puts pr-lens-old.svg in target and verifies it disappears), but the specific concern of scenario#129.02's "no new diagrams" case lacks a dedicated, scenario-shaped test.
**Test misaligned with scenario**, severity unknown, counted as medium (werkrevisor)
hint; Jev: real 0.82, severity 2.0 of 3
`test_a_run_without_new_diagrams_shows_none_of_an_earlier_run` is cited as verifying the "a run that draws none shows none of an earlier run" branch of Scenario#129.02, but the setup places the "earlier" SVG in `source` (the dry-run output directory) rather than in `target` (the draft directory, where a prior run's SVGs would actually persist for the scenario to be relevant). The assertion that `copy_diagrams(source, target) == []` passes trivially because target was empty to begin with, so the test never exercises the actual cleanup of earlier SVGs from the draft directory. The functional behavior is incidentally covered by `test_the_draft_links_the_diagrams_next_to_it` (which puts `pr-lens-old.svg` in target and verifies it disappears), but the specific concern of scenario#129.02's "no new diagrams" case lacks a dedicated, scenario-shaped test.
Fixed in 7cc5832: the test puts an earlier SVG into the output directory and next to the draft; after a run without new diagrams both are empty and the draft has no Diagrams section.
Fixed in `7cc5832`: the test puts an earlier SVG into the output directory and next to the draft; after a run without new diagrams both are empty and the draft has no Diagrams section.
claude-code marked this conversation as resolved
ai-reviewer
canceled auto merging this pull request when all checks succeed 2026-10-20 18:49:47 +02:00
The change adds local diagram generation and draft-report links without changing authorization, authentication, merge gates, or existing review decisions. Cleanup is limited to generated diagram files, and no tests are weakened.
No findings.
The merge waits for the status ai-review/codex: every line comment resolved, and the approval of a human for a critical PR or for a finding that is only here.
Model `gpt-6-astra`, effort high, tokens in 281921 (cached 227200) / out 1476, 57.9 s, 14 commands; reviewed head `175b7fce2e6cb4772342f64d1bcaa4c63bfe24d3`.
<!-- werkrevisor-codex:175b7fce2e6cb4772342f64d1bcaa4c63bfe24d3 -->
<!-- werkrevisor-codex-critical:false -->
<!-- werkrevisor-codex-unattached:0 -->
<!-- werkrevisor-codex -->
<!-- werkrevisor-folded -->
<details><summary>⚠️ werkrevisor ERROR for <code>?</code>, superseded by <a href="http://git.javagil.de/mi/werkrevisor/pulls/129#issuecomment-6965">the result for <code>7cc5832</code></a></summary>
## Codex review: not critical
The change adds local diagram generation and draft-report links without changing authorization, authentication, merge gates, or existing review decisions. Cleanup is limited to generated diagram files, and no tests are weakened.
No findings.
The merge waits for the status `ai-review/codex`: every line comment resolved, and the approval of a human for a critical PR or for a finding that is only here.
<sub>
Model `gpt-6-astra`, effort high, tokens in 281921 (cached 227200) / out 1476, 57.9 s, 14 commands; reviewed head `175b7fce2e6cb4772342f64d1bcaa4c63bfe24d3`.
</sub>
</details>
werkrevisor --diagrams-out writes them in a dry run; tools/dry-run runs in the base stage with Node.js
when WERKREVISOR_DIAGRAMS_OUT is set; review-report copies them next to report.md and links them.
config/hsadmin-ng.toml switches the diagrams on.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
config/hsadmin-ng.toml sets skip_green = false, since a human reviews each PR of hs-review.
review-report empties the directory of the diagrams before each dry run (Codex line comment 6797).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
hint approval of werkrevisor for 175b7fc not carried over: 3 approved block(s) are missing
hint 7 changed file(s) that neither weaken the checks, touch security nor show a risk category of the repository config according to Jev
hint 1 build change(s) of low risk according to Jev: statistics/build.gradle.kts (weakens checks 0.02, risk 0.00, security 0.01)
hint 10 changed file(s) agree with the PR document according to Jev
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): werkrevisor/cli.py
Classifier
7 of 7 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 36621, calls 1, tokens in 35309 / out 17403 (reasoning included in out), duration 211.3 s, cost 0.0314 USD (reported), classifier `jev-1.13.0` calls 7, tokens in 5965, cost 0.0003 USD, excerpt selection `openrouter/openai/gpt-6-luna` calls 1, tokens in 24711 / out 455, cost 0.0005 USD (reported), PR document check `jev-1.13.0` calls 10, tokens in 27839, cost 0.0012 USD, build file judge `jev-1.13.0` calls 8, tokens in 8527, cost 0.0004 USD, phases: path_judge 0.5 s, classifier 0.3 s, doc_check 0.5 s, context 7.3 s, model_review 201.9 s, config: defaults + host + repository (.werkrevisor.toml at main 02c5cad).
Reviewed head `7cc58326cc3cfddf447092aff71fb32c632501ae` against base `02c5cad01497e3bc457babf06bdcace76a87a777`, werkrevisor 0.55.0.
<!-- werkrevisor:7cc58326cc3cfddf447092aff71fb32c632501ae -->
<!-- werkrevisor-verdict:GREEN -->
<!-- werkrevisor-blocks:8102a2f34ad23d90ba6b6c1cdf516e40,ccec1e866aa9f91e4ba83029a486a285,6bbe500ad9f04602f60b04cfd0eee12c,93407103964b9441b2cf0292921d43ea,df8711a9adfffba37063837cdbd3d331,cd3ff5db5856eb7e8c65affaf95de677,57e0e1ac4af3a94adeb4276f1a8096fb,1e28cea6304297f8b0b92c1f750c03f8,c4f4de8021bfe4b5e381b6696f1837f3,604db6aecff6d7ba31b1bee339fc82a4,5baf2af922ba1244d38efd9556c32311,644f1b7f69f5e490f83999fe407b9dae,bae46659f9425b760c925d8320ff2044,bfaf56a6bf0ea377623f1c8717a5e28d,baa971cee5d1665549286a36d2cbc081,8b6c3141398852433efb8e76d8811886,0f0e26df8c36576638961a4e7395d919,4b06d771e9ea486137956fd556b69740,30c46b4057f41f08604058c6f427826c,60428ae98d0a5dd68a3142c3bffebba1,4c01e722232ac67c14e1963070c3f79b,536732d6c22e29671a203371bac9fcea,295c95068c6a06b13448cf2e0729a460,ed9eae77367d93fab6543b374ccc24c8,5361121e622f218a9d27240cecff0972,947c65bfa7fc89e4c20ade2785f06e17,5ec17ca5c8bd0506bbe5288127941958,024fce43174fec160325887cd4ca7b7b,3b6987f082a19157120341c6460fbaae,e43f099488f94f9db59910913d4c8751,8d8135960f4a25705d5dee92337a6fa3,2c749db59f8bcf6f7388f0c3870c4a73 -->
## 🟢 werkrevisor: GREEN / PASS
Change kind: `mixed`.
### Reasons
- **hint** approval of werkrevisor for `175b7fc` not carried over: 3 approved block(s) are missing
- **hint** 7 changed file(s) that neither weaken the checks, touch security nor show a risk category of the repository config according to Jev
- **hint** 1 build change(s) of low risk according to Jev: statistics/build.gradle.kts (weakens checks 0.02, risk 0.00, security 0.01)
- **hint** 10 changed file(s) agree with the PR document according to Jev
- **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): werkrevisor/cli.py
### Classifier
7 of 7 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 36621, calls 1, tokens in 35309 / out 17403 (reasoning included in out), duration 211.3 s, cost 0.0314 USD (reported), classifier `jev-1.13.0` calls 7, tokens in 5965, cost 0.0003 USD, excerpt selection `openrouter/openai/gpt-6-luna` calls 1, tokens in 24711 / out 455, cost 0.0005 USD (reported), PR document check `jev-1.13.0` calls 10, tokens in 27839, cost 0.0012 USD, build file judge `jev-1.13.0` calls 8, tokens in 8527, cost 0.0004 USD, phases: path_judge 0.5 s, classifier 0.3 s, doc_check 0.5 s, context 7.3 s, model_review 201.9 s, config: defaults + host + repository (.werkrevisor.toml at main 02c5cad).<br>
Reviewed head `7cc58326cc3cfddf447092aff71fb32c632501ae` against base `02c5cad01497e3bc457babf06bdcace76a87a777`, werkrevisor 0.55.0.
</sub>
werkrevisor: GREEN / PASS for 7cc58326cc3cfddf447092aff71fb32c632501ae.
The result comment of werkrevisor holds the details.
werkrevisor: GREEN / PASS for `7cc58326cc3cfddf447092aff71fb32c632501ae`.
The result comment of werkrevisor holds the details.
<!-- werkrevisor-review:7cc58326cc3cfddf447092aff71fb32c632501ae -->
ai-reviewer
scheduled this pull request to auto merge when all checks succeed 2026-10-21 07:30:12 +02:00
ai-reviewer
removed review request for mi 2026-10-21 07:30:12 +02:00
The change adds local diagram generation and draft-report links without changing authorization, merge gates, or review verdicts. Existing secret checks remain in place, and diagram failures do not alter the verdict.
No findings.
The merge waits for the status ai-review/codex: every line comment resolved, and the approval of a human for a critical PR or for a finding that is only here.
Model `gpt-6-astra`, effort high, tokens in 251869 (cached 198272) / out 1341, 56.7 s, 9 commands; reviewed head `7cc58326cc3cfddf447092aff71fb32c632501ae`.
<!-- werkrevisor-codex:7cc58326cc3cfddf447092aff71fb32c632501ae -->
<!-- werkrevisor-codex-critical:false -->
<!-- werkrevisor-codex-unattached:0 -->
<!-- werkrevisor-codex -->
## Codex review: not critical
The change adds local diagram generation and draft-report links without changing authorization, merge gates, or review verdicts. Existing secret checks remain in place, and diagram failures do not alter the verdict.
No findings.
The merge waits for the status `ai-review/codex`: every line comment resolved, and the approval of a human for a critical PR or for a finding that is only here.
<sub>
Model `gpt-6-astra`, effort high, tokens in 251869 (cached 198272) / out 1341, 56.7 s, 9 commands; reviewed head `7cc58326cc3cfddf447092aff71fb32c632501ae`.
</sub>
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 for the PR document.
🤖 Generated with Claude Code
🟢 werkrevisor GREEN for
0426c14, superseded by the result forc20a7ea🟢 werkrevisor: GREEN / PASS
Change kind:
mixed.Reasons
Classifier
6 of 6 units passed all questions (1 PR document(s)).
Usage: model `openrouter/minimax/minimax-m3`, LLM done, tokens counted before the call 36382, calls 1, tokens in 35092 / out 14537 (reasoning included in out), duration 155.8 s, cost 0.0279 USD (reported), classifier `jev-1.13.0` calls 6, tokens in 4940, cost 0.0002 USD, excerpt selection `openrouter/openai/gpt-6-luna` calls 1, tokens in 24557 / out 278, cost 0.0032 USD (reported), PR document check `jev-1.13.0` calls 10, tokens in 23812, cost 0.0010 USD, build file judge `jev-1.13.0` calls 8, tokens in 7560, cost 0.0003 USD, phases: path_judge 0.5 s, classifier 0.4 s, doc_check 0.8 s, context 4.8 s, model_review 148.9 s, config: defaults + host + repository (.werkrevisor.toml at main1 answer ignored because of a confidence below [classifier] min_confidence.
88772c4).Reviewed head `0426c14e50ac65b9013d779b313931b54edcdf0f` against base `88772c494abe8d265952e10c082327a0785451c2`, werkrevisor 0.54.1.
werkrevisor: GREEN / PASS for
0426c14e50ac65b9013d779b313931b54edcdf0f.The result comment of werkrevisor holds the details.
Codex review of
0426c14e50ac65b9013d779b313931b54edcdf0f@@ -116,9 +138,10 @@ def main(argv=None, environ=None):codex_error = f"{type(e).__name__}: {e}"thread.join()werkrevisor_head = reviewed_head(result.get("werkrevisor"))diagrams = copy_diagrams(os.path.join(ROOT, drawn), out)[medium] Previous diagrams are copied when the current run produces none (Codex review)
The diagram directory persists across runs, and this call copies its SVGs unconditionally. Cleanup in cli.py only runs when diagrams are enabled and the review finishes without ERROR or supersession. After a successful run, a model failure or disabling diagrams therefore makes the next draft include the previous run's diagrams, potentially from an older commit. Clear the source before each run or copy only artifacts identified as belonging to the current run.
Fix it, or reply why it does not hold, and resolve this comment.
Fixed in
c20a7ea:review-reportempties the directory of the diagrams before each dry run (clear_diagrams), so a run that draws none shows no SVGs of an earlier run. Scenario#129.02.⚠️ werkrevisor ERROR for
?, superseded by the result forc20a7eaCodex review: not critical
The change adds local diagram export and draft links without changing authorization, merge gates, or existing data formats. It does not weaken tests or introduce checked-in secrets.
Findings
werkrevisor/reviewreport.py:141, as a line commentThe merge waits for the status
Model `gpt-6-astra`, effort high, tokens in 337384 (cached 280192) / out 2303, 80.8 s, 12 commands; reviewed head `0426c14e50ac65b9013d779b313931b54edcdf0f`.ai-review/codex: every line comment resolved, and the approval of a human for a critical PR or for a finding that is only here.New commits pushed, approval review dismissed automatically according to repository settings
🟢 werkrevisor GREEN for
c20a7ea, superseded by the result for1c33cf7🟢 werkrevisor: GREEN / PASS
Change kind:
mixed.Reasons
0426c14not carried over: 5 approved block(s) are missingFindings
Misleading Wording at
docs/prs/2026-10-20-PR#129-hs-review-diagrams.md:73-74, severity unknown, counted as mediumhint; Jev: real 0.87, severity 1.4 of 3
The Solution section describes the rule as "a fresh review with the model, no possible secret, no GREEN", but the same PR sets
skip_green = falseinconfig/hsadmin-ng.toml, so a GREEN verdict still gets diagrams. The actual condition isnot (skip_green and verdict is GREEN), so the bare "no GREEN" contradicts the new config and the new scenario.Classifier
7 of 7 units passed all questions (1 PR document(s)).
Usage: model `openrouter/minimax/minimax-m3`, LLM done, tokens counted before the call 36255, calls 1, tokens in 34954 / out 15336 (reasoning included in out), duration 125.8 s, cost 0.0289 USD (reported), classifier `jev-1.13.0` calls 7, tokens in 5941, cost 0.0002 USD, finding judge `jev-1.13.0` calls 1, tokens in 1558, cost 0.0001 USD, excerpt selection `openrouter/openai/gpt-6-luna` calls 1, tokens in 24557 / out 341, cost 0.0032 USD (reported), PR document check `jev-1.13.0` calls 10, tokens in 26601, cost 0.0011 USD, build file judge `jev-1.13.0` calls 8, tokens in 7929, cost 0.0003 USD, phases: path_judge 0.6 s, classifier 0.5 s, doc_check 0.7 s, context 5.1 s, model_review 117.9 s, finding_judge 0.4 s, config: defaults + host + repository (.werkrevisor.toml at main2 answers ignored because of a confidence below [classifier] min_confidence.
88772c4).Reviewed head `c20a7eaa54d38fd3573cfed4d8cfd5748e806f8c` against base `88772c494abe8d265952e10c082327a0785451c2`, werkrevisor 0.54.1.
werkrevisor: GREEN / PASS for
c20a7eaa54d38fd3573cfed4d8cfd5748e806f8c.The result comment of werkrevisor holds the details.
Codex review of
c20a7eaa54d38fd3573cfed4d8cfd5748e806f8c@@ -1123,3 +1125,3 @@if outcome.superseded or result.verdict is Verdict.ERROR:result.exit_code = Verdict.ERROR.exit_codeelif outcome.published and config.diagrams.enabled and deps.draw_diagrams is not None:elif config.diagrams.enabled and deps.draw_diagrams is not None and (outcome.published or deps.diagrams_out):[low] Failed dry runs leave diagrams from the previous run (Codex review)
When a direct run with --no-publish --diagrams-out reuses a directory and the model fails or the review is superseded, this branch skips _write_diagrams, including its cleanup. SVGs from the previous review therefore remain in the output directory. review-report clears its source directory separately, but direct CLI and tools/dry-run invocations do not.
Fix it, or reply why it does not hold, and resolve this comment.
Fixed in
1c33cf7:executeremoves the old SVGs of--diagrams-outat the start of each run, so a run that ends in ERROR or is superseded leaves none. Scenario#129.01,test_a_failed_dry_run_leaves_no_diagrams_of_an_earlier_run.⚠️ werkrevisor ERROR for
?, superseded by the result for1c33cf7Codex review: not critical
The change adds local diagram output and draft links without changing merge decisions or weakening security checks. Failures affect review artifacts rather than protected data or authorization.
Findings
werkrevisor/cli.py:1127, as a line commentThe merge waits for the status
Model `gpt-6-astra`, effort high, tokens in 416773 (cached 355072) / out 2487, 95.2 s, 10 commands; reviewed head `c20a7eaa54d38fd3573cfed4d8cfd5748e806f8c`.ai-review/codex: every line comment resolved, and the approval of a human for a critical PR or for a finding that is only here.New commits pushed, approval review dismissed automatically according to repository settings
🟠 werkrevisor ORANGE for
1c33cf7, superseded by the result for175b7fc🟠 werkrevisor: ORANGE / FINDINGS
Change kind:
mixed.Reasons
c20a7eanot carried over: 3 approved block(s) are missingFindings
duplicated prefix constant at
werkrevisor/reviewreport.py:87-102, severity unknown, counted as medium, ORANGE, as a line commentunclear GREEN rule at
docs/prs/2026-10-20-PR#129-hs-review-diagrams.md:71-86, severity unknown, counted as medium, hint, as a line commentweak Scenario#129.03 test at
tests/test_prlens.py:291-294, severity unknown, counted as medium, hint, as a line commentClassifier
7 of 7 units passed all questions (1 PR document(s)).
Usage: model `openrouter/minimax/minimax-m3`, LLM done, tokens counted before the call 37230, calls 1, tokens in 35895 / out 20143 (reasoning included in out), duration 243.6 s, cost 0.0349 USD (reported), classifier `jev-1.13.0` calls 7, tokens in 5942, cost 0.0002 USD, finding judge `jev-1.13.0` calls 3, tokens in 5316, cost 0.0002 USD, excerpt selection `openrouter/openai/gpt-6-luna` calls 1, tokens in 24711 / out 354, cost 0.0033 USD (reported), PR document check `jev-1.13.0` calls 10, tokens in 27334, cost 0.0011 USD, build file judge `jev-1.13.0` calls 8, tokens in 8252, cost 0.0003 USD, phases: path_judge 0.4 s, classifier 0.4 s, doc_check 0.7 s, context 6.0 s, model_review 235.3 s, finding_judge 0.2 s, config: defaults + host + repository (.werkrevisor.toml at main1 answer ignored because of a confidence below [classifier] min_confidence.
88772c4).Reviewed head `1c33cf7ce176b456ab5be3ad2b99adfd1a34f207` against base `88772c494abe8d265952e10c082327a0785451c2`, werkrevisor 0.54.1.
Diagrams
Drawn by a model from the diff with PR Lens: a view of what the PR touches, not a statement of what it does.
werkrevisor: ORANGE / FINDINGS for
1c33cf7ce176b456ab5be3ad2b99adfd1a34f207.The result comment of werkrevisor holds the details.
@@ -0,0 +68,4 @@- [test_prlens.DiagramsConfigTest.test_hs_review_draws_also_for_green](../../tests/test_prlens.py)## Solutionunclear GREEN rule, severity unknown, counted as medium (werkrevisor)
hint; Jev: real 0.80, severity 1.7 of 3
The Solution bullet for
--diagrams-outsays diagrams are written under the same rules as the result comment, including "no GREEN". The PR's focus ishs-review, andconfig/hsadmin-ng.tomlsets[diagrams] skip_green = false, so a GREEN result ofhs-reviewdoes get diagrams (this is the whole point of Scenario#129.03). A reader could wrongly conclude that a GREEN PR ofhs-reviewwill end up with an empty diagrams directory. The Solution should make clear that "no GREEN" is the default of the flag (whichhsadmin-ng.tomloverrides viaskip_green = false) or drop that clause from this bullet.Fixed in
175b7fc: the Solution says that a GREEN result gets diagrams only withskip_green = false, asconfig/hsadmin-ng.tomlsets it.@@ -245,6 +288,11 @@ class DrawTest(unittest.TestCase):class DiagramsConfigTest(unittest.TestCase):def test_hs_review_draws_also_for_green(self):weak Scenario#129.03 test, severity unknown, counted as medium (werkrevisor)
hint; Jev: real 0.82, severity 2.1 of 3
Scenario#129.03 says "hs-review draws the diagrams also for a GREEN result", but
test_hs_review_draws_also_for_greenonly asserts thatexample_config("hsadmin-ng.toml").diagrams.skip_greenisFalse. It does not run werkrevisor with that config on a GREEN result to confirm that diagrams are actually produced and written. A regression that broke the GREEN-drawing path on the loaded config would not be caught.Fixed in
175b7fc:test_hs_review_draws_also_for_greenruns a GREEN dry run with the[diagrams]ofconfig/hsadmin-ng.tomland checks that the SVGs are written.@@ -77,6 +84,24 @@ def compose(head, werkrevisor, codex_result, werkrevisor_error="", codex_error="return "\n".join(out).rstrip() + "\n"def clear_diagrams(directory):duplicated prefix constant, severity unknown, counted as medium (werkrevisor)
ORANGE; Jev: real 0.73, severity 2.7 of 3
clear_diagramsandcopy_diagramshardcode the prefix"pr-lens-"to identify diagrams, while the matching filter inwerkrevisor/cli.py(_write_diagrams) usesprlens.ASSET_PREFIX. Both must stay in sync; if the asset prefix inprlensever changes, the report tool will quietly drop diagrams. Importing the constant fromprlenskeeps them aligned.Fixed in
175b7fc:clear_diagramsandcopy_diagramsuseprlens.ASSET_PREFIX.werkrevisor 0.56.0: hs-review puts the diagrams of PR Lens next to its draftto werkrevisor 0.57.0: hs-review puts the diagrams of PR Lens next to its draft⚠️ werkrevisor ERROR for
?, superseded by the result for175b7fcCodex review: not critical
The change adds local diagram generation and links in draft reports without changing merge decisions, authorization, or secret checks. It does not weaken CI gates or tests or introduce irreversible changes to existing application data.
No findings.
The merge waits for the status
Model `gpt-6-astra`, effort high, tokens in 304761 (cached 243840) / out 1482, 60.8 s, 8 commands; reviewed head `1c33cf7ce176b456ab5be3ad2b99adfd1a34f207`.ai-review/codex: every line comment resolved, and the approval of a human for a critical PR or for a finding that is only here.🟢 werkrevisor GREEN for
175b7fc, superseded by the result for7cc5832🟢 werkrevisor: GREEN / PASS
Gate: approved by werkrevisor; merge waits for 1 open hint(s): reply to each line comment and resolve it, then restart the review or push a commit.
Change kind:
mixed.Reasons
Findings
tests/test_reviewreport.py:104-114, severity unknown, counted as medium, hint, as a line commentClassifier
7 of 7 units passed all questions (1 PR document(s)).
Usage: model `openrouter/minimax/minimax-m3`, LLM done, tokens counted before the call 35819, calls 1, tokens in 34533 / out 16463 (reasoning included in out), duration 200.4 s, cost 0.0298 USD (reported), classifier `jev-1.13.0` calls 7, tokens in 5965, cost 0.0003 USD, finding judge `jev-1.13.0` calls 1, tokens in 1591, cost 0.0001 USD, excerpt selection `openrouter/openai/gpt-6-luna` calls 1, tokens in 24711 / out 413, cost 0.0005 USD (reported), PR document check `jev-1.13.0` calls 10, tokens in 27768, cost 0.0012 USD, build file judge `jev-1.13.0` calls 8, tokens in 8456, cost 0.0004 USD, phases: path_judge 0.5 s, classifier 0.5 s, doc_check 0.7 s, context 6.0 s, model_review 192.0 s, finding_judge 0.2 s, config: defaults + host + repository (.werkrevisor.toml at main2 answers ignored because of a confidence below [classifier] min_confidence.
88772c4).Reviewed head `175b7fce2e6cb4772342f64d1bcaa4c63bfe24d3` against base `88772c494abe8d265952e10c082327a0785451c2`, werkrevisor 0.54.1.
werkrevisor: GREEN / PASS for
175b7fce2e6cb4772342f64d1bcaa4c63bfe24d3.The result comment of werkrevisor holds the details.
@@ -81,0 +101,4 @@self.assertIn("", report)self.assertLess(report.index("### Diagrams"), report.index("### Codex"))def test_a_run_without_new_diagrams_shows_none_of_an_earlier_run(self):Test misaligned with scenario, severity unknown, counted as medium (werkrevisor)
hint; Jev: real 0.82, severity 2.0 of 3
test_a_run_without_new_diagrams_shows_none_of_an_earlier_runis cited as verifying the "a run that draws none shows none of an earlier run" branch of Scenario#129.02, but the setup places the "earlier" SVG insource(the dry-run output directory) rather than intarget(the draft directory, where a prior run's SVGs would actually persist for the scenario to be relevant). The assertion thatcopy_diagrams(source, target) == []passes trivially because target was empty to begin with, so the test never exercises the actual cleanup of earlier SVGs from the draft directory. The functional behavior is incidentally covered bytest_the_draft_links_the_diagrams_next_to_it(which putspr-lens-old.svgin target and verifies it disappears), but the specific concern of scenario#129.02's "no new diagrams" case lacks a dedicated, scenario-shaped test.Fixed in
7cc5832: the test puts an earlier SVG into the output directory and next to the draft; after a run without new diagrams both are empty and the draft has no Diagrams section.⚠️ werkrevisor ERROR for
?, superseded by the result for7cc5832Codex review: not critical
The change adds local diagram generation and draft-report links without changing authorization, authentication, merge gates, or existing review decisions. Cleanup is limited to generated diagram files, and no tests are weakened.
No findings.
The merge waits for the status
Model `gpt-6-astra`, effort high, tokens in 281921 (cached 227200) / out 1476, 57.9 s, 14 commands; reviewed head `175b7fce2e6cb4772342f64d1bcaa4c63bfe24d3`.ai-review/codex: every line comment resolved, and the approval of a human for a critical PR or for a finding that is only here.175b7fce2eto5f58756837New commits pushed, approval review dismissed automatically according to repository settings
🟢 werkrevisor: GREEN / PASS
Change kind:
mixed.Reasons
175b7fcnot carried over: 3 approved block(s) are missingClassifier
7 of 7 units passed all questions (1 PR document(s)).
Usage: model `openrouter/minimax/minimax-m3`, LLM done, tokens counted before the call 36621, calls 1, tokens in 35309 / out 17403 (reasoning included in out), duration 211.3 s, cost 0.0314 USD (reported), classifier `jev-1.13.0` calls 7, tokens in 5965, cost 0.0003 USD, excerpt selection `openrouter/openai/gpt-6-luna` calls 1, tokens in 24711 / out 455, cost 0.0005 USD (reported), PR document check `jev-1.13.0` calls 10, tokens in 27839, cost 0.0012 USD, build file judge `jev-1.13.0` calls 8, tokens in 8527, cost 0.0004 USD, phases: path_judge 0.5 s, classifier 0.3 s, doc_check 0.5 s, context 7.3 s, model_review 201.9 s, config: defaults + host + repository (.werkrevisor.toml at main1 answer ignored because of a confidence below [classifier] min_confidence.
02c5cad).Reviewed head `7cc58326cc3cfddf447092aff71fb32c632501ae` against base `02c5cad01497e3bc457babf06bdcace76a87a777`, werkrevisor 0.55.0.
werkrevisor: GREEN / PASS for
7cc58326cc3cfddf447092aff71fb32c632501ae.The result comment of werkrevisor holds the details.
Codex review: not critical
The change adds local diagram generation and draft-report links without changing authorization, merge gates, or review verdicts. Existing secret checks remain in place, and diagram failures do not alter the verdict.
No findings.
The merge waits for the status
Model `gpt-6-astra`, effort high, tokens in 251869 (cached 198272) / out 1341, 56.7 s, 9 commands; reviewed head `7cc58326cc3cfddf447092aff71fb32c632501ae`.ai-review/codex: every line comment resolved, and the approval of a human for a critical PR or for a finding that is only here.