Skip to content

fix(cli): point scaffolded routes.cfm comment at canonical guides.wheels.dev URL#2640

Merged
bpamiri merged 3 commits into
developfrom
fix/bot-2635-stale-docs-cfwheels-org-url-in-scaffolded-config-r
May 13, 2026
Merged

fix(cli): point scaffolded routes.cfm comment at canonical guides.wheels.dev URL#2640
bpamiri merged 3 commits into
developfrom
fix/bot-2635-stale-docs-cfwheels-org-url-in-scaffolded-config-r

Conversation

@wheels-bot
Copy link
Copy Markdown
Contributor

@wheels-bot wheels-bot Bot commented May 13, 2026

Summary

Two CLI scaffolding templates emit a // See https://... comment in the new app's config/routes.cfm that points at https://guides.wheels.dev/docs/routing — a path that doesn't exist on the current docs site. The active 4.0 lucli config/routes.cfm template was already corrected to the canonical /v4-0-0-snapshot/handling-requests-with-controllers/routing URL, but two sibling templates that produce the same comment for older code paths still shipped the broken link:

  • cli/src/templates/ConfigRoutes.txt (legacy CommandBox CLI)
  • cli/lucli/templates/app/app/snippets/ConfigRoutes.txt (lucli runtime snippet copied into the generated app's app/snippets/)

This PR replaces the stale URL in both files with the canonical one and adds a regression spec under vendor/wheels/tests/specs/cli/ that asserts each template references the canonical guides.wheels.dev path and guards against any reintroduction of retired docs.cfwheels.org / cfwheels.org / cfwheels.com references.

Related Issue

Closes #2635

Type of Change

  • Bug fix
  • New feature
  • Enhancement to existing feature
  • Documentation update
  • Refactoring

Feature Completeness Checklist

  • DCO sign-offgit commit -s used; trailer present on the commit
  • Testsvendor/wheels/tests/specs/cli/ConfigRoutesStaleDocUrlSpec.cfc (failing → passing)
  • Framework Docs — handled separately by bot-update-docs.yml
  • AI Reference Docs — handled separately by bot-update-docs.yml
  • CLAUDE.md — handled separately by bot-update-docs.yml
  • CHANGELOG.md — entry added under [Unreleased]
  • Test runner passes — the Wheels CLI is not present in the bot-propose-fix sandbox so bash tools/test-local.sh couldn't drive the runner end-to-end here. The new spec is pure fileExists / fileRead / contains / reFindNoCase over two known paths (mirroring vendor/wheels/tests/specs/cli/ApplicationCfcInjectorAssignmentSpec.cfc), and I verified the assertions directly with grep: pre-fix, each file matched the stale /docs/routing path 1× and the canonical URL 0× (would fail toBeTrue + toBeFalse); post-fix, each file matches the canonical URL 1× and the stale path 0×, with no docs.cfwheels.org / cfwheels.org / cfwheels.com hits. CI will exercise the spec on every supported engine × database matrix.

Test Plan

  • Confirm both templates now contain https://guides.wheels.dev/v4-0-0-snapshot/handling-requests-with-controllers/routing
  • Confirm neither template contains guides.wheels.dev/docs/routing, docs.cfwheels.org, cfwheels.org, or cfwheels.com
  • vendor/wheels/tests/specs/cli/ConfigRoutesStaleDocUrlSpec.cfc exercises every assertion above against both files
  • Reviewer: run bash tools/test-local.sh wheels.tests.specs.cli locally and confirm the new spec passes alongside the existing CLI specs

…els.dev URL

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

wheels-bot Bot commented May 13, 2026

Wheels Bot — No doc updates

Reviewed this PR's diff and found no docs that need updating (purely a comment URL fix in two CLI scaffolding templates — no user-visible framework feature surface, API, or convention changed; CHANGELOG.md was already updated as part of the PR).

Copy link
Copy Markdown
Contributor Author

@wheels-bot wheels-bot Bot left a comment

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 minimal, correct fix — two one-line changes replacing a dead guides.wheels.dev/docs/routing URL with the canonical v4-0-0-snapshot path in the two remaining stale templates, backed by a regression spec that mirrors the established pattern from ApplicationCfcInjectorAssignmentSpec.cfc. Everything compiles, the assertions are logically sound, the commit is compliant, and the CHANGELOG entry is present. One nit worth addressing: the regression spec's targets array omits the third template that was already corrected, leaving a blind spot if that file ever regresses. No correctness, cross-engine, or security concerns.


Conventions

Nit — regression spec omits the already-corrected third template

vendor/wheels/tests/specs/cli/ConfigRoutesStaleDocUrlSpec.cfc, line 32:

var targets = [
    "cli/src/templates/ConfigRoutes.txt",
    "cli/lucli/templates/app/app/snippets/ConfigRoutes.txt"
];

The PR description notes that cli/lucli/templates/app/config/routes.cfm was corrected in a prior pass and is the canonical reference. Excluding it from the regression guard means a future edit could silently reintroduce the stale URL there without a failing test. Suggested fix — add it to targets:

var targets = [
    "cli/src/templates/ConfigRoutes.txt",
    "cli/lucli/templates/app/app/snippets/ConfigRoutes.txt",
    "cli/lucli/templates/app/config/routes.cfm"
];

The spec's assertions (canonical URL present, stale URL absent, no cfwheels.org/cfwheels.com) apply equally to that file — no other changes needed.


Tests

The new spec correctly follows the ApplicationCfcInjectorAssignmentSpec.cfc IIFE-captures-loop-var pattern:

for (var rel in targets) {
    (function(relPath) {
        it("...", () => { ... });
    })(rel);
}

reFindNoCase("cfwheels\.(org|com)", content) > 0 returns a position (> 0) on a match, so .toBeFalse() correctly rejects any occurrence. The separate docs.cfwheels.org string-contains check is redundant (the regex subsumes it) but harmless and produces a more specific failure message — keeping it is fine.

The ##2635 in the block comment (/** ... */) is cosmetically double-escaped (block comments don't interpret #) but consistent with the pattern in ApplicationCfcInjectorAssignmentSpec.cfc (##2622), so no change needed.


Commits

Single commit fix(cli): point scaffolded routes.cfm comment at canonical guides.wheels.dev URL — type fix, scope cli, subject ≤ 100 chars, not ALL-CAPS, DCO Signed-off-by trailer present. Clean.


Docs

CHANGELOG [Unreleased] entry added. Framework/AI-reference docs and CLAUDE.md marked as handled by bot-update-docs.yml, which is appropriate for a template-comment URL change.

@wheels-bot
Copy link
Copy Markdown
Contributor Author

wheels-bot Bot commented May 13, 2026

Wheels Bot — Reviewer B (round 1)

A's review is accurate and well-grounded. The single nit — adding the already-corrected third template to the regression spec's targets array — is a real gap and the suggested fix is correct. I verified A's claims against the diff and the repo, found no sycophancy, no false positives, and no additional missed issues. Aligning on the nit as a change to apply.

Sycophancy

None detected. A's positive framing is backed by specific diff evidence: commit compliance, CHANGELOG entry, CFML idiom analysis (IIFE closure capture, reFindNoCase return semantics, ## in block comments). No vacuous LGTM.

False positives

None detected. I verified each claim A made:

  • Third template omission: cli/lucli/templates/app/config/routes.cfm is confirmed absent from the targets array in the new spec (diff line 32-35). The file itself already carries the canonical URL at line 5 — A's read is accurate and the suggested fix (adding it to targets) is correct and low-effort.
  • reFindNoCase returns position > 0 on match: Accurate CFML behavior — the function returns the character position of the first match, so > 0 is the correct truthy test and .toBeFalse() correctly rejects any occurrence.
  • docs.cfwheels.org check redundant with the regex: Accurate — reFindNoCase("cfwheels\.(org|com)", content) subsumes docs.cfwheels.org. A's judgment to leave it (more specific failure message) is fine.
  • ##2635 in block comment: Block comments do not evaluate CFML expressions, so the double-hash is purely cosmetic. A is correct that it mirrors the established pattern in ApplicationCfcInjectorAssignmentSpec.cfc.

Missed issues

None detected. I searched the full cli/ tree for any remaining guides.wheels.dev/docs/, cfwheels.org, or cfwheels.com references and found zero hits outside the files this PR already touches. The expandPath("/wheels/../..") repo-root resolution pattern is an established convention used by sibling specs — no new risk.

Verdict alignment

A's state is COMMENTED (neither APPROVED nor CHANGES_REQUESTED). For a nit of this severity — the third file already contains the correct URL; adding it to targets is purely a regression-coverage improvement — COMMENTED is an appropriate verdict. Internally consistent with calling it a "nit" rather than a blocker.

Convergence

Aligned. A's one finding is valid and I have no additional findings to add. The nit (add cli/lucli/templates/app/config/routes.cfm to the spec's targets array) is concrete and actionable. Joint recommendation: apply A's suggested change and merge.

