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
The service returns the LLM and Jev parts of each sum and whether an estimated part is in it;
the dashboard shows them below each total in smaller print and marks estimated amounts with ≈.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
hint 2 finding(s) of low severity or rated minor by Jev: server/src/test/kotlin/de/hoennig/werkrevisor/server/UsageApiIntegrationTest.kt:163-164, docs/prs/2026-10-06-PR#22-estimated-costs-and-split.md:64-65
hint model recommends merge with caution
Findings
[high] Recent cost omits Jev when LLM cost is unknown at server/src/main/kotlin/de/hoennig/werkrevisor/server/Statistics.kt:123-125, ORANGE, as a line comment
[high] Changed 30d assertion value at server/src/test/kotlin/de/hoennig/werkrevisor/server/UsageApiIntegrationTest.kt:163-164, hint, as a line comment
[medium] Document contradicts Scenario table at docs/prs/2026-10-06-PR#22-estimated-costs-and-split.md:64-65, hint, as a line comment
Classifier
7 of 7 units passed all questions (1 PR document(s)).
Usage: model `openrouter/anthropic/claude-sonnet-5.5`, LLM done, tokens counted before the call 30411, calls 1, tokens in 29579 / out 813 (reasoning included in out), duration 13.1 s, cost 0.0673 USD (reported), classifier `jev-1.13.0` calls 7, tokens in 5484, cost 0.0002 USD, finding judge `jev-1.13.0` calls 3, tokens in 4533, cost 0.0002 USD, config: defaults + host + repository (.werkrevisor.toml at base 5e73b70).
Reviewed head `a799395736909fc356e7d176cfb5a5287d343709` against base `5e73b70aa5ed2dcd3f67f3eb5245ab54ead4d995`, werkrevisor 0.18.0.
<!-- werkrevisor:a799395736909fc356e7d176cfb5a5287d343709 -->
<!-- werkrevisor-verdict:ORANGE -->
<!-- werkrevisor-folded -->
<details><summary>🟠 werkrevisor ORANGE for <code>a799395</code>, superseded by <a href="http://git.javagil.de/mi/werkrevisor/pulls/22#issuecomment-1092">the result for <code>2d1f2fc</code></a></summary>
## 🟠 werkrevisor: ORANGE / FINDINGS
Change kind: `mixed`.
### Reasons
- **ORANGE** 1 finding(s) that Jev rates as probably real and severe: server/src/main/kotlin/de/hoennig/werkrevisor/server/Statistics.kt:123-125
- **YELLOW** risky paths changed: server/build.gradle.kts (server/*.gradle.kts)
- **hint** 2 finding(s) of low severity or rated minor by Jev: server/src/test/kotlin/de/hoennig/werkrevisor/server/UsageApiIntegrationTest.kt:163-164, docs/prs/2026-10-06-PR#22-estimated-costs-and-split.md:64-65
- **hint** model recommends merge with caution
### Findings
1. **[high] Recent cost omits Jev when LLM cost is unknown** at `server/src/main/kotlin/de/hoennig/werkrevisor/server/Statistics.kt:123-125`, ORANGE, as a line comment
2. **[high] Changed 30d assertion value** at `server/src/test/kotlin/de/hoennig/werkrevisor/server/UsageApiIntegrationTest.kt:163-164`, hint, as a line comment
3. **[medium] Document contradicts Scenario table** at `docs/prs/2026-10-06-PR#22-estimated-costs-and-split.md:64-65`, hint, as a line comment
### Classifier
7 of 7 units passed all questions (1 PR document(s)).
<sub>
Usage: model `openrouter/anthropic/claude-sonnet-5.5`, LLM done, tokens counted before the call 30411, calls 1, tokens in 29579 / out 813 (reasoning included in out), duration 13.1 s, cost 0.0673 USD (reported), classifier `jev-1.13.0` calls 7, tokens in 5484, cost 0.0002 USD, finding judge `jev-1.13.0` calls 3, tokens in 4533, cost 0.0002 USD, config: defaults + host + repository (.werkrevisor.toml at base 5e73b70).<br>
Reviewed head `a799395736909fc356e7d176cfb5a5287d343709` against base `5e73b70aa5ed2dcd3f67f3eb5245ab54ead4d995`, werkrevisor 0.18.0.
</sub>
</details>
werkrevisor: ORANGE / FINDINGS for a799395736909fc356e7d176cfb5a5287d343709.
The result comment of werkrevisor holds the details.
werkrevisor: ORANGE / FINDINGS for `a799395736909fc356e7d176cfb5a5287d343709`.
The result comment of werkrevisor holds the details.
<!-- werkrevisor-review:a799395736909fc356e7d176cfb5a5287d343709 -->
The scenario table says only reported LLM costs show no mark, yet the solution says Jev costs "always count as estimated". The code marks a period as estimated only if jevCostUsd > 0. A Jev cost of 0 is not marked. The wording "always" is therefore inaccurate. Scenario#22.02 also states a 0.0007 USD Jev cost, while the test uses 0.001 USD.
**[medium] Document contradicts Scenario table** (werkrevisor)
hint; Jev: real 0.85, severity 1.7 of 3
The scenario table says only reported LLM costs show no mark, yet the solution says Jev costs "always count as estimated". The code marks a period as estimated only if `jevCostUsd > 0`. A Jev cost of 0 is not marked. The wording "always" is therefore inaccurate. Scenario#22.02 also states a 0.0007 USD Jev cost, while the test uses 0.001 USD.
[high] Recent cost omits Jev when LLM cost is unknown (werkrevisor)
ORANGE; Jev: real 0.75, severity 2.9 of 3
The Recent row shows totalCostUsd only if costKnown is true, while Sums.costUsd now counts the Jev part of reviews with unknown LLM costs. The dashboard totals therefore include costs that the recent list shows as "unknown". The PR changes the sum semantics but not this row, so the two views disagree.
**[high] Recent cost omits Jev when LLM cost is unknown** (werkrevisor)
ORANGE; Jev: real 0.75, severity 2.9 of 3
The `Recent` row shows `totalCostUsd` only if `costKnown` is true, while `Sums.costUsd` now counts the Jev part of reviews with unknown LLM costs. The dashboard totals therefore include costs that the recent list shows as "unknown". The PR changes the sum semantics but not this row, so the two views disagree.
The expected 30d costUsd changed from 0.5015 to 0.502 because Jev costs of unknown-LLM reviews now count. This is a deliberate behavior change that the PR document lists. The new value is still checked with 1e-9 tolerance, so the test is not weaker. The remaining risk is that the stated behavior (Jev costs counted for unknown LLM costs) conflicts with unknownCostReviews and costPerPullRequestUsd, which now divide a partly known total by all PRs.
**[high] Changed 30d assertion value** (werkrevisor)
hint; Jev: real 0.41, severity 2.2 of 3
The expected 30d `costUsd` changed from 0.5015 to 0.502 because Jev costs of unknown-LLM reviews now count. This is a deliberate behavior change that the PR document lists. The new value is still checked with 1e-9 tolerance, so the test is not weaker. The remaining risk is that the stated behavior (Jev costs counted for unknown LLM costs) conflicts with `unknownCostReviews` and `costPerPullRequestUsd`, which now divide a partly known total by all PRs.
ai-reviewer
scheduled this pull request to auto merge when all checks succeed 2026-10-06 11:13:40 +02:00
ai-reviewer
requested review from mi 2026-10-06 11:13:40 +02:00
hint 3 finding(s) of low severity or rated minor by Jev: server/src/test/kotlin/de/hoennig/werkrevisor/server/UsageApiIntegrationTest.kt:163-164, server/src/main/resources/static/werkrevisor-dashboard.js:145, server/src/main/resources/static/werkrevisor-dashboard.js:41
hint model recommends merge with caution
Findings
[medium] Changed assertion at line 163 is not weaker, but 30d case lost its old check at server/src/test/kotlin/de/hoennig/werkrevisor/server/UsageApiIntegrationTest.kt:163-164, hint, still open in an earlier line comment
[low] Bar width uses estimated-agnostic total and drops a 60px scale at server/src/main/resources/static/werkrevisor-dashboard.js:145, hint, as a line comment
[low] Redundant estimated marking for Jev at server/src/main/resources/static/werkrevisor-dashboard.js:41, hint, as a line comment
Classifier
7 of 7 units passed all questions (1 PR document(s)).
Usage: model `openrouter/anthropic/claude-sonnet-5.5`, LLM done, tokens counted before the call 31207, calls 1, tokens in 30419 / out 722 (reasoning included in out), duration 12.4 s, cost 0.0681 USD (reported), classifier `jev-1.13.0` calls 7, tokens in 5515, cost 0.0002 USD, finding judge `jev-1.13.0` calls 1, tokens in 1862, cost 0.0001 USD, config: defaults + host + repository (.werkrevisor.toml at base 5e73b70).
Reviewed head `2d1f2fc64002ae6183695532241df3fe6ab246fa` against base `5e73b70aa5ed2dcd3f67f3eb5245ab54ead4d995`, werkrevisor 0.18.0.
<!-- werkrevisor:2d1f2fc64002ae6183695532241df3fe6ab246fa -->
<!-- werkrevisor-verdict:YELLOW -->
<!-- werkrevisor-folded -->
<details><summary>🟡 werkrevisor YELLOW for <code>2d1f2fc</code>, superseded by <a href="http://git.javagil.de/mi/werkrevisor/pulls/22#issuecomment-1097">the result for <code>eac2c70</code></a></summary>
## 🟡 werkrevisor: YELLOW / HUMAN_REVIEW
Change kind: `mixed`.
### Reasons
- **YELLOW** risky paths changed: server/build.gradle.kts (server/*.gradle.kts)
- **hint** 3 finding(s) of low severity or rated minor by Jev: server/src/test/kotlin/de/hoennig/werkrevisor/server/UsageApiIntegrationTest.kt:163-164, server/src/main/resources/static/werkrevisor-dashboard.js:145, server/src/main/resources/static/werkrevisor-dashboard.js:41
- **hint** model recommends merge with caution
### Findings
1. **[medium] Changed assertion at line 163 is not weaker, but 30d case lost its old check** at `server/src/test/kotlin/de/hoennig/werkrevisor/server/UsageApiIntegrationTest.kt:163-164`, hint, still open in [an earlier line comment](http://git.javagil.de/mi/werkrevisor/pulls/22#issuecomment-1086)
2. **[low] Bar width uses estimated-agnostic total and drops a 60px scale** at `server/src/main/resources/static/werkrevisor-dashboard.js:145`, hint, as a line comment
3. **[low] Redundant estimated marking for Jev** at `server/src/main/resources/static/werkrevisor-dashboard.js:41`, hint, as a line comment
### Classifier
7 of 7 units passed all questions (1 PR document(s)).
<sub>
Usage: model `openrouter/anthropic/claude-sonnet-5.5`, LLM done, tokens counted before the call 31207, calls 1, tokens in 30419 / out 722 (reasoning included in out), duration 12.4 s, cost 0.0681 USD (reported), classifier `jev-1.13.0` calls 7, tokens in 5515, cost 0.0002 USD, finding judge `jev-1.13.0` calls 1, tokens in 1862, cost 0.0001 USD, config: defaults + host + repository (.werkrevisor.toml at base 5e73b70).<br>
Reviewed head `2d1f2fc64002ae6183695532241df3fe6ab246fa` against base `5e73b70aa5ed2dcd3f67f3eb5245ab54ead4d995`, werkrevisor 0.18.0.
</sub>
</details>
werkrevisor: YELLOW / HUMAN_REVIEW for 2d1f2fc64002ae6183695532241df3fe6ab246fa.
The result comment of werkrevisor holds the details.
werkrevisor: YELLOW / HUMAN_REVIEW for `2d1f2fc64002ae6183695532241df3fe6ab246fa`.
The result comment of werkrevisor holds the details.
<!-- werkrevisor-review:2d1f2fc64002ae6183695532241df3fe6ab246fa -->
[low] Redundant estimated marking for Jev (werkrevisor)
hint
The Jev line shows both the "≈" mark and the text "(estimated)", while the LLM line marks the estimated share differently. The duplicated marking is inconsistent but harmless.
**[low] Redundant estimated marking for Jev** (werkrevisor)
hint
The Jev line shows both the "≈" mark and the text "(estimated)", while the LLM line marks the estimated share differently. The duplicated marking is inconsistent but harmless.
[low] Bar width uses estimated-agnostic total and drops a 60px scale (werkrevisor)
hint
The bar scale changed from 60px to 40px without mention in the PR document. This is cosmetic, but the PR document's Measurement section only says tables cause no horizontal scrolling; the change of the bar size is undocumented.
**[low] Bar width uses estimated-agnostic total and drops a 60px scale** (werkrevisor)
hint
The bar scale changed from 60px to 40px without mention in the PR document. This is cosmetic, but the PR document's Measurement section only says tables cause no horizontal scrolling; the change of the bar size is undocumented.
hint 2 finding(s) of low severity or rated minor by Jev: server/src/test/kotlin/de/hoennig/werkrevisor/server/UsageApiIntegrationTest.kt:163-166, server/src/main/resources/static/werkrevisor-dashboard.js:103-106
hint model recommends merge with caution
Findings
[high] Weakened test assertion at changed line at server/src/test/kotlin/de/hoennig/werkrevisor/server/UsageApiIntegrationTest.kt:163-166, hint, still open in an earlier line comment
[medium] Per-PR cost marked "≈" for mixed data at server/src/main/resources/static/werkrevisor-dashboard.js:103-106, hint, as a line comment
Classifier
7 of 7 units passed all questions (1 PR document(s)).
1 answer ignored because of a confidence below [classifier] min_confidence.
Usage: model `openrouter/anthropic/claude-sonnet-5.5`, LLM done, tokens counted before the call 31642, calls 1, tokens in 30816 / out 666 (reasoning included in out), duration 11.8 s, cost 0.0683 USD (reported), classifier `jev-1.13.0` calls 7, tokens in 5527, cost 0.0002 USD, finding judge `jev-1.13.0` calls 2, tokens in 3353, cost 0.0001 USD, config: defaults + host + repository (.werkrevisor.toml at base 5e73b70).
Reviewed head `eac2c70e3a3c806bb80120713505966d280d0ce8` against base `5e73b70aa5ed2dcd3f67f3eb5245ab54ead4d995`, werkrevisor 0.18.0.
<!-- werkrevisor:eac2c70e3a3c806bb80120713505966d280d0ce8 -->
<!-- werkrevisor-verdict:YELLOW -->
<!-- werkrevisor-folded -->
<details><summary>🟡 werkrevisor YELLOW for <code>eac2c70</code>, superseded by <a href="http://git.javagil.de/mi/werkrevisor/pulls/22#issuecomment-1101">the result for <code>10b016d</code></a></summary>
## 🟡 werkrevisor: YELLOW / HUMAN_REVIEW
Change kind: `mixed`.
### Reasons
- **YELLOW** risky paths changed: server/build.gradle.kts (server/*.gradle.kts)
- **hint** 2 finding(s) of low severity or rated minor by Jev: server/src/test/kotlin/de/hoennig/werkrevisor/server/UsageApiIntegrationTest.kt:163-166, server/src/main/resources/static/werkrevisor-dashboard.js:103-106
- **hint** model recommends merge with caution
### Findings
1. **[high] Weakened test assertion at changed line** at `server/src/test/kotlin/de/hoennig/werkrevisor/server/UsageApiIntegrationTest.kt:163-166`, hint, still open in [an earlier line comment](http://git.javagil.de/mi/werkrevisor/pulls/22#issuecomment-1086)
2. **[medium] Per-PR cost marked "≈" for mixed data** at `server/src/main/resources/static/werkrevisor-dashboard.js:103-106`, hint, as a line comment
### Classifier
7 of 7 units passed all questions (1 PR document(s)).
1 answer 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 31642, calls 1, tokens in 30816 / out 666 (reasoning included in out), duration 11.8 s, cost 0.0683 USD (reported), classifier `jev-1.13.0` calls 7, tokens in 5527, cost 0.0002 USD, finding judge `jev-1.13.0` calls 2, tokens in 3353, cost 0.0001 USD, config: defaults + host + repository (.werkrevisor.toml at base 5e73b70).<br>
Reviewed head `eac2c70e3a3c806bb80120713505966d280d0ce8` against base `5e73b70aa5ed2dcd3f67f3eb5245ab54ead4d995`, werkrevisor 0.18.0.
</sub>
</details>
werkrevisor: YELLOW / HUMAN_REVIEW for eac2c70e3a3c806bb80120713505966d280d0ce8.
The result comment of werkrevisor holds the details.
werkrevisor: YELLOW / HUMAN_REVIEW for `eac2c70e3a3c806bb80120713505966d280d0ce8`.
The result comment of werkrevisor holds the details.
<!-- werkrevisor-review:eac2c70e3a3c806bb80120713505966d280d0ce8 -->
[medium] Per-PR cost marked "≈" for mixed data (werkrevisor)
hint; Jev: real 0.61, severity 2.5 of 3
usd(w.sums.costPerPullRequestUsd, w.sums.estimated) and the period and group totals use one flag for the whole sum. A window whose LLM part is reported but whose Jev part is estimated is marked "≈" for the total. This is intended, but unknownCostReviews amounts are then shown as a total that omits the unknown LLM part without a mark on the total itself, so the total can look complete.
**[medium] Per-PR cost marked "≈" for mixed data** (werkrevisor)
hint; Jev: real 0.61, severity 2.5 of 3
`usd(w.sums.costPerPullRequestUsd, w.sums.estimated)` and the period and group totals use one flag for the whole sum. A window whose LLM part is reported but whose Jev part is estimated is marked "≈" for the total. This is intended, but `unknownCostReviews` amounts are then shown as a total that omits the unknown LLM part without a mark on the total itself, so the total can look complete.
ai-review/assessment AI findings; a developer approval after checking them unlocks the merge; a human review request is pending; merge already scheduled
ORANGE 2 finding(s) that Jev rates as probably real and severe: server/src/main/resources/static/werkrevisor-dashboard.js:37-42, server/src/main/resources/static/werkrevisor-dashboard.js:23-24
hint 1 finding(s) of low severity or rated minor by Jev: server/src/test/kotlin/de/hoennig/werkrevisor/server/UsageApiIntegrationTest.kt:163-167
hint model recommends changes before merge
Findings
[medium] Split line marks Jev as reported when zero at server/src/main/resources/static/werkrevisor-dashboard.js:37-42, ORANGE, still open in an earlier line comment
[medium] Cost per pull request and Recent column marks at server/src/main/resources/static/werkrevisor-dashboard.js:23-24, ORANGE, as a line comment
[high] Weakened existing test assertion at server/src/test/kotlin/de/hoennig/werkrevisor/server/UsageApiIntegrationTest.kt:163-167, hint, still open in an earlier line comment
Classifier
7 of 7 units passed all questions (1 PR document(s)).
Usage: model `openrouter/anthropic/claude-sonnet-5.5`, LLM done, tokens counted before the call 31932, calls 1, tokens in 31132 / out 847 (reasoning included in out), duration 13.5 s, cost 0.0707 USD (reported), classifier `jev-1.13.0` calls 7, tokens in 5543, cost 0.0002 USD, finding judge `jev-1.13.0` calls 3, tokens in 5280, cost 0.0002 USD, config: defaults + host + repository (.werkrevisor.toml at base 5e73b70).
Reviewed head `10b016df0e5d2be1f8daf33b87839e7d81b62b90` against base `5e73b70aa5ed2dcd3f67f3eb5245ab54ead4d995`, werkrevisor 0.18.0.
<!-- werkrevisor:10b016df0e5d2be1f8daf33b87839e7d81b62b90 -->
<!-- werkrevisor-verdict:ORANGE -->
<!-- werkrevisor-folded -->
<details><summary>🟠 werkrevisor ORANGE for <code>10b016d</code>, superseded by <a href="http://git.javagil.de/mi/werkrevisor/pulls/22#issuecomment-1105">the result for <code>dbd7ad3</code></a></summary>
## 🟠 werkrevisor: ORANGE / FINDINGS
Change kind: `mixed`.
### Reasons
- **ORANGE** 2 finding(s) that Jev rates as probably real and severe: server/src/main/resources/static/werkrevisor-dashboard.js:37-42, server/src/main/resources/static/werkrevisor-dashboard.js:23-24
- **YELLOW** risky paths changed: server/build.gradle.kts (server/*.gradle.kts)
- **hint** 1 finding(s) of low severity or rated minor by Jev: server/src/test/kotlin/de/hoennig/werkrevisor/server/UsageApiIntegrationTest.kt:163-167
- **hint** model recommends changes before merge
### Findings
1. **[medium] Split line marks Jev as reported when zero** at `server/src/main/resources/static/werkrevisor-dashboard.js:37-42`, ORANGE, still open in [an earlier line comment](http://git.javagil.de/mi/werkrevisor/pulls/22#issuecomment-1094)
2. **[medium] Cost per pull request and Recent column marks** at `server/src/main/resources/static/werkrevisor-dashboard.js:23-24`, ORANGE, as a line comment
3. **[high] Weakened existing test assertion** at `server/src/test/kotlin/de/hoennig/werkrevisor/server/UsageApiIntegrationTest.kt:163-167`, hint, still open in [an earlier line comment](http://git.javagil.de/mi/werkrevisor/pulls/22#issuecomment-1086)
### Classifier
7 of 7 units passed all questions (1 PR document(s)).
<sub>
Usage: model `openrouter/anthropic/claude-sonnet-5.5`, LLM done, tokens counted before the call 31932, calls 1, tokens in 31132 / out 847 (reasoning included in out), duration 13.5 s, cost 0.0707 USD (reported), classifier `jev-1.13.0` calls 7, tokens in 5543, cost 0.0002 USD, finding judge `jev-1.13.0` calls 3, tokens in 5280, cost 0.0002 USD, config: defaults + host + repository (.werkrevisor.toml at base 5e73b70).<br>
Reviewed head `10b016df0e5d2be1f8daf33b87839e7d81b62b90` against base `5e73b70aa5ed2dcd3f67f3eb5245ab54ead4d995`, werkrevisor 0.18.0.
</sub>
</details>
werkrevisor: ORANGE / FINDINGS for 10b016df0e5d2be1f8daf33b87839e7d81b62b90.
The result comment of werkrevisor holds the details.
werkrevisor: ORANGE / FINDINGS for `10b016df0e5d2be1f8daf33b87839e7d81b62b90`.
The result comment of werkrevisor holds the details.
<!-- werkrevisor-review:10b016df0e5d2be1f8daf33b87839e7d81b62b90 -->
[medium] Cost per pull request and Recent column marks (werkrevisor)
ORANGE; Jev: real 0.64, severity 2.5 of 3
The per-day bar width now uses 40 px and .columns td forces nowrap with a 300px minimum. On narrow viewports the three tables can overflow, because the .columns wrapper has no overflow-x handling. The PR claims "no horizontal scrolling" based on a single manual check only.
**[medium] Cost per pull request and Recent column marks** (werkrevisor)
ORANGE; Jev: real 0.64, severity 2.5 of 3
The per-day bar width now uses 40 px and `.columns td` forces `nowrap` with a 300px minimum. On narrow viewports the three tables can overflow, because the `.columns` wrapper has no `overflow-x` handling. The PR claims "no horizontal scrolling" based on a single manual check only.
hint 3 finding(s) of low severity or rated minor by Jev: server/src/test/kotlin/de/hoennig/werkrevisor/server/UsageApiIntegrationTest.kt:163-166, server/src/main/resources/static/werkrevisor-dashboard.js:41, docs/prs/2026-10-06-PR#22-estimated-costs-and-split.md:53-56
hint model recommends changes before merge
Findings
[high] Weakened existing test assertion at server/src/test/kotlin/de/hoennig/werkrevisor/server/UsageApiIntegrationTest.kt:163-166, hint, still open in an earlier line comment
[medium] Per-PR cost marked inconsistently with split at server/src/main/resources/static/werkrevisor-dashboard.js:41, hint, still open in an earlier line comment
[low] Scenario example inconsistent with code at docs/prs/2026-10-06-PR#22-estimated-costs-and-split.md:53-56, hint, as a line comment
Classifier
7 of 7 units passed all questions (1 PR document(s)).
1 answer ignored because of a confidence below [classifier] min_confidence.
Usage: model `openrouter/anthropic/claude-sonnet-5.5`, LLM done, tokens counted before the call 32327, calls 1, tokens in 31494 / out 881 (reasoning included in out), duration 12.7 s, cost 0.0718 USD (reported), classifier `jev-1.13.0` calls 7, tokens in 5578, cost 0.0002 USD, finding judge `jev-1.13.0` calls 2, tokens in 3410, cost 0.0001 USD, config: defaults + host + repository (.werkrevisor.toml at base 5e73b70).
Reviewed head `dbd7ad3838c899cd86ffc27feadcea16c951a9b4` against base `5e73b70aa5ed2dcd3f67f3eb5245ab54ead4d995`, werkrevisor 0.18.0.
<!-- werkrevisor:dbd7ad3838c899cd86ffc27feadcea16c951a9b4 -->
<!-- werkrevisor-verdict:YELLOW -->
<!-- werkrevisor-folded -->
<details><summary>🟡 werkrevisor YELLOW for <code>dbd7ad3</code>, superseded by <a href="http://git.javagil.de/mi/werkrevisor/pulls/22#issuecomment-1109">the result for <code>f9d84c0</code></a></summary>
## 🟡 werkrevisor: YELLOW / HUMAN_REVIEW
Change kind: `mixed`.
### Reasons
- **YELLOW** risky paths changed: server/build.gradle.kts (server/*.gradle.kts)
- **hint** 3 finding(s) of low severity or rated minor by Jev: server/src/test/kotlin/de/hoennig/werkrevisor/server/UsageApiIntegrationTest.kt:163-166, server/src/main/resources/static/werkrevisor-dashboard.js:41, docs/prs/2026-10-06-PR#22-estimated-costs-and-split.md:53-56
- **hint** model recommends changes before merge
### Findings
1. **[high] Weakened existing test assertion** at `server/src/test/kotlin/de/hoennig/werkrevisor/server/UsageApiIntegrationTest.kt:163-166`, hint, still open in [an earlier line comment](http://git.javagil.de/mi/werkrevisor/pulls/22#issuecomment-1086)
2. **[medium] Per-PR cost marked inconsistently with split** at `server/src/main/resources/static/werkrevisor-dashboard.js:41`, hint, still open in [an earlier line comment](http://git.javagil.de/mi/werkrevisor/pulls/22#issuecomment-1094)
3. **[low] Scenario example inconsistent with code** at `docs/prs/2026-10-06-PR#22-estimated-costs-and-split.md:53-56`, hint, as a line comment
### Classifier
7 of 7 units passed all questions (1 PR document(s)).
1 answer 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 32327, calls 1, tokens in 31494 / out 881 (reasoning included in out), duration 12.7 s, cost 0.0718 USD (reported), classifier `jev-1.13.0` calls 7, tokens in 5578, cost 0.0002 USD, finding judge `jev-1.13.0` calls 2, tokens in 3410, cost 0.0001 USD, config: defaults + host + repository (.werkrevisor.toml at base 5e73b70).<br>
Reviewed head `dbd7ad3838c899cd86ffc27feadcea16c951a9b4` against base `5e73b70aa5ed2dcd3f67f3eb5245ab54ead4d995`, werkrevisor 0.18.0.
</sub>
</details>
werkrevisor: YELLOW / HUMAN_REVIEW for dbd7ad3838c899cd86ffc27feadcea16c951a9b4.
The result comment of werkrevisor holds the details.
werkrevisor: YELLOW / HUMAN_REVIEW for `dbd7ad3838c899cd86ffc27feadcea16c951a9b4`.
The result comment of werkrevisor holds the details.
<!-- werkrevisor-review:dbd7ad3838c899cd86ffc27feadcea16c951a9b4 -->
[low] Scenario example inconsistent with code (werkrevisor)
hint
Scenario#22.02 gives 0.18 USD LLM plus 0.0007 USD Jev and says the LLM line shows "= 0.18 USD". The code formats values below 1 with 4 decimals, so it renders "= 0.1800 USD". The total is also shown as "0.1807 USD" without the "≈" mark, although a Jev cost makes it an estimate.
**[low] Scenario example inconsistent with code** (werkrevisor)
hint
Scenario#22.02 gives 0.18 USD LLM plus 0.0007 USD Jev and says the LLM line shows "= 0.18 USD". The code formats values below 1 with 4 decimals, so it renders "= 0.1800 USD". The total is also shown as "0.1807 USD" without the "≈" mark, although a Jev cost makes it an estimate.
ai-review/assessment AI findings; a developer approval after checking them unlocks the merge; a human review request is pending; merge already scheduled
hint 2 finding(s) of low severity or rated minor by Jev: server/src/test/kotlin/de/hoennig/werkrevisor/server/UsageApiIntegrationTest.kt:163-166, werkrevisor/__init__.py:1
hint model recommends changes before merge
Findings
[medium] Bar chart and split ignore the unknown LLM part consistently, but the LLM line shows "=" when LLM costs are unknown at server/src/main/resources/static/werkrevisor-dashboard.js:41, ORANGE, still open in an earlier line comment
[high] Weakened test assertion in the 30d window at server/src/test/kotlin/de/hoennig/werkrevisor/server/UsageApiIntegrationTest.kt:163-166, hint, still open in an earlier line comment
[low] Dashboard marks all Jev costs as estimated, but a zero Jev cost shows "=" at werkrevisor/__init__.py: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 32414, calls 1, tokens in 31568 / out 827 (reasoning included in out), duration 12.0 s, cost 0.0714 USD (reported), classifier `jev-1.13.0` calls 7, tokens in 5585, cost 0.0002 USD, finding judge `jev-1.13.0` calls 2, tokens in 3389, cost 0.0001 USD, config: defaults + host + repository (.werkrevisor.toml at base 5e73b70).
Reviewed head `f9d84c09bf475c0f7299937779d668380ff5c6ee` against base `5e73b70aa5ed2dcd3f67f3eb5245ab54ead4d995`, werkrevisor 0.18.0.
<!-- werkrevisor:f9d84c09bf475c0f7299937779d668380ff5c6ee -->
<!-- werkrevisor-verdict:ORANGE -->
<!-- werkrevisor-folded -->
<details><summary>🟠 werkrevisor ORANGE for <code>f9d84c0</code>, superseded by <a href="http://git.javagil.de/mi/werkrevisor/pulls/22#issuecomment-1113">the result for <code>21d05a0</code></a></summary>
## 🟠 werkrevisor: ORANGE / FINDINGS
Change kind: `mixed`.
### Reasons
- **ORANGE** 1 finding(s) that Jev rates as probably real and severe: server/src/main/resources/static/werkrevisor-dashboard.js:41
- **YELLOW** risky paths changed: server/build.gradle.kts (server/*.gradle.kts)
- **hint** 2 finding(s) of low severity or rated minor by Jev: server/src/test/kotlin/de/hoennig/werkrevisor/server/UsageApiIntegrationTest.kt:163-166, werkrevisor/__init__.py:1
- **hint** model recommends changes before merge
### Findings
1. **[medium] Bar chart and split ignore the unknown LLM part consistently, but the LLM line shows "=" when LLM costs are unknown** at `server/src/main/resources/static/werkrevisor-dashboard.js:41`, ORANGE, still open in [an earlier line comment](http://git.javagil.de/mi/werkrevisor/pulls/22#issuecomment-1094)
2. **[high] Weakened test assertion in the 30d window** at `server/src/test/kotlin/de/hoennig/werkrevisor/server/UsageApiIntegrationTest.kt:163-166`, hint, still open in [an earlier line comment](http://git.javagil.de/mi/werkrevisor/pulls/22#issuecomment-1086)
3. **[low] Dashboard marks all Jev costs as estimated, but a zero Jev cost shows "="** at `werkrevisor/__init__.py: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 32414, calls 1, tokens in 31568 / out 827 (reasoning included in out), duration 12.0 s, cost 0.0714 USD (reported), classifier `jev-1.13.0` calls 7, tokens in 5585, cost 0.0002 USD, finding judge `jev-1.13.0` calls 2, tokens in 3389, cost 0.0001 USD, config: defaults + host + repository (.werkrevisor.toml at base 5e73b70).<br>
Reviewed head `f9d84c09bf475c0f7299937779d668380ff5c6ee` against base `5e73b70aa5ed2dcd3f67f3eb5245ab54ead4d995`, werkrevisor 0.18.0.
</sub>
</details>
werkrevisor: ORANGE / FINDINGS for f9d84c09bf475c0f7299937779d668380ff5c6ee.
The result comment of werkrevisor holds the details.
werkrevisor: ORANGE / FINDINGS for `f9d84c09bf475c0f7299937779d668380ff5c6ee`.
The result comment of werkrevisor holds the details.
<!-- werkrevisor-review:f9d84c09bf475c0f7299937779d668380ff5c6ee -->
[low] Dashboard marks all Jev costs as estimated, but a zero Jev cost shows "=" (werkrevisor)
hint
usd(sums.jevCostUsd, sums.jevCostUsd > 0) shows "= 0.0000 USD" for Jev when no Jev ran. This is harmless but can read as a provider-reported zero. The PR document says the Jev costs are always calculated.
**[low] Dashboard marks all Jev costs as estimated, but a zero Jev cost shows "="** (werkrevisor)
hint
`usd(sums.jevCostUsd, sums.jevCostUsd > 0)` shows "= 0.0000 USD" for Jev when no Jev ran. This is harmless but can read as a provider-reported zero. The PR document says the Jev costs are always calculated.
hint 3 finding(s) of low severity or rated minor by Jev: server/src/test/kotlin/de/hoennig/werkrevisor/server/UsageApiIntegrationTest.kt:163-166, server/src/main/resources/static/werkrevisor-dashboard.js:106-109, server/src/main/kotlin/de/hoennig/werkrevisor/server/Statistics.kt:23-24
hint model recommends merge with caution
Findings
[high] Weakened test: assertion value changed at server/src/test/kotlin/de/hoennig/werkrevisor/server/UsageApiIntegrationTest.kt:163-166, hint, still open in an earlier line comment
[medium] Per-PR cost marked inconsistently at server/src/main/resources/static/werkrevisor-dashboard.js:106-109, hint, as a line comment
[low] Duplicated estimate logic at server/src/main/kotlin/de/hoennig/werkrevisor/server/Statistics.kt:23-24, hint, as a line comment
Classifier
7 of 7 units passed all questions (1 PR document(s)).
1 answer ignored because of a confidence below [classifier] min_confidence.
Usage: model `openrouter/anthropic/claude-sonnet-5.5`, LLM done, tokens counted before the call 32475, calls 1, tokens in 31643 / out 812 (reasoning included in out), duration 12.4 s, cost 0.0714 USD (reported), classifier `jev-1.13.0` calls 7, tokens in 5624, cost 0.0002 USD, finding judge `jev-1.13.0` calls 2, tokens in 3254, cost 0.0001 USD, config: defaults + host + repository (.werkrevisor.toml at base 5e73b70).
Reviewed head `21d05a0c1645335d41df35e72b5d74d58aeac7ac` against base `5e73b70aa5ed2dcd3f67f3eb5245ab54ead4d995`, werkrevisor 0.18.0.
<!-- werkrevisor:21d05a0c1645335d41df35e72b5d74d58aeac7ac -->
<!-- werkrevisor-verdict:YELLOW -->
<!-- werkrevisor-folded -->
<details><summary>🟡 werkrevisor YELLOW for <code>21d05a0</code>, superseded by <a href="http://git.javagil.de/mi/werkrevisor/pulls/22#issuecomment-1118">the result for <code>8210e66</code></a></summary>
## 🟡 werkrevisor: YELLOW / HUMAN_REVIEW
Change kind: `mixed`.
### Reasons
- **YELLOW** risky paths changed: server/build.gradle.kts (server/*.gradle.kts)
- **hint** 3 finding(s) of low severity or rated minor by Jev: server/src/test/kotlin/de/hoennig/werkrevisor/server/UsageApiIntegrationTest.kt:163-166, server/src/main/resources/static/werkrevisor-dashboard.js:106-109, server/src/main/kotlin/de/hoennig/werkrevisor/server/Statistics.kt:23-24
- **hint** model recommends merge with caution
### Findings
1. **[high] Weakened test: assertion value changed** at `server/src/test/kotlin/de/hoennig/werkrevisor/server/UsageApiIntegrationTest.kt:163-166`, hint, still open in [an earlier line comment](http://git.javagil.de/mi/werkrevisor/pulls/22#issuecomment-1086)
2. **[medium] Per-PR cost marked inconsistently** at `server/src/main/resources/static/werkrevisor-dashboard.js:106-109`, hint, as a line comment
3. **[low] Duplicated estimate logic** at `server/src/main/kotlin/de/hoennig/werkrevisor/server/Statistics.kt:23-24`, hint, as a line comment
### Classifier
7 of 7 units passed all questions (1 PR document(s)).
1 answer 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 32475, calls 1, tokens in 31643 / out 812 (reasoning included in out), duration 12.4 s, cost 0.0714 USD (reported), classifier `jev-1.13.0` calls 7, tokens in 5624, cost 0.0002 USD, finding judge `jev-1.13.0` calls 2, tokens in 3254, cost 0.0001 USD, config: defaults + host + repository (.werkrevisor.toml at base 5e73b70).<br>
Reviewed head `21d05a0c1645335d41df35e72b5d74d58aeac7ac` against base `5e73b70aa5ed2dcd3f67f3eb5245ab54ead4d995`, werkrevisor 0.18.0.
</sub>
</details>
werkrevisor: YELLOW / HUMAN_REVIEW for 21d05a0c1645335d41df35e72b5d74d58aeac7ac.
The result comment of werkrevisor holds the details.
werkrevisor: YELLOW / HUMAN_REVIEW for `21d05a0c1645335d41df35e72b5d74d58aeac7ac`.
The result comment of werkrevisor holds the details.
<!-- werkrevisor-review:21d05a0c1645335d41df35e72b5d74d58aeac7ac -->
Sums.estimated and UsageRecord.estimated implement the same rule separately, and the dashboard repeats the LLM-estimate condition in split. A later change to the rule may update only one place and make the card and the recent list disagree.
**[low] Duplicated estimate logic** (werkrevisor)
hint
`Sums.estimated` and `UsageRecord.estimated` implement the same rule separately, and the dashboard repeats the LLM-estimate condition in `split`. A later change to the rule may update only one place and make the card and the recent list disagree.
The .split line for the LLM uses estimatedLlmReviews > 0 || unknownCostReviews > 0, while the total uses w.sums.estimated, which also includes jevCostUsd > 0. Because the Jev cost is nearly always above 0, every total and the cost per pull request show "≈", so the "=" case in the documentation scenario (only LLM costs reported) is effectively unreachable once Jev costs exist. This is consistent with the code, but the table row "only LLM costs reported by OpenRouter" shows "=" only for periods without any Jev cost.
**[medium] Per-PR cost marked inconsistently** (werkrevisor)
hint; Jev: real 0.54, severity 2.1 of 3
The `.split` line for the LLM uses `estimatedLlmReviews > 0 || unknownCostReviews > 0`, while the total uses `w.sums.estimated`, which also includes `jevCostUsd > 0`. Because the Jev cost is nearly always above 0, every total and the cost per pull request show "≈", so the "=" case in the documentation scenario (only LLM costs reported) is effectively unreachable once Jev costs exist. This is consistent with the code, but the table row "only LLM costs reported by OpenRouter" shows "=" only for periods without any Jev cost.
hint 4 finding(s) of low severity or rated minor by Jev: server/src/test/kotlin/de/hoennig/werkrevisor/server/UsageApiIntegrationTest.kt:163-167, docs/prs/2026-10-06-PR#22-estimated-costs-and-split.md:35-56, server/src/main/kotlin/de/hoennig/werkrevisor/server/Statistics.kt:26 and 1 more
hint model recommends changes before merge
Findings
[high] Weakened assertion in existing test at server/src/test/kotlin/de/hoennig/werkrevisor/server/UsageApiIntegrationTest.kt:163-167, hint, still open in an earlier line comment
[medium] Document contradicts code and test at docs/prs/2026-10-06-PR#22-estimated-costs-and-split.md:35-56, hint, still open in an earlier line comment
[low] Duplicated estimate logic at server/src/main/kotlin/de/hoennig/werkrevisor/server/Statistics.kt:26, hint, as a line comment
1 more finding(s) not shown.
Classifier
7 of 7 units passed all questions (1 PR document(s)).
1 answer ignored because of a confidence below [classifier] min_confidence.
Usage: model `openrouter/anthropic/claude-sonnet-5.5`, LLM done, tokens counted before the call 32546, calls 1, tokens in 31716 / out 921 (reasoning included in out), duration 12.4 s, cost 0.0726 USD (reported), classifier `jev-1.13.0` calls 7, tokens in 5633, cost 0.0002 USD, finding judge `jev-1.13.0` calls 2, tokens in 3747, cost 0.0002 USD, config: defaults + host + repository (.werkrevisor.toml at base 5e73b70).
Reviewed head `8210e66d135e6f6c6a3c2253d6cbc46fa434d5e0` against base `5e73b70aa5ed2dcd3f67f3eb5245ab54ead4d995`, werkrevisor 0.18.0.
<!-- werkrevisor:8210e66d135e6f6c6a3c2253d6cbc46fa434d5e0 -->
<!-- werkrevisor-verdict:YELLOW -->
## 🟡 werkrevisor: YELLOW / HUMAN_REVIEW
Change kind: `mixed`.
### Reasons
- **YELLOW** risky paths changed: server/build.gradle.kts (server/*.gradle.kts)
- **hint** 4 finding(s) of low severity or rated minor by Jev: server/src/test/kotlin/de/hoennig/werkrevisor/server/UsageApiIntegrationTest.kt:163-167, docs/prs/2026-10-06-PR#22-estimated-costs-and-split.md:35-56, server/src/main/kotlin/de/hoennig/werkrevisor/server/Statistics.kt:26 and 1 more
- **hint** model recommends changes before merge
### Findings
1. **[high] Weakened assertion in existing test** at `server/src/test/kotlin/de/hoennig/werkrevisor/server/UsageApiIntegrationTest.kt:163-167`, hint, still open in [an earlier line comment](http://git.javagil.de/mi/werkrevisor/pulls/22#issuecomment-1086)
2. **[medium] Document contradicts code and test** at `docs/prs/2026-10-06-PR#22-estimated-costs-and-split.md:35-56`, hint, still open in [an earlier line comment](http://git.javagil.de/mi/werkrevisor/pulls/22#issuecomment-1106)
3. **[low] Duplicated estimate logic** at `server/src/main/kotlin/de/hoennig/werkrevisor/server/Statistics.kt:26`, hint, as a line comment
1 more finding(s) not shown.
### Classifier
7 of 7 units passed all questions (1 PR document(s)).
1 answer 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 32546, calls 1, tokens in 31716 / out 921 (reasoning included in out), duration 12.4 s, cost 0.0726 USD (reported), classifier `jev-1.13.0` calls 7, tokens in 5633, cost 0.0002 USD, finding judge `jev-1.13.0` calls 2, tokens in 3747, cost 0.0002 USD, config: defaults + host + repository (.werkrevisor.toml at base 5e73b70).<br>
Reviewed head `8210e66d135e6f6c6a3c2253d6cbc46fa434d5e0` against base `5e73b70aa5ed2dcd3f67f3eb5245ab54ead4d995`, werkrevisor 0.18.0.
</sub>
werkrevisor: YELLOW / HUMAN_REVIEW for 8210e66d135e6f6c6a3c2253d6cbc46fa434d5e0.
The result comment of werkrevisor holds the details.
werkrevisor: YELLOW / HUMAN_REVIEW for `8210e66d135e6f6c6a3c2253d6cbc46fa434d5e0`.
The result comment of werkrevisor holds the details.
<!-- werkrevisor-review:8210e66d135e6f6c6a3c2253d6cbc46fa434d5e0 -->
The Measurement section narrates a manual run ("ran locally with the 180 usage records") without a result that can be checked, such as a specific observed value.
**[low] Narrated measurement** (werkrevisor)
hint
The Measurement section narrates a manual run ("ran locally with the 180 usage records") without a result that can be checked, such as a specific observed value.
UsageRecord.estimated and Sums.estimated implement the same rule in two places. A change to one can make the recent-review rows disagree with the sums.
**[low] Duplicated estimate logic** (werkrevisor)
hint
`UsageRecord.estimated` and `Sums.estimated` implement the same rule in two places. A change to one can make the recent-review rows disagree with the sums.
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 docs/prs/2026-10-06-PR#22-estimated-costs-and-split.md.
🤖 Generated with Claude Code
🟠 werkrevisor ORANGE for
a799395, superseded by the result for2d1f2fc🟠 werkrevisor: ORANGE / FINDINGS
Change kind:
mixed.Reasons
Findings
[high] Recent cost omits Jev when LLM cost is unknown at
server/src/main/kotlin/de/hoennig/werkrevisor/server/Statistics.kt:123-125, ORANGE, as a line comment[high] Changed 30d assertion value at
server/src/test/kotlin/de/hoennig/werkrevisor/server/UsageApiIntegrationTest.kt:163-164, hint, as a line comment[medium] Document contradicts Scenario table at
docs/prs/2026-10-06-PR#22-estimated-costs-and-split.md:64-65, hint, as a line commentClassifier
7 of 7 units passed all questions (1 PR document(s)).
Usage: model `openrouter/anthropic/claude-sonnet-5.5`, LLM done, tokens counted before the call 30411, calls 1, tokens in 29579 / out 813 (reasoning included in out), duration 13.1 s, cost 0.0673 USD (reported), classifier `jev-1.13.0` calls 7, tokens in 5484, cost 0.0002 USD, finding judge `jev-1.13.0` calls 3, tokens in 4533, cost 0.0002 USD, config: defaults + host + repository (.werkrevisor.toml at base5e73b70).Reviewed head `a799395736909fc356e7d176cfb5a5287d343709` against base `5e73b70aa5ed2dcd3f67f3eb5245ab54ead4d995`, werkrevisor 0.18.0.
werkrevisor: ORANGE / FINDINGS for
a799395736909fc356e7d176cfb5a5287d343709.The result comment of werkrevisor holds the details.
@@ -0,0 +61,4 @@## The Solution- `GET /api/stats` returns per sum also `llmCostUsd`, `jevCostUsd` and `estimatedLlmReviews`;[medium] Document contradicts Scenario table (werkrevisor)
hint; Jev: real 0.85, severity 1.7 of 3
The scenario table says only reported LLM costs show no mark, yet the solution says Jev costs "always count as estimated". The code marks a period as estimated only if
jevCostUsd > 0. A Jev cost of 0 is not marked. The wording "always" is therefore inaccurate. Scenario#22.02 also states a 0.0007 USD Jev cost, while the test uses 0.001 USD.@@ -113,6 +123,7 @@ class StatisticsService(it.totalCostUsd.takeIf { _ ->[high] Recent cost omits Jev when LLM cost is unknown (werkrevisor)
ORANGE; Jev: real 0.75, severity 2.9 of 3
The
Recentrow showstotalCostUsdonly ifcostKnownis true, whileSums.costUsdnow counts the Jev part of reviews with unknown LLM costs. The dashboard totals therefore include costs that the recent list shows as "unknown". The PR changes the sum semantics but not this row, so the two views disagree.@@ -161,3 +161,3 @@}with(window(stats, "30d")) {this["costUsd"].asDouble() shouldBe (0.5015 plusOrMinus 1e-9)// The Jev part of a review with unknown LLM costs still counts.[high] Changed 30d assertion value (werkrevisor)
hint; Jev: real 0.41, severity 2.2 of 3
The expected 30d
costUsdchanged from 0.5015 to 0.502 because Jev costs of unknown-LLM reviews now count. This is a deliberate behavior change that the PR document lists. The new value is still checked with 1e-9 tolerance, so the test is not weaker. The remaining risk is that the stated behavior (Jev costs counted for unknown LLM costs) conflicts withunknownCostReviewsandcostPerPullRequestUsd, which now divide a partly known total by all PRs.🟡 werkrevisor YELLOW for
2d1f2fc, superseded by the result foreac2c70🟡 werkrevisor: YELLOW / HUMAN_REVIEW
Change kind:
mixed.Reasons
Findings
[medium] Changed assertion at line 163 is not weaker, but 30d case lost its old check at
server/src/test/kotlin/de/hoennig/werkrevisor/server/UsageApiIntegrationTest.kt:163-164, hint, still open in an earlier line comment[low] Bar width uses estimated-agnostic total and drops a 60px scale at
server/src/main/resources/static/werkrevisor-dashboard.js:145, hint, as a line comment[low] Redundant estimated marking for Jev at
server/src/main/resources/static/werkrevisor-dashboard.js:41, hint, as a line commentClassifier
7 of 7 units passed all questions (1 PR document(s)).
Usage: model `openrouter/anthropic/claude-sonnet-5.5`, LLM done, tokens counted before the call 31207, calls 1, tokens in 30419 / out 722 (reasoning included in out), duration 12.4 s, cost 0.0681 USD (reported), classifier `jev-1.13.0` calls 7, tokens in 5515, cost 0.0002 USD, finding judge `jev-1.13.0` calls 1, tokens in 1862, cost 0.0001 USD, config: defaults + host + repository (.werkrevisor.toml at base5e73b70).Reviewed head `2d1f2fc64002ae6183695532241df3fe6ab246fa` against base `5e73b70aa5ed2dcd3f67f3eb5245ab54ead4d995`, werkrevisor 0.18.0.
werkrevisor: YELLOW / HUMAN_REVIEW for
2d1f2fc64002ae6183695532241df3fe6ab246fa.The result comment of werkrevisor holds the details.
@@ -31,0 +38,4 @@const llm = sums.estimatedLlmReviews? `LLM via OpenRouter ${usd(sums.llmCostUsd, true)} (${sums.estimatedLlmReviews} of ${sums.reviews} reviews estimated)`: `LLM via OpenRouter ${usd(sums.llmCostUsd)}`;const jev = `Jev via TypeSafe ${usd(sums.jevCostUsd, sums.jevCostUsd > 0)}${sums.jevCostUsd > 0 ? " (estimated)" : ""}`;[low] Redundant estimated marking for Jev (werkrevisor)
hint
The Jev line shows both the "≈" mark and the text "(estimated)", while the LLM line marks the estimated share differently. The duplicated marking is inconsistent but harmless.
@@ -130,2 +143,3 @@el("td", { class: "num" }, usd(p.sums.costUsd, p.sums.estimated)),el("td", { class: "num" }, p.sums.reviews),el("td", {}, el("span", { class: "bar", style: `width:${Math.round((60 * p.sums.costUsd) / max)}px` })),el("td", {}, el("span", { class: "bar", style: `width:${Math.round((40 * p.sums.costUsd) / max)}px` })),[low] Bar width uses estimated-agnostic total and drops a 60px scale (werkrevisor)
hint
The bar scale changed from 60px to 40px without mention in the PR document. This is cosmetic, but the PR document's Measurement section only says tables cause no horizontal scrolling; the change of the bar size is undocumented.
🟡 werkrevisor YELLOW for
eac2c70, superseded by the result for10b016d🟡 werkrevisor: YELLOW / HUMAN_REVIEW
Change kind:
mixed.Reasons
Findings
[high] Weakened test assertion at changed line at
server/src/test/kotlin/de/hoennig/werkrevisor/server/UsageApiIntegrationTest.kt:163-166, hint, still open in an earlier line comment[medium] Per-PR cost marked "≈" for mixed data at
server/src/main/resources/static/werkrevisor-dashboard.js:103-106, hint, as a line commentClassifier
7 of 7 units passed all questions (1 PR document(s)).
Usage: model `openrouter/anthropic/claude-sonnet-5.5`, LLM done, tokens counted before the call 31642, calls 1, tokens in 30816 / out 666 (reasoning included in out), duration 11.8 s, cost 0.0683 USD (reported), classifier `jev-1.13.0` calls 7, tokens in 5527, cost 0.0002 USD, finding judge `jev-1.13.0` calls 2, tokens in 3353, cost 0.0001 USD, config: defaults + host + repository (.werkrevisor.toml at base1 answer ignored because of a confidence below [classifier] min_confidence.
5e73b70).Reviewed head `eac2c70e3a3c806bb80120713505966d280d0ce8` against base `5e73b70aa5ed2dcd3f67f3eb5245ab54ead4d995`, werkrevisor 0.18.0.
werkrevisor: YELLOW / HUMAN_REVIEW for
eac2c70e3a3c806bb80120713505966d280d0ce8.The result comment of werkrevisor holds the details.
@@ -90,3 +101,3 @@{ class: "card" },el("h3", {}, LABELS[w.name] || w.name),el("div", { class: "cost" }, usd(w.sums.costUsd)),el("div", { class: "cost" }, usd(w.sums.costUsd, w.sums.estimated)),[medium] Per-PR cost marked "≈" for mixed data (werkrevisor)
hint; Jev: real 0.61, severity 2.5 of 3
usd(w.sums.costPerPullRequestUsd, w.sums.estimated)and the period and group totals use one flag for the whole sum. A window whose LLM part is reported but whose Jev part is estimated is marked "≈" for the total. This is intended, butunknownCostReviewsamounts are then shown as a total that omits the unknown LLM part without a mark on the total itself, so the total can look complete.🟠 werkrevisor ORANGE for
10b016d, superseded by the result fordbd7ad3🟠 werkrevisor: ORANGE / FINDINGS
Change kind:
mixed.Reasons
Findings
[medium] Split line marks Jev as reported when zero at
server/src/main/resources/static/werkrevisor-dashboard.js:37-42, ORANGE, still open in an earlier line comment[medium] Cost per pull request and Recent column marks at
server/src/main/resources/static/werkrevisor-dashboard.js:23-24, ORANGE, as a line comment[high] Weakened existing test assertion at
server/src/test/kotlin/de/hoennig/werkrevisor/server/UsageApiIntegrationTest.kt:163-167, hint, still open in an earlier line commentClassifier
7 of 7 units passed all questions (1 PR document(s)).
Usage: model `openrouter/anthropic/claude-sonnet-5.5`, LLM done, tokens counted before the call 31932, calls 1, tokens in 31132 / out 847 (reasoning included in out), duration 13.5 s, cost 0.0707 USD (reported), classifier `jev-1.13.0` calls 7, tokens in 5543, cost 0.0002 USD, finding judge `jev-1.13.0` calls 3, tokens in 5280, cost 0.0002 USD, config: defaults + host + repository (.werkrevisor.toml at base5e73b70).Reviewed head `10b016df0e5d2be1f8daf33b87839e7d81b62b90` against base `5e73b70aa5ed2dcd3f67f3eb5245ab54ead4d995`, werkrevisor 0.18.0.
werkrevisor: ORANGE / FINDINGS for
10b016df0e5d2be1f8daf33b87839e7d81b62b90.The result comment of werkrevisor holds the details.
@@ -19,3 +21,3 @@.verdict { font-weight: 600; }.bar { display: inline-block; height: 8px; background: var(--wr-accent, #0969da); border-radius: 2px; }.columns { display: grid; grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); gap: 16px; }.columns { display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: 16px; }[medium] Cost per pull request and Recent column marks (werkrevisor)
ORANGE; Jev: real 0.64, severity 2.5 of 3
The per-day bar width now uses 40 px and
.columns tdforcesnowrapwith a 300px minimum. On narrow viewports the three tables can overflow, because the.columnswrapper has nooverflow-xhandling. The PR claims "no horizontal scrolling" based on a single manual check only.🟡 werkrevisor YELLOW for
dbd7ad3, superseded by the result forf9d84c0🟡 werkrevisor: YELLOW / HUMAN_REVIEW
Change kind:
mixed.Reasons
Findings
[high] Weakened existing test assertion at
server/src/test/kotlin/de/hoennig/werkrevisor/server/UsageApiIntegrationTest.kt:163-166, hint, still open in an earlier line comment[medium] Per-PR cost marked inconsistently with split at
server/src/main/resources/static/werkrevisor-dashboard.js:41, hint, still open in an earlier line comment[low] Scenario example inconsistent with code at
docs/prs/2026-10-06-PR#22-estimated-costs-and-split.md:53-56, hint, as a line commentClassifier
7 of 7 units passed all questions (1 PR document(s)).
Usage: model `openrouter/anthropic/claude-sonnet-5.5`, LLM done, tokens counted before the call 32327, calls 1, tokens in 31494 / out 881 (reasoning included in out), duration 12.7 s, cost 0.0718 USD (reported), classifier `jev-1.13.0` calls 7, tokens in 5578, cost 0.0002 USD, finding judge `jev-1.13.0` calls 2, tokens in 3410, cost 0.0001 USD, config: defaults + host + repository (.werkrevisor.toml at base1 answer ignored because of a confidence below [classifier] min_confidence.
5e73b70).Reviewed head `dbd7ad3838c899cd86ffc27feadcea16c951a9b4` against base `5e73b70aa5ed2dcd3f67f3eb5245ab54ead4d995`, werkrevisor 0.18.0.
werkrevisor: YELLOW / HUMAN_REVIEW for
dbd7ad3838c899cd86ffc27feadcea16c951a9b4.The result comment of werkrevisor holds the details.
@@ -0,0 +50,4 @@So that the reader sees what each provider costs.- **Given** the reviews of the last 24 hours cost 0.18 USD for the LLM and 0.0007 USD for Jev[low] Scenario example inconsistent with code (werkrevisor)
hint
Scenario#22.02 gives 0.18 USD LLM plus 0.0007 USD Jev and says the LLM line shows "= 0.18 USD". The code formats values below 1 with 4 decimals, so it renders "= 0.1800 USD". The total is also shown as "0.1807 USD" without the "≈" mark, although a Jev cost makes it an estimate.
🟠 werkrevisor ORANGE for
f9d84c0, superseded by the result for21d05a0🟠 werkrevisor: ORANGE / FINDINGS
Change kind:
mixed.Reasons
Findings
[medium] Bar chart and split ignore the unknown LLM part consistently, but the LLM line shows "=" when LLM costs are unknown at
server/src/main/resources/static/werkrevisor-dashboard.js:41, ORANGE, still open in an earlier line comment[high] Weakened test assertion in the 30d window at
server/src/test/kotlin/de/hoennig/werkrevisor/server/UsageApiIntegrationTest.kt:163-166, hint, still open in an earlier line comment[low] Dashboard marks all Jev costs as estimated, but a zero Jev cost shows "=" at
werkrevisor/__init__.py:1, hint, as a line commentClassifier
7 of 7 units passed all questions (1 PR document(s)).
Usage: model `openrouter/anthropic/claude-sonnet-5.5`, LLM done, tokens counted before the call 32414, calls 1, tokens in 31568 / out 827 (reasoning included in out), duration 12.0 s, cost 0.0714 USD (reported), classifier `jev-1.13.0` calls 7, tokens in 5585, cost 0.0002 USD, finding judge `jev-1.13.0` calls 2, tokens in 3389, cost 0.0001 USD, config: defaults + host + repository (.werkrevisor.toml at base2 answers ignored because of a confidence below [classifier] min_confidence.
5e73b70).Reviewed head `f9d84c09bf475c0f7299937779d668380ff5c6ee` against base `5e73b70aa5ed2dcd3f67f3eb5245ab54ead4d995`, werkrevisor 0.18.0.
werkrevisor: ORANGE / FINDINGS for
f9d84c09bf475c0f7299937779d668380ff5c6ee.The result comment of werkrevisor holds the details.
@@ -1 +1 @@__version__ = "0.18.0"__version__ = "0.18.1"[low] Dashboard marks all Jev costs as estimated, but a zero Jev cost shows "=" (werkrevisor)
hint
usd(sums.jevCostUsd, sums.jevCostUsd > 0)shows "= 0.0000 USD" for Jev when no Jev ran. This is harmless but can read as a provider-reported zero. The PR document says the Jev costs are always calculated.🟡 werkrevisor YELLOW for
21d05a0, superseded by the result for8210e66🟡 werkrevisor: YELLOW / HUMAN_REVIEW
Change kind:
mixed.Reasons
Findings
[high] Weakened test: assertion value changed at
server/src/test/kotlin/de/hoennig/werkrevisor/server/UsageApiIntegrationTest.kt:163-166, hint, still open in an earlier line comment[medium] Per-PR cost marked inconsistently at
server/src/main/resources/static/werkrevisor-dashboard.js:106-109, hint, as a line comment[low] Duplicated estimate logic at
server/src/main/kotlin/de/hoennig/werkrevisor/server/Statistics.kt:23-24, hint, as a line commentClassifier
7 of 7 units passed all questions (1 PR document(s)).
Usage: model `openrouter/anthropic/claude-sonnet-5.5`, LLM done, tokens counted before the call 32475, calls 1, tokens in 31643 / out 812 (reasoning included in out), duration 12.4 s, cost 0.0714 USD (reported), classifier `jev-1.13.0` calls 7, tokens in 5624, cost 0.0002 USD, finding judge `jev-1.13.0` calls 2, tokens in 3254, cost 0.0001 USD, config: defaults + host + repository (.werkrevisor.toml at base1 answer ignored because of a confidence below [classifier] min_confidence.
5e73b70).Reviewed head `21d05a0c1645335d41df35e72b5d74d58aeac7ac` against base `5e73b70aa5ed2dcd3f67f3eb5245ab54ead4d995`, werkrevisor 0.18.0.
werkrevisor: YELLOW / HUMAN_REVIEW for
21d05a0c1645335d41df35e72b5d74d58aeac7ac.The result comment of werkrevisor holds the details.
@@ -17,2 +20,4 @@val costPerPullRequestUsd get() = if (pullRequests == 0) 0.0 else costUsd / pullRequests// Calculated from configured prices, which may be outdated, or missing an unknown LLM part: either way not a billed amount.[low] Duplicated estimate logic (werkrevisor)
hint
Sums.estimatedandUsageRecord.estimatedimplement the same rule separately, and the dashboard repeats the LLM-estimate condition insplit. A later change to the rule may update only one place and make the card and the recent list disagree.@@ -90,3 +104,3 @@{ class: "card" },el("h3", {}, LABELS[w.name] || w.name),el("div", { class: "cost" }, usd(w.sums.costUsd)),el("div", { class: "cost" }, usd(w.sums.costUsd, w.sums.estimated)),[medium] Per-PR cost marked inconsistently (werkrevisor)
hint; Jev: real 0.54, severity 2.1 of 3
The
.splitline for the LLM usesestimatedLlmReviews > 0 || unknownCostReviews > 0, while the total usesw.sums.estimated, which also includesjevCostUsd > 0. Because the Jev cost is nearly always above 0, every total and the cost per pull request show "≈", so the "=" case in the documentation scenario (only LLM costs reported) is effectively unreachable once Jev costs exist. This is consistent with the code, but the table row "only LLM costs reported by OpenRouter" shows "=" only for periods without any Jev cost.🟡 werkrevisor: YELLOW / HUMAN_REVIEW
Change kind:
mixed.Reasons
Findings
[high] Weakened assertion in existing test at
server/src/test/kotlin/de/hoennig/werkrevisor/server/UsageApiIntegrationTest.kt:163-167, hint, still open in an earlier line comment[medium] Document contradicts code and test at
docs/prs/2026-10-06-PR#22-estimated-costs-and-split.md:35-56, hint, still open in an earlier line comment[low] Duplicated estimate logic at
server/src/main/kotlin/de/hoennig/werkrevisor/server/Statistics.kt:26, hint, as a line comment1 more finding(s) not shown.
Classifier
7 of 7 units passed all questions (1 PR document(s)).
Usage: model `openrouter/anthropic/claude-sonnet-5.5`, LLM done, tokens counted before the call 32546, calls 1, tokens in 31716 / out 921 (reasoning included in out), duration 12.4 s, cost 0.0726 USD (reported), classifier `jev-1.13.0` calls 7, tokens in 5633, cost 0.0002 USD, finding judge `jev-1.13.0` calls 2, tokens in 3747, cost 0.0002 USD, config: defaults + host + repository (.werkrevisor.toml at base1 answer ignored because of a confidence below [classifier] min_confidence.
5e73b70).Reviewed head `8210e66d135e6f6c6a3c2253d6cbc46fa434d5e0` against base `5e73b70aa5ed2dcd3f67f3eb5245ab54ead4d995`, werkrevisor 0.18.0.
werkrevisor: YELLOW / HUMAN_REVIEW for
8210e66d135e6f6c6a3c2253d6cbc46fa434d5e0.The result comment of werkrevisor holds the details.
@@ -0,0 +72,4 @@The list of recent reviews shows such a review with its Jev part and "+ LLM unknown", so that it agrees with the sums.- werkrevisor 0.18.1.## Measurement[low] Narrated measurement (werkrevisor)
hint
The Measurement section narrates a manual run ("ran locally with the 180 usage records") without a result that can be checked, such as a specific observed value.
@@ -19,0 +23,4 @@// Calculated from configured prices, which may be outdated, or missing an unknown part: either way not a billed amount.val llmEstimated get() = estimatedLlmReviews > 0 || unknownCostReviews > 0val estimated get() = llmEstimated || jevCostUsd > 0.0[low] Duplicated estimate logic (werkrevisor)
hint
UsageRecord.estimatedandSums.estimatedimplement the same rule in two places. A change to one can make the recent-review rows disagree with the sums.