Skip to content

fix(release): emit .zip.sha512 sidecars + close Scoop install gotchas (#2758)#2761

Merged
bpamiri merged 5 commits into
developfrom
claude/objective-black-3adb90
May 18, 2026
Merged

fix(release): emit .zip.sha512 sidecars + close Scoop install gotchas (#2758)#2761
bpamiri merged 5 commits into
developfrom
claude/objective-black-3adb90

Conversation

@bpamiri
Copy link
Copy Markdown
Collaborator

@bpamiri bpamiri commented May 18, 2026

Summary

Three converging fixes for the Windows install breakage reported in #2758, with confirming reports from two additional users on scoop-wheels#2 and a private internal report.

  1. Release workflow: Emit *.zip.sha512 / *.zip.md5 for wheels-core, wheels-cli, wheels-base-template, wheels-starter-app (was *.sha512 / *.md5). The scoop-wheels autoupdate config expects the .zip.sha512 shape via \$url.sha512 substitution — without .zip. in the middle, autoupdate 404s on every non-module artifact. wheels-module already used the correct shape; this PR brings the other four into line. No external consumers depend on the old shape (verified across homebrew-wheels, scoop-wheels, .deb/.rpm builders, framework code).
  2. Docs — missing prerequisite: Add scoop bucket add java step to the Windows install instructions. Both real-user reports hit Couldn't find manifest for 'openjdk21' from 'java' bucket before they could proceed — Scoop's depends: declaration does not auto-add the dependency bucket on the user's behalf.
  3. Docs — advanced path: New "Advanced: existing LuCLI install" section under "Manual JAR install" documenting lucli modules install wheels --force --url=… for users who already have standalone LuCLI. An Aside enumerates the trade-offs vs. the package-manager paths (binary name, LUCLI_HOME isolation, JDK resolution, SQLite shim, channel awareness, upgrades). Triggered by Jay Dee's report of inferring wheels@be syntax — no such tag exists in LuCLI's registry, and the bare wheels registry entry currently points at the stale wheels-cli-lucli mirror.

Both installing.mdx (start-here/) and installation.mdx (command-line-tools/) are updated in both v4-0-0 (released) and v4-0-1-snapshot (in-progress) doc trees.

Files touched

  • tools/build/scripts/build-{base,cli,core,starterApp}.sh — checksum filenames
  • tools/build/scripts/README.md — matching doc update
  • .github/workflows/release.yml + release-candidate.ymlupload-artifact glob patterns (40 line edits, two files; snapshot.yml inherits via uses:)
  • web/sites/guides/src/content/docs/v4-0-{0,1-snapshot}/start-here/installing.mdx — Windows install steps
  • web/sites/guides/src/content/docs/v4-0-{0,1-snapshot}/command-line-tools/installation.mdx — Windows section + new "Advanced: existing LuCLI install" section

Companion / follow-up work

  • wheels-dev/scoop-wheels#3 — populates the real sha512 hashes for v4.0.0 GA in the stable Scoop manifest, the immediate unblock. Independent of this PR; either can merge first.
  • Not in this PR (need design): register scoop-wheels with Excavator vs. self-host an autoupdate workflow.
  • Not in this PR (needs Mark): update LuCLI's bundled registry (local.json) entry for wheels to point at wheels-dev/wheels directly, so lucli modules install wheels (bare) lands a current version.

Test plan

  • CI green on this branch — workflow changes are mechanical glob updates; risk of breakage is low but the next snapshot/RC build is the proof.
  • Next snapshot release publishes wheels-core-X.X.X.zip.sha512 (and .zip.md5) in addition to the existing wheels-core-X.X.X.sha512 shape... wait — this PR renames rather than adding. Verify no downstream tooling reads wheels-core-X.X.X.sha512 (verified locally — only callers are this repo's own workflows + scripts, all updated here).
  • After merge, on a fresh Windows shell: scoop bucket add java; scoop bucket add wheels https://github.com/wheels-dev/scoop-wheels; scoop install wheels-be succeeds (works today regardless of this PR — sanity-check that the docs match reality).
  • Astro build of guides site is green (pnpm --dir web/sites/guides build or whatever your local incantation is). The new section uses existing <Aside> + bash-codeblock patterns from the same file, so risk is low.
  • Spot-check the rendered "Advanced: existing LuCLI install" section in dev preview — make sure the Aside's bullet list inside the caution box renders correctly.
  • Manual smoke-test of the bleeding-edge lucli modules install --url=… snippet on a machine with LuCLI installed: confirm SNAP_TAG resolves to a non-empty value via the new jq pipeline, the empty-tag guard fires when the GitHub API is unreachable (e.g. force a network failure or hit the unauthenticated 60/hr rate limit), and the resolved URL is a real, downloadable asset before passing it to lucli.

Refs #2758
Refs wheels-dev/scoop-wheels#2

…chas to docs

Three converging fixes that together close out the user-visible install
breakage reported in #2758 (and by two additional users on the scoop-wheels
side: zainforbjs#2 and a private report from Michael at PAI).

### 1. release: emit `*.zip.sha512` / `*.zip.md5` instead of `*.sha512` / `*.md5`

The scoop-wheels bucket's `autoupdate` config substitutes `$url.sha512` to
locate each artifact's checksum sidecar — i.e. for
`wheels-core-X.X.X.zip` it looks for `wheels-core-X.X.X.zip.sha512`. The
build scripts were emitting `wheels-core-X.X.X.sha512` (no `.zip.`
segment), so even if Excavator (or any other autoupdate path) ran post-GA
it would 404 on every non-module artifact. wheels-module already used the
correct `.zip.sha512` shape; the four other build scripts didn't.

Touched:
- `tools/build/scripts/build-{base,cli,core,starterApp}.sh`: emit
  `<artifact>.zip.{md5,sha512}` (was `<artifact>.{md5,sha512}`).
- `tools/build/scripts/README.md`: documents the new filename shape.
- `.github/workflows/release.yml` + `release-candidate.yml`: update the
  `actions/upload-artifact` glob patterns to match — 40 line edits across
  the two files. No consumers grep for the old shape (verified across
  homebrew-wheels, scoop-wheels, .deb/.rpm builders, framework code).
  snapshot.yml inherits via `uses: ./.github/workflows/release.yml`.

### 2. docs: add missing `scoop bucket add java` step

`scoop install wheels` declares `java/openjdk21` as a dependency but Scoop
does not auto-add the `java` bucket on the user's behalf — both real-user
reports (Michael, zainforbjs) hit the same "Couldn't find manifest for
'openjdk21' from 'java' bucket" warning before being able to proceed. The
docs claimed it was automatic. Updated:
- `start-here/installing.mdx` Windows tab (both v4-0-0 and v4-0-1-snapshot)
- `command-line-tools/installation.mdx` (both v4-0-0 and v4-0-1-snapshot)

### 3. docs: document `lucli modules install --url=` for standalone-LuCLI users

New "Advanced: existing LuCLI install" section under "Manual JAR install"
in `command-line-tools/installation.mdx` (both versions). Covers stable
and bleeding-edge URLs, and an Aside enumerates what the user gives up vs.
the Scoop/Homebrew/.deb/.rpm paths: binary name, LUCLI_HOME isolation,
JDK resolution, SQLite shim, channel awareness, upgrade story. Triggered
by Jay Dee's report (#2758) of trying `lucli modules install wheels@be`
based on inferred channel naming — the `@be` tag doesn't exist in LuCLI's
registry, and the bare `wheels` entry points at a stale `wheels-cli-lucli`
mirror that hasn't been synced from develop since 2026-04-04.

### Not in this PR (deliberate scope split)

- Real sha512 hashes for v4.0.0 in `scoop-wheels/bucket/wheels.json` — that
  lives in a different repo. Already up as wheels-dev/scoop-wheels#3 and
  unblocks the immediate install failure.
- Deciding whether to register scoop-wheels with Excavator or self-host a
  cron-driven autoupdate workflow — needs a design call, follow-up after
  the immediate-fix PRs land.
- Updating LuCLI's bundled registry (`local.json:23`) to point at
  `wheels-dev/wheels` directly instead of the stale `wheels-cli-lucli`
  mirror — needs Mark's input on the LuCLI side.

Refs #2758
Refs wheels-dev/scoop-wheels#2

Signed-off-by: Peter Amiri <peter@alurium.com>
Copy link
Copy Markdown
Contributor

@wheels-bot wheels-bot Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Wheels Bot — Reviewer A

TL;DR: Three-part fix for the Windows install regression in #2758 — checksum filename alignment (*.zip.sha512), Scoop java bucket step, and a new "Advanced: existing LuCLI install" section. The CI workflow and build-script changes are mechanically correct and consistent across all four artifacts and both release workflows. Flagging four nits below; none are blockers, so this is a comment-only review.


Correctness

The core fix is complete:

  • All four build scripts (build-base.sh, build-cli.sh, build-core.sh, build-starterApp.sh) consistently rename their checksum outputs to .zip.md5 / .zip.sha512.
  • Both release.yml and release-candidate.yml update every glob pattern (upload-artifact sections and the release-publish files: block). Count checks out — no missed occurrences.
  • snapshot.yml calls release.yml as a reusable workflow (uses: ./.github/workflows/release.yml), so the fix propagates to snapshot builds without a separate edit. The PR body correctly describes this.
  • The wheels-module artifact already used the .tar.gz.sha512 / .zip.sha512 shape; the PR leaves those untouched, which is right.

Conventions

tools/build/scripts/README.md still omits wheels-starter-app

The README text says "the three Wheels variants: Core, Base Template, and CLI" and its artifact-structure diagram lists only those three. build-starterApp.sh has existed for a while and is updated here, but the README never mentioned it. This PR touches the README and could close that gap.

# Suggestion — README.md "Two Types of Scripts" section
- **`build-core.sh`** - Builds the Wheels Core framework package
- **`build-base.sh`** - Builds the Wheels Base Template (application starter template)
- **`build-cli.sh`** - Builds the Wheels CLI commands module
+ - **`build-starterApp.sh`** - Builds the Wheels Starter App

# Suggestion — artifact structure block (add after wheels-cli entries)
      wheels-starter-app-{version}.zip
      wheels-starter-app-{version}.zip.md5
      wheels-starter-app-{version}.zip.sha512

Not a blocker (pre-existing), but since the file is being touched anyway it is worth fixing.

Docs

Fragile curl | sed pipeline in the bleeding-edge snippet

web/sites/guides/src/content/docs/v4-0-0/command-line-tools/installation.mdx (and the v4-0-1-snapshot mirror), "Advanced: existing LuCLI install" section:

SNAP_TAG=$(curl -fsSL https://api.github.com/repos/wheels-dev/wheels-snapshots/releases \
  | sed -nE 's/.*"tag_name": *"v([^"]+)".*/\1/p' | head -1)
lucli modules install wheels --force \
  --url="https://github.com/wheels-dev/wheels-snapshots/releases/download/v${SNAP_TAG}/wheels-module-${SNAP_TAG}.zip"

Two concerns:

  1. Compact JSON breaks sed. The sed regex parses line by line. GitHub's API is currently pretty-printed, but if it ever returns compact JSON (all one line), the greedy .* at the start of the pattern will match the last tag_name on the line, which may be wrong. jq or the gh CLI are less fragile: gh release list -R wheels-dev/wheels-snapshots --limit 1 --json tagName --jq '.[0].tagName'.

  2. Silent failure. If the API call fails (network error, rate limit — unauthenticated calls are capped at 60/hr) or returns unexpected JSON, SNAP_TAG is empty. The subsequent lucli modules install command then requests a URL ending in .../download/v/wheels-module-.zip, which will give an unhelpful 404. A simple guard would help:

if [ -z "$SNAP_TAG" ]; then
  echo "Error: could not resolve snapshot tag. Check your network or set SNAP_TAG manually." >&2
  exit 1
fi

No CHANGELOG entry

The [Unreleased] section in CHANGELOG.md has no ### Fixed entry for either:

  • the .zip.sha512 checksum rename (fixes the Scoop autoupdate 404), or
  • the scoop bucket add java missing-step fix.

Both directly unblocked real-user installs reported in #2758. A ### Fixed entry would help users reading the changelog know the issue is resolved.


Commits

fix(release): emit .zip.{sha512,md5} sidecars + add Scoop install gotchas to docs

Type fix, scope release, subject 82 chars, sentence-case — passes commitlint. The "why" is implicit from the issue reference; acceptable.


Tests

No framework code changed — no spec coverage needed. The PR test-plan items are reasonable. One gap: the bleeding-edge curl | sed snippet has no explicit test-plan checkbox, even a manual smoke-test ("run the two-liner on a machine with LuCLI installed and confirm the resolved URL is valid before passing it to lucli"). Low priority, but worth adding.

@wheels-bot
Copy link
Copy Markdown
Contributor

wheels-bot Bot commented May 18, 2026

Wheels Bot - Reviewer B (round 1)

A's review is accurate and grounded. Every claim I checked against the diff holds. No sycophancy, no false positives, no notable missed issues. A's COMMENTED verdict is consistent with the findings. Aligning on converged-changes so the four actionable items can be addressed before merge.

Sycophancy: None detected. A does not approve the PR, correctly choosing COMMENTED over APPROVED despite the core fix being mechanically sound.

False positives: None detected. Verified all four of A's claims against the diff: correctness count (build scripts + workflows), README omitting starter-app, fragile curl|sed pipeline (greedy .* yields oldest tag on compact JSON; empty SNAP_TAG silently fails), and CHANGELOG gap. All accurate.

Missed issues: None beyond what A flagged. Minor: README artifact diagram also omits wheels-starter-app-be.zip in the unchanged -be.zip context lines, but this is the same pre-existing gap A noted.

Verdict alignment: A's COMMENTED state is consistent — all findings are non-blocking ('not a blocker', 'worth adding', 'low priority'), so neither APPROVED nor REQUEST_CHANGES is appropriate.

Convergence: Aligned. A's four concrete actionable items (README diagram entries for starter-app, curl|sed to jq/gh with empty-tag guard, CHANGELOG Fixed entry, test-plan checkbox) map to converged-changes per protocol. Bot-address-review can apply all four cleanly.

- README at tools/build/scripts/: add build-starterApp.sh to the
  scripts list and add wheels-starter-app artifact entries to the
  output-structure diagram (header text bumped from "three" to "four"
  Wheels variants).
- installation.mdx (v4-0-0 + v4-0-1-snapshot): replace the fragile
  curl | sed pipeline in the new "Advanced: existing LuCLI install"
  section with jq, and add an empty-tag guard so an API failure or
  rate-limit miss fails fast with a useful message instead of
  silently 404-ing on a malformed URL.
- CHANGELOG.md: add ### Fixed entries under [Unreleased] for the
  .zip.{sha512,md5} sidecar rename and the Windows scoop bucket add
  java prerequisite.
- PR description: add a manual smoke-test checkbox covering the
  bleeding-edge lucli modules install --url= snippet.

Signed-off-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com>
@wheels-bot
Copy link
Copy Markdown
Contributor

wheels-bot Bot commented May 18, 2026

Wheels Bot — Address Review (round 1)

Applied consensus findings from Reviewer A and Reviewer B's convergence (round 1):

  • README diagram + scripts list omitted wheels-starter-apptools/build/scripts/README.md now adds build-starterApp.sh to both the "Build Scripts (for GitHub Artifacts)" inline list (line 14) and the "Individual Build Scripts" section (line 26), plus three new versioned-artifact lines and one -be.zip line in the output-structure diagram (lines 92-94, 98). Header text bumped from "three Wheels variants" to "four Wheels variants" (line 3).
  • Fragile curl | sed pipeline in the bleeding-edge snippetinstallation.mdx:161-169 in both v4-0-0/command-line-tools/ and v4-0-1-snapshot/command-line-tools/ now uses jq -r '.[0].tag_name | sub("^v"; "")' instead of the greedy-regex sed -nE … | head -1, and adds an empty-tag guard that prints a useful error and exits non-zero on API failure / rate-limit / unexpected JSON. The fix is scoped to the new "Advanced: existing LuCLI install" snippet flagged by Reviewer A — the pre-existing .deb / .rpm snippets at lines 76-87 use the same pattern but were not introduced by this PR and were not in the consensus.
  • CHANGELOG entry missingCHANGELOG.md now carries two new ### Fixed entries at the top of the [Unreleased] section: one for the *.zip.sha512 / *.zip.md5 checksum-sidecar rename (closes wheels-cli-lucli 4.x module not published — blocks 4.0.1-SNAPSHOT install #2758 + scoop-wheels#2), and one for the scoop bucket add java Windows prerequisite documentation gap.
  • Test-plan checkbox for the bleeding-edge snippet — added a sixth checkbox to the PR description's ## Test plan block covering the manual smoke-test path A asked for: confirm SNAP_TAG resolves via the new jq pipeline, the empty-tag guard fires on network/rate-limit failure, and the resolved URL is downloadable before lucli is invoked.

No findings were intentionally skipped — all four converged items from Reviewer A's COMMENTED verdict (which Reviewer B confirmed had zero false positives and zero missed issues) are addressed in commit a81345ae5.

No vendor/wheels/ or spec code was touched — all changes are pure documentation (README, CHANGELOG, two installation.mdx files), so there is no spec layer to re-run via bash tools/test-local.sh. The Astro build of the guides site is the relevant correctness check for the two .mdx edits; that's already in the PR's test plan.

The new commit will trigger a fresh Reviewer A run on the updated SHA. Convergence loop continues until reviewers align on approve or the outer-loop cap (5 rounds) is reached.

Copy link
Copy Markdown
Contributor

@wheels-bot wheels-bot Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Wheels Bot — Reviewer A

TL;DR: Round-1 follow-up commit (a81345ae) addresses four of the five findings from the prior review: README diagram updated to include wheels-starter-app, the fragile curl | sed pipeline in the new "Advanced: existing LuCLI install" section replaced with jq plus an empty-tag guard, CHANGELOG entries added, and the smoke-test checkbox added to the test plan. The core CI/build workflow changes from the original commit remain mechanically correct. Flagging one incomplete fix and one stale word in the README; neither is a blocker.


Correctness

Linux .deb/.rpm bleeding-edge snippets still use the old curl | sed pipeline

The round-1 fix replaced the fragile sed tag-resolver in the "Advanced: existing LuCLI install" section (lines 161-163 in both installation.mdx files) but left the pre-existing Linux snippets untouched. All four instances in both doc trees still read:

# v4-0-0/command-line-tools/installation.mdx, lines 76-77 and 84-85
# v4-0-1-snapshot/command-line-tools/installation.mdx, same line numbers
SNAP_TAG=$(curl -fsSL https://api.github.com/repos/wheels-dev/wheels-snapshots/releases \
  | sed -nE 's/.*"tag_name": *"v([^"]+)".*/\1/p' | head -1)

The same compact-JSON / silent-empty concerns the prior review raised apply here. If the API rate-limits (60 unauthenticated req/hr) or returns compact JSON, SNAP_TAG becomes empty or wrong; the subsequent curl/dnf command then silently fetches a malformed URL. The deb/rpm snippets also lack the empty-tag guard added to the LuCLI-install section by the round-1 fix. Treating two parallel snippets in the same file differently is confusing to readers. Suggested fix (apply to all four instances in both doc trees):

SNAP_TAG=$(curl -fsSL https://api.github.com/repos/wheels-dev/wheels-snapshots/releases \
  | jq -r '.[0].tag_name | sub("^v"; "")')
if [ -z "$SNAP_TAG" ] || [ "$SNAP_TAG" = "null" ]; then
  echo "Error: could not resolve snapshot tag. Check your network, GitHub API rate limit, or set SNAP_TAG manually." >&2
  exit 1
fi
SNAP_FILENAME_VER="${SNAP_TAG//-/.}"

This is the only remaining open item from the prior review; everything else was addressed cleanly.


Docs

tools/build/scripts/README.md line 36 — stale "three" count

The Convenience Scripts section still reads:

- **`build-all.sh`** - Builds all three variants sequentially (useful for local testing)

Line 3 was correctly updated to "four Wheels variants" in this same commit, but line 36 was missed. One-word fix: "three" → "four".


Commits

docs: address Reviewer A/B consensus findings (round 1) — type docs, subject 51 chars, not ALL-CAPS, DCO sign-off present. Passes commitlint.


Tests

No framework code changed. No spec coverage needed.

@bpamiri
Copy link
Copy Markdown
Collaborator Author

bpamiri commented May 18, 2026

Pushed an additional commit (5144fdb) extending the scope per the scoop-wheels#4 follow-up:

release: dispatch scoop-wheels, retire chocolatey — swaps chocolatey-wheels out for scoop-wheels in the "Dispatch downstream package managers" step. The chocolatey path is being retired for the v4.x Windows install (it's CommandBox-based and can't drive v4); Scoop is now the permanent Windows path. Once scoop-wheels#4 merges, this dispatch will trigger the new autoupdate workflow there.

Touches:

  • The dispatch loop itself (for repo in homebrew-wheels scoop-wheels).
  • The secret docstring at the top of release.yml.
  • The in-step warning message.
  • Three sibling comments (apt/yum dispatch + bump-develop) that referenced homebrew/chocolatey as their channel-derivation template — now homebrew/scoop.

No functional change for v4.0.0 (it already shipped). Takes effect on the next snapshot or 4.0.1.

The scoop bucket add java doc step added earlier in this PR will be removed in a small follow-up PR after scoop-wheels#4 merges (the JDK becomes inlined there, making the bucket-add step unnecessary). Holding the rollback until then avoids a window where the docs and bucket are inconsistent.

@wheels-bot
Copy link
Copy Markdown
Contributor

wheels-bot Bot commented May 18, 2026

Wheels Bot — Reviewer B (round 1)

A's review for SHA a81345ae is accurate and grounded. Both findings are verified against the actual diff and file contents. No sycophancy, no false positives, no missed issues. A's COMMENTED verdict is consistent with the findings. Aligning on converged-changes so both actionable items can be applied before merge.

Sycophancy

None detected. A correctly withholds APPROVED with two open items outstanding, using COMMENTED as the appropriate state.

False positives

None detected. Verified both of A's claims directly:

  • deb/rpm pipelinev4-0-0/command-line-tools/installation.mdx lines 76-83 (and the identical block in v4-0-1-snapshot) still use sed -nE with no guard. Confirmed: these lines are untouched in the diff. A is correct.
  • README line 36 stale counttools/build/scripts/README.md line 36 reads Builds all three variants sequentially. The round-1 address-review fixed line 3 but missed this line. A is correct.

Missed issues

None beyond what A flagged.

One note on scope: the round-1 address-review explicitly called the deb/rpm instances "not in the consensus" (pre-existing, not introduced by this PR). A re-raises them as a remaining open item, which is accurate — the two snippets in the same file now behave inconsistently with the new Advanced section. B treats A's re-raise as a legitimate finding rather than scope creep.

Verdict alignment

COMMENTED is correct. Neither finding is severe enough for REQUEST_CHANGES, and APPROVED would be wrong with two known open items. The verdict is well-calibrated.

Convergence

Aligned. A's two findings are accurate and concrete:

  1. README line 36: three to four (one-word fix in tools/build/scripts/README.md).
  2. deb/rpm snippets in both installation.mdx files (four instances across two doc trees): replace the sed -nE pipeline with the same jq pipeline plus empty-tag guard applied in the round-1 fix.

Both are clean mechanical edits for bot-address-review. Emitting converged-changes.

Copy link
Copy Markdown
Contributor

@wheels-bot wheels-bot Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Wheels Bot — Reviewer A

TL;DR: Round-3 commit (5144fdbb9) swaps the downstream dispatch target from chocolatey-wheels to scoop-wheels in release.yml. The functional change is correct and complete: the dispatch loop, warning message, and all sibling comments are updated consistently. One blocker: the commit type release: is not in the commitlint allowlist. Two items from the round-2 review remain open and unchanged by this commit. Requesting changes on the commitlint violation; the other two are carry-overs.


Commits

release: is not a valid commitlint type

commitlint.config.js extends @commitlint/config-conventional, which enforces a type-enum rule. The allowed types (quoted verbatim in the config's own comment block) are:

feat, fix, docs, style, refactor, perf, test, build, ci, chore, revert

The commit release: dispatch scoop-wheels, retire chocolatey uses release as its type, which is not in that list. The change touches a CI workflow file (.github/workflows/release.yml) and retires a downstream dispatch target — the correct type is ci: or, if read as maintenance cleanup, chore:. Suggested replacement:

ci: dispatch scoop-wheels, retire chocolatey

The commit body and sign-off are otherwise fine: the "why" is clearly explained, subject length is well under 100 chars, and the DCO Signed-off-by: trailer is present.


Correctness (carry-overs from round 2, not introduced by this commit)

Linux bleeding-edge snippets still use the old curl | sed pipeline

Both doc trees (v4-0-0 and v4-0-1-snapshot) still have the un-guarded sed tag-resolver in the apt/dnf bleeding-edge install sections (e.g. installation.mdx lines 76–85 in each tree):

SNAP_TAG=$(curl -fsSL https://api.github.com/repos/wheels-dev/wheels-snapshots/releases \
  | sed -nE 's/.*"tag_name": *"v([^"]+)".*/\1/p' | head -1)

The round-2 review proposed replacing these four instances (two doc trees × two Linux package types) with jq -r '.[0].tag_name | sub("^v"; "")' plus the empty-tag guard added to the LuCLI section in round 1. These sites were not touched by this commit.


Docs (carry-over from round 2, not introduced by this commit)

tools/build/scripts/README.md line 36 — stale "three" count

- **`build-all.sh`** - Builds all three variants sequentially (useful for local testing)

Line 3 of the same file correctly says "four Wheels variants" (updated in round 1), but line 36 still says "three". One-word fix: "three" → "four". Not introduced by this commit; still unaddressed.


Tests

No framework code changed. No spec coverage needed.

@wheels-bot
Copy link
Copy Markdown
Contributor

wheels-bot Bot commented May 18, 2026

Wheels Bot — Address Review (round 2)

Applied consensus findings from Reviewer A and Reviewer B's convergence (round 1 of convergence loop on SHA a81345ae):

  • tools/build/scripts/README.md line 36 — stale "three" count — Convenience Scripts section now reads "Builds all four variants sequentially". Line 3 was fixed in the round-1 address-review; line 36 was the missed sibling Reviewer A flagged on a81345ae and re-flagged on 5144fdbb.
  • Linux .deb/.rpm bleeding-edge snippets still using sed -nEinstallation.mdx:76-77 and :84-85 in both v4-0-0/command-line-tools/ and v4-0-1-snapshot/command-line-tools/ now use jq -r '.[0].tag_name | sub("^v"; "")' and add the same empty-tag guard ([ -z "$SNAP_TAG" ] || [ "$SNAP_TAG" = "null" ]) that the round-1 fix applied to the LuCLI "Advanced" section. All four instances across the two doc trees are now consistent with each other and with the LuCLI snippet — readers won't see two parallel snippets in the same file treated differently.

Reviewer A's latest review (on 5144fdbb) also flagged the commit type release: in bpamiri's manual commit as not in the commitlint allowlist (feat, fix, docs, style, refactor, perf, test, build, ci, chore, revert). That finding is from a single reviewer with no Reviewer B convergence yet — skipped: outside the converged-changes scope for this round.

No vendor/wheels/ or spec code touched — all changes are pure documentation (README.md + two .mdx files), so no bash tools/test-local.sh layer is applicable. The Astro build of the guides site is the relevant correctness check for the .mdx edits and is already in the PR's test plan.

The new commit will trigger a fresh Reviewer A run on the updated SHA. Convergence loop continues until reviewers align on approve or the outer-loop cap (5 rounds) is reached.

@wheels-bot
Copy link
Copy Markdown
Contributor

wheels-bot Bot commented May 18, 2026

Wheels Bot — Reviewer B (round 1)

A's review for SHA 5144fdbb9 is accurate and grounded. All three findings are verified against the actual diff and current file state. No sycophancy, no false positives, no missed issues. A's CHANGES_REQUESTED verdict is correct: the commitlint violation is a genuine blocker, and the two carry-overs from round 2 remain unaddressed. Aligning on converged-changes.

Sycophancy

None detected. A correctly issues CHANGES_REQUESTED rather than APPROVED or COMMENTED despite the round-3 commit being otherwise mechanically clean.

False positives

None detected. Verified all three findings directly:

  • release: not a valid commitlint typecommitlint.config.js extends @commitlint/config-conventional with no type-enum override. The effective allowlist is feat, fix, docs, style, refactor, perf, test, build, ci, chore, revert. release is not in it. The commit 5144fdbb9 uses release as the type; A's suggested replacement ci: is correct (the change touches .github/workflows/release.yml). Note: f01ea44cf uses fix(release): where release is a scope — that is valid since scopes are unrestricted. The human's commit uses release: as the type — that is the violation.
  • Linux bleeding-edge snippets — confirmed present. Both v4-0-0 and v4-0-1-snapshot copies of installation.mdx have four sed -nE pipeline instances at lines 60, 67, 77, 85 in each file. None touched by the round-3 commit.
  • README line 36 stale "three" — confirmed present. tools/build/scripts/README.md line 36 reads "Builds all three variants sequentially". Not touched by the round-3 commit.

Missed issues

None beyond what A flagged. The round-3 commit is a narrow workflow/docs change (dispatch loop swap + sibling comment updates); no CFML code, no security surface, no API changes.

Verdict alignment

CHANGES_REQUESTED is correct. The commitlint violation requires a commit amendment before merge; APPROVED or COMMENTED would be wrong here.

Convergence

Aligned. Three concrete items for bot-address-review:

  1. Amend commit 5144fdbb9 type: release: -> ci: (one-word change in the commit subject).
  2. README tools/build/scripts/README.md line 36: three -> four.
  3. Four sed -nE pipeline instances (two doc trees x two Linux package types, lines 60, 67, 77, 85 in each installation.mdx) — replace with the same jq -r '.[0].tag_name | sub("^v"; "")' pattern plus empty-tag guard applied in round 1.

All three are clean mechanical edits. Emitting converged-changes.

Copy link
Copy Markdown
Contributor

@wheels-bot wheels-bot Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Wheels Bot — Reviewer A

TL;DR: Round-2 follow-up commit (5d0d12b) correctly closes the two carry-overs from the prior review: the stale "three" → "four" in tools/build/scripts/README.md:36 and the fragile sed -nE tag-resolver in the Linux bleeding-edge snippets across both doc trees, both now replaced with jq -r '.[0].tag_name | sub("^v"; "")' plus the same empty-tag guard added in round 1. One blocker remains: commit 5144fdbb9 still carries the release: type, which is not in the commitlint allowlist. That was the sole reason for the round-3 request-changes and it is unchanged.


Commits

release: type in 5144fdbb9 — still a commitlint violation

The commit 5144fdbb9 release: dispatch scoop-wheels, retire chocolatey uses release as its type. commitlint.config.js extends @commitlint/config-conventional with a hard type-enum rule. The allowed types (quoted verbatim from the config's comment block) are:

feat, fix, docs, style, refactor, perf, test, build, ci, chore, revert

This commit touches .github/workflows/release.yml and retires a downstream dispatch target — the correct type is ci (CI/CD workflow change) or chore (maintenance cleanup). Suggested replacement:

ci: dispatch scoop-wheels, retire chocolatey

The commit body and DCO sign-off are otherwise fine. This was the only request-changes finding in round 3 and it is still unresolved. A rebase, interactive squash, or amend + force-push of the one bad commit is the path forward.


Correctness

All carry-overs from rounds 1–3 are resolved:

  • tools/build/scripts/README.md:36 — "three" → "four" ✓
  • v4-0-0/command-line-tools/installation.mdx lines 76–95 — jq + empty-tag guard ✓
  • v4-0-1-snapshot/command-line-tools/installation.mdx same lines — jq + empty-tag guard ✓

The round-2 commit introduces no new functional changes beyond those three targeted fixes.


Commits (round-2 commit 5d0d12b)

docs: address Reviewer A/B consensus findings (round 2) — type docs, subject 51 chars, not ALL-CAPS, DCO Signed-off-by: claude[bot] trailer present. Passes commitlint.


Tests

No framework code changed. No spec coverage needed.

@wheels-bot
Copy link
Copy Markdown
Contributor

wheels-bot Bot commented May 18, 2026

Wheels Bot -- Reviewer B (round 1)

A's review for SHA 5d0d12b is accurate and well-targeted. The single finding (release: as a commit type in 5144fdbb9) is a genuine commitlint violation, all prior carry-overs are correctly marked resolved, and CHANGES_REQUESTED is the right verdict. No sycophancy, no false positives, no missed issues. Aligning on converged-changes, with a note that the required fix is a human action: bot-address-review cannot amend a historical commit without a force-push, which the rails prohibit.

Sycophancy

None detected. A correctly withholds APPROVED with one open item remaining.

False positives

None detected. Verified both of A's assertions directly:

  • release: type violation -- commitlint.config.js extends @commitlint/config-conventional with no type-enum override. The effective allowlist (feat, fix, docs, style, refactor, perf, test, build, ci, chore, revert) is confirmed in the config file. release is absent. A's suggested replacement ci: is correct for a workflow dispatch change. Note: f01ea44cf uses fix(release): where release is a scope -- that is valid since scopes are unrestricted; only the type in 5144fdbb9 is the violation.
  • Carry-overs resolved -- the jq -r fix plus empty-tag guard is present in both v4-0-0 and v4-0-1-snapshot copies of installation.mdx for both the Debian and Fedora snippets (four instances). A marks these correctly.

Missed issues

None beyond what A flagged. The diff is docs plus workflow globs plus build script checksum renames -- no CFML code, no cross-engine surface, no security changes. The note in bpamiri's PR comment about the future removal of the scoop bucket add java step (pending scoop-wheels#4) does not need flagging here -- it is accurate for the current state and a follow-up is already planned.

Verdict alignment

CHANGES_REQUESTED is correct. The commitlint violation is a blocking concern; COMMENTED or APPROVED would be wrong with a known type violation in the history.

Convergence

Aligned. One item for resolution: commit 5144fdbb9 needs its type rewritten from release: to ci:. This is a human-action item -- bpamiri authored the commit, and fixing a historical commit message requires an interactive rebase or amend + force-push, both of which are outside the bot's rails. Bot-address-review should surface this explicitly as a request to bpamiri rather than attempting a new code commit. Emitting converged-changes so the loop continues.

@wheels-bot
Copy link
Copy Markdown
Contributor

wheels-bot Bot commented May 18, 2026

Wheels Bot — Address Review (round 3)

Applied consensus findings from Reviewer A and Reviewer B's convergence (round 1 of convergence loop on SHA 5144fdbb9):

  • Stable Linux .deb/.rpm snippets still using sed -nEinstallation.mdx:60-67 in both v4-0-0/command-line-tools/ and v4-0-1-snapshot/command-line-tools/ now use jq -r '.tag_name | sub("^v"; "")' plus the empty-tag guard ([ -z "$WHEELS_VERSION" ] || [ "$WHEELS_VERSION" = "null" ]). This matches the resolver pattern that round 1 applied to the LuCLI Advanced section and round 2 applied to the bleeding-edge .deb/.rpm snippets at lines 77/85. All four sed-based tag resolvers per file from Reviewer B's converged-changes list (lines 60, 67, 77, 85 × 2 doc trees) are now jq-based with guards. The stable form uses .tag_name directly (single-object response from /releases/latest) rather than .[0].tag_name (array from /releases) — same resolver shape, different selector for the different endpoint.

The other two items in Reviewer B's converged-changes are accounted for:

  • README tools/build/scripts/README.md line 36 (threefour) — already addressed in commit 5d0d12b48 (round 2). Verified: line 36 currently reads "Builds all four variants sequentially". No change needed in this round.
  • Amend commit 5144fdbb9 type release:ci: — skipped: requires rewriting published git history. _shared-rails.md restricts the bot to read-only git operations (no git push --force, no git rebase, no git commit --amend on shared branches). Leaving this for human handling — options are (a) amend the commit and force-push, (b) squash-merge with a conforming subject, or (c) accept the commitlint warning at merge time. None of those are bot-safe.

No vendor/wheels/ or spec code touched — both changes are pure documentation (the two .mdx files), so no bash tools/test-local.sh layer is applicable. The Astro build of the guides site is the relevant correctness check for the .mdx edits and is already in the PR's test plan.

The new commit will trigger a fresh Reviewer A run on the updated SHA. Convergence loop continues until reviewers align on approve or the outer-loop cap (5 rounds) is reached.

wheels-bot Bot pushed a commit that referenced this pull request May 18, 2026
- Replace remaining `curl | sed -nE` pipelines in the stable Linux
  `.deb`/`.rpm` install snippets (lines 60 and 67 in both
  `v4-0-0/command-line-tools/installation.mdx` and
  `v4-0-1-snapshot/command-line-tools/installation.mdx`) with the
  same `jq -r '.tag_name | sub("^v"; "")'` pattern plus empty-tag
  guard that round 1 applied to the LuCLI section and round 2
  applied to the bleeding-edge `.deb`/`.rpm` snippets. The two
  parallel snippet pairs in each file (stable + bleeding-edge) now
  use the same resolver and error-handling path.

Reviewer B's round-1 converged-changes on SHA `5144fdbb9` also
listed amending the type of commit `5144fdbb9` from `release:` to
`ci:` to satisfy commitlint. That requires rewriting published git
history, which is outside the bot's allowed git operations
(read-only `git` per `_shared-rails.md`). It is left for a human to
amend, squash-merge with a conforming subject, or override the
DCO/commitlint check at merge time.

Refs PR #2761.

Signed-off-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com>
Copy link
Copy Markdown
Contributor

@wheels-bot wheels-bot Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Wheels Bot — Reviewer A

TL;DR: Round-3 commit (`810c83abf`) closes the last functional gap: the two stable Linux `.deb`/`.rpm` install snippets in both doc trees that still used the fragile `curl | sed -nE` tag-resolver are now replaced with `jq -r '.tag_name | sub("^v"; "")'` and the same empty-tag guard applied to all other snippet pairs in rounds 1 and 2. Every shell snippet across both doc trees is now consistent. All prior findings are resolved. One blocker carries forward from rounds 3–4 and was not touched by this commit: commit `5144fdbb9` still uses the type `release:`, which is not in the `commitlint.config.js` allowlist. That requires human action — the bot's `_shared-rails.md` constraint (read-only git) prevents it from amending or rebasing.


Correctness

All prior carry-overs resolved

  • `tools/build/scripts/README.md` line 1 and line 36: "three" → "four" ✓ (round 2)
  • `tools/build/scripts/README.md`: `build-starterApp.sh` listed in both the script table and the artifact diagram ✓ (round 1)
  • CHANGELOG `[Unreleased] ### Fixed` entries for checksum rename and `scoop bucket add java` prereq ✓ (round 1)
  • Bleeding-edge `.deb`/`.rpm` snippets in both doc trees — `jq` + guard ✓ (round 2)
  • Advanced LuCLI section — `jq` + guard ✓ (round 1)
  • Stable `.deb`/`.rpm` snippets in both doc trees — `jq` + guard ✓ (round 3, this commit)

The six snippet pairs in each `installation.mdx` (stable Debian, stable Fedora, bleeding-edge Debian, bleeding-edge Fedora, LuCLI stable, LuCLI bleeding-edge) are now uniform.


Commits

`5144fdbb9 release:` — commitlint violation, requires human action

Commit `5144fdbb9 release: dispatch scoop-wheels, retire chocolatey` uses `release` as its type. `commitlint.config.js` extends `@commitlint/config-conventional` with a hard `type-enum` rule. The allowlist (reproduced verbatim in the config's own comment block) is:

feat, fix, docs, style, refactor, perf, test, build, ci, chore, revert

`release` is not in that list. The change touches `.github/workflows/release.yml` and retires a downstream dispatch target — the correct type is `ci` (CI/CD change) or `chore` (maintenance). Suggested rewrite:

ci: dispatch scoop-wheels, retire chocolatey

The round-3 commit body (`810c83abf`) correctly notes that amending `5144fdbb9` requires rewriting published history, which is outside the bot's allowed git operations per `_shared-rails.md`. The path forward is one of:

  1. Human amend + force-push: rebase to squash `5144fdbb9` into the prior commit or `git commit --amend` with the correct type.
  2. Squash-merge: GitHub's squash-merge dialog lets the merger supply a conforming subject line — confirm the DCO trailer is included in the squash message.
  3. commitlint override: accept the violation at merge time and address the commit type in the squash message.

No other commits have commitlint issues. `f01ea44cf fix(release):`, `a81345ae5 docs:`, `5d0d12b48 docs:`, and `810c83abf docs:` all pass: correct types from the allowlist, subject ≤ 100 chars, not ALL-CAPS, DCO `Signed-off-by:` trailers present.


Tests

No framework code changed across the entire PR. No spec coverage needed.

@wheels-bot
Copy link
Copy Markdown
Contributor

wheels-bot Bot commented May 18, 2026

Wheels Bot — Reviewer B (round 1)

A's review for SHA 810c83abf is accurate and grounded. The single remaining finding — 5144fdbb9 using release: as its commit type — is a confirmed commitlint violation. All prior carry-overs are correctly marked resolved. CHANGES_REQUESTED is the right verdict. No sycophancy, no false positives, no missed issues. Aligning on converged-changes, with a flag that address-review cannot resolve this mechanically and needs to surface a direct human request to bpamiri.

Sycophancy

None detected. A correctly withholds APPROVED with one open item remaining.

False positives

None detected. Verified both of A's assertions directly:

  • All prior carry-overs resolved — the diff confirms the stable deb/rpm snippets in both v4-0-0 and v4-0-1-snapshot copies of installation.mdx now use jq -r '.tag_name | sub("^v"; "")' plus the empty-tag guard. The README line 1 update to "four Wheels variants" is present in the diff. A is correct that everything from prior rounds is closed.
  • release: type violationcommitlint.config.js extends @commitlint/config-conventional and has an explicit type-empty: [2, 'never'] rule. The config's own comment block enumerates the effective type allowlist as feat, fix, docs, style, refactor, perf, test, build, ci, chore, revert. release is absent. The commit 5144fdbb9 release: dispatch scoop-wheels, retire chocolatey violates this. A's suggested replacement ci: is correct — the change is a CI/CD workflow dispatch swap. Note that f01ea44cf fix(release): is valid: release there is the scope, not the type, and scopes are unrestricted.

Missed issues

None beyond what A flagged. The diff is exclusively docs and workflow files — no CFML code, no cross-engine surface, no security or DI changes. No spec coverage gap.

Verdict alignment

CHANGES_REQUESTED is correct. A commitlint type violation is a real blocker; COMMENTED or APPROVED would be wrong here.

Convergence

Aligned. One item remains: commit 5144fdbb9 needs its type rewritten from release: to ci:. This is the same finding carried forward from the round on SHA 5d0d12b48. As documented in prior rounds, the bot cannot fix this — _shared-rails.md prohibits git commit --amend, git rebase, and git push --force. Address-review should post a targeted comment to bpamiri with the three concrete options A listed (human amend + force-push, squash-merge with conforming subject, or accept and fix in the squash message at merge time) rather than attempting a new code commit. Emitting converged-changes.

@wheels-bot
Copy link
Copy Markdown
Contributor

wheels-bot Bot commented May 18, 2026

Wheels Bot — Address Review (round 4)

Reviewer A and Reviewer B converged on SHA 810c83abf with one remaining finding:

  • Commit 5144fdbb9 uses release: as its type — not in the commitlint.config.js allowlist (feat, fix, docs, style, refactor, perf, test, build, ci, chore, revert). Suggested rewrite: ci: dispatch scoop-wheels, retire chocolatey.

No new commit this round. The fix requires rewriting published history, which _shared-rails.md explicitly prohibits for the bot (no git commit --amend, no git rebase, no git push --force on shared branches). Both reviewers acknowledged this in their round-on-810c83abf comments; Reviewer B's converged-changes note for this SHA reads:

Address-review should post a targeted comment to bpamiri with the three concrete options A listed … rather than attempting a new code commit.

So that is what this round does. @bpamiri — your options:

  1. Amend 5144fdbb9 + force-push the branch. Local: git rebase -i develop, mark 5144fdbb9 reword, change release: to ci:, then git push --force-with-lease. Will retrigger CI and a fresh Reviewer A run.
  2. Squash-merge at merge time. GitHub's squash-merge dialog lets the merger supply a conforming subject line. Make sure the squash commit retains the Signed-off-by: trailer so DCO stays green.
  3. Accept the violation in the per-commit lint and fix it in the squash message at merge. Same end-state as option 2, just relies on the merger to remember.

All other prior-round findings are resolved as of 810c83abf (verified against Reviewer A's review on this SHA):

  • tools/build/scripts/README.md line 1 and line 36 both read "four Wheels variants" / "Builds all four variants sequentially".
  • build-starterApp.sh listed in README script table and artifact diagram.
  • CHANGELOG [Unreleased] ### Fixed entries for the checksum-sidecar rename and the scoop bucket add java prereq.
  • All six installation.mdx snippet pairs (stable + bleeding-edge × Debian + Fedora + LuCLI) across both v4-0-0 and v4-0-1-snapshot doc trees now use jq -r '… tag_name | sub("^v"; "")' plus the empty-tag guard.

No vendor/wheels/ or spec code in scope this round; no bash tools/test-local.sh layer is applicable.

Since no commit is being pushed, a fresh Reviewer A will not auto-trigger. The convergence loop pauses here until a human resolves the commitlint item via one of the three options above (option 1 retriggers automatically on force-push; options 2 and 3 are merge-time actions). Round 4 of 5 used — one round of bot capacity remains if a fresh issue appears on a future SHA.

bpamiri and others added 3 commits May 18, 2026 13:06
The downstream package-manager dispatch step has fired wheels-released
events to wheels-dev/homebrew-wheels and wheels-dev/chocolatey-wheels.
Swap chocolatey out for scoop-wheels — the v1.x chocolatey-wheels
package is CommandBox-based and can't drive v4, so the Windows install
path moved permanently to Scoop in 4.0. scoop-wheels#4 adds the
autoupdate workflow on the consumer side that listens for this dispatch
event.

Touches the dispatch loop, the secret docstring, the in-step warning
message, and the three sibling comments (apt/yum dispatch + bump-develop)
that referenced the homebrew/chocolatey step as their channel-derivation
template.

No functional change for stable v4.0.0 (it already shipped). Takes
effect on the next snapshot or 4.0.1 release.

Refs #2758
Refs wheels-dev/scoop-wheels#4

Signed-off-by: Peter Amiri <peter@alurium.com>
- tools/build/scripts/README.md:36 — "three variants" to "four
  variants" in the Convenience Scripts section (line 3 was fixed in
  round 1; line 36 was missed).
- web/sites/guides/src/content/docs/v4-0-0/command-line-tools/installation.mdx
  (lines 76-77, 84-85) and the matching v4-0-1-snapshot mirror —
  replace the `sed -nE` tag-resolver in the bleeding-edge deb/rpm
  snippets with `jq -r '.[0].tag_name | sub("^v"; "")'` plus the
  same empty-tag guard added to the LuCLI section in round 1.

Both items map to Reviewer B's converged-changes verdict on SHA
a81345a; Reviewer A's review of
the round-1 commit (`a81345ae`) and the round-2 commit (`5144fdbb`)
flagged the same carry-overs.

Refs #2758

Signed-off-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com>
- Replace remaining `curl | sed -nE` pipelines in the stable Linux
  `.deb`/`.rpm` install snippets (lines 60 and 67 in both
  `v4-0-0/command-line-tools/installation.mdx` and
  `v4-0-1-snapshot/command-line-tools/installation.mdx`) with the
  same `jq -r '.tag_name | sub("^v"; "")'` pattern plus empty-tag
  guard that round 1 applied to the LuCLI section and round 2
  applied to the bleeding-edge `.deb`/`.rpm` snippets. The two
  parallel snippet pairs in each file (stable + bleeding-edge) now
  use the same resolver and error-handling path.

Reviewer B's round-1 converged-changes on SHA `5144fdbb9` also
listed amending the type of commit `5144fdbb9` from `release:` to
`ci:` to satisfy commitlint. That requires rewriting published git
history, which is outside the bot's allowed git operations
(read-only `git` per `_shared-rails.md`). It is left for a human to
amend, squash-merge with a conforming subject, or override the
DCO/commitlint check at merge time.

Refs PR #2761.

Signed-off-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com>
@bpamiri bpamiri force-pushed the claude/objective-black-3adb90 branch from 810c83a to 0aef64d Compare May 18, 2026 20:07
Copy link
Copy Markdown
Contributor

@wheels-bot wheels-bot Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Wheels Bot — Reviewer A

TL;DR: All findings from rounds 1–4 are resolved at head 0aef64d40. The last blocker — the release: type in commit 5144fdbb9 — was addressed by the author via rebase (now e0ff7a1af ci: dispatch scoop-wheels, retire chocolatey). The round-3 bot commit (0aef64d40) closes the final carry-over: the two stable Linux .deb/.rpm snippet pairs in both doc trees now use jq -r '.tag_name | sub("^v"; "")' plus the empty-tag guard, consistent with every other shell snippet in the file. The PR is clean; approving.


Correctness

All prior carry-overs resolved:

  • Build scripts (build-{base,cli,core,starterApp}.sh) — checksum outputs renamed to .zip.md5 / .zip.sha512
  • release.yml + release-candidate.yml — all artifact glob patterns updated consistently ✓
  • release.yml dispatch loop — chocolatey-wheelsscoop-wheels
  • Stable Linux .deb/.rpm snippets in both v4-0-0 and v4-0-1-snapshot doc trees — sed -nEjq -r '.tag_name | sub("^v"; "")' + guard ✓ (round 3, 0aef64d40)
  • Bleeding-edge .deb/.rpm snippets in both doc trees — jq + guard ✓ (round 2)
  • Advanced LuCLI section — jq + guard ✓ (round 1)
  • tools/build/scripts/README.md line 36 — "three" → "four" ✓ (round 2)
  • tools/build/scripts/README.mdbuild-starterApp.sh listed in script table and artifact diagram ✓ (round 1)
  • CHANGELOG [Unreleased] ### Fixed entries for checksum rename and scoop bucket add java prereq ✓ (round 1)
  • Scoop scoop bucket add java step added to both installing.mdx files ✓

The round-3 commit correctly uses .tag_name (not .[0].tag_name) for the stable snippets, which call the /releases/latest endpoint that returns a single object — consistent with the bleeding-edge snippets that use .[0].tag_name against the /releases list endpoint.


Commits

All five commits pass commitlint:

SHA Subject Type DCO
f01ea44cf fix(release): emit .zip.{sha512,md5} sidecars + add Scoop install gotchas to docs fix Signed-off-by: Peter Amiri ✓
a81345ae5 docs: address Reviewer A/B consensus findings (round 1) docs Signed-off-by: claude[bot] ✓
e0ff7a1af ci: dispatch scoop-wheels, retire chocolatey ci Signed-off-by: Peter Amiri ✓
b22429a6c docs: address Reviewer A/B consensus findings (round 2) docs Signed-off-by: claude[bot] ✓
0aef64d40 docs: address Reviewer A/B consensus findings (round 3) docs Signed-off-by: claude[bot] ✓

The release: type that triggered the rounds 3–4 request-changes is gone. All subjects are ≤ 100 chars, sentence-case, non-empty. DCO trailers present on every commit.


Tests

No framework code changed across the entire PR. No spec coverage needed.

@wheels-bot
Copy link
Copy Markdown
Contributor

wheels-bot Bot commented May 18, 2026

Wheels Bot — Reviewer B (round 1)

A's review is well-supported and the verdict is correct. One minor factual gap in the CHANGELOG that A did not catch, but it is harmless — the approval stands.

Sycophancy

None detected. A's APPROVED verdict is backed by a line-by-line carry-over checklist and a commit-table with type + DCO verification.

False positives

None detected. I re-verified the two claims easiest to get wrong:

  • .tag_name vs .[0].tag_name — A correctly distinguishes the two API shapes. The stable /releases/latest endpoint returns a single JSON object (so .tag_name); the bleeding-edge /releases list endpoint returns an array (so .[0].tag_name). Both shapes match the diff exactly.
  • Commit table — All five subjects, types, and DCO trailers check out against git log. All Signed-off-by: trailers are present and correctly attributed.

Missed issues

One minor point:

  • CHANGELOG overclaims scope of workflow changes — The [Unreleased] CHANGELOG entry reads "brings both release workflows (release.yml, release-candidate.yml, plus the snapshot.yml reusable-workflow chain) into line." But snapshot.yml is not in the diff. Checking the file directly: snapshot.yml only uploads test results and API-docs JSON — it does not upload release artifacts or checksum sidecars — so it did not need updating. A should have noted that snapshot.yml was excluded because it carries no release-artifact globs, or flagged the phrasing as slightly misleading. The functional fix is correct; the CHANGELOG claim is imprecise but harmless.

Verdict alignment

A's APPROVED verdict is consistent with the findings. The three fix groups (checksum filename rename across build scripts + both release workflows, scoop bucket add java doc prereq, advanced LuCLI section) are all verifiably complete in the diff.

Convergence

Aligned. The CHANGELOG imprecision is not worth a request-changes cycle — snapshot.yml does not need touching and no user is harmed by the slightly loose phrasing. Joint recommendation: approve and merge.

@bpamiri bpamiri merged commit 0ba3cd0 into develop May 18, 2026
12 of 13 checks passed
@bpamiri bpamiri deleted the claude/objective-black-3adb90 branch May 18, 2026 20:19
bpamiri added a commit that referenced this pull request May 18, 2026
#2762)

scoop-wheels#4 inlined OpenJDK 21 in the Scoop manifests, so
`scoop install wheels` and `scoop install wheels-be` now work from a
fresh shell with no prerequisite buckets. The `scoop bucket add java`
step added in #2761 is no longer needed — drop it from both Windows
install pages.

Also drops the false claim that scoop-wheels autoupdate runs via the
community Excavator bot. The bucket now uses its own
`.github/workflows/autoupdate.yml` that listens for `repository_dispatch`
fired by this repo's `release.yml` (chained via the existing
`DOWNSTREAM_DISPATCH_TOKEN` PAT), with a daily cron at 08:30 UTC as
fallback. End-to-end latency ~5-7 min from upstream tag to manifest.

Updates installing.mdx + command-line-tools/installation.mdx in both
v4-0-0 and v4-0-1-snapshot doc trees.

Signed-off-by: Peter Amiri <peter@alurium.com>
bpamiri added a commit that referenced this pull request May 18, 2026
* docs: drop `scoop bucket add java` step, update autoupdate description

scoop-wheels#4 inlined OpenJDK 21 in the Scoop manifests, so
`scoop install wheels` and `scoop install wheels-be` now work from a
fresh shell with no prerequisite buckets. The `scoop bucket add java`
step added in #2761 is no longer needed — drop it from both Windows
install pages.

Also drops the false claim that scoop-wheels autoupdate runs via the
community Excavator bot. The bucket now uses its own
`.github/workflows/autoupdate.yml` that listens for `repository_dispatch`
fired by this repo's `release.yml` (chained via the existing
`DOWNSTREAM_DISPATCH_TOKEN` PAT), with a daily cron at 08:30 UTC as
fallback. End-to-end latency ~5-7 min from upstream tag to manifest.

Updates installing.mdx + command-line-tools/installation.mdx in both
v4-0-0 and v4-0-1-snapshot doc trees.

Signed-off-by: Peter Amiri <peter@alurium.com>

* docs: add `scoop install git` prerequisite before bucket add

A real-user run from a fresh Windows shell on 2026-05-18 surfaced a
missing prerequisite: Scoop's installer doesn't ship git, but
`scoop bucket add` uses `git clone` under the hood, so adding any
third-party bucket fails with:

    ERROR Git is required for buckets. Run 'scoop install git' and try again.

`scoop install git` itself works from a totally fresh shell because the
default `main` bucket — where git lives — is bundled with the Scoop
installer rather than fetched at runtime. So the corrected sequence is:

    irm get.scoop.sh | iex
    scoop install git
    scoop bucket add wheels https://github.com/wheels-dev/scoop-wheels
    scoop install wheels

Adds the `scoop install git` step (with a brief why-it's-needed note)
to both Windows install pages in both v4-0-0 and v4-0-1-snapshot doc
trees. The detailed `installation.mdx` reference page gets the
explanation inline in the code block as a comment; the `installing.mdx`
quick-start gets a numbered step with prose below.

Bumps step numbering in the start-here `installing.mdx` Steps blocks
(3 → 4 for the verify step).

Signed-off-by: Peter Amiri <peter@alurium.com>

---------

Signed-off-by: Peter Amiri <peter@alurium.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant