werkrevisor 0.32.2: an approval counts only after the result #75

Merged
ai-reviewer merged 5 commits from claude-code/gate-after into main 2026-10-10 15:55:51 +02:00
Collaborator

An approval given before the result comment is asked for again, so a human approves only findings they could read.

See docs/prs/2026-10-10-PR#75-approval-after-the-result.md.

🤖 Generated with Claude Code

An approval given before the result comment is asked for again, so a human approves only findings they could read. See docs/prs/2026-10-10-PR#75-approval-after-the-result.md. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
claude-code added 1 commit 2026-10-10 15:29:41 +02:00
PR document: an approval counts only after the result
werkator build succeeded after 00:55
werkator/werkrevisor-statistics build succeeded after 00:34
e2d8c96afd
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
mi added 1 commit 2026-10-10 15:32:19 +02:00
An approval counts only after the result comment of its head
werkator build succeeded after 00:25
werkator/werkrevisor-statistics build succeeded after 01:05
ai-review/assessment human review required; a human approval unlocks the merge; review requested from mi; merge scheduled for when the checks succeed
ai-review/gate build succeeded after 05:38
f9e6437749
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
claude-code marked the pull request as ready for review 2026-10-10 15:33:10 +02:00
Collaborator
🟡 werkrevisor YELLOW for f9e6437, superseded by the result for 92a1994

🟡 werkrevisor: YELLOW / HUMAN_REVIEW

Change kind: mixed.

Reasons

  • YELLOW spec: docs/prs/2026-10-10-PR#75-approval-after-the-result.md Scenario#75.01 given_when_then_misused (0.64 > yellow_above = 0.6)
  • hint 6 changed file(s) that neither weaken the checks nor touch security 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 6 section(s) of the PR document agree with the change summary of openrouter/minimax/minimax-m3 according to Jev
  • hint 2 finding(s) of low severity or rated minor by Jev: werkrevisor/cli.py:234, docs/prs/2026-10-10-PR#75-approval-after-the-result.md:38-41

Findings

  1. GateDecision.held docstring is now incomplete at werkrevisor/cli.py:234, severity unknown, counted as medium, hint, as a line comment

  2. Misleading Verified-by link at docs/prs/2026-10-10-PR#75-approval-after-the-result.md:38-41, severity unknown, counted as medium, hint, as a line comment

Classifier

Unit Question Problem Confidence Verdict
docs/prs/2026-10-10-PR#75-approval-after-the-result.md Scenario#75.01 given_when_then_misused 0.64 – YELLOW