…argets (round 1)

Address Reviewer A/B consensus: add cli/lucli/templates/app/config/routes.cfm
to the targets array in ConfigRoutesStaleDocUrlSpec so the canonical-URL
regression guard also covers the already-corrected third template. Without
this, a future edit could silently reintroduce the stale /docs/routing path
in that file. All four spec assertions already hold against the file
(canonical URL present, stale path / docs.cfwheels.org / cfwheels.(org|com)
all absent).

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

wheels-bot Bot commented May 13, 2026

Wheels Bot — Address Review (round 1)

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

  • Added cli/lucli/templates/app/config/routes.cfm to the targets array in vendor/wheels/tests/specs/cli/ConfigRoutesStaleDocUrlSpec.cfc (lines 29-33). The third template already carries the canonical URL but was missing from the regression guard, leaving a blind spot if it ever regressed. All four spec assertions already hold against the file:
    • canonical guides.wheels.dev/v4-0-0-snapshot/handling-requests-with-controllers/routing present (1 match)
    • stale guides.wheels.dev/docs/routing absent (0 matches)
    • retired docs.cfwheels.org absent (0 matches)
    • retired cfwheels.(org|com) regex absent (0 matches)

Test runner note: bash tools/test-local.sh cli couldn't drive the spec end-to-end here because the bot sandbox doesn't ship the Wheels CLI (same constraint noted in the propose-fix description). Assertions were verified directly with grep against the live file; the CI matrix will exercise the spec on every supported engine × database.

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.

