Skip to content

docs: align CLI core guides with 4.0.3 behavior — MCP tool names, version output, inert flags - #3124

Merged
bpamiri merged 2 commits into
developfrom
peter/docs-audit3-cliref-core
Jun 12, 2026
Merged

docs: align CLI core guides with 4.0.3 behavior — MCP tool names, version output, inert flags#3124
bpamiri merged 2 commits into
developfrom
peter/docs-audit3-cliref-core

Conversation

@bpamiri

@bpamiri bpamiri commented Jun 12, 2026

Copy link
Copy Markdown
Collaborator

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 wheels 4.0.3).

command-line-tools/installation.mdx (installation-01, installation-04)

  • The "verifying installation" sample showed a fictional 3-line Wheels / LuCLI 0.3.7 / Java output. Live: wheels --version prints Wheels Version: 4.0.3 + the ASCII banner (no LuCLI/Java lines); wheels version prints Wheels 4.0.3 (stable) + Java 21.0.11. Sample replaced with both real shapes.
  • Channel marker ((stable) / (bleeding-edge)) comes from wheels version, not wheels --version — fixed the manual-install Aside bullet to match.
  • wheels system env does not exist (wheels system offers inspect/paths/clean/backup/help; env exits 1 with usage). Troubleshooting now points at wheels system paths, which prints the resolved home + source.

command-line-tools/quick-start.mdx (quickstart-04, quickstart-05)

  • The scaffold generates PostSpec.cfc (tests/specs/models/) and PostsControllerSpec.cfc (tests/specs/controllers/) — there is no PostsSpec.cfc.
  • wheels test posts is a directory scope (tests.specs.posts) that matches neither generated directory on a fresh scaffold, and the generated specs are empty describe stubs — both filtered and unfiltered runs report 0 passed. Narrative rewritten to describe the directory-scope semantics and point at wheels test models / wheels test controllers.

command-line-tools/mcp-integration.mdx (mcp-02, mcp-04)

  • Tool names are unprefixed in tools/list on 4.0.3 — re-verified live before editing: 18 tools, analyzevalidate, no wheels_* prefix. Intro, "How it works", and the full tool table updated.
  • Bare wheels mcp is 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 existing wheels mcp wheels --once tools/list smoke test.

Collateral non-guide fixes (manifest-sanctioned for mcp-02)

  • cli/lucli/Module.cfc mcp() help text: "Tools are prefixed with the module name: wheels_generate, …" → unprefixed names. Output-string-only change; no CLI spec asserts the old string (grepped cli/lucli/tests/ + vendor/wheels/tests/specs/cli/).
  • Root CLAUDE.md CLI/MCP section + Development Tools table: same prefix correction (live tool list inlined).

command-line-tools/wheels-commands/testing.mdx (testing-05)

Verification

Refs: #3113. Audit catalog: docs/superpowers/audits/2026-06-guide-audit-findings.md (P2).

🤖 Generated with Claude Code

…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>
@github-actions github-actions Bot added the docs label Jun 12, 2026

@wheels-bot wheels-bot Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

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)

  • --ci inert — confirmed: ciMode is parsed at cli/lucli/Module.cfc:732, threaded into runTests() (param at cli/lucli/Module.cfc:5095), and never read anywhere after that. #3113 is open and documents the byte-identical live runs for both flags.
  • --verbose inert — the module does have display wiring (displayTestResults, cli/lucli/Module.cfc:5413-5424), but cli/CLAUDE.md documents that LuCLI reserves --verbose/-v at 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) prepends tests.specs. in app mode, so poststests.specs.posts exactly as the rewritten quick-start says.
  • Scaffold spec filenamesCodeGen.cfc::generateTest (cli/lucli/services/CodeGen.cfc:240-259) writes tests/specs/models/<Name>Spec.cfc and tests/specs/controllers/<Name>ControllerSpec.cfc; for a post scaffold that's PostSpec.cfc + PostsControllerSpec.cfc, no PostsSpec.cfc. The shipped templates (cli/src/templates/tests/model.txt / controller.txt) contain a describe with no it blocks, so the "0 passed on a fresh scaffold" claim holds.
  • Bare wheels mcp interception — corroborated by cli/CLAUDE.md ("LuCLI reserves some tokens before the module sees them: … verbs like run/install/mcp").
  • Module.cfc change — output-string only (out() calls at cli/lucli/Module.cfc:1387-1388); no cross-engine surface, and I confirmed no spec asserts the old help string.

Docs

  1. Stale cross-reference left behind in cli/lucli/Module.cfc:319-323. The comment block above version() still reads: "Emits the three-line wheels --version format 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 to wheels version (not wheels --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 the wheels version output the installation guide documents — Wheels Module (+ channel), optional LuCLI runtime line, JVM").
  2. (Optional, legacy) cli/tests/specs/e2e/McpToolsTest.cfc:29 and the spec title at line 152 ("prefixes tool names with module name (wheels_)") still tell the prefixed-name story. The assertion itself only checks module.json name == "wheels", so nothing fails — but it's now the last place in the CLI tree contradicting the corrected docs. The PR body's grep covered cli/lucli/tests/ but not the legacy cli/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>

@wheels-bot wheels-bot Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

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 prepends tests.specs., so poststests.specs.posts.
  • ciMode is parsed (cli/lucli/Module.cfc:732) and threaded into runTests() but never read — the "accepted but currently inert" wording in testing.mdx stands, and #3113 is the right tracking reference.
  • No leftovers: wheels system env and the fictional LuCLI 0.3.7 sample have zero remaining matches under web/sites/guides/src/content/docs/v4-0-0/, .ai/, and CLAUDE.md. The only remaining wheels_*-prefixed tool references in guides are under v3-0-0/ (versioned historical docs — correct to leave untouched).
  • The 18-row tool table in mcp-integration.mdx matches the 18-name list in the root CLAUDE.md CLI/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

  1. (Carried over, still open, optional) cli/lucli/Module.cfc:320-324 — the comment above version() still reads "Emits the three-line wheels --version format 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 documents wheels --version as a one-liner + banner and attributes the channel/Java lines to wheels 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. ✓

@bpamiri
bpamiri merged commit 3a0f90a into develop Jun 12, 2026
15 checks passed
@bpamiri
bpamiri deleted the peter/docs-audit3-cliref-core branch June 12, 2026 16:02
bpamiri added a commit that referenced this pull request Jun 12, 2026
…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>
bpamiri added a commit that referenced this pull request Jun 12, 2026
… 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>
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