5 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 45359, calls 1, tokens in 43962 / out 34849 (reasoning included in out), duration 332.6 s, cost 0.0550 USD (reported), classifier `jev-1.13.0` calls 6, tokens in 4598, cost 0.0002 USD, finding judge `jev-1.13.0` calls 2, tokens in 2835, cost 0.0001 USD, change summary `openrouter/minimax/minimax-m3` via Minimax calls 1, tokens in 3886 / out 1405, cost 0.0028 USD (reported), PR document check `jev-1.13.0` calls 6, tokens in 9842, cost 0.0004 USD, build file judge `jev-1.13.0` calls 7, tokens in 6022, cost 0.0003 USD, phases: path_judge 0.5 s, classifier 0.5 s, change_summary 12.3 s, doc_check 1.7 s, context 8.7 s, model_review 307.7 s, finding_judge 0.2 s, config: defaults + host + repository (.werkrevisor.toml at main e521b1e).
Reviewed head `f9e64377493301234423ea08f8a38afed66e6133` against base `e521b1e483a7b27a4bb99e9bb93d776d8dba540b`, werkrevisor 0.32.1.
<!-- werkrevisor:f9e64377493301234423ea08f8a38afed66e6133 --> <!-- werkrevisor-verdict:YELLOW --> <!-- werkrevisor-blocks:d324531143d424875c0d471a39eea551,6c74c7b15b7b6a137ad8ea482f19023a,6b16959df9b7463a78511c8457d31ced,3359faa51f7dd47545d2dae7f80f71eb,6263c621d8a3a37dd9b42824a5d7472d,73c1b65deb8835110f542a821d18a638,2c21b4fc0c9d1a7c1fc9eca75981fc9d,42ac7ca13d4daf89bd8d778d739c41ce,dbe4db5ad4e5a7dc176d425b6349e2d3,195ffec348cafcf97f0dcf9a7da906f0,018b083a5dea22de642e3af4ced0b1d0,5d9fa5ccfba44c6701f5bfd7e21bf85a,e6335c19464447e312da32ad64d5a966,7c6124dc600a2a8e3e7b7e0420b09a79,5de0655abd7ddfeaaef61bec05e3c344,c05e16aae2c3510bd0585dc2e6165d9f,8499743c2e1cf834f776af7010abd151,2b518720d71d0b2d3d1f86f098226f67,5e812f0245aac24e104bcafc85608cc9,9aa002cef6be6dc161958af399041e8a,09a121a49f36927c56712239fa1d1fda --> <!-- werkrevisor-folded --> <details><summary>🟡 werkrevisor YELLOW for <code>f9e6437</code>, superseded by <a href="http://git.javagil.de/mi/werkrevisor/pulls/75#issuecomment-3199">the result for <code>92a1994</code></a></summary> ## 🟡 werkrevisor: YELLOW / HUMAN_REVIEW Change kind: `mixed`. ### Reasons - **YELLOW** spec: docs/prs/2026-10-10-PR#75-approval-after-the-result.md Scenario#75.01 given_when_then_misused (0.64 > yellow_above = 0.6) - **hint** 6 changed file(s) that neither weaken the checks nor touch security 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** 6 section(s) of the PR document agree with the change summary of openrouter/minimax/minimax-m3 according to Jev - **hint** 2 finding(s) of low severity or rated minor by Jev: werkrevisor/cli.py:234, docs/prs/2026-10-10-PR#75-approval-after-the-result.md:38-41 ### Findings 1. **GateDecision.held docstring is now incomplete** at `werkrevisor/cli.py:234`, severity unknown, counted as medium, hint, as a line comment 2. **Misleading Verified-by link** at `docs/prs/2026-10-10-PR#75-approval-after-the-result.md:38-41`, severity unknown, counted as medium, hint, as a line comment ### Classifier | Unit | Question | Problem | Confidence | Verdict | |---|---|---|---|---| | docs/prs/2026-10-10-PR#75-approval-after-the-result.md Scenario#75.01 | given_when_then_misused | 0.64 | – | YELLOW | 5 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 45359, calls 1, tokens in 43962 / out 34849 (reasoning included in out), duration 332.6 s, cost 0.0550 USD (reported), classifier `jev-1.13.0` calls 6, tokens in 4598, cost 0.0002 USD, finding judge `jev-1.13.0` calls 2, tokens in 2835, cost 0.0001 USD, change summary `openrouter/minimax/minimax-m3` via Minimax calls 1, tokens in 3886 / out 1405, cost 0.0028 USD (reported), PR document check `jev-1.13.0` calls 6, tokens in 9842, cost 0.0004 USD, build file judge `jev-1.13.0` calls 7, tokens in 6022, cost 0.0003 USD, phases: path_judge 0.5 s, classifier 0.5 s, change_summary 12.3 s, doc_check 1.7 s, context 8.7 s, model_review 307.7 s, finding_judge 0.2 s, config: defaults + host + repository (.werkrevisor.toml at main e521b1e).<br> Reviewed head `f9e64377493301234423ea08f8a38afed66e6133` against base `e521b1e483a7b27a4bb99e9bb93d776d8dba540b`, werkrevisor 0.32.1. </sub> </details>
ai-reviewer left a comment
Collaborator

werkrevisor: YELLOW / HUMAN_REVIEW for f9e64377493301234423ea08f8a38afed66e6133.
The result comment of werkrevisor holds the details.

werkrevisor: YELLOW / HUMAN_REVIEW for `f9e64377493301234423ea08f8a38afed66e6133`. The result comment of werkrevisor holds the details. <!-- werkrevisor-review:f9e64377493301234423ea08f8a38afed66e6133 -->
@@ -0,0 +35,4 @@
- **And** the result comment asks them to approve again after reading it
##### Verified by
Collaborator

Misleading Verified-by link, severity unknown, counted as medium (werkrevisor)

hint; Jev: real 0.86, severity 1.7 of 3

Scenario#75.01 is about the gate (requesting a new review), but its "Verified by" also lists test_carry_over.CarryOverTest.test_an_approval_before_the_result_of_its_head_is_not_carried_over, which exercises the carry-over path, not the gate. The carry-over behavior is described only in "The Solution" and has no scenario of its own, so a reader following the link expects a Scenario#75.01 test and instead finds an unrelated one, or has to infer that the carry-over is part of the same change. Either give the carry-over its own Scenario#75.03 with a "Verified by" link, or drop the carry-over test from Scenario#75.01's list.

