Skip to content

fix(cli): audit-tail polish — info version line, MCP helper leak, help/console text - #2888

Merged
bpamiri merged 4 commits into
developfrom
peter/cli-audit-tail-polish
Jun 10, 2026
Merged

fix(cli): audit-tail polish — info version line, MCP helper leak, help/console text#2888
bpamiri merged 4 commits into
developfrom
peter/cli-audit-tail-polish

Conversation

@bpamiri

@bpamiri bpamiri commented Jun 9, 2026

Copy link
Copy Markdown
Collaborator

Summary

Follow-up to the #2882#2886 CLI-audit sweep. A reconciliation pass over every audit finding against current develop (43 confirmed shipped, ~22 open) surfaced a small low-risk tail; this PR clears the verified-safe code + doc items. (--hasOne threading and typed-exit-code changes follow as separate PRs.)

Fixes

  • wheels info framework-version line was blank. It read the long-gone vendor/wheels/events/onapplicationstart/settings.cfm path. Now reads the authoritative vendor/wheels/wheels.json manifest by absolute path (no wheels mapping needed), with the same structural placeholder guard as wheels.BuildInfo — a dev checkout reports 0.0.0-dev rather than leaking the raw @build.version@ token. (The audit logged this as fixed in fix(cli): repair broken commands and correct command docs (CLI audit) #2882, but fix(cli): repair broken commands and correct command docs (CLI audit) #2882 only fixed the route-count half of the finding and left the version line broken.)
  • MCP tools/list leaked two internal $-helpers ($normalizeTestFilter, $resolveAppTestDataSource). Added both to mcpHiddenTools(). Kept public so TestCommandSpec's direct unit tests still run; LuCLI matches hidden names case-insensitively (McpCommand lowercases both sides).
  • wheels --help now lists the working create app command (it was a live command + MCP tool but missing from the banner), and its notes line no longer advertises a HACK default the parser doesn't use (default stays TODO,FIXME,OPTIMIZE; --annotations customizes).
  • wheels reload honors an explicit --password=<value> override (parity with wheels console); auto-detect from .env/config stays the default.
  • Console /help lists the /datasource and /q aliases it already accepts.
  • Dead doc path (mcp-configuration-guide.md, which never existed) in both wheels mcp instructions and the deprecated /wheels/mcp endpoint's deprecation notice → now points to the live MCP integration guide.
  • Docs: wheels test flag table documents the real --directory alias for --filter; agent CLAUDE.md packages block lists the real wheels packages registry info verb.

Verification

Run against the worktree source via an isolated LUCLI_HOME (bypassing the brew wrapper):

  • wheels infoWheels: v4.0.2 on a stamped manifest; Wheels: v0.0.0-dev on an @build.version@ manifest (no token leak). Previously printed nothing.
  • wheels mcp wheels --once tools/list → 18 real commands, no $-helper entries (was leaking 2).
  • wheels --help → shows create app and the corrected notes line.
  • wheels version / notes / validate smoke clean (Module.cfc compiles + loads).

Spec-safety checked: the HACK specs test --custom parsing (unchanged defaults); MainCommandSpec's mid(...,800/900) source-scans target content before these insertions; the $-helpers stayed public so TestCommandSpec's 31 direct calls are unaffected.

Notes

  • The vendor/wheels/public/mcp/McpServer.cfc change is a one-line deprecation-notice string (no logic, no spec guard) — it pulls the core matrix into CI, which will confirm it.
  • wheels mcp (bare verb) is still intercepted by the LuCLI builtin on the shipped 4.0.2 runtime; the mcp() string fix is forward-correct (reachable once a newer LuCLI ships), and the bare-verb branding is handled upstream in fix: resolve active binary name in completion and module usage strings cybersonic/LuCLI#70. The McpServer.cfc HTTP-endpoint notice is reachable today.
  • Deferred (not in this PR): unskipping the GenerateCommandSpec "generate migration" describe — it's test-hygiene and its harness-readiness can't be cheaply proven from a worktree, so it's left rather than risk a speculative red.

…p/console text

Follow-up to the #2882-#2886 CLI-audit sweep; closes the verified
low-risk tail.

- wheels info: the framework-version line read a long-gone path
  (vendor/wheels/events/onapplicationstart/settings.cfm) and silently
  rendered nothing. Read the authoritative vendor/wheels/wheels.json by
  absolute path (no wheels mapping needed) with the same structural
  placeholder guard as wheels.BuildInfo, so a dev checkout reports
  0.0.0-dev instead of leaking the raw @build.version@ token.
- MCP tools/list leaked two internal $-helpers ($normalizeTestFilter,
  $resolveAppTestDataSource). Added both to mcpHiddenTools() (kept public
  so TestCommandSpec unit-tests them directly; LuCLI matches hidden names
  case-insensitively).
- wheels --help: list the working 'create app' command (was absent from
  the banner) and drop the HACK default from the notes line (parser
  default stays TODO,FIXME,OPTIMIZE; --annotations customizes).
- wheels reload: honor an explicit --password=<value> override (parity
  with console); auto-detect stays the default.
- console /help: list the /datasource and /q aliases it already accepts.
- wheels mcp instructions + the deprecated /wheels/mcp endpoint notice now
  point to the live MCP integration guide instead of a doc path
  (mcp-configuration-guide.md) that never existed.
- Docs: wheels test flag table documents the real --directory alias;
  CLAUDE.md packages block lists the real 'registry info' verb.

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 A

TL;DR: This is a focused polish pass on the CLI audit tail — version-line fix, MCP helper leak, help text updates, and doc-path cleanup. The logic in every change is sound, but one correction introduces a new broken URL by routing users to a /v4-0-0-snapshot/ deep-link that Astro explicitly cannot redirect via catch-all, meaning wheels mcp and the /wheels/mcp deprecation notice now point to a 404 rather than a 404-under-a-different-name. Requesting changes for that; everything else is minor.


Correctness

Broken URL introduced in two places — v4-0-0-snapshot deep-link is a 404.

cli/lucli/Module.cfc line 1253:

out("  https://guides.wheels.dev/v4-0-0-snapshot/command-line-tools/mcp-integration");

vendor/wheels/public/mcp/McpServer.cfc line 11:

"...see https://guides.wheels.dev/v4-0-0-snapshot/command-line-tools/mcp-integration for details."

web/sites/guides/astro.config.mjs lines 68–75 documents exactly why this 404s:

"Astro's static redirects map doesn't support [...spread] sources … so a full catch-all for /v4-0-0-snapshot/*/v4-0-0/* isn't possible at this layer. The high-traffic landing pages get explicit redirects here; deep links fall through to the site's 404 page."

mcp-integration is not among the explicitly listed redirects (lines 76–111 of that config — only installation, start-here/*, and the retired cli-reference paths are covered). The guide file exists at v4-0-0/command-line-tools/mcp-integration.mdx, not under a v4-0-0-snapshot tree.

Fix in both files: replace v4-0-0-snapshot with v4-0-0:

https://guides.wheels.dev/v4-0-0/command-line-tools/mcp-integration

This replaces one broken link (the path that never existed) with another that will 404 in production. The slug needs to be correct to be an improvement.


Tests

wheels reload --password has no behavioral test.

cli/lucli/tests/specs/commands/ReloadCommandSpec.cfc only source-scans for the onApplicationStart does NOT re-fire / wheels stop && wheels start strings. The new code path — parseConsoleArgs(structuredArgs(arguments)) plumbing the --password override — has no coverage. A spec asserting that when password is in the collection, detectReloadPassword() is skipped, would guard this. Low-risk nit since the console() function uses the identical pattern and its tests pass, but worth noting.

mcpHiddenTools() window-scan won't reach the new entries.

cli/lucli/tests/specs/commands/MainCommandSpec.cfc lines 74–77:

var body = mid(variables.source, startIdx, 800);
expect(body).toInclude("""main""");

The four-line comment block added before "$normalizeTestFilter" (lines 170–174 in Module.cfc) pushes those entries past the 800-character cutoff — the existing entries plus comments accumulate to roughly 900 chars before line 175 is reached. The "main" assertion still passes (it's near the top), but there's no regression guard to keep $normalizeTestFilter and $resolveAppTestDataSource in mcpHiddenTools(). Extending the window (e.g. to 1200) or adding a second toInclude assertion would close the gap. Not a blocker, but the stated fix is unguarded.


Conventions

@build.version@ placeholder check in info() at line 1152:

if (left(fwVersion, 7) == "@build." && right(fwVersion, 1) == "@") {

This is the right pattern — it matches BuildInfo.cfc line 57 verbatim, not the older exact-equality forms in PackageLoader.cfc/Plugins.cfc. No issue here; noting it for completeness.


Commits

Single commit fix(cli): audit-tail polish — info version line, MCP helper leak, help/console text — valid type, scope, subject ≤ 100 chars, sentence-case, Signed-off-by present. Clean.


Docs

web/sites/guides/src/content/docs/v4-0-0/command-line-tools/wheels-commands/testing.mdx--directory alias documented correctly; the alias is implemented at Module.cfc lines 551/561.

CLAUDE.mdwheels packages registry info is a real verb (Module.cfc line 2415). Addition is correct.

CHANGELOG.md — entry under [Unreleased] ### Fixed is present and accurate.

@wheels-bot

wheels-bot Bot commented Jun 9, 2026

Copy link
Copy Markdown
Contributor

Wheels Bot — Reviewer B (round 1)

A's review is accurate and well-founded. The blocking finding (broken URL introduced in two places) is verified against the actual source; the two test-coverage nits are real and correctly scoped as non-blockers. No false positives, no sycophancy, no missed issues of significance. Aligning with A's request-changes verdict.

Sycophancy

None detected. A requested changes on a concrete finding rather than approving with platitudes.

False positives

None detected.

  • Broken URL claim: Verified. astro.config.mjs lines 68-75 explicitly document that deep links fall through to 404, and /v4-0-0-snapshot/command-line-tools/mcp-integration is not among the explicit redirects (lines 76-112 cover only installation, start-here/*, and cli-reference). The guide file exists at web/sites/guides/src/content/docs/v4-0-0/command-line-tools/mcp-integration.mdx, confirming A's proposed fix (v4-0-0 slug) resolves correctly.

  • 800-char window claim: Verified. Counting from the public array function mcpHiddenTools() declaration through the existing entries plus the four-line comment block added by the PR, the 800-char boundary falls mid-way through the fourth comment line before "$normalizeTestFilter" on the following line. A's estimate is accurate.

  • @build.version@ convention note: Accurate. BuildInfo.cfc line 57 uses the identical left(v, 7) == "@build." && right(v, 1) == "@" pattern. Not a false positive.

  • --directory alias and registry info verb: A cited line numbers slightly off (~10 lines for --directory; registry info is at line 2393, not 2415 which is help text), but the substantive claims are correct and both exist in the current codebase. Not false positives.

Missed issues

None of material weight.

A did not explicitly verify that the console /datasource and /q aliases are already implemented (the PR claims they already exist). Both are confirmed: /datasource at Module.cfc line 1382, /q at line 1338. The help-text update is documenting pre-existing behavior, so this omission is acceptable given the PR's framing.

Verdict alignment

A's request-changes verdict is consistent with the findings: one real broken URL affecting both the wheels mcp instructions and the /wheels/mcp deprecation notice, with two low-severity test-coverage nits.

Convergence

Aligned. The joint recommendation is to fix both v4-0-0-snapshot occurrences to v4-0-0:

  1. cli/lucli/Module.cfc -- the out() call in mcp() (the line outputting the guides URL)
  2. vendor/wheels/public/mcp/McpServer.cfc -- the deprecationNotice string (line 11)

The two test-coverage gaps (no behavioral test for reload --password; mcpHiddenTools window needs extending past 800 chars to cover $normalizeTestFilter / $resolveAppTestDataSource) are non-blocking nits; address-review should fix the URL and may address the coverage gaps at its discretion.

- Replace broken `v4-0-0-snapshot/command-line-tools/mcp-integration`
  deep-link with the correct `v4-0-0/` slug in both the `wheels mcp`
  guidance output (cli/lucli/Module.cfc) and the deprecation notice
  on the legacy `/wheels/mcp` endpoint
  (vendor/wheels/public/mcp/McpServer.cfc). Astro's static redirect
  map cannot catch-all `v4-0-0-snapshot/*` → `v4-0-0/*` (see
  web/sites/guides/astro.config.mjs:68-75), so the previous URL would
  fall through to the site 404.
- Extend the `mcpHiddenTools()` window-scan in MainCommandSpec.cfc
  from 800 to 1500 chars and assert on the new
  `$normalizeTestFilter` / `$resolveAppTestDataSource` entries so the
  regression guard actually covers them past the comment block.

Signed-off-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com>
@wheels-bot

wheels-bot Bot commented Jun 9, 2026

Copy link
Copy Markdown
Contributor

Wheels Bot — Address Review (round 1)

Applied consensus findings from Reviewer A and Reviewer B's convergence (round 1):

  • Fixed broken v4-0-0-snapshot deep-link in both call sites. Replaced with the correct v4-0-0/ slug in cli/lucli/Module.cfc:1253 (the wheels mcp guidance output) and vendor/wheels/public/mcp/McpServer.cfc:11 (the legacy /wheels/mcp deprecation notice). Confirmed against web/sites/guides/astro.config.mjs:68-75 — Astro's static redirects can't catch-all v4-0-0-snapshot/*v4-0-0/*, so the previous URL was falling through to the site 404. The guide file at web/sites/guides/src/content/docs/v4-0-0/command-line-tools/mcp-integration.mdx confirms the corrected slug resolves.
  • Extended mcpHiddenTools() window-scan regression guard in cli/lucli/tests/specs/commands/MainCommandSpec.cfc:70-82. Window grown from 800 → 1500 chars to cover the new entries past the four-line comment block, plus added explicit toInclude assertions for $normalizeTestFilter and $resolveAppTestDataSource so a future regression that drops them would be caught.

Skipped (intentionally):

  • wheels reload --password behavioral test — Reviewer B explicitly flagged both test-coverage nits as "non-blocking" and at address-review's discretion; this one requires a new spec block and the console() parallel-pattern coverage is sufficient prior art per A's own observation. Left for the human author if they want it.

Note: I could not re-run tools/test-cli-local.sh in this sandbox (test runner requires Docker/server boot not permitted here). The changes are: two URL string replacements and a window-size + two toInclude assertions on an existing spec — purely additive guard, no logic surface touched.

The new commit will trigger a fresh Reviewer A run on the updated SHA. Convergence loop continues until reviewers align on `approve` or the outer-loop cap (5 rounds) is reached.

@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 A

TL;DR: The round-1 fixup commit (e61b11e) correctly addresses both consensus findings from the prior review: the broken v4-0-0-snapshot deep-link slug is replaced with v4-0-0 in both Module.cfc and McpServer.cfc (file verified at web/sites/guides/src/content/docs/v4-0-0/command-line-tools/mcp-integration.mdx), and the mcpHiddenTools() source-scan window is extended from 800 to 1500 characters with explicit assertions for both $normalizeTestFilter and $resolveAppTestDataSource. The 1500-char window is confirmed sufficient: both entries sit at Module.cfc lines 175-176, only 17 lines into the function that starts at line 159. The full PR is clean on correctness, conventions, cross-engine, docs, commits, and security. One minor test nit remains open.


Tests

ReloadCommandSpec still has no assertion for the --password override branch.

cli/lucli/tests/specs/commands/ReloadCommandSpec.cfc (unchanged by this PR) does not cover the new code path added at cli/lucli/Module.cfc lines 694-695:

var reloadOpts = parseConsoleArgs(structuredArgs(arguments));
var password = len(reloadOpts.password) ? reloadOpts.password : detectReloadPassword();

A spec asserting that when password is present in the argument collection detectReloadPassword() is bypassed would guard this branch. This was flagged in the round-0 review and is still open. Low-risk (the pattern is identical to console() which IS covered), but worth a follow-up if a ReloadCommandSpec suite is touched in a subsequent PR.


Commits

Both commits conform to commitlint.config.js: valid fix(cli) type, scope, subject under 100 chars, sentence-case, Signed-off-by trailers present on both. Clean.


Correctness

The notes help-text correction (removing HACK from the listed defaults) is accurate -- Module.cfc line 2604 confirms the ArgSpec default is "TODO,FIXME,OPTIMIZE". The create app banner addition is correct; public string function create() is at line 1016. The info() framework-version path correctly reads vendor/wheels/wheels.json with the structural placeholder guard (left(fwVersion, 7) == "@build.") matching wheels.BuildInfo line 57 exactly. The /ds, /datasource and /q console aliases documented in the /help output are real. All clean.

@wheels-bot

wheels-bot Bot commented Jun 9, 2026

Copy link
Copy Markdown
Contributor

Wheels Bot — Reviewer B (round 1)

A's review of the round-1 fixup commit is accurate, evidence-backed, and complete. Both consensus findings are correctly verified: the v4-0-0-snapshot slug fix is real (first commit introduced v4-0-0-snapshot, fixup replaced it with v4-0-0 — the cumulative PR diff masks this, but git show e61b11e confirms it), the 1500-char window extension is sufficient (entries at lines 175–176 of Module.cfc, 17 lines into the function starting at 159 — verified), and the single open nit (ReloadCommandSpec missing --password coverage) is correctly assessed as low-risk and non-blocking. I have no disagreements.

Sycophancy

None detected. Every claim A made is accompanied by a specific file, line number, or diff reference. The approval is evidence-based.

False positives

None detected. Spot-checked each claim:

  • v4-0-0-snapshot → v4-0-0 fix: confirmed via git show e61b11e -- cli/lucli/Module.cfc
  • $normalizeTestFilter / $resolveAppTestDataSource at lines 175–176: confirmed by reading Module.cfc at the fixup commit
  • web/sites/guides/src/content/docs/v4-0-0/command-line-tools/mcp-integration.mdx exists: confirmed
  • Both commits Signed-off-by the correct claude[bot] identity matching the session's git config: confirmed

Missed issues

None detected for the fixup commit scope (3 files: Module.cfc, MainCommandSpec.cfc, McpServer.cfc). The round-0 findings from the broader PR were addressed in prior rounds and are not re-litigated here.

Verdict alignment

A's COMMENTED state (no blocking findings, one acknowledged follow-up nit) is consistent with the findings. The PR is clean after the fixup.

Convergence

Aligned on approve. A correctly identified that the fixup resolved both blocking issues and that the ReloadCommandSpec gap is a low-risk follow-up item, not a merge blocker. Joint recommendation: the PR is review-clean for this SHA.

Adds a source-scan assertion to ReloadCommandSpec (matching the existing
hot-reload-contract test) verifying reload() parses --password via
parseConsoleArgs and only auto-detects when no override is supplied. A
behavioral test would need a running server (reload() calls
$requireRunningServer first), so — like the sibling assertion — this
guards the wiring at the source level. Closes the one open nit from the
Reviewer A/B round-1 review.

Builds on the bot's round-1 fixup (e61b11e).

Signed-off-by: Peter Amiri <peter@alurium.com>
wheels-bot[bot]
wheels-bot Bot previously approved these changes Jun 9, 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 A

TL;DR: This third commit adds the ReloadCommandSpec source-scan assertion that was the sole open nit from round-1. The implementation is correct, the window calculation is sound, and all issues from prior rounds are resolved. Approving.


Correctness

Round-1 issues (broken URL, mcpHiddenTools window): both confirmed resolved in e61b11e. Module.cfc line 1250 and McpServer.cfc line 11 now carry https://guides.wheels.dev/v4-0-0/command-line-tools/mcp-integration. The mcpHiddenTools() source-scan in MainCommandSpec.cfc uses a 1500-char window with explicit assertions for "$normalizeTestFilter" and "$resolveAppTestDataSource".

New commit (f246899ab) — --password override wiring guard: The spec in ReloadCommandSpec.cfc (lines 27–42 after the patch) is correct on all fronts:

  • The anchoring regex (?m)^[ \t]*public\s+string\s+function\s+reload\s*\( correctly matches the live signature public string function reload() at Module.cfc:681.
  • The span from that signature to the detectReloadPassword() ternary at line 698 is approximately 901 characters, comfortably within the 1200-char mid() window (~299-char margin).
  • All three expect assertions are exact string matches against the live source:
    • "parseConsoleArgs(structuredArgs(arguments))" — line 697 ✓
    • "detectReloadPassword()" — line 698 ✓
    • reFindNoCase("len\(\s*reloadOpts\.password\s*\)\s*\?", body) matches len(reloadOpts.password) ? at line 698 ✓ (CFML double-quoted string passes backslashes literally to the regex engine — correct behavior).

Tests

The source-scan approach is the right tradeoff: reload() gates on $requireRunningServer() before it reaches the password logic, so a behavioral test would require a live server. The sibling assertion (onApplicationStart does NOT re-fire) uses the same pattern and precedent. All round-1 test gaps are now closed.


Commits

All three commits conform to commitlint.config.js:

Commit Type Header length Sign-off
fix(cli): audit-tail polish … fix 77 chars
fix(cli): address Reviewer A/B consensus findings (round 1) fix 58 chars
test(cli): guard wheels reload --password override wiring test 56 chars

@wheels-bot

wheels-bot Bot commented Jun 9, 2026

Copy link
Copy Markdown
Contributor

Wheels Bot — Reviewer B (round 1)

A's review is accurate and thorough. All claims check out against the diff and the live source. One minor style nit A missed — doesn't change the verdict.

Sycophancy

None detected. A cites specific line numbers and diff excerpts for every claim rather than stating general approval.

False positives

None detected. Verified each of A's assertions against the diff:

  • URL fix in Module.cfc and McpServer.cfc: both now carry https://guides.wheels.dev/v4-0-0/command-line-tools/mcp-integration
  • mcpHiddenTools() window extended to 1500 chars with assertions for "$normalizeTestFilter" and "$resolveAppTestDataSource"
  • ReloadCommandSpec.cfc assertions: parseConsoleArgs(structuredArgs(arguments)), detectReloadPassword(), and the ternary regex all match the patched reload() body exactly ✓
  • A's line-681 signature claim: in the HEAD file, develop's line 673 + 8 net lines added before reload() = 681 ✓
  • Window math (~901 chars, 1200-char window): span from signature at 681 to ternary at ~697–698 is ~16–17 lines ≈ 850–1020 chars, comfortably within the window ✓
  • A's note on \s in double-quoted CFML strings — CFML passes backslashes literally to the regex engine — is correct for the startIdx pattern as well, not just the third assertion ✓

Independently confirmed: parseConsoleArgs (line 1253 in develop) returns a struct with a password key — console() at line 1264 accesses .password directly — so reloadOpts.password is safe to access without a key-existence guard.

Missed issues

One style issue: CLAUDE.md says "Never write multi-paragraph docstrings or multi-line comment blocks — one short line max." Three new multi-line comment blocks appear in this PR:

  • cli/lucli/Module.cfc — 5-line block in mcpHiddenTools() (commit e61b11e)
  • cli/lucli/Module.cfc — 3-line block above var reloadOpts = ... in reload() (commit f246899ab)
  • cli/lucli/tests/specs/commands/ReloadCommandSpec.cfc — 6-line comment before the source-scan assertion (commit f246899ab)

The WHY in each is non-obvious (which is when a comment is warranted), so the comments themselves are defensible — the violation is length only. Non-blocking.

Verdict alignment

A's APPROVED verdict is consistent with the findings: the implementation is correct, the wiring is verified, cross-engine concerns are not applicable to CLI-only code, and all prior-round nits are closed.

Convergence

Aligned. Both A and B reach approve. The only gap is the multi-line comment style nit, which does not change the recommendation. The PR is ready for a human to mark ready-for-review and merge.

…il-polish

Signed-off-by: Peter Amiri <peter@alurium.com>

# Conflicts:
#	CHANGELOG.md

@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 A

TL;DR: This head SHA (d34b27c72) is a housekeeping merge commit that brings origin/develop (commit 8f3283fdb, PR #2890 — the non-zero exit code fix) into the PR branch and resolves a single CHANGELOG.md conflict. The PR's substantive code changes were approved in the round-3 review against f246899ab; GitHub dismissed that approval automatically when the merge commit was pushed. This pass confirms the merge commit is clean and the prior approval holds.


Correctness

The merge commit changes exactly one file: CHANGELOG.md. The conflict resolution is correct:

  • The ### Changed section (from #2890) is preserved intact.
  • The PR's CLI-audit tail polish entry is placed at the top of ### Fixed, above the existing develop entries — correct chronological ordering.
  • No develop-side ### Fixed entries were dropped.

All the PR's key changes are confirmed present in the merged Module.cfc and McpServer.cfc:

Change Location Status
$normalizeTestFilter / $resolveAppTestDataSource in mcpHiddenTools() Module.cfc:175–176
create app in --help banner Module.cfc:287
0.0.0-dev placeholder guard for wheels info Module.cfc:1159
--password override via parseConsoleArgs in reload() Module.cfc:699–700
v4-0-0 MCP integration guide URL Module.cfc:1259
v4-0-0 MCP integration guide URL McpServer.cfc:11
1500-char mcpHiddenTools() window + $normalizeTestFilter/$resolveAppTestDataSource assertions MainCommandSpec.cfc:78–81
--password wiring source-scan ReloadCommandSpec.cfc:24–37

Commits

The merge commit carries a Signed-off-by: Peter Amiri trailer. The underlying PR commits (9a2cf88, e61b11e71, f246899ab) all conform to commitlint.config.js as verified in the round-3 review.


No new correctness, cross-engine, convention, test, docs, or security issues introduced by this update.

@wheels-bot

wheels-bot Bot commented Jun 9, 2026

Copy link
Copy Markdown
Contributor

Wheels Bot — Reviewer B (round 1)

A's review of the merge commit is accurate, correctly scoped, and consistent with the prior-round history. No issues to raise.

Sycophancy

None detected. A identifies this as a merge-commit pass, correctly limits its scope to the CHANGELOG.md conflict resolution, and backs every claim with a specific file/line reference. The approval is evidence-based.

False positives

None detected. A's characterisation of the HEAD commit is accurate: the commit message names CHANGELOG.md as the sole conflict, and the three prior commits carrying the substantive code changes all have prior-round converged-approve markers (e61b11e717 and f246899ab0). The cumulative gh pr diff shows all 7 files, but that is the full branch delta — A's statement that the merge commit itself touches only CHANGELOG.md is correct. A's verification table (8 specific Module.cfc / McpServer.cfc / spec-file locations) confirms the prior changes survived the merge intact.

Missed issues

None detected. The one open non-blocking nit from the f246899ab round (multi-line comment blocks) was explicitly accepted as non-blocking in that round and does not resurface here. The merge commit introduces no new issues: CHANGELOG.md entry is correct, no logic surface is touched, no cross-engine risk (the single vendor file touched — McpServer.cfc — was a one-line string already approved), and all commits carry valid DCO sign-offs.

Verdict alignment

A's APPROVED verdict is consistent with the findings. Approving a merge commit that only resolves a documentation conflict, after the substantive changes were already approved in prior rounds, is appropriate.

Convergence

Aligned on approve. A and B both reach the same recommendation: the PR is review-clean for this SHA. No changes needed.

@bpamiri
bpamiri merged commit 5690757 into develop Jun 10, 2026
15 checks passed
@bpamiri
bpamiri deleted the peter/cli-audit-tail-polish branch June 10, 2026 03:47
bpamiri pushed a commit that referenced this pull request Jun 11, 2026
…ntegration guide URL (#3019)

* fix(mcp): replace phantom mcp-configuration-guide.md path with live integration guide URL

PR ##2888 standardized the deprecated /wheels/mcp HTTP transport's doc pointer on https://guides.wheels.dev/v4-0-0/command-line-tools/mcp-integration, but three runtime-visible strings still cited the phantom docs/command-line-tools/commands/mcp/mcp-configuration-guide.md path that has never existed in the repo: the one-time-per-JVM deprecation log message in vendor/wheels/public/views/mcp.cfm, the CLI-disabled-tool error returned to clients in vendor/wheels/public/mcp/McpServer.cfc, and the legacy CommandBox wheels mcp setup output in cli/src/commands/wheels/mcp/setup.cfc. Replace all three (plus the file-header comment in mcp.cfm) with the URL #2888 already standardized on, matching the serverInfo.deprecationNotice field that PR did fix.

Refs #3016

Signed-off-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com>

* docs(web/guides): replace deprecated "dependencies" key with "requires" in package.json example

Signed-off-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com>

---------

Signed-off-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com>
Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant