werkrevisor 0.19.2: larger full files, excerpts instead of YELLOW for files beyond the limits #29

Merged
ai-reviewer merged 8 commits from claude-code/wider-context into main 2026-10-06 14:04:09 +02:00
Collaborator
See [docs/prs/2026-10-06-PR#29-wider-context.md](docs/prs/2026-10-06-PR%2329-wider-context.md). 🤖 Generated with [Claude Code](https://claude.com/claude-code)
claude-code added 1 commit 2026-10-06 13:31:12 +02:00
docs: PR#29 doc for larger full files and a wider diff context
werkator build succeeded after 00:09
werkator/server build succeeded after 00:25
bbe09d9b05
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
claude-code changed title from WIP: werkrevisor 0.19.2: larger full files and a wider diff context instead of YELLOW to werkrevisor 0.19.2: larger full files, excerpts instead of YELLOW for files beyond the limits 2026-10-06 13:38:32 +02:00
mi added 1 commit 2026-10-06 13:38:32 +02:00
werkrevisor 0.19.2: larger full files, excerpts instead of YELLOW for files beyond the limits
ai-review/assessment rule violated; a new commit that fixes it is required; changes requested by werkrevisor
ai-review/gate build failed after 00:01
werkator build succeeded after 00:08
werkator/server build succeeded after 00:32
4a3313a84b
Full files up to 80000 characters; a larger file goes as excerpt with 40 lines around each change, which is a hint.
PR-Agent caps its own diff context at 10 lines, so werkrevisor builds the excerpt itself.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Collaborator
🔴 werkrevisor RED for 4a3313a, superseded by the result for 09de937

🔴 werkrevisor: RED / CHANGES_REQUIRED

Change kind: mixed.

Reasons

  • RED the changed .werkrevisor.toml is invalid: .werkrevisor.toml: [review] max_full_file_chars = 80000 exceeds the host value 40000; the repository config may only lower it; after the merge every review would end with ERROR
  • YELLOW risky paths changed: .werkrevisor.toml (built in), werkrevisor/config.py (werkrevisor/config.py)
  • hint 1 build change(s) of low risk according to Jev: server/build.gradle.kts (weakens checks 0.02, risk 0.00)

Classifier

7 of 7 units passed all questions (1 PR document(s)).
2 answers ignored because of a confidence below [classifier] min_confidence.

Usage: model `openrouter/anthropic/claude-sonnet-5.5`, LLM skipped (invalid .werkrevisor.toml), duration 1.0 s, no model call, cost 0 USD, classifier `jev-1.13.0` calls 7, tokens in 5840, cost 0.0002 USD, build file judge `jev-1.13.0` calls 1, tokens in 560, cost 0.0000 USD, config: defaults + host + repository (.werkrevisor.toml at base f585223).
Reviewed head `4a3313a84bc192aa8b0a12151663dd60783b18a4` against base `f5852232e0b7cd9959c922c9ef081d90c029daf3`, werkrevisor 0.19.0.
<!-- werkrevisor:4a3313a84bc192aa8b0a12151663dd60783b18a4 --> <!-- werkrevisor-verdict:RED --> <!-- werkrevisor-folded --> <details><summary>🔴 werkrevisor RED for <code>4a3313a</code>, superseded by <a href="http://git.javagil.de/mi/werkrevisor/pulls/29#issuecomment-1270">the result for <code>09de937</code></a></summary> ## 🔴 werkrevisor: RED / CHANGES_REQUIRED Change kind: `mixed`. ### Reasons - **RED** the changed .werkrevisor.toml is invalid: .werkrevisor.toml: [review] max_full_file_chars = 80000 exceeds the host value 40000; the repository config may only lower it; after the merge every review would end with ERROR - **YELLOW** risky paths changed: .werkrevisor.toml (built in), werkrevisor/config.py (werkrevisor/config.py) - **hint** 1 build change(s) of low risk according to Jev: server/build.gradle.kts (weakens checks 0.02, risk 0.00) ### Classifier 7 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/anthropic/claude-sonnet-5.5`, LLM skipped (invalid .werkrevisor.toml), duration 1.0 s, no model call, cost 0 USD, classifier `jev-1.13.0` calls 7, tokens in 5840, cost 0.0002 USD, build file judge `jev-1.13.0` calls 1, tokens in 560, cost 0.0000 USD, config: defaults + host + repository (.werkrevisor.toml at base f585223).<br> Reviewed head `4a3313a84bc192aa8b0a12151663dd60783b18a4` against base `f5852232e0b7cd9959c922c9ef081d90c029daf3`, werkrevisor 0.19.0. </sub> </details>
ai-reviewer requested changes 2026-10-06 13:38:37 +02:00
Dismissed
ai-reviewer left a comment
Collaborator

werkrevisor: RED / CHANGES_REQUIRED for 4a3313a84bc192aa8b0a12151663dd60783b18a4.

  • the changed .werkrevisor.toml is invalid: .werkrevisor.toml: [review] max_full_file_chars = 80000 exceeds the host value 40000; the repository config may only lower it; after the merge every review would end with ERROR
    The result comment of werkrevisor holds the details.
werkrevisor: RED / CHANGES_REQUIRED for `4a3313a84bc192aa8b0a12151663dd60783b18a4`. - the changed .werkrevisor.toml is invalid: .werkrevisor.toml: [review] max_full_file_chars = 80000 exceeds the host value 40000; the repository config may only lower it; after the merge every review would end with ERROR The result comment of werkrevisor holds the details. <!-- werkrevisor-review:4a3313a84bc192aa8b0a12151663dd60783b18a4 -->
mi added 1 commit 2026-10-06 13:39:21 +02:00
review: .werkrevisor.toml inherits the full-file limits from the host
werkator build succeeded after 00:10
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 00:19
werkator/server build succeeded after 00:27
09de937810
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Collaborator
🟠 werkrevisor ORANGE for 09de937, superseded by the result for dcc7fbd

🟠 werkrevisor: ORANGE / FINDINGS

Change kind: mixed.

Reasons

  • ORANGE 1 finding(s) that Jev rates as probably real and severe: werkrevisor/fullfiles.py:40-52
  • YELLOW risky paths changed: .werkrevisor.toml (built in), werkrevisor/config.py (werkrevisor/config.py)
  • YELLOW 2 changed files were given to the AI only as diff, not in full, so it could not check them against the rest of their file (each larger than [review] max_full_file_chars = 40000): werkrevisor/cli.py, werkrevisor/config.py
  • hint 1 build change(s) of low risk according to Jev: server/build.gradle.kts (weakens checks 0.02, risk 0.00)
  • hint 2 finding(s) of low severity or rated minor by Jev: tests/test_config_layers.py:117, werkrevisor/fullfiles.py:110-118
  • hint model recommends merge with caution

Findings

  1. [medium] Added lines beyond file end silently dropped at werkrevisor/fullfiles.py:40-52, ORANGE, as a line comment

  2. [high] Weakened lower-only limit test at tests/test_config_layers.py:117, hint, as a line comment

  3. [medium] Excerpt lines can exceed limits unchecked at werkrevisor/fullfiles.py:110-118, hint, as a line comment

Classifier

7 of 7 units passed all questions (1 PR document(s)).
2 answers ignored because of a confidence below [classifier] min_confidence.

Usage: model `openrouter/anthropic/claude-sonnet-5.5`, LLM done, tokens counted before the call 54723, calls 1, tokens in 53810 / out 782 (reasoning included in out), duration 15.1 s, cost 0.1154 USD (reported), classifier `jev-1.13.0` calls 7, tokens in 5865, cost 0.0002 USD, finding judge `jev-1.13.0` calls 3, tokens in 4846, cost 0.0002 USD, build file judge `jev-1.13.0` calls 1, tokens in 560, cost 0.0000 USD, config: defaults + host + repository (.werkrevisor.toml at base f585223).
Reviewed head `09de937810f23ea462d340b26e377b4c96b94fb0` against base `f5852232e0b7cd9959c922c9ef081d90c029daf3`, werkrevisor 0.19.0.
<!-- werkrevisor:09de937810f23ea462d340b26e377b4c96b94fb0 --> <!-- werkrevisor-verdict:ORANGE --> <!-- werkrevisor-folded --> <details><summary>🟠 werkrevisor ORANGE for <code>09de937</code>, superseded by <a href="http://git.javagil.de/mi/werkrevisor/pulls/29#issuecomment-1278">the result for <code>dcc7fbd</code></a></summary> ## 🟠 werkrevisor: ORANGE / FINDINGS Change kind: `mixed`. ### Reasons - **ORANGE** 1 finding(s) that Jev rates as probably real and severe: werkrevisor/fullfiles.py:40-52 - **YELLOW** risky paths changed: .werkrevisor.toml (built in), werkrevisor/config.py (werkrevisor/config.py) - **YELLOW** 2 changed files were given to the AI only as diff, not in full, so it could not check them against the rest of their file (each larger than [review] max_full_file_chars = 40000): werkrevisor/cli.py, werkrevisor/config.py - **hint** 1 build change(s) of low risk according to Jev: server/build.gradle.kts (weakens checks 0.02, risk 0.00) - **hint** 2 finding(s) of low severity or rated minor by Jev: tests/test_config_layers.py:117, werkrevisor/fullfiles.py:110-118 - **hint** model recommends merge with caution ### Findings 1. **[medium] Added lines beyond file end silently dropped** at `werkrevisor/fullfiles.py:40-52`, ORANGE, as a line comment 2. **[high] Weakened lower-only limit test** at `tests/test_config_layers.py:117`, hint, as a line comment 3. **[medium] Excerpt lines can exceed limits unchecked** at `werkrevisor/fullfiles.py:110-118`, hint, as a line comment ### Classifier 7 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/anthropic/claude-sonnet-5.5`, LLM done, tokens counted before the call 54723, calls 1, tokens in 53810 / out 782 (reasoning included in out), duration 15.1 s, cost 0.1154 USD (reported), classifier `jev-1.13.0` calls 7, tokens in 5865, cost 0.0002 USD, finding judge `jev-1.13.0` calls 3, tokens in 4846, cost 0.0002 USD, build file judge `jev-1.13.0` calls 1, tokens in 560, cost 0.0000 USD, config: defaults + host + repository (.werkrevisor.toml at base f585223).<br> Reviewed head `09de937810f23ea462d340b26e377b4c96b94fb0` against base `f5852232e0b7cd9959c922c9ef081d90c029daf3`, werkrevisor 0.19.0. </sub> </details>
ai-reviewer left a comment
Collaborator

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

werkrevisor: ORANGE / FINDINGS for `09de937810f23ea462d340b26e377b4c96b94fb0`. The result comment of werkrevisor holds the details. <!-- werkrevisor-review:09de937810f23ea462d340b26e377b4c96b94fb0 -->
@@ -115,3 +115,3 @@
("model", "max_output_tokens", 3000, 8000),
("budget", "max_usd_per_review", 0.3, 2.0),
("review", "max_full_file_chars", 20000, 80000),
("review", "max_full_file_chars", 20000, 90000),
Collaborator

[high] Weakened lower-only limit test (werkrevisor)

hint; Jev: real 0.39, severity 2.0 of 3

The max_full_file_chars case now uses higher = 90000 against the host value 80000 in config/werkprobe.toml, so it checks only a small excess, and max_full_files_chars still uses a much larger one. The test still verifies that values above the host limit are refused, so it is not clearly weaker. However, the new excerpt_context_lines setting is host-only and has no test that a repository config cannot set it. Part of that contract is left unchecked. Uncertain: the host-only enforcement may be covered by a generic test not shown in the diff.

**[high] Weakened lower-only limit test** (werkrevisor) hint; Jev: real 0.39, severity 2.0 of 3 The `max_full_file_chars` case now uses `higher = 90000` against the host value 80000 in `config/werkprobe.toml`, so it checks only a small excess, and `max_full_files_chars` still uses a much larger one. The test still verifies that values above the host limit are refused, so it is not clearly weaker. However, the new `excerpt_context_lines` setting is host-only and has no test that a repository config cannot set it. Part of that contract is left unchecked. Uncertain: the host-only enforcement may be covered by a generic test not shown in the diff.
@@ -35,6 +37,33 @@ def render_file(path, text):
return f"### Full file: '{_safe_path(path)}' ({len(lines)} lines)\n{numbered}\n"
def excerpt_ranges(file_diff, line_count, context):
Collaborator

[medium] Added lines beyond file end silently dropped (werkrevisor)

ORANGE; Jev: real 0.60, severity 2.7 of 3

excerpt_ranges skips changed lines where first > last (a line number past the end of the file). If every change is skipped, ranges is empty and the file goes only as diff, which is safe. The case where the diff and the fetched content differ is handled only by this silent skip. No test covers it.

**[medium] Added lines beyond file end silently dropped** (werkrevisor) ORANGE; Jev: real 0.60, severity 2.7 of 3 `excerpt_ranges` skips changed lines where `first > last` (a line number past the end of the file). If every change is skipped, `ranges` is empty and the file goes only as diff, which is safe. The case where the diff and the fetched content differ is handled only by this silent skip. No test covers it.
@@ -69,0 +107,4 @@
# Per cause the files that went as excerpt and those that went only as diff.
too_large, over_total = ([], []), ([], [])
def excerpt(path, text):
Collaborator

[medium] Excerpt lines can exceed limits unchecked (werkrevisor)

hint; Jev: real 0.47, severity 2.2 of 3

In excerpt(), the size check uses total through closure while the caller later adds len(part). That is consistent. However, max_full_file_chars is compared with the excerpt, which is documented as a limit per rendered file. A file just over the limit with changes spread widely can produce an excerpt that is not smaller than the full file. The excerpt is then rejected, and excerpt_context_lines up to 500 makes this likely. That case is handled, so the main gap is a missing test for the over_total excerpt path.

**[medium] Excerpt lines can exceed limits unchecked** (werkrevisor) hint; Jev: real 0.47, severity 2.2 of 3 In `excerpt()`, the size check uses `total` through closure while the caller later adds `len(part)`. That is consistent. However, `max_full_file_chars` is compared with the excerpt, which is documented as a limit per rendered file. A file just over the limit with changes spread widely can produce an excerpt that is not smaller than the full file. The excerpt is then rejected, and `excerpt_context_lines` up to 500 makes this likely. That case is handled, so the main gap is a missing test for the `over_total` excerpt path.
ai-reviewer scheduled this pull request to auto merge when all checks succeed 2026-10-06 13:39:40 +02:00
ai-reviewer requested review from mi 2026-10-06 13:39:40 +02:00
mi added 1 commit 2026-10-06 13:40:48 +02:00
review: a diff that does not fit the file gives no excerpt; excerpt context is host only and validated
ai-review/assessment human review required; a human approval unlocks the merge; a human review request is pending; merge already scheduled
ai-review/gate build succeeded after 00:14
werkator/server build succeeded after 00:26
werkator build succeeded after 00:08
dcc7fbd80c
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Collaborator
🟡 werkrevisor YELLOW for dcc7fbd, superseded by the result for 4f6484b

🟡 werkrevisor: YELLOW / HUMAN_REVIEW

Change kind: mixed.

Reasons

  • YELLOW risky paths changed: .werkrevisor.toml (built in), werkrevisor/config.py (werkrevisor/config.py)
  • YELLOW 2 changed files were given to the AI only as diff, not in full, so it could not check them against the rest of their file (each larger than [review] max_full_file_chars = 40000): werkrevisor/cli.py, werkrevisor/config.py
  • YELLOW 1 finding(s) possibly severe, but Jev doubts that they are real: werkrevisor/fullfiles.py:115-123
  • hint 1 build change(s) of low risk according to Jev: server/build.gradle.kts (weakens checks 0.02, risk 0.00)
  • hint 1 finding(s) of low severity or rated minor by Jev: README.md:87-88
  • hint model recommends merge with caution

Findings

  1. [medium] Excerpt line count ignores files with trailing text beyond splitlines at werkrevisor/fullfiles.py:115-123, YELLOW, as a line comment

  2. [low] README example contradicts new limits at README.md:87-88, hint, as a line comment

Classifier

7 of 7 units passed all questions (1 PR document(s)).
2 answers ignored because of a confidence below [classifier] min_confidence.

Usage: model `openrouter/anthropic/claude-sonnet-5.5`, LLM done, tokens counted before the call 56216, calls 1, tokens in 55337 / out 577 (reasoning included in out), duration 11.6 s, cost 0.1164 USD (reported), classifier `jev-1.13.0` calls 7, tokens in 5865, cost 0.0002 USD, finding judge `jev-1.13.0` calls 1, tokens in 1619, cost 0.0001 USD, build file judge `jev-1.13.0` calls 1, tokens in 560, cost 0.0000 USD, config: defaults + host + repository (.werkrevisor.toml at base f585223).
Reviewed head `dcc7fbd80c2e0c8a9da332fa1182558a43404ccb` against base `f5852232e0b7cd9959c922c9ef081d90c029daf3`, werkrevisor 0.19.0.
<!-- werkrevisor:dcc7fbd80c2e0c8a9da332fa1182558a43404ccb --> <!-- werkrevisor-verdict:YELLOW --> <!-- werkrevisor-folded --> <details><summary>🟡 werkrevisor YELLOW for <code>dcc7fbd</code>, superseded by <a href="http://git.javagil.de/mi/werkrevisor/pulls/29#issuecomment-1284">the result for <code>4f6484b</code></a></summary> ## 🟡 werkrevisor: YELLOW / HUMAN_REVIEW Change kind: `mixed`. ### Reasons - **YELLOW** risky paths changed: .werkrevisor.toml (built in), werkrevisor/config.py (werkrevisor/config.py) - **YELLOW** 2 changed files were given to the AI only as diff, not in full, so it could not check them against the rest of their file (each larger than [review] max_full_file_chars = 40000): werkrevisor/cli.py, werkrevisor/config.py - **YELLOW** 1 finding(s) possibly severe, but Jev doubts that they are real: werkrevisor/fullfiles.py:115-123 - **hint** 1 build change(s) of low risk according to Jev: server/build.gradle.kts (weakens checks 0.02, risk 0.00) - **hint** 1 finding(s) of low severity or rated minor by Jev: README.md:87-88 - **hint** model recommends merge with caution ### Findings 1. **[medium] Excerpt line count ignores files with trailing text beyond splitlines** at `werkrevisor/fullfiles.py:115-123`, YELLOW, as a line comment 2. **[low] README example contradicts new limits** at `README.md:87-88`, hint, as a line comment ### Classifier 7 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/anthropic/claude-sonnet-5.5`, LLM done, tokens counted before the call 56216, calls 1, tokens in 55337 / out 577 (reasoning included in out), duration 11.6 s, cost 0.1164 USD (reported), classifier `jev-1.13.0` calls 7, tokens in 5865, cost 0.0002 USD, finding judge `jev-1.13.0` calls 1, tokens in 1619, cost 0.0001 USD, build file judge `jev-1.13.0` calls 1, tokens in 560, cost 0.0000 USD, config: defaults + host + repository (.werkrevisor.toml at base f585223).<br> Reviewed head `dcc7fbd80c2e0c8a9da332fa1182558a43404ccb` against base `f5852232e0b7cd9959c922c9ef081d90c029daf3`, werkrevisor 0.19.0. </sub> </details>
ai-reviewer left a comment
Collaborator

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

werkrevisor: YELLOW / HUMAN_REVIEW for `dcc7fbd80c2e0c8a9da332fa1182558a43404ccb`. The result comment of werkrevisor holds the details. <!-- werkrevisor-review:dcc7fbd80c2e0c8a9da332fa1182558a43404ccb -->
@@ -83,5 +83,5 @@
6. Run the PR-Agent reviewer with all settings forced by werkrevisor.
7. Check that the model saw every changed file completely.
8. Read the PR again.
If the head moved meanwhile, stop with exit 30 and write nothing.
9. Write one PR comment, the commit status `ai-review/assessment`, and one usage line.
Collaborator

[low] README example contradicts new limits (werkrevisor)

hint

The README still shows the example reason with max_full_files_chars = 120000, while the default is now 160000. The comments in config/werkator.toml and config/werkprobe.toml also still say "120000 chars are about 34000 of the 100000 input tokens", which no longer matches the new limit of 160000.

**[low] README example contradicts new limits** (werkrevisor) hint The README still shows the example reason with `max_full_files_chars = 120000`, while the default is now 160000. The comments in `config/werkator.toml` and `config/werkprobe.toml` also still say "120000 chars are about 34000 of the 100000 input tokens", which no longer matches the new limit of 160000.
@@ -69,0 +112,4 @@
# Per cause the files that went as excerpt and those that went only as diff.
too_large, over_total = ([], []), ([], [])
def excerpt(path, text):
Collaborator

[medium] Excerpt line count ignores files with trailing text beyond splitlines (werkrevisor)

YELLOW; Jev: real 0.51, severity 2.6 of 3

The excerpt closure checks the per-file limit with len(part) > max_full_file_chars, but total is read from the enclosing scope at call time. That is fine. The bigger problem is that excerpt_ranges returns an empty list when a PR has no added or removed lines in the diff (e.g. a rename or mode change). if ranges is then falsy, so the file goes only as diff and gives YELLOW, which the PR document does not mention. Also, for a file of 1 line lines[i - 1] is safe, but ranges computed from a diff that does not match the head file raise no error because of the None check only for added lines. This is uncertain and limited to odd diffs.

**[medium] Excerpt line count ignores files with trailing text beyond splitlines** (werkrevisor) YELLOW; Jev: real 0.51, severity 2.6 of 3 The `excerpt` closure checks the per-file limit with `len(part) > max_full_file_chars`, but `total` is read from the enclosing scope at call time. That is fine. The bigger problem is that `excerpt_ranges` returns an empty list when a PR has no added or removed lines in the diff (e.g. a rename or mode change). `if ranges` is then falsy, so the file goes only as diff and gives YELLOW, which the PR document does not mention. Also, for a file of 1 line `lines[i - 1]` is safe, but ranges computed from a `diff` that does not match the head file raise no error because of the `None` check only for added lines. This is uncertain and limited to odd diffs.
Author
Collaborator

Assessment of the werkrevisor findings (as of the last commit):

Fixed:

  • RED, invalid .werkrevisor.toml: the installed 0.19.0 has the limit 40000, and a repository config may only lower it. .werkrevisor.toml no longer sets the limits; it inherits them from the host, so it is valid before and after the deployment.
  • fullfiles.py (ORANGE), changed lines beyond the end of the file: an added line beyond the end means the diff does not fit the file, so the file goes only as diff (YELLOW); a removed line at the end counts at the last line. Test added.
  • test_config_layers.py: excerpt_context_lines is tested as host only and validated.
  • README example and the comments in config/werkator.toml and config/werkprobe.toml follow the new limits.

Not changed:

  • fullfiles.py:115-123 (YELLOW, Jev doubts it), a too-large file without changed lines goes only as diff: intended and safe. A pure rename is already a mechanical file and skips the full files; a mode change of a file above 80000 characters without content change is rare, and YELLOW is the safe side.
  • The over_total path of the excerpt is tested in test_files_beyond_the_limits_go_as_excerpt_and_are_a_hint (subtest max_full_files_chars).
  • YELLOW cli.py and config.py only as diff: this review still runs with the installed 0.19.0 and its limit 40000; from 0.19.2 on, both files go in full (44901 and 42771 characters with line numbers).
  • YELLOW risky paths .werkrevisor.toml and werkrevisor/config.py: by design.

Deployment: right after the merge, the rootfs 0.19.2 and the Werkator machine configs of werkprobe and werkator with the new limits.

🤖 Generated with Claude Code

Assessment of the werkrevisor findings (as of the last commit): Fixed: - RED, invalid `.werkrevisor.toml`: the installed 0.19.0 has the limit 40000, and a repository config may only lower it. `.werkrevisor.toml` no longer sets the limits; it inherits them from the host, so it is valid before and after the deployment. - `fullfiles.py` (ORANGE), changed lines beyond the end of the file: an added line beyond the end means the diff does not fit the file, so the file goes only as diff (YELLOW); a removed line at the end counts at the last line. Test added. - `test_config_layers.py`: `excerpt_context_lines` is tested as host only and validated. - README example and the comments in `config/werkator.toml` and `config/werkprobe.toml` follow the new limits. Not changed: - `fullfiles.py:115-123` (YELLOW, Jev doubts it), a too-large file without changed lines goes only as diff: intended and safe. A pure rename is already a mechanical file and skips the full files; a mode change of a file above 80000 characters without content change is rare, and YELLOW is the safe side. - The `over_total` path of the excerpt is tested in `test_files_beyond_the_limits_go_as_excerpt_and_are_a_hint` (subtest `max_full_files_chars`). - YELLOW `cli.py` and `config.py` only as diff: this review still runs with the installed 0.19.0 and its limit 40000; from 0.19.2 on, both files go in full (44901 and 42771 characters with line numbers). - YELLOW risky paths `.werkrevisor.toml` and `werkrevisor/config.py`: by design. Deployment: right after the merge, the rootfs 0.19.2 and the Werkator machine configs of werkprobe and werkator with the new limits. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
mi added 1 commit 2026-10-06 13:41:37 +02:00
review: README example and config comments follow the new full-file limits
ai-review/assessment human review required; a human approval unlocks the merge; a human review request is pending; merge already scheduled
ai-review/gate build succeeded after 00:14
werkator/server build succeeded after 00:26
werkator build succeeded after 00:08
4f6484be06
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Collaborator
🟡 werkrevisor YELLOW for 4f6484b, superseded by the result for 9cc201d

🟡 werkrevisor: YELLOW / HUMAN_REVIEW

Change kind: mixed.

Reasons

  • YELLOW risky paths changed: .werkrevisor.toml (built in), werkrevisor/config.py (werkrevisor/config.py)
  • YELLOW 2 changed files were given to the AI only as diff, not in full, so it could not check them against the rest of their file (each larger than [review] max_full_file_chars = 40000): werkrevisor/cli.py, werkrevisor/config.py
  • hint 1 build change(s) of low risk according to Jev: server/build.gradle.kts (weakens checks 0.02, risk 0.00)
  • hint 3 finding(s) of low severity or rated minor by Jev: werkrevisor/fullfiles.py:115-123, werkrevisor/fullfiles.py:121, docs/prs/2026-10-06-PR#29-wider-context.md:1
  • hint model recommends changes before merge

Findings

  1. [high] Excerpt can exceed the total limit at werkrevisor/fullfiles.py:115-123, hint, still open in an earlier line comment

  2. [medium] Line exceeds 128 characters at werkrevisor/fullfiles.py:121, hint, as a line comment

  3. [low] Title and document disagree with the code at docs/prs/2026-10-06-PR#29-wider-context.md:1, hint, as a line comment

Classifier

7 of 7 units passed all questions (1 PR document(s)).
2 answers ignored because of a confidence below [classifier] min_confidence.

Usage: model `openrouter/anthropic/claude-sonnet-5.5`, LLM done, tokens counted before the call 56510, calls 1, tokens in 55621 / out 708 (reasoning included in out), duration 11.9 s, cost 0.1183 USD (reported), classifier `jev-1.13.0` calls 7, tokens in 5865, cost 0.0002 USD, finding judge `jev-1.13.0` calls 2, tokens in 2926, cost 0.0001 USD, build file judge `jev-1.13.0` calls 1, tokens in 560, cost 0.0000 USD, config: defaults + host + repository (.werkrevisor.toml at base f585223).
Reviewed head `4f6484be06056f5c891f560fc56bb31141e39ce6` against base `f5852232e0b7cd9959c922c9ef081d90c029daf3`, werkrevisor 0.19.0.
<!-- werkrevisor:4f6484be06056f5c891f560fc56bb31141e39ce6 --> <!-- werkrevisor-verdict:YELLOW --> <!-- werkrevisor-folded --> <details><summary>🟡 werkrevisor YELLOW for <code>4f6484b</code>, superseded by <a href="http://git.javagil.de/mi/werkrevisor/pulls/29#issuecomment-1294">the result for <code>9cc201d</code></a></summary> ## 🟡 werkrevisor: YELLOW / HUMAN_REVIEW Change kind: `mixed`. ### Reasons - **YELLOW** risky paths changed: .werkrevisor.toml (built in), werkrevisor/config.py (werkrevisor/config.py) - **YELLOW** 2 changed files were given to the AI only as diff, not in full, so it could not check them against the rest of their file (each larger than [review] max_full_file_chars = 40000): werkrevisor/cli.py, werkrevisor/config.py - **hint** 1 build change(s) of low risk according to Jev: server/build.gradle.kts (weakens checks 0.02, risk 0.00) - **hint** 3 finding(s) of low severity or rated minor by Jev: werkrevisor/fullfiles.py:115-123, werkrevisor/fullfiles.py:121, docs/prs/2026-10-06-PR#29-wider-context.md:1 - **hint** model recommends changes before merge ### Findings 1. **[high] Excerpt can exceed the total limit** at `werkrevisor/fullfiles.py:115-123`, hint, still open in [an earlier line comment](http://git.javagil.de/mi/werkrevisor/pulls/29#issuecomment-1279) 2. **[medium] Line exceeds 128 characters** at `werkrevisor/fullfiles.py:121`, hint, as a line comment 3. **[low] Title and document disagree with the code** at `docs/prs/2026-10-06-PR#29-wider-context.md:1`, hint, as a line comment ### Classifier 7 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/anthropic/claude-sonnet-5.5`, LLM done, tokens counted before the call 56510, calls 1, tokens in 55621 / out 708 (reasoning included in out), duration 11.9 s, cost 0.1183 USD (reported), classifier `jev-1.13.0` calls 7, tokens in 5865, cost 0.0002 USD, finding judge `jev-1.13.0` calls 2, tokens in 2926, cost 0.0001 USD, build file judge `jev-1.13.0` calls 1, tokens in 560, cost 0.0000 USD, config: defaults + host + repository (.werkrevisor.toml at base f585223).<br> Reviewed head `4f6484be06056f5c891f560fc56bb31141e39ce6` against base `f5852232e0b7cd9959c922c9ef081d90c029daf3`, werkrevisor 0.19.0. </sub> </details>
ai-reviewer left a comment
Collaborator

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

werkrevisor: YELLOW / HUMAN_REVIEW for `4f6484be06056f5c891f560fc56bb31141e39ce6`. The result comment of werkrevisor holds the details. <!-- werkrevisor-review:4f6484be06056f5c891f560fc56bb31141e39ce6 -->
@@ -0,0 +1,96 @@
# PR#29: larger full files and a wider diff context instead of YELLOW
Collaborator

[low] Title and document disagree with the code (werkrevisor)

hint

The title says "a wider diff context instead of YELLOW", but the code adds excerpts of the file and does not widen the diff. The Scenario#29.03 table also says "a file that is not UTF-8 text but is reviewable for PR-Agent", which the code does not check separately.

**[low] Title and document disagree with the code** (werkrevisor) hint The title says "a wider diff context instead of YELLOW", but the code adds excerpts of the file and does not widen the diff. The Scenario#29.03 table also says "a file that is not UTF-8 text but is reviewable for PR-Agent", which the code does not check separately.
@@ -69,0 +118,4 @@
return None
ranges = excerpt_ranges(file_diff, len(text.splitlines()), review_config.excerpt_context_lines)
part = render_excerpt(path, text, ranges) if ranges else None
if part is None or len(part) > review_config.max_full_file_chars or total + len(part) > review_config.max_full_files_chars:
Collaborator

[medium] Line exceeds 128 characters (werkrevisor)

hint; Jev: real 0.58, severity 0.9 of 3

The condition line in excerpt is about 135 characters long, which breaks the line-length convention of the Python code and hurts readability. Split the condition over several lines.

**[medium] Line exceeds 128 characters** (werkrevisor) hint; Jev: real 0.58, severity 0.9 of 3 The condition line in `excerpt` is about 135 characters long, which breaks the line-length convention of the Python code and hurts readability. Split the condition over several lines.
mi approved these changes 2026-10-06 13:44:04 +02:00
Dismissed
mi added 1 commit 2026-10-06 13:45:46 +02:00
Merge remote-tracking branch 'origin/main' into claude-code/wider-context
werkator build succeeded after 00:45
ai-review/assessment AI findings; a developer approval after checking them unlocks the merge; review requested from mi; merge already scheduled
ai-review/gate build succeeded after 00:54
werkator/server build succeeded after 00:39
9cc201d65c
# Conflicts:
#	server/build.gradle.kts
#	werkrevisor/__init__.py
mi dismissed mi's review 2026-10-06 13:45:46 +02:00
Reason:

New commits pushed, approval review dismissed automatically according to repository settings

Collaborator
🟠 werkrevisor ORANGE for 9cc201d, superseded by the result for eb3d4cc

🟠 werkrevisor: ORANGE / FINDINGS

Change kind: mixed.

Reasons

  • ORANGE 1 finding(s) that Jev rates as probably real and severe: werkrevisor/fullfiles.py:40-57
  • YELLOW risky paths changed: .werkrevisor.toml (built in), werkrevisor/config.py (werkrevisor/config.py)
  • YELLOW 2 changed files were given to the AI only as diff, not in full, so it could not check them against the rest of their file (each larger than [review] max_full_file_chars = 40000): werkrevisor/cli.py, werkrevisor/config.py
  • hint 1 build change(s) of low risk according to Jev: server/build.gradle.kts (weakens checks 0.02, risk 0.00)
  • hint 1 finding(s) of low severity or rated minor by Jev: werkrevisor/fullfiles.py:121
  • hint model recommends merge with caution

Findings

  1. [medium] Excerpt of a changed file can silently miss deleted-only context and be marked GREEN at werkrevisor/fullfiles.py:40-57, ORANGE, still open in an earlier line comment

  2. [low] Over-long line in excerpt helper at werkrevisor/fullfiles.py:121, hint, still open in an earlier line comment

Classifier

7 of 7 units passed all questions (1 PR document(s)).
2 answers ignored because of a confidence below [classifier] min_confidence.

Usage: model `openrouter/anthropic/claude-sonnet-5.5`, LLM done, tokens counted before the call 56513, calls 1, tokens in 55623 / out 619 (reasoning included in out), duration 31.9 s, cost 0.1174 USD (reported), classifier `jev-1.13.0` calls 7, tokens in 5865, cost 0.0002 USD, finding judge `jev-1.13.0` calls 1, tokens in 1715, cost 0.0001 USD, build file judge `jev-1.13.0` calls 1, tokens in 560, cost 0.0000 USD, config: defaults + host + repository (.werkrevisor.toml at base e95f148).
Reviewed head `9cc201d65c8a17aa021e3c99c442b5eb6815f509` against base `e95f148df8dc7cadc14f8cf268617deb3b9b5a9d`, werkrevisor 0.19.1.
<!-- werkrevisor:9cc201d65c8a17aa021e3c99c442b5eb6815f509 --> <!-- werkrevisor-verdict:ORANGE --> <!-- werkrevisor-folded --> <details><summary>🟠 werkrevisor ORANGE for <code>9cc201d</code>, superseded by <a href="http://git.javagil.de/mi/werkrevisor/pulls/29#issuecomment-1297">the result for <code>eb3d4cc</code></a></summary> ## 🟠 werkrevisor: ORANGE / FINDINGS Change kind: `mixed`. ### Reasons - **ORANGE** 1 finding(s) that Jev rates as probably real and severe: werkrevisor/fullfiles.py:40-57 - **YELLOW** risky paths changed: .werkrevisor.toml (built in), werkrevisor/config.py (werkrevisor/config.py) - **YELLOW** 2 changed files were given to the AI only as diff, not in full, so it could not check them against the rest of their file (each larger than [review] max_full_file_chars = 40000): werkrevisor/cli.py, werkrevisor/config.py - **hint** 1 build change(s) of low risk according to Jev: server/build.gradle.kts (weakens checks 0.02, risk 0.00) - **hint** 1 finding(s) of low severity or rated minor by Jev: werkrevisor/fullfiles.py:121 - **hint** model recommends merge with caution ### Findings 1. **[medium] Excerpt of a changed file can silently miss deleted-only context and be marked GREEN** at `werkrevisor/fullfiles.py:40-57`, ORANGE, still open in [an earlier line comment](http://git.javagil.de/mi/werkrevisor/pulls/29#issuecomment-1273) 2. **[low] Over-long line in `excerpt` helper** at `werkrevisor/fullfiles.py:121`, hint, still open in [an earlier line comment](http://git.javagil.de/mi/werkrevisor/pulls/29#issuecomment-1285) ### Classifier 7 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/anthropic/claude-sonnet-5.5`, LLM done, tokens counted before the call 56513, calls 1, tokens in 55623 / out 619 (reasoning included in out), duration 31.9 s, cost 0.1174 USD (reported), classifier `jev-1.13.0` calls 7, tokens in 5865, cost 0.0002 USD, finding judge `jev-1.13.0` calls 1, tokens in 1715, cost 0.0001 USD, build file judge `jev-1.13.0` calls 1, tokens in 560, cost 0.0000 USD, config: defaults + host + repository (.werkrevisor.toml at base e95f148).<br> Reviewed head `9cc201d65c8a17aa021e3c99c442b5eb6815f509` against base `e95f148df8dc7cadc14f8cf268617deb3b9b5a9d`, werkrevisor 0.19.1. </sub> </details>
ai-reviewer requested review from mi 2026-10-06 13:46:48 +02:00
mi added 1 commit 2026-10-06 13:57:03 +02:00
review: a removed line counts in the excerpt where it was in the new version
werkator build succeeded after 00:09
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 00:15
werkator/server build succeeded after 00:26
eb3d4ccac4
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Collaborator
🟠 werkrevisor ORANGE for eb3d4cc, superseded by the result for 8116b42

🟠 werkrevisor: ORANGE / FINDINGS

Change kind: mixed.

Reasons

  • ORANGE 1 finding(s) that Jev rates as probably real and severe: werkrevisor/fullfiles.py:141-145
  • YELLOW risky paths changed: .werkrevisor.toml (built in), werkrevisor/config.py (werkrevisor/config.py)
  • YELLOW spec: docs/prs/2026-10-06-PR#29-wider-context.md Scenario#29.03 hard_to_read (0.50 > yellow_above = 0.5)
  • YELLOW 2 changed files were given to the AI only as diff, not in full, so it could not check them against the rest of their file (each larger than [review] max_full_file_chars = 40000): werkrevisor/cli.py, werkrevisor/config.py
  • YELLOW 1 finding(s) possibly severe, but Jev doubts that they are real: werkrevisor/config.py:92
  • hint 1 build change(s) of low risk according to Jev: server/build.gradle.kts (weakens checks 0.02, risk 0.00)
  • hint 1 finding(s) of low severity or rated minor by Jev: tests/test_fullfiles.py:193-198
  • hint model recommends merge with caution

Findings

  1. [medium] Excerpt total check uses stale total for over-total decision at werkrevisor/fullfiles.py:141-145, ORANGE, as a line comment

  2. [medium] excerpt_context_lines host-only enforcement is not visible in the diff at werkrevisor/config.py:92, YELLOW, as a line comment

  3. [high] Test body lost its own test name at tests/test_fullfiles.py:193-198, hint, as a line comment

Classifier

Unit Question Problem Confidence Verdict
docs/prs/2026-10-06-PR#29-wider-context.md Scenario#29.03 hard_to_read 0.50 0.47 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/anthropic/claude-sonnet-5.5`, LLM done, tokens counted before the call 59379, calls 1, tokens in 58213 / out 807 (reasoning included in out), duration 13.4 s, cost 0.1245 USD (reported), classifier `jev-1.13.0` calls 7, tokens in 5865, cost 0.0002 USD, finding judge `jev-1.13.0` calls 3, tokens in 4653, cost 0.0002 USD, build file judge `jev-1.13.0` calls 1, tokens in 560, cost 0.0000 USD, config: defaults + host + repository (.werkrevisor.toml at base e95f148).
Reviewed head `eb3d4ccac44587a34cb6e2263b73a3e9a569daa1` against base `e95f148df8dc7cadc14f8cf268617deb3b9b5a9d`, werkrevisor 0.19.1.
<!-- werkrevisor:eb3d4ccac44587a34cb6e2263b73a3e9a569daa1 --> <!-- werkrevisor-verdict:ORANGE --> <!-- werkrevisor-folded --> <details><summary>🟠 werkrevisor ORANGE for <code>eb3d4cc</code>, superseded by <a href="http://git.javagil.de/mi/werkrevisor/pulls/29#issuecomment-1304">the result for <code>8116b42</code></a></summary> ## 🟠 werkrevisor: ORANGE / FINDINGS Change kind: `mixed`. ### Reasons - **ORANGE** 1 finding(s) that Jev rates as probably real and severe: werkrevisor/fullfiles.py:141-145 - **YELLOW** risky paths changed: .werkrevisor.toml (built in), werkrevisor/config.py (werkrevisor/config.py) - **YELLOW** spec: docs/prs/2026-10-06-PR#29-wider-context.md Scenario#29.03 hard_to_read (0.50 > yellow_above = 0.5) - **YELLOW** 2 changed files were given to the AI only as diff, not in full, so it could not check them against the rest of their file (each larger than [review] max_full_file_chars = 40000): werkrevisor/cli.py, werkrevisor/config.py - **YELLOW** 1 finding(s) possibly severe, but Jev doubts that they are real: werkrevisor/config.py:92 - **hint** 1 build change(s) of low risk according to Jev: server/build.gradle.kts (weakens checks 0.02, risk 0.00) - **hint** 1 finding(s) of low severity or rated minor by Jev: tests/test_fullfiles.py:193-198 - **hint** model recommends merge with caution ### Findings 1. **[medium] Excerpt total check uses stale `total` for over-total decision** at `werkrevisor/fullfiles.py:141-145`, ORANGE, as a line comment 2. **[medium] `excerpt_context_lines` host-only enforcement is not visible in the diff** at `werkrevisor/config.py:92`, YELLOW, as a line comment 3. **[high] Test body lost its own test name** at `tests/test_fullfiles.py:193-198`, hint, as a line comment ### Classifier | Unit | Question | Problem | Confidence | Verdict | |---|---|---|---|---| | docs/prs/2026-10-06-PR#29-wider-context.md Scenario#29.03 | hard_to_read | 0.50 | 0.47 | 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/anthropic/claude-sonnet-5.5`, LLM done, tokens counted before the call 59379, calls 1, tokens in 58213 / out 807 (reasoning included in out), duration 13.4 s, cost 0.1245 USD (reported), classifier `jev-1.13.0` calls 7, tokens in 5865, cost 0.0002 USD, finding judge `jev-1.13.0` calls 3, tokens in 4653, cost 0.0002 USD, build file judge `jev-1.13.0` calls 1, tokens in 560, cost 0.0000 USD, config: defaults + host + repository (.werkrevisor.toml at base e95f148).<br> Reviewed head `eb3d4ccac44587a34cb6e2263b73a3e9a569daa1` against base `e95f148df8dc7cadc14f8cf268617deb3b9b5a9d`, werkrevisor 0.19.1. </sub> </details>
ai-reviewer left a comment
Collaborator

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

werkrevisor: ORANGE / FINDINGS for `eb3d4ccac44587a34cb6e2263b73a3e9a569daa1`. The result comment of werkrevisor holds the details. <!-- werkrevisor-review:eb3d4ccac44587a34cb6e2263b73a3e9a569daa1 -->
@@ -122,0 +190,4 @@
self.assertIn("full_files_partial", [r.code for r in outcome.result.reasons])
self.assertIn("### Excerpt of file: 'src/a.py' (lines 1-41 of 500)", model.sections[0])
def test_a_large_file_without_excerpt_is_never_green(self):
Collaborator

[high] Test body lost its own test name (werkrevisor)

hint; Jev: real 0.25, severity 1.7 of 3

The old test_incomplete_context_is_never_green was replaced by test_a_large_file_without_excerpt_is_never_green, but it keeps the same assertions. With diffs=None in the flow, the file goes only as diff and the test remains as strict as before, so this is acceptable. The remaining uncertainty is whether execute actually passes diffs in the flow, because the new GREEN test (test_a_large_file_as_excerpt_can_be_green) depends on it. Without a visible diffs argument at the call site in cli.py, a mismatch would make the excerpt path dead.

**[high] Test body lost its own test name** (werkrevisor) hint; Jev: real 0.25, severity 1.7 of 3 The old `test_incomplete_context_is_never_green` was replaced by `test_a_large_file_without_excerpt_is_never_green`, but it keeps the same assertions. With `diffs=None` in the flow, the file goes only as diff and the test remains as strict as before, so this is acceptable. The remaining uncertainty is whether `execute` actually passes `diffs` in the flow, because the new GREEN test (`test_a_large_file_as_excerpt_can_be_green`) depends on it. Without a visible `diffs` argument at the call site in `cli.py`, a mismatch would make the excerpt path dead.
@@ -89,0 +89,4 @@
max_full_files_chars: int = 160000
# A file too large to go in full goes as excerpt with these lines around each changed line;
# PR-Agent caps its own diff context at 10 lines.
excerpt_context_lines: int = 40
Collaborator

[medium] excerpt_context_lines host-only enforcement is not visible in the diff (werkrevisor)

YELLOW; Jev: real 0.42, severity 2.8 of 3

The new test expects the repository config to be refused for excerpt_context_lines. The diff shows only the dataclass field and the validation, not the host-only key list. If the host-only table was not updated elsewhere in config.py, a repository could widen the excerpt and inflate the prompt size. This cannot be verified from the shown hunks.

**[medium] `excerpt_context_lines` host-only enforcement is not visible in the diff** (werkrevisor) YELLOW; Jev: real 0.42, severity 2.8 of 3 The new test expects the repository config to be refused for `excerpt_context_lines`. The diff shows only the dataclass field and the validation, not the host-only key list. If the host-only table was not updated elsewhere in `config.py`, a repository could widen the excerpt and inflate the prompt size. This cannot be verified from the shown hunks.
@@ -84,0 +138,4 @@
cause = too_large
elif total + len(part) > review_config.max_full_files_chars:
cause = over_total
if cause is not None:
Collaborator

[medium] Excerpt total check uses stale total for over-total decision (werkrevisor)

ORANGE; Jev: real 0.76, severity 2.6 of 3

For a file beyond max_full_file_chars, the excerpt is checked against max_full_files_chars using total, which is correct. However, an excerpt that fails is recorded under the cause too_large or over_total of the full file, not of the excerpt. A file that is too large and whose excerpt exceeds the total limit is therefore reported as "each larger than max_full_file_chars", which hides the real cause and misleads the operator about which limit to raise.

**[medium] Excerpt total check uses stale `total` for over-total decision** (werkrevisor) ORANGE; Jev: real 0.76, severity 2.6 of 3 For a file beyond `max_full_file_chars`, the excerpt is checked against `max_full_files_chars` using `total`, which is correct. However, an excerpt that fails is recorded under the cause `too_large` or `over_total` of the full file, not of the excerpt. A file that is too large and whose excerpt exceeds the total limit is therefore reported as "each larger than max_full_file_chars", which hides the real cause and misleads the operator about which limit to raise.
Author
Collaborator

Assessment of the werkrevisor findings since my last comment (as of the last commit):

Fixed:

  • Merge conflict with PR#28 resolved: version 0.19.2 on top of 0.19.1; all tests green. This commit dismissed the approval, so the PR needs a new one.
  • fullfiles.py (ORANGE), a removed line counted at its old line number: the diff parser now records where a removed line was in the new version, so earlier hunks no longer shift the excerpt. Test added (red with the old line number).
  • fullfiles.py:141-145 (ORANGE), the reason of a file only as diff named only the original limit: it now adds "and no excerpt fits the limits either".
  • fullfiles.py:121: the long condition is wrapped.
  • Scenario#29.03 (YELLOW, hard to read): split into a case table with one condition per row.

Not changed:

  • config.py:92 (YELLOW, Jev doubts it), host-only excerpt_context_lines: REPOSITORY_KEYS does not list it, and test_excerpt_context_is_host_only_and_validated checks that a repository config is refused.
  • test_fullfiles.py:193-198, whether cli.py passes the diffs: it does (fullfiles.collect(..., rules.mechanical, diffs)), and test_a_large_file_as_excerpt_can_be_green runs through the whole flow and sees the excerpt in the prompt.
  • YELLOW cli.py and config.py only as diff: this review still runs with the installed 0.19.1 and its limit 40000.

Follow-up idea: a finding that reuses an open line comment keeps the old comment text; its new text is only in the result comment.

🤖 Generated with Claude Code

Assessment of the werkrevisor findings since my last comment (as of the last commit): Fixed: - Merge conflict with PR#28 resolved: version 0.19.2 on top of 0.19.1; all tests green. This commit dismissed the approval, so the PR needs a new one. - `fullfiles.py` (ORANGE), a removed line counted at its old line number: the diff parser now records where a removed line was in the new version, so earlier hunks no longer shift the excerpt. Test added (red with the old line number). - `fullfiles.py:141-145` (ORANGE), the reason of a file only as diff named only the original limit: it now adds "and no excerpt fits the limits either". - `fullfiles.py:121`: the long condition is wrapped. - Scenario#29.03 (YELLOW, hard to read): split into a case table with one condition per row. Not changed: - `config.py:92` (YELLOW, Jev doubts it), host-only `excerpt_context_lines`: `REPOSITORY_KEYS` does not list it, and `test_excerpt_context_is_host_only_and_validated` checks that a repository config is refused. - `test_fullfiles.py:193-198`, whether `cli.py` passes the diffs: it does (`fullfiles.collect(..., rules.mechanical, diffs)`), and `test_a_large_file_as_excerpt_can_be_green` runs through the whole flow and sees the excerpt in the prompt. - YELLOW `cli.py` and `config.py` only as diff: this review still runs with the installed 0.19.1 and its limit 40000. Follow-up idea: a finding that reuses an open line comment keeps the old comment text; its new text is only in the result comment. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
mi added 1 commit 2026-10-06 13:58:38 +02:00
review: the reason of a file only as diff says that no excerpt fit either; Scenario#29.03 easier to read
werkator build succeeded after 00:07
ai-review/assessment human review required; a human approval unlocks the merge; a human review request is pending; merge already scheduled
ai-review/gate build succeeded after 00:12
werkator/server build succeeded after 00:25
8116b42e90
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Collaborator

🟡 werkrevisor: YELLOW / HUMAN_REVIEW

Change kind: mixed.

Reasons

  • YELLOW risky paths changed: .werkrevisor.toml (built in), werkrevisor/config.py (werkrevisor/config.py)
  • YELLOW 2 changed files were given to the AI only as diff, not in full, so it could not check them against the rest of their file (each larger than [review] max_full_file_chars = 40000): werkrevisor/cli.py, werkrevisor/config.py
  • hint 1 build change(s) of low risk according to Jev: server/build.gradle.kts (weakens checks 0.02, risk 0.00)
  • hint 2 finding(s) of low severity or rated minor by Jev: werkrevisor/fullfiles.py:120-121, docs/prs/2026-10-06-PR#29-wider-context.md:1
  • hint model recommends merge with caution

Findings

  1. [medium] Excerpt with empty ranges silently falls back to YELLOW at werkrevisor/fullfiles.py:120-121, hint, still open in an earlier line comment

  2. [low] Document contradicts the code on the total limit at docs/prs/2026-10-06-PR#29-wider-context.md:1, hint, still open in an earlier 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/anthropic/claude-sonnet-5.5`, LLM done, tokens counted before the call 61745, calls 1, tokens in 60530 / out 481 (reasoning included in out), duration 11.0 s, cost 0.1259 USD (reported), classifier `jev-1.13.0` calls 7, tokens in 5870, cost 0.0002 USD, finding judge `jev-1.13.0` calls 1, tokens in 1387, cost 0.0001 USD, build file judge `jev-1.13.0` calls 1, tokens in 560, cost 0.0000 USD, config: defaults + host + repository (.werkrevisor.toml at base e95f148).
Reviewed head `8116b42e908fecc451166b0ca501bf6ae4cff23e` against base `e95f148df8dc7cadc14f8cf268617deb3b9b5a9d`, werkrevisor 0.19.1.
<!-- werkrevisor:8116b42e908fecc451166b0ca501bf6ae4cff23e --> <!-- werkrevisor-verdict:YELLOW --> ## 🟡 werkrevisor: YELLOW / HUMAN_REVIEW Change kind: `mixed`. ### Reasons - **YELLOW** risky paths changed: .werkrevisor.toml (built in), werkrevisor/config.py (werkrevisor/config.py) - **YELLOW** 2 changed files were given to the AI only as diff, not in full, so it could not check them against the rest of their file (each larger than [review] max_full_file_chars = 40000): werkrevisor/cli.py, werkrevisor/config.py - **hint** 1 build change(s) of low risk according to Jev: server/build.gradle.kts (weakens checks 0.02, risk 0.00) - **hint** 2 finding(s) of low severity or rated minor by Jev: werkrevisor/fullfiles.py:120-121, docs/prs/2026-10-06-PR#29-wider-context.md:1 - **hint** model recommends merge with caution ### Findings 1. **[medium] Excerpt with empty ranges silently falls back to YELLOW** at `werkrevisor/fullfiles.py:120-121`, hint, still open in [an earlier line comment](http://git.javagil.de/mi/werkrevisor/pulls/29#issuecomment-1285) 2. **[low] Document contradicts the code on the total limit** at `docs/prs/2026-10-06-PR#29-wider-context.md:1`, hint, still open in [an earlier line comment](http://git.javagil.de/mi/werkrevisor/pulls/29#issuecomment-1286) ### 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/anthropic/claude-sonnet-5.5`, LLM done, tokens counted before the call 61745, calls 1, tokens in 60530 / out 481 (reasoning included in out), duration 11.0 s, cost 0.1259 USD (reported), classifier `jev-1.13.0` calls 7, tokens in 5870, cost 0.0002 USD, finding judge `jev-1.13.0` calls 1, tokens in 1387, cost 0.0001 USD, build file judge `jev-1.13.0` calls 1, tokens in 560, cost 0.0000 USD, config: defaults + host + repository (.werkrevisor.toml at base e95f148).<br> Reviewed head `8116b42e908fecc451166b0ca501bf6ae4cff23e` against base `e95f148df8dc7cadc14f8cf268617deb3b9b5a9d`, werkrevisor 0.19.1. </sub>
mi approved these changes 2026-10-06 14:00:52 +02:00
Dismissed
mi approved these changes 2026-10-06 14:01:19 +02:00
Dismissed
mi approved these changes 2026-10-06 14:02:13 +02:00
Dismissed
mi left a comment
Owner

latest findings accepted

latest findings accepted
mi approved these changes 2026-10-06 14:03:34 +02:00
mi left a comment
Owner

latest findings accepted

latest findings accepted
mi dismissed ai-reviewer's review 2026-10-06 14:04:08 +02:00
Reason:

Stale RED of 4a3313a: the invalid .werkrevisor.toml was fixed in 09de937; later reviews are not RED.

ai-reviewer merged commit 1924a35700 into main 2026-10-06 14:04:09 +02:00
ai-reviewer deleted branch claude-code/wider-context 2026-10-06 14:04:09 +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#29