**Misleading Verified-by link**, severity unknown, counted as medium (werkrevisor) hint; Jev: real 0.86, severity 1.7 of 3 Scenario#75.01 is about the gate (requesting a new review), but its "Verified by" also lists `test_carry_over.CarryOverTest.test_an_approval_before_the_result_of_its_head_is_not_carried_over`, which exercises the carry-over path, not the gate. The carry-over behavior is described only in "The Solution" and has no scenario of its own, so a reader following the link expects a Scenario#75.01 test and instead finds an unrelated one, or has to infer that the carry-over is part of the same change. Either give the carry-over its own Scenario#75.03 with a "Verified by" link, or drop the carry-over test from Scenario#75.01's list.
Author
Collaborator

Fixed: the carry-over has its own Scenario#75.03 with that test; Scenario#75.01 lists only the gate test.

Fixed: the carry-over has its own Scenario#75.03 with that test; Scenario#75.01 lists only the gate test.
claude-code marked this conversation as resolved
@@ -230,5 +230,5 @@
if mode == "classifier":
# Without an LLM only a PR of judged PR documents can pass; any other file got no semantic review.
changed = {f.path for f in files if not f.deleted}
result.classifier_sufficient = (rules.change_kind == "docs_only" and bool(changed)
and changed <= set(run.judged_files))
Collaborator

GateDecision.held docstring is now incomplete, severity unknown, counted as medium (werkrevisor)

hint; Jev: real 0.38, severity 1.4 of 3

The held flag on GateDecision is reused for the new early-approvers case (YELLOW/ORANGE with held=True to note the held merge in the result comment), but the inline docstring still reads "GREEN approved, but open hints keep the merge from being scheduled." That sentence only describes the GREEN/open-hints case the field was introduced for; a reader looking at held=True in _approval_gate for the early-approvers branch will not learn why the flag is set. Add a second sentence (or a more general wording) that covers both uses.

**GateDecision.held docstring is now incomplete**, severity unknown, counted as medium (werkrevisor) hint; Jev: real 0.38, severity 1.4 of 3 The `held` flag on `GateDecision` is reused for the new early-approvers case (YELLOW/ORANGE with held=True to note the held merge in the result comment), but the inline docstring still reads "GREEN approved, but open hints keep the merge from being scheduled." That sentence only describes the GREEN/open-hints case the field was introduced for; a reader looking at `held=True` in `_approval_gate` for the early-approvers branch will not learn why the flag is set. Add a second sentence (or a more general wording) that covers both uses.
Author
Collaborator

Fixed: the comment now names both uses, open hints of a GREEN review and an approval before the result.

Fixed: the comment now names both uses, open hints of a GREEN review and an approval before the result.
claude-code marked this conversation as resolved
ai-reviewer scheduled this pull request to auto merge when all checks succeed 2026-10-10 15:38:52 +02:00
ai-reviewer requested review from mi 2026-10-10 15:38:52 +02:00
mi added 1 commit 2026-10-10 15:40:12 +02:00
Review round 1: held covers both uses, Scenario#75.03 for the carry-over
werkator build succeeded after 00:17
werkator/werkrevisor-statistics build succeeded after 00:35
ai-review/assessment AI findings; a developer approval after checking them unlocks the merge; a human review request is pending; merge already scheduled
ai-review/gate build succeeded after 02:18
92a1994f4b
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Collaborator
🟠 werkrevisor ORANGE for 92a1994, superseded by the result for f0b44a7

🟠 werkrevisor: ORANGE / FINDINGS

Change kind: mixed.

Reasons

  • ORANGE 1 finding(s) that Jev rates as probably real and severe: werkrevisor/cli.py:641
  • hint 6 changed file(s) that neither weaken the checks nor touch security 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 7 section(s) of the PR document agree with the change summary of openrouter/minimax/minimax-m3 according to Jev
  • hint model recommends merge with caution

Findings

  1. Inconsistent gate mode handling at werkrevisor/cli.py:641, severity unknown, counted as medium, ORANGE, as a line comment

Classifier

