Each PR document states Version: major|minor|patch; the build derives the version and the changelog from the PR documents in the order of the merges.
Two open PRs no longer change the same line for their version.
Each PR document states `Version: major|minor|patch`; the build derives the version and the changelog from the PR documents in the order of the merges.
Two open PRs no longer change the same line for their version.
See doc/prs/2026-10-14-PR#79-derived-version.md.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
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
werkrevisor: ORANGE / FINDINGS for cd11d58fea6084e8542fbea0ce9eef11d8d964ed.
The result comment of werkrevisor holds the details.
werkrevisor: ORANGE / FINDINGS for `cd11d58fea6084e8542fbea0ce9eef11d8d964ed`.
The result comment of werkrevisor holds the details.
<!-- werkrevisor-review:cd11d58fea6084e8542fbea0ce9eef11d8d964ed -->
Silent fallback, severity unknown, counted as medium (werkrevisor)
ORANGE; Jev: real 0.82, severity 2.9 of 3
When origin/main does not exist (a shallow clone without fetch, or a local-only repository), prDocuments treats any state as on main because git rev-parse --verify -q origin/main returns null
and the first disjunct makes onMain true. If a developer is on a branch ahead of main in such a state,
the build uses HEAD for the log and misses the PR documents that main added between since and now,
so the derived version is too low. The error at line 172 hints at shallow clones, but this fallback is
silent and yields a wrong version without any warning. The build should either fail clearly when origin/main is missing or treat the branch state explicitly. The checkReleases task does not cover this
case (its test always sets refs/remotes/origin/main), so the regression would slip through CI.
**Silent fallback**, severity unknown, counted as medium (werkrevisor)
ORANGE; Jev: real 0.82, severity 2.9 of 3
When `origin/main` does not exist (a shallow clone without fetch, or a local-only repository),
`prDocuments` treats any state as on main because `git rev-parse --verify -q origin/main` returns null
and the first disjunct makes `onMain` true. If a developer is on a branch ahead of `main` in such a state,
the build uses `HEAD` for the log and misses the PR documents that `main` added between `since` and now,
so the derived version is too low. The error at line 172 hints at shallow clones, but this fallback is
silent and yields a wrong version without any warning. The build should either fail clearly when
`origin/main` is missing or treat the branch state explicitly. The `checkReleases` task does not cover this
case (its test always sets `refs/remotes/origin/main`), so the regression would slip through CI.
claude-code marked this conversation as resolved
ai-reviewer
scheduled this pull request to auto merge when all checks succeed 2026-10-14 19:46:27 +02:00
ai-reviewer
requested review from mi 2026-10-14 19:46:27 +02:00
ai-review/assessment AI findings; a developer approval after checking them unlocks the merge; a human review request is pending; merge already scheduled
Fixed in 11bec44: without origin/main the build fails with "no origin/main, which the version needs; git fetch origin main". checkReleases checks this case before it sets refs/remotes/origin/main.
Fixed in `11bec44`: without `origin/main` the build fails with "no origin/main, which the version needs; git fetch origin main".
`checkReleases` checks this case before it sets `refs/remotes/origin/main`.
ORANGE 1 finding(s) that Jev rates as probably real and severe: dashboard/build.gradle.kts:142-157
YELLOW risky build changes according to Jev: dashboard/build.gradle.kts (weakens checks 0.05, risk 1.73, security 0.02)
hint 1 finding(s) possibly severe, but Jev doubts that they are real: dashboard/build.gradle.kts:19-22 (advisory: Jev judged every changed file)
hint model recommends merge with caution
Findings
PR documents can be re-counted at dashboard/build.gradle.kts:142-157, severity unknown, counted as medium, ORANGE, as a line comment
Config-time git dependency at dashboard/build.gradle.kts:19-22, severity unknown, counted as medium, YELLOW, as a line comment
Classifier
10 of 10 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 20050, calls 1, tokens in 19362 / out 36799 (reasoning included in out), duration 212.2 s, cost 0.0499 USD (reported), classifier `jev-1.13.0` calls 10, tokens in 8123, cost 0.0003 USD, finding judge `jev-1.13.0` calls 2, tokens in 4871, cost 0.0002 USD, build file judge `jev-1.13.0` calls 1, tokens in 3521, cost 0.0001 USD, phases: path_judge 0.2 s, classifier 0.7 s, context 0.3 s, model_review 210.1 s, finding_judge 0.2 s, config: defaults + host + repository (.werkrevisor.toml at main 4767329).
Reviewed head `11bec4421e3bfd94dd2f69ec319ea8734d72bb8e` against base `47673295584c858709df65a03339f56744002074`, werkrevisor 0.41.2.
<!-- werkrevisor:11bec4421e3bfd94dd2f69ec319ea8734d72bb8e -->
<!-- werkrevisor-verdict:ORANGE -->
<!-- werkrevisor-blocks:ddd9343f9747b184417bd48d16e65f98,84e449208ee5ed943c8d58012ad825fe,df1fa531fd08daaed913670c03bc56ba,d4942e171f41db7c3afd06500c842de6,b70e1be6a35afa5e9342726307d2cc42,086500e66d31436493c22d8ffa70f3be,d22dda273eb5f42ca9028e19f2e1ddaf,26b5905b737e2cbfb6fb5aa89db53648,688fdb89b40a4e172c0f540f70b00d23,ae7cbcfef337aea888ef833c451cc34e,e7b94138d3f247be86e9196b17ee0139,fad577e9dda5803c271805dc96151ea8 -->
<!-- werkrevisor-folded -->
<details><summary>🟠 werkrevisor ORANGE for <code>11bec44</code>, superseded by <a href="http://git.javagil.de/mi/werkregie/pulls/79#issuecomment-5790">the result for <code>89f8267</code></a></summary>
## 🟠 werkrevisor: ORANGE / FINDINGS
Change kind: `mixed`.
### Reasons
- **ORANGE** 1 finding(s) that Jev rates as probably real and severe: dashboard/build.gradle.kts:142-157
- **YELLOW** risky build changes according to Jev: dashboard/build.gradle.kts (weakens checks 0.05, risk 1.73, security 0.02)
- **hint** 1 finding(s) possibly severe, but Jev doubts that they are real: dashboard/build.gradle.kts:19-22 (advisory: Jev judged every changed file)
- **hint** model recommends merge with caution
### Findings
1. **PR documents can be re-counted** at `dashboard/build.gradle.kts:142-157`, severity unknown, counted as medium, ORANGE, as a line comment
2. **Config-time git dependency** at `dashboard/build.gradle.kts:19-22`, severity unknown, counted as medium, YELLOW, as a line comment
### Classifier
10 of 10 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 20050, calls 1, tokens in 19362 / out 36799 (reasoning included in out), duration 212.2 s, cost 0.0499 USD (reported), classifier `jev-1.13.0` calls 10, tokens in 8123, cost 0.0003 USD, finding judge `jev-1.13.0` calls 2, tokens in 4871, cost 0.0002 USD, build file judge `jev-1.13.0` calls 1, tokens in 3521, cost 0.0001 USD, phases: path_judge 0.2 s, classifier 0.7 s, context 0.3 s, model_review 210.1 s, finding_judge 0.2 s, config: defaults + host + repository (.werkrevisor.toml at main 4767329).<br>
Reviewed head `11bec4421e3bfd94dd2f69ec319ea8734d72bb8e` against base `47673295584c858709df65a03339f56744002074`, werkrevisor 0.41.2.
</sub>
</details>
werkrevisor: ORANGE / FINDINGS for 11bec4421e3bfd94dd2f69ec319ea8734d72bb8e.
The result comment of werkrevisor holds the details.
werkrevisor: ORANGE / FINDINGS for `11bec4421e3bfd94dd2f69ec319ea8734d72bb8e`.
The result comment of werkrevisor holds the details.
<!-- werkrevisor-review:11bec4421e3bfd94dd2f69ec319ea8734d72bb8e -->
Config-time git dependency, severity unknown, counted as medium (werkrevisor)
YELLOW; Jev: real 0.55, severity 2.6 of 3
The script-level version derivation runs at every Gradle invocation. It calls git and requires origin/main to be fetched (and full history to be available). Any ./gradlew command (including tasks, help, IDE imports) now needs git fetch origin main on a fresh clone, or unshallow on a shallow clone. The error messages are clear, but the dependency is new and affects all Gradle workflows.
**Config-time git dependency**, severity unknown, counted as medium (werkrevisor)
YELLOW; Jev: real 0.55, severity 2.6 of 3
The script-level version derivation runs at every Gradle invocation. It calls git and requires `origin/main` to be fetched (and full history to be available). Any `./gradlew` command (including `tasks`, `help`, IDE imports) now needs `git fetch origin main` on a fresh clone, or unshallow on a shallow clone. The error messages are clear, but the dependency is new and affects all Gradle workflows.
PR documents can be re-counted, severity unknown, counted as medium (werkrevisor)
ORANGE; Jev: real 0.79, severity 2.8 of 3
git log -p --diff-filter=A selects commits that have at least one added file, but the -p patch for such commits also shows any modifications in the same commit. If a commit both modifies a previously-added PR document and adds new PR documents, addedPrDocuments re-adds the modified file with only its diff content, not the full file. prDocument then re-reads or defaults the Version: line, violating the stated invariant that a later change of a document changes no version. The checkReleases task does not cover this combined case.
**PR documents can be re-counted**, severity unknown, counted as medium (werkrevisor)
ORANGE; Jev: real 0.79, severity 2.8 of 3
`git log -p --diff-filter=A` selects commits that have at least one added file, but the `-p` patch for such commits also shows any modifications in the same commit. If a commit both modifies a previously-added PR document and adds new PR documents, `addedPrDocuments` re-adds the modified file with only its diff content, not the full file. `prDocument` then re-reads or defaults the `Version:` line, violating the stated invariant that a later change of a document changes no version. The `checkReleases` task does not cover this combined case.
Kept, by intent: processResources puts the version into the page and werkregie.properties at configuration time.
A normal git clone has origin/main and the full history; Werkator builds in a full clone.
A shallow clone or one without origin/main gets a clear error instead of a wrong version (11bec44).
The derivation costs three git calls per Gradle run.
Kept, by intent: `processResources` puts the version into the page and `werkregie.properties` at configuration time.
A normal `git clone` has `origin/main` and the full history; Werkator builds in a full clone.
A shallow clone or one without `origin/main` gets a clear error instead of a wrong version (`11bec44`).
The derivation costs three git calls per Gradle run.
Not a real case: --diff-filter=A filters the files of the patch too, not only the commits.
In a commit that changes PR#1-a.md and adds PR#2-b.md, git log -p --diff-filter=A shows only +++ b/doc/prs/2026-01-02-PR#2-b.md. checkReleases covers this case since d0a3de3: PR#1 still gives 0.49.0.
Not a real case: `--diff-filter=A` filters the files of the patch too, not only the commits.
In a commit that changes `PR#1-a.md` and adds `PR#2-b.md`, `git log -p --diff-filter=A` shows only `+++ b/doc/prs/2026-01-02-PR#2-b.md`.
`checkReleases` covers this case since `d0a3de3`: PR#1 still gives 0.49.0.
YELLOW risky build changes according to Jev: dashboard/build.gradle.kts (weakens checks 0.04, risk 1.68, security 0.02)
hint 1 finding(s) of low severity or rated minor by Jev: doc/agentic-workflow.md:106-107
hint model recommends merge with caution
Findings
Outdated exception at doc/agentic-workflow.md:106-107, severity unknown, counted as medium
hint; Jev: real 0.78, severity 2.0 of 3
The statement "A pure release PR (version and release notes, no code) needs none" on line 107 contradicts the new rule that the build derives the version from PR documents. With the new rule, a release PR (which only contains a version bump and release notes) would still need a PR document to specify Version: major|minor|patch and the "Release Notes" section, since the version is now derived from the documents themselves. The exception as worded is no longer valid and should be removed or reworded to match the new derivation rule.
Classifier
10 of 10 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 20082, calls 1, tokens in 19391 / out 30585 (reasoning included in out), duration 191.8 s, cost 0.0425 USD (reported), classifier `jev-1.13.0` calls 10, tokens in 8123, cost 0.0003 USD, finding judge `jev-1.13.0` calls 1, tokens in 2261, cost 0.0001 USD, build file judge `jev-1.13.0` calls 1, tokens in 3532, cost 0.0001 USD, phases: path_judge 0.3 s, classifier 0.8 s, context 0.2 s, model_review 189.8 s, finding_judge 0.3 s, config: defaults + host + repository (.werkrevisor.toml at main 74bd671).
Reviewed head `34b0b7a36b91ad52d42dbe8b9b2de65b0ce81fd9` against base `74bd671ef00a343d6f25be6b8044b608af6c2b63`, werkrevisor 0.41.2.
<!-- werkrevisor:34b0b7a36b91ad52d42dbe8b9b2de65b0ce81fd9 -->
<!-- werkrevisor-verdict:YELLOW -->
<!-- werkrevisor-blocks:bda736d335c9c8768bff24f4eab99d81,234062cd38c1d589e6a1eed09b7dcb5e,cd06106ce755f21987e40beab2f9f777,d4942e171f41db7c3afd06500c842de6,b70e1be6a35afa5e9342726307d2cc42,086500e66d31436493c22d8ffa70f3be,d22dda273eb5f42ca9028e19f2e1ddaf,26b5905b737e2cbfb6fb5aa89db53648,688fdb89b40a4e172c0f540f70b00d23,ae7cbcfef337aea888ef833c451cc34e,e7b94138d3f247be86e9196b17ee0139,fad577e9dda5803c271805dc96151ea8 -->
<!-- werkrevisor-folded -->
<details><summary>🟡 werkrevisor YELLOW for <code>34b0b7a</code>, superseded by <a href="http://git.javagil.de/mi/werkregie/pulls/79#issuecomment-5814">the result for <code>50b25e5</code></a></summary>
## 🟡 werkrevisor: YELLOW / HUMAN_REVIEW
Change kind: `mixed`.
### Reasons
- **YELLOW** risky build changes according to Jev: dashboard/build.gradle.kts (weakens checks 0.04, risk 1.68, security 0.02)
- **hint** 1 finding(s) of low severity or rated minor by Jev: doc/agentic-workflow.md:106-107
- **hint** model recommends merge with caution
### Findings
1. **Outdated exception** at `doc/agentic-workflow.md:106-107`, severity unknown, counted as medium
hint; Jev: real 0.78, severity 2.0 of 3
The statement "A pure release PR (version and release notes, no code) needs none" on line 107 contradicts the new rule that the build derives the version from PR documents. With the new rule, a release PR (which only contains a version bump and release notes) would still need a PR document to specify `Version: major|minor|patch` and the "Release Notes" section, since the version is now derived from the documents themselves. The exception as worded is no longer valid and should be removed or reworded to match the new derivation rule.
### Classifier
10 of 10 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 20082, calls 1, tokens in 19391 / out 30585 (reasoning included in out), duration 191.8 s, cost 0.0425 USD (reported), classifier `jev-1.13.0` calls 10, tokens in 8123, cost 0.0003 USD, finding judge `jev-1.13.0` calls 1, tokens in 2261, cost 0.0001 USD, build file judge `jev-1.13.0` calls 1, tokens in 3532, cost 0.0001 USD, phases: path_judge 0.3 s, classifier 0.8 s, context 0.2 s, model_review 189.8 s, finding_judge 0.3 s, config: defaults + host + repository (.werkrevisor.toml at main 74bd671).<br>
Reviewed head `34b0b7a36b91ad52d42dbe8b9b2de65b0ce81fd9` against base `74bd671ef00a343d6f25be6b8044b608af6c2b63`, werkrevisor 0.41.2.
</sub>
</details>
ai-reviewer
requested review from mi 2026-10-14 20:25:59 +02:00
ai-review/assessment AI findings; a developer approval after checking them unlocks the merge; a human review request is pending; merge already scheduled
ORANGE 1 finding(s) that Jev rates as probably real and severe: dashboard/build.gradle.kts:168-169
YELLOW risky build changes according to Jev: dashboard/build.gradle.kts (weakens checks 0.05, risk 1.72, security 0.02)
hint 1 finding(s) of low severity or rated minor by Jev: dashboard/build.gradle.kts:19-21
Findings
Hard requirement on origin/main at dashboard/build.gradle.kts:168-169, severity unknown, counted as medium, ORANGE, as a line comment
Hardcoded base commit not maintained at dashboard/build.gradle.kts:19-21, severity unknown, counted as medium, hint, as a line comment
Classifier
10 of 10 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 20202, calls 1, tokens in 19505 / out 7588 (reasoning included in out), duration 61.6 s, cost 0.0132 USD (reported), classifier `jev-1.13.0` calls 10, tokens in 8123, cost 0.0003 USD, finding judge `jev-1.13.0` calls 2, tokens in 4505, cost 0.0002 USD, build file judge `jev-1.13.0` calls 1, tokens in 3532, cost 0.0001 USD, phases: path_judge 0.2 s, classifier 0.6 s, context 0.3 s, model_review 59.6 s, finding_judge 0.3 s, config: defaults + host + repository (.werkrevisor.toml at main 74bd671).
Reviewed head `50b25e5a254f10a96b53fa27fce505d97bbc2737` against base `74bd671ef00a343d6f25be6b8044b608af6c2b63`, werkrevisor 0.41.2.
<!-- werkrevisor:50b25e5a254f10a96b53fa27fce505d97bbc2737 -->
<!-- werkrevisor-verdict:ORANGE -->
<!-- werkrevisor-blocks:bda736d335c9c8768bff24f4eab99d81,234062cd38c1d589e6a1eed09b7dcb5e,cd06106ce755f21987e40beab2f9f777,d4942e171f41db7c3afd06500c842de6,d804581a20cfbc23dc15103e21dddc18,086500e66d31436493c22d8ffa70f3be,d22dda273eb5f42ca9028e19f2e1ddaf,26b5905b737e2cbfb6fb5aa89db53648,688fdb89b40a4e172c0f540f70b00d23,ae7cbcfef337aea888ef833c451cc34e,e7b94138d3f247be86e9196b17ee0139,fad577e9dda5803c271805dc96151ea8 -->
<!-- werkrevisor-folded -->
<details><summary>🟠 werkrevisor ORANGE for <code>50b25e5</code>, superseded by <a href="http://git.javagil.de/mi/werkregie/pulls/79#issuecomment-5822">the result for <code>a69f334</code></a></summary>
## 🟠 werkrevisor: ORANGE / FINDINGS
Change kind: `mixed`.
### Reasons
- **ORANGE** 1 finding(s) that Jev rates as probably real and severe: dashboard/build.gradle.kts:168-169
- **YELLOW** risky build changes according to Jev: dashboard/build.gradle.kts (weakens checks 0.05, risk 1.72, security 0.02)
- **hint** 1 finding(s) of low severity or rated minor by Jev: dashboard/build.gradle.kts:19-21
### Findings
1. **Hard requirement on origin/main** at `dashboard/build.gradle.kts:168-169`, severity unknown, counted as medium, ORANGE, as a line comment
2. **Hardcoded base commit not maintained** at `dashboard/build.gradle.kts:19-21`, severity unknown, counted as medium, hint, as a line comment
### Classifier
10 of 10 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 20202, calls 1, tokens in 19505 / out 7588 (reasoning included in out), duration 61.6 s, cost 0.0132 USD (reported), classifier `jev-1.13.0` calls 10, tokens in 8123, cost 0.0003 USD, finding judge `jev-1.13.0` calls 2, tokens in 4505, cost 0.0002 USD, build file judge `jev-1.13.0` calls 1, tokens in 3532, cost 0.0001 USD, phases: path_judge 0.2 s, classifier 0.6 s, context 0.3 s, model_review 59.6 s, finding_judge 0.3 s, config: defaults + host + repository (.werkrevisor.toml at main 74bd671).<br>
Reviewed head `50b25e5a254f10a96b53fa27fce505d97bbc2737` against base `74bd671ef00a343d6f25be6b8044b608af6c2b63`, werkrevisor 0.41.2.
</sub>
</details>
werkrevisor: ORANGE / FINDINGS for 50b25e5a254f10a96b53fa27fce505d97bbc2737.
The result comment of werkrevisor holds the details.
werkrevisor: ORANGE / FINDINGS for `50b25e5a254f10a96b53fa27fce505d97bbc2737`.
The result comment of werkrevisor holds the details.
<!-- werkrevisor-review:50b25e5a254f10a96b53fa27fce505d97bbc2737 -->
Hardcoded base commit not maintained, severity unknown, counted as medium (werkrevisor)
hint; Jev: real 0.64, severity 2.2 of 3
The base commit 74bd671 at line 21 is hardcoded with no explanation of how it is chosen or updated. If this commit is lost (e.g., through a history rewrite, force-push, or shallow clone without that ref), the build fails with "no history from 74bd671 to $main". The choice of base commit is a configuration that future maintainers need to understand; the current comment only says "main's version at its commit 74bd671" without explaining the rationale or how to advance it.
**Hardcoded base commit not maintained**, severity unknown, counted as medium (werkrevisor)
hint; Jev: real 0.64, severity 2.2 of 3
The base commit `74bd671` at line 21 is hardcoded with no explanation of how it is chosen or updated. If this commit is lost (e.g., through a history rewrite, force-push, or shallow clone without that ref), the build fails with "no history from 74bd671 to $main". The choice of base commit is a configuration that future maintainers need to understand; the current comment only says "main's version at its commit 74bd671" without explaining the rationale or how to advance it.
Hard requirement on origin/main, severity unknown, counted as medium (werkrevisor)
ORANGE; Jev: real 0.76, severity 3.0 of 3
The prDocuments function at line 168 unconditionally requires git rev-parse --verify -q origin/main to succeed, throwing a GradleException otherwise. Because releasesOf(...) is called at the top level of build.gradle.kts (line 21), this runs during configuration for every Gradle invocation, including compileKotlin, test, etc. A developer or CI job that has a local clone without origin/main (fresh clone before git fetch, shallow clone, or a renamed remote) cannot run any task. While the error message is helpful, this is a breaking change for non-standard setups and is only documented in the PR document, not in AGENTS.md or the workflow file.
**Hard requirement on origin/main**, severity unknown, counted as medium (werkrevisor)
ORANGE; Jev: real 0.76, severity 3.0 of 3
The `prDocuments` function at line 168 unconditionally requires `git rev-parse --verify -q origin/main` to succeed, throwing a `GradleException` otherwise. Because `releasesOf(...)` is called at the top level of `build.gradle.kts` (line 21), this runs during configuration for every Gradle invocation, including `compileKotlin`, `test`, etc. A developer or CI job that has a local clone without `origin/main` (fresh clone before `git fetch`, shallow clone, or a renamed remote) cannot run any task. While the error message is helpful, this is a breaking change for non-standard setups and is only documented in the PR document, not in `AGENTS.md` or the workflow file.
Fixed in a69f334: the comment says that the base changes only when a PR of the old rule merges with a version of its own. main takes no force-push, so the commit stays in the history.
Fixed in `a69f334`: the comment says that the base changes only when a PR of the old rule merges with a version of its own.
`main` takes no force-push, so the commit stays in the history.
The requirement stays by intent: the earlier round found the silent fallback without origin/main (11bec44), since it gives a wrong version.
A git clone has origin/main and the full history; Werkator builds in a full clone.
Since a69f334, AGENTS.md names the requirement next to the version.
The requirement stays by intent: the earlier round found the silent fallback without `origin/main` (`11bec44`), since it gives a wrong version.
A `git clone` has `origin/main` and the full history; Werkator builds in a full clone.
Since `a69f334`, `AGENTS.md` names the requirement next to the version.
ai-review/assessment AI findings; a developer approval after checking them unlocks the merge; a human review request is pending; merge already scheduled
ORANGE 1 finding(s) that Jev rates as probably real and severe: dashboard/build.gradle.kts:171-172
YELLOW risky build changes according to Jev: dashboard/build.gradle.kts (weakens checks 0.04, risk 1.66, security 0.02)
hint 1 finding(s) of low severity or rated minor by Jev: doc/prs/2026-10-14-PR#79-derived-version.md:19
hint model recommends merge with caution
Findings
Wrong version for branch behind main at dashboard/build.gradle.kts:171-172, severity unknown, counted as medium, ORANGE, as a line comment
Vague wording at doc/prs/2026-10-14-PR#79-derived-version.md:19, severity unknown, counted as medium
hint; Jev: real 0.66, severity 0.9 of 3
"A CHANGELOG with an entry per version, as in werkcrappit, has the same problem at its top." The phrase "at its top" is unclear: the intended meaning is "at its most recent entries" (where a new version would be appended), but a reader could just as well read it as "at the top of the file". Rephrasing to "at its most recent entries" or "where a new version would be appended" would make the sentence unambiguous.
Classifier
10 of 10 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 20292, calls 1, tokens in 19590 / out 35327 (reasoning included in out), duration 241.8 s, cost 0.0476 USD (reported), classifier `jev-1.13.0` calls 10, tokens in 8123, cost 0.0003 USD, finding judge `jev-1.13.0` calls 2, tokens in 4501, cost 0.0002 USD, build file judge `jev-1.13.0` calls 1, tokens in 3560, cost 0.0001 USD, phases: path_judge 0.3 s, classifier 0.7 s, context 1.1 s, model_review 238.8 s, finding_judge 0.3 s, config: defaults + host + repository (.werkrevisor.toml at main 74bd671).
Reviewed head `a69f33436ca038961000991f4502e4e5d3f115fd` against base `74bd671ef00a343d6f25be6b8044b608af6c2b63`, werkrevisor 0.41.2.
<!-- werkrevisor:a69f33436ca038961000991f4502e4e5d3f115fd -->
<!-- werkrevisor-verdict:ORANGE -->
<!-- werkrevisor-blocks:27bf529c3f8f590c14a34a07728a07b1,0c257743ea8aa80be592864669a1ebe8,cd06106ce755f21987e40beab2f9f777,d4942e171f41db7c3afd06500c842de6,d804581a20cfbc23dc15103e21dddc18,086500e66d31436493c22d8ffa70f3be,d22dda273eb5f42ca9028e19f2e1ddaf,26b5905b737e2cbfb6fb5aa89db53648,688fdb89b40a4e172c0f540f70b00d23,ae7cbcfef337aea888ef833c451cc34e,e7b94138d3f247be86e9196b17ee0139,fad577e9dda5803c271805dc96151ea8 -->
## 🟠 werkrevisor: ORANGE / FINDINGS
Change kind: `mixed`.
### Reasons
- **ORANGE** 1 finding(s) that Jev rates as probably real and severe: dashboard/build.gradle.kts:171-172
- **YELLOW** risky build changes according to Jev: dashboard/build.gradle.kts (weakens checks 0.04, risk 1.66, security 0.02)
- **hint** 1 finding(s) of low severity or rated minor by Jev: doc/prs/2026-10-14-PR#79-derived-version.md:19
- **hint** model recommends merge with caution
### Findings
1. **Wrong version for branch behind main** at `dashboard/build.gradle.kts:171-172`, severity unknown, counted as medium, ORANGE, as a line comment
2. **Vague wording** at `doc/prs/2026-10-14-PR#79-derived-version.md:19`, severity unknown, counted as medium
hint; Jev: real 0.66, severity 0.9 of 3
"A CHANGELOG with an entry per version, as in werkcrappit, has the same problem at its top." The phrase "at its top" is unclear: the intended meaning is "at its most recent entries" (where a new version would be appended), but a reader could just as well read it as "at the top of the file". Rephrasing to "at its most recent entries" or "where a new version would be appended" would make the sentence unambiguous.
### Classifier
10 of 10 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 20292, calls 1, tokens in 19590 / out 35327 (reasoning included in out), duration 241.8 s, cost 0.0476 USD (reported), classifier `jev-1.13.0` calls 10, tokens in 8123, cost 0.0003 USD, finding judge `jev-1.13.0` calls 2, tokens in 4501, cost 0.0002 USD, build file judge `jev-1.13.0` calls 1, tokens in 3560, cost 0.0001 USD, phases: path_judge 0.3 s, classifier 0.7 s, context 1.1 s, model_review 238.8 s, finding_judge 0.3 s, config: defaults + host + repository (.werkrevisor.toml at main 74bd671).<br>
Reviewed head `a69f33436ca038961000991f4502e4e5d3f115fd` against base `74bd671ef00a343d6f25be6b8044b608af6c2b63`, werkrevisor 0.41.2.
</sub>
werkrevisor: ORANGE / FINDINGS for a69f33436ca038961000991f4502e4e5d3f115fd.
The result comment of werkrevisor holds the details.
werkrevisor: ORANGE / FINDINGS for `a69f33436ca038961000991f4502e4e5d3f115fd`.
The result comment of werkrevisor holds the details.
<!-- werkrevisor-review:a69f33436ca038961000991f4502e4e5d3f115fd -->
Wrong version for branch behind main, severity unknown, counted as medium (werkrevisor)
ORANGE; Jev: real 0.82, severity 2.8 of 3
The merge-base --is-ancestor HEAD origin/main check on line 171 returns true both when HEAD is at origin/main and when HEAD is a strict ancestor of origin/main (a branch that has fallen behind main with no own PR documents). In the latter case line 172 then sets main = "HEAD", so the git log only walks the branch's history and misses every PR document that landed on main after the branch point. The resulting version is below origin/main's, contradicting the spec ("a branch build shows the version that its merge would get now") and the spec's own rule that the build must read main's documents. The fix is to always use origin/main as the reference for the main history and let the onMain check only decide whether to append the branch's own documents. The scenario is narrow (branch behind main with no own document) and not covered by checkReleases, which only exercises a branch that has its own commits.
**Wrong version for branch behind main**, severity unknown, counted as medium (werkrevisor)
ORANGE; Jev: real 0.82, severity 2.8 of 3
The `merge-base --is-ancestor HEAD origin/main` check on line 171 returns true both when HEAD is at origin/main and when HEAD is a strict ancestor of origin/main (a branch that has fallen behind main with no own PR documents). In the latter case line 172 then sets `main = "HEAD"`, so the `git log` only walks the branch's history and misses every PR document that landed on `main` after the branch point. The resulting version is below origin/main's, contradicting the spec ("a branch build shows the version that its merge would get now") and the spec's own rule that the build must read main's documents. The fix is to always use `origin/main` as the reference for the main history and let the `onMain` check only decide whether to append the branch's own documents. The scenario is narrow (branch behind main with no own document) and not covered by `checkReleases`, which only exercises a branch that has its own commits.
By intent, no change: a HEAD that is an ancestor of origin/main is an older commit of main and gets its own version.
Werkator builds and deploys a tested commit of main while origin/main may already be further; with origin/main as reference it would report a version that it does not run.
A branch without commits of its own builds exactly that older commit.
By intent, no change: a HEAD that is an ancestor of `origin/main` is an older commit of `main` and gets its own version.
Werkator builds and deploys a tested commit of `main` while `origin/main` may already be further; with `origin/main` as reference it would report a version that it does not run.
A branch without commits of its own builds exactly that older commit.
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.
Each PR document states
Version: major|minor|patch; the build derives the version and the changelog from the PR documents in the order of the merges.Two open PRs no longer change the same line for their version.
See doc/prs/2026-10-14-PR#79-derived-version.md.
🤖 Generated with Claude Code
🟠 werkrevisor ORANGE for
cd11d58, superseded by the result for11bec44🟠 werkrevisor: ORANGE / FINDINGS
Change kind:
mixed.Reasons
Findings
dashboard/build.gradle.kts:167-168, severity unknown, counted as medium, ORANGE, as a line commentClassifier
10 of 10 units passed all questions (1 PR document(s)).
Usage: model `openrouter/minimax/minimax-m3`, LLM done, tokens counted before the call 19803, calls 1, tokens in 19129 / out 42716 (reasoning included in out), duration 239.7 s, cost 0.0570 USD (reported), classifier `jev-1.13.0` calls 10, tokens in 8095, cost 0.0003 USD, finding judge `jev-1.13.0` calls 1, tokens in 2519, cost 0.0001 USD, build file judge `jev-1.13.0` calls 1, tokens in 3418, cost 0.0001 USD, phases: path_judge 0.2 s, classifier 0.7 s, context 0.2 s, model_review 237.9 s, finding_judge 0.2 s, config: defaults + host + repository (.werkrevisor.toml at main1 answer ignored because of a confidence below [classifier] min_confidence.
4767329).Reviewed head `cd11d58fea6084e8542fbea0ce9eef11d8d964ed` against base `47673295584c858709df65a03339f56744002074`, werkrevisor 0.41.2.
werkrevisor: ORANGE / FINDINGS for
cd11d58fea6084e8542fbea0ce9eef11d8d964ed.The result comment of werkrevisor holds the details.
@@ -119,0 +164,4 @@val pathspec = ":(top)$directory"// independent of the user's git configuration, which the parsing of the patch would otherwise depend onval patch = listOf("-M", "--diff-filter=A", "-p", "--no-color", "--no-ext-diff", "--src-prefix=a/", "--dst-prefix=b/")val onMain = git(listOf("rev-parse", "--verify", "-q", "origin/main")) == nullSilent fallback, severity unknown, counted as medium (werkrevisor)
ORANGE; Jev: real 0.82, severity 2.9 of 3
When
origin/maindoes not exist (a shallow clone without fetch, or a local-only repository),prDocumentstreats any state as on main becausegit rev-parse --verify -q origin/mainreturns nulland the first disjunct makes
onMaintrue. If a developer is on a branch ahead ofmainin such a state,the build uses
HEADfor the log and misses the PR documents thatmainadded betweensinceand now,so the derived version is too low. The error at line 172 hints at shallow clones, but this fallback is
silent and yields a wrong version without any warning. The build should either fail clearly when
origin/mainis missing or treat the branch state explicitly. ThecheckReleasestask does not cover thiscase (its test always sets
refs/remotes/origin/main), so the regression would slip through CI.@@ -119,0 +164,4 @@val pathspec = ":(top)$directory"// independent of the user's git configuration, which the parsing of the patch would otherwise depend onval patch = listOf("-M", "--diff-filter=A", "-p", "--no-color", "--no-ext-diff", "--src-prefix=a/", "--dst-prefix=b/")// without main, a branch would miss what main added since it branched off, and the version would be too lowFixed in
11bec44: withoutorigin/mainthe build fails with "no origin/main, which the version needs; git fetch origin main".checkReleaseschecks this case before it setsrefs/remotes/origin/main.🟠 werkrevisor ORANGE for
11bec44, superseded by the result for89f8267🟠 werkrevisor: ORANGE / FINDINGS
Change kind:
mixed.Reasons
Findings
PR documents can be re-counted at
dashboard/build.gradle.kts:142-157, severity unknown, counted as medium, ORANGE, as a line commentConfig-time git dependency at
dashboard/build.gradle.kts:19-22, severity unknown, counted as medium, YELLOW, as a line commentClassifier
10 of 10 units passed all questions (1 PR document(s)).
Usage: model `openrouter/minimax/minimax-m3`, LLM done, tokens counted before the call 20050, calls 1, tokens in 19362 / out 36799 (reasoning included in out), duration 212.2 s, cost 0.0499 USD (reported), classifier `jev-1.13.0` calls 10, tokens in 8123, cost 0.0003 USD, finding judge `jev-1.13.0` calls 2, tokens in 4871, cost 0.0002 USD, build file judge `jev-1.13.0` calls 1, tokens in 3521, cost 0.0001 USD, phases: path_judge 0.2 s, classifier 0.7 s, context 0.3 s, model_review 210.1 s, finding_judge 0.2 s, config: defaults + host + repository (.werkrevisor.toml at main1 answer ignored because of a confidence below [classifier] min_confidence.
4767329).Reviewed head `11bec4421e3bfd94dd2f69ec319ea8734d72bb8e` against base `47673295584c858709df65a03339f56744002074`, werkrevisor 0.41.2.
werkrevisor: ORANGE / FINDINGS for
11bec4421e3bfd94dd2f69ec319ea8734d72bb8e.The result comment of werkrevisor holds the details.
@@ -17,3 +17,3 @@group = "de.hoennig"version = "0.48.0"// main's version at its commit 4767329, raised by each PR document merged after it, in the order of the merges;Config-time git dependency, severity unknown, counted as medium (werkrevisor)
YELLOW; Jev: real 0.55, severity 2.6 of 3
The script-level version derivation runs at every Gradle invocation. It calls git and requires
origin/mainto be fetched (and full history to be available). Any./gradlewcommand (includingtasks,help, IDE imports) now needsgit fetch origin mainon a fresh clone, or unshallow on a shallow clone. The error messages are clear, but the dependency is new and affects all Gradle workflows.@@ -119,0 +139,4 @@}/** The PR documents that the output of `git log -p --format="commit %cs"` or `git diff -p` adds, in its order. */fun addedPrDocuments(patch: String): List<PrDocument> {PR documents can be re-counted, severity unknown, counted as medium (werkrevisor)
ORANGE; Jev: real 0.79, severity 2.8 of 3
git log -p --diff-filter=Aselects commits that have at least one added file, but the-ppatch for such commits also shows any modifications in the same commit. If a commit both modifies a previously-added PR document and adds new PR documents,addedPrDocumentsre-adds the modified file with only its diff content, not the full file.prDocumentthen re-reads or defaults theVersion:line, violating the stated invariant that a later change of a document changes no version. ThecheckReleasestask does not cover this combined case.@@ -17,3 +17,3 @@group = "de.hoennig"version = "0.48.0"// main's version at its commit 4767329, raised by each PR document merged after it, in the order of the merges;Kept, by intent:
processResourcesputs the version into the page andwerkregie.propertiesat configuration time.A normal
git clonehasorigin/mainand the full history; Werkator builds in a full clone.A shallow clone or one without
origin/maingets a clear error instead of a wrong version (11bec44).The derivation costs three git calls per Gradle run.
@@ -119,0 +139,4 @@}/** The PR documents that the output of `git log -p --format="commit %cs"` or `git diff -p` adds, in its order. */fun addedPrDocuments(patch: String): List<PrDocument> {Not a real case:
--diff-filter=Afilters the files of the patch too, not only the commits.In a commit that changes
PR#1-a.mdand addsPR#2-b.md,git log -p --diff-filter=Ashows only+++ b/doc/prs/2026-01-02-PR#2-b.md.checkReleasescovers this case sinced0a3de3: PR#1 still gives 0.49.0.🟡 werkrevisor YELLOW for
89f8267, superseded by the result for34b0b7a🟡 werkrevisor: YELLOW / HUMAN_REVIEW
Change kind:
mixed.Reasons
Classifier
10 of 10 units passed all questions (1 PR document(s)).
Usage: model `openrouter/minimax/minimax-m3`, LLM done, tokens counted before the call 20078, calls 1, tokens in 19387 / out 27767 (reasoning included in out), duration 146.8 s, cost 0.0391 USD (reported), classifier `jev-1.13.0` calls 10, tokens in 8123, cost 0.0003 USD, build file judge `jev-1.13.0` calls 1, tokens in 3534, cost 0.0001 USD, phases: path_judge 0.2 s, classifier 0.7 s, context 0.2 s, model_review 145.1 s, config: defaults + host + repository (.werkrevisor.toml at main1 answer ignored because of a confidence below [classifier] min_confidence.
14f7237).Reviewed head `89f8267ecdc4d572b2011993e32ec982011ed359` against base `14f72372cdc6c8af1a5cc1c7b95ba24f3de4c83f`, werkrevisor 0.41.2.
New commits pushed, approval review dismissed automatically according to repository settings
🟡 werkrevisor YELLOW for
34b0b7a, superseded by the result for50b25e5🟡 werkrevisor: YELLOW / HUMAN_REVIEW
Change kind:
mixed.Reasons
Findings
Outdated exception at
doc/agentic-workflow.md:106-107, severity unknown, counted as mediumhint; Jev: real 0.78, severity 2.0 of 3
The statement "A pure release PR (version and release notes, no code) needs none" on line 107 contradicts the new rule that the build derives the version from PR documents. With the new rule, a release PR (which only contains a version bump and release notes) would still need a PR document to specify
Version: major|minor|patchand the "Release Notes" section, since the version is now derived from the documents themselves. The exception as worded is no longer valid and should be removed or reworded to match the new derivation rule.Classifier
10 of 10 units passed all questions (1 PR document(s)).
Usage: model `openrouter/minimax/minimax-m3`, LLM done, tokens counted before the call 20082, calls 1, tokens in 19391 / out 30585 (reasoning included in out), duration 191.8 s, cost 0.0425 USD (reported), classifier `jev-1.13.0` calls 10, tokens in 8123, cost 0.0003 USD, finding judge `jev-1.13.0` calls 1, tokens in 2261, cost 0.0001 USD, build file judge `jev-1.13.0` calls 1, tokens in 3532, cost 0.0001 USD, phases: path_judge 0.3 s, classifier 0.8 s, context 0.2 s, model_review 189.8 s, finding_judge 0.3 s, config: defaults + host + repository (.werkrevisor.toml at main1 answer ignored because of a confidence below [classifier] min_confidence.
74bd671).Reviewed head `34b0b7a36b91ad52d42dbe8b9b2de65b0ce81fd9` against base `74bd671ef00a343d6f25be6b8044b608af6c2b63`, werkrevisor 0.41.2.
🟠 werkrevisor ORANGE for
50b25e5, superseded by the result fora69f334🟠 werkrevisor: ORANGE / FINDINGS
Change kind:
mixed.Reasons
Findings
Hard requirement on origin/main at
dashboard/build.gradle.kts:168-169, severity unknown, counted as medium, ORANGE, as a line commentHardcoded base commit not maintained at
dashboard/build.gradle.kts:19-21, severity unknown, counted as medium, hint, as a line commentClassifier
10 of 10 units passed all questions (1 PR document(s)).
Usage: model `openrouter/minimax/minimax-m3`, LLM done, tokens counted before the call 20202, calls 1, tokens in 19505 / out 7588 (reasoning included in out), duration 61.6 s, cost 0.0132 USD (reported), classifier `jev-1.13.0` calls 10, tokens in 8123, cost 0.0003 USD, finding judge `jev-1.13.0` calls 2, tokens in 4505, cost 0.0002 USD, build file judge `jev-1.13.0` calls 1, tokens in 3532, cost 0.0001 USD, phases: path_judge 0.2 s, classifier 0.6 s, context 0.3 s, model_review 59.6 s, finding_judge 0.3 s, config: defaults + host + repository (.werkrevisor.toml at main1 answer ignored because of a confidence below [classifier] min_confidence.
74bd671).Reviewed head `50b25e5a254f10a96b53fa27fce505d97bbc2737` against base `74bd671ef00a343d6f25be6b8044b608af6c2b63`, werkrevisor 0.41.2.
werkrevisor: ORANGE / FINDINGS for
50b25e5a254f10a96b53fa27fce505d97bbc2737.The result comment of werkrevisor holds the details.
@@ -17,3 +17,3 @@group = "de.hoennig"version = "0.50.0"// main's version at its commit 74bd671, raised by each PR document merged after it, in the order of the merges;Hardcoded base commit not maintained, severity unknown, counted as medium (werkrevisor)
hint; Jev: real 0.64, severity 2.2 of 3
The base commit
74bd671at line 21 is hardcoded with no explanation of how it is chosen or updated. If this commit is lost (e.g., through a history rewrite, force-push, or shallow clone without that ref), the build fails with "no history from74bd671to $main". The choice of base commit is a configuration that future maintainers need to understand; the current comment only says "main's version at its commit 74bd671" without explaining the rationale or how to advance it.@@ -119,0 +165,4 @@// independent of the user's git configuration, which the parsing of the patch would otherwise depend onval patch = listOf("-M", "--diff-filter=A", "-p", "--no-color", "--no-ext-diff", "--src-prefix=a/", "--dst-prefix=b/")// without main, a branch would miss what main added since it branched off, and the version would be too lowgit(listOf("rev-parse", "--verify", "-q", "origin/main"))Hard requirement on origin/main, severity unknown, counted as medium (werkrevisor)
ORANGE; Jev: real 0.76, severity 3.0 of 3
The
prDocumentsfunction at line 168 unconditionally requiresgit rev-parse --verify -q origin/mainto succeed, throwing aGradleExceptionotherwise. BecausereleasesOf(...)is called at the top level ofbuild.gradle.kts(line 21), this runs during configuration for every Gradle invocation, includingcompileKotlin,test, etc. A developer or CI job that has a local clone withoutorigin/main(fresh clone beforegit fetch, shallow clone, or a renamed remote) cannot run any task. While the error message is helpful, this is a breaking change for non-standard setups and is only documented in the PR document, not inAGENTS.mdor the workflow file.@@ -17,3 +17,3 @@group = "de.hoennig"version = "0.50.0"// main's version at its commit 74bd671, raised by each PR document merged after it, in the order of the merges;Fixed in
a69f334: the comment says that the base changes only when a PR of the old rule merges with a version of its own.maintakes no force-push, so the commit stays in the history.@@ -119,0 +165,4 @@val pathspec = ":(top)$directory"// independent of the user's git configuration, which the parsing of the patch would otherwise depend onval patch = listOf("-M", "--diff-filter=A", "-p", "--no-color", "--no-ext-diff", "--src-prefix=a/", "--dst-prefix=b/")// without main, a branch would miss what main added since it branched off, and the version would be too lowThe requirement stays by intent: the earlier round found the silent fallback without
origin/main(11bec44), since it gives a wrong version.A
git clonehasorigin/mainand the full history; Werkator builds in a full clone.Since
a69f334,AGENTS.mdnames the requirement next to the version.🟠 werkrevisor: ORANGE / FINDINGS
Change kind:
mixed.Reasons
Findings
Wrong version for branch behind main at
dashboard/build.gradle.kts:171-172, severity unknown, counted as medium, ORANGE, as a line commentVague wording at
doc/prs/2026-10-14-PR#79-derived-version.md:19, severity unknown, counted as mediumhint; Jev: real 0.66, severity 0.9 of 3
"A CHANGELOG with an entry per version, as in werkcrappit, has the same problem at its top." The phrase "at its top" is unclear: the intended meaning is "at its most recent entries" (where a new version would be appended), but a reader could just as well read it as "at the top of the file". Rephrasing to "at its most recent entries" or "where a new version would be appended" would make the sentence unambiguous.
Classifier
10 of 10 units passed all questions (1 PR document(s)).
Usage: model `openrouter/minimax/minimax-m3`, LLM done, tokens counted before the call 20292, calls 1, tokens in 19590 / out 35327 (reasoning included in out), duration 241.8 s, cost 0.0476 USD (reported), classifier `jev-1.13.0` calls 10, tokens in 8123, cost 0.0003 USD, finding judge `jev-1.13.0` calls 2, tokens in 4501, cost 0.0002 USD, build file judge `jev-1.13.0` calls 1, tokens in 3560, cost 0.0001 USD, phases: path_judge 0.3 s, classifier 0.7 s, context 1.1 s, model_review 238.8 s, finding_judge 0.3 s, config: defaults + host + repository (.werkrevisor.toml at main1 answer ignored because of a confidence below [classifier] min_confidence.
74bd671).Reviewed head `a69f33436ca038961000991f4502e4e5d3f115fd` against base `74bd671ef00a343d6f25be6b8044b608af6c2b63`, werkrevisor 0.41.2.
werkrevisor: ORANGE / FINDINGS for
a69f33436ca038961000991f4502e4e5d3f115fd.The result comment of werkrevisor holds the details.
@@ -119,0 +168,4 @@// without main, a branch would miss what main added since it branched off, and the version would be too lowgit(listOf("rev-parse", "--verify", "-q", "origin/main"))?: throw GradleException("no origin/main, which the version needs; git fetch origin main")val onMain = git(listOf("merge-base", "--is-ancestor", "HEAD", "origin/main")) != nullWrong version for branch behind main, severity unknown, counted as medium (werkrevisor)
ORANGE; Jev: real 0.82, severity 2.8 of 3
The
merge-base --is-ancestor HEAD origin/maincheck on line 171 returns true both when HEAD is at origin/main and when HEAD is a strict ancestor of origin/main (a branch that has fallen behind main with no own PR documents). In the latter case line 172 then setsmain = "HEAD", so thegit logonly walks the branch's history and misses every PR document that landed onmainafter the branch point. The resulting version is below origin/main's, contradicting the spec ("a branch build shows the version that its merge would get now") and the spec's own rule that the build must read main's documents. The fix is to always useorigin/mainas the reference for the main history and let theonMaincheck only decide whether to append the branch's own documents. The scenario is narrow (branch behind main with no own document) and not covered bycheckReleases, which only exercises a branch that has its own commits.@@ -119,0 +168,4 @@// without main, a branch would miss what main added since it branched off, and the version would be too lowgit(listOf("rev-parse", "--verify", "-q", "origin/main"))?: throw GradleException("no origin/main, which the version needs; git fetch origin main")val onMain = git(listOf("merge-base", "--is-ancestor", "HEAD", "origin/main")) != nullBy intent, no change: a HEAD that is an ancestor of
origin/mainis an older commit ofmainand gets its own version.Werkator builds and deploys a tested commit of
mainwhileorigin/mainmay already be further; withorigin/mainas reference it would report a version that it does not run.A branch without commits of its own builds exactly that older commit.