You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Browse filesBrowse the repository at this point in the historyBrowse files
authored
fix(cli): wheels packages help now documents add as canonical install verb (#2729)
* fix(cli): `wheels packages` help now documents `add` as canonical install verb
LuCLI auto-introspection emitted a help row advertising `install <name>
[--force] Install a package`, but LuCLI's own built-in extension installer
intercepts the literal `install` verb across all modules before dispatch
reaches `Module.cfc::packages()`. The advertised verb is unreachable — same
trap that hit `wheels browser install` (renamed to `wheels browser setup`
in #2345).
Fix: own the help text directly. `wheels packages help`,
`wheels packages --help`, and `wheels packages -h` now short-circuit to a
hand-written `$packagesHelp()` that documents `add` as the canonical install
verb, lists every reachable sub-verb, and includes a Note paragraph
explaining why `install` does not work. Short-circuit fires before any
network call (registry, manifest fetch), so help is always fast and offline.
Spec at `cli/lucli/tests/specs/commands/PackagesCommandSpec.cfc` asserts
the help output documents `add`, lists every canonical sub-verb, mentions
LuCLI interception, and does not advertise an `install <name> [--force]
Install a package` row.
Fixes#2713
Signed-off-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com>
* fix(cli): drop dead -h guard clause and unblock TDD gate for cli/lucli specs
Addresses Reviewer A & B consensus from PR #2729 (round 1):
- `.github/workflows/bot-tdd-gate.yml`: add `cli/lucli/tests/specs/` to both
the spec regex and the `impl_changes` exclusion. The packages help spec
lives there, so the gate currently rejects the PR with "Bot PRs must
include a failing-then-passing spec" even though the spec exists.
Excluding the path from `impl_changes` also avoids double-counting it as
both spec and implementation, which B flagged as a latent risk.
- `cli/lucli/Module.cfc`: remove the dead `|| sub == "-h"` clause from the
packages() help short-circuit. `-h` is consumed by $packagesArgsToOptions
(sets opts.help = true) and stripped from positionals by
$packagesStripFlags before `sub` is read, so the third clause is
unreachable. Added a comment documenting the data flow and parenthesized
the Elvis expression for clarity.
- `cli/lucli/tests/specs/commands/PackagesCommandSpec.cfc`: add a third
test case exercising `[\"-h\"]` directly. Asserts the short flag reaches
the same hand-written help body as `help` and `--help` (verified by the
presence of "wheels packages add" in the output).
Skipped per B's round-1 analysis: the DCO/Signed-off-by trailer change A
proposed. The existing trailer matches the commit author, which is what
the DCO App validates — rewriting it would create a mismatch. There is
also no DCO check in the current required-checks list.
Refs #2713
---------
Signed-off-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com>
Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com>
Co-authored-by: Peter Amiri <peter@alurium.com>
Copy file name to clipboardExpand all lines: CHANGELOG.md
+1Lines changed: 1 addition & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -35,6 +35,7 @@ All historical references to "CFWheels" in this changelog have been preserved fo
35
35
36
36
### Fixed
37
37
38
+
-`wheels packages --help` / `wheels packages help` / `wheels packages -h` now emit a module-owned help string that documents `add` as the canonical install verb and explains why typing `install` does not work (LuCLI's built-in extension installer intercepts the literal verb before dispatch reaches the module — same trap that hit `wheels browser install` → `wheels browser setup` in #2345). Previously the auto-introspected help drifted from the real CLI surface, advertising an `install <name> [--force]` row that never actually installed anything (#2713)
38
39
- Package manifest field reference in `web/sites/guides/.../packages.mdx` (both v4-0-0 and v4-0-1-snapshot copies) and `CLAUDE.md`: the inter-package dependency field is `requires`, not `dependencies`. The legacy 3.x plugin shape used `dependencies` in `box.json`; the modern `PackageLoader` (`vendor/wheels/ModuleGraph.cfc`) has always read `requires`, plus `replaces` (exclusion / migration path) and `suggests` (soft load-order edge). Copying the old example manifest would have shipped a package that loaded but silently ignored its declared dependencies — no error, no warning, just a missing-dep failure at the first runtime call into the absent dependency. All three docs now use `requires` and the previously undocumented `replaces` / `suggests` fields are covered alongside. Same PR also tightens the guide's description of `wheelsVersion` mismatches: not just "logged" but a hard skip — incompatible packages are excluded from the load order before their CFC is instantiated and recorded in `failedPackages` with the constraint and running version named in the log (#2734)
39
40
-`paginationLinks()` now emits a one-time per-request `WriteLog(type="warning", ...)` deprecation notice pointing 3.x → 4.x upgraders at `paginationNav()` (the all-in-one helper) and the individual `firstPageLink`/`previousPageLink`/`pageNumberLinks`/`nextPageLink`/`lastPageLink` composables. `wheels upgrade check --to=4.0.0` now also greps `app/views/` for `paginationLinks(` and flags every hit with a remediation pointer, closing the silent-rot gap surfaced by titan Phase 2.4 (#2714)
40
41
-`paginationNav()` now throws `Wheels.PaginationNav.InvalidArgument` when passed an argument that none of its sub-helpers (`paginationInfo`, `firstPageLink`, `previousPageLink`, `pageNumberLinks`, `nextPageLink`, `lastPageLink`) accept. Previously, typos such as `prependToList="<ul>"` were silently dropped by CFML's `argumentCollection` dispatch, leaving users to wonder why a styling argument had no effect. The check is gated on `application.wheels.showErrorInformation` so production is unaffected; development environments fail fast and the error names both the rejected arguments and the full allowlist of accepted pass-through keys (#2717)
0 commit comments