werkrevisor 0.41.0: a tool compares and syncs the host configs on the Werkator host #101

Merged
ai-reviewer merged 8 commits from claude-code/sync-host-config into main 2026-10-13 11:18:42 +02:00
Collaborator

tools/sync-host-config compares the inline WERKREVISOR_CONFIG_TOML of each machine config with config/<repo>.toml and replaces it on request; it prints only line numbers.

See the PR document under docs/prs/.

🤖 Generated with Claude Code

`tools/sync-host-config` compares the inline `WERKREVISOR_CONFIG_TOML` of each machine config with `config/<repo>.toml` and replaces it on request; it prints only line numbers. See the PR document under `docs/prs/`. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
claude-code added 1 commit 2026-10-13 11:00:18 +02:00
PR document: a tool compares and syncs the host configs on the Werkator host
werkator build succeeded after 03:29
werkator/werkrevisor-statistics build succeeded after 01:30
0ea261e8ff
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
claude-code added 1 commit 2026-10-13 11:00:20 +02:00
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
claude-code added 1 commit 2026-10-13 11:01:43 +02:00
claude-code added 1 commit 2026-10-13 11:02:26 +02:00
claude-code added 1 commit 2026-10-13 11:02:53 +02:00
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
claude-code added 1 commit 2026-10-13 11:04:05 +02:00
werkrevisor 0.41.0: README, operations document, PR document, plan
werkator/werkrevisor-statistics build succeeded after 01:34
werkator build succeeded after 00:38
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
ai-review/gate build succeeded after 03:38
3e01765729
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
claude-code marked the pull request as ready for review 2026-10-13 11:08:05 +02:00
Collaborator
🟠 werkrevisor ORANGE for 3e01765, superseded by the result for f29d179

🟠 werkrevisor: ORANGE / FINDINGS

Change kind: mixed.

Reasons

  • ORANGE 1 finding(s) that Jev rates as probably real and severe: tools/host_config_block.py:16
  • hint 4 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 10 section(s) of the PR document agree with the change summary of openrouter/minimax/minimax-m3 according to Jev
  • hint 1 finding(s) of low severity or rated minor by Jev: tools/sync-host-config:1-51

Findings

  1. YAML chomping not supported at tools/host_config_block.py:16, severity unknown, counted as medium, ORANGE, as a line comment

  2. Shell script untested at tools/sync-host-config:1-51, severity unknown, counted as medium, hint, as a line comment

Classifier

10 of 10 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 16947, calls 1, tokens in 16343 / out 23109 (reasoning included in out), duration 212.1 s, cost 0.0326 USD (reported), classifier `jev-1.13.0` calls 10, tokens in 7792, cost 0.0003 USD, finding judge `jev-1.13.0` calls 2, tokens in 2603, cost 0.0001 USD, change summary `openrouter/minimax/minimax-m3` via Minimax calls 1, tokens in 5023 / out 1296, cost 0.0030 USD (reported), PR document check `jev-1.13.0` calls 10, tokens in 14592, cost 0.0006 USD, build file judge `jev-1.13.0` calls 5, tokens in 6078, cost 0.0003 USD, phases: path_judge 0.5 s, classifier 0.7 s, change_summary 11.4 s, doc_check 0.8 s, context 2.7 s, model_review 194.6 s, finding_judge 0.3 s, config: defaults + host + repository (.werkrevisor.toml at main 5d559f3).
Reviewed head `3e017657293604c96b4aba4d5fb7ef9fabebff8f` against base `5d559f3e655b9b49005a29f651a0f98f118cd49e`, werkrevisor 0.40.2.
<!-- werkrevisor:3e017657293604c96b4aba4d5fb7ef9fabebff8f --> <!-- werkrevisor-verdict:ORANGE --> <!-- werkrevisor-blocks:baa1d973f8344d3abd4b3d482388b548,63b6e8c890f48beb18f6da677e8cd991,a2310a538673063570c735a78883d654,b42b83c2d3bc6f6d5a6075d5e44ae74c,0e6dc1561a71b30417d1b353e3280106,3f55cf1b607ddf810d1f92a10b246bf2,7179ca1a1a1b2f40dbd85d02e7bd89e9,af943700a3ecd6d0c74beb69916ad31d,4dfe7f979cd6d0004b2d68dad83fcc9d,9123ecca9feff550c3bd6cbc7e39578f --> <!-- werkrevisor-folded --> <details><summary>🟠 werkrevisor ORANGE for <code>3e01765</code>, superseded by <a href="http://git.javagil.de/mi/werkrevisor/pulls/101#issuecomment-5084">the result for <code>f29d179</code></a></summary> ## 🟠 werkrevisor: ORANGE / FINDINGS Change kind: `mixed`. ### Reasons - **ORANGE** 1 finding(s) that Jev rates as probably real and severe: tools/host_config_block.py:16 - **hint** 4 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** 10 section(s) of the PR document agree with the change summary of openrouter/minimax/minimax-m3 according to Jev - **hint** 1 finding(s) of low severity or rated minor by Jev: tools/sync-host-config:1-51 ### Findings 1. **YAML chomping not supported** at `tools/host_config_block.py:16`, severity unknown, counted as medium, ORANGE, as a line comment 2. **Shell script untested** at `tools/sync-host-config:1-51`, severity unknown, counted as medium, hint, as a line comment ### Classifier 10 of 10 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 16947, calls 1, tokens in 16343 / out 23109 (reasoning included in out), duration 212.1 s, cost 0.0326 USD (reported), classifier `jev-1.13.0` calls 10, tokens in 7792, cost 0.0003 USD, finding judge `jev-1.13.0` calls 2, tokens in 2603, cost 0.0001 USD, change summary `openrouter/minimax/minimax-m3` via Minimax calls 1, tokens in 5023 / out 1296, cost 0.0030 USD (reported), PR document check `jev-1.13.0` calls 10, tokens in 14592, cost 0.0006 USD, build file judge `jev-1.13.0` calls 5, tokens in 6078, cost 0.0003 USD, phases: path_judge 0.5 s, classifier 0.7 s, change_summary 11.4 s, doc_check 0.8 s, context 2.7 s, model_review 194.6 s, finding_judge 0.3 s, config: defaults + host + repository (.werkrevisor.toml at main 5d559f3).<br> Reviewed head `3e017657293604c96b4aba4d5fb7ef9fabebff8f` against base `5d559f3e655b9b49005a29f651a0f98f118cd49e`, werkrevisor 0.40.2. </sub> </details>
ai-reviewer left a comment
Collaborator

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

