A coding agent watches its pull request until it must act #48

Merged
ai-reviewer merged 7 commits from claude-code/watch-pr into main 2026-10-12 16:57:02 +02:00
Collaborator

See the PR document.

🤖 Generated with Claude Code

See [the PR document](doc/prs/2026-10-12-PR%2348-watch-pr.md). 🤖 Generated with [Claude Code](https://claude.com/claude-code)
claude-code marked the pull request as ready for review 2026-10-12 16:12:58 +02:00
Collaborator
🟡 werkrevisor YELLOW for 2356bee, superseded by the result for bfb7895

🟡 werkrevisor: YELLOW / HUMAN_REVIEW

Change kind: mixed.

Reasons

  • YELLOW spec: doc/prs/2026-10-12-PR#48-watch-pr.md section 'Open Questions' hard_to_understand (0.51 > yellow_above = 0.5)
  • hint 6 changed file(s) that neither weaken the checks, touch security nor show a risk category of jvm-spring-backend according to Jev
  • hint 1 build change(s) of low risk according to Jev: dashboard/build.gradle.kts (weakens checks 0.02, risk 0.00, security 0.01)
  • hint 2 finding(s) of low severity or rated minor by Jev: dashboard/src/main/kotlin/de/hoennig/werkregie/dashboard/Config.kt:178, doc/prs/2026-10-12-PR#48-watch-pr.md:31-103
  • hint model recommends merge with caution

Findings

  1. Truncated comment at dashboard/src/main/kotlin/de/hoennig/werkregie/dashboard/Config.kt:178, severity unknown, counted as medium, hint, as a line comment

  2. Scenarios numbered out of order at doc/prs/2026-10-12-PR#48-watch-pr.md:31-103, severity unknown, counted as medium, hint, as a line comment

Classifier

Unit Question Problem Confidence Verdict
doc/prs/2026-10-12-PR#48-watch-pr.md section 'Open Questions' hard_to_understand 0.51 0.41 YELLOW

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

Usage: model `openrouter/minimax/minimax-m3`, LLM done, tokens counted before the call 32996, calls 1, tokens in 31794 / out 18473 (reasoning included in out), duration 150.8 s, cost 0.0317 USD (reported), classifier `jev-1.13.0` calls 13, tokens in 10732, cost 0.0005 USD, finding judge `jev-1.13.0` calls 2, tokens in 5697, cost 0.0002 USD, build file judge `jev-1.13.0` calls 7, tokens in 10117, cost 0.0004 USD, phases: path_judge 0.5 s, classifier 1.0 s, context 1.8 s, model_review 146.8 s, finding_judge 0.3 s, config: defaults + host + repository (.werkrevisor.toml at main 0472cf9).
Reviewed head `2356beea4a85e85083fa5df4639d95dc6760f91e` against base `0472cf93feaaa01b1f1d57106a398ceb8ca6c3ff`, werkrevisor 0.38.0.
<!-- werkrevisor:2356beea4a85e85083fa5df4639d95dc6760f91e --> <!-- werkrevisor-verdict:YELLOW --> <!-- werkrevisor-blocks:d44c6830a095417e691e6c1b1eb04a20,f89542352d13a7b274d7c3df7c77cded,2fac99652d36d2fefcbca91296e33f3a,9014ae9ec459c371f6e7982369d1f293,efc3e953c02a8e86fd3d1040bc39aeb8,9843b6a109a82292210b8f2edace2762,8e6bc01f1dcebe21a0bca4c19d03719d,303a231e6c080285b77e53d2312312c6,441c577b3038c0d927b52c83a1bd10e6,43c4c1087aa99d9663830be42b635919,02642cd07ea99fb4b61faa8d09771049,dd0cba6196f6873b2789f4bda9a3177a,7e404f91380f276b91638f87abfab8dc,a713062b170071d9f4189d8acad80eea,7c7d57c5913e2e7102de0d6983e71798,bd02111749d1272886e41e7e2cefef1d,9756494a7a4b168712d17f498e74b22c --> <!-- werkrevisor-folded --> <details><summary>🟡 werkrevisor YELLOW for <code>2356bee</code>, superseded by <a href="http://git.javagil.de/mi/werkregie/pulls/48#issuecomment-4753">the result for <code>bfb7895</code></a></summary> ## 🟡 werkrevisor: YELLOW / HUMAN_REVIEW Change kind: `mixed`. ### Reasons - **YELLOW** spec: doc/prs/2026-10-12-PR#48-watch-pr.md section 'Open Questions' hard_to_understand (0.51 > yellow_above = 0.5) - **hint** 6 changed file(s) that neither weaken the checks, touch security nor show a risk category of jvm-spring-backend according to Jev - **hint** 1 build change(s) of low risk according to Jev: dashboard/build.gradle.kts (weakens checks 0.02, risk 0.00, security 0.01) - **hint** 2 finding(s) of low severity or rated minor by Jev: dashboard/src/main/kotlin/de/hoennig/werkregie/dashboard/Config.kt:178, doc/prs/2026-10-12-PR#48-watch-pr.md:31-103 - **hint** model recommends merge with caution ### Findings 1. **Truncated comment** at `dashboard/src/main/kotlin/de/hoennig/werkregie/dashboard/Config.kt:178`, severity unknown, counted as medium, hint, as a line comment 2. **Scenarios numbered out of order** at `doc/prs/2026-10-12-PR#48-watch-pr.md:31-103`, severity unknown, counted as medium, hint, as a line comment ### Classifier | Unit | Question | Problem | Confidence | Verdict | |---|---|---|---|---| | doc/prs/2026-10-12-PR#48-watch-pr.md section 'Open Questions' | hard_to_understand | 0.51 | 0.41 | YELLOW | 12 of 13 units passed all questions (1 PR document(s)). 4 answers ignored because of a confidence below [classifier] min_confidence. <sub> Usage: model `openrouter/minimax/minimax-m3`, LLM done, tokens counted before the call 32996, calls 1, tokens in 31794 / out 18473 (reasoning included in out), duration 150.8 s, cost 0.0317 USD (reported), classifier `jev-1.13.0` calls 13, tokens in 10732, cost 0.0005 USD, finding judge `jev-1.13.0` calls 2, tokens in 5697, cost 0.0002 USD, build file judge `jev-1.13.0` calls 7, tokens in 10117, cost 0.0004 USD, phases: path_judge 0.5 s, classifier 1.0 s, context 1.8 s, model_review 146.8 s, finding_judge 0.3 s, config: defaults + host + repository (.werkrevisor.toml at main 0472cf9).<br> Reviewed head `2356beea4a85e85083fa5df4639d95dc6760f91e` against base `0472cf93feaaa01b1f1d57106a398ceb8ca6c3ff`, werkrevisor 0.38.0. </sub> </details>
ai-reviewer left a comment
Collaborator

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

werkrevisor: YELLOW / HUMAN_REVIEW for `2356beea4a85e85083fa5df4639d95dc6760f91e`. The result comment of werkrevisor holds the details. <!-- werkrevisor-review:2356beea4a85e85083fa5df4639d95dc6760f91e -->
@@ -166,0 +175,4 @@
override fun handleUnknownProperty(
context: DeserializationContext, parser: JsonParser, deserializer: JsonDeserializer<*>, bean: Any?, name: String,
): Boolean {
// a data class reads its entries ahead of time, so the parser's path is not reliable; the class is
Collaborator

Truncated comment, severity unknown, counted as medium (werkrevisor)

hint; Jev: real 0.85, severity 0.8 of 3

The comment that explains the new DeserializationProblemHandler ends abruptly at "the class is" without completing the sentence. The intended justification for deriving the section from bean.javaClass.simpleName is left unfinished, so a future reader sees a half-formed sentence that does not stand on its own.

**Truncated comment**, severity unknown, counted as medium (werkrevisor) hint; Jev: real 0.85, severity 0.8 of 3 The comment that explains the new `DeserializationProblemHandler` ends abruptly at "the class is" without completing the sentence. The intended justification for deriving the section from `bean.javaClass.simpleName` is left unfinished, so a future reader sees a half-formed sentence that does not stand on its own.
Author
Collaborator

Fixed in bfb7895: the comment now ends with its reason, the class of the section.

Fixed in `bfb7895`: the comment now ends with its reason, the class of the section.
claude-code marked this conversation as resolved
@@ -0,0 +28,4 @@
### Feature: the watch of a pull request ends when its agent must act
#### Scenario#48.01: a merge ends the watch
Collaborator

Scenarios numbered out of order, severity unknown, counted as medium (werkrevisor)

hint; Jev: real 0.87, severity 1.1 of 3

The specification lists the scenarios in the order 48.01, 48.02, 48.07, 48.03, 48.04, 48.05, 48.06, so Scenario#48.07 ("a draft behind main ends the watch") sits between 48.02 and 48.03 instead of at the end. The misordering makes the document hard to scan and contradicts the sequential numbering that the rest of the file relies on.

**Scenarios numbered out of order**, severity unknown, counted as medium (werkrevisor) hint; Jev: real 0.87, severity 1.1 of 3 The specification lists the scenarios in the order 48.01, 48.02, 48.07, 48.03, 48.04, 48.05, 48.06, so Scenario#48.07 ("a draft behind main ends the watch") sits between 48.02 and 48.03 instead of at the end. The misordering makes the document hard to scan and contradicts the sequential numbering that the rest of the file relies on.
Author
Collaborator

Fixed in bfb7895: Scenario#48.07 now stands after Scenario#48.06.

Fixed in `bfb7895`: Scenario#48.07 now stands after Scenario#48.06.
claude-code marked this conversation as resolved
ai-reviewer scheduled this pull request to auto merge when all checks succeed 2026-10-12 16:16:19 +02:00
ai-reviewer requested review from mi 2026-10-12 16:16:19 +02:00
Collaborator
🟠 werkrevisor ORANGE for bfb7895, superseded by the result for e828081

🟠 werkrevisor: ORANGE / FINDINGS

Change kind: mixed.

Reasons

  • ORANGE 1 finding(s) that Jev rates as probably real and severe: doc/prs/2026-10-12-PR#48-watch-pr.md:127-128
  • hint 6 changed file(s) that neither weaken the checks, touch security nor show a risk category of jvm-spring-backend according to Jev
  • hint 1 build change(s) of low risk according to Jev: dashboard/build.gradle.kts (weakens checks 0.02, risk 0.00, security 0.01)
  • hint model recommends merge with caution

Findings

  1. Doc/code mismatch on REVIEW at doc/prs/2026-10-12-PR#48-watch-pr.md:127-128, severity unknown, counted as medium, ORANGE, as a line comment

Classifier

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

Usage: model `openrouter/minimax/minimax-m3`, LLM done, tokens counted before the call 33004, calls 1, tokens in 31803 / out 38318 (reasoning included in out), duration 660.5 s, cost 0.0555 USD (reported), classifier `jev-1.13.0` calls 13, tokens in 10753, cost 0.0005 USD, finding judge `jev-1.13.0` calls 1, tokens in 2304, cost 0.0001 USD, build file judge `jev-1.13.0` calls 7, tokens in 10128, cost 0.0004 USD, phases: path_judge 0.7 s, classifier 1.0 s, context 3.9 s, model_review 652.8 s, finding_judge 0.3 s, config: defaults + host + repository (.werkrevisor.toml at main 0472cf9).
Reviewed head `bfb7895763b86fd7c3812612aa9e0898cddb1946` against base `0472cf93feaaa01b1f1d57106a398ceb8ca6c3ff`, werkrevisor 0.38.0.
<!-- werkrevisor:bfb7895763b86fd7c3812612aa9e0898cddb1946 --> <!-- werkrevisor-verdict:ORANGE --> <!-- werkrevisor-blocks:d44c6830a095417e691e6c1b1eb04a20,f89542352d13a7b274d7c3df7c77cded,2fac99652d36d2fefcbca91296e33f3a,9014ae9ec459c371f6e7982369d1f293,efc3e953c02a8e86fd3d1040bc39aeb8,061f20f09d9aeda3e532cd228460accd,8e6bc01f1dcebe21a0bca4c19d03719d,303a231e6c080285b77e53d2312312c6,441c577b3038c0d927b52c83a1bd10e6,43c4c1087aa99d9663830be42b635919,02642cd07ea99fb4b61faa8d09771049,dd0cba6196f6873b2789f4bda9a3177a,7e404f91380f276b91638f87abfab8dc,a713062b170071d9f4189d8acad80eea,7c7d57c5913e2e7102de0d6983e71798,5c298741505374052fa92369e2ebd9a7,9756494a7a4b168712d17f498e74b22c --> <!-- werkrevisor-folded --> <details><summary>🟠 werkrevisor ORANGE for <code>bfb7895</code>, superseded by <a href="http://git.javagil.de/mi/werkregie/pulls/48#issuecomment-4801">the result for <code>e828081</code></a></summary> ## 🟠 werkrevisor: ORANGE / FINDINGS Change kind: `mixed`. ### Reasons - **ORANGE** 1 finding(s) that Jev rates as probably real and severe: doc/prs/2026-10-12-PR#48-watch-pr.md:127-128 - **hint** 6 changed file(s) that neither weaken the checks, touch security nor show a risk category of jvm-spring-backend according to Jev - **hint** 1 build change(s) of low risk according to Jev: dashboard/build.gradle.kts (weakens checks 0.02, risk 0.00, security 0.01) - **hint** model recommends merge with caution ### Findings 1. **Doc/code mismatch on REVIEW** at `doc/prs/2026-10-12-PR#48-watch-pr.md:127-128`, severity unknown, counted as medium, ORANGE, as a line comment ### Classifier 13 of 13 units passed all questions (1 PR document(s)). 4 answers ignored because of a confidence below [classifier] min_confidence. <sub> Usage: model `openrouter/minimax/minimax-m3`, LLM done, tokens counted before the call 33004, calls 1, tokens in 31803 / out 38318 (reasoning included in out), duration 660.5 s, cost 0.0555 USD (reported), classifier `jev-1.13.0` calls 13, tokens in 10753, cost 0.0005 USD, finding judge `jev-1.13.0` calls 1, tokens in 2304, cost 0.0001 USD, build file judge `jev-1.13.0` calls 7, tokens in 10128, cost 0.0004 USD, phases: path_judge 0.7 s, classifier 1.0 s, context 3.9 s, model_review 652.8 s, finding_judge 0.3 s, config: defaults + host + repository (.werkrevisor.toml at main 0472cf9).<br> Reviewed head `bfb7895763b86fd7c3812612aa9e0898cddb1946` against base `0472cf93feaaa01b1f1d57106a398ceb8ca6c3ff`, werkrevisor 0.38.0. </sub> </details>
ai-reviewer left a comment
Collaborator

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

werkrevisor: ORANGE / FINDINGS for `bfb7895763b86fd7c3812612aa9e0898cddb1946`. The result comment of werkrevisor holds the details. <!-- werkrevisor-review:bfb7895763b86fd7c3812612aa9e0898cddb1946 -->
@@ -0,0 +124,4 @@
- Gitea reports a draft, i.e. a pull request with `WIP: `, as never mergeable.
For a draft, the watch compares the merge base with the head of `main` instead and ends with `BEHIND` when they differ.
Its first run on PR#48 ended with a false `CONFLICT` for this reason.
- werkrevisor's statuses decide the review: `ai-review/gate` done,
Collaborator

Doc/code mismatch on REVIEW, severity unknown, counted as medium (werkrevisor)

ORANGE; Jev: real 0.74, severity 2.7 of 3

The PR doc says the watch returns REVIEW when ai-review/gate is done and ai-review/assessment is a failure, or its description names a human review or open hints. But the code's general failure check (the FAILED branch in PullRequestWatch.outcome) runs before the REVIEW check, so a failed ai-review/assessment status triggers FAILED (with context ai-review/assessment), not REVIEW. The doc should describe what the code actually does, or the code should special-case werkre's verdict and route a failed ai-review/assessment to REVIEW.

**Doc/code mismatch on REVIEW**, severity unknown, counted as medium (werkrevisor) ORANGE; Jev: real 0.74, severity 2.7 of 3 The PR doc says the watch returns REVIEW when `ai-review/gate` is done and `ai-review/assessment` is a failure, or its description names a human review or open hints. But the code's general failure check (the FAILED branch in `PullRequestWatch.outcome`) runs before the REVIEW check, so a failed `ai-review/assessment` status triggers FAILED (with context `ai-review/assessment`), not REVIEW. The doc should describe what the code actually does, or the code should special-case werkre's verdict and route a failed `ai-review/assessment` to REVIEW.
Author
Collaborator

Fixed in a4d51bc: the code now follows the document.
A failure or error of a status ai-review/* ends the watch with REVIEW, e.g. after RED; only another status, e.g. Werkator's build, gives FAILED.
The test covers a failed ai-review/assessment, and the Solution describes both cases in plain words.

Fixed in `a4d51bc`: the code now follows the document. A failure or error of a status `ai-review/*` ends the watch with `REVIEW`, e.g. after RED; only another status, e.g. Werkator's build, gives `FAILED`. The test covers a failed `ai-review/assessment`, and the Solution describes both cases in plain words.
claude-code marked this conversation as resolved
claude-code added 6 commits 2026-10-12 16:52:11 +02:00
claude-code force-pushed claude-code/watch-pr from 588c64f389 to 2797201724 2026-10-12 16:52:11 +02:00 Compare
claude-code added 1 commit 2026-10-12 16:52:46 +02:00
The test of an unknown entry uses one that no version knows; summary came with PR#47
ai-review/assessment AI review passed; approved by werkrevisor; merge already scheduled; review request of mi withdrawn
ai-review/gate build succeeded after 03:17
werkator build succeeded after 01:37
e828081739
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Collaborator

🟢 werkrevisor: GREEN / PASS

Change kind: mixed.

Reasons

  • hint 6 changed file(s) that neither weaken the checks, touch security nor show a risk category of jvm-spring-backend according to Jev
  • hint 1 build change(s) of low risk according to Jev: dashboard/build.gradle.kts (weakens checks 0.02, risk 0.00, security 0.01)

Classifier

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

Usage: model `openrouter/minimax/minimax-m3`, LLM done, tokens counted before the call 34718, calls 1, tokens in 33444 / out 24164 (reasoning included in out), duration 192.2 s, cost 0.0384 USD (reported), classifier `jev-1.13.0` calls 13, tokens in 10919, cost 0.0005 USD, build file judge `jev-1.13.0` calls 7, tokens in 10409, cost 0.0004 USD, phases: path_judge 0.5 s, classifier 0.9 s, context 1.5 s, model_review 188.9 s, config: defaults + host + repository (.werkrevisor.toml at main 73f436b).
Reviewed head `e82808173934eea73a6e83657db9d6179f626370` against base `73f436bef19eb89cdbc5556d25c33cf51dde4950`, werkrevisor 0.38.0.
<!-- werkrevisor:e82808173934eea73a6e83657db9d6179f626370 --> <!-- werkrevisor-verdict:GREEN --> <!-- werkrevisor-blocks:d44c6830a095417e691e6c1b1eb04a20,f89542352d13a7b274d7c3df7c77cded,467ed1ce83d6fb6d22b9e45ce24e1301,9014ae9ec459c371f6e7982369d1f293,efc3e953c02a8e86fd3d1040bc39aeb8,061f20f09d9aeda3e532cd228460accd,8e6bc01f1dcebe21a0bca4c19d03719d,303a231e6c080285b77e53d2312312c6,441c577b3038c0d927b52c83a1bd10e6,fcfa9526790d513eaaba66a6258de0d4,02642cd07ea99fb4b61faa8d09771049,eee7cefce72efd0990ce7506aadf13e2,7fa736469871457ee28008b204c0f15c,a713062b170071d9f4189d8acad80eea,7c7d57c5913e2e7102de0d6983e71798,b23d7b7f27a0e3f1b4d255e80916aa8d,9756494a7a4b168712d17f498e74b22c --> ## 🟢 werkrevisor: GREEN / PASS Change kind: `mixed`. ### Reasons - **hint** 6 changed file(s) that neither weaken the checks, touch security nor show a risk category of jvm-spring-backend according to Jev - **hint** 1 build change(s) of low risk according to Jev: dashboard/build.gradle.kts (weakens checks 0.02, risk 0.00, security 0.01) ### Classifier 13 of 13 units passed all questions (1 PR document(s)). 6 answers ignored because of a confidence below [classifier] min_confidence. <sub> Usage: model `openrouter/minimax/minimax-m3`, LLM done, tokens counted before the call 34718, calls 1, tokens in 33444 / out 24164 (reasoning included in out), duration 192.2 s, cost 0.0384 USD (reported), classifier `jev-1.13.0` calls 13, tokens in 10919, cost 0.0005 USD, build file judge `jev-1.13.0` calls 7, tokens in 10409, cost 0.0004 USD, phases: path_judge 0.5 s, classifier 0.9 s, context 1.5 s, model_review 188.9 s, config: defaults + host + repository (.werkrevisor.toml at main 73f436b).<br> Reviewed head `e82808173934eea73a6e83657db9d6179f626370` against base `73f436bef19eb89cdbc5556d25c33cf51dde4950`, werkrevisor 0.38.0. </sub>
ai-reviewer left a comment
Collaborator

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

werkrevisor: GREEN / PASS for `e82808173934eea73a6e83657db9d6179f626370`. The result comment of werkrevisor holds the details. <!-- werkrevisor-review:e82808173934eea73a6e83657db9d6179f626370 -->
ai-reviewer removed review request for mi 2026-10-12 16:56:40 +02:00
ai-reviewer merged commit 12f5b86950 into main 2026-10-12 16:57:02 +02:00
ai-reviewer deleted branch claude-code/watch-pr 2026-10-12 16:57:02 +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/werkregie#48