The version follows from the order of the merges #79

Merged
ai-reviewer merged 10 commits from claude-code/derived-version into main 2026-10-14 20:35:04 +02:00
Collaborator

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

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)
claude-code added 1 commit 2026-10-14 19:31:49 +02:00
PR document: the version follows from the order of the merges
werkator build succeeded after 00:55
werkator/dependencies build succeeded after 00:15
f49756be75
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
claude-code added 1 commit 2026-10-14 19:34:01 +02:00
claude-code added 1 commit 2026-10-14 19:34:46 +02:00
The workflow, the PR documents and the plan state the derived version
werkator build succeeded after 01:10
werkator/dependencies build succeeded after 00:16
711697dd1d
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
claude-code added 1 commit 2026-10-14 19:39:26 +02:00
The version does not depend on the user's git configuration
werkator build succeeded after 01:10
werkator/dependencies build succeeded after 00:16
ai-review/assessment AI findings; a developer approval after checking them unlocks the merge; review requested from mi; merge scheduled for when the checks succeed
ai-review/gate build succeeded after 04:03
cd11d58fea
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
claude-code marked the pull request as ready for review 2026-10-14 19:41:17 +02:00
Collaborator
🟠 werkrevisor ORANGE for cd11d58, superseded by the result for 11bec44

🟠 werkrevisor: ORANGE / FINDINGS

Change kind: mixed.

Reasons

  • ORANGE 1 finding(s) that Jev rates as probably real and severe: dashboard/build.gradle.kts:167-168
  • YELLOW risky build changes according to Jev: dashboard/build.gradle.kts (weakens checks 0.05, risk 1.68, security 0.02)
  • hint model recommends merge with caution

Findings

  1. Silent fallback at dashboard/build.gradle.kts:167-168, severity unknown, counted as medium, ORANGE, 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 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 main 4767329).
