See [the PR document](docs/prs/2026-10-18-PR%23124-release-host-config.md).
🤖 Generated with [Claude Code](https://claude.com/claude-code)
claude-code
changed title from WIP: werkrevisor 0.53.0: the release brings the host configs in line to WIP: werkrevisor 0.55.0: the release brings the host configs in line2026-10-20 12:43:12 +02:00
Gate: no human review requested; merge conflict with main: the author rebases the branch onto main and pushes.
Change kind: mixed.
Reasons
YELLOW PR too large for an AI-only approval: 1124 changed lines (docs and mechanical files not counted) exceed [size] max_changed_lines = 800; please review it yourself
YELLOW risky build changes according to Jev: tools/release_rootfs.py (weakens checks 0.06, risk 1.91, security 0.47)
10 of 11 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 62324, calls 1, tokens in 59821 / out 29306 (reasoning included in out), duration 389.9 s, cost 0.0531 USD (reported), classifier `jev-1.13.0` calls 11, tokens in 9108, cost 0.0004 USD, PR document check `jev-1.13.0` calls 13, tokens in 53734, cost 0.0023 USD, build file judge `jev-1.13.0` calls 10, tokens in 20725, cost 0.0009 USD, phases: path_judge 0.7 s, classifier 0.7 s, doc_check 0.9 s, context 0.3 s, model_review 386.8 s, config: defaults + host + repository (.werkrevisor.toml at main 89110d6).
Reviewed head `6e4a5d6b298434db859fac16c88a88065c87b3a1` against base `89110d60074e46174030a3e1d4312755bd33e52f`, werkrevisor 0.54.0.
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:6e4a5d6b298434db859fac16c88a88065c87b3a1 -->
<!-- werkrevisor-verdict:YELLOW -->
<!-- werkrevisor-blocks:305669e36760c7a83807f6b58d534d31,832793ff5fc52ffc21487b4dd4206fd5,aacf660d900f1cf6c00c8ce867620c83,f5c2e906baf3844d72d0ef8a718ba658,7a144cca8e6c546396200643ffc251b5,805a1893340fd6a3093c54434560e3f4,d0fc31fa2137648fd8f500a7b87ab2d6,998a5d6c81f2a11112bba28500d2d778,18708c73a07c545f068edb8982086c85,c2753e39cf9e52586b992d6b1ede8371,7672a3e97f2a607e22c0d99b4036e226,39bc6b2ea009980ab6cf719121132edc,cd625670e87f96ac9089e9288704d4d2,3e65a187fe63056c0142a6aaad3da076,d35cf66066225cc0914388be53306ec7,a63e3eadc7708005e889ed8914dc6c2a,4aa6b1ec2c296076566027912899ee65,245b41c6771d2b8c548d2a69cb556f11,95e06f7d9a3dc6f993dac0ca8f7e922b,654ca54a98f177ae2dcbf3eaca7bc677,a24e58bd7fc64adb2fdbdf234b536d1e,847cb22f00f3ffa2bb76025f37894cfc,9a4787032c948e1c54c2c2c5882ef5c6,f0d37a9203eb48b19012587c1f8e6668,e799230b5542b7e6ebc89a9163cfc9ad,6af212e1c8aa18f261de96e964a06d58,349c550378378755ef0a29cbf18ed61b,94a5af5be0b3eb52cb0417bafc81ed55,1ee3e6fce1b5fd80ebb14c150ed0375e,83b2ef635872e8f130c23dd6c6f8e0a3,9b5d1e3a2dedc4c51cd0edf1b20561b3,19aa140f95ece614b14d6c4f435c3e04,9271d2a48791d1288ca062db82a86374,552072a910d7f69050b5d8e413aa31a2,5c8355d2bb7cbe1f3c8da4f0619433d0,6cdd88b379a26b7ef195a85dba59f876,8fa27bc89abe5c57c925fba8f1028a5c,3e8dcb5f80581033a88f5713f0879b66,1c01e307b2c31454f77b0ef5972d8f91 -->
<!-- werkrevisor:diagrams -->
<!-- werkrevisor-folded -->
<details><summary>🟡 werkrevisor YELLOW for <code>6e4a5d6</code>, superseded by <a href="http://git.javagil.de/mi/werkrevisor/pulls/124#issuecomment-6717">the result for <code>ca34c31</code></a></summary>
## 🟡 werkrevisor: YELLOW / HUMAN_REVIEW
Gate: no human review requested; merge conflict with main: the author rebases the branch onto main and pushes.
Change kind: `mixed`.
### Reasons
- **YELLOW** PR too large for an AI-only approval: 1124 changed lines (docs and mechanical files not counted) exceed [size] max_changed_lines = 800; please review it yourself
- **YELLOW** risky build changes according to Jev: tools/release_rootfs.py (weakens checks 0.06, risk 1.91, security 0.47)
- **YELLOW** spec: docs/prs/2026-10-18-PR#124-release-host-config.md Scenario#124.01 hard_to_read (0.51 > yellow_above = 0.5)
- **hint** 8 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** 13 changed file(s) agree with the PR document according to Jev
### Classifier
| Unit | Question | Problem | Confidence | Verdict |
|---|---|---|---|---|
| docs/prs/2026-10-18-PR#124-release-host-config.md Scenario#124.01 | hard_to_read | 0.51 | 0.50 | YELLOW |
10 of 11 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 62324, calls 1, tokens in 59821 / out 29306 (reasoning included in out), duration 389.9 s, cost 0.0531 USD (reported), classifier `jev-1.13.0` calls 11, tokens in 9108, cost 0.0004 USD, PR document check `jev-1.13.0` calls 13, tokens in 53734, cost 0.0023 USD, build file judge `jev-1.13.0` calls 10, tokens in 20725, cost 0.0009 USD, phases: path_judge 0.7 s, classifier 0.7 s, doc_check 0.9 s, context 0.3 s, model_review 386.8 s, config: defaults + host + repository (.werkrevisor.toml at main 89110d6).<br>
Reviewed head `6e4a5d6b298434db859fac16c88a88065c87b3a1` against base `89110d60074e46174030a3e1d4312755bd33e52f`, werkrevisor 0.54.0.
</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>
[medium] Revalidate host settings before replacing the block (Codex review)
Host blocks are validated before archive assembly, but install() subsequently rereads each machine config and replaces its block using the earlier result without checking for intervening changes. If an operator changes a known setting, such as model.id, during assembly, installation silently overwrites that setting instead of refusing the release. This was reproduced in memory by changing model.id between validation and installation.
Fix it, or reply why it does not hold, and resolve this comment.
**[medium] Revalidate host settings before replacing the block** (Codex review)
Host blocks are validated before archive assembly, but install() subsequently rereads each machine config and replaces its block using the earlier result without checking for intervening changes. If an operator changes a known setting, such as model.id, during assembly, installation silently overwrites that setting instead of refusing the release. This was reproduced in memory by changing model.id between validation and installation.
Fix it, or reply why it does not hold, and resolve this comment.
<!-- werkrevisor-codex -->
Fixed in 37517ce: install compares each host block with the checked one before it writes any machine config, and again at its write; a changed block stops the install with "the host block changed since the check". Test: test_a_host_block_changed_after_the_check_stops_the_install, red without the fix.
Fixed in `37517ce`: `install` compares each host block with the checked one before it writes any machine config, and again at its write; a changed block stops the install with "the host block changed since the check". Test: `test_a_host_block_changed_after_the_check_stops_the_install`, red without the fix.
The release now automatically rewrites production host configurations that control review and merge gates across repositories. A mistake could weaken those gates or overwrite operator settings in ways the fixture-based tests would not reveal.
Findings
[medium] Revalidate host settings before replacing the block at tools/release_rootfs.py:321, 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 532429 (cached 457984) / out 2975, 110.2 s, 16 commands; reviewed head `6e4a5d6b298434db859fac16c88a88065c87b3a1`.
<!-- werkrevisor-codex:6e4a5d6b298434db859fac16c88a88065c87b3a1 -->
<!-- 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/124#issuecomment-6717">the result for <code>ca34c31</code></a></summary>
## Codex review: critical
The release now automatically rewrites production host configurations that control review and merge gates across repositories. A mistake could weaken those gates or overwrite operator settings in ways the fixture-based tests would not reveal.
### Findings
1. **[medium] Revalidate host settings before replacing the block** at `tools/release_rootfs.py:321`, 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 532429 (cached 457984) / out 2975, 110.2 s, 16 commands; reviewed head `6e4a5d6b298434db859fac16c88a88065c87b3a1`.
</sub>
</details>
It refuses before any write when a host block holds a setting that the new parser accepts
and the file would lose, or when a host config cannot be checked.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The release would otherwise add their rules to the host blocks on mih09,
and the appended extra_instructions of the .werkrevisor.toml would stand twice in the prompt.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Fixes the Codex finding: an operator change during the assembly was overwritten.
Scenario#124.01 reads in shorter steps.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Merge conflict: rebased onto main 0.54.1; the version stays 0.55.0.
Scenario#124.01 hard_to_read: rewritten in shorter steps.
Codex finding 6536: fixed in 37517ce, thread answered and resolved.
Size and the risk of tools/release_rootfs.py: structural; they are for the human.
About 300 of the changed lines are the two copies of .werkrevisor.toml in tests/fixtures/.
Answer to the review of `6e4a5d6`, now at `37517ce`:
- Merge conflict: rebased onto `main` 0.54.1; the version stays 0.55.0.
- Scenario#124.01 hard_to_read: rewritten in shorter steps.
- Codex finding 6536: fixed in `37517ce`, thread answered and resolved.
- Size and the risk of `tools/release_rootfs.py`: structural; they are for the human.
About 300 of the changed lines are the two copies of `.werkrevisor.toml` in `tests/fixtures/`.
YELLOW PR too large for an AI-only approval: 1616 changed lines (docs and mechanical files not counted) exceed [size] max_changed_lines = 800; please review it yourself
YELLOW risky build changes according to Jev: tools/release_rootfs.py (weakens checks 0.06, risk 1.91, security 0.42)
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.01)
hint 15 changed file(s) agree with the PR document according to Jev
hint the model review failed: TimeoutError: review exceeded 720 seconds (advisory: Jev judged every changed file)
Classifier
11 of 11 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 failed (TimeoutError), tokens counted before the call 75543, duration 736.0 s, cost unknown, classifier `jev-1.13.0` calls 11, tokens in 9268, cost 0.0004 USD, PR document check `jev-1.13.0` calls 15, tokens in 68307, cost 0.0029 USD, build file judge `jev-1.13.0` calls 12, tokens in 27895, cost 0.0012 USD, phases: path_judge 0.7 s, classifier 0.7 s, doc_check 1.0 s, context 0.9 s, model_review 723.1 s, config: defaults + host + repository (.werkrevisor.toml at main 88772c4).
Reviewed head `ca34c31d43d7435d7fae20138fed689b03f56eca` 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:ca34c31d43d7435d7fae20138fed689b03f56eca -->
<!-- werkrevisor-verdict:YELLOW -->
<!-- werkrevisor-blocks:305669e36760c7a83807f6b58d534d31,832793ff5fc52ffc21487b4dd4206fd5,aacf660d900f1cf6c00c8ce867620c83,f5c2e906baf3844d72d0ef8a718ba658,7a144cca8e6c546396200643ffc251b5,805a1893340fd6a3093c54434560e3f4,d0fc31fa2137648fd8f500a7b87ab2d6,998a5d6c81f2a11112bba28500d2d778,18708c73a07c545f068edb8982086c85,c16b4399735e56ef61d9a3ef44caae7a,34bf6845bb99027ed915ca5943b8807d,5b303e84151f304c18276ec085454eab,7672a3e97f2a607e22c0d99b4036e226,0a54ca71bf2fbafc42c5333c7508a359,cd625670e87f96ac9089e9288704d4d2,925a82311f6382510f669d77c1841aa7,3578c51131abc59e3f322164c6065b85,a63e3eadc7708005e889ed8914dc6c2a,4aa6b1ec2c296076566027912899ee65,245b41c6771d2b8c548d2a69cb556f11,95e06f7d9a3dc6f993dac0ca8f7e922b,adb276dc67e67b4f6fd9c04d5ef0a2f8,654ca54a98f177ae2dcbf3eaca7bc677,a24e58bd7fc64adb2fdbdf234b536d1e,847cb22f00f3ffa2bb76025f37894cfc,9a4787032c948e1c54c2c2c5882ef5c6,83bf2b3b333be723ae5a8df398fed8f7,e799230b5542b7e6ebc89a9163cfc9ad,6af212e1c8aa18f261de96e964a06d58,349c550378378755ef0a29cbf18ed61b,94a5af5be0b3eb52cb0417bafc81ed55,7bc5a73ef9a7804c6a09a7344d7e373c,83b2ef635872e8f130c23dd6c6f8e0a3,9b5d1e3a2dedc4c51cd0edf1b20561b3,19aa140f95ece614b14d6c4f435c3e04,fe1dd69acb1e263a990eee626e81ba9b,0e605b24c408e597c412868fd9ba4d8d,5e106c8ef5f51b59679adc58ef70eb3c,69dad5e9d5de65e7664b8b6e39d926f7,6cdd88b379a26b7ef195a85dba59f876,8fa27bc89abe5c57c925fba8f1028a5c,3e8dcb5f80581033a88f5713f0879b66,c5e9debc0c184512bae99b6321221a04 -->
<!-- werkrevisor:diagrams -->
<!-- werkrevisor-folded -->
<details><summary>🟡 werkrevisor YELLOW for <code>ca34c31</code>, superseded by <a href="http://git.javagil.de/mi/werkrevisor/pulls/124#issuecomment-6868">the result for <code>04fc1ce</code></a></summary>
## 🟡 werkrevisor: YELLOW / HUMAN_REVIEW
Change kind: `mixed`.
### Reasons
- **YELLOW** PR too large for an AI-only approval: 1616 changed lines (docs and mechanical files not counted) exceed [size] max_changed_lines = 800; please review it yourself
- **YELLOW** risky build changes according to Jev: tools/release_rootfs.py (weakens checks 0.06, risk 1.91, security 0.42)
- **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.01)
- **hint** 15 changed file(s) agree with the PR document according to Jev
- **hint** the model review failed: TimeoutError: review exceeded 720 seconds (advisory: Jev judged every changed file)
### Classifier
11 of 11 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 failed (TimeoutError), tokens counted before the call 75543, duration 736.0 s, cost unknown, classifier `jev-1.13.0` calls 11, tokens in 9268, cost 0.0004 USD, PR document check `jev-1.13.0` calls 15, tokens in 68307, cost 0.0029 USD, build file judge `jev-1.13.0` calls 12, tokens in 27895, cost 0.0012 USD, phases: path_judge 0.7 s, classifier 0.7 s, doc_check 1.0 s, context 0.9 s, model_review 723.1 s, config: defaults + host + repository (.werkrevisor.toml at main 88772c4).<br>
Reviewed head `ca34c31d43d7435d7fae20138fed689b03f56eca` 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>
[medium] Retain snapshots of initially matching host blocks (Codex review)
Returning None when the block matches excludes it from both install-time checks. If an operator changes that block while the archive is assembled, install switches the archive without validating the changed configuration. An in-memory reproduction confirmed that adding the removed doc_check.model setting after preflight succeeds through install, leaving a configuration the new parser rejects. Keep snapshots for every checked block, including those requiring no replacement.
Fix it, or reply why it does not hold, and resolve this comment.
**[medium] Retain snapshots of initially matching host blocks** (Codex review)
Returning None when the block matches excludes it from both install-time checks. If an operator changes that block while the archive is assembled, install switches the archive without validating the changed configuration. An in-memory reproduction confirmed that adding the removed doc_check.model setting after preflight succeeds through install, leaving a configuration the new parser rejects. Keep snapshots for every checked block, including those requiring no replacement.
Fix it, or reply why it does not hold, and resolve this comment.
<!-- werkrevisor-codex -->
Fixed in 04fc1ce: host_config_blocks keeps the checked snapshot of every block, also an equal one, and install compares each of them before any write. Test: test_an_equal_host_block_changed_after_the_check_stops_the_install, red without the fix.
Fixed in `04fc1ce`: `host_config_blocks` keeps the checked snapshot of every block, also an equal one, and `install` compares each of them before any write. Test: `test_an_equal_host_block_changed_after_the_check_stops_the_install`, red without the fix.
The release now automatically replaces production host configurations that control review and merge gates across repositories. A mistake could weaken those gates, and tests using copied repository configurations cannot establish the actual production effect.
Findings
[medium] Retain snapshots of initially matching host blocks at tools/release_rootfs.py:108, 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 477322 (cached 407168) / out 3288, 120.7 s, 17 commands; reviewed head `ca34c31d43d7435d7fae20138fed689b03f56eca`.
<!-- werkrevisor-codex:ca34c31d43d7435d7fae20138fed689b03f56eca -->
<!-- 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/124#issuecomment-6868">the result for <code>04fc1ce</code></a></summary>
## Codex review: critical
The release now automatically replaces production host configurations that control review and merge gates across repositories. A mistake could weaken those gates, and tests using copied repository configurations cannot establish the actual production effect.
### Findings
1. **[medium] Retain snapshots of initially matching host blocks** at `tools/release_rootfs.py:108`, 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 477322 (cached 407168) / out 3288, 120.7 s, 17 commands; reviewed head `ca34c31d43d7435d7fae20138fed689b03f56eca`.
</sub>
</details>
Codex finding 6722: fixed in 04fc1ce, thread answered and resolved.
Size and the risk of tools/release_rootfs.py: structural; they are for the human.
The model review timed out after 720 s; it was advisory, Jev judged every changed file.
Answer to the review of `ca34c31`, now at `04fc1ce`:
- Codex finding 6722: fixed in `04fc1ce`, thread answered and resolved.
- Size and the risk of `tools/release_rootfs.py`: structural; they are for the human.
- The model review timed out after 720 s; it was advisory, Jev judged every changed file.
YELLOW PR too large for an AI-only approval: 1632 changed lines (docs and mechanical files not counted) exceed [size] max_changed_lines = 800; please review it yourself
YELLOW risky build changes according to Jev: tools/release_rootfs.py (weakens checks 0.06, risk 1.92, security 0.36)
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.01)
hint 15 changed file(s) agree with the PR document according to Jev
Classifier
11 of 11 units passed all questions (1 PR document(s)).
5 answers ignored because of a confidence below [classifier] min_confidence.
Usage: model `openrouter/minimax/minimax-m3`, LLM done, tokens counted before the call 76175, calls 1, tokens in 73086 / out 23913 (reasoning included in out), duration 287.4 s, cost 0.0506 USD (reported), classifier `jev-1.13.0` calls 11, tokens in 9275, cost 0.0004 USD, PR document check `jev-1.13.0` calls 15, tokens in 69234, cost 0.0029 USD, build file judge `jev-1.13.0` calls 12, tokens in 28147, cost 0.0012 USD, phases: path_judge 0.8 s, classifier 0.7 s, doc_check 1.0 s, context 0.6 s, model_review 283.7 s, config: defaults + host + repository (.werkrevisor.toml at main 88772c4).
Reviewed head `04fc1cea6d605c8935079a9739ffb1391c65130e` 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:04fc1cea6d605c8935079a9739ffb1391c65130e -->
<!-- werkrevisor-verdict:YELLOW -->
<!-- werkrevisor-blocks:305669e36760c7a83807f6b58d534d31,832793ff5fc52ffc21487b4dd4206fd5,aacf660d900f1cf6c00c8ce867620c83,f5c2e906baf3844d72d0ef8a718ba658,7a144cca8e6c546396200643ffc251b5,805a1893340fd6a3093c54434560e3f4,d0fc31fa2137648fd8f500a7b87ab2d6,998a5d6c81f2a11112bba28500d2d778,18708c73a07c545f068edb8982086c85,c16b4399735e56ef61d9a3ef44caae7a,34bf6845bb99027ed915ca5943b8807d,5b303e84151f304c18276ec085454eab,7672a3e97f2a607e22c0d99b4036e226,7d70b27fe302046796873b016befcdf8,cd625670e87f96ac9089e9288704d4d2,925a82311f6382510f669d77c1841aa7,3578c51131abc59e3f322164c6065b85,a63e3eadc7708005e889ed8914dc6c2a,4aa6b1ec2c296076566027912899ee65,245b41c6771d2b8c548d2a69cb556f11,95e06f7d9a3dc6f993dac0ca8f7e922b,adb276dc67e67b4f6fd9c04d5ef0a2f8,654ca54a98f177ae2dcbf3eaca7bc677,a24e58bd7fc64adb2fdbdf234b536d1e,847cb22f00f3ffa2bb76025f37894cfc,9a4787032c948e1c54c2c2c5882ef5c6,83bf2b3b333be723ae5a8df398fed8f7,e799230b5542b7e6ebc89a9163cfc9ad,6af212e1c8aa18f261de96e964a06d58,349c550378378755ef0a29cbf18ed61b,94a5af5be0b3eb52cb0417bafc81ed55,cfd2e1a07dfcc80c8a4b36c9cd53f953,83b2ef635872e8f130c23dd6c6f8e0a3,9b5d1e3a2dedc4c51cd0edf1b20561b3,19aa140f95ece614b14d6c4f435c3e04,0535496cfc3ca61664737a3df7f8ec30,0e605b24c408e597c412868fd9ba4d8d,5e106c8ef5f51b59679adc58ef70eb3c,69dad5e9d5de65e7664b8b6e39d926f7,6cdd88b379a26b7ef195a85dba59f876,8fa27bc89abe5c57c925fba8f1028a5c,3e8dcb5f80581033a88f5713f0879b66,c5e9debc0c184512bae99b6321221a04 -->
## 🟡 werkrevisor: YELLOW / HUMAN_REVIEW
Change kind: `mixed`.
### Reasons
- **YELLOW** PR too large for an AI-only approval: 1632 changed lines (docs and mechanical files not counted) exceed [size] max_changed_lines = 800; please review it yourself
- **YELLOW** risky build changes according to Jev: tools/release_rootfs.py (weakens checks 0.06, risk 1.92, security 0.36)
- **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.01)
- **hint** 15 changed file(s) agree with the PR document according to Jev
### Classifier
11 of 11 units passed all questions (1 PR document(s)).
5 answers ignored because of a confidence below [classifier] min_confidence.
<sub>
Usage: model `openrouter/minimax/minimax-m3`, LLM done, tokens counted before the call 76175, calls 1, tokens in 73086 / out 23913 (reasoning included in out), duration 287.4 s, cost 0.0506 USD (reported), classifier `jev-1.13.0` calls 11, tokens in 9275, cost 0.0004 USD, PR document check `jev-1.13.0` calls 15, tokens in 69234, cost 0.0029 USD, build file judge `jev-1.13.0` calls 12, tokens in 28147, cost 0.0012 USD, phases: path_judge 0.8 s, classifier 0.7 s, doc_check 1.0 s, context 0.6 s, model_review 283.7 s, config: defaults + host + repository (.werkrevisor.toml at main 88772c4).<br>
Reviewed head `04fc1cea6d605c8935079a9739ffb1391c65130e` against base `88772c494abe8d265952e10c082327a0785451c2`, werkrevisor 0.54.1.
</sub>
<!-- werkrevisor:diagrams -->
### 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.


