See [doc/prs/2026-10-14-PR#78-merge-stats.md](https://git.javagil.de/mi/werkregie/src/branch/claude-code/merge-stats/doc/prs/2026-10-14-PR%2378-merge-stats.md)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
ai-review/assessment AI review passed; approved by werkrevisor; merge waits for 1 open hint(s): reply to each line comment and resolve it, then restart the review or push a commit
Gate: approved by werkrevisor; merge waits for 1 open hint(s): reply to each line comment and resolve it, then restart the review or push a commit.
Change kind: mixed.
Reasons
hint 13 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 1 changed file was given to the AI as excerpt of the selected lines and 5 lines around each changed line, not in full (each larger than [review] max_full_file_chars = 80000): dashboard/src/main/resources/static/index.html
hint 1 changed file was given to the AI as excerpt of the selected lines and 5 lines around each changed line, not in full (all full files together would exceed [review] max_full_files_chars = 160000): dashboard/src/test/kotlin/de/hoennig/werkregie/dashboard/DashboardTest.kt
hint 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 (all full files together would exceed [review] max_full_files_chars = 160000, and no excerpt fits the limits either): dashboard/src/test/kotlin/de/hoennig/werkregie/dashboard/sources/GiteaSourceFetchTest.kt, dashboard/src/test/kotlin/de/hoennig/werkregie/dashboard/sources/MergeHistoryTest.kt (advisory: Jev judged every changed file)
hint 1 finding(s) of low severity or rated minor by Jev: doc/prs/2026-10-14-PR#78-merge-stats.md:93-95
hint model recommends merge with caution
Findings
Mismatched test citation at doc/prs/2026-10-14-PR#78-merge-stats.md:93-95, severity unknown, counted as medium, hint, 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 73603, calls 1, tokens in 70833 / out 12810 (reasoning included in out), duration 161.9 s, cost 0.0366 USD (reported), classifier `jev-1.13.0` calls 13, tokens in 11006, cost 0.0005 USD, finding judge `jev-1.13.0` calls 1, tokens in 2402, cost 0.0001 USD, excerpt selection `openrouter/openai/gpt-6-luna` calls 4, tokens in 50840 / out 1037, cost 0.0069 USD (reported), build file judge `jev-1.13.0` calls 14, tokens in 21376, cost 0.0009 USD, phases: path_judge 1.0 s, classifier 0.8 s, context 19.5 s, model_review 139.8 s, finding_judge 0.2 s, config: defaults + host + repository (.werkrevisor.toml at main 4767329).
Reviewed head `bdd3733fccbd939a2bb33c0e915097217e3dda89` against base `47673295584c858709df65a03339f56744002074`, werkrevisor 0.41.2.
<!-- werkrevisor:bdd3733fccbd939a2bb33c0e915097217e3dda89 -->
<!-- werkrevisor-verdict:GREEN -->
<!-- werkrevisor-blocks:134bc3ff1e25264f9fa511b40b5ac51c,6f1547789613acdabe48cd9a956dfaa7,f7520ef2947a6448f637d5712669af7e,1369f1a771d81d3bb5282271d403b9cd,8ad5dba17f95b82c75ff824d9b3a2e46,ffcc9ebc6a00b08d8345b5ad801b32d9,00b626891ea3c8d47c00189e5ca3e4f3,7d9e7757ed7a3295b842bc452f9c2759,66102e8b9a6782503cbf0081fae7e099,e86f1bf390ede429c7f61330d98c4821,2096ef70791473721975f568b02422cc,33a4e89e7609cf0ec0606291891b417f,2914505959243cb73d18c2b42b15a13f,ef62fd6d037db7b004970e1c4de8fd0f,b8ed96900b5377dd183e90daf41a3f11,5d80c138b0cdf60842b620352aff03c6,a39fd580d0ccc539161b5cf59ec2f005,12f29f75e079c906534796f4d637863d,4d7257d4d0fcd2b4ee2a5e8c4a73fb6c,c03a037e04eec1a44f3f80a485242d4a,25f77f55117ade864b7f9883df39b7f8,ec67d7485731047bdc63e964adc91ec9,6f31db3ee6166b8727caaf1d6b20ef38,a43a5fc2d1dc5c20db97a1ec84eef2ce,f930c210e59230faf4cc6f9316b08d1d,f58072fe1be1da0c87c76b10e50a5d5f,3c53dbd5c3347458898c214e1da634b8,813a9941284ee0339fec4ff768ddaa57,37232756058eabac18bab8fe5941806d,9a7ff74d4bfcae75d11d3d64b48d4f64,75128c2ade9cf67a655bb67f4b85823a,d70acb1b6d140588477b9903c69620b5,fbb89e2f45cce75b12cae9b42377410b,0ad4a9d4dcbfc1e9dc3701f92f83d34e,1918ca012b452f5d7443e1b0a7d60fde,13a8375a31f662ff5bf01be82d3ca557,a8504506a9a97eb05817b94372c229ca,a0b4927acee898f8e5b250521570ce7f,200fe733377228e414add1e88a8e45ec,8ad4b224ffc1e1ab8a885ebaa6b7794b,ced2217e92713f56a72e74a42cf1e6ef,ff513726555bd28e7a1b26e3fab1790a,8cdb27698be1d74db34457ab30186fda,00b46326ef2430229c9829f26be10eae -->
<!-- werkrevisor-folded -->
<details><summary>🟢 werkrevisor GREEN for <code>bdd3733</code>, superseded by <a href="http://git.javagil.de/mi/werkregie/pulls/78#issuecomment-5770">the result for <code>13dff04</code></a></summary>
## 🟢 werkrevisor: GREEN / PASS
Gate: approved by werkrevisor; merge waits for 1 open hint(s): reply to each line comment and resolve it, then restart the review or push a commit.
Change kind: `mixed`.
### Reasons
- **hint** 13 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** 1 changed file was given to the AI as excerpt of the selected lines and 5 lines around each changed line, not in full (each larger than [review] max_full_file_chars = 80000): dashboard/src/main/resources/static/index.html
- **hint** 1 changed file was given to the AI as excerpt of the selected lines and 5 lines around each changed line, not in full (all full files together would exceed [review] max_full_files_chars = 160000): dashboard/src/test/kotlin/de/hoennig/werkregie/dashboard/DashboardTest.kt
- **hint** 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 (all full files together would exceed [review] max_full_files_chars = 160000, and no excerpt fits the limits either): dashboard/src/test/kotlin/de/hoennig/werkregie/dashboard/sources/GiteaSourceFetchTest.kt, dashboard/src/test/kotlin/de/hoennig/werkregie/dashboard/sources/MergeHistoryTest.kt (advisory: Jev judged every changed file)
- **hint** 1 finding(s) of low severity or rated minor by Jev: doc/prs/2026-10-14-PR#78-merge-stats.md:93-95
- **hint** model recommends merge with caution
### Findings
1. **Mismatched test citation** at `doc/prs/2026-10-14-PR#78-merge-stats.md:93-95`, severity unknown, counted as medium, hint, 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 73603, calls 1, tokens in 70833 / out 12810 (reasoning included in out), duration 161.9 s, cost 0.0366 USD (reported), classifier `jev-1.13.0` calls 13, tokens in 11006, cost 0.0005 USD, finding judge `jev-1.13.0` calls 1, tokens in 2402, cost 0.0001 USD, excerpt selection `openrouter/openai/gpt-6-luna` calls 4, tokens in 50840 / out 1037, cost 0.0069 USD (reported), build file judge `jev-1.13.0` calls 14, tokens in 21376, cost 0.0009 USD, phases: path_judge 1.0 s, classifier 0.8 s, context 19.5 s, model_review 139.8 s, finding_judge 0.2 s, config: defaults + host + repository (.werkrevisor.toml at main 4767329).<br>
Reviewed head `bdd3733fccbd939a2bb33c0e915097217e3dda89` against base `47673295584c858709df65a03339f56744002074`, werkrevisor 0.41.2.
</sub>
</details>
werkrevisor: GREEN / PASS for bdd3733fccbd939a2bb33c0e915097217e3dda89.
The result comment of werkrevisor holds the details.
werkrevisor: GREEN / PASS for `bdd3733fccbd939a2bb33c0e915097217e3dda89`.
The result comment of werkrevisor holds the details.
<!-- werkrevisor-review:bdd3733fccbd939a2bb33c0e915097217e3dda89 -->
- [MergeHistoryTest "only a merge into the default branch counts, and a closed pull request without a merge not at all"](../../dashboard/src/test/kotlin/de/hoennig/werkregie/dashboard/sources/MergeHistoryTest.kt)
Mismatched test citation, severity unknown, counted as medium (werkrevisor)
hint; Jev: real 0.91, severity 1.9 of 3
Scenario#78.05 ("a closed pull request without a merge does not count") lists two verification tests. The second, "a merge before the oldest period does not count, though the pull request was updated later", exercises the date filter on merged_at, not the closed-without-merge case described by the scenario. A reviewer following this citation will find a test that does not exercise the stated behaviour. The first citation ("only a merge into the default branch counts, and a closed pull request without a merge not at all") does verify the scenario.
**Mismatched test citation**, severity unknown, counted as medium (werkrevisor)
hint; Jev: real 0.91, severity 1.9 of 3
Scenario#78.05 ("a closed pull request without a merge does not count") lists two verification tests. The second, "a merge before the oldest period does not count, though the pull request was updated later", exercises the date filter on `merged_at`, not the closed-without-merge case described by the scenario. A reviewer following this citation will find a test that does not exercise the stated behaviour. The first citation ("only a merge into the default branch counts, and a closed pull request without a merge not at all") does verify the scenario.
ai-review/assessment AI review passed; approved by werkrevisor; merge waits for 1 open hint(s): reply to each line comment and resolve it, then restart the review or push a commit
Gate: approved by werkrevisor; merge waits for 1 open hint(s): reply to each line comment and resolve it, then restart the review or push a commit.
Change kind: mixed.
Reasons
hint approval of werkrevisor for bdd3733 not carried over: 1 approved block(s) are missing
hint 13 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 1 changed file was given to the AI as excerpt of the selected lines and 5 lines around each changed line, not in full (each larger than [review] max_full_file_chars = 80000): dashboard/src/main/resources/static/index.html
hint 1 changed file was given to the AI as excerpt of the selected lines and 5 lines around each changed line, not in full (all full files together would exceed [review] max_full_files_chars = 160000): dashboard/src/test/kotlin/de/hoennig/werkregie/dashboard/DashboardTest.kt
hint 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 (all full files together would exceed [review] max_full_files_chars = 160000, and no excerpt fits the limits either): dashboard/src/test/kotlin/de/hoennig/werkregie/dashboard/sources/GiteaSourceFetchTest.kt, dashboard/src/test/kotlin/de/hoennig/werkregie/dashboard/sources/MergeHistoryTest.kt (advisory: Jev judged every changed file)
hint 1 finding(s) of low severity or rated minor by Jev: dashboard/src/main/resources/static/index.html:1029-1100
Findings
Missing JS test at dashboard/src/main/resources/static/index.html:1029-1100, severity unknown, counted as medium, hint, as a line comment
Classifier
13 of 13 units passed all questions (1 PR document(s)).
3 answers ignored because of a confidence below [classifier] min_confidence.
Usage: model `openrouter/minimax/minimax-m3`, LLM done, tokens counted before the call 73227, calls 1, tokens in 70473 / out 28024 (reasoning included in out), duration 172.5 s, cost 0.0547 USD (reported), classifier `jev-1.13.0` calls 13, tokens in 11060, cost 0.0005 USD, finding judge `jev-1.13.0` calls 1, tokens in 4456, cost 0.0002 USD, excerpt selection `openrouter/openai/gpt-6-luna` calls 4, tokens in 50840 / out 880, cost 0.0009 USD (reported), build file judge `jev-1.13.0` calls 14, tokens in 21376, cost 0.0009 USD, phases: path_judge 0.9 s, classifier 0.9 s, context 15.0 s, model_review 154.9 s, finding_judge 0.2 s, config: defaults + host + repository (.werkrevisor.toml at main 4767329).
Reviewed head `13dff048e7d1d103de4400cac64c74094280938a` against base `47673295584c858709df65a03339f56744002074`, werkrevisor 0.41.2.
<!-- werkrevisor:13dff048e7d1d103de4400cac64c74094280938a -->
<!-- werkrevisor-verdict:GREEN -->
<!-- werkrevisor-blocks:134bc3ff1e25264f9fa511b40b5ac51c,6f1547789613acdabe48cd9a956dfaa7,f7520ef2947a6448f637d5712669af7e,1369f1a771d81d3bb5282271d403b9cd,8ad5dba17f95b82c75ff824d9b3a2e46,ffcc9ebc6a00b08d8345b5ad801b32d9,00b626891ea3c8d47c00189e5ca3e4f3,7d9e7757ed7a3295b842bc452f9c2759,66102e8b9a6782503cbf0081fae7e099,e86f1bf390ede429c7f61330d98c4821,2096ef70791473721975f568b02422cc,33a4e89e7609cf0ec0606291891b417f,2914505959243cb73d18c2b42b15a13f,ef62fd6d037db7b004970e1c4de8fd0f,b8ed96900b5377dd183e90daf41a3f11,5d80c138b0cdf60842b620352aff03c6,a39fd580d0ccc539161b5cf59ec2f005,12f29f75e079c906534796f4d637863d,4d7257d4d0fcd2b4ee2a5e8c4a73fb6c,c03a037e04eec1a44f3f80a485242d4a,25f77f55117ade864b7f9883df39b7f8,ec67d7485731047bdc63e964adc91ec9,6f31db3ee6166b8727caaf1d6b20ef38,a43a5fc2d1dc5c20db97a1ec84eef2ce,f930c210e59230faf4cc6f9316b08d1d,f58072fe1be1da0c87c76b10e50a5d5f,3c53dbd5c3347458898c214e1da634b8,813a9941284ee0339fec4ff768ddaa57,37232756058eabac18bab8fe5941806d,9a7ff74d4bfcae75d11d3d64b48d4f64,75128c2ade9cf67a655bb67f4b85823a,d70acb1b6d140588477b9903c69620b5,fbb89e2f45cce75b12cae9b42377410b,0ad4a9d4dcbfc1e9dc3701f92f83d34e,1918ca012b452f5d7443e1b0a7d60fde,13a8375a31f662ff5bf01be82d3ca557,a8504506a9a97eb05817b94372c229ca,a0b4927acee898f8e5b250521570ce7f,200fe733377228e414add1e88a8e45ec,8ad4b224ffc1e1ab8a885ebaa6b7794b,ced2217e92713f56a72e74a42cf1e6ef,ff513726555bd28e7a1b26e3fab1790a,da29f18cc1f4675747a33555883cfb60,00b46326ef2430229c9829f26be10eae -->
<!-- werkrevisor-folded -->
<details><summary>🟢 werkrevisor GREEN for <code>13dff04</code>, superseded by <a href="http://git.javagil.de/mi/werkregie/pulls/78#issuecomment-5784">the result for <code>a157319</code></a></summary>
## 🟢 werkrevisor: GREEN / PASS
Gate: approved by werkrevisor; merge waits for 1 open hint(s): reply to each line comment and resolve it, then restart the review or push a commit.
Change kind: `mixed`.
### Reasons
- **hint** approval of werkrevisor for `bdd3733` not carried over: 1 approved block(s) are missing
- **hint** 13 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** 1 changed file was given to the AI as excerpt of the selected lines and 5 lines around each changed line, not in full (each larger than [review] max_full_file_chars = 80000): dashboard/src/main/resources/static/index.html
- **hint** 1 changed file was given to the AI as excerpt of the selected lines and 5 lines around each changed line, not in full (all full files together would exceed [review] max_full_files_chars = 160000): dashboard/src/test/kotlin/de/hoennig/werkregie/dashboard/DashboardTest.kt
- **hint** 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 (all full files together would exceed [review] max_full_files_chars = 160000, and no excerpt fits the limits either): dashboard/src/test/kotlin/de/hoennig/werkregie/dashboard/sources/GiteaSourceFetchTest.kt, dashboard/src/test/kotlin/de/hoennig/werkregie/dashboard/sources/MergeHistoryTest.kt (advisory: Jev judged every changed file)
- **hint** 1 finding(s) of low severity or rated minor by Jev: dashboard/src/main/resources/static/index.html:1029-1100
### Findings
1. **Missing JS test** at `dashboard/src/main/resources/static/index.html:1029-1100`, severity unknown, counted as medium, hint, as a line comment
### Classifier
13 of 13 units passed all questions (1 PR document(s)).
3 answers ignored because of a confidence below [classifier] min_confidence.
<sub>
Usage: model `openrouter/minimax/minimax-m3`, LLM done, tokens counted before the call 73227, calls 1, tokens in 70473 / out 28024 (reasoning included in out), duration 172.5 s, cost 0.0547 USD (reported), classifier `jev-1.13.0` calls 13, tokens in 11060, cost 0.0005 USD, finding judge `jev-1.13.0` calls 1, tokens in 4456, cost 0.0002 USD, excerpt selection `openrouter/openai/gpt-6-luna` calls 4, tokens in 50840 / out 880, cost 0.0009 USD (reported), build file judge `jev-1.13.0` calls 14, tokens in 21376, cost 0.0009 USD, phases: path_judge 0.9 s, classifier 0.9 s, context 15.0 s, model_review 154.9 s, finding_judge 0.2 s, config: defaults + host + repository (.werkrevisor.toml at main 4767329).<br>
Reviewed head `13dff048e7d1d103de4400cac64c74094280938a` against base `47673295584c858709df65a03339f56744002074`, werkrevisor 0.41.2.
</sub>
</details>
werkrevisor: GREEN / PASS for 13dff048e7d1d103de4400cac64c74094280938a.
The result comment of werkrevisor holds the details.
werkrevisor: GREEN / PASS for `13dff048e7d1d103de4400cac64c74094280938a`.
The result comment of werkrevisor holds the details.
<!-- werkrevisor-review:13dff048e7d1d103de4400cac64c74094280938a -->
Missing JS test, severity unknown, counted as medium (werkrevisor)
hint; Jev: real 0.64, severity 2.1 of 3
The new chart-switching, period-bucketing and SVG rendering logic in mergeSeries, mergePeriod and mergesTile is non-trivial JavaScript (DST-sensitive day/week/month boundaries, stacked-bar geometry, legend sums) but has no automated test. The only verification is the manual browser check in the PR document. A future change to the bucketing or bar layout could silently miscount merges and go undetected; the project has no JS test framework set up yet, so this gap is structural. The Kotlin side is well covered by MergeHistoryTest, GiteaSourceFetchTest, DashboardTest and ConfigLoaderTest.
**Missing JS test**, severity unknown, counted as medium (werkrevisor)
hint; Jev: real 0.64, severity 2.1 of 3
The new chart-switching, period-bucketing and SVG rendering logic in `mergeSeries`, `mergePeriod` and `mergesTile` is non-trivial JavaScript (DST-sensitive day/week/month boundaries, stacked-bar geometry, legend sums) but has no automated test. The only verification is the manual browser check in the PR document. A future change to the bucketing or bar layout could silently miscount merges and go undetected; the project has no JS test framework set up yet, so this gap is structural. The Kotlin side is well covered by `MergeHistoryTest`, `GiteaSourceFetchTest`, `DashboardTest` and `ConfigLoaderTest`.
Not fixed in this PR: werkregie has no JavaScript test framework; index.html has no automated test for any of its functions, e.g. costsTile or renderLanes.
A framework, e.g. a JS runtime in the Gradle build, is a new technology and needs the consent of the human (agentic-workflow.md, "Versions, Release Notes, Decisions").
The bucketing was checked against the counts of the server-side version on real data: 30 days, 12 weeks and 12 months gave the same sums, see "Manual Check" in the PR document.
Not fixed in this PR: werkregie has no JavaScript test framework; `index.html` has no automated test for any of its functions, e.g. `costsTile` or `renderLanes`.
A framework, e.g. a JS runtime in the Gradle build, is a new technology and needs the consent of the human (agentic-workflow.md, "Versions, Release Notes, Decisions").
The bucketing was checked against the counts of the server-side version on real data: 30 days, 12 weeks and 12 months gave the same sums, see "Manual Check" in the PR document.
hint approval of werkrevisor for 13dff04 not carried over: 1 approved block(s) are missing
hint 13 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 1 changed file was given to the AI as excerpt of the selected lines and 5 lines around each changed line, not in full (each larger than [review] max_full_file_chars = 80000): dashboard/src/main/resources/static/index.html
hint 1 changed file was given to the AI as excerpt of the selected lines and 5 lines around each changed line, not in full (all full files together would exceed [review] max_full_files_chars = 160000): dashboard/src/test/kotlin/de/hoennig/werkregie/dashboard/DashboardTest.kt
hint 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 (all full files together would exceed [review] max_full_files_chars = 160000, and no excerpt fits the limits either): dashboard/src/test/kotlin/de/hoennig/werkregie/dashboard/sources/GiteaSourceFetchTest.kt, dashboard/src/test/kotlin/de/hoennig/werkregie/dashboard/sources/MergeHistoryTest.kt (advisory: Jev judged every changed file)
Classifier
13 of 13 units passed all questions (1 PR document(s)).
1 answer ignored because of a confidence below [classifier] min_confidence.
Usage: model `openrouter/minimax/minimax-m3`, LLM done, tokens counted before the call 72890, calls 1, tokens in 70147 / out 28748 (reasoning included in out), duration 312.2 s, cost 0.0555 USD (reported), classifier `jev-1.13.0` calls 13, tokens in 11116, cost 0.0005 USD, excerpt selection `openrouter/openai/gpt-6-luna` calls 4, tokens in 50840 / out 970, cost 0.0010 USD (reported), build file judge `jev-1.13.0` calls 14, tokens in 21376, cost 0.0009 USD, phases: path_judge 0.9 s, classifier 0.9 s, context 18.4 s, model_review 291.6 s, config: defaults + host + repository (.werkrevisor.toml at main 4767329).
Reviewed head `a157319f0babcec161cc9a486c1165c3c0eeee2a` against base `47673295584c858709df65a03339f56744002074`, werkrevisor 0.41.2.
<!-- werkrevisor:a157319f0babcec161cc9a486c1165c3c0eeee2a -->
<!-- werkrevisor-verdict:GREEN -->
<!-- werkrevisor-blocks:134bc3ff1e25264f9fa511b40b5ac51c,6f1547789613acdabe48cd9a956dfaa7,f7520ef2947a6448f637d5712669af7e,1369f1a771d81d3bb5282271d403b9cd,8ad5dba17f95b82c75ff824d9b3a2e46,ffcc9ebc6a00b08d8345b5ad801b32d9,00b626891ea3c8d47c00189e5ca3e4f3,7d9e7757ed7a3295b842bc452f9c2759,66102e8b9a6782503cbf0081fae7e099,e86f1bf390ede429c7f61330d98c4821,2096ef70791473721975f568b02422cc,33a4e89e7609cf0ec0606291891b417f,2914505959243cb73d18c2b42b15a13f,ef62fd6d037db7b004970e1c4de8fd0f,b8ed96900b5377dd183e90daf41a3f11,5d80c138b0cdf60842b620352aff03c6,a39fd580d0ccc539161b5cf59ec2f005,12f29f75e079c906534796f4d637863d,4d7257d4d0fcd2b4ee2a5e8c4a73fb6c,c03a037e04eec1a44f3f80a485242d4a,25f77f55117ade864b7f9883df39b7f8,ec67d7485731047bdc63e964adc91ec9,6f31db3ee6166b8727caaf1d6b20ef38,a43a5fc2d1dc5c20db97a1ec84eef2ce,f930c210e59230faf4cc6f9316b08d1d,f58072fe1be1da0c87c76b10e50a5d5f,3c53dbd5c3347458898c214e1da634b8,813a9941284ee0339fec4ff768ddaa57,37232756058eabac18bab8fe5941806d,9a7ff74d4bfcae75d11d3d64b48d4f64,75128c2ade9cf67a655bb67f4b85823a,d70acb1b6d140588477b9903c69620b5,fbb89e2f45cce75b12cae9b42377410b,0ad4a9d4dcbfc1e9dc3701f92f83d34e,1918ca012b452f5d7443e1b0a7d60fde,13a8375a31f662ff5bf01be82d3ca557,a8504506a9a97eb05817b94372c229ca,a0b4927acee898f8e5b250521570ce7f,200fe733377228e414add1e88a8e45ec,8ad4b224ffc1e1ab8a885ebaa6b7794b,ced2217e92713f56a72e74a42cf1e6ef,ff513726555bd28e7a1b26e3fab1790a,c94ae820e8ae2aeae08727f879c712ed,00b46326ef2430229c9829f26be10eae -->
## 🟢 werkrevisor: GREEN / PASS
Change kind: `mixed`.
### Reasons
- **hint** approval of werkrevisor for `13dff04` not carried over: 1 approved block(s) are missing
- **hint** 13 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** 1 changed file was given to the AI as excerpt of the selected lines and 5 lines around each changed line, not in full (each larger than [review] max_full_file_chars = 80000): dashboard/src/main/resources/static/index.html
- **hint** 1 changed file was given to the AI as excerpt of the selected lines and 5 lines around each changed line, not in full (all full files together would exceed [review] max_full_files_chars = 160000): dashboard/src/test/kotlin/de/hoennig/werkregie/dashboard/DashboardTest.kt
- **hint** 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 (all full files together would exceed [review] max_full_files_chars = 160000, and no excerpt fits the limits either): dashboard/src/test/kotlin/de/hoennig/werkregie/dashboard/sources/GiteaSourceFetchTest.kt, dashboard/src/test/kotlin/de/hoennig/werkregie/dashboard/sources/MergeHistoryTest.kt (advisory: Jev judged every changed file)
### Classifier
13 of 13 units passed all questions (1 PR document(s)).
1 answer ignored because of a confidence below [classifier] min_confidence.
<sub>
Usage: model `openrouter/minimax/minimax-m3`, LLM done, tokens counted before the call 72890, calls 1, tokens in 70147 / out 28748 (reasoning included in out), duration 312.2 s, cost 0.0555 USD (reported), classifier `jev-1.13.0` calls 13, tokens in 11116, cost 0.0005 USD, excerpt selection `openrouter/openai/gpt-6-luna` calls 4, tokens in 50840 / out 970, cost 0.0010 USD (reported), build file judge `jev-1.13.0` calls 14, tokens in 21376, cost 0.0009 USD, phases: path_judge 0.9 s, classifier 0.9 s, context 18.4 s, model_review 291.6 s, config: defaults + host + repository (.werkrevisor.toml at main 4767329).<br>
Reviewed head `a157319f0babcec161cc9a486c1165c3c0eeee2a` against base `47673295584c858709df65a03339f56744002074`, werkrevisor 0.41.2.
</sub>
werkrevisor: GREEN / PASS for a157319f0babcec161cc9a486c1165c3c0eeee2a.
The result comment of werkrevisor holds the details.
werkrevisor: GREEN / PASS for `a157319f0babcec161cc9a486c1165c3c0eeee2a`.
The result comment of werkrevisor holds the details.
<!-- werkrevisor-review:a157319f0babcec161cc9a486c1165c3c0eeee2a -->
ai-reviewer
scheduled this pull request to auto merge when all checks succeed 2026-10-14 19:58:17 +02:00
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 doc/prs/2026-10-14-PR#78-merge-stats.md
🤖 Generated with Claude Code
2a294a6f01tobdd3733fcc🟢 werkrevisor GREEN for
bdd3733, superseded by the result for13dff04🟢 werkrevisor: GREEN / PASS
Gate: approved by werkrevisor; merge waits for 1 open hint(s): reply to each line comment and resolve it, then restart the review or push a commit.
Change kind:
mixed.Reasons
Findings
doc/prs/2026-10-14-PR#78-merge-stats.md:93-95, severity unknown, counted as medium, hint, as a line commentClassifier
13 of 13 units passed all questions (1 PR document(s)).
Usage: model `openrouter/minimax/minimax-m3`, LLM done, tokens counted before the call 73603, calls 1, tokens in 70833 / out 12810 (reasoning included in out), duration 161.9 s, cost 0.0366 USD (reported), classifier `jev-1.13.0` calls 13, tokens in 11006, cost 0.0005 USD, finding judge `jev-1.13.0` calls 1, tokens in 2402, cost 0.0001 USD, excerpt selection `openrouter/openai/gpt-6-luna` calls 4, tokens in 50840 / out 1037, cost 0.0069 USD (reported), build file judge `jev-1.13.0` calls 14, tokens in 21376, cost 0.0009 USD, phases: path_judge 1.0 s, classifier 0.8 s, context 19.5 s, model_review 139.8 s, finding_judge 0.2 s, config: defaults + host + repository (.werkrevisor.toml at main4 answers ignored because of a confidence below [classifier] min_confidence.
4767329).Reviewed head `bdd3733fccbd939a2bb33c0e915097217e3dda89` against base `47673295584c858709df65a03339f56744002074`, werkrevisor 0.41.2.
werkrevisor: GREEN / PASS for
bdd3733fccbd939a2bb33c0e915097217e3dda89.The result comment of werkrevisor holds the details.
@@ -0,0 +90,4 @@##### Verified by- [MergeHistoryTest "only a merge into the default branch counts, and a closed pull request without a merge not at all"](../../dashboard/src/test/kotlin/de/hoennig/werkregie/dashboard/sources/MergeHistoryTest.kt)Mismatched test citation, severity unknown, counted as medium (werkrevisor)
hint; Jev: real 0.91, severity 1.9 of 3
Scenario#78.05 ("a closed pull request without a merge does not count") lists two verification tests. The second, "a merge before the oldest period does not count, though the pull request was updated later", exercises the date filter on
merged_at, not the closed-without-merge case described by the scenario. A reviewer following this citation will find a test that does not exercise the stated behaviour. The first citation ("only a merge into the default branch counts, and a closed pull request without a merge not at all") does verify the scenario.fixed in
13dff04: Scenario#78.05 cites only the test of a closed pull request without a merge; the test of the date filter moved to Solution.New commits pushed, approval review dismissed automatically according to repository settings
🟢 werkrevisor GREEN for
13dff04, superseded by the result fora157319🟢 werkrevisor: GREEN / PASS
Gate: approved by werkrevisor; merge waits for 1 open hint(s): reply to each line comment and resolve it, then restart the review or push a commit.
Change kind:
mixed.Reasons
bdd3733not carried over: 1 approved block(s) are missingFindings
dashboard/src/main/resources/static/index.html:1029-1100, severity unknown, counted as medium, hint, as a line commentClassifier
13 of 13 units passed all questions (1 PR document(s)).
Usage: model `openrouter/minimax/minimax-m3`, LLM done, tokens counted before the call 73227, calls 1, tokens in 70473 / out 28024 (reasoning included in out), duration 172.5 s, cost 0.0547 USD (reported), classifier `jev-1.13.0` calls 13, tokens in 11060, cost 0.0005 USD, finding judge `jev-1.13.0` calls 1, tokens in 4456, cost 0.0002 USD, excerpt selection `openrouter/openai/gpt-6-luna` calls 4, tokens in 50840 / out 880, cost 0.0009 USD (reported), build file judge `jev-1.13.0` calls 14, tokens in 21376, cost 0.0009 USD, phases: path_judge 0.9 s, classifier 0.9 s, context 15.0 s, model_review 154.9 s, finding_judge 0.2 s, config: defaults + host + repository (.werkrevisor.toml at main3 answers ignored because of a confidence below [classifier] min_confidence.
4767329).Reviewed head `13dff048e7d1d103de4400cac64c74094280938a` against base `47673295584c858709df65a03339f56744002074`, werkrevisor 0.41.2.
werkrevisor: GREEN / PASS for
13dff048e7d1d103de4400cac64c74094280938a.The result comment of werkrevisor holds the details.
@@ -1020,6 +1026,79 @@ function costsTile(costs) {</${tag}>`;}// ---- the merges of the configured authors into the default branches of a Gitea: stacked bars per period ----Missing JS test, severity unknown, counted as medium (werkrevisor)
hint; Jev: real 0.64, severity 2.1 of 3
The new chart-switching, period-bucketing and SVG rendering logic in
mergeSeries,mergePeriodandmergesTileis non-trivial JavaScript (DST-sensitive day/week/month boundaries, stacked-bar geometry, legend sums) but has no automated test. The only verification is the manual browser check in the PR document. A future change to the bucketing or bar layout could silently miscount merges and go undetected; the project has no JS test framework set up yet, so this gap is structural. The Kotlin side is well covered byMergeHistoryTest,GiteaSourceFetchTest,DashboardTestandConfigLoaderTest.Not fixed in this PR: werkregie has no JavaScript test framework;
index.htmlhas no automated test for any of its functions, e.g.costsTileorrenderLanes.A framework, e.g. a JS runtime in the Gradle build, is a new technology and needs the consent of the human (agentic-workflow.md, "Versions, Release Notes, Decisions").
The bucketing was checked against the counts of the server-side version on real data: 30 days, 12 weeks and 12 months gave the same sums, see "Manual Check" in the PR document.
New commits pushed, approval review dismissed automatically according to repository settings
🟢 werkrevisor: GREEN / PASS
Change kind:
mixed.Reasons
13dff04not carried over: 1 approved block(s) are missingClassifier
13 of 13 units passed all questions (1 PR document(s)).
Usage: model `openrouter/minimax/minimax-m3`, LLM done, tokens counted before the call 72890, calls 1, tokens in 70147 / out 28748 (reasoning included in out), duration 312.2 s, cost 0.0555 USD (reported), classifier `jev-1.13.0` calls 13, tokens in 11116, cost 0.0005 USD, excerpt selection `openrouter/openai/gpt-6-luna` calls 4, tokens in 50840 / out 970, cost 0.0010 USD (reported), build file judge `jev-1.13.0` calls 14, tokens in 21376, cost 0.0009 USD, phases: path_judge 0.9 s, classifier 0.9 s, context 18.4 s, model_review 291.6 s, config: defaults + host + repository (.werkrevisor.toml at main1 answer ignored because of a confidence below [classifier] min_confidence.
4767329).Reviewed head `a157319f0babcec161cc9a486c1165c3c0eeee2a` against base `47673295584c858709df65a03339f56744002074`, werkrevisor 0.41.2.
werkrevisor: GREEN / PASS for
a157319f0babcec161cc9a486c1165c3c0eeee2a.The result comment of werkrevisor holds the details.