ai-review/assessment AI findings; a developer approval after checking them unlocks the merge; review requested from mi; merge scheduled for when the checks succeed
werkrevisor: ORANGE / FINDINGS for 5fc3457614ec44ac20ba4d06f4aa8505d597c0ee.
The result comment of werkrevisor holds the details.
werkrevisor: ORANGE / FINDINGS for `5fc3457614ec44ac20ba4d06f4aa8505d597c0ee`.
The result comment of werkrevisor holds the details.
<!-- werkrevisor-review:5fc3457614ec44ac20ba4d06f4aa8505d597c0ee -->
Undocumented code change, severity unknown, counted as medium (werkrevisor)
ORANGE; Jev: real 0.78, severity 2.7 of 3
The PR modifies codexrunner.py to append the bot's own login to the human_reviewers tuple (server.human_reviewers + (login,)). This is a production code change in the gate's approval path, yet the Solution section only describes the test scenario, the werkbaum node and the version bump; the codexrunner.py change is neither mentioned nor justified.
**Undocumented code change**, severity unknown, counted as medium (werkrevisor)
ORANGE; Jev: real 0.78, severity 2.7 of 3
The PR modifies codexrunner.py to append the bot's own login to the human_reviewers tuple (server.human_reviewers + (login,)). This is a production code change in the gate's approval path, yet the Solution section only describes the test scenario, the werkbaum node and the version bump; the codexrunner.py change is neither mentioned nor justified.
Fixed in a0e9ca7: the change of codexrunner.py is removed again, so the squash merge does not change the runner; the PR document now describes the defect, its effect and the new test.
Fixed in `a0e9ca7`: the change of `codexrunner.py` is removed again, so the squash merge does not change the runner; the PR document now describes the defect, its effect and the new test.
claude-code marked this conversation as resolved
ai-reviewer
scheduled this pull request to auto merge when all checks succeed 2026-10-14 10:12:32 +02:00
ai-reviewer
requested review from mi 2026-10-14 10:12:32 +02:00
[high] Bot approval bypasses the mandatory human review (Codex review)
Adding (login,) to server.human_reviewers makes the runner’s bot account an authorized human approver. If that bot approves the current head after the Codex result, a critical PR with no open line comments receives ai-review/codex = success without any human approval. The same bypass applies to unattached findings and failed Codex reviews. An in-memory reproduction confirmed that a bot-only approval changes a critical PR’s status from pending at the merge base to success at this head.
Fix it, or reply why it does not hold, and resolve this comment.
**[high] Bot approval bypasses the mandatory human review** (Codex review)
Adding `(login,)` to `server.human_reviewers` makes the runner’s bot account an authorized human approver. If that bot approves the current head after the Codex result, a critical PR with no open line comments receives `ai-review/codex = success` without any human approval. The same bypass applies to unattached findings and failed Codex reviews. An in-memory reproduction confirmed that a bot-only approval changes a critical PR’s status from pending at the merge base to success at this head.
Fix it, or reply why it does not hold, and resolve this comment.
<!-- werkrevisor-codex -->
Fixed in a0e9ca7: the defect was on purpose, to test the Codex gate; only server.human_reviewers counts again. The new test test_the_approval_of_werkrevisor_is_no_human_approval fails with the defect.
Fixed in `a0e9ca7`: the defect was on purpose, to test the Codex gate; only `server.human_reviewers` counts again. The new test `test_the_approval_of_werkrevisor_is_no_human_approval` fails with the defect.
The change weakens the merge gate’s authorization check by allowing the bot’s approval to satisfy a requirement for human approval.
Findings
[high] Bot approval bypasses the mandatory human review at werkrevisor/codexrunner.py:224, 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 186428 (cached 147200) / out 1362, 46.7 s, 7 commands; reviewed head `5fc3457614ec44ac20ba4d06f4aa8505d597c0ee`.
<!-- werkrevisor-codex:5fc3457614ec44ac20ba4d06f4aa8505d597c0ee -->
<!-- werkrevisor-codex-critical:true -->
<!-- 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/106#issuecomment-5273">the result for <code>71bfec0</code></a></summary>
## Codex review: critical
The change weakens the merge gate’s authorization check by allowing the bot’s approval to satisfy a requirement for human approval.
### Findings
1. **[high] Bot approval bypasses the mandatory human review** at `werkrevisor/codexrunner.py:224`, 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 186428 (cached 147200) / out 1362, 46.7 s, 7 commands; reviewed head `5fc3457614ec44ac20ba4d06f4aa8505d597c0ee`.
</sub>
</details>
werkrevisor: GREEN / PASS for 71bfec096ab1b3d15a7778a19a29ef6c9fde7b05.
The result comment of werkrevisor holds the details.
werkrevisor: GREEN / PASS for `71bfec096ab1b3d15a7778a19a29ef6c9fde7b05`.
The result comment of werkrevisor holds the details.
<!-- werkrevisor-review:71bfec096ab1b3d15a7778a19a29ef6c9fde7b05 -->
ai-reviewer
removed review request for mi 2026-10-14 10:19:42 +02:00
The final diff only adds a regression test rejecting bot approval, documentation, and version bumps. It does not change authorization or gate logic, or weaken existing checks; the deliberately introduced defect is absent from this diff.
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 121390 (cached 90496) / out 484, 57.2 s, 4 commands; reviewed head `71bfec096ab1b3d15a7778a19a29ef6c9fde7b05`.
<!-- werkrevisor-codex:71bfec096ab1b3d15a7778a19a29ef6c9fde7b05 -->
<!-- werkrevisor-codex-critical:false -->
<!-- werkrevisor-codex-unattached:0 -->
<!-- werkrevisor-codex -->
## Codex review: not critical
The final diff only adds a regression test rejecting bot approval, documentation, and version bumps. It does not change authorization or gate logic, or weaken existing checks; the deliberately introduced defect is absent from this diff.
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 121390 (cached 90496) / out 484, 57.2 s, 4 commands; reviewed head `71bfec096ab1b3d15a7778a19a29ef6c9fde7b05`.
</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 the PR document under docs/prs/.
🤖 Generated with Claude Code
🟠 werkrevisor ORANGE for
5fc3457, superseded by the result for71bfec0🟠 werkrevisor: ORANGE / FINDINGS
Change kind:
mixed.Reasons
Findings
docs/prs/2026-10-14-PR#106-codex-gate-severe-test.md:11-37, severity unknown, counted as medium, ORANGE, as a line commentClassifier
5 of 5 units passed all questions (1 PR document(s)).
Usage: model `openrouter/minimax/minimax-m3`, LLM done, tokens counted before the call 10772, calls 1, tokens in 10410 / out 10462 (reasoning included in out), duration 244.9 s, cost 0.0156 USD (reported), classifier `jev-1.13.0` calls 5, tokens in 3353, cost 0.0001 USD, finding judge `jev-1.13.0` calls 1, tokens in 1053, cost 0.0000 USD, change summary `openrouter/minimax/minimax-m3` via Minimax calls 1, tokens in 739 / out 393, cost 0.0007 USD (reported), PR document check `jev-1.13.0` calls 5, tokens in 4708, cost 0.0002 USD, build file judge `jev-1.13.0` calls 3, tokens in 1584, cost 0.0001 USD, phases: path_judge 0.2 s, classifier 0.4 s, change_summary 4.3 s, doc_check 0.4 s, context 0.2 s, model_review 238.7 s, finding_judge 0.2 s, config: defaults + host + repository (.werkrevisor.toml at main1 answer ignored because of a confidence below [classifier] min_confidence.
0d5ddd5).Reviewed head `5fc3457614ec44ac20ba4d06f4aa8505d597c0ee` against base `0d5ddd5971449094e53b5e4fa1de3431669b2082`, werkrevisor 0.41.4.
werkrevisor: ORANGE / FINDINGS for
5fc3457614ec44ac20ba4d06f4aa8505d597c0ee.The result comment of werkrevisor holds the details.
@@ -0,0 +8,4 @@- [PR#105](2026-10-14-PR#105-codex-gate-test.md): the first PR through the gate, with a defect of low severity.## ProblemUndocumented code change, severity unknown, counted as medium (werkrevisor)
ORANGE; Jev: real 0.78, severity 2.7 of 3
The PR modifies codexrunner.py to append the bot's own login to the human_reviewers tuple (server.human_reviewers + (login,)). This is a production code change in the gate's approval path, yet the Solution section only describes the test scenario, the werkbaum node and the version bump; the codexrunner.py change is neither mentioned nor justified.
Fixed in
a0e9ca7: the change ofcodexrunner.pyis removed again, so the squash merge does not change the runner; the PR document now describes the defect, its effect and the new test.Codex review of
5fc3457614ec44ac20ba4d06f4aa8505d597c0ee@@ -222,3 +222,3 @@returnif mode == "gate":approved = human_approval(gitea.list_reviews(number), head, server.human_reviewers,approved = human_approval(gitea.list_reviews(number), head, server.human_reviewers + (login,),[high] Bot approval bypasses the mandatory human review (Codex review)
Adding
(login,)toserver.human_reviewersmakes the runner’s bot account an authorized human approver. If that bot approves the current head after the Codex result, a critical PR with no open line comments receivesai-review/codex = successwithout any human approval. The same bypass applies to unattached findings and failed Codex reviews. An in-memory reproduction confirmed that a bot-only approval changes a critical PR’s status from pending at the merge base to success at this head.Fix it, or reply why it does not hold, and resolve this comment.
Fixed in
a0e9ca7: the defect was on purpose, to test the Codex gate; onlyserver.human_reviewerscounts again. The new testtest_the_approval_of_werkrevisor_is_no_human_approvalfails with the defect.⚠️ werkrevisor ERROR for
?, superseded by the result for71bfec0Codex review: critical
The change weakens the merge gate’s authorization check by allowing the bot’s approval to satisfy a requirement for human approval.
Findings
werkrevisor/codexrunner.py:224, as a line commentThe merge waits for the status
Model `gpt-6-astra`, effort high, tokens in 186428 (cached 147200) / out 1362, 46.7 s, 7 commands; reviewed head `5fc3457614ec44ac20ba4d06f4aa8505d597c0ee`.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 / 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 10306, calls 1, tokens in 9964 / out 7992 (reasoning included in out), duration 76.1 s, cost 0.0115 USD (reported), classifier `jev-1.13.0` calls 6, tokens in 4126, cost 0.0002 USD, change summary `openrouter/minimax/minimax-m3` via Minimax calls 1, tokens in 773 / out 822, cost 0.0010 USD (reported), PR document check `jev-1.13.0` calls 6, tokens in 6340, cost 0.0003 USD, build file judge `jev-1.13.0` calls 3, tokens in 1563, cost 0.0001 USD, phases: path_judge 0.3 s, classifier 0.5 s, change_summary 11.9 s, doc_check 0.4 s, context 0.2 s, model_review 62.5 s, config: defaults + host + repository (.werkrevisor.toml at main3 answers ignored because of a confidence below [classifier] min_confidence.
0d5ddd5).Reviewed head `71bfec096ab1b3d15a7778a19a29ef6c9fde7b05` against base `0d5ddd5971449094e53b5e4fa1de3431669b2082`, werkrevisor 0.41.4.
werkrevisor: GREEN / PASS for
71bfec096ab1b3d15a7778a19a29ef6c9fde7b05.The result comment of werkrevisor holds the details.
Codex review: not critical
The final diff only adds a regression test rejecting bot approval, documentation, and version bumps. It does not change authorization or gate logic, or weaken existing checks; the deliberately introduced defect is absent from this diff.
No findings.
The merge waits for the status
Model `gpt-6-astra`, effort high, tokens in 121390 (cached 90496) / out 484, 57.2 s, 4 commands; reviewed head `71bfec096ab1b3d15a7778a19a29ef6c9fde7b05`.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.