7 of 7 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 45829, calls 1, tokens in 44416 / out 17496 (reasoning included in out), duration 135.8 s, cost 0.0343 USD (reported), classifier `jev-1.13.0` calls 7, tokens in 5518, cost 0.0002 USD, finding judge `jev-1.13.0` calls 1, tokens in 1587, cost 0.0001 USD, change summary `openrouter/minimax/minimax-m3` via Minimax calls 1, tokens in 3954 / out 1194, cost 0.0026 USD (reported), PR document check `jev-1.13.0` calls 7, tokens in 10027, cost 0.0004 USD, build file judge `jev-1.13.0` calls 7, tokens in 6094, cost 0.0003 USD, phases: path_judge 0.5 s, classifier 0.5 s, change_summary 8.6 s, doc_check 0.4 s, context 0.2 s, model_review 124.7 s, finding_judge 0.2 s, config: defaults + host + repository (.werkrevisor.toml at main e521b1e).
Reviewed head `92a1994f4b60d7b0e5ae2144bfb5f7e70dcfea86` against base `e521b1e483a7b27a4bb99e9bb93d776d8dba540b`, werkrevisor 0.32.1.
<!-- werkrevisor:92a1994f4b60d7b0e5ae2144bfb5f7e70dcfea86 --> <!-- werkrevisor-verdict:ORANGE --> <!-- werkrevisor-blocks:d324531143d424875c0d471a39eea551,6c74c7b15b7b6a137ad8ea482f19023a,a284291f7f202d7ffc3c15423b248666,3359faa51f7dd47545d2dae7f80f71eb,6263c621d8a3a37dd9b42824a5d7472d,73c1b65deb8835110f542a821d18a638,2c21b4fc0c9d1a7c1fc9eca75981fc9d,42ac7ca13d4daf89bd8d778d739c41ce,dbe4db5ad4e5a7dc176d425b6349e2d3,195ffec348cafcf97f0dcf9a7da906f0,018b083a5dea22de642e3af4ced0b1d0,5d9fa5ccfba44c6701f5bfd7e21bf85a,e6335c19464447e312da32ad64d5a966,7c6124dc600a2a8e3e7b7e0420b09a79,5de0655abd7ddfeaaef61bec05e3c344,c05e16aae2c3510bd0585dc2e6165d9f,8499743c2e1cf834f776af7010abd151,2b518720d71d0b2d3d1f86f098226f67,601572f95293fd11716ccddae30e0aac,5e812f0245aac24e104bcafc85608cc9,9aa002cef6be6dc161958af399041e8a,09a121a49f36927c56712239fa1d1fda --> <!-- werkrevisor-folded --> <details><summary>🟠 werkrevisor ORANGE for <code>92a1994</code>, superseded by <a href="http://git.javagil.de/mi/werkrevisor/pulls/75#issuecomment-3204">the result for <code>f0b44a7</code></a></summary> ## 🟠 werkrevisor: ORANGE / FINDINGS Change kind: `mixed`. ### Reasons - **ORANGE** 1 finding(s) that Jev rates as probably real and severe: werkrevisor/cli.py:641 - **hint** 6 changed file(s) that neither weaken the checks nor touch security 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** 7 section(s) of the PR document agree with the change summary of openrouter/minimax/minimax-m3 according to Jev - **hint** model recommends merge with caution ### Findings 1. **Inconsistent gate mode handling** at `werkrevisor/cli.py:641`, severity unknown, counted as medium, ORANGE, as a line comment ### Classifier 7 of 7 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 45829, calls 1, tokens in 44416 / out 17496 (reasoning included in out), duration 135.8 s, cost 0.0343 USD (reported), classifier `jev-1.13.0` calls 7, tokens in 5518, cost 0.0002 USD, finding judge `jev-1.13.0` calls 1, tokens in 1587, cost 0.0001 USD, change summary `openrouter/minimax/minimax-m3` via Minimax calls 1, tokens in 3954 / out 1194, cost 0.0026 USD (reported), PR document check `jev-1.13.0` calls 7, tokens in 10027, cost 0.0004 USD, build file judge `jev-1.13.0` calls 7, tokens in 6094, cost 0.0003 USD, phases: path_judge 0.5 s, classifier 0.5 s, change_summary 8.6 s, doc_check 0.4 s, context 0.2 s, model_review 124.7 s, finding_judge 0.2 s, config: defaults + host + repository (.werkrevisor.toml at main e521b1e).<br> Reviewed head `92a1994f4b60d7b0e5ae2144bfb5f7e70dcfea86` against base `e521b1e483a7b27a4bb99e9bb93d776d8dba540b`, werkrevisor 0.32.1. </sub> </details>
ai-reviewer left a comment
Collaborator

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

werkrevisor: ORANGE / FINDINGS for `92a1994f4b60d7b0e5ae2144bfb5f7e70dcfea86`. The result comment of werkrevisor holds the details. <!-- werkrevisor-review:92a1994f4b60d7b0e5ae2144bfb5f7e70dcfea86 -->
Collaborator

