build(cli): mark published wheels-cli ForgeBox metadata as deprecated - #3192
build(cli): mark published wheels-cli ForgeBox metadata as deprecated#3192wheels-bot[bot] wants to merge 1 commit into
Conversation
The legacy CommandBox wheels-cli module is published to ForgeBox on every stable release, but its registry-visible metadata (box.json short description/description/instructions/name and README.md) read as the supported CLI. A ForgeBox browser saw no deprecation signal before running box install wheels-cli. Rewrite tools/build/cli/box.json and tools/build/cli/README.md so every registry-visible field leads with the deprecation, names the v5.0 removal (#2227, #2634), and points at the supported standalone wheels binary (brew install wheels-dev/wheels/wheels) plus the v4 install guide. A guard spec pins the posture so the metadata cannot drift back. The pipeline version-freeze (decoupling the CLI version from the framework release in prepare-cli.sh) is a maintainer strategy call and is intentionally deferred to a human; this PR ships only the registry-metadata half. Refs #3184 Signed-off-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com>
Wheels Bot — No doc updatesReviewed this PR's diff and found no docs that need updating (purely a build-artifact metadata change — the ForgeBox registry fields in |
There was a problem hiding this comment.
Wheels Bot — Reviewer
TL;DR: This PR rewrites the ForgeBox-visible metadata for the deprecated CommandBox wheels-cli module (tools/build/cli/box.json + tools/build/cli/README.md) so every registry field leads with the deprecation, names the v5.0 removal, and points at the supported standalone wheels binary — and adds a structural guard spec pinning that posture. Verdict: approve (submitted as a comment: GitHub rejects the bot approving its own PR — a maintainer should treat this as a clean review). Every claim in the PR body checks out against the repo, the spec follows established guard-spec prior art exactly, and there are no correctness, cross-engine, convention, or security findings.
What was verified
Spec assertions vs. committed files — I evaluated every assertion in vendor/wheels/tests/specs/cli/ForgeBoxCliDeprecationMetadataSpec.cfc by hand against the committed templates; all pass:
box.jsonname="Wheels CLI Commands (DEPRECATED)";shortDescriptionandinstructionsboth lead withDEPRECATED;descriptioncontains the deprecation,5.0removal,brew install wheels-dev/wheels/wheels, and the install-guide URL; the pre-fix feature-parity blurb (providing code generation, database migrations, testing, and development tools) is gone (tools/build/cli/box.json:17-19).README.mdopens with> **DEPRECATED — do not use for new projects.**(matches the spec's(?m)^>\s*\*\*DEPRECATEDregex), and the oldThe official Command Line Interface for the wheels frameworkframing is removed (tools/build/cli/README.md:3).
The spec guards the real published artifact — tools/build/scripts/prepare-cli.sh:31-32 copies exactly these two files into the release artifact (cp tools/build/cli/box.json … / cp tools/build/cli/README.md …), so this isn't a guard on dead templates.
Cross-engine — the spec mirrors sibling guard specs precisely: shared-ctx-struct for closure state, expandPath("/wheels/../..") repo-root resolution (prior art: buildArtifactLicenseSpec.cfc and five existing tests/specs/cli/ guard specs), (?m) inline regex flag (prior art: LegacyUpgradeDeprecationSpec.cfc, RateLimiterMemoryStoreSpec.cfc), arrow-function it() bodies (prior art throughout the suite). The ##3184 in describe() string literals is correctly escaped — an unescaped # there would crash the whole core suite, and there isn't one.
Non-breaking posture — ForgeBox package identity is the slug (wheels-cli, unchanged); only the display name gained the (DEPRECATED) suffix, so existing box install wheels-cli automation is unaffected, consistent with the PR's stated goal.
Pointer consistency — brew install wheels-dev/wheels/wheels matches the existing in-CLI banner at cli/src/commands/wheels/upgrade.cfc:42, and both linked guide pages exist in the repo (web/sites/guides/src/content/docs/v4-0-0/command-line-tools/installation.mdx, web/sites/guides/src/content/docs/v4-0-0/upgrading/3x-to-4x.mdx).
Commits & changelog — build(cli): mark published wheels-cli ForgeBox metadata as deprecated is a valid conventional-commit header (66 chars, allowed type, not ALL-CAPS) with a matching DCO sign-off, and the body explains the why (including the deliberate deferral of the version-freeze half to a human). Changelog uses a fragment (changelog.d/3184-wheels-cli-forgebox-deprecation-metadata.changed.md) with a valid type, not a direct CHANGELOG.md edit.
Scope discipline — using Refs #3184 rather than Fixes is correct, since the prepare-cli.sh version-freeze decision is intentionally left to a maintainer.
No findings under Correctness, Conventions, Cross-engine, Tests, Docs, Commits, or Security.
|
Superseded by #3197 (merged): a propose-fix draft that raced the ForgeBox path-repair campaign for the same issue; the campaign PR landed first and closed the underlying issue. Closing the duplicate. |
The legacy CommandBox
wheels-climodule is published to ForgeBox on every stable release, yet its registry-visible metadata read as the supported CLI —box.jsoncarried "Command Line Interface for Wheels framework providing code generation, database migrations, testing, and development tools" andREADME.mdopened with "The official Command Line Interface for the wheels framework." A ForgeBox browser saw no deprecation signal before runningbox install wheels-cli, even though the module is deprecated in favour of the standalonewheelsbinary and slated for removal in v5.0 (#2227, #2634). This PR rewritestools/build/cli/box.jsonandtools/build/cli/README.mdso every registry-visible field leads with the deprecation, names the v5.0 removal, and points at the supported CLI (brew install wheels-dev/wheels/wheels) plus the v4 install guide. A guard spec pins the posture so the metadata cannot drift back.This is the agreed, low-risk half of the issue. The genuine maintainer strategy call — freezing/decoupling the published CLI version from the framework release in
tools/build/scripts/prepare-cli.sh— is intentionally deferred to a human (the research flagged the pipeline-freeze posture for human review), so this PR ships only the registry-metadata change. Because it does not close the issue's full scope, it usesRefsrather thanFixes.Recommended path from research: #3184 (comment)
Refs #3184
Why ForgeBox metadata, not a CFML API
ForgeBox/CommandBox has no first-class soft-deprecate flag (the
npm deprecate/ Composerabandoned/ Hexretireanalogue). Per the cross-framework research, that puts Wheels in the RubyGems situation: the only pre-install, registry-visible lever is thebox.jsondescription/instructions/short-description text plus the README.forgebox unpublishis off the table — it would breakbox install wheels-clifor existing automation (~9.8k installs). So the deliverable is release-artifact metadata, not avendor/wheels/**component.TDD
vendor/wheels/tests/specs/cli/ForgeBoxCliDeprecationMetadataSpec.cfc— a structural guard (mirrorsbuildArtifactLicenseSpec.cfc/LegacyUpgradeDeprecationSpec.cfc) that reads the two committed templates and asserts each registry-visible field leads with the deprecation and points to the successor.DEPRECATED/successor-pointer text anywhere intools/build/cli/, and the README still advertises the "official CLI"); after the rewrite all assertions hold.Implementation
tools/build/cli/box.json—name,shortDescription,description,instructionslead withDEPRECATED;documentationrepointed to the v4 install guide;deprecatedkeyword added.tools/build/cli/README.md— opens with a> **DEPRECATED …**blockquote banner, drops the "official CLI" framing, and routes readers tobrew install wheels-dev/wheels/wheels+ the install/upgrade guides.Checklist
ForgeBoxCliDeprecationMetadataSpec.cfc(failing → passing; see test-harness note for how red→green was verified in this environment)bot-update-docs.ymlbot-update-docs.ymlbot-update-docs.ymlchangelog.d/3184-wheels-cli-forgebox-deprecation-metadata.changed.mdwheelsbinary unavailable in this sandbox)