werkrevisor: ORANGE / FINDINGS for `3e017657293604c96b4aba4d5fb7ef9fabebff8f`. The result comment of werkrevisor holds the details. <!-- werkrevisor-review:3e017657293604c96b4aba4d5fb7ef9fabebff8f -->
@@ -0,0 +13,4 @@
import sys
import tomllib
KEY = re.compile(r"^(\s*)WERKREVISOR_CONFIG_TOML: \|\s*$")
Collaborator

YAML chomping not supported, severity unknown, counted as medium (werkrevisor)

ORANGE; Jev: real 0.83, severity 2.7 of 3

The KEY regex r"^(\s*)WERKREVISOR_CONFIG_TOML: \|\s*$" only matches the basic | YAML block scalar. A machine config that uses |+ (keep final newline) or |- (strip final newline) would not be recognized, and the tool would report "no block" for it instead of comparing or replacing. The basic | is the form used in the tests, but a hand-edited machine config could use a chomping indicator and silently be skipped, leaving the host config out of sync with config/<repo>.toml.

**YAML chomping not supported**, severity unknown, counted as medium (werkrevisor) ORANGE; Jev: real 0.83, severity 2.7 of 3 The `KEY` regex `r"^(\s*)WERKREVISOR_CONFIG_TOML: \|\s*$"` only matches the basic `|` YAML block scalar. A machine config that uses `|+` (keep final newline) or `|-` (strip final newline) would not be recognized, and the tool would report "no block" for it instead of comparing or replacing. The basic `|` is the form used in the tests, but a hand-edited machine config could use a chomping indicator and silently be skipped, leaving the host config out of sync with `config/<repo>.toml`.
Author
Collaborator

Fixed in 3511098: the key also matches |- and |+; test test_a_block_with_a_chomping_indicator in f29d179. Before, such a block was not skipped silently: the tool reported "no block" with exit code 2.

Fixed in `3511098`: the key also matches `|-` and `|+`; test `test_a_block_with_a_chomping_indicator` in `f29d179`. Before, such a block was not skipped silently: the tool reported "no block" with exit code 2.
claude-code marked this conversation as resolved
@@ -0,0 +1,51 @@
#!/usr/bin/env bash
Collaborator

Shell script untested, severity unknown, counted as medium (werkrevisor)

hint; Jev: real 0.66, severity 2.2 of 3

The shell script tools/sync-host-config has no test coverage. The Python module host_config_block.py is well-tested, but the shell wrapper's flag parsing (--apply, --help), the requirement for at least one repo argument, the per-repo config/<repo>.toml existence check, and the retry-on-connection-refused loop are not exercised by the test suite. A regression in the shell wrapper (e.g., a broken flag check or a payload that no longer matches the Python module's expected JSON shape) would not be caught.

**Shell script untested**, severity unknown, counted as medium (werkrevisor) hint; Jev: real 0.66, severity 2.2 of 3 The shell script `tools/sync-host-config` has no test coverage. The Python module `host_config_block.py` is well-tested, but the shell wrapper's flag parsing (`--apply`, `--help`), the requirement for at least one repo argument, the per-repo `config/<repo>.toml` existence check, and the retry-on-connection-refused loop are not exercised by the test suite. A regression in the shell wrapper (e.g., a broken flag check or a payload that no longer matches the Python module's expected JSON shape) would not be caught.
Author
Collaborator

Fixed in f29d179: SyncHostConfigScriptTest runs the wrapper with a fake ssh on the PATH: check and apply over one connection each, a missing config/<repo>.toml without a connection, and the usage. The retry loop is the one of tools/deploy-rootfs; its waits of 30 s and more stay untested.