Inconsistent gate mode handling, severity unknown, counted as medium (werkrevisor)

ORANGE; Jev: real 0.83, severity 3.0 of 3

The PR's stated goal is that a human approval counts only after the result comment, and the README states this as a general rule for human approvals. The implementation only enforces this in approval mode (via _approval_gate). In pass_with_review_request mode (via _gate at line 641), human_approval is still called without the since parameter, so a pre-result approval would still unlock the gate through gate_decision. This contradicts the PR's intent and the README's general statement.

**Inconsistent gate mode handling**, severity unknown, counted as medium (werkrevisor) ORANGE; Jev: real 0.83, severity 3.0 of 3 The PR's stated goal is that a human approval counts only after the result comment, and the README states this as a general rule for human approvals. The implementation only enforces this in `approval` mode (via `_approval_gate`). In `pass_with_review_request` mode (via `_gate` at line 641), `human_approval` is still called without the `since` parameter, so a pre-result approval would still unlock the gate through `gate_decision`. This contradicts the PR's intent and the README's general statement.
Author
Collaborator

Fixed: _gate now passes the time of the result comment too; a first review writes it after the decision, so it counts no earlier approval. block requests a review from the early approver again, pass_with_review_request requested all reviewers already. Tests: OtherGateModesTest.

Fixed: `_gate` now passes the time of the result comment too; a first review writes it after the decision, so it counts no earlier approval. `block` requests a review from the early approver again, `pass_with_review_request` requested all reviewers already. Tests: OtherGateModesTest.
claude-code marked this conversation as resolved
mi added 1 commit 2026-10-10 15:44:03 +02:00
The other gate modes count an approval only after the result too
werkator build succeeded after 00:09
werkator/werkrevisor-statistics build succeeded after 00:28
ai-review/assessment AI findings; a developer approval after checking them unlocks the merge; a human review request is pending; merge already scheduled
ai-review/gate build succeeded after 05:07
f0b44a7b65
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Collaborator
🟠 werkrevisor ORANGE for f0b44a7, superseded by the result for e1272b0

🟠 werkrevisor: ORANGE / FINDINGS

Change kind: mixed.

Reasons

  • ORANGE 1 finding(s) that Jev rates as probably real and severe: werkrevisor/cli.py:645-651
  • YELLOW spec: docs/prs/2026-10-10-PR#75-approval-after-the-result.md Scenario#75.01 given_when_then_misused (0.62 > yellow_above = 0.6)
  • hint 6 changed file(s) that neither weaken the checks nor touch security 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 7 section(s) of the PR document agree with the change summary of openrouter/minimax/minimax-m3 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-10-PR#75-approval-after-the-result.md:24-67
  • hint model recommends merge with caution

Findings

  1. Silent failure in block mode at werkrevisor/cli.py:645-651, severity unknown, counted as medium, ORANGE, as a line comment

  2. Scenarios miss gate modes at docs/prs/2026-10-10-PR#75-approval-after-the-result.md:24-67, severity unknown, counted as medium, hint, as a line comment

Classifier

Unit Question Problem Confidence Verdict
docs/prs/2026-10-10-PR#75-approval-after-the-result.md Scenario#75.01 given_when_then_misused 0.62 – YELLOW