Copy link
Copy Markdown
Contributor Author

@wheels-bot wheels-bot Bot left a comment

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 PR correctly fixes a dead doc-URL comment in two scaffolding templates and adds a regression spec that now covers all three affected files. The previous review's sole nit — the third template (cli/lucli/templates/app/config/routes.cfm) missing from the spec's targets array — was addressed in the follow-up commit. The diff is clean across all dimensions: correctness, conventions, cross-engine compatibility, tests, docs, and commits. No objections to merging; a human approver is required because GitHub prevents self-approval.


What changed

  • cli/src/templates/ConfigRoutes.txt and cli/lucli/templates/app/app/snippets/ConfigRoutes.txt: one-line URL replacement from dead /docs/routing to the canonical /v4-0-0-snapshot/handling-requests-with-controllers/routing path.
  • vendor/wheels/tests/specs/cli/ConfigRoutesStaleDocUrlSpec.cfc (new): regression spec guarding all three templates against the stale URL and any retired cfwheels.(org|com) / docs.cfwheels.org references.
  • The round-1 follow-up commit added cli/lucli/templates/app/config/routes.cfm to targets, closing the blind spot noted in the prior review.

Tests

Spec mirrors the established ApplicationCfcInjectorAssignmentSpec.cfc pattern exactly:

  • expandPath("/wheels/../..") for repo-root resolution — consistent with the companion spec.
  • IIFE loop-var capture: (function(relPath) { it(...) })(rel) — correct; without it every it closure would bind the final iteration's value.
  • All four assertions (canonical present, stale path absent, docs.cfwheels.org absent, reFindNoCase("cfwheels\.(org|com)")) are logically sound and confirmed by grep against the working tree.
  • No RocketUnit / legacy wheels.Test patterns — correctly extends wheels.WheelsTest.

Commits

Both commits conform to commitlint.config.js: valid types (fix), unrestricted scopes (cli, test), subjects under 100 chars, not ALL-CAPS, DCO Signed-off-by trailers present on both.

  • 74789a1fix(cli): point scaffolded routes.cfm comment at canonical guides.wheels.dev URL
  • 133b863fix(test): add scaffolded routes.cfm to ConfigRoutesStaleDocUrlSpec targets (round 1)

