docs: align CLI core guides with 4.0.3 behavior — MCP tool names, version output, inert flags - #3124
Conversation
…sion output, inert test flags
Guide behavioral audit (P2), manifest group 4 — 7 findings across the four
command-line-tools core pages, all live-verified against the released
4.0.3 CLI:
- installation.mdx: replace the fictional 3-line 'Wheels/LuCLI/Java'
version sample with the real shapes ('wheels --version' prints
'Wheels Version: 4.0.3' + banner; 'wheels version' prints
'Wheels 4.0.3 (stable)' + Java line); channel marker comes from
'wheels version', not 'wheels --version'; 'wheels system env' does
not exist — point at 'wheels system paths' (installation-01/-04).
- quick-start.mdx: scaffold writes PostSpec.cfc + PostsControllerSpec.cfc
(no PostsSpec.cfc), and the 'posts' positional is a directory scope
(tests.specs.posts) that matches nothing on a fresh scaffold; generated
specs are empty stubs so runs report 0 passed (quickstart-04/-05).
- mcp-integration.mdx: tool names are unprefixed in tools/list (18 bare
names: analyze..validate), not wheels_*; bare 'wheels mcp' is
intercepted by the LuCLI launcher ('mcp: missing module name') and
never prints the snippet — document the --once smoke test instead
(mcp-02/-04). Same prefix fix applied to the Module.cfc mcp() help
text and the root CLAUDE.md CLI/MCP section.
- wheels-commands/testing.mdx: 'wheels test --verbose' and '--ci' are
accepted but currently inert (output byte-identical to a plain run;
exit codes already non-zero on failure) — describe current behavior
and cite #3113 for the wiring fix (testing-05).
Signed-off-by: Peter Amiri <peter@alurium.com>
There was a problem hiding this comment.
Wheels Bot — Reviewer
TL;DR: This PR aligns four CLI core guide pages (plus the mcp() help text and the root CLAUDE.md CLI/MCP section) with observed 4.0.3 behavior — unprefixed MCP tool names, real wheels --version / wheels version output shapes, directory-scope test filter semantics, and the inert --verbose/--ci flags. I verified every source-checkable claim against the repo and they all hold. Verdict: comment — no blocking findings, two minor staleness nits the diff leaves behind.
Verification notes (claims checked against source)
--ciinert — confirmed:ciModeis parsed atcli/lucli/Module.cfc:732, threaded intorunTests()(param atcli/lucli/Module.cfc:5095), and never read anywhere after that. #3113 is open and documents the byte-identical live runs for both flags.--verboseinert — the module does have display wiring (displayTestResults,cli/lucli/Module.cfc:5413-5424), butcli/CLAUDE.mddocuments that LuCLI reserves--verbose/-vat the launcher before the module sees them, and #3113's differential runs confirm no observable effect. The "accepted but currently inert" wording is accurate.- Filter semantics —
$normalizeTestFilter(cli/lucli/Module.cfc:754, 760–763) prependstests.specs.in app mode, soposts→tests.specs.postsexactly as the rewritten quick-start says. - Scaffold spec filenames —
CodeGen.cfc::generateTest(cli/lucli/services/CodeGen.cfc:240-259) writestests/specs/models/<Name>Spec.cfcandtests/specs/controllers/<Name>ControllerSpec.cfc; for apostscaffold that'sPostSpec.cfc+PostsControllerSpec.cfc, noPostsSpec.cfc. The shipped templates (cli/src/templates/tests/model.txt/controller.txt) contain adescribewith noitblocks, so the "0 passed on a fresh scaffold" claim holds. - Bare
wheels mcpinterception — corroborated bycli/CLAUDE.md("LuCLI reserves some tokens before the module sees them: … verbs likerun/install/mcp"). - Module.cfc change — output-string only (
out()calls atcli/lucli/Module.cfc:1387-1388); no cross-engine surface, and I confirmed no spec asserts the old help string.
Docs
- Stale cross-reference left behind in
cli/lucli/Module.cfc:319-323. The comment block aboveversion()still reads: "Emits the three-linewheels --versionformat the installation guide documents (Wheels Module + LuCLI runtime + JVM). See web/sites/guides/.../command-line-tools/installation.mdx for the canonical output shape". This PR removes the three-line sample from installation.mdx and re-attributes the channel/Java lines towheels version(notwheels --version), so the comment is now wrong on both the command name and the documented shape — the exact doc↔code drift #2431 was about. Since the PR already touches this file, suggest updating the comment in the same change (e.g. "Emits thewheels versionoutput the installation guide documents — Wheels Module (+ channel), optional LuCLI runtime line, JVM"). - (Optional, legacy)
cli/tests/specs/e2e/McpToolsTest.cfc:29and the spec title at line 152 ("prefixes tool names with module name (wheels_)") still tell the prefixed-name story. The assertion itself only checksmodule.jsonname == "wheels", so nothing fails — but it's now the last place in the CLI tree contradicting the corrected docs. The PR body's grep coveredcli/lucli/tests/but not the legacycli/tests/suite. Fine to defer given the suite is CommandBox-era legacy.
Tests
No new tests required — the only code change is a help-text string with no existing assertion on it (verified by grep across cli/lucli/tests/ and vendor/wheels/tests/).
Commits
Single commit conforms: type docs, header 98 chars, body lines under 100, DCO sign-off email matches the author (peter@alurium.com). ✓
Notes on unverifiable-from-source claims
The unprefixed tool names, the 18-tool count, the Wheels Version: 4.0.3 banner shape, and wheels system paths/env behavior live in the LuCLI launcher/runtime, which isn't in this repo — they rest on the PR's documented live probes against the released brew 4.0.3, which the PR body records in reproducible form. The 18-count is consistent with the module surface: 18 command functions remain after mcpHiddenTools() (cli/lucli/Module.cfc:178-197) exclusions, assuming the runtime also skips the convention functions (mcpHiddenTools, mcpToolSpecs) and the reserved version/showHelp verbs.
…tion Backticks inside a backtick-fence info string are forbidden by CommonMark, so the opening line rendered as a literal paragraph and the intended closing fence opened a runaway code block that swallowed the troubleshooting heading. Drop the backticks from the title, matching the sibling fence above. 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 b936f3c08. The delta since my prior review (30f1163) is a single one-line commit fixing a malformed code fence in installation.mdx — the fix is correct, and everything verified in the prior pass still holds at this head. Verdict: comment — no blocking findings; the two minor staleness nits from the prior review remain open (both optional), and one of them turns out to be slightly stronger than I previously stated, though still non-blocking.
Correctness
No findings. The new commit's CommonMark claim is accurate: the info string of a backtick code fence may not contain backticks, so the old info string (which quoted wheels version in backticks) rendered the opening line as a literal paragraph and the intended closing fence opened a runaway block that swallowed the ## Troubleshooting heading. At this head the fence (web/sites/guides/src/content/docs/v4-0-0/command-line-tools/installation.mdx:216) is clean, matches the sibling fence at line 210, and the heading at line 227 sits outside any code block.
Spot re-verification at this head:
$normalizeTestFilter(cli/lucli/Module.cfc:754, doc at 760–769) confirms the quick-start rewrite: app mode prependstests.specs., soposts→tests.specs.posts.ciModeis parsed (cli/lucli/Module.cfc:732) and threaded intorunTests()but never read — the "accepted but currently inert" wording intesting.mdxstands, and #3113 is the right tracking reference.- No leftovers:
wheels system envand the fictionalLuCLI 0.3.7sample have zero remaining matches underweb/sites/guides/src/content/docs/v4-0-0/,.ai/, andCLAUDE.md. The only remainingwheels_*-prefixed tool references in guides are underv3-0-0/(versioned historical docs — correct to leave untouched). - The 18-row tool table in
mcp-integration.mdxmatches the 18-name list in the rootCLAUDE.mdCLI/MCP section exactly. (The unprefixed-name and banner-shape claims live in the LuCLI runtime outside this repo and rest on the PR's documented live probes, as noted in the prior review.)
Tests
Correction to my prior review, still non-blocking. I previously said the legacy cli/tests/specs/e2e/McpToolsTest.cfc only describes the prefixed-name story without asserting it. That was incomplete: cli/tests/specs/e2e/McpToolsTest.cfc:383-387 contains a real assertion —
it("documents tool naming convention (module prefix)", function() {
expect(variables.moduleSource).toInclude("wheels_generate",
"mcp() should document the wheels_ prefix naming convention"
);
});— where variables.moduleSource is a fileRead() of cli/lucli/Module.cfc (line 26), and this PR removes the last wheels_generate occurrence from that file. So the PR body's blanket "no CLI spec asserts the old string" is true only within its disclosed grep scope (cli/lucli/tests/ + vendor/wheels/tests/specs/cli/).
Why this is non-blocking: that suite demonstrably never runs and was already broken before this PR. The CI/CLI endpoint executes directory = "cli.lucli.tests.specs" only (vendor/wheels/public/views/clitests.cfm:14); no workflow under .github/ references cli/tests/; and McpToolsTest.cfc:362-366 expects 'lucli mcp wheels', a string with zero matches in Module.cfc at the base of this PR — a pre-existing failure that proves the suite is dead. Suggested follow-up (this PR or a separate chore): update or delete cli/tests/specs/e2e/McpToolsTest.cfc so the last in-repo artifact telling the prefixed-name story doesn't contradict the corrected docs.
Docs
- (Carried over, still open, optional)
cli/lucli/Module.cfc:320-324— the comment aboveversion()still reads "Emits the three-linewheels --versionformat the installation guide documents (Wheels Module + LuCLI runtime + JVM). See web/sites/guides/.../installation.mdx for the canonical output shape". After this PR the guide documentswheels --versionas a one-liner + banner and attributes the channel/Java lines towheels version, so the cross-reference is now wrong on both the command name and the shape. The code itself (lines 328–347) is fine — only the comment is stale.
Commits
Both commits conform to commitlint.config.js: type docs, headers 98 and 74 chars (≤ 100), bodies wrapped under 100, not ALL-CAPS, and DCO sign-offs (peter@alurium.com) match the author. The PR title equals the first commit header, so the squash-merge lint gate passes. ✓
…rt behavior Two live audits (issue #3113 and the #3124 behavioral audit) found 'wheels test --verbose' output byte-identical to a plain run — the LuCLI picocli root declares -v/--verbose as a global runtime option, so the flag never reaches the module's renderer. The command reference (testing.mdx) already carries the audited wording from #3124; bring the ci-integration reporter table in line instead of claiming the bundle/suite/spec tree is printed. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Signed-off-by: Peter Amiri <peter@alurium.com>
… failures (#3132) * fix(cli): wheels test --ci emits GitHub Actions error annotations for failures The --ci flag was parsed and threaded into runTests() but never consumed, so `wheels test --ci` produced byte-identical output to a plain run despite testing.mdx documenting it as tightening output for GitHub Actions and similar runners (#3113). displayTestResults() now takes a ciMode argument and, when set, emits one GitHub Actions `::error` workflow-command annotation per failed/errored spec via a new pure $buildCiAnnotations() helper (newlines/percent encoded so each annotation stays a single line). The verbose per-spec tree is regression-locked by a new ModuleOutputCapture-based spec. Signed-off-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com> * docs(web/guides): describe --ci annotation output in wheels test reference `wheels test --ci` now emits one GitHub Actions `::error` workflow-command annotation per failed or errored spec (issue #3113). Three guide pages previously described the flag as a no-op or forward-compat placeholder; update each to reflect the actual behavior. 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> * fix(cli): reword TestCommandSpec docblock so the path glob cannot terminate the comment The $passingResult() docblock contained a literal '/wheels/*/tests' — the '*/' inside the path closed the block comment early, leaving stray tokens that fail compilation. Because the CLI suite compiles every CFC in the directory, the whole suite returned HTTP 500. Reword to '/wheels/app|core/tests'. Signed-off-by: Peter Amiri <peter@alurium.com> * docs(web/guides): align ci-integration --verbose row with audited inert behavior Two live audits (issue #3113 and the #3124 behavioral audit) found 'wheels test --verbose' output byte-identical to a plain run — the LuCLI picocli root declares -v/--verbose as a global runtime option, so the flag never reaches the module's renderer. The command reference (testing.mdx) already carries the audited wording from #3124; bring the ci-integration reporter table in line instead of claiming the bundle/suite/spec tree is printed. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Signed-off-by: Peter Amiri <peter@alurium.com> --------- Signed-off-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com> Signed-off-by: wheels-bot[bot] <wheels-bot[bot]@users.noreply.github.com> Signed-off-by: Peter Amiri <peter@alurium.com> Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com> Co-authored-by: Peter Amiri <peter@alurium.com> Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Summary
Final-wave docs fixes from the 2026-06 guide behavioral audit (P2 manifest, group 4: CLI core pages — 7 findings, every claim live-verified against the released brew
wheels4.0.3).command-line-tools/installation.mdx(installation-01, installation-04)Wheels / LuCLI 0.3.7 / Javaoutput. Live:wheels --versionprintsWheels Version: 4.0.3+ the ASCII banner (no LuCLI/Java lines);wheels versionprintsWheels 4.0.3 (stable)+Java 21.0.11. Sample replaced with both real shapes.(stable)/(bleeding-edge)) comes fromwheels version, notwheels --version— fixed the manual-install Aside bullet to match.wheels system envdoes not exist (wheels systemoffers inspect/paths/clean/backup/help;envexits 1 with usage). Troubleshooting now points atwheels system paths, which prints the resolved home + source.command-line-tools/quick-start.mdx(quickstart-04, quickstart-05)PostSpec.cfc(tests/specs/models/) andPostsControllerSpec.cfc(tests/specs/controllers/) — there is noPostsSpec.cfc.wheels test postsis a directory scope (tests.specs.posts) that matches neither generated directory on a fresh scaffold, and the generated specs are emptydescribestubs — both filtered and unfiltered runs report0 passed. Narrative rewritten to describe the directory-scope semantics and point atwheels test models/wheels test controllers.command-line-tools/mcp-integration.mdx(mcp-02, mcp-04)tools/liston 4.0.3 — re-verified live before editing: 18 tools,analyze…validate, nowheels_*prefix. Intro, "How it works", and the full tool table updated.wheels mcpis intercepted by the LuCLI launcher (mcp: missing module name, exit 1) and never reaches the Module's snippet-printing help — the paragraph claiming it "prints the same snippet" now documents that and steers to the existingwheels mcp wheels --once tools/listsmoke test.Collateral non-guide fixes (manifest-sanctioned for mcp-02)
cli/lucli/Module.cfcmcp()help text: "Tools are prefixed with the module name: wheels_generate, …" → unprefixed names. Output-string-only change; no CLI spec asserts the old string (greppedcli/lucli/tests/+vendor/wheels/tests/specs/cli/).CLAUDE.mdCLI/MCP section + Development Tools table: same prefix correction (live tool list inlined).command-line-tools/wheels-commands/testing.mdx(testing-05)--verboseand--ciare accepted but currently inert: differential runs show byte-identical output vs a plain invocation, and exit codes are already non-zero on failure without--ci. Flag rows now describe current behavior and cite cli:wheels test --verboseand--cihave no observable effect — docs promise per-spec output and CI tightening #3113 (wiring fix); examples no longer model the inert flags.Verification
pnpm verify:docsexit 0 on each touched page (installation 1/1, quick-start 2/2, mcp-integration 0 tagged blocks, testing 1/1 tagged blocks passed).wheels mcp wheels --once tools/list(18 unprefixed names),wheels --version,wheels version.Refs: #3113. Audit catalog:
docs/superpowers/audits/2026-06-guide-audit-findings.md(P2).🤖 Generated with Claude Code