6 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 31495, calls 1, tokens in 30526 / out 43555 (reasoning included in out), duration 305.3 s, cost 0.0614 USD (reported), classifier `jev-1.13.0` calls 7, tokens in 5556, cost 0.0002 USD, finding judge `jev-1.13.0` calls 2, tokens in 3533, cost 0.0001 USD, excerpt selection `openrouter/openai/gpt-6-luna` calls 1, tokens in 22449 / out 311, cost 0.0030 USD (reported), change summary `openrouter/minimax/minimax-m3` via Minimax calls 1, tokens in 5171 / out 1649, cost 0.0035 USD (reported), PR document check `jev-1.13.0` calls 7, tokens in 11997, cost 0.0005 USD, build file judge `jev-1.13.0` calls 7, tokens in 7370, cost 0.0003 USD, phases: path_judge 0.5 s, classifier 0.4 s, change_summary 11.6 s, doc_check 0.5 s, context 4.8 s, model_review 286.5 s, finding_judge 0.4 s, config: defaults + host + repository (.werkrevisor.toml at main e521b1e).
Reviewed head `f0b44a7b6555fd55db664ac80f5bd08e90dd6dda` against base `e521b1e483a7b27a4bb99e9bb93d776d8dba540b`, werkrevisor 0.32.1.
<!-- werkrevisor:f0b44a7b6555fd55db664ac80f5bd08e90dd6dda --> <!-- werkrevisor-verdict:ORANGE --> <!-- werkrevisor-blocks:d324531143d424875c0d471a39eea551,6c74c7b15b7b6a137ad8ea482f19023a,18ce4553027db24a0d16e9b36fb47374,3359faa51f7dd47545d2dae7f80f71eb,6263c621d8a3a37dd9b42824a5d7472d,8eca7b71027befa62fcba8ec6a02b65e,2c21b4fc0c9d1a7c1fc9eca75981fc9d,42ac7ca13d4daf89bd8d778d739c41ce,dbe4db5ad4e5a7dc176d425b6349e2d3,195ffec348cafcf97f0dcf9a7da906f0,018b083a5dea22de642e3af4ced0b1d0,5d9fa5ccfba44c6701f5bfd7e21bf85a,e6335c19464447e312da32ad64d5a966,29e635d4efa27c9b4d8aecb53a2aaaa0,6555a63e37106457efb32101fc192f20,f435a31cf770c12aa67530267bda2930,7c6124dc600a2a8e3e7b7e0420b09a79,5de0655abd7ddfeaaef61bec05e3c344,c05e16aae2c3510bd0585dc2e6165d9f,8499743c2e1cf834f776af7010abd151,332f3d5a12ad072cba6907f86e1791fa,2b518720d71d0b2d3d1f86f098226f67,601572f95293fd11716ccddae30e0aac,5e812f0245aac24e104bcafc85608cc9,9aa002cef6be6dc161958af399041e8a,09a121a49f36927c56712239fa1d1fda --> <!-- werkrevisor-folded --> <details><summary>🟠 werkrevisor ORANGE for <code>f0b44a7</code>, superseded by <a href="http://git.javagil.de/mi/werkrevisor/pulls/75#issuecomment-3213">the result for <code>e1272b0</code></a></summary> ## 🟠 werkrevisor: ORANGE / FINDINGS Change kind: `mixed`. ### Reasons - **ORANGE** 1 finding(s) that Jev rates as probably real and severe: werkrevisor/cli.py:645-651 - **YELLOW** spec: docs/prs/2026-10-10-PR#75-approval-after-the-result.md Scenario#75.01 given_when_then_misused (0.62 > yellow_above = 0.6) - **hint** 6 changed file(s) that neither weaken the checks nor touch security 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** 7 section(s) of the PR document agree with the change summary of openrouter/minimax/minimax-m3 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-10-PR#75-approval-after-the-result.md:24-67 - **hint** model recommends merge with caution ### Findings 1. **Silent failure in block mode** at `werkrevisor/cli.py:645-651`, severity unknown, counted as medium, ORANGE, as a line comment 2. **Scenarios miss gate modes** at `docs/prs/2026-10-10-PR#75-approval-after-the-result.md:24-67`, severity unknown, counted as medium, hint, as a line comment ### Classifier | Unit | Question | Problem | Confidence | Verdict | |---|---|---|---|---| | docs/prs/2026-10-10-PR#75-approval-after-the-result.md Scenario#75.01 | given_when_then_misused | 0.62 | – | YELLOW | 6 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 31495, calls 1, tokens in 30526 / out 43555 (reasoning included in out), duration 305.3 s, cost 0.0614 USD (reported), classifier `jev-1.13.0` calls 7, tokens in 5556, cost 0.0002 USD, finding judge `jev-1.13.0` calls 2, tokens in 3533, cost 0.0001 USD, excerpt selection `openrouter/openai/gpt-6-luna` calls 1, tokens in 22449 / out 311, cost 0.0030 USD (reported), change summary `openrouter/minimax/minimax-m3` via Minimax calls 1, tokens in 5171 / out 1649, cost 0.0035 USD (reported), PR document check `jev-1.13.0` calls 7, tokens in 11997, cost 0.0005 USD, build file judge `jev-1.13.0` calls 7, tokens in 7370, cost 0.0003 USD, phases: path_judge 0.5 s, classifier 0.4 s, change_summary 11.6 s, doc_check 0.5 s, context 4.8 s, model_review 286.5 s, finding_judge 0.4 s, config: defaults + host + repository (.werkrevisor.toml at main e521b1e).<br> Reviewed head `f0b44a7b6555fd55db664ac80f5bd08e90dd6dda` against base `e521b1e483a7b27a4bb99e9bb93d776d8dba540b`, werkrevisor 0.32.1. </sub> </details>
ai-reviewer left a comment
Collaborator

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