Docs

CHANGELOG [Unreleased] ### Fixed entry is present and accurate. AI-reference and CLAUDE.md updates correctly deferred to bot-update-docs.yml — a URL comment fix in scaffolding templates does not change framework conventions.

@wheels-bot
Copy link
Copy Markdown
Contributor Author

wheels-bot Bot commented May 13, 2026

Wheels Bot — Reviewer B (round 1)

A's review on the updated SHA is accurate and well-grounded. The address-review commit correctly added cli/lucli/templates/app/config/routes.cfm to the spec's targets array, closing the blind spot from round 1. I re-scanned the full diff and the live working tree and found no sycophancy, no false positives, and no missed issues. Aligning on approve.

Sycophancy

None detected. A's "no objections to merging" is backed by specific evidence: diff verification of both URL replacements, IIFE closure analysis, reFindNoCase return-value semantics, commitlint conformance for both commits, DCO trailer presence, and CHANGELOG entry accuracy. No vacuous LGTM.

False positives

None detected. I verified each claim:

  • All three templates carry the canonical URL: Confirmed — grep against all three files returns v4-0-0-snapshot/handling-requests-with-controllers/routing exactly once in each, zero stale /docs/routing hits.
  • Third template in targets array: Confirmed — cli/lucli/templates/app/config/routes.cfm appears at line 32 of the final spec file.
  • IIFE closure capture: Correct analysis. Without the IIFE, every it closure would bind the final iteration's value of rel. The (function(relPath) { ... })(rel) pattern is the right CFML fix.
  • reFindNoCase returns position > 0 on match: Accurate. The function returns the character position of the first match (an integer > 0), so > 0 is the correct truthy test and .toBeFalse() correctly asserts the pattern is absent.
  • Both commits conform to commitlint: fix(cli) and fix(test) with subjects under 100 chars, not ALL-CAPS, DCO trailers — all verified.

Missed issues

None detected. Cross-engine check: fileExists, fileRead, contains, and reFindNoCase are all standard CFML built-ins with consistent behavior across Lucee, Adobe CF, and BoxLang. No engine-specific APIs introduced. Full scan of cli/ for remaining stale references (guides.wheels.dev/docs/, cfwheels.org, cfwheels.com) returns zero hits outside the files this PR already touches.

Verdict alignment

A's state is COMMENTED rather than APPROVED, correctly noting that GitHub prevents the bot from self-approving. A's substantive verdict — "no objections to merging" after verifying correctness, tests, commits, and docs — is internally consistent with the findings.

Convergence

Aligned. A has no remaining findings and neither do I. The PR is clean on this SHA: two correct one-line URL fixes, a sound regression spec covering all three templates, conformant commits, and an accurate CHANGELOG entry. Joint recommendation: approve and merge once a human reviewer signs off.

@bpamiri bpamiri marked this pull request as ready for review May 13, 2026 04:16
@bpamiri bpamiri merged commit c3fef61 into develop May 13, 2026
5 checks passed
@bpamiri bpamiri deleted the fix/bot-2635-stale-docs-cfwheels-org-url-in-scaffolded-config-r branch May 13, 2026 04:16
Copy link
Copy Markdown
Contributor Author

@wheels-bot wheels-bot Bot left a comment

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 head SHA for this review is the merge-from-develop sync commit (44891e6f) — Merge branch 'develop' into fix/bot-2635-stale-docs-cfwheels-org-url-in-scaffolded-config-r. It introduces no new PR content; the two substantive commits (74789a147 and 133b863fe) were reviewed in the prior pass at 133b863fe. The PR has since been merged. This review records a clean pass against the final tree for completeness.


What the PR did

  • Replaced the dead https://guides.wheels.dev/docs/routing comment URL with the canonical https://guides.wheels.dev/v4-0-0-snapshot/handling-requests-with-controllers/routing URL in two scaffolding templates.
  • Added vendor/wheels/tests/specs/cli/ConfigRoutesStaleDocUrlSpec.cfc: a BDD regression spec covering all three affected template files, asserting the canonical URL is present and all retired cfwheels.org / cfwheels.com / docs.cfwheels.org references are absent.

Head-SHA delta

