docs(web/guides): add the no-CLI path and five-journey front door (restructure phase 3)#3277
Conversation
…structure phase 3) Phase 3 of the guides restructure driven by discussion #1838 — the phase that directly answers the thread. Six new pages plus the journey-based landing pages. All new-page claims were verified against the real 4.0.5 release zips (downloaded and inspected) or framework source before writing. New pages: - start-here/manual-installation — the #1 ask restored: install from wheels-base-template + wheels-core zips, filesystem-first, written against the actual 4.0.5 artifacts. Documents that 4.0 has ZERO external dependencies (built-in Injector.cfc replaces WireBox; built-in wheelstest replaces TestBox) — the 3.x WireBox/TestBox layering appears only as a clearly-labeled aside. Notes the @build.version@ placeholder difference for git-checkout installs. - start-here/choosing-your-tooling — the decision page + corrected version of the glossary the community built for itself in #1838 (wheels CLI IS LuCLI rebranded; binary/JAR/bucket demystified; Chocolatey marked retired). Answers 'do CommandBox shops have to switch?' (no) and 'is a GitHub download supported?' (yes) explicitly. - start-here/working-without-the-cli — task-equivalents hub with a per-equivalent availability column. Verified: /wheels/* GUI surfaces are development-only via a hard allowlist since 4.0.4 (#2903, Public.cfc fails closed) regardless of enablePublicComponent; production-safe equivalents are the programmatic calls (migrator.migrateToLatest(), seeder.runSeeds()) and the password-gated URL reload. - start-here/app-structure — the directory anatomy previously only learnable by running wheels new; includes the 2.x mental mapping and the six-mapping contract from public/Application.cfc. - upgrading/manual-upgrades — vendor/wheels swap recipe for patch bumps and the 3.x->4.0 jump; opens with the two-pass pointer for 2.x apps; honest aside about wheels upgrade check (run-once-on-a-workstation option, plus its two known false spots, #3115). - deployment/iis-and-windows — IIS site at public/, wsconfig/BonCode connectors, web.config translation of the shipped Tuckey rules, the ACF Administrator datasource requirement, and the MySQL 8 nullCatalogMeansCurrent=true metadata gotcha from the #1838 thread. NEEDS A HAND-TEST PASS ON A REAL IIS BOX before this page ships — flagged in the PR. Front door: - v4-0-0/index.mdx rewritten as five journey cards (new / upgrading / no-CLI / CommandBox / self-hosted deploy) + full section map. All five cards' gating pages exist in this PR, satisfying the hold-back rule. - start-here/index.mdx rewritten to mirror the journeys: orientation, the three install paths under one heading, then learn-it. - installing.mdx gains a 'Don't want a CLI at all?' aside routing to the manual pages. - Sidebar: Choosing Your Tooling + Manual Installation join the Install Wheels subgroup; Working Without the CLI + Anatomy join Start Here; Upgrading Without the CLI joins Upgrading & Releases; IIS joins the Deploy It Yourself subgroup. Verified: astro build passes (440 pages); 0 sidebar orphans, 0 dangling links, 0 broken internal links; all six new pages render; journey cards present in built landing page. Signed-off-by: Peter Amiri <petera@pai.com>
There was a problem hiding this comment.
Wheels Bot — Reviewer
TL;DR — Phase 3 of the guides restructure: six new no-CLI/onboarding pages plus a five-journey front door, all under web/sites/guides/. This is a docs-only change (494 additions, no framework/app/CLI code touched), so there are no cross-engine, code-correctness, or security surfaces to break. I independently verified every falsifiable technical claim in the new pages against framework source, and they all check out; internal links and the sidebar entries all resolve. Verdict: comment — no blocking findings, a couple of minor verification notes below that a maintainer may want to confirm before/at merge.
Docs
Ground-truth checks I ran against vendor/wheels/ and the base template — all confirmed accurate:
- Programmatic migrator/seeder APIs (
working-without-the-cli.mdx,manual-upgrades.mdx):application.wheels.migrator.migrateToLatest(),.migrateTo(version),.getCurrentMigrationVersion(), andapplication.wheels.seeder.runSeeds()all exist and are public —Migrator.cfc:209/27/225,Seeder.cfc:46. Theapplication.wheels.migrator/.seederobjects are wired atevents/onapplicationstart.cfc:465/470. application.$wheels.version(manual-installation.mdx:97,manual-upgrades.mdx): real and populated atonapplicationstart.cfc:105fromBuildInfo. Consistent with the existingupgrading/changelog.mdxandupgrading/index.mdxusage.- Six mappings (
app-structure.mdx,manual-installation.mdx):/app,/vendor,/wheels,/tests,/config,/pluginsmatchcli/lucli/templates/app/public/Application.cfc:25-30exactly (the base-template Application.cfc, which is the reader's context). Injector.cfcandwheelstest/(no WireBox/TestBox dependency): both present —vendor/wheels/Injector.cfc,vendor/wheels/wheelstest/..envvars (manual-installation.mdx:427):WHEELS_ENV,WHEELS_DATASOURCE,WHEELS_RELOAD_PASSWORDmatch the template atcli/lucli/templates/app/_env.- Settings
autoMigrateDatabaseandreloadPasswordare real (onapplicationstart.cfc:482,Global.cfc:684); the/wheels/*dev-only allowlist claim matchesPublic.cfc:12-27and #2903. - Browser surfaces
/wheels/migrator,/wheels/routes,/wheels/info,/wheels/app/testsall back onto existing views (public/views/migrator.cfm,routes.cfm,info.cfm,tests.cfm). - Internal links & anchor: spot-checked every cross-referenced page (welcome, upgrading, 2x/3x guides, installing-with-commandbox, deployment index/vm/docker, security-hardening, packages, changelog, glossary, database-and-multiple-datasources, tutorial, etc.) — all resolve. The
security-hardening/#reload-passwordanchor matches the## Reload passwordheading at line 153. Sidebar entries inv4-0-0.jsonare all backed by files in this PR.
Two minor notes (non-blocking, no change required):
app-structure.mdx:44-49presents the mappings asthis.mappings["/app"] = expandPath("../app/")literals. The shipped template routes these through intermediate vars (this.appDir = expandPath("../app/"),this.wheelsDir = this.vendorDir & "wheels/",Application.cfc:21-27). The effective paths are identical, so the sample is accurate as an explanation — just flagging that a reader diffing against the real file will see a slightly different shape.manual-installation.mdx:419andiis-and-windows.mdx:67reference anenv.examplefile in the extracted base template. In-repo the template shipscli/lucli/templates/app/_env(installed as.env); I couldn't confirm from source that the base-template zip contains a file literally namedenv.example. The PR states zip contents were inspected against 4.0.5 — worth a maintainer double-check, since it's the file new users are told to copy from.iis-and-windows.mdxcorrectly self-flags as needing a real-Windows/IIS hand-test, matching the PR's own review checklist. Good practice; no action needed in-diff.
Commits
Single commit dfe9fb37c — docs(web/guides): add the no-CLI path and five-journey front door (restructure phase 3). Valid type (docs), optional scope (web/guides), header ~86 chars (< 100), not ALL-CAPS. Matches the PR title, which is the linted squash-merge gate. Conforms.
Manually triggered baseline refresh via .github/workflows/refresh-visual-baselines.yml on branch peter/guides-phase3-no-cli-path. Run when an intentional content/layout change makes the visual-regression check fail. The new PNG(s) under web/tests/visual-baselines/ are now the expected rendering; re-run the failing visual-regression job to flip the check green.
There was a problem hiding this comment.
Wheels Bot — Reviewer
TL;DR — Phase 3 of the guides restructure: six new no-CLI/onboarding pages (manual-installation, choosing-your-tooling, working-without-the-cli, app-structure, manual-upgrades, iis-and-windows), a five-journey front door on index.mdx, sidebar wiring, and a refreshed visual baseline — all under web/sites/guides/. Docs-only. I spot-checked every concrete framework claim against source rather than trusting the prose, and they hold up. Verdict: comment — the diff is clean and unusually well-grounded; one non-blocking completeness nit on the IIS web.config rule.
Docs
Verified against framework source (all confirmed accurate):
app-structure.mdx/manual-installation.mdx— the six-mapping contract (/app,/vendor,/wheels,/tests,/config,/plugins) matchespublic/Application.cfc:22-27.Injector.cfcandwheelstest/both exist undervendor/wheels/, so "zero external dependencies / no WireBox / no TestBox" is correct.working-without-the-cli.mdx—application.wheels.migrator.migrateToLatest()/.migrateTo()/.getCurrentMigrationVersion()all exist (vendor/wheels/Migrator.cfc:209,27,225; wired atonapplicationstart.cfc:465,483).seeder.runSeeds()confirmed (Seeder.cfc:46).autoMigrateDatabaseconfirmed (onapplicationstart.cfc:482). The#2903dev-only allowlist and "enablePublicComponent=truecannot open these outside development" claim is backed by thePublic.cfc:19-27comments.manual-installation.mdx/manual-upgrades.mdx—application.$wheels.versionis the real property (onapplicationstart.cfc:105), used consistently in both pages.- All internal cross-links resolve — every linked page (
installing-with-commandbox,security-hardening,production-config,vm-deployment,2x-to-3x,3x-to-4x,changelog,release-channels,packages,conventions-over-configuration, the tutorial chapters, all section indexes) exists, and the#reload-passwordanchor matches the## Reload passwordheading insecurity-hardening.mdx:153.type:frontmatter values (howto/explanation/landing/section) are all already established in the corpus.
Nit (non-blocking) — deployment/iis-and-windows.mdx:40-61: the web.config translates only the primary "Wheels pretty URLs" rule from public/urlrewrite.xml. The shipped Tuckey file has a second rule ("Convert dot to format parameter", ^/(.*)\.(\w+)$ → ?format=$2) that isn't reflected here, so IIS readers relying on /posts/1.json-style format negotiation won't get the same behavior. The page text says "translation of the same rule" (singular) and carries a "verify on your box" caution, so this is a completeness note, not an inaccuracy — worth a one-line aside that the extension-to-format convenience rule isn't carried over.
Commits
Both conform to commitlint.config.js: docs(web/guides): … and chore(web): refresh visual baseline(s) (all) — valid types, scoped, subjects under 100 chars. The binary guides.png baseline refresh is the expected consequence of the landing-page change.
Nice work — the "verified against the real 4.0.5 zips / framework source before writing" discipline shows. The IIS page's own caution banner correctly flags it as the one section still wanting a hand-test on a real Windows/IIS box, which matches the PR's review-flag checklist.
Summary
Phase 3 of the guides restructure driven by discussion #1838 — the phase that directly answers the thread. Six new pages plus the journey-based front door. Every claim in the new pages was verified against the real 4.0.5 release zips (downloaded and inspected) or framework source before writing. Follows #3275 (nav) and #3276 (trust repair).
The six new pages
Injector.cfcreplaces WireBox and the built-inwheelstest/replaces TestBox. The infamous 3.x WireBox/TestBox-plus-four-hidden-modules layering appears only as a labeled historical aside. Includes the git-clone alternative with the honest@build.version@caveat.Public.cfc: the/wheels/*browser surfaces are development-only via a hard allowlist since 4.0.4 (#2903) regardless ofenablePublicComponent— so the production-safe column points at the programmatic calls (application.wheels.migrator.migrateToLatest(),seeder.runSeeds(), both verified) and the password-gated URL reload.wheels newmid-tutorial, including the 2.x→4.0 mental mapping and the six-mapping contract frompublic/Application.cfc.vendor/wheels/swap recipe (whatwheels upgrade applyautomates) for patch bumps and the 3.x→4.0 jump; opens with the two-pass pointer for 2.x apps; honest aside onwheels upgrade checkincluding its two known false spots (#3115).public\, wsconfig/BonCode connector steps, aweb.configtranslation of the shipped Tuckey rules, the CF-Administrator datasource requirement, and the MySQL 8nullCatalogMeansCurrent=truemetadata gotcha — all from the community-verified setup in #1838, adapted to the 4.0 layout.The front door
v4-0-0/index.mdxis now five journey cards — I'm new / I have a 2.x-3.x app / I don't use CLI tooling / I'm a CommandBox shop / I'm deploying to my own servers — plus a full section map. All five cards' gating pages exist in this PR, satisfying the proposal's hold-back rule.start-here/index.mdxmirrors the journeys: orientation → the three install paths under one heading → learn-it.installing.mdxgains a "Don't want a CLI at all?" aside; the sidebar gains all six pages in their proposed positions.Verification
astro buildpasses: 440 pages (434 + 6); all six new pages render; journey cards confirmed in built HTML.vendor/; core zip is a barewheels/folder;box.jsonconfirms no WireBox/TestBox deps),Public.cfcdev-only allowlist confirmed,Migrator.cfc/Seeder.cfcprogrammatic APIs confirmed,app/migrator/migrations/path confirmed in the shipped template.Review flags
Follow-ups (later phases)
config/settings.cfmin the base template links the deadv4-0-0-snapshotguides URL🤖 Generated with Claude Code