werkrevisor: ORANGE / FINDINGS for `f0b44a7b6555fd55db664ac80f5bd08e90dd6dda`. The result comment of werkrevisor holds the details. <!-- werkrevisor-review:f0b44a7b6555fd55db664ac80f5bd08e90dd6dda -->
@@ -0,0 +21,4 @@
- No change for GREEN, which needs no human approval, nor for RED, which blocks anyway.
- No new trigger: Werkator still starts a review only for a new commit.
## The Scenarios
Collaborator

Scenarios miss gate modes, severity unknown, counted as medium (werkrevisor)

hint; Jev: real 0.83, severity 1.9 of 3

The "Solution" section claims the change applies "in all three gate modes", but the three scenarios (75.01, 75.02, 75.03) only describe the approval mode and the carry-over. The block and pass_with_review_request modes are verified by OtherGateModesTest but have no scenario descriptions, so the formal BDD-style documentation covers only one of the three modes that the change touches.

**Scenarios miss gate modes**, severity unknown, counted as medium (werkrevisor) hint; Jev: real 0.83, severity 1.9 of 3 The "Solution" section claims the change applies "in all three gate modes", but the three scenarios (75.01, 75.02, 75.03) only describe the `approval` mode and the carry-over. The `block` and `pass_with_review_request` modes are verified by `OtherGateModesTest` but have no scenario descriptions, so the formal BDD-style documentation covers only one of the three modes that the change touches.
Author
Collaborator

Fixed: Scenario#75.04 covers block and pass_with_review_request, with OtherGateModesTest as its tests.

Fixed: Scenario#75.04 covers `block` and `pass_with_review_request`, with OtherGateModesTest as its tests.
claude-code marked this conversation as resolved
@@ -635,0 +642,4 @@
reviews = gitea.list_reviews(pr.number)
approved_by = human_approval(reviews, pr.head_sha, config.gate.human_reviewers, since)
early = [] if approved_by else early_approvers(reviews, pr.head_sha, config.gate.human_reviewers, since)
if early and config.gate.yellow_gate == "block" and publish:
Collaborator

Silent failure in block mode, severity unknown, counted as medium (werkrevisor)

ORANGE; Jev: real 0.83, severity 2.9 of 3

In _gate, when the block mode re-request to early approvers fails, the exception is only printed to stderr (line 651) and is not surfaced in the gate note. _approval_gate returns a GateDecision whose note contains the failure text ("...but the new review request failed: {e}"). The block mode failure case is also untested, so a real Gitea error would leave the human reviewer seeing "please approve again after reading it" in the comment yet no pending review request in Gitea; only the bot's stderr log records the failure.

**Silent failure in block mode**, severity unknown, counted as medium (werkrevisor) ORANGE; Jev: real 0.83, severity 2.9 of 3 In `_gate`, when the `block` mode re-request to early approvers fails, the exception is only printed to stderr (line 651) and is not surfaced in the gate note. `_approval_gate` returns a GateDecision whose note contains the failure text ("...but the new review request failed: {e}"). The `block` mode failure case is also untested, so a real Gitea error would leave the human reviewer seeing "please approve again after reading it" in the comment yet no pending review request in Gitea; only the bot's stderr log records the failure.
Author
Collaborator

Fixed: the gate note of block now says "..., but the new review request failed: ...", like the approval mode; test_block_names_a_failed_request.

Fixed: the gate note of `block` now says "..., but the new review request failed: ...", like the approval mode; test_block_names_a_failed_request.
claude-code marked this conversation as resolved
mi added 1 commit 2026-10-10 15:50:38 +02:00
Review round 3: block names a failed request, Scenario#75.04 for the other gate modes
werkator build succeeded after 00:16
werkator/werkrevisor-statistics build succeeded after 00:58
ai-review/assessment AI review passed; approved by werkrevisor; merge already scheduled; review request of mi withdrawn
ai-review/gate build succeeded after 05:01
e1272b0e5c
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Collaborator

🟢 werkrevisor: GREEN / PASS

Change kind: mixed.

Reasons

  • hint 6 changed file(s) that neither weaken the checks nor touch security 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 8 section(s) of the PR document agree with the change summary of openrouter/minimax/minimax-m3 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