The merge commit brought in 1e7dfa491 from develop (fix(cli): honor --no-sqlite when scaffolding lucee.json) — orthogonal to this PR and already reviewed independently (PR 2624). No new code paths in this PR's files were introduced.


Correctness

Template changes: single-line substitution in two identical files — confirmed correct. The canonical URL matches the existing cli/lucli/templates/app/config/routes.cfm reference.

Spec: expandPath("/wheels/../..") correctly resolves the repo root from the Lucee /wheels mapping. The IIFE loop-var-capture pattern is correct and matches the companion spec in ApplicationCfcInjectorAssignmentSpec.cfc. All four assertions are logically sound. The reFindNoCase("cfwheels\.(org|com)", content) > 0 expression returns a position integer — .toBeFalse() correctly fires when a match is found.


Tests

Spec extends wheels.WheelsTest (BDD) — no legacy RocketUnit patterns. All three template files are now guarded in targets, closing the blind spot noted in the prior review round. The ##2635 in the block comment is consistent with the ## escape convention used elsewhere in the spec suite.


Commits

Both PR commits conform to commitlint.config.js — valid types (fix), unrestricted scopes (cli, test), subjects under 100 chars, not ALL-CAPS, DCO Signed-off-by trailers present on both. The merge commit (44891e6f) was authored by a human maintainer doing the develop sync — outside the scope of this review.


Docs

CHANGELOG [Unreleased] ### Fixed entry present and accurate. AI reference and CLAUDE.md updates correctly deferred to bot-update-docs.yml — a template comment URL fix does not alter framework conventions.

No security concerns; no cross-engine issues (spec uses only core CFML built-ins: expandPath, fileExists, fileRead, contains, reFindNoCase).

@wheels-bot
Copy link
Copy Markdown
Contributor Author

wheels-bot Bot commented May 13, 2026

Wheels Bot — Reviewer B (round 1)

A's review on SHA 44891e6fc is accurate. This head SHA is a merge-from-develop sync commit that introduced no new content in PR files — the substantive work was reviewed and converged-approved at 133b863fe in the prior round. A correctly identified this, verified the delta, and recorded a clean pass. No sycophancy, no false positives, no missed issues.

Sycophancy

None detected. A's "clean pass for completeness" framing is backed by specific evidence: confirmed that the merge commit only brought in 1e7dfa491 (PR 2624, orthogonal), confirmed no new code paths in this PR's files, and re-verified the key spec properties (IIFE closure capture, reFindNoCase semantics, commitlint conformance, DCO trailers). Not a vacuous LGTM.

False positives

None detected. I verified each claim:

  • PR has since been merged: Confirmed — merged at 2026-05-13T04:16:31Z, before A's review at 04:18:44Z. Accurate.
  • Merge commit only brought in 1e7dfa491 from develop: Confirmed against git history — that commit (PR 2624, --no-sqlite lucee.json fix) is the only develop-side commit that wasn't already on the PR branch.
  • No new code paths in this PR's files: Confirmed via the PR diff — the four changed files (CHANGELOG.md, two template ConfigRoutes.txt files, ConfigRoutesStaleDocUrlSpec.cfc) are unchanged between 133b863fe and 44891e6fc.
  • IIFE closure capture is correct: Confirmed — (function(relPath) { ... })(rel) correctly freezes the loop variable for each closure body. Standard CFML closure gotcha, correctly handled.

Missed issues

None detected. Cross-engine check: expandPath, fileExists, fileRead, contains, reFindNoCase are all core CFML built-ins with consistent behavior across Lucee, Adobe CF, and BoxLang. No engine-specific APIs. Full scan of cli/ for remaining stale references returns zero hits outside the files this PR already touches — consistent with A's finding.

Verdict alignment

A's state is COMMENTED. Given the PR is already merged and A cannot self-approve, COMMENTED is the only available verdict. The substantive judgment — "no objections, prior review stands" — is internally consistent with the findings and with the prior converged-approve on 133b863fe.

Convergence

Aligned. A has no findings and neither do I. The PR landed cleanly: two correct one-line URL fixes, a sound regression spec covering all three templates, conformant commits with DCO trailers, and an accurate CHANGELOG entry. The develop sync commit introduced nothing new in scope. Joint recommendation: already merged; no further action needed.

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.

Stale docs.cfwheels.org URL in scaffolded config/routes.cfm template comment

1 participant