The Codex review rates a PR as not critical when it only hardens the security, fails closed and has a test of the closed case.
See docs/prs/ for the details.
The Codex review rates a PR as not critical when it only hardens the security, fails closed and has a test of the closed case.
See `docs/prs/` for the details.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
claude-code
changed title from WIP: werkrevisor 0.70.0: a security fix that only hardens needs no human review by Codex to WIP: werkrevisor 0.71.0: a security fix that only hardens needs no human review by Codex2026-10-24 21:42:45 +02:00
ai-review/assessment AI review passed; approved by werkrevisor; merge waits for 3 open hint(s): reply to each line comment and resolve it, then restart the review or push a commit
Gate: approved by werkrevisor; merge waits for 3 open hint(s): reply to each line comment and resolve it, then restart the review or push a commit.
Change kind: mixed.
Reasons
hint writing rules violated in the changed docs: README.md:1045: paragraph with 6 sentences, more than 5
hint 10 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 13 changed file(s) agree with the PR document according to Jev
hint 2 finding(s) of low severity or rated minor by Jev: tests/test_codex.py:50-57, docs/prs/2026-10-24-PR#143-codex-hardening.md:73
hint model recommends changes before merge
hint model rates the risk as high (advisory: Jev judged every changed file)
Findings
[high] Weakened coverage at tests/test_codex.py:50-57, hint, as a line comment
[low] Misleading rating at docs/prs/2026-10-24-PR#143-codex-hardening.md:73, hint, 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 62346, calls 1, tokens in 59895 / out 50708 (reasoning included in out), duration 451.0 s, cost 0.0788 USD (reported), classifier `jev-1.14.0` calls 7, tokens in 5850, cost 0.0002 USD, finding judge `jev-1.14.0` calls 1, tokens in 2073, cost 0.0001 USD, PR document check `jev-1.14.0` calls 13, tokens in 33514, cost 0.0014 USD, build file judge `jev-1.14.0` calls 11, tokens in 9711, cost 0.0004 USD, phases: path_judge 0.6 s, classifier 0.3 s, doc_check 0.6 s, context 0.4 s, model_review 448.5 s, finding_judge 0.2 s, config: defaults + host + repository (.werkrevisor.toml at main 113f634).
Reviewed head `2aaac100ad70a2546266a52d05c4eb5c80997bd5` against base `113f6342e6bb78d936f864a6f49e3dc33eaf9971`, werkrevisor 0.69.0.
<!-- werkrevisor:2aaac100ad70a2546266a52d05c4eb5c80997bd5 -->
<!-- werkrevisor-verdict:GREEN -->
<!-- werkrevisor-blocks:8fd6cf588710a908df7a6d9e47b87a0b,57b4b5b360ee23c81b6e44ce093b4673,7add4928dffce700ae42e47f8351d52f,5c0db5affb85cf7d28e01d00414bfbf2,b03254833f81e70be5e132f3ce11fa50,e835dc06d3315fb534daabb8888eb6d6,4f82b44f5c2d13e51abbd56f13e01e91,1b7ae5d11a80162b21194a4b8602f283,726cf11b4ad2241f07a839d8678a11c7,0bd6d67bc029f4df019c0cc72058e62f,4f215c43c3b9146fd2f09f500875ee49,8b8da9d55cdcfe6c74ec42fd0cd8fedc,1892ebf2c547c648b6f06009c368e481,d0109a28c9af7091ce8d693943e3da46,d4b228d09db1b7fbb2c23ade227c31b7,e479ffe2a9534894df67cfe130ec575b,ea943ce89c91db972b096a1670fdea88,dbaa46d6e4f74d87e72a1ba511838866,cb25c8f654ed323823fa897c75d30001,3e6717d6ba1542f61b5facdb353a9193,1c2802beb21e3d97db053e04e832e1bf,c7eecbe9e507ed99ae107f3e8ad516c0,14c77a842164952fb844df3daeeb1244,47d28062df590beb7704b408a7e0fcd9,d73a428fe05198b5710b404788d97cd7,3cfe78b699835fcdf04a4acdf3407a37,d07a7966b140478998ed5c9670301f39,1051bc872992107d3c49a4cab629a92b,c393ef65f01f919ecb166a14ffa55d2b,b3a62902a9a16546db2666886cd9f8af,36ed3c38aa9930343665bd54d5007418,0112a844d5dea335b0629dade2ffcc5c,c4cdbace758989a39adb7b74802d209d,456644224f1cc7581a4566959b3589c4,978d50f66428c2bd4a2924d9726c4f95 -->
<!-- werkrevisor-held-by-line-comments -->
<!-- werkrevisor-folded -->
<details><summary>🟢 werkrevisor GREEN for <code>2aaac10</code>, superseded by <a href="http://git.javagil.de/mi/werkrevisor/pulls/143#issuecomment-7924">the result for <code>225368d</code></a></summary>
## 🟢 werkrevisor: GREEN / PASS
Gate: approved by werkrevisor; merge waits for 3 open hint(s): reply to each line comment and resolve it, then restart the review or push a commit.
Change kind: `mixed`.
### Reasons
- **hint** writing rules violated in the changed docs: README.md:1045: paragraph with 6 sentences, more than 5
- **hint** 10 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** 13 changed file(s) agree with the PR document according to Jev
- **hint** 2 finding(s) of low severity or rated minor by Jev: tests/test_codex.py:50-57, docs/prs/2026-10-24-PR#143-codex-hardening.md:73
- **hint** model recommends changes before merge
- **hint** model rates the risk as high (advisory: Jev judged every changed file)
### Findings
1. **[high] Weakened coverage** at `tests/test_codex.py:50-57`, hint, as a line comment
2. **[low] Misleading rating** at `docs/prs/2026-10-24-PR#143-codex-hardening.md:73`, hint, 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 62346, calls 1, tokens in 59895 / out 50708 (reasoning included in out), duration 451.0 s, cost 0.0788 USD (reported), classifier `jev-1.14.0` calls 7, tokens in 5850, cost 0.0002 USD, finding judge `jev-1.14.0` calls 1, tokens in 2073, cost 0.0001 USD, PR document check `jev-1.14.0` calls 13, tokens in 33514, cost 0.0014 USD, build file judge `jev-1.14.0` calls 11, tokens in 9711, cost 0.0004 USD, phases: path_judge 0.6 s, classifier 0.3 s, doc_check 0.6 s, context 0.4 s, model_review 448.5 s, finding_judge 0.2 s, config: defaults + host + repository (.werkrevisor.toml at main 113f634).<br>
Reviewed head `2aaac100ad70a2546266a52d05c4eb5c80997bd5` against base `113f6342e6bb78d936f864a6f49e3dc33eaf9971`, werkrevisor 0.69.0.
</sub>
</details>
werkrevisor: GREEN / PASS for 2aaac100ad70a2546266a52d05c4eb5c80997bd5.
The result comment of werkrevisor holds the details.
werkrevisor: GREEN / PASS for `2aaac100ad70a2546266a52d05c4eb5c80997bd5`.
The result comment of werkrevisor holds the details.
<!-- werkrevisor-review:2aaac100ad70a2546266a52d05c4eb5c80997bd5 -->
The Solution says tools/codex-eval uses the same rating as the gate, but the tool prints the raw critical field. A critical tested hardening is therefore shown as critical True, while codex.rating() and the gate call it not critical: a tested hardening that fails closed. An operator evaluating the tool could reach the opposite conclusion. Print the derived rating and exemption flags, or state that the tool intentionally reports raw criticality.
**[low] Misleading rating** (werkrevisor)
hint
The Solution says `tools/codex-eval` uses the same rating as the gate, but the tool prints the raw `critical` field. A critical tested hardening is therefore shown as `critical True`, while `codex.rating()` and the gate call it `not critical: a tested hardening that fails closed`. An operator evaluating the tool could reach the opposite conclusion. Print the derived rating and exemption flags, or state that the tool intentionally reports raw criticality.
The new required fields are supplied only for the malformed line, title, and explanation fixtures. The other legacy malformed fixtures still omit them, so valid_answer rejects them for the missing fields before the old checks are exercised. Removing validation for critical, critical_reason, findings, or severity would therefore leave this test green, although the runner relies on this manual validator. Keep each legacy fixture complete except for the field under test.
**[high] Weakened coverage** (werkrevisor)
hint; Jev: real 0.79, severity 2.1 of 3
The new required fields are supplied only for the malformed `line`, `title`, and `explanation` fixtures. The other legacy malformed fixtures still omit them, so `valid_answer` rejects them for the missing fields before the old checks are exercised. Removing validation for `critical`, `critical_reason`, `findings`, or `severity` would therefore leave this test green, although the runner relies on this manual validator. Keep each legacy fixture complete except for the field under test.
Fixed in 225368d: each broken answer is the complete answer with only the field under test changed or removed; it now also covers a missing critical, critical_reason and findings. Without the critical_reason check the test fails.
Fixed in `225368d`: each broken answer is the complete answer with only the field under test changed or removed; it now also covers a missing `critical`, `critical_reason` and `findings`. Without the `critical_reason` check the test fails.
This change weakens the CI merge gate by allowing security-sensitive PRs to bypass human approval based on the model’s hardening assessment. Tests verify the decision logic but cannot establish that the model will classify real security changes correctly.
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 326320 (cached 281600) / out 2081, 47.4 s, 9 commands; reviewed head `2aaac100ad70a2546266a52d05c4eb5c80997bd5`.
<!-- werkrevisor-codex:2aaac100ad70a2546266a52d05c4eb5c80997bd5 -->
<!-- werkrevisor-codex-critical:true -->
<!-- werkrevisor-codex-unattached:0 -->
<!-- werkrevisor-codex -->
## Codex review: critical
This change weakens the CI merge gate by allowing security-sensitive PRs to bypass human approval based on the model’s hardening assessment. Tests verify the decision logic but cannot establish that the model will classify real security changes correctly.
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 326320 (cached 281600) / out 2081, 47.4 s, 9 commands; reviewed head `2aaac100ad70a2546266a52d05c4eb5c80997bd5`.
</sub>
hint approval of werkrevisor for 2aaac10 not carried over: 6 approved block(s) are missing
hint 10 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.03, risk 0.00, security 0.02)
hint 13 changed file(s) agree with the PR document according to Jev
hint 1 finding(s) of low severity or rated minor by Jev: docs/prs/2026-10-24-PR#143-codex-hardening.md:82
hint model recommends changes before merge
Findings
[medium] Missing Diagrams at docs/prs/2026-10-24-PR#143-codex-hardening.md:82
hint; Jev: real 0.85, severity 2.3 of 3
Adding the tested-hardening exemption changes a review decision, but this line states that no diagram update is needed. AGENTS.md requires the diagrams under docs/ to be updated whenever a PR changes the steps or decisions of a review. Update the affected review-flow diagram(s) to show when human approval is bypassed; otherwise the shipped diagrams do not document this security-gate branch and can mislead maintainers about when a human must review.
Classifier
7 of 7 units passed all questions (1 PR document(s)).
4 answers ignored because of a confidence below [classifier] min_confidence.
Usage: model `openrouter/minimax/minimax-m3`, LLM done, tokens counted before the call 62999, calls 1, tokens in 60520 / out 36389 (reasoning included in out), duration 370.5 s, cost 0.0618 USD (reported), classifier `jev-1.14.0` calls 7, tokens in 5899, cost 0.0002 USD, finding judge `jev-1.14.0` calls 1, tokens in 1458, cost 0.0001 USD, PR document check `jev-1.14.0` calls 13, tokens in 34446, cost 0.0014 USD, build file judge `jev-1.14.0` calls 11, tokens in 10005, cost 0.0004 USD, phases: path_judge 0.5 s, classifier 0.3 s, doc_check 0.6 s, context 0.5 s, model_review 367.7 s, finding_judge 0.2 s, config: defaults + host + repository (.werkrevisor.toml at main 113f634).
Reviewed head `225368df8afa330b943f56bf47b5640feab093f6` against base `113f6342e6bb78d936f864a6f49e3dc33eaf9971`, werkrevisor 0.69.0.
<!-- werkrevisor:225368df8afa330b943f56bf47b5640feab093f6 -->
<!-- werkrevisor-verdict:GREEN -->
<!-- werkrevisor-blocks:88531d8953a287fd46ef82ddd6bd29b6,5bd1cd0791d6e80f749ef701f88a3d30,7add4928dffce700ae42e47f8351d52f,5c0db5affb85cf7d28e01d00414bfbf2,163cc98db7f0864d7c01bd9770316694,1b7ae5d11a80162b21194a4b8602f283,726cf11b4ad2241f07a839d8678a11c7,065495304cd38d5e560e10d5452a68b9,0bd6d67bc029f4df019c0cc72058e62f,4f215c43c3b9146fd2f09f500875ee49,8b8da9d55cdcfe6c74ec42fd0cd8fedc,1892ebf2c547c648b6f06009c368e481,d0109a28c9af7091ce8d693943e3da46,d4b228d09db1b7fbb2c23ade227c31b7,e479ffe2a9534894df67cfe130ec575b,ea943ce89c91db972b096a1670fdea88,dbaa46d6e4f74d87e72a1ba511838866,cb25c8f654ed323823fa897c75d30001,3e6717d6ba1542f61b5facdb353a9193,de874d16b12c721193e9e892c3d2c69a,94420af4ef9ba5186b690d4221378985,c7eecbe9e507ed99ae107f3e8ad516c0,14c77a842164952fb844df3daeeb1244,47d28062df590beb7704b408a7e0fcd9,d73a428fe05198b5710b404788d97cd7,3cfe78b699835fcdf04a4acdf3407a37,d07a7966b140478998ed5c9670301f39,1051bc872992107d3c49a4cab629a92b,c393ef65f01f919ecb166a14ffa55d2b,b3a62902a9a16546db2666886cd9f8af,36ed3c38aa9930343665bd54d5007418,0112a844d5dea335b0629dade2ffcc5c,c4cdbace758989a39adb7b74802d209d,456644224f1cc7581a4566959b3589c4,978d50f66428c2bd4a2924d9726c4f95 -->
## 🟢 werkrevisor: GREEN / PASS
Change kind: `mixed`.
### Reasons
- **hint** approval of werkrevisor for `2aaac10` not carried over: 6 approved block(s) are missing
- **hint** 10 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.03, risk 0.00, security 0.02)
- **hint** 13 changed file(s) agree with the PR document according to Jev
- **hint** 1 finding(s) of low severity or rated minor by Jev: docs/prs/2026-10-24-PR#143-codex-hardening.md:82
- **hint** model recommends changes before merge
### Findings
1. **[medium] Missing Diagrams** at `docs/prs/2026-10-24-PR#143-codex-hardening.md:82`
hint; Jev: real 0.85, severity 2.3 of 3
Adding the tested-hardening exemption changes a review decision, but this line states that no diagram update is needed. `AGENTS.md` requires the diagrams under `docs/` to be updated whenever a PR changes the steps or decisions of a review. Update the affected review-flow diagram(s) to show when human approval is bypassed; otherwise the shipped diagrams do not document this security-gate branch and can mislead maintainers about when a human must review.
### Classifier
7 of 7 units passed all questions (1 PR document(s)).
4 answers ignored because of a confidence below [classifier] min_confidence.
<sub>
Usage: model `openrouter/minimax/minimax-m3`, LLM done, tokens counted before the call 62999, calls 1, tokens in 60520 / out 36389 (reasoning included in out), duration 370.5 s, cost 0.0618 USD (reported), classifier `jev-1.14.0` calls 7, tokens in 5899, cost 0.0002 USD, finding judge `jev-1.14.0` calls 1, tokens in 1458, cost 0.0001 USD, PR document check `jev-1.14.0` calls 13, tokens in 34446, cost 0.0014 USD, build file judge `jev-1.14.0` calls 11, tokens in 10005, cost 0.0004 USD, phases: path_judge 0.5 s, classifier 0.3 s, doc_check 0.6 s, context 0.5 s, model_review 367.7 s, finding_judge 0.2 s, config: defaults + host + repository (.werkrevisor.toml at main 113f634).<br>
Reviewed head `225368df8afa330b943f56bf47b5640feab093f6` against base `113f6342e6bb78d936f864a6f49e3dc33eaf9971`, werkrevisor 0.69.0.
</sub>
werkrevisor: GREEN / PASS for 225368df8afa330b943f56bf47b5640feab093f6.
The result comment of werkrevisor holds the details.
werkrevisor: GREEN / PASS for `225368df8afa330b943f56bf47b5640feab093f6`.
The result comment of werkrevisor holds the details.
<!-- werkrevisor-review:225368df8afa330b943f56bf47b5640feab093f6 -->
ai-reviewer
scheduled this pull request to auto merge when all checks succeed 2026-10-24 22:29:28 +02:00
This change relaxes the merge gate by allowing some PRs classified as critical to merge without human approval. An incorrect model classification could bypass security review, and the tests verify gate logic rather than classification accuracy.
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 242502 (cached 205184) / out 1622, 41.8 s, 13 commands; reviewed head `225368df8afa330b943f56bf47b5640feab093f6`.
<!-- werkrevisor-codex:225368df8afa330b943f56bf47b5640feab093f6 -->
<!-- werkrevisor-codex-critical:true -->
<!-- werkrevisor-codex-unattached:0 -->
<!-- werkrevisor-codex -->
## Codex review: critical
This change relaxes the merge gate by allowing some PRs classified as critical to merge without human approval. An incorrect model classification could bypass security review, and the tests verify gate logic rather than classification accuracy.
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 242502 (cached 205184) / out 1622, 41.8 s, 13 commands; reviewed head `225368df8afa330b943f56bf47b5640feab093f6`.
</sub>
[medium] Missing Diagrams: does not hold, no change.
The diagrams show no decision of the Codex review. docs/werkrevisor-pr-workflow.svg shows it as one box: "Codex review after werkrevisor, optional; per repository; in gate mode it holds the merge". review_decisions.py and review_inside.py draw only the review of werkrevisor; neither names Codex.
When Codex needs a human stays inside that box, as before this PR.
Codex: critical. Correct: this PR changes when the Codex gate needs a human, so it waits for the approval of the human.
Answer to the review of `225368d`:
- **[medium] Missing Diagrams:** does not hold, no change.
The diagrams show no decision of the Codex review.
`docs/werkrevisor-pr-workflow.svg` shows it as one box: "Codex review after werkrevisor, optional; per repository; in gate mode it holds the merge".
`review_decisions.py` and `review_inside.py` draw only the review of werkrevisor; neither names Codex.
When Codex needs a human stays inside that box, as before this PR.
- **Codex: critical.** Correct: this PR changes when the Codex gate needs a human, so it waits for the approval of the human.
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.
The Codex review rates a PR as not critical when it only hardens the security, fails closed and has a test of the closed case.
See
docs/prs/for the details.🤖 Generated with Claude Code
WIP: werkrevisor 0.70.0: a security fix that only hardens needs no human review by Codexto WIP: werkrevisor 0.71.0: a security fix that only hardens needs no human review by Codex930a63470eto2aaac100ad🟢 werkrevisor GREEN for
2aaac10, superseded by the result for225368d🟢 werkrevisor: GREEN / PASS
Gate: approved by werkrevisor; merge waits for 3 open hint(s): reply to each line comment and resolve it, then restart the review or push a commit.
Change kind:
mixed.Reasons
Findings
[high] Weakened coverage at
tests/test_codex.py:50-57, hint, as a line comment[low] Misleading rating at
docs/prs/2026-10-24-PR#143-codex-hardening.md:73, 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 62346, calls 1, tokens in 59895 / out 50708 (reasoning included in out), duration 451.0 s, cost 0.0788 USD (reported), classifier `jev-1.14.0` calls 7, tokens in 5850, cost 0.0002 USD, finding judge `jev-1.14.0` calls 1, tokens in 2073, cost 0.0001 USD, PR document check `jev-1.14.0` calls 13, tokens in 33514, cost 0.0014 USD, build file judge `jev-1.14.0` calls 11, tokens in 9711, cost 0.0004 USD, phases: path_judge 0.6 s, classifier 0.3 s, doc_check 0.6 s, context 0.4 s, model_review 448.5 s, finding_judge 0.2 s, config: defaults + host + repository (.werkrevisor.toml at main3 answers ignored because of a confidence below [classifier] min_confidence.
113f634).Reviewed head `2aaac100ad70a2546266a52d05c4eb5c80997bd5` against base `113f6342e6bb78d936f864a6f49e3dc33eaf9971`, werkrevisor 0.69.0.
werkrevisor: GREEN / PASS for
2aaac100ad70a2546266a52d05c4eb5c80997bd5.The result comment of werkrevisor holds the details.
@@ -1041,5 +1041,5 @@`statistics/` holds a Kotlin Spring Boot service that collects the usage records of all runsand shows them in a dashboard: costs for 24 hours, 7 and 30 days, per day, week and month,reviews, pull requests and costs per pull request.Per day, week and month, a trend chart shows the cost, the number of pull requests and the cost per pull request,Writing rule: paragraph with 6 sentences, more than 5 (werkrevisor writing rule)
Fix the line, or reply why it stays, and resolve this comment.
Fixed in
225368d: the paragraph is split before the security effect.@@ -0,0 +70,4 @@- `werkrevisor/codexrunner.py`: the result comment rates the PR by `codex.rating`and names the three answers in a line of its own.The marker `werkrevisor-codex-critical` holds `needs_human`, so the result comments of before keep their meaning.- `werkrevisor/reviewreport.py` and `tools/codex-eval`: the same rating and the security effect.[low] Misleading rating (werkrevisor)
hint
The Solution says
tools/codex-evaluses the same rating as the gate, but the tool prints the rawcriticalfield. A critical tested hardening is therefore shown ascritical True, whilecodex.rating()and the gate call itnot critical: a tested hardening that fails closed. An operator evaluating the tool could reach the opposite conclusion. Print the derived rating and exemption flags, or state that the tool intentionally reports raw criticality.Fixed in
225368d:tools/codex-evalprints the rawcritical, the security effect and the rating of the gate.@@ -48,3 +48,3 @@def test_only_a_complete_answer_counts_as_a_review(self):finding = {"severity": "high", "file": "a.py", "line": 3, "title": "t", "explanation": "e"}self.assertTrue(codex_eval.valid_answer({"critical": False, "critical_reason": "", "findings": [finding]}))self.assertTrue(codex_eval.valid_answer({"critical": False, "critical_reason": "", "security_effect": "none", "fails_closed": False, "hardening_tested": False, "findings": [finding]}))[high] Weakened coverage (werkrevisor)
hint; Jev: real 0.79, severity 2.1 of 3
The new required fields are supplied only for the malformed
line,title, andexplanationfixtures. The other legacy malformed fixtures still omit them, sovalid_answerrejects them for the missing fields before the old checks are exercised. Removing validation forcritical,critical_reason,findings, orseveritywould therefore leave this test green, although the runner relies on this manual validator. Keep each legacy fixture complete except for the field under test.Fixed in
225368d: each broken answer is the complete answer with only the field under test changed or removed; it now also covers a missingcritical,critical_reasonandfindings. Without thecritical_reasoncheck the test fails.Codex review: critical
This change weakens the CI merge gate by allowing security-sensitive PRs to bypass human approval based on the model’s hardening assessment. Tests verify the decision logic but cannot establish that the model will classify real security changes correctly.
No findings.
The merge waits for the status
Model `gpt-6-astra`, effort high, tokens in 326320 (cached 281600) / out 2081, 47.4 s, 9 commands; reviewed head `2aaac100ad70a2546266a52d05c4eb5c80997bd5`.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 / PASS
Change kind:
mixed.Reasons
2aaac10not carried over: 6 approved block(s) are missingFindings
[medium] Missing Diagrams at
docs/prs/2026-10-24-PR#143-codex-hardening.md:82hint; Jev: real 0.85, severity 2.3 of 3
Adding the tested-hardening exemption changes a review decision, but this line states that no diagram update is needed.
AGENTS.mdrequires the diagrams underdocs/to be updated whenever a PR changes the steps or decisions of a review. Update the affected review-flow diagram(s) to show when human approval is bypassed; otherwise the shipped diagrams do not document this security-gate branch and can mislead maintainers about when a human must review.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 62999, calls 1, tokens in 60520 / out 36389 (reasoning included in out), duration 370.5 s, cost 0.0618 USD (reported), classifier `jev-1.14.0` calls 7, tokens in 5899, cost 0.0002 USD, finding judge `jev-1.14.0` calls 1, tokens in 1458, cost 0.0001 USD, PR document check `jev-1.14.0` calls 13, tokens in 34446, cost 0.0014 USD, build file judge `jev-1.14.0` calls 11, tokens in 10005, cost 0.0004 USD, phases: path_judge 0.5 s, classifier 0.3 s, doc_check 0.6 s, context 0.5 s, model_review 367.7 s, finding_judge 0.2 s, config: defaults + host + repository (.werkrevisor.toml at main4 answers ignored because of a confidence below [classifier] min_confidence.
113f634).Reviewed head `225368df8afa330b943f56bf47b5640feab093f6` against base `113f6342e6bb78d936f864a6f49e3dc33eaf9971`, werkrevisor 0.69.0.
werkrevisor: GREEN / PASS for
225368df8afa330b943f56bf47b5640feab093f6.The result comment of werkrevisor holds the details.
Codex review: critical
This change relaxes the merge gate by allowing some PRs classified as critical to merge without human approval. An incorrect model classification could bypass security review, and the tests verify gate logic rather than classification accuracy.
No findings.
The merge waits for the status
Model `gpt-6-astra`, effort high, tokens in 242502 (cached 205184) / out 1622, 41.8 s, 13 commands; reviewed head `225368df8afa330b943f56bf47b5640feab093f6`.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.Answer to the review of
225368d:The diagrams show no decision of the Codex review.
docs/werkrevisor-pr-workflow.svgshows it as one box: "Codex review after werkrevisor, optional; per repository; in gate mode it holds the merge".review_decisions.pyandreview_inside.pydraw only the review of werkrevisor; neither names Codex.When Codex needs a human stays inside that box, as before this PR.