docs(web/guides): document wheels upgrade apply verb across upgrade guides - #3046
Conversation
…uides Fixes #3045 Signed-off-by: wheels-bot[bot] <wheels-bot[bot]@users.noreply.github.com> Signed-off-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com>
There was a problem hiding this comment.
Wheels Bot — Reviewer
TL;DR: This PR updates three guide pages to document the wheels upgrade apply verb from #3039. The new content is largely faithful to the #3039 implementation (the pre-swap announcement block, safety-check list, --to-as-assertion, --nobackup semantics, and backup naming all verified accurate against cli/lucli/services/FrameworkUpgrader.cfc and runUpgradeApply() on the #3039 branch). However: the feature it documents is not merged — #3039 is open with changes requested, and a competing implementation #3040 has opposite bare-verb semantics — and the rewritten upgrade.mdx leaves three stale passages that contradict its own new sections, plus one sample-output block that doesn't match what the command actually prints. Verdict: request changes (submitted as a comment review — GitHub does not allow a changes-requested event on the bot's own PR). The PR is correctly in draft; the items below should be resolved before it leaves draft.
Correctness
-
Documents an unmerged, contested implementation. The PR body says "After #3039 introduced
wheels upgrade apply…", but #3039 is OPEN withCHANGES_REQUESTEDreviews, and #3040 ("add apply mode to wheels upgrade") is a competing open implementation in which barewheels upgradeperforms the destructive swap. This page asserts the exact opposite atupgrade.mdx:27:Calling
wheels upgradewith no subcommand prints concise usage listing both verbs and exits 0.That sentence is only true under #3039. If #3040 lands instead, this line would tell users a destructive command is inert. Fix: keep this PR in draft until one implementation merges, then re-verify every behavioral claim (bare-verb behavior, flag spellings, output samples) against the merged surface before marking ready.
-
upgrade.mdx:139-141— swap-summary sample shows output the command never prints. The doc shows:3.5.1 -> 4.0.2 Backed up to: vendor/wheels.bak-20260611-141502The #3039 implementation prints
Framework upgraded: 3.5.1 -> 4.0.2,Backup: <absolute path>, and aRecover with: rm -rf … && mv …line (runUpgradeApply()incli/lucli/Module.cfcon the #3039 branch; pinned byUpgradeApplyCommandSpec.cfc:208, which asserts the literalFramework upgraded:). "Illustrative" covers placeholder paths/versions, not invented label text — the adjacent pre-swap block (lines 131–135) reproduces the real strings exactly, so this one should too. Fix: mirror the actual output, including theRecover with:line. -
upgrade.mdx:82andupgrade.mdx:93— stalechecksample output. Both sample blocks still end withUpgrade with: brew upgrade wheels. #3039 changes that exact output line toApply with: wheels upgrade apply(with a code comment notingbrew upgrade wheels"only updates the CLI binary, never the app's vendored framework copy"). As written, the samples contradict this page's own "What gets updated" section (lines 167–177). Fix: update both sample blocks toApply with: wheels upgrade applywhen re-verifying against the merged implementation. -
upgrade.mdx:46— Prerequisites still describes the manual-swap workflow.Commit first. The scanner is read-only, but the actual upgrade (
brew upgrade wheels, a freshvendor/wheels/drop-in, etc.) will replace framework code.The "fresh
vendor/wheels/drop-in" /brew upgrade wheelsframing is exactly what issue #3045 asked to remove, andbrew upgrade wheelsdoes not replace framework code per this page's own new sections. Fix: namewheels upgrade applyas the thing that replaces framework code.
Docs
- Unknown-subcommand behavior dropped (
upgrade.mdx:27). The old sentence covered "any subcommand other thancheck"; the new one only covers the bare invocation. Under #3039 a typo'd verb (wheels upgrade chekc) deliberately hard-errors non-zero rather than printing usage and exiting 0 (the dispatch comment inupgrade()calls this out explicitly so scripts fail loudly). Worth one sentence, since "prints usage and exits 0" could otherwise be read as covering typos too. Minor.
What checks out
- Pre-swap announcement block (
upgrade.mdx:131-135) matches the implementation string-for-string (Backing up vendor/wheels -> vendor/<backup>,If this is interrupted, restore with:, therm -rf … && mv …one-liner built from the reserved path). - Safety-check list (
upgrade.mdx:144-147) accurately summarizesFrameworkUpgrader.looksLikeWheelsFramework()(source+target sniff), the source==target canonical-path refusal, and the missing-vendor/wheels/refusal. --todocumented as an assertion, not a download trigger (upgrade.mdx:153) — matches the hard error inrunUpgradeApply()when the bundled version differs.--nobackup(upgrade.mdx:154) is the documented spelling in the implementation; delete-before-copy semantics matchapplyUpgrade().release-channels.mdxand3x-to-4x.mdxedits are accurate under #3039, and dropping the redundantbrew upgrade wheelsimmediately afterbrew installin3x-to-4x.mdxis an improvement.- Changelog fragment
changelog.d/3045-upgrade-apply-docs.changed.mdfollows the fragment convention (no directCHANGELOG.mdedit). ✓ - Single commit
docs(web/guides): document wheels upgrade apply verb across upgrade guidesconforms to commitlint (valid type, subject under 100 chars). ✓
…pgrade apply implementation Re-verified every behavioral claim in upgrade.mdx against the MERGED ##3039 implementation (develop 52be83e, runUpgradeApply() in cli/lucli/Module.cfc + cli/lucli/services/FrameworkUpgrader.cfc): 1. Swap-summary sample now mirrors the real output lines — 'Framework upgraded: old -> new', 'Backup: <path>', and the 'Recover with: rm -rf ... && mv ...' one-liner — instead of the invented label text. Also notes that refusal paths print no backup/restore line (refusals fire before the plan announcement). 2. Both check sample blocks now end with 'Apply with: wheels upgrade apply' (##3039 replaced 'Upgrade with: brew upgrade wheels'); the same-major sample also now shows the real 'Same major version — no known breaking changes.' / 'Scanning for opt-in recommendations...' lines. 3. Prerequisites names 'wheels upgrade apply' as the step that replaces framework code (manual vendor/wheels/ drop-in kept as the by-hand fallback) and clarifies brew upgrade wheels only updates the CLI binary. 4. Documented that a typo'd subcommand (wheels upgrade chekc) prints usage then hard-errors non-zero, per the explicit-verb dispatch. Verified with pnpm verify:docs on all three touched pages (exit 0). The released brew CLI is 4.0.3 (pre-apply), so the apply samples were verified against the merged source as ground truth, not a live run. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Signed-off-by: Peter Amiri <peter@alurium.com>
There was a problem hiding this comment.
Wheels Bot — Reviewer
TL;DR: Re-review at head b54aeba8f. Since the previous review, #3039 has merged into develop (52be83e18), this branch merged develop in, and the head commit resolves all four accuracy items plus the docs nit from the previous round. I re-verified every behavioral claim in the rewritten upgrade.mdx line-by-line against the merged implementation in cli/lucli/Module.cfc and cli/lucli/services/FrameworkUpgrader.cfc — the page is now faithful to what shipped. One new minor docs nit below (the help verb), nothing blocking. Verdict: comment.
Previously-flagged findings — all resolved
- Documents an unmerged, contested implementation — resolved. #3039 merged as
52be83e18(feat(cli): wheels upgrade applies the framework swap from the CLI bundle); the competing #3040 semantics did not land (barewheels upgradeis inert perModule.cfc:2941-2943, exactly asupgrade.mdx:27says). The PR also correctly left draft only after the merge. - Swap-summary sample showed invented label text — resolved.
upgrade.mdx:140-144now printsFramework upgraded: 3.5.1 -> 4.0.2,Backup: …, and theRecover with: rm -rf … && mv …line, matchingrunUpgradeApply()atModule.cfc:4990-4996string-for-string. - Stale
Upgrade with: brew upgrade wheelsin bothchecksamples — resolved. Both blocks (upgrade.mdx:82,upgrade.mdx:94) now end withApply with: wheels upgrade apply, whichrunUpgradeCheck()prints unconditionally in human mode before any throw (Module.cfc:4844-4848). The same-major sample'sSame major version — no known breaking changes./Scanning for opt-in recommendations...lines matchModule.cfc:4384-4385exactly. - Prerequisites still described the manual-swap workflow — resolved.
upgrade.mdx:46now nameswheels upgrade applyas the thing that replaces framework code and correctly notesbrew upgrade wheelsonly updates the CLI binary. - Unknown-subcommand behavior undocumented (minor, previous round) — resolved.
upgrade.mdx:27now documents that a typo'd verb prints usage and hard-errors non-zero, matching the deliberatethrowatModule.cfc:2951-2958.
Verified accurate against the merged implementation
- Pre-swap announcement block (
upgrade.mdx:132-136) matchesModule.cfc:4961-4963exactly. - Refusal behavior (
upgrade.mdx:146):validateSwap()runs before the plan is announced (Module.cfc:4941-4945), so a refusal prints no backup path and no restore command — as documented. - Safety-check list (
upgrade.mdx:148-151): framework sniff on source and target (FrameworkUpgrader.cfc:115-116,150-152), source==target canonical-path refusal naming the wheels-repo-checkout case (FrameworkUpgrader.cfc:137-139), missing-vendor/wheels/refusal (Module.cfc:4901-4908). --toas assertion, not download trigger (upgrade.mdx:157): hard error when the bundled version differs (Module.cfc:4923-4932).--nobackupdelete-before-copy (upgrade.mdx:158):directoryDelete()before the copy (FrameworkUpgrader.cfc:213).- Backup naming
vendor/wheels.bak-<yyyymmdd>-<HHmmss>(FrameworkUpgrader.cfc:250-258) matches every sample path. - Bare
wheels upgradeprints a usage steer listing both verbs and exits 0 ($printUpgradeUsageSteer(),Module.cfc:3053-3066). scoop update wheels(upgrade.mdx:179) is the spelling the implementation itself suggests (Module.cfc:4926).release-channels.mdxand3x-to-4x.mdxedits accurately reflect the merged two-verb workflow.
Docs
- Minor:
upgrade.mdx:27says "Any other subcommand — a typo likewheels upgrade chekc— prints the usage and then hard-errors with a non-zero exit." That's overbroad by one case:wheels upgrade help(and-h) is a recognized verb that prints full usage and exits 0 (parseUpgradeArgssetswantsHelpforsub == "help",Module.cfc:2871; short-circuit atModule.cfc:2927-2929). The bare-invocation steer even tells users to runwheels upgrade help. Suggest: "Any other subcommand (apart fromhelp) — a typo likewheels upgrade chekc— …" or a one-line mention thatwheels upgrade helpprints full usage. Not blocking.
Commits
623de1faf docs(web/guides): document wheels upgrade apply verb across upgrade guides✓ andb54aeba8f docs(web/guides): fix four review accuracy items against the merged upgrade apply implementation✓ — both conform to commitlint (valid type, header ≤ 100 chars). The intermediateMerge remote-tracking branch …commit is commitlint-exempt as a merge commit.
Docs & metadata
- Changelog fragment
changelog.d/3045-upgrade-apply-docs.changed.mdfollows the fragment convention; no directCHANGELOG.mdedit. ✓
Three guide pages still described
wheels upgradeas a check-only command with a manualvendor/wheels/zip swap. After #3039 introducedwheels upgrade apply(the explicit swap verb with backup-by-default and a pre-swap recovery announcement), those pages were stale. This PR updates all three to document the full two-verb workflow.Pages updated:
command-line-tools/wheels-commands/upgrade.mdx— rewrote the frontmatter description and synopsis to cover both verbs; split the flags table to acheck-specific section and added a newwheels upgrade applysection covering what it does, the pre-swap announcement, the backup convention,--toas an assertion,--nobackup, a typical upgrade example, and updated rollback instructions for both verbs; updated "What gets updated" from "Nothing" to document theapplyswap with CLI upgrade instructions.start-here/release-channels.mdx— addedwheels upgrade applyto the channel-switch sequence alongsidewheels upgrade check --to=<version>.upgrading/3x-to-4x.mdx— extended the "Deprecatingbox wheels upgrade" code block to showcheckfollowed byapply.Fixes #3045
Screenshots needed
None — all changes are text and CLI output.