Fixed in `f29d179`: `SyncHostConfigScriptTest` runs the wrapper with a fake `ssh` on the PATH: check and apply over one connection each, a missing `config/<repo>.toml` without a connection, and the usage. The retry loop is the one of `tools/deploy-rootfs`; its waits of 30 s and more stay untested.
claude-code marked this conversation as resolved
ai-reviewer scheduled this pull request to auto merge when all checks succeed 2026-10-13 11:11:42 +02:00
ai-reviewer requested review from mi 2026-10-13 11:11:42 +02:00
claude-code added 2 commits 2026-10-13 11:12:48 +02:00
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Tests of the shell wrapper with a fake ssh; PR document
werkator build succeeded after 00:29
werkator/werkrevisor-statistics build succeeded after 01:19
ai-review/assessment AI review passed; approved by werkrevisor; merge already scheduled; review request of mi withdrawn
ai-review/gate build succeeded after 05:47
f29d17948b
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Collaborator

🟢 werkrevisor: GREEN / PASS

Change kind: mixed.

Reasons

  • hint 4 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 10 section(s) of the PR document agree with the change summary of openrouter/minimax/minimax-m3 according to Jev

Classifier

10 of 10 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 19055, calls 1, tokens in 18381 / out 30596 (reasoning included in out), duration 339.7 s, cost 0.0422 USD (reported), classifier `jev-1.13.0` calls 10, tokens in 7819, cost 0.0003 USD, change summary `openrouter/minimax/minimax-m3` via Minimax calls 1, tokens in 5895 / out 2901, cost 0.0049 USD (reported), PR document check `jev-1.13.0` calls 10, tokens in 16299, cost 0.0007 USD, build file judge `jev-1.13.0` calls 5, tokens in 6975, cost 0.0003 USD, phases: path_judge 0.5 s, classifier 0.8 s, change_summary 20.9 s, doc_check 0.7 s, context 0.3 s, model_review 315.5 s, config: defaults + host + repository (.werkrevisor.toml at main 5d559f3).
Reviewed head `f29d17948bbedfb9f39cc03d91c0dd60ffd4b099` against base `5d559f3e655b9b49005a29f651a0f98f118cd49e`, werkrevisor 0.40.2.
<!-- werkrevisor:f29d17948bbedfb9f39cc03d91c0dd60ffd4b099 --> <!-- werkrevisor-verdict:GREEN --> <!-- werkrevisor-blocks:baa1d973f8344d3abd4b3d482388b548,63b6e8c890f48beb18f6da677e8cd991,a2310a538673063570c735a78883d654,6188f5dc424d0d4f97d5a7b9c719fbf0,0e6dc1561a71b30417d1b353e3280106,3f55cf1b607ddf810d1f92a10b246bf2,c6ede10c3134574d784bc58df1b7a25f,69a8d36efb41d5c6e613277509d2f567,4dfe7f979cd6d0004b2d68dad83fcc9d,9123ecca9feff550c3bd6cbc7e39578f --> ## 🟢 werkrevisor: GREEN / PASS Change kind: `mixed`. ### Reasons - **hint** 4 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** 10 section(s) of the PR document agree with the change summary of openrouter/minimax/minimax-m3 according to Jev ### Classifier 10 of 10 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 19055, calls 1, tokens in 18381 / out 30596 (reasoning included in out), duration 339.7 s, cost 0.0422 USD (reported), classifier `jev-1.13.0` calls 10, tokens in 7819, cost 0.0003 USD, change summary `openrouter/minimax/minimax-m3` via Minimax calls 1, tokens in 5895 / out 2901, cost 0.0049 USD (reported), PR document check `jev-1.13.0` calls 10, tokens in 16299, cost 0.0007 USD, build file judge `jev-1.13.0` calls 5, tokens in 6975, cost 0.0003 USD, phases: path_judge 0.5 s, classifier 0.8 s, change_summary 20.9 s, doc_check 0.7 s, context 0.3 s, model_review 315.5 s, config: defaults + host + repository (.werkrevisor.toml at main 5d559f3).<br> Reviewed head `f29d17948bbedfb9f39cc03d91c0dd60ffd4b099` against base `5d559f3e655b9b49005a29f651a0f98f118cd49e`, werkrevisor 0.40.2. </sub>
ai-reviewer left a comment
Collaborator

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

werkrevisor: GREEN / PASS for `f29d17948bbedfb9f39cc03d91c0dd60ffd4b099`. The result comment of werkrevisor holds the details. <!-- werkrevisor-review:f29d17948bbedfb9f39cc03d91c0dd60ffd4b099 -->
ai-reviewer removed review request for mi 2026-10-13 11:18:39 +02:00
ai-reviewer merged commit e94de07252 into main 2026-10-13 11:18:42 +02:00
ai-reviewer deleted branch claude-code/sync-host-config 2026-10-13 11:18:42 +02:00
Sign in to join this conversation.
No Reviewers
No labels
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: mi/werkrevisor#101