The release now automatically rewrites live host configurations that control review and merge gates across repositories. A mistake could weaken those gates in ways the fixture-based tests would not reveal, so human review is required.
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 530454 (cached 458240) / out 2750, 99.0 s, 12 commands; reviewed head `04fc1cea6d605c8935079a9739ffb1391c65130e`.
<!-- werkrevisor-codex:04fc1cea6d605c8935079a9739ffb1391c65130e -->
<!-- werkrevisor-codex-critical:true -->
<!-- werkrevisor-codex-unattached:0 -->
<!-- werkrevisor-codex -->
## Codex review: critical
The release now automatically rewrites live host configurations that control review and merge gates across repositories. A mistake could weaken those gates in ways the fixture-based tests would not reveal, so human review is required.
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 530454 (cached 458240) / out 2750, 99.0 s, 12 commands; reviewed head `04fc1cea6d605c8935079a9739ffb1391c65130e`.
</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.
🤖 Generated with Claude Code
WIP: werkrevisor 0.53.0: the release brings the host configs in lineto WIP: werkrevisor 0.55.0: the release brings the host configs in line94642a54e7tofd34793433🟡 werkrevisor YELLOW for
6e4a5d6, superseded by the result forca34c31🟡 werkrevisor: YELLOW / HUMAN_REVIEW
Gate: no human review requested; merge conflict with main: the author rebases the branch onto main and pushes.
Change kind:
mixed.Reasons
Classifier
10 of 11 units passed all questions (1 PR document(s)).
Usage: model `openrouter/minimax/minimax-m3`, LLM done, tokens counted before the call 62324, calls 1, tokens in 59821 / out 29306 (reasoning included in out), duration 389.9 s, cost 0.0531 USD (reported), classifier `jev-1.13.0` calls 11, tokens in 9108, cost 0.0004 USD, PR document check `jev-1.13.0` calls 13, tokens in 53734, cost 0.0023 USD, build file judge `jev-1.13.0` calls 10, tokens in 20725, cost 0.0009 USD, phases: path_judge 0.7 s, classifier 0.7 s, doc_check 0.9 s, context 0.3 s, model_review 386.8 s, config: defaults + host + repository (.werkrevisor.toml at main1 answer ignored because of a confidence below [classifier] min_confidence.
89110d6).Reviewed head `6e4a5d6b298434db859fac16c88a88065c87b3a1` against base `89110d60074e46174030a3e1d4312755bd33e52f`, werkrevisor 0.54.0.
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.
Codex review of
6e4a5d6b298434db859fac16c88a88065c87b3a1@@ -214,2 +318,4 @@with open(yml, encoding="utf-8") as f:text = ARCHIVE.sub(name, f.read())if blocks and repo in blocks:text = _replace_block(text, blocks[repo])[medium] Revalidate host settings before replacing the block (Codex review)
Host blocks are validated before archive assembly, but install() subsequently rereads each machine config and replaces its block using the earlier result without checking for intervening changes. If an operator changes a known setting, such as model.id, during assembly, installation silently overwrites that setting instead of refusing the release. This was reproduced in memory by changing model.id between validation and installation.
Fix it, or reply why it does not hold, and resolve this comment.
Fixed in
37517ce:installcompares each host block with the checked one before it writes any machine config, and again at its write; a changed block stops the install with "the host block changed since the check". Test:test_a_host_block_changed_after_the_check_stops_the_install, red without the fix.⚠️ werkrevisor ERROR for
?, superseded by the result forca34c31Codex review: critical
The release now automatically rewrites production host configurations that control review and merge gates across repositories. A mistake could weaken those gates or overwrite operator settings in ways the fixture-based tests would not reveal.
Findings
tools/release_rootfs.py:321, as a line commentThe merge waits for the status
Model `gpt-6-astra`, effort high, tokens in 532429 (cached 457984) / out 2975, 110.2 s, 16 commands; reviewed head `6e4a5d6b298434db859fac16c88a88065c87b3a1`.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.6e4a5d6b29to37517cef56Answer to the review of
6e4a5d6, now at37517ce:main0.54.1; the version stays 0.55.0.37517ce, thread answered and resolved.tools/release_rootfs.py: structural; they are for the human.About 300 of the changed lines are the two copies of
.werkrevisor.tomlintests/fixtures/.🟡 werkrevisor YELLOW for
ca34c31, superseded by the result for04fc1ce🟡 werkrevisor: YELLOW / HUMAN_REVIEW
Change kind:
mixed.Reasons
Classifier
11 of 11 units passed all questions (1 PR document(s)).
Usage: model `openrouter/minimax/minimax-m3`, LLM failed (TimeoutError), tokens counted before the call 75543, duration 736.0 s, cost unknown, classifier `jev-1.13.0` calls 11, tokens in 9268, cost 0.0004 USD, PR document check `jev-1.13.0` calls 15, tokens in 68307, cost 0.0029 USD, build file judge `jev-1.13.0` calls 12, tokens in 27895, cost 0.0012 USD, phases: path_judge 0.7 s, classifier 0.7 s, doc_check 1.0 s, context 0.9 s, model_review 723.1 s, config: defaults + host + repository (.werkrevisor.toml at main4 answers ignored because of a confidence below [classifier] min_confidence.
88772c4).Reviewed head `ca34c31d43d7435d7fae20138fed689b03f56eca` 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.
Codex review of
ca34c31d43d7435d7fae20138fed689b03f56eca@@ -47,0 +105,4 @@except blocktools.NoBlock as e:raise ReleaseError(str(e)) from Nonenew = content.rstrip("\n").split("\n")if old == new:[medium] Retain snapshots of initially matching host blocks (Codex review)
Returning None when the block matches excludes it from both install-time checks. If an operator changes that block while the archive is assembled, install switches the archive without validating the changed configuration. An in-memory reproduction confirmed that adding the removed doc_check.model setting after preflight succeeds through install, leaving a configuration the new parser rejects. Keep snapshots for every checked block, including those requiring no replacement.
Fix it, or reply why it does not hold, and resolve this comment.
Fixed in
04fc1ce:host_config_blockskeeps the checked snapshot of every block, also an equal one, andinstallcompares each of them before any write. Test:test_an_equal_host_block_changed_after_the_check_stops_the_install, red without the fix.⚠️ werkrevisor ERROR for
?, superseded by the result for04fc1ceCodex review: critical
The release now automatically replaces production host configurations that control review and merge gates across repositories. A mistake could weaken those gates, and tests using copied repository configurations cannot establish the actual production effect.
Findings
tools/release_rootfs.py:108, as a line commentThe merge waits for the status
Model `gpt-6-astra`, effort high, tokens in 477322 (cached 407168) / out 3288, 120.7 s, 17 commands; reviewed head `ca34c31d43d7435d7fae20138fed689b03f56eca`.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
ca34c31, now at04fc1ce:04fc1ce, thread answered and resolved.tools/release_rootfs.py: structural; they are for the human.🟡 werkrevisor: YELLOW / HUMAN_REVIEW
Change kind:
mixed.Reasons
Classifier
11 of 11 units passed all questions (1 PR document(s)).
Usage: model `openrouter/minimax/minimax-m3`, LLM done, tokens counted before the call 76175, calls 1, tokens in 73086 / out 23913 (reasoning included in out), duration 287.4 s, cost 0.0506 USD (reported), classifier `jev-1.13.0` calls 11, tokens in 9275, cost 0.0004 USD, PR document check `jev-1.13.0` calls 15, tokens in 69234, cost 0.0029 USD, build file judge `jev-1.13.0` calls 12, tokens in 28147, cost 0.0012 USD, phases: path_judge 0.8 s, classifier 0.7 s, doc_check 1.0 s, context 0.6 s, model_review 283.7 s, config: defaults + host + repository (.werkrevisor.toml at main5 answers ignored because of a confidence below [classifier] min_confidence.
88772c4).Reviewed head `04fc1cea6d605c8935079a9739ffb1391c65130e` 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.
Codex review: critical
The release now automatically rewrites live host configurations that control review and merge gates across repositories. A mistake could weaken those gates in ways the fixture-based tests would not reveal, so human review is required.
No findings.
The merge waits for the status
Model `gpt-6-astra`, effort high, tokens in 530454 (cached 458240) / out 2750, 99.0 s, 12 commands; reviewed head `04fc1cea6d605c8935079a9739ffb1391c65130e`.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.