8 of 8 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 32232, calls 1, tokens in 31224 / out 32769 (reasoning included in out), duration 297.2 s, cost 0.0487 USD (reported), classifier `jev-1.13.0` calls 8, tokens in 6534, cost 0.0003 USD, excerpt selection `openrouter/openai/gpt-6-luna` calls 1, tokens in 22451 / out 432, cost 0.0030 USD (reported), change summary `openrouter/minimax/minimax-m3` via Minimax calls 1, tokens in 5334 / out 1941, cost 0.0039 USD (reported), PR document check `jev-1.13.0` calls 8, tokens in 14866, cost 0.0006 USD, build file judge `jev-1.13.0` calls 7, tokens in 7549, cost 0.0003 USD, phases: path_judge 0.5 s, classifier 0.5 s, change_summary 15.5 s, doc_check 0.6 s, context 7.7 s, model_review 271.7 s, config: defaults + host + repository (.werkrevisor.toml at main e521b1e).
Reviewed head `e1272b0e5c4b363372b882da283139bb46edc383` against base `e521b1e483a7b27a4bb99e9bb93d776d8dba540b`, werkrevisor 0.32.1.
<!-- werkrevisor:e1272b0e5c4b363372b882da283139bb46edc383 --> <!-- werkrevisor-verdict:GREEN --> <!-- werkrevisor-blocks:d324531143d424875c0d471a39eea551,6c74c7b15b7b6a137ad8ea482f19023a,6719d47518a35ddeed760adc77bdc107,3359faa51f7dd47545d2dae7f80f71eb,6263c621d8a3a37dd9b42824a5d7472d,4664018dfc384d73bf90553935bca4a0,2c21b4fc0c9d1a7c1fc9eca75981fc9d,42ac7ca13d4daf89bd8d778d739c41ce,dbe4db5ad4e5a7dc176d425b6349e2d3,195ffec348cafcf97f0dcf9a7da906f0,018b083a5dea22de642e3af4ced0b1d0,5d9fa5ccfba44c6701f5bfd7e21bf85a,e6335c19464447e312da32ad64d5a966,29e635d4efa27c9b4d8aecb53a2aaaa0,dc170ecf17fcf71168b41b8310b39e9e,38f627a8be05e821351fe1abe226e584,7c6124dc600a2a8e3e7b7e0420b09a79,5de0655abd7ddfeaaef61bec05e3c344,c05e16aae2c3510bd0585dc2e6165d9f,8499743c2e1cf834f776af7010abd151,332f3d5a12ad072cba6907f86e1791fa,2b518720d71d0b2d3d1f86f098226f67,601572f95293fd11716ccddae30e0aac,5e812f0245aac24e104bcafc85608cc9,9aa002cef6be6dc161958af399041e8a,09a121a49f36927c56712239fa1d1fda --> ## 🟢 werkrevisor: GREEN / PASS Change kind: `mixed`. ### Reasons - **hint** 6 changed file(s) that neither weaken the checks nor touch security 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** 8 section(s) of the PR document agree with the change summary of openrouter/minimax/minimax-m3 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 8 of 8 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 32232, calls 1, tokens in 31224 / out 32769 (reasoning included in out), duration 297.2 s, cost 0.0487 USD (reported), classifier `jev-1.13.0` calls 8, tokens in 6534, cost 0.0003 USD, excerpt selection `openrouter/openai/gpt-6-luna` calls 1, tokens in 22451 / out 432, cost 0.0030 USD (reported), change summary `openrouter/minimax/minimax-m3` via Minimax calls 1, tokens in 5334 / out 1941, cost 0.0039 USD (reported), PR document check `jev-1.13.0` calls 8, tokens in 14866, cost 0.0006 USD, build file judge `jev-1.13.0` calls 7, tokens in 7549, cost 0.0003 USD, phases: path_judge 0.5 s, classifier 0.5 s, change_summary 15.5 s, doc_check 0.6 s, context 7.7 s, model_review 271.7 s, config: defaults + host + repository (.werkrevisor.toml at main e521b1e).<br> Reviewed head `e1272b0e5c4b363372b882da283139bb46edc383` against base `e521b1e483a7b27a4bb99e9bb93d776d8dba540b`, werkrevisor 0.32.1. </sub>
ai-reviewer left a comment
Collaborator

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

werkrevisor: GREEN / PASS for `e1272b0e5c4b363372b882da283139bb46edc383`. The result comment of werkrevisor holds the details. <!-- werkrevisor-review:e1272b0e5c4b363372b882da283139bb46edc383 -->
ai-reviewer removed review request for mi 2026-10-10 15:55:46 +02:00
ai-reviewer merged commit 3ade5c51fd into main 2026-10-10 15:55:51 +02:00
ai-reviewer deleted branch claude-code/gate-after 2026-10-10 15:55:51 +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/werkrevisor#75