Reviewed head `cd11d58fea6084e8542fbea0ce9eef11d8d964ed` against base `47673295584c858709df65a03339f56744002074`, werkrevisor 0.41.2.
<!-- werkrevisor:cd11d58fea6084e8542fbea0ce9eef11d8d964ed --> <!-- werkrevisor-verdict:ORANGE --> <!-- werkrevisor-blocks:ddd9343f9747b184417bd48d16e65f98,84e449208ee5ed943c8d58012ad825fe,5175105812512582571285a6fb1c7794,d4942e171f41db7c3afd06500c842de6,b70e1be6a35afa5e9342726307d2cc42,086500e66d31436493c22d8ffa70f3be,d8cdf0af8c245c94663ed85fdc10c490,26b5905b737e2cbfb6fb5aa89db53648,688fdb89b40a4e172c0f540f70b00d23,ae7cbcfef337aea888ef833c451cc34e,e7b94138d3f247be86e9196b17ee0139,fad577e9dda5803c271805dc96151ea8 --> <!-- werkrevisor-folded --> <details><summary>🟠 werkrevisor ORANGE for <code>cd11d58</code>, superseded by <a href="http://git.javagil.de/mi/werkregie/pulls/79#issuecomment-5776">the result for <code>11bec44</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:167-168 - **YELLOW** risky build changes according to Jev: dashboard/build.gradle.kts (weakens checks 0.05, risk 1.68, security 0.02) - **hint** model recommends merge with caution ### Findings 1. **Silent fallback** at `dashboard/build.gradle.kts:167-168`, severity unknown, counted as medium, ORANGE, 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 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 main 4767329).<br> Reviewed head `cd11d58fea6084e8542fbea0ce9eef11d8d964ed` against base `47673295584c858709df65a03339f56744002074`, werkrevisor 0.41.2. </sub> </details>
ai-reviewer left a comment
Collaborator

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 -->
@@ -119,0 +164,4 @@
val pathspec = ":(top)$directory"
// independent of the user's git configuration, which the parsing of the patch would otherwise depend on
val 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")) == null
Collaborator

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
claude-code added 1 commit 2026-10-14 19:47:38 +02:00
Without origin/main the version fails instead of falling short
werkator build succeeded after 01:06
werkator/dependencies build succeeded after 00:16
ai-review/assessment AI findings; a developer approval after checking them unlocks the merge; a human review request is pending; merge already scheduled
ai-review/gate build succeeded after 03:36
11bec4421e
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@@ -119,0 +164,4 @@
val pathspec = ":(top)$directory"
// independent of the user's git configuration, which the parsing of the patch would otherwise depend on
val 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 low
Author
Collaborator

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`.
Collaborator
🟠 werkrevisor ORANGE for 11bec44, superseded by the result for 89f8267

🟠 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.

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>
ai-reviewer left a comment
Collaborator

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 -->
@@ -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;
Collaborator

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.
claude-code marked this conversation as resolved
@@ -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> {
Collaborator

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.
claude-code marked this conversation as resolved
@@ -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;
Author
Collaborator

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.
@@ -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> {
Author
Collaborator

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.
claude-code added 1 commit 2026-10-14 19:54:18 +02:00
checkReleases covers a commit that changes one PR document and adds another
werkator build succeeded after 01:05
werkator/dependencies build succeeded after 00:15
ai-review/gate build failed after 04:05
d0a3de311e
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
claude-code added 1 commit 2026-10-14 19:59:35 +02:00
Merge main: the base version is 0.49.0 of PR#78
werkator build succeeded after 01:16
werkator/dependencies build succeeded after 00:16
ai-review/assessment human review required; a human approval unlocks the merge; a human review request is pending; merge already scheduled
ai-review/gate build succeeded after 02:28
89f8267ecd
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Collaborator
🟡 werkrevisor YELLOW for 89f8267, superseded by the result for 34b0b7a

🟡 werkrevisor: YELLOW / HUMAN_REVIEW

Change kind: mixed.

Reasons

  • YELLOW risky build changes according to Jev: dashboard/build.gradle.kts (weakens checks 0.05, risk 1.73, security 0.02)

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 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 main 14f7237).
Reviewed head `89f8267ecdc4d572b2011993e32ec982011ed359` against base `14f72372cdc6c8af1a5cc1c7b95ba24f3de4c83f`, werkrevisor 0.41.2.
<!-- werkrevisor:89f8267ecdc4d572b2011993e32ec982011ed359 --> <!-- werkrevisor-verdict:YELLOW --> <!-- werkrevisor-blocks:0fc3f7176889a0004b4b3b868764395f,47c01066aa2adcabf1e4c10889e28c07,cd06106ce755f21987e40beab2f9f777,d4942e171f41db7c3afd06500c842de6,b70e1be6a35afa5e9342726307d2cc42,086500e66d31436493c22d8ffa70f3be,d22dda273eb5f42ca9028e19f2e1ddaf,26b5905b737e2cbfb6fb5aa89db53648,688fdb89b40a4e172c0f540f70b00d23,ae7cbcfef337aea888ef833c451cc34e,e7b94138d3f247be86e9196b17ee0139,fad577e9dda5803c271805dc96151ea8 --> <!-- werkrevisor-folded --> <details><summary>🟡 werkrevisor YELLOW for <code>89f8267</code>, superseded by <a href="http://git.javagil.de/mi/werkregie/pulls/79#issuecomment-5811">the result for <code>34b0b7a</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.05, risk 1.73, security 0.02) ### 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 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 main 14f7237).<br> Reviewed head `89f8267ecdc4d572b2011993e32ec982011ed359` against base `14f72372cdc6c8af1a5cc1c7b95ba24f3de4c83f`, werkrevisor 0.41.2. </sub> </details>
mi approved these changes 2026-10-14 20:20:53 +02:00
Dismissed
claude-code added 1 commit 2026-10-14 20:22:41 +02:00
Merge main: the base version is 0.50.0 of PR#80
werkator build succeeded after 01:06
werkator/dependencies build succeeded after 00:17
ai-review/assessment human review required; a human approval unlocks the merge; review requested from mi; merge already scheduled
ai-review/gate build succeeded after 03:15
34b0b7a36b
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
claude-code dismissed mi's review 2026-10-14 20:22:42 +02:00
Reason:

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

Collaborator
🟡 werkrevisor YELLOW for 34b0b7a, superseded by the result for 50b25e5

🟡 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.

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
claude-code added 1 commit 2026-10-14 20:26:39 +02:00
A repository that derives the version has no release PR
ai-review/assessment AI findings; a developer approval after checking them unlocks the merge; a human review request is pending; merge already scheduled
ai-review/gate build succeeded after 01:07
werkator build succeeded after 01:02
werkator/dependencies build succeeded after 00:17
50b25e5a25
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Collaborator
🟠 werkrevisor ORANGE for 50b25e5, superseded by the result for a69f334

🟠 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.

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>
ai-reviewer left a comment
Collaborator

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 -->
@@ -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;
Collaborator

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.
claude-code marked this conversation as resolved
@@ -119,0 +165,4 @@
// independent of the user's git configuration, which the parsing of the patch would otherwise depend on
val 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 low
git(listOf("rev-parse", "--verify", "-q", "origin/main"))
Collaborator

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.
claude-code marked this conversation as resolved
@@ -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;
Author
Collaborator

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.
@@ -119,0 +165,4 @@
val pathspec = ":(top)$directory"
// independent of the user's git configuration, which the parsing of the patch would otherwise depend on
val 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 low
Author
Collaborator

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.
claude-code added 1 commit 2026-10-14 20:30:14 +02:00
AGENTS.md names what the version needs; the build script says when its base changes
werkator build succeeded after 01:11
werkator/dependencies build succeeded after 00:18
ai-review/assessment AI findings; a developer approval after checking them unlocks the merge; a human review request is pending; merge already scheduled
ai-review/gate build succeeded after 04:08
a69f33436c
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Collaborator

🟠 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.

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>
ai-reviewer left a comment
Collaborator

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 -->
@@ -119,0 +168,4 @@
// without main, a branch would miss what main added since it branched off, and the version would be too low
git(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")) != null
Collaborator

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.
claude-code marked this conversation as resolved
mi approved these changes 2026-10-14 20:35:03 +02:00
ai-reviewer merged commit 2ac98334db into main 2026-10-14 20:35:04 +02:00
ai-reviewer deleted branch claude-code/derived-version 2026-10-14 20:35:04 +02:00
@@ -119,0 +168,4 @@
// without main, a branch would miss what main added since it branched off, and the version would be too low
git(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")) != null
Author
Collaborator

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.
Sign in to join this conversation.
No labels
3 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: mi/werkregie#79