From c46c392f290078e87d533a4058019b537c983346 Mon Sep 17 00:00:00 2001 From: Peter Amiri Date: Tue, 9 Jun 2026 21:30:01 -0700 Subject: [PATCH 001/198] docs: record merge-method requirement and divergence recovery in release playbook (#2893) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Learned at the 4.0.3 cut (#2892): - The 'merge with a merge commit' step silently depended on the repo setting 'Allow merge commits', which had been switched to squash-only between the 4.0.1 and 4.0.2 cuts — forcing #2819 to squash and poisoning the next promotion with 24 spurious conflicts. The setting is enabled again (permanently, per maintainer decision 2026-06-09); the playbook now says so explicitly. - Document the '-s ours' healing recipe for promoting develop over a diverged main, including the must-be-empty tree-diff verification. - Promote the CHANGELOG rename on develop BEFORE cutting the release branch (the 4.0.3 flow, #2891) so develop doesn't need a back-port like #2824. - Fix dispatch-list drift: chocolatey-wheels was retired for scoop-wheels, and the apt/yum bucket dispatches were missing from the trigger list. Signed-off-by: Peter Amiri Co-authored-by: Claude Fable 5 --- .github/RELEASE_PLAYBOOK.md | 35 +++++++++++++++++++++++++++++++---- 1 file changed, 31 insertions(+), 4 deletions(-) diff --git a/.github/RELEASE_PLAYBOOK.md b/.github/RELEASE_PLAYBOOK.md index 2584ab9a0..8ed7e90e2 100644 --- a/.github/RELEASE_PLAYBOOK.md +++ b/.github/RELEASE_PLAYBOOK.md @@ -36,6 +36,9 @@ on them is green. ~5 minutes/day max. to publish if it sees TBD on the target version, and also fails if a `----` separator would make the release-notes awk bleed into the previous version's notes (recurring footgun — see #2606, #2768; now guarded in `release.yml`). + Do the rename **on develop** (PR it, like #2891) *before* cutting the + release branch — renaming only on the release branch leaves develop's + `[Unreleased]` entries stale and forces a back-port commit later (#2824). 3. **Verify `wheels.json` version** matches what you want to release. `wheels.json` is the canonical version source since the 4.0 rebrand (the workflows read it; `box.json` is legacy and may be absent or empty). After @@ -58,10 +61,31 @@ gh pr create --base main --head release/X.Y.Z-to-main \ --title "Release X.Y.Z" --body "Cut X.Y.Z. See CHANGELOG." # 2. Merge with "Create a merge commit" (NOT squash — preserves develop -# history on main). +# history on main). Requires the repo setting "Allow merge commits" +# (Settings → General → Pull requests) — enabled as of 2026-06-09. The +# repo was squash-only at the 4.0.2 cut, which forced #2819 to squash +# and poisoned the next promotion (see below). gh pr merge --merge --delete-branch ``` +#### If the develop→main PR reports conflicts + +A past squash-merged release (e.g. 4.0.2 / #2819) leaves main's history +disjoint from develop's: every file touched both in that release and since +then 3-way-conflicts, even though develop is strictly newer (24 files at the +4.0.3 cut). Don't resolve those by hand — develop's tree IS the release. +Record main as a parent without changing the tree: + +```bash +git checkout -b release/X.Y.Z-to-main origin/develop +git merge -s ours origin/main -m "Merge main into release branch (ours): develop is authoritative" +git diff HEAD origin/develop # MUST print nothing — verify before pushing +``` + +The resulting PR shows exactly the develop-vs-main content diff, merges +conflict-free, and — merged with a merge commit — permanently heals the +divergence. The 4.0.3 cut (#2892) did exactly this. + The push-to-main from that merge triggers `release.yml`, which builds the artifacts and calls `softprops/action-gh-release` with `tag_name: vX.Y.Z`, creating the tag at main HEAD automatically. Do **not** run `git tag` / @@ -70,10 +94,13 @@ by the ruleset anyway. The tag push triggers: - `release.yml` builds artifacts, publishes to `wheels-dev/wheels/releases` -- `release.yml`'s "Dispatch downstream package managers" step then fires - three `repository_dispatch` events via `DOWNSTREAM_DISPATCH_TOKEN` (a PAT): +- `release.yml`'s dispatch steps then fire `repository_dispatch` events via + PATs (`DOWNSTREAM_DISPATCH_TOKEN`, `LINUX_REPO_DISPATCH_TOKEN`): - `wheels-released` → `wheels-dev/homebrew-wheels` (brew formula bump) - - `wheels-released` → `wheels-dev/chocolatey-wheels` (choco package bump) + - `wheels-released` → `wheels-dev/scoop-wheels` (scoop manifest bump — + chocolatey was retired for the v4 Windows install; see scoop-wheels#4) + - `wheels-released` → `wheels-dev/apt-wheels` / `wheels-dev/yum-wheels` + (Linux repo metadata regen for apt.wheels.dev / yum.wheels.dev) - `bump-develop` → `wheels-dev/wheels` itself (this repo) — only for `CHANNEL=stable` (snapshots and RCs don't bump develop) - `bump-develop-version.yml` fires on the `bump-develop` dispatch and opens From 0688d914b3250414507efb21a8775b30ada646db Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 9 Jun 2026 21:33:44 -0700 Subject: [PATCH 002/198] chore: bump develop snapshot target to 4.0.4 (#2894) Co-authored-by: bpamiri <180555+bpamiri@users.noreply.github.com> --- wheels.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wheels.json b/wheels.json index 9b53c1da4..95a81df99 100644 --- a/wheels.json +++ b/wheels.json @@ -1,7 +1,7 @@ { "$schema": "https://wheels.dev/schema/wheels.json/v1.json", "name": "Wheels.fw", - "version": "4.0.3", + "version": "4.0.4", "description": "Wheels — CFML MVC framework", "homepage": "https://wheels.dev", "documentation": "https://wheels.dev/guides/", From 0ec62e4d414585173e1d391a0edfa93d203f9a0d Mon Sep 17 00:00:00 2001 From: Peter Amiri Date: Tue, 9 Jun 2026 22:06:35 -0700 Subject: [PATCH 003/198] docs(web/blog): publish Wheels 4.0.3 release post (#2896) --- .../blog/posts/wheels-4-0-3-released.md | 132 ++++++++++++++++++ 1 file changed, 132 insertions(+) create mode 100644 web/content/blog/posts/wheels-4-0-3-released.md diff --git a/web/content/blog/posts/wheels-4-0-3-released.md b/web/content/blog/posts/wheels-4-0-3-released.md new file mode 100644 index 000000000..5b2660540 --- /dev/null +++ b/web/content/blog/posts/wheels-4-0-3-released.md @@ -0,0 +1,132 @@ +--- +title: 'Wheels 4.0.3: rebuilt CLI argument parsing, honest exit codes, and wrong-database guardrails' +slug: wheels-4-0-3-released +publishedAt: '2026-06-10T00:00:00.000Z' +updatedAt: '2026-06-10T11:47:37.000Z' +author: Peter Amiri +tags: + - wheels-4 + - release-notes + - frameworks +categories: + - Releases +excerpt: >- + Wheels 4.0.3 is the third patch on the 4.0 line, focused on making the + `wheels` CLI trustworthy in scripts and CI: argument parsing is rebuilt + end-to-end (`--no-*` negations and named-only flags finally reach every + command), failures exit non-zero, and write-side commands refuse to attach + to a different project's server. Plus PostgreSQL/CockroachDB foreign-key + migration fixes, pre-23c Oracle support, preserved column casing in model + output, and a fix that stops framework helpers from being URL-invokable as + controller actions. +coverImage: null +--- + +Wheels 4.0.3 ships today, two weeks after [4.0.2](https://blog.wheels.dev/posts/wheels-4-0-2-released). Like the two patches before it, it's a patch release in the SemVer sense — no new public APIs to learn — but it has the clearest center of gravity of the three: **the `wheels` CLI**. If 4.0.2 was about trusting your migrations, 4.0.3 is about trusting the tool that runs them — from a terminal, from a script, from CI, or from an AI agent driving it over MCP. + +There are also two fixes everyone should read before upgrading — one that affects PostgreSQL users running migrations, and one security fix in the controller dispatch path. Both are covered below. + +## The argument-parsing rebuild + +Here's a bug report that kicked this whole effort off: `wheels new blog --no-sqlite` scaffolded a SQLite database anyway ([#2855](https://github.com/wheels-dev/wheels/issues/2855)). The flag wasn't misspelled, and the code that *should* have honored it was right there. So where did it go? + +The answer was structural. LuCLI (the runtime under the `wheels` binary) parses your command line and hands each command a **structured argument map** — positionals as `arg1, arg2, ...`, options as `key=value`, and `--no-key` normalized to `key=false`. But the CLI module historically flattened that map *back* into a flat argv array so that each of ~18 subcommands could re-parse it with its own hand-rolled token loop. That round trip was lossy in two ways: + +- The flatten step **silently dropped every `false` value** — so `--no-sqlite`, `--no-routes`, `--no-test-db`, and `--no-open-browser` never survived to the commands that documented them. +- The rebuild only ran when a *positional* argument was present — so **named-only invocations were dropped entirely**. `wheels seed --environment=production` seeded the development environment. `wheels doctor --verbose` was never verbose. The defaults just won, silently. + +4.0.3 completes the fix that landed incrementally on the bleeding-edge channel: a typed argument-spec builder, `ArgSpec`, that consumes LuCLI's structured handoff directly — declare your positionals, flags, and options up front, get a typed result back, no flatten, no re-parse ([#2861](https://github.com/wheels-dev/wheels/issues/2861)). Every one of the CLI's commands now parses through it, and the deprecated round-trip shim is **deleted**, so the bug class can't quietly come back. The `--no-sqlite` case is also pinned end-to-end in the onboarding test harness — real CLI, real LuCLI handoff, real scaffolder. + +```bash +# all of these previously half-worked or silently ran with defaults +wheels new blog --no-sqlite +wheels seed --environment=production +wheels generate admin Product --no-routes +wheels doctor --verbose +``` + +One deliberate behavioral note: space-separated option values (`wheels test --filter models`) are gone in favor of the `--key=value` form (`wheels test --filter=models`) — LuCLI delivers a space-separated value as a bare flag plus an unrelated positional, so the old form was never reliably parseable in the first place. + +## Failures exit non-zero now + +The companion fix for scripting: several commands printed a friendly red error message and then returned success — exit code 0 — because of how their error paths returned to the runtime ([#2890](https://github.com/wheels-dev/wheels/pull/2890)). A typo'd subcommand, an unknown generator type, or a **failed migration** all looked green to CI pipelines, deploy scripts, and pre-commit hooks. + +In 4.0.3, `wheels generate `, `wheels create `, `wheels migrate `, `wheels db `, a failed `wheels migrate latest|up|down|info|doctor`, and an unparseable `wheels routes` response all exit non-zero — while still printing the same human-friendly diagnostic first. Over MCP these surface as proper tool errors instead of empty results, so an AI agent can tell the difference between "done" and "didn't happen" too. + +> **Heads-up:** if you have a script that depended on these failure paths exiting 0, it will now see a non-zero exit. That's the intended fix, but it is a behavior change. + +## The 24-command audit + +With the parsing layer trustworthy, we audited every one of the CLI's 24 commands end to end and repaired what the audit surfaced ([#2882](https://github.com/wheels-dev/wheels/pull/2882), [#2883](https://github.com/wheels-dev/wheels/pull/2883), [#2884](https://github.com/wheels-dev/wheels/pull/2884), [#2885](https://github.com/wheels-dev/wheels/pull/2885), with tail-end polish in [#2888](https://github.com/wheels-dev/wheels/pull/2888)). A sampling: + +- `wheels g` works as a true `generate` alias again, and `wheels --help` gains per-command help rendered from each command's own metadata ([#2886](https://github.com/wheels-dev/wheels/pull/2886) — the rendering lights up fully with the next LuCLI runtime update). +- `wheels console` accepts `--password=`, and `wheels reload` gained the same override for parity. +- `wheels generate api-resource` registers its resource route, and both `scaffold` and `api-resource` now honor `--hasOne` ([#2889](https://github.com/wheels-dev/wheels/pull/2889)). +- `wheels validate` strips CFML comments before source-scanning, so a commented-out `// component extends="Model"` can't satisfy (or trip) a check. +- The generators emit `enum()` definitions again, warn on view-generation failures instead of continuing silently, and the duplicate-route message names the offending route. +- `wheels start` warns when its pinned port is already taken instead of failing opaquely, and `wheels info` reports the framework version again. + +## Your migrations can no longer hit someone else's database + +This one deserves its own section because the failure mode is so nasty. The repro from [#2876](https://github.com/wheels-dev/wheels/issues/2876)/[#2878](https://github.com/wheels-dev/wheels/issues/2878): scaffold `app_a`, start its server, then `cd ../app_b` and run `wheels migrate latest` — and **app_b's migrations run against app_a's database.** + +The cause: when a project had no port configured yet, the CLI's server detection fell back to probing a list of common ports (`8080`, `60000`, `3000`, `8500`) and attached to whatever answered — which on a developer machine is frequently a *different* project's server. For a read-only command that's a wrong answer; for `migrate` it's wrong DDL applied to the wrong schema. + +In 4.0.3, every write-side command — `migrate` (all subcommands), `seed`, `reload`, and `generate admin` (which writes scaffolding based on the attached server's schema) — **requires a project-bound port** from `lucee.json` or `.env`. With none configured, they refuse with a clear diagnostic — set `port` in `lucee.json` (or `PORT` in `.env`), then `wheels start` — instead of guessing. Read-only commands (`info`, `routes`, `console`) keep the convenience fallback; they can't damage anything. + +## Adapter fixes: PostgreSQL foreign keys, and Oracle before 23c + +**Every PostgreSQL foreign-key migration was broken** ([#2876](https://github.com/wheels-dev/wheels/issues/2876)). Anything `wheels generate scaffold post title:string --belongsTo=author` produces — an inline FK constraint — crashed `wheels migrate latest` with `Component [PostgreSQLMigrator] has no function with name [addForeignKeyOptions]`: the PostgreSQL adapter was simply missing a method every sibling adapter implements. It's there now, CockroachDB inherits it automatically, and the "works on my machine" reports finally make sense — the `wheels new` default is SQLite, so only PostgreSQL/CockroachDB targets ever hit it. + +**Oracle 19c/21c can drop tables again** ([#2869](https://github.com/wheels-dev/wheels/pull/2869)). The migrator emitted `DROP TABLE IF EXISTS ... CASCADE CONSTRAINTS`, but Oracle only added `IF EXISTS` in 23c — on anything older it's a hard parse error, which broke `migrate down`, rollbacks, and `force`-create. Both `dropTable()` and `dropView()` now emit the classic version-agnostic PL/SQL idiom (run the bare `DROP`, swallow ORA-00942), preserving drop-if-exists semantics on every supported Oracle version. + +## Model properties keep their column casing + +A long-standing 3.0-line regression, reported by a 2.x upgrader: auto-derived model property names were being **force-lowercased on every engine**, so an `isHidden` column surfaced as `ishidden` in serialized output (`returnAs="structs"`, `renderWith()`, `serializeJSON()`) on SQL Server, MySQL, and SQLite — silently breaking case-sensitive JSON consumers that worked fine on CFWheels 2.5 ([#2852](https://github.com/wheels-dev/wheels/pull/2852)). The lowercasing was only ever meant to normalize Oracle's fixed-case identifiers. + +4.0.3 preserves the database's reported casing by default and lowercases only on adapters whose database folds unquoted identifiers to a meaningless UPPERCASE (Oracle, H2), via a new adapter capability. Models that explicitly declare `property(name="isHidden", column="isHidden")` were never affected. + +> **Heads-up:** if your app *adapted* to the lowercased names — client code expecting `{"ishidden": 1}` — that output reverts to the declared casing (`{"isHidden": 1}`) on SQL Server / MySQL / SQLite after this patch. Review serialized-output consumers before upgrading. + +## Security: framework helpers are no longer URL-invokable + +Wheels mixes its global helpers (`env()`, `model()`, `redirectTo()`, `linkTo()`, …) into every controller, and the dispatch allow-list that was supposed to keep them from being *routed to* was initialized empty — a no-op. The result: an unauthenticated `GET //env` invoked the global `env()` helper directly (surfacing as a 500), and other helper names dispatched into unintended code paths ([#2844](https://github.com/wheels-dev/wheels/issues/2844)). + +The allow-list is now populated at application start from the framework's actual mixin surface, so it stays in sync automatically. Reaching a helper name as an action returns a 404 like any other non-existent action. + +> **Migration note:** if your app defined a controller action with the same name as a public framework helper (an action literally named `env`, `model`, or `redirectTo`), it now 404s instead of dispatching — rename it. The standard REST action names (`index`, `show`, `new`, `edit`, `create`, `update`, `delete`) are not helpers and are unaffected. + +## Scaffolded secrets stay out of git + +`wheels new` used to hard-code the generated reload password as a literal in `config/settings.cfm` — a tracked file — and repeat it in a comment ([#2857](https://github.com/wheels-dev/wheels/pull/2857)). New apps now read `set(reloadPassword=env("WHEELS_RELOAD_PASSWORD", ""))`, with the random value living only in the git-ignored `.env`. The Lucee Server Admin password is decoupled into its own generated `WHEELS_LUCEE_ADMIN_PASSWORD` secret ([#2860](https://github.com/wheels-dev/wheels/pull/2860)), resolved from `.env` at server start — so no committed file carries either one. The CLI still accepts the legacy unprefixed `RELOAD_PASSWORD` key, so existing apps keep working; if you adopt the new settings snippet in an older app, rename the key in your `.env` to match. + +## Smaller fixes + +- **The installed distribution loads again** ([#2873](https://github.com/wheels-dev/wheels/pull/2873)). The CLI's service classes were instantiated via a source-tree-only path that doesn't exist in the packaged module layout, so `wheels new` failed from the installed snapshot build while source-tree CI stayed green. The smoke-test gap that let it slip is closed too. +- **Fresh Windows installs work** ([#2835](https://github.com/wheels-dev/wheels/pull/2835)). `wheels new` on a Scoop install crashed with `there is no Resource provider available with the name [c]` — a mixed-slash path (`C:\Users\cy/blog`) tripping Lucee's URI scheme detection into treating `c:` as a resource provider. Paths are normalized before they reach Lucee. +- **Bare `wheels` prints help** instead of `has no function with name [main]` ([#2842](https://github.com/wheels-dev/wheels/pull/2842)). +- **The CLI test suite told the truth and got fixed** ([#2829](https://github.com/wheels-dev/wheels/issues/2829)). The BDD runner's `-1` error sentinel could arithmetically cancel real failures into a green summary; fixing the sentinel unmasked 13 pre-existing CLI spec failures, which were then repaired, and the CI runner now fails explicitly on a negative error count so this masking class is dead. +- **Browser-test login fixture is overridable** ([#2830](https://github.com/wheels-dev/wheels/issues/2830)). Apps with richer session shapes can point `/_browser/login-as` at their own controller##action via `set(browserLoginAsHandler=...)` — env-gating moves to middleware so the guard still applies. +- **RustCFML is recognized as an engine** ([#2837](https://github.com/wheels-dev/wheels/pull/2837)) — best-effort support for the young JVM-free CFML interpreter, with graceful cache degradation where `cfcache` doesn't exist yet. +- **wheels-bot reviews fork PRs** ([#2871](https://github.com/wheels-dev/wheels/pull/2871)) — external contributors get the same automated review loop, via a hardened `pull_request_target` flow that never executes fork-controlled code. +- **The apt install instructions actually work** ([#2846](https://github.com/wheels-dev/wheels/pull/2846)): the published key is ASCII-armored and needs `gpg --dearmor` before landing in the keyring — the docs now say so — and a bleeding-edge publish can no longer clobber the stable apt index ([#2838](https://github.com/wheels-dev/wheels/issues/2838)). +- **One docs tree per minor** ([#2827](https://github.com/wheels-dev/wheels/pull/2827)): the version switcher now reads "v4.0 (current)" and the vestigial pre-GA snapshot tree is gone, with redirects covering the old paths. + +## Upgrading + +One command, depending on how you installed: + +```bash +brew upgrade wheels # macOS +scoop update wheels # Windows +sudo apt upgrade wheels # Debian / Ubuntu +sudo dnf upgrade wheels # Fedora / RHEL / Rocky +``` + +Three behavior changes to scan your app for, all covered above: CLI failures now exit non-zero (fix any script that relied on the old always-0 exit), serialized model output reverts to real column casing on SQL Server/MySQL/SQLite, and controller actions named after framework helpers now 404 (rename them). + +The [4.0.3 release notes](https://github.com/wheels-dev/wheels/releases/tag/v4.0.3) on GitHub have the full PR list, and the [CHANGELOG](https://github.com/wheels-dev/wheels/blob/develop/CHANGELOG.md) carries the longer-form rationale for each entry. + +A particular thank-you this release to everyone who filed CLI issues with exact command lines and exact output — the argument-parsing rebuild started from one well-written report about a flag that didn't stick. As always, the bleeding-edge channel (`brew install wheels-dev/wheels/wheels-be`, the Scoop `wheels-be` manifest, or the `bleeding-edge` suite on apt/yum) tracks `develop` if you want to ride ahead of the next patch. + +Onward to 4.0.4. From 83750374ef6114752a6df61f4afa6a355e6d0d45 Mon Sep 17 00:00:00 2001 From: Peter Amiri Date: Tue, 9 Jun 2026 22:49:29 -0700 Subject: [PATCH 004/198] fix(controller): reject backslash and schemeless open-redirect bypass in $isSafeRedirectUrl (#2898) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix(controller): reject backslash and schemeless open-redirect bypass in $isSafeRedirectUrl $isSafeRedirectUrl passed /\evil.com, \/evil.com, \\evil.com, https:/evil.com, and javascript:alert(1) as safe — browsers normalize backslashes to forward slashes and single-slash schemes to authority form, navigating off-site. - Reject any URL containing a backslash before the relative checks (matches the $generateIncludeTemplatePath precedent). - Detect schemes case-insensitively with the RFC 3986 grammar (ReFindNoCase("^[a-z][a-z0-9+.-]*:")) instead of requiring a literal "://", so scheme-without-authority URLs (javascript:, mailto:, data:, https:/single-slash) are rejected instead of being treated as relative. - Keep protocol-relative and same-domain absolute URLs allowed only on an exact host match; genuine relative paths remain allowed. Verified RED then GREEN on Lucee 7 + SQLite via the worktree docker recipe: pre-fix 33 pass / 5 fail (the five new attack vectors), post-fix 38 pass / 0 fail / 0 error for wheels.tests.specs.controller.redirectionSpec. Finding T7 (open-redirect-backslash), internal framework review 2026-06-09. Co-Authored-By: Claude Fable 5 Signed-off-by: Peter Amiri * docs(changelog): add [Unreleased] section for $isSafeRedirectUrl bypass fix (round 1) Reviewer A and B converged on a single consensus finding: the bug-fix PR was missing the CHANGELOG entry that CONTRIBUTING.md:187 requires. Adds an `## [Unreleased]` section above [4.0.3] with a `### Security` bullet summarizing the five open-redirect bypass vectors closed by this PR (#2898). Signed-off-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com> --------- Signed-off-by: Peter Amiri Signed-off-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com> Co-authored-by: Claude Fable 5 Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com> --- CHANGELOG.md | 8 ++++ vendor/wheels/controller/redirection.cfc | 45 +++++++++++++------ .../specs/controller/redirectionSpec.cfc | 32 +++++++++++++ 3 files changed, 71 insertions(+), 14 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4b8fab34b..a3ebab505 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,14 @@ All historical references to "CFWheels" in this changelog have been preserved fo ---- +## [Unreleased] + +### Security + +- `$isSafeRedirectUrl()` rejects backslash-containing URLs (`/\evil.com`, `\/evil.com`, `\\evil.com`) and schemeless-authority URLs (`https:/evil.com`, `javascript:alert(1)`) instead of returning them as safe. Browsers normalize backslashes to forward slashes and single-slash schemes to authority form, so any of those vectors smuggled past the previous check would navigate off-site after `redirectTo()`. Scheme detection now uses the RFC 3986 grammar (`ReFindNoCase("^[a-z][a-z0-9+.-]*:")`) and runs before the relative-URL fast path; backslashes are rejected up front, so the same-domain `ListFirst` no longer needs to treat `\` as a delimiter. Same-origin absolute URLs and genuine relative paths remain allowed (#2898) + +---- + # [4.0.3](https://github.com/wheels-dev/wheels/releases/tag/v4.0.3) => 2026-06-09 > **Wheels 4.0.3** — third patch on the 4.0 line. Completes the CLI argument-parsing overhaul (`ArgSpec` consumes LuCLI's structured arguments in every command — `--no-*` negations and named-only flags now reach their parsers, and user-error paths exit non-zero) and lands the fixes from a full 24-command CLI audit; write-side commands (`migrate`, `seed`, `reload`, `generate admin`) now refuse to attach to a sibling project's server instead of running against the wrong database; PostgreSQL/CockroachDB foreign-key migrations and pre-23c Oracle `DROP TABLE`/`DROP VIEW` work again; framework helpers can no longer be invoked as controller actions from a URL; auto-derived model properties preserve database column casing; and scaffolded apps keep their reload password out of source control (`WHEELS_RELOAD_PASSWORD` in `.env`). ~45 PRs since the 4.0.2 GA (2026-05-27). diff --git a/vendor/wheels/controller/redirection.cfc b/vendor/wheels/controller/redirection.cfc index 257b52a43..ff6a4b871 100644 --- a/vendor/wheels/controller/redirection.cfc +++ b/vendor/wheels/controller/redirection.cfc @@ -173,27 +173,44 @@ component { * [category: Miscellaneous Functions] */ public boolean function $isSafeRedirectUrl(required string url, required string serverName) { - // Relative URLs (starting with "/" but not "//") are always safe. - if (Left(arguments.url, 1) == "/" && (Len(arguments.url) == 1 || Left(arguments.url, 2) != "//")) { - return true; + // Reject any URL containing a backslash outright. Browsers normalize backslashes to forward + // slashes ("/\evil.com", "\/evil.com" and "\\evil.com" all navigate to evil.com), so a + // backslash anywhere makes the URL unsafe. Literal backslashes in legitimate URLs should be + // percent-encoded (matches the $generateIncludeTemplatePath precedent). + if (Find(Chr(92), arguments.url)) { + return false; } - // Extract the hostname from the URL for exact comparison. + // Protocol-relative URL (//hostname/path): only safe when the hostname matches the current + // server name exactly. if (Left(arguments.url, 2) == "//") { - // Protocol-relative URL: //hostname/path local.afterScheme = Mid(arguments.url, 3, Len(arguments.url) - 2); - } else { - local.schemeEnd = Find("://", arguments.url); - if (local.schemeEnd == 0) { - // No scheme and doesn't start with "/" — treat as relative path (e.g. "page", "dir/page"). - return true; - } - // Absolute URL: scheme://hostname/path - local.afterScheme = Mid(arguments.url, local.schemeEnd + 3, Len(arguments.url) - local.schemeEnd - 2); + local.refererHost = ListFirst(local.afterScheme, ":/?##"); + return CompareNoCase(local.refererHost, arguments.serverName) == 0; + } + + // Relative URLs (starting with a single "/") are always safe. + if (Left(arguments.url, 1) == "/") { + return true; + } + + // No scheme (RFC 3986: ALPHA *( ALPHA / DIGIT / "+" / "-" / "." ) followed by ":") and not + // "/"-rooted: a genuine relative path (e.g. "page", "dir/page"). + if (ReFindNoCase("^[a-z][a-z0-9+.-]*:", arguments.url) == 0) { + return true; + } + + // The URL has a scheme: it is only safe when it is a same-domain scheme://hostname/... URL. + // Schemes without a "//" authority (javascript:, mailto:, data:, "https:/evil.com") are + // rejected because browsers normalize or execute them in ways that escape the current domain. + local.schemeEnd = Find("://", arguments.url); + if (local.schemeEnd == 0) { + return false; } + local.afterScheme = Mid(arguments.url, local.schemeEnd + 3, Len(arguments.url) - local.schemeEnd - 2); // Extract hostname before any port, path, query, or fragment delimiter. - local.refererHost = ListFirst(local.afterScheme, ":/?\##"); + local.refererHost = ListFirst(local.afterScheme, ":/?##"); return CompareNoCase(local.refererHost, arguments.serverName) == 0; } diff --git a/vendor/wheels/tests/specs/controller/redirectionSpec.cfc b/vendor/wheels/tests/specs/controller/redirectionSpec.cfc index 2725fa416..42a08402f 100644 --- a/vendor/wheels/tests/specs/controller/redirectionSpec.cfc +++ b/vendor/wheels/tests/specs/controller/redirectionSpec.cfc @@ -285,6 +285,38 @@ component extends="wheels.WheelsTest" { expect(r.url).toBe("//" & request.cgi.server_name & "/page") }) + it("throws on redirectTo url with slash-backslash external domain", () => { + // Browsers normalize "/\" to "//" and navigate off-site. + expect(function(){ + _controller.redirectTo(url = "/\evil.com") + }).toThrow("Wheels.UnsafeRedirect") + }) + + it("throws on redirectTo url with backslash-slash external domain", () => { + expect(function(){ + _controller.redirectTo(url = "\/evil.com") + }).toThrow("Wheels.UnsafeRedirect") + }) + + it("throws on redirectTo url with double-backslash external domain", () => { + expect(function(){ + _controller.redirectTo(url = "\\evil.com") + }).toThrow("Wheels.UnsafeRedirect") + }) + + it("throws on redirectTo url with single-slash scheme external domain", () => { + // Browsers normalize "https:/evil.com" to "https://evil.com". + expect(function(){ + _controller.redirectTo(url = "https:/evil.com") + }).toThrow("Wheels.UnsafeRedirect") + }) + + it("throws on redirectTo url with javascript scheme", () => { + expect(function(){ + _controller.redirectTo(url = "javascript:alert(1)") + }).toThrow("Wheels.UnsafeRedirect") + }) + it("allows external redirect when allowExternalRedirects is true", () => { application.wheels.allowExternalRedirects = true; try { From aa9bab5bccad221206123e5787bc6a99504ba5e9 Mon Sep 17 00:00:00 2001 From: Peter Amiri Date: Tue, 9 Jun 2026 22:54:46 -0700 Subject: [PATCH 005/198] fix(dispatch): stop trusting X-Forwarded-For for debug-access IP allowlisting (#2902) * fix(dispatch): stop trusting X-Forwarded-For for debug-access IP allowlisting The IP-based debug-access gate derived the client IP from CGI.HTTP_X_FORWARDED_FOR ?: CGI.REMOTE_ADDR. CGI keys always exist (as empty strings), so the elvis fallback never engaged and the allowlist was matched against attacker-controlled header input: any client could send X-Forwarded-For: and switch on the public debug GUI, debug output, and verbose error info in production. The same bug also meant a legitimately allowlisted REMOTE_ADDR without the header could never match. Client IP now defaults to CGI.REMOTE_ADDR (the socket address). The forwarded header is only consulted when the app explicitly opts in via the new framework setting set(debugAccessTrustProxy=true), in which case the rightmost X-Forwarded-For entry (the one appended by the trusted proxy nearest the app) is used. The block is kept inline with a StructKeyExists guard - not a Global helper - so the CLI template and examples degrade to the secure REMOTE_ADDR-only path on older vendored frameworks that lack the setting. Applied uniformly to public/Application.cfc, the CLI app template, and both example apps; default added in vendor/wheels/events/init/security.cfm. Spec extends environment/ipbasedaccessSpec.cfc with a source regression scan (vulnerable elvis pattern absent, gate present), the new default, and the documented resolution semantics. Behavioral note: apps using allowIPBasedDebugAccess behind a reverse proxy must now set debugAccessTrustProxy=true to keep debug access. Co-Authored-By: Claude Fable 5 Signed-off-by: Peter Amiri * fix(test): save/restore debugAccessTrustProxy in ipbasedaccessSpec teardown (round 1) Address Reviewer A/B consensus on PR #2902: - Add debugAccessTrustProxy to beforeAll save / afterAll restore in vendor/wheels/tests/specs/environment/ipbasedaccessSpec.cfc, using the same guarded StructKeyExists pattern as the other three application.wheels keys already handled there. Without it, any spec that mutates the new setting before this one runs would invalidate the "defaults to false" assertion at line 179. - Add the missing trailing newline to ipbasedaccessSpec.cfc. Skipped (consensus characterized these as follow-ups, not changes to this PR): EventMethods.cfc deferred maintenance-mode XFF / except= findings; multi-proxy topology docs; CHANGELOG migration note. Signed-off-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com> --------- Signed-off-by: Peter Amiri Signed-off-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com> Co-authored-by: Claude Fable 5 Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com> --- .../templates/app/public/Application.cfc | 13 +- examples/starter-app/public/Application.cfc | 13 +- examples/tweet/public/Application.cfc | 13 +- public/Application.cfc | 13 +- vendor/wheels/events/init/security.cfm | 3 + .../specs/environment/ipbasedaccessSpec.cfc | 115 +++++++++++++++++- 6 files changed, 165 insertions(+), 5 deletions(-) diff --git a/cli/lucli/templates/app/public/Application.cfc b/cli/lucli/templates/app/public/Application.cfc index 8fa013b17..4a3f0da73 100644 --- a/cli/lucli/templates/app/public/Application.cfc +++ b/cli/lucli/templates/app/public/Application.cfc @@ -168,7 +168,18 @@ component output="false" { application.wheels.environment != "development" && (application.wheels.allowIPBasedDebugAccess) ) { - local.clientIP = CGI.HTTP_X_FORWARDED_FOR ?: CGI.REMOTE_ADDR; + // Client IP comes from the socket address. X-Forwarded-For is client-controlled + // and trivially spoofed, so it is only consulted when the app explicitly opts in + // via set(debugAccessTrustProxy=true) behind a trusted reverse proxy. + local.clientIP = Trim(CGI.REMOTE_ADDR); + if ( + StructKeyExists(application.wheels, "debugAccessTrustProxy") + && application.wheels.debugAccessTrustProxy + && Len(Trim(CGI.HTTP_X_FORWARDED_FOR)) + ) { + // Rightmost entry is the one appended by the trusted proxy nearest the app. + local.clientIP = Trim(ListLast(CGI.HTTP_X_FORWARDED_FOR)); + } local.allowedIPs = application.wheels.debugAccessIPs; if (arrayContains(local.allowedIPs, local.clientIP)) { diff --git a/examples/starter-app/public/Application.cfc b/examples/starter-app/public/Application.cfc index 3f4ad7efc..803f0f53e 100644 --- a/examples/starter-app/public/Application.cfc +++ b/examples/starter-app/public/Application.cfc @@ -170,7 +170,18 @@ component output="false" { application.wheels.environment != "development" && (application.wheels.allowIPBasedDebugAccess) ) { - local.clientIP = CGI.HTTP_X_FORWARDED_FOR ?: CGI.REMOTE_ADDR; + // Client IP comes from the socket address. X-Forwarded-For is client-controlled + // and trivially spoofed, so it is only consulted when the app explicitly opts in + // via set(debugAccessTrustProxy=true) behind a trusted reverse proxy. + local.clientIP = Trim(CGI.REMOTE_ADDR); + if ( + StructKeyExists(application.wheels, "debugAccessTrustProxy") + && application.wheels.debugAccessTrustProxy + && Len(Trim(CGI.HTTP_X_FORWARDED_FOR)) + ) { + // Rightmost entry is the one appended by the trusted proxy nearest the app. + local.clientIP = Trim(ListLast(CGI.HTTP_X_FORWARDED_FOR)); + } local.allowedIPs = application.wheels.debugAccessIPs; if (arrayContains(local.allowedIPs, local.clientIP)) { diff --git a/examples/tweet/public/Application.cfc b/examples/tweet/public/Application.cfc index 3f4ad7efc..803f0f53e 100755 --- a/examples/tweet/public/Application.cfc +++ b/examples/tweet/public/Application.cfc @@ -170,7 +170,18 @@ component output="false" { application.wheels.environment != "development" && (application.wheels.allowIPBasedDebugAccess) ) { - local.clientIP = CGI.HTTP_X_FORWARDED_FOR ?: CGI.REMOTE_ADDR; + // Client IP comes from the socket address. X-Forwarded-For is client-controlled + // and trivially spoofed, so it is only consulted when the app explicitly opts in + // via set(debugAccessTrustProxy=true) behind a trusted reverse proxy. + local.clientIP = Trim(CGI.REMOTE_ADDR); + if ( + StructKeyExists(application.wheels, "debugAccessTrustProxy") + && application.wheels.debugAccessTrustProxy + && Len(Trim(CGI.HTTP_X_FORWARDED_FOR)) + ) { + // Rightmost entry is the one appended by the trusted proxy nearest the app. + local.clientIP = Trim(ListLast(CGI.HTTP_X_FORWARDED_FOR)); + } local.allowedIPs = application.wheels.debugAccessIPs; if (arrayContains(local.allowedIPs, local.clientIP)) { diff --git a/public/Application.cfc b/public/Application.cfc index 4492f5820..ce695e02b 100644 --- a/public/Application.cfc +++ b/public/Application.cfc @@ -185,7 +185,18 @@ component output="false" { application.wheels.environment != "development" && (application.wheels.allowIPBasedDebugAccess) ) { - local.clientIP = CGI.HTTP_X_FORWARDED_FOR ?: CGI.REMOTE_ADDR; + // Client IP comes from the socket address. X-Forwarded-For is client-controlled + // and trivially spoofed, so it is only consulted when the app explicitly opts in + // via set(debugAccessTrustProxy=true) behind a trusted reverse proxy. + local.clientIP = Trim(CGI.REMOTE_ADDR); + if ( + StructKeyExists(application.wheels, "debugAccessTrustProxy") + && application.wheels.debugAccessTrustProxy + && Len(Trim(CGI.HTTP_X_FORWARDED_FOR)) + ) { + // Rightmost entry is the one appended by the trusted proxy nearest the app. + local.clientIP = Trim(ListLast(CGI.HTTP_X_FORWARDED_FOR)); + } local.allowedIPs = application.wheels.debugAccessIPs; if (arrayContains(local.allowedIPs, local.clientIP)) { diff --git a/vendor/wheels/events/init/security.cfm b/vendor/wheels/events/init/security.cfm index 0e7b6cee8..040b35286 100644 --- a/vendor/wheels/events/init/security.cfm +++ b/vendor/wheels/events/init/security.cfm @@ -27,4 +27,7 @@ // IP based restriction settings application.$wheels.debugAccessIPs = []; application.$wheels.allowIPBasedDebugAccess = false; + // Only when true is X-Forwarded-For consulted when resolving the client IP for + // debug access. Leave false unless the app sits behind a trusted reverse proxy. + application.$wheels.debugAccessTrustProxy = false; diff --git a/vendor/wheels/tests/specs/environment/ipbasedaccessSpec.cfc b/vendor/wheels/tests/specs/environment/ipbasedaccessSpec.cfc index be45e2761..6de632318 100644 --- a/vendor/wheels/tests/specs/environment/ipbasedaccessSpec.cfc +++ b/vendor/wheels/tests/specs/environment/ipbasedaccessSpec.cfc @@ -12,6 +12,9 @@ component extends="wheels.WheelsTest" { if (StructKeyExists(application.wheels, "enablePublicComponent")) { variables.originalEnablePublicComponent = application.wheels.enablePublicComponent; } + if (StructKeyExists(application.wheels, "debugAccessTrustProxy")) { + variables.originalDebugAccessTrustProxy = application.wheels.debugAccessTrustProxy; + } } function afterAll() { @@ -26,6 +29,9 @@ component extends="wheels.WheelsTest" { if (StructKeyExists(variables, "originalEnablePublicComponent")) { application.wheels.enablePublicComponent = variables.originalEnablePublicComponent; } + if (StructKeyExists(variables, "originalDebugAccessTrustProxy")) { + application.wheels.debugAccessTrustProxy = variables.originalDebugAccessTrustProxy; + } } function run() { @@ -169,5 +175,112 @@ component extends="wheels.WheelsTest" { expect(application.wheels.enablePublicComponent).toBeTrue(); }); }); + + describe("Debug Access Trust Proxy Default", () => { + + it("debugAccessTrustProxy defaults to false", () => { + expect(StructKeyExists(application.wheels, "debugAccessTrustProxy")).toBeTrue( + "events/init/security.cfm should set a debugAccessTrustProxy default so apps can opt in to X-Forwarded-For resolution behind a trusted proxy." + ); + expect(application.wheels.debugAccessTrustProxy).toBeFalse( + "debugAccessTrustProxy must default to false: X-Forwarded-For is client-controlled and must never be trusted without explicit opt-in." + ); + }); + + it("resolves the client IP from REMOTE_ADDR when trust proxy is disabled, ignoring X-Forwarded-For", () => { + // Mirrors the gated resolution logic in public/Application.cfc onRequestStart. + var remoteAddr = "10.0.0.5"; + var forwardedFor = "203.0.113.99"; // attacker-controlled header value + var trustProxy = false; + var clientIP = Trim(remoteAddr); + if (trustProxy && Len(Trim(forwardedFor))) { + clientIP = Trim(ListLast(forwardedFor)); + } + expect(clientIP).toBe("10.0.0.5"); + }); + + it("resolves the client IP from the rightmost X-Forwarded-For entry when trust proxy is enabled", () => { + // Rightmost entry is the one appended by the trusted proxy nearest the app; + // earlier entries are client-supplied and spoofable. + var remoteAddr = "10.0.0.5"; + var forwardedFor = "203.0.113.99, 198.51.100.7"; + var trustProxy = true; + var clientIP = Trim(remoteAddr); + if (trustProxy && Len(Trim(forwardedFor))) { + clientIP = Trim(ListLast(forwardedFor)); + } + expect(clientIP).toBe("198.51.100.7"); + }); + }); + + describe("Debug Access Client IP Source Regression", () => { + + // Source-scan regression: the debug-access allowlist must not match + // attacker-controlled X-Forwarded-For input. CGI keys always exist + // (empty string), so `CGI.HTTP_X_FORWARDED_FOR ?: CGI.REMOTE_ADDR` + // handed header input straight to the allowlist. Plain find()/ + // findNoCase() only (no regex) per the Lucee 7 global-regex gotcha. + // Repo-root resolution prior art: specs/cli/UpgradeCheckCoverageSpec.cfc. + + it("public/Application.cfc does not trust X-Forwarded-For unconditionally for debug access", () => { + var filePath = expandPath("/wheels/../..") & "/public/Application.cfc"; + expect(fileExists(filePath)).toBeTrue("Missing: " & filePath); + var src = fileRead(filePath); + expect(find("CGI.HTTP_X_FORWARDED_FOR ?: CGI.REMOTE_ADDR", src)).toBe( + 0, + "Vulnerable elvis pattern present: debug-access client IP must default to CGI.REMOTE_ADDR." + ); + expect(findNoCase("debugAccessTrustProxy", src) > 0).toBeTrue( + "X-Forwarded-For use must be gated behind the debugAccessTrustProxy setting." + ); + }); + + it("CLI app template Application.cfc does not trust X-Forwarded-For unconditionally for debug access", () => { + var filePath = expandPath("/wheels/../..") & "/cli/lucli/templates/app/public/Application.cfc"; + expect(fileExists(filePath)).toBeTrue("Missing: " & filePath); + var src = fileRead(filePath); + expect(find("CGI.HTTP_X_FORWARDED_FOR ?: CGI.REMOTE_ADDR", src)).toBe( + 0, + "Vulnerable elvis pattern present: debug-access client IP must default to CGI.REMOTE_ADDR." + ); + expect(findNoCase("debugAccessTrustProxy", src) > 0).toBeTrue( + "X-Forwarded-For use must be gated behind the debugAccessTrustProxy setting." + ); + }); + + it("starter-app example Application.cfc does not trust X-Forwarded-For unconditionally for debug access", () => { + var filePath = expandPath("/wheels/../..") & "/examples/starter-app/public/Application.cfc"; + // Example trees may be pruned from some distributions; only assert when present. + if (fileExists(filePath)) { + var src = fileRead(filePath); + expect(find("CGI.HTTP_X_FORWARDED_FOR ?: CGI.REMOTE_ADDR", src)).toBe( + 0, + "Vulnerable elvis pattern present: debug-access client IP must default to CGI.REMOTE_ADDR." + ); + expect(findNoCase("debugAccessTrustProxy", src) > 0).toBeTrue( + "X-Forwarded-For use must be gated behind the debugAccessTrustProxy setting." + ); + } else { + expect(true).toBeTrue(); + } + }); + + it("tweet example Application.cfc does not trust X-Forwarded-For unconditionally for debug access", () => { + var filePath = expandPath("/wheels/../..") & "/examples/tweet/public/Application.cfc"; + // Example trees may be pruned from some distributions; only assert when present. + if (fileExists(filePath)) { + var src = fileRead(filePath); + expect(find("CGI.HTTP_X_FORWARDED_FOR ?: CGI.REMOTE_ADDR", src)).toBe( + 0, + "Vulnerable elvis pattern present: debug-access client IP must default to CGI.REMOTE_ADDR." + ); + expect(findNoCase("debugAccessTrustProxy", src) > 0).toBeTrue( + "X-Forwarded-For use must be gated behind the debugAccessTrustProxy setting." + ); + } else { + expect(true).toBeTrue(); + } + }); + }); } -} \ No newline at end of file +} From ab291253187f61642d0566b41b014dbb5d42972f Mon Sep 17 00:00:00 2001 From: Peter Amiri Date: Tue, 9 Jun 2026 22:55:19 -0700 Subject: [PATCH 006/198] fix(migrator): wire TenantMigrator to real Migrator API and hold tenant datasource (#2904) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit TenantMigrator was dead on arrival: $createMigrator instantiated the nonexistent wheels.migrator.Migrator (the real component is wheels.Migrator) and then called a nonexistent .migrate() method, so every tenant landed in results.failed. Worse, the original lock restored application.wheels.dataSourceName immediately after construction — but the migrator reads the datasource lazily at query time, so even a 'fixed' call would have migrated the wrong database. - $runForTenant() holds the exclusive named lock for the FULL run and only restores the application datasource after the action completes (timeout bumped 30s -> 300s since the lock now spans real migrations) - $newMigrator() creates wheels.Migrator with configurable migratePath/sqlPath (new optional migrateAll args, mirroring wheels.Migrator.init defaults) - $executeAction() maps latest/up/down/info onto the real Migrator API (migrateToLatest, migrateTo via pending/applied version walks, $buildInfoOutput), mirroring vendor/wheels/public/views/cli.cfm - migrateAll() validates the action up front (Wheels.TenantMigrator.InvalidAction) and snapshots/restores any pre-existing request.wheels.tenant context instead of deleting it - helpers are public with $ prefix per framework convention New TenantMigratorSpec covers latest/up/down/info against the fixture migrations on the live test datasource, datasource + tenant-context restoration, stopOnError both ways, action validation, and the tenantProvider closure path. Verified red on the pre-fix code (8 of 9 fail) and green post-fix; full migrator directory passes (265/265) on Lucee 7 + SQLite. Signed-off-by: Peter Amiri Co-authored-by: Claude Fable 5 --- vendor/wheels/migrator/TenantMigrator.cfc | 193 +++++++++++++----- .../specs/migrator/TenantMigratorSpec.cfc | 187 +++++++++++++++++ 2 files changed, 328 insertions(+), 52 deletions(-) create mode 100644 vendor/wheels/tests/specs/migrator/TenantMigratorSpec.cfc diff --git a/vendor/wheels/migrator/TenantMigrator.cfc b/vendor/wheels/migrator/TenantMigrator.cfc index 325fe3db2..e65bc638a 100644 --- a/vendor/wheels/migrator/TenantMigrator.cfc +++ b/vendor/wheels/migrator/TenantMigrator.cfc @@ -39,13 +39,24 @@ component { * @tenants Array of tenant structs, each with at minimum a `dataSource` key. Optional: `id`. * @tenantProvider Closure that returns an array of tenant structs. Used when tenants is empty. * @stopOnError If true (default), stops on the first tenant that fails. If false, collects errors and continues. + * @migratePath Path to the migration files. Defaults to the standard app location. + * @sqlPath Path the migrator writes generated SQL files to (when `writeMigratorSQLFiles` is enabled). */ public struct function migrateAll( string action = "latest", array tenants = [], any tenantProvider, - boolean stopOnError = true + boolean stopOnError = true, + string migratePath = "/app/migrator/migrations/", + string sqlPath = "/app/migrator/sql/" ) { + if (!ListFindNoCase("latest,up,down,info", arguments.action)) { + Throw( + type = "Wheels.TenantMigrator.InvalidAction", + message = "Invalid migration action `#arguments.action#`. Valid actions are `latest`, `up`, `down` and `info`." + ); + } + local.results = { success = [], failed = [], @@ -64,47 +75,64 @@ component { local.results.total = ArrayLen(local.tenantList); - for (local.tenant in local.tenantList) { - if (!IsStruct(local.tenant) || !StructKeyExists(local.tenant, "dataSource") || !Len(local.tenant.dataSource)) { - ArrayAppend(local.results.failed, { - tenant = local.tenant, - error = "Tenant struct missing required 'dataSource' key" - }); - if (arguments.stopOnError) break; - continue; - } + // Snapshot any pre-existing tenant context (e.g. set by TenantResolver + // middleware) so it can be restored after the run instead of deleted. + if (!StructKeyExists(request, "wheels")) { + request.wheels = {}; + } + local.hadRequestTenant = StructKeyExists(request.wheels, "tenant"); + if (local.hadRequestTenant) { + local.originalRequestTenant = request.wheels.tenant; + } - local.tenantId = StructKeyExists(local.tenant, "id") ? local.tenant.id : local.tenant.dataSource; + try { + for (local.tenant in local.tenantList) { + if (!IsStruct(local.tenant) || !StructKeyExists(local.tenant, "dataSource") || !Len(local.tenant.dataSource)) { + ArrayAppend(local.results.failed, { + tenant = local.tenant, + error = "Tenant struct missing required 'dataSource' key" + }); + if (arguments.stopOnError) break; + continue; + } - try { - // Set the tenant context so migrations use the correct datasource - if (!StructKeyExists(request, "wheels")) { - request.wheels = {}; + local.tenantId = StructKeyExists(local.tenant, "id") ? local.tenant.id : local.tenant.dataSource; + + try { + // Set the tenant context so migrations use the correct datasource + request.wheels.tenant = { + id = local.tenantId, + dataSource = local.tenant.dataSource, + config = StructKeyExists(local.tenant, "config") ? local.tenant.config : {} + }; + + // Run the standard migrator against the tenant's datasource + local.output = $runForTenant( + action = arguments.action, + dataSource = local.tenant.dataSource, + migratePath = arguments.migratePath, + sqlPath = arguments.sqlPath + ); + + ArrayAppend(local.results.success, { + tenant = local.tenantId, + dataSource = local.tenant.dataSource, + output = local.output + }); + } catch (any e) { + ArrayAppend(local.results.failed, { + tenant = local.tenantId, + dataSource = local.tenant.dataSource, + error = e.message + }); + if (arguments.stopOnError) break; } - request.wheels.tenant = { - id = local.tenantId, - dataSource = local.tenant.dataSource, - config = StructKeyExists(local.tenant, "config") ? local.tenant.config : {} - }; - - // Run the standard migrator with the tenant's datasource - local.migrator = $createMigrator(local.tenant.dataSource); - local.output = local.migrator.migrate(arguments.action); - - ArrayAppend(local.results.success, { - tenant = local.tenantId, - dataSource = local.tenant.dataSource, - output = local.output - }); - } catch (any e) { - ArrayAppend(local.results.failed, { - tenant = local.tenantId, - dataSource = local.tenant.dataSource, - error = e.message - }); - if (arguments.stopOnError) break; - } finally { - // Clean up tenant context + } + } finally { + // Restore the pre-existing tenant context (or remove the one we set) + if (local.hadRequestTenant) { + request.wheels.tenant = local.originalRequestTenant; + } else { StructDelete(request.wheels, "tenant"); } } @@ -113,28 +141,89 @@ component { } /** - * Create a migrator instance configured for a specific datasource. - * Temporarily overrides the application datasource for the migration run. - * Uses cflock to prevent race conditions when multiple threads migrate concurrently. + * Runs a single migration action against one tenant datasource. + * Holds an exclusive named lock for the FULL run: the migrator reads + * `application.wheels.dataSourceName` lazily at query time, so the + * application-wide datasource is swapped to the tenant's for the whole + * action and only restored once it completes. The lock prevents + * concurrent tenant migrations from interleaving datasource swaps. */ - private any function $createMigrator(required string dataSource) { + public any function $runForTenant( + required string action, + required string dataSource, + required string migratePath, + required string sqlPath + ) { local.appKey = "wheels"; - lock name="wheels_tenant_migrator" type="exclusive" timeout="30" { - local.originalDS = application[local.appKey].dataSourceName; - - // Temporarily set the application datasource to the tenant's + lock name="wheels_tenant_migrator" type="exclusive" timeout="300" { + local.originalDataSourceName = application[local.appKey].dataSourceName; application[local.appKey].dataSourceName = arguments.dataSource; - try { - local.migrator = new wheels.migrator.Migrator(); + local.migrator = $newMigrator(migratePath = arguments.migratePath, sqlPath = arguments.sqlPath); + return $executeAction(migrator = local.migrator, action = arguments.action); } finally { - // Restore original datasource - application[local.appKey].dataSourceName = local.originalDS; + application[local.appKey].dataSourceName = local.originalDataSourceName; } } + } + + /** + * Creates a `wheels.Migrator` instance configured for the given paths. + */ + public any function $newMigrator(required string migratePath, required string sqlPath) { + return CreateObject("component", "wheels.Migrator").init( + migratePath = arguments.migratePath, + sqlPath = arguments.sqlPath + ); + } - return local.migrator; + /** + * Executes one migration action on a migrator instance. Mirrors the + * command handling in `vendor/wheels/public/views/cli.cfm`. + */ + public any function $executeAction(required any migrator, required string action) { + switch (arguments.action) { + case "latest": + return arguments.migrator.migrateToLatest(); + case "up": + // Walk the migration list (sorted ascending by version) and + // migrate to the first pending version after the current one. + local.currentVersion = arguments.migrator.getCurrentMigrationVersion(); + local.targetVersion = ""; + for (local.migration in arguments.migrator.getAvailableMigrations()) { + if (local.migration.status != "migrated" && local.migration.version > local.currentVersion) { + local.targetVersion = local.migration.version; + break; + } + } + if (Len(local.targetVersion)) { + return arguments.migrator.migrateTo(local.targetVersion); + } + return "No pending migrations. Database is at version #local.currentVersion#."; + case "down": + // Walk the list in reverse to find the migration immediately + // below the current version, then migrate down to it. + local.currentVersion = arguments.migrator.getCurrentMigrationVersion(); + if (local.currentVersion == "0") { + return "Database is at version 0; nothing to roll back."; + } + local.migrations = arguments.migrator.getAvailableMigrations(); + local.targetVersion = "0"; + for (local.i = ArrayLen(local.migrations); local.i >= 1; local.i--) { + if (local.migrations[local.i].version < local.currentVersion && local.migrations[local.i].status == "migrated") { + local.targetVersion = local.migrations[local.i].version; + break; + } + } + return arguments.migrator.migrateTo(local.targetVersion); + case "info": + return ArrayToList(arguments.migrator.$buildInfoOutput(), Chr(10)); + } + Throw( + type = "Wheels.TenantMigrator.InvalidAction", + message = "Invalid migration action `#arguments.action#`. Valid actions are `latest`, `up`, `down` and `info`." + ); } } diff --git a/vendor/wheels/tests/specs/migrator/TenantMigratorSpec.cfc b/vendor/wheels/tests/specs/migrator/TenantMigratorSpec.cfc new file mode 100644 index 000000000..349f0576c --- /dev/null +++ b/vendor/wheels/tests/specs/migrator/TenantMigratorSpec.cfc @@ -0,0 +1,187 @@ +component extends="wheels.WheelsTest" { + + include "helperFunctions.cfm"; + + function beforeAll() { + migration = CreateObject("component", "wheels.migrator.Migration").init(); + migrator = CreateObject("component", "wheels.Migrator").init( + migratePath = "/wheels/tests/_assets/migrator/migrations/", + sqlPath = "/wheels/tests/_assets/migrator/sql/" + ); + tenantMigrator = CreateObject("component", "wheels.migrator.TenantMigrator").init(); + fixtureMigratePath = "/wheels/tests/_assets/migrator/migrations/"; + fixtureSqlPath = "/wheels/tests/_assets/migrator/sql/"; + } + + function run() { + + var _isCockroachDB = CreateObject("component", "wheels.migrator.Migration").init().adapter.adapterName() == "CockroachDB"; + + describe("TenantMigrator migrateAll", () => { + + beforeEach(() => { + for (local.table in ["c_o_r_e_bunyips", "c_o_r_e_dropbears", "c_o_r_e_hoopsnakes"]) { + try { migration.dropTable(local.table); } catch (any e) {} + } + deleteMigratorVersions(2); + }); + + afterEach(() => { + for (local.table in ["c_o_r_e_bunyips", "c_o_r_e_dropbears", "c_o_r_e_hoopsnakes"]) { + try { migration.dropTable(local.table); } catch (any e) {} + } + deleteMigratorVersions(2); + // The suite shares a request scope across specs — never leak a + // tenant context set by one of the tests below. + if (StructKeyExists(request, "wheels")) { + StructDelete(request.wheels, "tenant"); + } + }); + + it("action=latest migrates the tenant datasource to the latest fixture version", () => { + if (_isCockroachDB) return; + var results = tenantMigrator.migrateAll( + action = "latest", + tenants = [{id = "t1", dataSource = application.wheels.dataSourceName}], + migratePath = fixtureMigratePath, + sqlPath = fixtureSqlPath + ); + expect(results.total).toBe(1); + expect(ArrayLen(results.failed)).toBe(0); + expect(ArrayLen(results.success)).toBe(1); + expect(migrator.getCurrentMigrationVersion()).toBe("003"); + }); + + it("action=up applies exactly one pending migration", () => { + if (_isCockroachDB) return; + var results = tenantMigrator.migrateAll( + action = "up", + tenants = [{id = "t1", dataSource = application.wheels.dataSourceName}], + migratePath = fixtureMigratePath, + sqlPath = fixtureSqlPath + ); + expect(ArrayLen(results.failed)).toBe(0); + expect(ArrayLen(results.success)).toBe(1); + expect(migrator.getCurrentMigrationVersion()).toBe("001"); + }); + + it("action=down rolls back one version", () => { + if (_isCockroachDB) return; + migrator.migrateTo("002"); + var results = tenantMigrator.migrateAll( + action = "down", + tenants = [{id = "t1", dataSource = application.wheels.dataSourceName}], + migratePath = fixtureMigratePath, + sqlPath = fixtureSqlPath + ); + expect(ArrayLen(results.failed)).toBe(0); + expect(ArrayLen(results.success)).toBe(1); + expect(migrator.getCurrentMigrationVersion()).toBe("001"); + }); + + it("action=info returns output without mutating the version", () => { + if (_isCockroachDB) return; + migrator.migrateTo("001"); + var results = tenantMigrator.migrateAll( + action = "info", + tenants = [{id = "t1", dataSource = application.wheels.dataSourceName}], + migratePath = fixtureMigratePath, + sqlPath = fixtureSqlPath + ); + expect(ArrayLen(results.failed)).toBe(0); + expect(ArrayLen(results.success)).toBe(1); + expect(results.success[1].output).toInclude("Current version:"); + expect(migrator.getCurrentMigrationVersion()).toBe("001"); + }); + + it("restores the application datasource and a pre-existing request tenant context", () => { + if (_isCockroachDB) return; + var originalDataSourceName = application.wheels.dataSourceName; + if (!StructKeyExists(request, "wheels")) { + request.wheels = {}; + } + request.wheels.tenant = {id = "preexisting", dataSource = originalDataSourceName, config = {}}; + var results = tenantMigrator.migrateAll( + action = "info", + tenants = [{id = "t1", dataSource = originalDataSourceName}], + migratePath = fixtureMigratePath, + sqlPath = fixtureSqlPath + ); + expect(ArrayLen(results.success)).toBe(1); + expect(application.wheels.dataSourceName).toBe(originalDataSourceName); + expect(StructKeyExists(request.wheels, "tenant")).toBeTrue(); + expect(request.wheels.tenant.id).toBe("preexisting"); + }); + + it("records the failure and continues when stopOnError=false", () => { + if (_isCockroachDB) return; + var results = tenantMigrator.migrateAll( + action = "info", + tenants = [ + {id = "bad", dataSource = "wheels_no_such_ds_xyz"}, + {id = "good", dataSource = application.wheels.dataSourceName} + ], + stopOnError = false, + migratePath = fixtureMigratePath, + sqlPath = fixtureSqlPath + ); + expect(results.total).toBe(2); + expect(ArrayLen(results.failed)).toBe(1); + expect(ArrayLen(results.success)).toBe(1); + expect(results.failed[1].tenant).toBe("bad"); + expect(results.success[1].tenant).toBe("good"); + }); + + it("stops after the first failure when stopOnError=true", () => { + if (_isCockroachDB) return; + var results = tenantMigrator.migrateAll( + action = "info", + tenants = [ + {id = "bad", dataSource = "wheels_no_such_ds_xyz"}, + {id = "good", dataSource = application.wheels.dataSourceName} + ], + stopOnError = true, + migratePath = fixtureMigratePath, + sqlPath = fixtureSqlPath + ); + expect(results.total).toBe(2); + expect(ArrayLen(results.failed)).toBe(1); + expect(ArrayLen(results.success)).toBe(0); + expect(results.failed[1].tenant).toBe("bad"); + }); + + it("throws Wheels.TenantMigrator.InvalidAction for an unknown action", () => { + expect(() => { + tenantMigrator.migrateAll( + action = "sideways", + tenants = [{id = "t1", dataSource = application.wheels.dataSourceName}], + migratePath = fixtureMigratePath, + sqlPath = fixtureSqlPath + ); + }).toThrow("Wheels.TenantMigrator.InvalidAction"); + }); + + it("resolves tenants from a tenantProvider closure", () => { + if (_isCockroachDB) return; + // Hoisted before the named-arg call (Adobe CF chokes on inline + // closures passed as named arguments). Reads the application + // scope directly rather than capturing an outer local var. + var provider = function() { + return [{id = "fromProvider", dataSource = application.wheels.dataSourceName}]; + }; + var results = tenantMigrator.migrateAll( + action = "info", + tenantProvider = provider, + migratePath = fixtureMigratePath, + sqlPath = fixtureSqlPath + ); + expect(results.total).toBe(1); + expect(ArrayLen(results.success)).toBe(1); + expect(results.success[1].tenant).toBe("fromProvider"); + }); + + }); + + } + +} From 53a7f3fc3e17322f67d70dfe16f374b3ecb3028a Mon Sep 17 00:00:00 2001 From: Peter Amiri Date: Tue, 9 Jun 2026 22:55:44 -0700 Subject: [PATCH 007/198] fix(model): fix >=/<= parsing and fail-open swallow in validation condition evaluator (#2905) Two compounding defects in the validation condition evaluator: 1. $normalizeConditionOperators ran ReplaceList left-to-right, so "<" rewrote before "<=" and ">" before ">=", mangling them into "lt=" / "gt=" which $resolveOperator rejects. Now replaces two-character operators first, pads with spaces (also fixing un-spaced inputs like "a>=b"), and collapses whitespace. 2. $splitConditionOnOperator used unanchored FindNoCase, splitting inside identifiers ("frequency" matched "eq", "adult" matched "lt"), silently mis-evaluating conditions. Now splits on the first whitespace-delimited operator token via a longest-first anchored regex, with LCase for the case-sensitive Adobe CF switch in $resolveOperator. 3. $evaluateCondition caught any evaluation error and returned false, silently skipping the validation (fail-open on the data-integrity boundary). Development/testing (showErrorInformation=true) now throws Wheels.InvalidValidationCondition; production keeps the skip but logs to wheels-errors. Known pre-existing limitation (unchanged): "<"/">" inside quoted operands are still normalized into lt/gt tokens; the old code did the same. Verified red->green on Lucee 7 + SQLite: the 6 new specs fail against the pre-fix code (5 failures + 1 error) and the full validationsSpec bundle passes 125/125 with the fix. Signed-off-by: Peter Amiri Co-authored-by: Claude Fable 5 --- vendor/wheels/model/validations.cfc | 41 ++++++++++---- .../tests/specs/model/validationsSpec.cfc | 56 +++++++++++++++++++ 2 files changed, 86 insertions(+), 11 deletions(-) diff --git a/vendor/wheels/model/validations.cfc b/vendor/wheels/model/validations.cfc index ddbfe4936..7a5a10da3 100644 --- a/vendor/wheels/model/validations.cfc +++ b/vendor/wheels/model/validations.cfc @@ -578,8 +578,20 @@ component { if (StructKeyExists(arguments, local.item) && Len(arguments[local.item])) { local.key = local.item & "Evaluated"; try { - local[local.key] = $evaluateConditionString(arguments[local.item]); + local[local.key] = $evaluateConditionString(arguments[local.item]); } catch (any e) { + if ($get("showErrorInformation")) { + Throw( + type = "Wheels.InvalidValidationCondition", + message = "The `#local.item#` expression `#arguments[local.item]#` could not be evaluated: #e.message#", + extendedInfo = "Supported forms: `this.property`, `this.method()`, bare `method()` (optionally negated with `!`), and binary comparisons using eq/neq/lt/lte/gt/gte or ==/!=//>=." + ); + } + cflog( + text = "Wheels: validation `#local.item#` expression `#arguments[local.item]#` could not be evaluated (#e.message#); validation skipped.", + type = "error", + file = "wheels-errors" + ); return false; } } @@ -838,23 +850,30 @@ component { * Normalizes symbolic comparison operators to their CFML string equivalents. */ public string function $normalizeConditionOperators(required string condition) { - local.rv = ReplaceList(arguments.condition, "==,!=,<,<=,>,>=", "eq,neq,lt,lte,gt,gte"); - return Replace(local.rv, " ", " ", "all"); + // Replace two-character operators first so the single-character "<" and ">" + // replacements cannot mangle "<=" and ">=" into "lt=" and "gt=". + local.rv = Replace(arguments.condition, "==", " eq ", "all"); + local.rv = Replace(local.rv, "!=", " neq ", "all"); + local.rv = Replace(local.rv, "<=", " lte ", "all"); + local.rv = Replace(local.rv, ">=", " gte ", "all"); + local.rv = Replace(local.rv, "<", " lt ", "all"); + local.rv = Replace(local.rv, ">", " gt ", "all"); + return Trim(REReplace(local.rv, "\s+", " ", "all")); } /** - * Splits a normalized condition on the last matching comparison operator. + * Splits a normalized condition on the first whitespace-delimited comparison operator. * Returns {expression} always, plus {operator, rightOperand} when an operator is found. */ public struct function $splitConditionOnOperator(required string condition) { local.rv = {expression: arguments.condition}; - for (local.op in ListToArray("eq,neq,lt,lte,gt,gte")) { - local.position = FindNoCase(local.op, arguments.condition); - if (local.position) { - local.rv.expression = Trim(Mid(arguments.condition, 1, local.position - 1)); - local.rv.operator = local.op; - local.rv.rightOperand = Trim(Mid(arguments.condition, local.position + Len(local.op), Len(arguments.condition))); - } + local.padded = " " & arguments.condition & " "; + local.match = REFindNoCase("\s(neq|lte|gte|eq|lt|gt)\s", local.padded, 1, true); + if (local.match.pos[1] > 0) { + local.rv.expression = Trim(Mid(local.padded, 1, local.match.pos[2] - 1)); + // LCase keeps the operator compatible with the case-sensitive switch in $resolveOperator on Adobe CF. + local.rv.operator = LCase(Mid(local.padded, local.match.pos[2], local.match.len[2])); + local.rv.rightOperand = Trim(Mid(local.padded, local.match.pos[2] + local.match.len[2], Len(local.padded))); } return local.rv; } diff --git a/vendor/wheels/tests/specs/model/validationsSpec.cfc b/vendor/wheels/tests/specs/model/validationsSpec.cfc index 416ecc293..db9961caf 100644 --- a/vendor/wheels/tests/specs/model/validationsSpec.cfc +++ b/vendor/wheels/tests/specs/model/validationsSpec.cfc @@ -226,6 +226,62 @@ component extends="wheels.WheelsTest" { user.validatesLengthOf(argumentCollection = args) assert_test(user, true) }) + + it("normalizes compound symbolic operators without mangling them", () => { + expect(user.$normalizeConditionOperators("a >= b")).toBe("a gte b") + expect(user.$normalizeConditionOperators("a <= b")).toBe("a lte b") + expect(user.$normalizeConditionOperators("a>=b")).toBe("a gte b") + }) + + it("evaluates symbolic comparison operators in condition strings", () => { + expect(user.$evaluateConditionString("5 >= 3")).toBeTrue() + expect(user.$evaluateConditionString("3 <= 5")).toBeTrue() + expect(user.$evaluateConditionString("3 >= 5")).toBeFalse() + expect(user.$evaluateConditionString("5 == 5")).toBeTrue() + expect(user.$evaluateConditionString("5 != 3")).toBeTrue() + }) + + it("does not split on operator names inside identifiers", () => { + user.frequency = "weekly" + expect(user.$evaluateConditionString("this.frequency eq 'weekly'")).toBeTrue() + user.adult = true + expect(user.$evaluateConditionString("this.adult")).toBeTrue() + }) + + it("if validation runs when condition property name contains an operator substring", () => { + user.frequency = "weekly" + args.condition = "this.frequency eq 'weekly'" + user.validatesLengthOf(argumentCollection = args) + assert_test(user, false) + }) + + it("if validation runs when condition uses a symbolic gte comparison", () => { + user.score = 20 + args.condition = "this.score >= 10" + user.validatesLengthOf(argumentCollection = args) + assert_test(user, false) + }) + + it("throws in development when a condition cannot be evaluated", () => { + args.condition = "noSuchMethod()" + user.validatesLengthOf(argumentCollection = args) + var callValid = () => { + user.valid() + } + expect(callValid).toThrow("Wheels.InvalidValidationCondition") + }) + + it("skips the validation without throwing in production when a condition cannot be evaluated", () => { + args.condition = "noSuchMethod()" + user.validatesLengthOf(argumentCollection = args) + var originalShowErrorInformation = application.wheels.showErrorInformation + try { + application.wheels.showErrorInformation = false + expect(user.valid()).toBeTrue() + } finally { + application.wheels.showErrorInformation = originalShowErrorInformation + } + }) }) describe("Tests default validations", () => { From a2c4a9fa699d981df9bb5c766b78a38769e7a44a Mon Sep 17 00:00:00 2001 From: Peter Amiri Date: Tue, 9 Jun 2026 22:55:50 -0700 Subject: [PATCH 008/198] fix(config): isolate ServiceProvider register/boot failures per package (#2912) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix(config): isolate ServiceProvider register/boot failures per package ServiceProvider register()/boot() ran with no per-package error isolation in PackageLoader.cfc — one throwing provider aborted the whole application boot, contradicting the per-package log-and-skip contract the loader already applies at manifest-parse and load time. PackageLoader.cfc: $invokeServiceProviderRegister/$invokeServiceProviderBoot now iterate a Duplicate() snapshot of variables.serviceProviders and wrap each provider in try/catch. A failure is logged to wheels.log, recorded in failedPackages with the standard {name, error, detail} shape, and rolled back via $rollbackPackage — which removes the key from serviceProviders so the boot phase skips a register-failed provider with no extra tracking state. Known limitations (documented in the docstrings): mixins/middleware already merged into the application scope by Global.cfc::$loadPackages are not unwound (the merge runs before the lifecycle invoke), and DI container registrations made by a boot-failing provider cannot be unwound (the Injector has no per-package tracking). Plugins.cfc (legacy, deprecated): same snapshot + per-plugin try/catch, log-and-skip only — a failing provider is dropped from $class.serviceProviders via a new private $dropServiceProvider helper (ArrayFind + ArrayDeleteAt, the proven $rollbackPackage pattern; the legacy system has no failedPackages registry to mirror). Behavior change: a throwing provider previously hard-failed boot with a visible error page; the app now boots with the package skipped, an error log line, and a getFailedPackages() entry — consistent with the documented load-phase contract. Tests: new vendor/wheels/tests/_assets/packages_sp/ fixtures (failregister, goodsp, failboot) + ServiceProviderIsolationSpec covering register-failure isolation, boot-skip after register failure, and boot-failure isolation; new plugins/serviceproviderfailing fixture + pluginsModernSpec mirror case. Pre-fix all four cases error because the fixture exception propagates straight out of the unguarded loops. Verified on Lucee 7 + SQLite: ServiceProviderIsolationSpec 3/3, pluginsModernSpec 32/32, full packages directory 122/122. Follow-up: the stale 'Also triggers instantiation of lazy ServiceProvider packages' docstring claim is intentionally left for the DI9 review finding (lazy-provider lifecycle). Co-Authored-By: Claude Fable 5 Signed-off-by: Peter Amiri * fix(config): re-sync app-scope failedPackages after ServiceProvider lifecycle Review follow-up: application[appKey].failedPackages is assigned from getFailedPackages() before the ServiceProvider register/boot invoke in Global.cfc::$loadPackages. Adobe CF 2018-2025 copy arrays by value on assignment (only Lucee/BoxLang share the reference), so lifecycle-phase failure records appended by the new per-provider catch blocks never reached the application-scope copy on Adobe — and that copy is what the debug surfaces read (events/onrequestend/debug.cfm, packagelist.cfm), turning a throwing provider into a silent skip with only a wheels.log line on half the supported engines. Re-read getFailedPackages() into the application scope immediately after $invokeServiceProviderBoot: harmless on Lucee/BoxLang (re-assigns the same reference), required on Adobe (fresh copy including lifecycle entries). Also move the aggregate failed-package WARN summary below the lifecycle invoke so register()/boot() failures appear in the same high-visibility wheels.log / wheels-errors.log breadcrumb as load-phase failures (previously it ran pre-invoke, so lifecycle failures were missing from it on every engine). The summary block is unchanged apart from a comment noting the new placement. Verified on Lucee 7 + SQLite (worktree docker recipe): ServiceProviderIsolationSpec 3/3 pass, app boot through the edited $loadPackages path clean. Adobe behavior is by-inspection (array copy-by-value semantics) — exactly the divergence the per-PR compat-matrix cannot assert without an application-scope spec, which would require re-running $loadPackages against the live test app. Co-Authored-By: Claude Fable 5 Signed-off-by: Peter Amiri --------- Signed-off-by: Peter Amiri Co-authored-by: Claude Fable 5 --- vendor/wheels/Global.cfc | 79 +++++++------ vendor/wheels/PackageLoader.cfc | 58 +++++++++- vendor/wheels/Plugins.cfc | 55 ++++++++- .../_assets/packages_sp/failboot/Failboot.cfc | 23 ++++ .../_assets/packages_sp/failboot/package.json | 8 ++ .../packages_sp/failregister/Failregister.cfc | 23 ++++ .../packages_sp/failregister/package.json | 8 ++ .../_assets/packages_sp/goodsp/Goodsp.cfc | 25 ++++ .../_assets/packages_sp/goodsp/package.json | 8 ++ .../FailingProvider/FailingProvider.cfc | 23 ++++ .../WorkingProvider/WorkingProvider.cfc | 23 ++++ .../packages/ServiceProviderIsolationSpec.cfc | 107 ++++++++++++++++++ .../wheels/tests/specs/pluginsModernSpec.cfc | 39 +++++++ 13 files changed, 436 insertions(+), 43 deletions(-) create mode 100644 vendor/wheels/tests/_assets/packages_sp/failboot/Failboot.cfc create mode 100644 vendor/wheels/tests/_assets/packages_sp/failboot/package.json create mode 100644 vendor/wheels/tests/_assets/packages_sp/failregister/Failregister.cfc create mode 100644 vendor/wheels/tests/_assets/packages_sp/failregister/package.json create mode 100644 vendor/wheels/tests/_assets/packages_sp/goodsp/Goodsp.cfc create mode 100644 vendor/wheels/tests/_assets/packages_sp/goodsp/package.json create mode 100644 vendor/wheels/tests/_assets/plugins/serviceproviderfailing/FailingProvider/FailingProvider.cfc create mode 100644 vendor/wheels/tests/_assets/plugins/serviceproviderfailing/WorkingProvider/WorkingProvider.cfc create mode 100644 vendor/wheels/tests/specs/packages/ServiceProviderIsolationSpec.cfc diff --git a/vendor/wheels/Global.cfc b/vendor/wheels/Global.cfc index 98fbafd5b..d417b24b7 100644 --- a/vendor/wheels/Global.cfc +++ b/vendor/wheels/Global.cfc @@ -3120,41 +3120,6 @@ return local.$wheels; application[local.appKey].packageMeta = application[local.appKey].PackageLoaderObj.getPackageMeta(); application[local.appKey].failedPackages = application[local.appKey].PackageLoaderObj.getFailedPackages(); - // Surface an aggregate summary when any packages failed to load. Without - // this, PackageLoader records each failure in variables.failedPackages and - // emits per-package WriteLog calls — but a developer who hits a downstream - // "No matching function [BASECOATINCLUDES]" error has no obvious place to - // look. Logging a single high-visibility WARN to wheels.log + a stronger - // one to wheels-errors.log gives a clear breadcrumb back to the root cause. - if (ArrayLen(application[local.appKey].failedPackages)) { - local.failNames = ""; - local.failDetail = ""; - for (local.fp in application[local.appKey].failedPackages) { - local.failNames = ListAppend(local.failNames, local.fp.name); - local.failDetail &= " - " & local.fp.name & ": " & local.fp.error & Chr(10); - } - try { - writeLog( - file = "wheels", - type = "warning", - text = "Wheels: " & ArrayLen(application[local.appKey].failedPackages) - & " package(s) failed to load: " & local.failNames - & ". Helpers / services these packages provide will be unavailable —" - & " calling code typically surfaces this as 'No matching function [...]" - & "' or 'No service registered with the name [...]'." - & " Per-package detail in wheels-errors.log." - ); - writeLog( - file = "wheels-errors", - type = "error", - text = "Wheels: " & ArrayLen(application[local.appKey].failedPackages) - & " package(s) failed to load:" & Chr(10) & local.failDetail - ); - } catch (any e) { - // Logging is best-effort during application start. - } - } - // Ensure mixinCollisions exists (unset when no plugins loaded before packages) if (!StructKeyExists(application[local.appKey], "mixinCollisions")) { application[local.appKey].mixinCollisions = []; @@ -3220,6 +3185,50 @@ return local.$wheels; if (IsDefined("application.wheelsdi") && ArrayLen(application[local.appKey].PackageLoaderObj.getServiceProviders())) { application[local.appKey].PackageLoaderObj.$invokeServiceProviderRegister(application.wheelsdi); application[local.appKey].PackageLoaderObj.$invokeServiceProviderBoot(application[local.appKey]); + // Re-sync the application-scope copy so register()/boot() failure + // records are visible there too. Adobe CF copies arrays by value on + // assignment, so the copy taken above (pre-invoke) never receives + // lifecycle-phase entries on those engines — only Lucee/BoxLang share + // the reference. Re-assigning is harmless on Lucee/BoxLang (same + // reference) and required on Adobe (fresh copy including new entries). + application[local.appKey].failedPackages = application[local.appKey].PackageLoaderObj.getFailedPackages(); + } + + // Surface an aggregate summary when any packages failed to load. Without + // this, PackageLoader records each failure in variables.failedPackages and + // emits per-package WriteLog calls — but a developer who hits a downstream + // "No matching function [BASECOATINCLUDES]" error has no obvious place to + // look. Logging a single high-visibility WARN to wheels.log + a stronger + // one to wheels-errors.log gives a clear breadcrumb back to the root cause. + // Runs after the ServiceProvider lifecycle invoke so register()/boot() + // failures appear in the same summary as load-phase failures. + if (ArrayLen(application[local.appKey].failedPackages)) { + local.failNames = ""; + local.failDetail = ""; + for (local.fp in application[local.appKey].failedPackages) { + local.failNames = ListAppend(local.failNames, local.fp.name); + local.failDetail &= " - " & local.fp.name & ": " & local.fp.error & Chr(10); + } + try { + writeLog( + file = "wheels", + type = "warning", + text = "Wheels: " & ArrayLen(application[local.appKey].failedPackages) + & " package(s) failed to load: " & local.failNames + & ". Helpers / services these packages provide will be unavailable —" + & " calling code typically surfaces this as 'No matching function [...]" + & "' or 'No service registered with the name [...]'." + & " Per-package detail in wheels-errors.log." + ); + writeLog( + file = "wheels-errors", + type = "error", + text = "Wheels: " & ArrayLen(application[local.appKey].failedPackages) + & " package(s) failed to load:" & Chr(10) & local.failDetail + ); + } catch (any e) { + // Logging is best-effort during application start. + } } } diff --git a/vendor/wheels/PackageLoader.cfc b/vendor/wheels/PackageLoader.cfc index 7b393b557..372e58fce 100644 --- a/vendor/wheels/PackageLoader.cfc +++ b/vendor/wheels/PackageLoader.cfc @@ -851,19 +851,69 @@ component output="false" { /** * Invokes register(container) on all packages that implement ServiceProviderInterface. * Also triggers instantiation of lazy ServiceProvider packages. + * + * Each provider is invoked with the same per-package error isolation the + * loader applies everywhere else: a throwing register() is logged, recorded + * in failedPackages, and rolled back via $rollbackPackage — which also + * removes the key from variables.serviceProviders so the boot phase skips + * it — and the remaining providers still run. Mixins/middleware this + * package contributed are unwound from the loader registries by the + * rollback, but copies already merged into the application scope by + * Global.cfc::$loadPackages are intentionally NOT unwound here: that merge + * happens before this lifecycle invoke. */ public void function $invokeServiceProviderRegister(required any container) { - for (local.pkgKey in variables.serviceProviders) { - variables.packages[local.pkgKey].register(arguments.container); + // Iterate a snapshot: $rollbackPackage deletes from + // variables.serviceProviders, and mutating the array mid-iteration + // would skip the provider after a failing one. + local.providerKeys = Duplicate(variables.serviceProviders); + for (local.pkgKey in local.providerKeys) { + try { + variables.packages[local.pkgKey].register(arguments.container); + } catch (any e) { + WriteLog( + text = "[Wheels] Package '#local.pkgKey#' ServiceProvider register() failed: #e.message#", + type = "error", + file = "wheels" + ); + ArrayAppend(variables.failedPackages, { + name = local.pkgKey, + error = "ServiceProvider register() failed: " & e.message, + detail = StructKeyExists(e, "detail") ? e.detail : "" + }); + $rollbackPackage(local.pkgKey); + } } } /** * Invokes boot(app) on all packages that implement ServiceProviderInterface. + * + * Same per-provider isolation as $invokeServiceProviderRegister: a throwing + * boot() is logged, recorded in failedPackages, and rolled back so the + * remaining providers still boot. Services the failing provider already + * registered in the DI container during register() cannot be unwound — the + * Injector has no per-package tracking. */ public void function $invokeServiceProviderBoot(required struct app) { - for (local.pkgKey in variables.serviceProviders) { - variables.packages[local.pkgKey].boot(arguments.app); + // Iterate a snapshot: $rollbackPackage deletes from variables.serviceProviders. + local.providerKeys = Duplicate(variables.serviceProviders); + for (local.pkgKey in local.providerKeys) { + try { + variables.packages[local.pkgKey].boot(arguments.app); + } catch (any e) { + WriteLog( + text = "[Wheels] Package '#local.pkgKey#' ServiceProvider boot() failed: #e.message#", + type = "error", + file = "wheels" + ); + ArrayAppend(variables.failedPackages, { + name = local.pkgKey, + error = "ServiceProvider boot() failed: " & e.message, + detail = StructKeyExists(e, "detail") ? e.detail : "" + }); + $rollbackPackage(local.pkgKey); + } } } diff --git a/vendor/wheels/Plugins.cfc b/vendor/wheels/Plugins.cfc index 2d7b66277..a01d5405e 100644 --- a/vendor/wheels/Plugins.cfc +++ b/vendor/wheels/Plugins.cfc @@ -510,11 +510,28 @@ component output="false" extends="wheels.Global"{ * Invokes register(container) on all plugins that implement ServiceProviderInterface. * Called after all plugins are loaded, passing the DI Injector so plugins can register services. * + * A throwing register() is logged and the plugin is dropped from the + * ServiceProvider registry (so the boot phase skips it too) — the + * remaining providers still run instead of the whole boot aborting. + * * @container The Wheels DI container (Injector instance) */ public void function $invokeServiceProviderRegister(required any container) { - for (local.pluginKey in variables.$class.serviceProviders) { - variables.$class.plugins[local.pluginKey].register(arguments.container); + // Iterate a snapshot: a failing provider is removed from + // variables.$class.serviceProviders below, and mutating the array + // mid-iteration would skip the provider after a failing one. + local.providerKeys = Duplicate(variables.$class.serviceProviders); + for (local.pluginKey in local.providerKeys) { + try { + variables.$class.plugins[local.pluginKey].register(arguments.container); + } catch (any e) { + WriteLog( + text = "[Wheels] Plugin '#local.pluginKey#' ServiceProvider register() failed: #e.message#", + type = "error", + file = "wheels" + ); + $dropServiceProvider(local.pluginKey); + } } } @@ -523,11 +540,41 @@ component output="false" extends="wheels.Global"{ * Called after ALL register() methods have completed and user services.cfm has been loaded, * so plugins can safely resolve services from the container. * + * Same per-plugin isolation as $invokeServiceProviderRegister: a throwing + * boot() is logged and the plugin is dropped from the registry while the + * remaining providers still boot. + * * @app The Wheels application configuration struct (application.wheels or application.$wheels during init) */ public void function $invokeServiceProviderBoot(required struct app) { - for (local.pluginKey in variables.$class.serviceProviders) { - variables.$class.plugins[local.pluginKey].boot(arguments.app); + // Iterate a snapshot: a failing provider is removed mid-loop below. + local.providerKeys = Duplicate(variables.$class.serviceProviders); + for (local.pluginKey in local.providerKeys) { + try { + variables.$class.plugins[local.pluginKey].boot(arguments.app); + } catch (any e) { + WriteLog( + text = "[Wheels] Plugin '#local.pluginKey#' ServiceProvider boot() failed: #e.message#", + type = "error", + file = "wheels" + ); + $dropServiceProvider(local.pluginKey); + } + } + } + + /** + * Removes a plugin key from the ServiceProvider registry. Called when a + * provider's register()/boot() throws so the remaining lifecycle phases + * skip it. Log-and-skip only: the legacy plugin system has no + * failedPackages registry or rollback machinery to mirror. + * + * @pluginKey The plugin folder key as stored in the registry + */ + private void function $dropServiceProvider(required string pluginKey) { + local.idx = ArrayFind(variables.$class.serviceProviders, arguments.pluginKey); + if (local.idx > 0) { + ArrayDeleteAt(variables.$class.serviceProviders, local.idx); } } diff --git a/vendor/wheels/tests/_assets/packages_sp/failboot/Failboot.cfc b/vendor/wheels/tests/_assets/packages_sp/failboot/Failboot.cfc new file mode 100644 index 000000000..3cefdf0e0 --- /dev/null +++ b/vendor/wheels/tests/_assets/packages_sp/failboot/Failboot.cfc @@ -0,0 +1,23 @@ +/** + * Test fixture: ServiceProvider package whose register() succeeds but boot() + * always throws. Used by ServiceProviderIsolationSpec to prove a boot-phase + * failure is logged, recorded in failedPackages, and skipped without aborting + * the boot of sibling providers. + */ +component implements="wheels.ServiceProviderInterface" { + + public any function init() { + this.version = "1.0.0"; + this.registerCalled = false; + return this; + } + + public void function register(required any container) { + this.registerCalled = true; + } + + public void function boot(required struct app) { + Throw(type = "Tests.SPBootBoom", message = "boot() failure fixture"); + } + +} diff --git a/vendor/wheels/tests/_assets/packages_sp/failboot/package.json b/vendor/wheels/tests/_assets/packages_sp/failboot/package.json new file mode 100644 index 000000000..e53f4af25 --- /dev/null +++ b/vendor/wheels/tests/_assets/packages_sp/failboot/package.json @@ -0,0 +1,8 @@ +{ + "name": "wheels-failboot", + "version": "1.0.0", + "description": "Test fixture: ServiceProvider whose boot() throws — exercises per-provider isolation in the boot phase.", + "provides": { + "mixins": "none" + } +} diff --git a/vendor/wheels/tests/_assets/packages_sp/failregister/Failregister.cfc b/vendor/wheels/tests/_assets/packages_sp/failregister/Failregister.cfc new file mode 100644 index 000000000..9a7adc1b5 --- /dev/null +++ b/vendor/wheels/tests/_assets/packages_sp/failregister/Failregister.cfc @@ -0,0 +1,23 @@ +/** + * Test fixture: ServiceProvider package whose register() always throws. + * Used by ServiceProviderIsolationSpec to prove a broken provider is logged, + * recorded in failedPackages, and skipped — without aborting the lifecycle + * for sibling providers. boot() sets a request flag so specs can assert the + * boot phase never reaches a provider whose register() failed. + */ +component implements="wheels.ServiceProviderInterface" { + + public any function init() { + this.version = "1.0.0"; + return this; + } + + public void function register(required any container) { + Throw(type = "Tests.SPRegisterBoom", message = "register() failure fixture"); + } + + public void function boot(required struct app) { + request.$spFailregisterBootCalled = true; + } + +} diff --git a/vendor/wheels/tests/_assets/packages_sp/failregister/package.json b/vendor/wheels/tests/_assets/packages_sp/failregister/package.json new file mode 100644 index 000000000..732ef0f34 --- /dev/null +++ b/vendor/wheels/tests/_assets/packages_sp/failregister/package.json @@ -0,0 +1,8 @@ +{ + "name": "wheels-failregister", + "version": "1.0.0", + "description": "Test fixture: ServiceProvider whose register() throws — exercises per-provider isolation.", + "provides": { + "mixins": "none" + } +} diff --git a/vendor/wheels/tests/_assets/packages_sp/goodsp/Goodsp.cfc b/vendor/wheels/tests/_assets/packages_sp/goodsp/Goodsp.cfc new file mode 100644 index 000000000..b00da4b62 --- /dev/null +++ b/vendor/wheels/tests/_assets/packages_sp/goodsp/Goodsp.cfc @@ -0,0 +1,25 @@ +/** + * Test fixture: healthy ServiceProvider package. Records register()/boot() + * invocations so ServiceProviderIsolationSpec can assert the lifecycle still + * reaches it when a sibling provider throws. + */ +component implements="wheels.ServiceProviderInterface" { + + public any function init() { + this.version = "1.0.0"; + this.registerCalled = false; + this.bootCalled = false; + this.containerReceived = JavaCast("null", ""); + return this; + } + + public void function register(required any container) { + this.registerCalled = true; + this.containerReceived = arguments.container; + } + + public void function boot(required struct app) { + this.bootCalled = true; + } + +} diff --git a/vendor/wheels/tests/_assets/packages_sp/goodsp/package.json b/vendor/wheels/tests/_assets/packages_sp/goodsp/package.json new file mode 100644 index 000000000..2d030623c --- /dev/null +++ b/vendor/wheels/tests/_assets/packages_sp/goodsp/package.json @@ -0,0 +1,8 @@ +{ + "name": "wheels-goodsp", + "version": "1.0.0", + "description": "Test fixture: healthy ServiceProvider — proves a broken sibling provider didn't abort the lifecycle.", + "provides": { + "mixins": "none" + } +} diff --git a/vendor/wheels/tests/_assets/plugins/serviceproviderfailing/FailingProvider/FailingProvider.cfc b/vendor/wheels/tests/_assets/plugins/serviceproviderfailing/FailingProvider/FailingProvider.cfc new file mode 100644 index 000000000..86c79b6c9 --- /dev/null +++ b/vendor/wheels/tests/_assets/plugins/serviceproviderfailing/FailingProvider/FailingProvider.cfc @@ -0,0 +1,23 @@ +/** + * Test fixture: legacy plugin implementing ServiceProviderInterface whose + * register() always throws. Used by pluginsModernSpec to prove a broken + * provider is logged and skipped without aborting the lifecycle for sibling + * providers. boot() sets a request flag so specs can assert the boot phase + * never reaches a plugin whose register() failed. + */ +component implements="wheels.ServiceProviderInterface" { + + function init() { + this.version = "3.0"; + return this; + } + + public void function register(required any container) { + Throw(type = "Tests.PluginSPRegisterBoom", message = "plugin register() failure fixture"); + } + + public void function boot(required struct app) { + request.$spPluginFailingBootCalled = true; + } + +} diff --git a/vendor/wheels/tests/_assets/plugins/serviceproviderfailing/WorkingProvider/WorkingProvider.cfc b/vendor/wheels/tests/_assets/plugins/serviceproviderfailing/WorkingProvider/WorkingProvider.cfc new file mode 100644 index 000000000..46c68e616 --- /dev/null +++ b/vendor/wheels/tests/_assets/plugins/serviceproviderfailing/WorkingProvider/WorkingProvider.cfc @@ -0,0 +1,23 @@ +/** + * Test fixture: healthy legacy plugin implementing ServiceProviderInterface. + * Sorted plugin order loads FailingProvider first, so this plugin proves the + * lifecycle continues past a throwing sibling provider. + */ +component implements="wheels.ServiceProviderInterface" { + + function init() { + this.version = "3.0"; + this.registerCalled = false; + this.bootCalled = false; + return this; + } + + public void function register(required any container) { + this.registerCalled = true; + } + + public void function boot(required struct app) { + this.bootCalled = true; + } + +} diff --git a/vendor/wheels/tests/specs/packages/ServiceProviderIsolationSpec.cfc b/vendor/wheels/tests/specs/packages/ServiceProviderIsolationSpec.cfc new file mode 100644 index 000000000..bff6a674b --- /dev/null +++ b/vendor/wheels/tests/specs/packages/ServiceProviderIsolationSpec.cfc @@ -0,0 +1,107 @@ +component extends="wheels.WheelsTest" { + + function run() { + + describe("ServiceProvider lifecycle isolation", () => { + + beforeEach(() => { + spFixturesPath = ExpandPath("/wheels/tests/_assets/packages_sp"); + spPrefix = "wheels.tests._assets.packages_sp"; + }); + + it("isolates a register() failure and continues with remaining providers", () => { + var loader = new wheels.PackageLoader( + vendorPath = spFixturesPath, + componentPrefix = spPrefix + ); + var fakeContainer = CreateObject( + "component", + "wheels.tests._assets.plugins.serviceprovider.FakeContainer" + ).init(); + + // Must complete without throwing even though failregister's register() throws. + loader.$invokeServiceProviderRegister(fakeContainer); + + // The healthy sibling provider still registered. + var pkgs = loader.getPackages(); + expect(pkgs).toHaveKey("goodsp"); + expect(pkgs.goodsp.registerCalled).toBeTrue(); + expect(pkgs.goodsp.containerReceived).toBe(fakeContainer); + + // The failure is recorded with the standard {name, error, detail} shape. + var failed = loader.getFailedPackages(); + var foundFailure = false; + for (var f in failed) { + if (f.name == "failregister") { + foundFailure = true; + expect(f.error).toInclude("register()"); + expect(f).toHaveKey("detail"); + } + } + expect(foundFailure).toBeTrue(); + + // The failing provider is rolled back: dropped from both the + // service-provider registry and the loaded-packages map. + expect(ArrayFind(loader.getServiceProviders(), "failregister")).toBe(0); + expect(loader.getPackages()).notToHaveKey("failregister"); + }); + + it("skips boot() for a provider whose register() failed", () => { + StructDelete(request, "$spFailregisterBootCalled"); + var loader = new wheels.PackageLoader( + vendorPath = spFixturesPath, + componentPrefix = spPrefix + ); + var fakeContainer = CreateObject( + "component", + "wheels.tests._assets.plugins.serviceprovider.FakeContainer" + ).init(); + + loader.$invokeServiceProviderRegister(fakeContainer); + loader.$invokeServiceProviderBoot({}); + + // failregister was rolled back at register time, so its boot() never ran. + expect(StructKeyExists(request, "$spFailregisterBootCalled")).toBeFalse(); + // The healthy provider still booted. + expect(loader.getPackages().goodsp.bootCalled).toBeTrue(); + }); + + it("isolates a boot() failure and continues with remaining providers", () => { + var loader = new wheels.PackageLoader( + vendorPath = spFixturesPath, + componentPrefix = spPrefix + ); + var fakeContainer = CreateObject( + "component", + "wheels.tests._assets.plugins.serviceprovider.FakeContainer" + ).init(); + + loader.$invokeServiceProviderRegister(fakeContainer); + + // Must complete without throwing even though failboot's boot() throws. + loader.$invokeServiceProviderBoot({}); + + var failed = loader.getFailedPackages(); + var foundFailure = false; + for (var f in failed) { + if (f.name == "failboot") { + foundFailure = true; + expect(f.error).toInclude("boot()"); + expect(f).toHaveKey("detail"); + } + } + expect(foundFailure).toBeTrue(); + + // The healthy provider still booted (presence asserted, not order — + // ModuleGraph order for independent packages is not contractual). + expect(loader.getPackages().goodsp.bootCalled).toBeTrue(); + // The boot-failing provider is rolled back from the registries. + expect(ArrayFind(loader.getServiceProviders(), "failboot")).toBe(0); + expect(loader.getPackages()).notToHaveKey("failboot"); + }); + + }); + + } + +} diff --git a/vendor/wheels/tests/specs/pluginsModernSpec.cfc b/vendor/wheels/tests/specs/pluginsModernSpec.cfc index b5083c80c..3b45d7b7d 100644 --- a/vendor/wheels/tests/specs/pluginsModernSpec.cfc +++ b/vendor/wheels/tests/specs/pluginsModernSpec.cfc @@ -419,6 +419,45 @@ component extends="wheels.WheelsTest" { application.wheels.pluginComponentPath = originalPluginComponentPath }) + + it("isolates a register() failure so remaining providers still register and boot", function() { + originalPluginComponentPath = application.wheels.pluginComponentPath + StructDelete(request, "$spPluginFailingBootCalled") + + var config = { + path = "wheels", + fileName = "Plugins", + method = "$init", + pluginPath = "/wheels/tests/_assets/plugins/serviceproviderfailing", + deletePluginDirectories = false, + overwritePlugins = false, + loadIncompatiblePlugins = true + } + application.wheels.pluginComponentPath = "/wheels/tests/_assets/plugins/serviceproviderfailing" + + PluginObj = $pluginObj(config) + var fakeContainer = CreateObject("component", + "wheels.tests._assets.plugins.serviceprovider.FakeContainer").init() + + // Must complete without throwing even though FailingProvider's + // register() throws (sorted order loads FailingProvider first). + PluginObj.$invokeServiceProviderRegister(fakeContainer) + + // The healthy provider after the failing one still registered. + var plugin = PluginObj.getPlugins().WorkingProvider + expect(plugin.registerCalled).toBeTrue() + + // The failing provider is dropped from the registry so boot() skips it. + expect(ArrayFind(PluginObj.getServiceProviders(), "FailingProvider")).toBe(0) + expect(ArrayFind(PluginObj.getServiceProviders(), "WorkingProvider")).toBeGT(0) + + PluginObj.$invokeServiceProviderBoot({environment = "testing"}) + + expect(plugin.bootCalled).toBeTrue() + expect(StructKeyExists(request, "$spPluginFailingBootCalled")).toBeFalse() + + application.wheels.pluginComponentPath = originalPluginComponentPath + }) }) describe("Tests that plugin.json manifest parsing", function() { From a391bf414769f3268fd8e71207192ae06a48c231 Mon Sep 17 00:00:00 2001 From: Peter Amiri Date: Tue, 9 Jun 2026 22:56:34 -0700 Subject: [PATCH 009/198] fix(cli): exit non-zero when wheels validate finds errors (#2907) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix(cli): exit non-zero when wheels validate finds errors wheels validate printed its report and returned "" on every path, so the process exited 0 even when validation found errors and CI could not gate on it (framework review H5, same family as #2890 / CLI audit H6). - errors found: record the failure inside the try, throw Wheels.ValidationFailed after the report is flushed (runTests pattern, out of reach of the catch-all) - analyzer crash: the catch now prints then rethrows instead of swallowing, matching migrate() - no app/ directory: throw Wheels.InvalidArguments after the red hint, matching the other user-error paths - warnings-only stays exit 0: results.valid is true when no severity=="error" issues exist, so validate remains usable as a soft linter; output text and ordering are unchanged Adds ValidateCommandSpec covering all four paths. Verified locally on the Lucee 7 docker harness: 4/4 new specs pass, InfoCommandSpec's existing validate case stays green. Intentional behavior change: scripts that relied on exit 0 despite reported errors will now fail; the MCP wheels_validate tool surfaces a proper tool error instead of a silent empty result. Out of scope: U1 (wheels upgrade check exit code) and the runTests mid-run HTTP catch-swallow. Co-Authored-By: Claude Fable 5 Signed-off-by: Peter Amiri * fix(cli): address Reviewer A/B consensus findings (round 1) - Replace stale "Both commands always exit 0" claim in web/sites/guides/.../code-quality.mdx with accurate split: validate exits non-zero on errors, analyze always exits 0. - Condense the two multi-line comment blocks in Module.cfc::validate() (3-line and 5-line) to single-line per CLAUDE.md "one short line max" convention — invariants preserved, just shorter prose. - Condense the 11-line component docstring and 4-line $makeProject() docstring in ValidateCommandSpec.cfc to single-line comments for the same reason. All changes are pure comment/text edits; no runtime behaviour change. Signed-off-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com> * fix(cli): address Reviewer A consensus findings (round 2) - cli/lucli/tests/specs/commands/ValidateCommandSpec.cfc lines 7-8: condense 2-line comment block to single-line per CLAUDE.md ("Never write multi-paragraph docstrings or multi-line comment blocks — one short line max"). - cli/lucli/tests/specs/commands/ValidateCommandSpec.cfc lines 17-19: condense 3-line comment block to single-line, same rule. Comment-only changes; no runtime behaviour impact. Test bodies and the four-case coverage matrix are untouched. Signed-off-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com> --------- Signed-off-by: Peter Amiri Signed-off-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com> Co-authored-by: Claude Fable 5 Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com> --- cli/lucli/Module.cfc | 17 ++++- .../specs/commands/ValidateCommandSpec.cfc | 75 +++++++++++++++++++ .../wheels-commands/code-quality.mdx | 2 +- 3 files changed, 92 insertions(+), 2 deletions(-) create mode 100644 cli/lucli/tests/specs/commands/ValidateCommandSpec.cfc diff --git a/cli/lucli/Module.cfc b/cli/lucli/Module.cfc index c5131aa17..5d7021b7c 100644 --- a/cli/lucli/Module.cfc +++ b/cli/lucli/Module.cfc @@ -1728,12 +1728,16 @@ component extends="modules.BaseModule" { public string function validate() { if (!directoryExists(variables.projectRoot & "/app")) { out("No app/ directory found. Are you in a Wheels project?", "red"); - return ""; + // throw maps to non-zero exit; return "" would silently succeed. + throw(type = "Wheels.InvalidArguments", message = "No app/ directory found — run wheels validate from a Wheels project root."); } out("Validating...", "cyan"); out(""); + var validationFailed = false; + var issueCount = 0; + try { var analysis = getService("analysis"); var results = analysis.validate(); @@ -1749,8 +1753,19 @@ component extends="modules.BaseModule" { var severity = issue.severity == "error" ? "red" : "yellow"; out(" [#uCase(issue.severity)#] #fileName# — #issue.message#", severity); } + + // Capture before try ends; throwing inside would be swallowed by the catch. + validationFailed = !results.valid; + issueCount = results.totalIssues; } catch (any e) { out("Validation failed: #e.message#", "red"); + // rethrow maps to non-zero exit; an analyzer crash must not exit 0. + rethrow; + } + + // Throw after the full report flushes — errors exit non-zero, warnings stay green. + if (validationFailed) { + throw(type = "Wheels.ValidationFailed", message = "Validation found #issueCount# issue(s) — see the report above."); } return ""; diff --git a/cli/lucli/tests/specs/commands/ValidateCommandSpec.cfc b/cli/lucli/tests/specs/commands/ValidateCommandSpec.cfc new file mode 100644 index 000000000..c9b9bed0d --- /dev/null +++ b/cli/lucli/tests/specs/commands/ValidateCommandSpec.cfc @@ -0,0 +1,75 @@ +// Covers all four validate() exit paths; each case gets its own temp project. +component extends="wheels.wheelstest.system.BaseSpec" { + + function beforeAll() { + variables.roots = []; + + // Missing extends="Model" → Analysis.validateModel error → results.valid = false. + variables.errorRoot = $makeProject(); + fileWrite(variables.errorRoot & "/app/models/Bad.cfc", "component { function config() {} }"); + variables.errorMod = new cli.lucli.Module(cwd = variables.errorRoot); + + // Project with no offending files at all. + variables.cleanRoot = $makeProject(); + variables.cleanMod = new cli.lucli.Module(cwd = variables.cleanRoot); + + // Hash without cfparam → validateView warning; results.valid stays true. + variables.warningRoot = $makeProject(); + directoryCreate(variables.warningRoot & "/app/views/things", true, true); + fileWrite(variables.warningRoot & "/app/views/things/index.cfm", "

##foo##

"); + variables.warningMod = new cli.lucli.Module(cwd = variables.warningRoot); + + // Project root with no app/ directory — user-error path. + variables.noAppRoot = $makeProject(includeApp = false); + variables.noAppMod = new cli.lucli.Module(cwd = variables.noAppRoot); + } + + function afterAll() { + for (var root in variables.roots) { + if (len(root) > 10 && directoryExists(root)) { + directoryDelete(root, true); + } + } + } + + // vendor/wheels stub anchors resolveProjectRoot to the temp dir. + private string function $makeProject(boolean includeApp = true) { + var root = getTempDirectory() & "wheels-cli-validate-" & createUUID(); + directoryCreate(root & "/vendor/wheels", true, true); + if (arguments.includeApp) { + directoryCreate(root & "/app/models", true, true); + directoryCreate(root & "/app/controllers", true, true); + directoryCreate(root & "/app/views", true, true); + directoryCreate(root & "/config", true, true); + } + arrayAppend(variables.roots, root); + return root; + } + + function run() { + + describe("wheels validate exit codes", () => { + + it("throws Wheels.ValidationFailed when validation finds errors", () => { + expect(() => variables.errorMod.validate()).toThrow(type = "Wheels.ValidationFailed"); + }); + + it("returns normally on a clean project", () => { + variables.cleanMod.validate(); + expect(true).toBeTrue(); + }); + + it("stays green when only warnings exist", () => { + variables.warningMod.validate(); + expect(true).toBeTrue(); + }); + + it("throws Wheels.InvalidArguments when no app directory exists", () => { + expect(() => variables.noAppMod.validate()).toThrow(type = "Wheels.InvalidArguments"); + }); + + }); + + } + +} diff --git a/web/sites/guides/src/content/docs/v4-0-0/command-line-tools/wheels-commands/code-quality.mdx b/web/sites/guides/src/content/docs/v4-0-0/command-line-tools/wheels-commands/code-quality.mdx index e8b32179e..a87e5792c 100644 --- a/web/sites/guides/src/content/docs/v4-0-0/command-line-tools/wheels-commands/code-quality.mdx +++ b/web/sites/guides/src/content/docs/v4-0-0/command-line-tools/wheels-commands/code-quality.mdx @@ -140,7 +140,7 @@ wheels validate wheels analyze ``` -Run `validate` first and read its output for any ✗ errors or ⚠ warnings. Then run `analyze` for a broader look at health scores and anti-patterns. Both commands always exit 0 regardless of findings, so read each report before moving on — the results are in the output, not the exit code. +Run `validate` first and read its output for any ✗ errors or ⚠ warnings. Then run `analyze` for a broader look at health scores and anti-patterns. `wheels validate` exits non-zero when it finds error-severity issues, so you can gate CI on it. `wheels analyze` always exits 0 — its findings live in the output only. ### Scope the analysis From 6b5e1c22f207c05a1b8617014cb70ad434b97b62 Mon Sep 17 00:00:00 2001 From: Peter Amiri Date: Tue, 9 Jun 2026 23:01:30 -0700 Subject: [PATCH 010/198] fix(job): guard processQueue job claim with status=pending and affected-row check (#2899) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix(job): guard processQueue job claim with status=pending and affected-row check processQueue's $processJob marked a job as processing with an unguarded UPDATE (WHERE id = :id only), so two concurrent workers could both claim and execute the same job. Mirror JobWorker.cfc::$claimJob: add AND status = 'pending' to the claim UPDATE and check the affected-row count via the queryExecute result option on the same statement (a separate verification SELECT breaks on BoxLang + PostgreSQL when the pool hands out a different connection). A lost claim now returns {skipped = true} from $processJob, and processQueue counts it under a new additive 'skipped' key instead of recording a failure. attempts increments only on a successful claim, keeping increment-and-claim atomic. Spec: new "Job Claim Guard" describe in JobQueueSpec proves an already-processing row is not re-executed (status stays 'processing', attempts stays 0), plus a 'skipped' key assertion on the processQueue result shape. Verified red (22 pass / 2 fail pre-fix) then green (24 pass / 0 fail) on Lucee 7 + SQLite. Co-Authored-By: Claude Fable 5 Signed-off-by: Peter Amiri * fix(job): address Reviewer A/B consensus findings (round 1) - vendor/wheels/Job.cfc:238 — drop the redundant StructKeyExists guard on local.jobResult.skipped. $processJob initialises local.result = {success = false, skipped = false, error = ""} unconditionally and every return path returns that struct, so the key is always present. - vendor/wheels/tests/specs/jobs/JobQueueSpec.cfc — move the "Job Claim Guard" describe block's DELETE cleanup from inline at the end of the it block into afterEach (try/catch-wrapped, matching beforeEach), so a throw before the inline DELETE no longer leaks the seeded row. beforeEach still cleans up too (defense in depth). - CHANGELOG.md — add the [Unreleased] block (Keep a Changelog convention) with a ### Fixed entry for the processQueue claim guard. Last [Unreleased] was promoted to 4.0.3 in 08dd48004 on 2026-06-09, so this PR is the first change targeting the 4.0.4 snapshot. Signed-off-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com> --------- Signed-off-by: Peter Amiri Signed-off-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com> Co-authored-by: Claude Fable 5 Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com> --- CHANGELOG.md | 4 ++ vendor/wheels/Job.cfc | 27 +++++++-- .../wheels/tests/specs/jobs/JobQueueSpec.cfc | 59 +++++++++++++++++++ 3 files changed, 84 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a3ebab505..be1cc413b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,10 @@ All historical references to "CFWheels" in this changelog have been preserved fo ## [Unreleased] +### Fixed + +- `Job.processQueue()`'s private `$processJob` now guards the claim `UPDATE` with `AND status = 'pending'` and verifies the affected-row count via the `queryExecute` `result` option on the same statement, mirroring the matrix-proven `JobWorker.cfc::$claimJob` idiom (a separate verification `SELECT` breaks on BoxLang + PostgreSQL when the connection pool hands out a different connection that cannot see the uncommitted UPDATE). Pre-fix, two concurrent claimers — overlapping `processQueue()` callers, or `processQueue` racing the CLI worker — could both claim the same job and both run `perform()` (duplicate emails/charges, with `attempts` double-incremented). A lost claim now early-returns `{success = false, skipped = true}` before job instantiation, tenant-context setup, and `perform()`; `processQueue()` counts lost claims under a new additive `skipped` result key (#2899) + ### Security - `$isSafeRedirectUrl()` rejects backslash-containing URLs (`/\evil.com`, `\/evil.com`, `\\evil.com`) and schemeless-authority URLs (`https:/evil.com`, `javascript:alert(1)`) instead of returning them as safe. Browsers normalize backslashes to forward slashes and single-slash schemes to authority form, so any of those vectors smuggled past the previous check would navigate off-site after `redirectTo()`. Scheme detection now uses the RFC 3986 grammar (`ReFindNoCase("^[a-z][a-z0-9+.-]*:")`) and runs before the relative-URL fast path; backslashes are rejected up front, so the same-domain `ListFirst` no longer needs to treat `\` as a delimiter. Same-origin absolute URLs and genuine relative paths remain allowed (#2898) diff --git a/vendor/wheels/Job.cfc b/vendor/wheels/Job.cfc index 72ddedd3b..10bdcd5fe 100644 --- a/vendor/wheels/Job.cfc +++ b/vendor/wheels/Job.cfc @@ -209,7 +209,7 @@ component { * @limit Maximum number of jobs to process in this batch. */ public struct function processQueue(string queue = "", numeric limit = 10) { - local.result = {processed = 0, failed = 0, errors = []}; + local.result = {processed = 0, failed = 0, skipped = 0, errors = []}; local.params = { runAt = {value = $now(), cfsqltype = "cf_sql_timestamp"} }; @@ -235,6 +235,11 @@ component { for (local.row in local.jobs) { local.jobResult = $processJob(local.row); + if (local.jobResult.skipped) { + // Another worker claimed the job between our SELECT and the claim UPDATE + local.result.skipped++; + continue; + } if (local.jobResult.success) { local.result.processed++; } else { @@ -250,20 +255,30 @@ component { * Internal: Process a single job row. */ private struct function $processJob(required struct jobRow) { - local.result = {success = false, error = ""}; - - // Mark as processing + local.result = {success = false, skipped = false, error = ""}; + + // Mark as processing using optimistic locking: the status guard ensures only + // one concurrent worker can claim the job. Use the result option to get the + // affected-row count from the same connection that executed the UPDATE. A + // separate verification SELECT can fail on BoxLang + PostgreSQL when the + // connection pool hands out a different connection that cannot see the + // uncommitted UPDATE. try { queryExecute( "UPDATE wheels_jobs SET status = 'processing', attempts = attempts + 1, updatedAt = :updatedAt - WHERE id = :id", + WHERE id = :id AND status = 'pending'", { updatedAt = {value = $now(), cfsqltype = "cf_sql_timestamp"}, id = {value = arguments.jobRow.id, cfsqltype = "cf_sql_varchar"} }, - {datasource = variables.$datasource} + {datasource = variables.$datasource, result = "local.updateResult"} ); + if ((local.updateResult.recordCount ?: 0) == 0) { + // Another worker already claimed this job — skip without executing + local.result.skipped = true; + return local.result; + } } catch (any e) { local.result.error = "Failed to lock job #arguments.jobRow.id#: #e.message#"; return local.result; diff --git a/vendor/wheels/tests/specs/jobs/JobQueueSpec.cfc b/vendor/wheels/tests/specs/jobs/JobQueueSpec.cfc index 9080bce70..13168b509 100644 --- a/vendor/wheels/tests/specs/jobs/JobQueueSpec.cfc +++ b/vendor/wheels/tests/specs/jobs/JobQueueSpec.cfc @@ -147,6 +147,7 @@ component extends="wheels.WheelsTest" { expect(local.result).toBeStruct(); expect(local.result).toHaveKey("processed"); expect(local.result).toHaveKey("failed"); + expect(local.result).toHaveKey("skipped"); expect(local.result).toHaveKey("errors"); }); @@ -167,6 +168,64 @@ component extends="wheels.WheelsTest" { }); }); + describe("Job Claim Guard", function() { + + beforeEach(function() { + // Clean up any leftover test jobs from prior runs + try { queryExecute("DELETE FROM wheels_jobs WHERE queue = 'test_claim_guard'", {}, {datasource = application.wheels.dataSourceName}); } + catch (any e) { /* table may not exist */ } + }); + + afterEach(function() { + try { queryExecute("DELETE FROM wheels_jobs WHERE queue = 'test_claim_guard'", {}, {datasource = application.wheels.dataSourceName}); } + catch (any e) { /* table may not exist */ } + }); + + it("does not execute a job already claimed by another worker", function() { + // Enqueue using a concrete subclass so jobClass resolves correctly + local.testJob = new app.jobs.ProcessOrdersJob(); + local.enqueued = local.testJob.enqueue(data = {}, queue = "test_claim_guard"); + expect(local.enqueued).toHaveKey("persisted"); + expect(local.enqueued.persisted).toBeTrue(); + + // Simulate a concurrent worker having already claimed the job + queryExecute( + "UPDATE wheels_jobs SET status = 'processing' WHERE id = :id", + {id = {value = local.enqueued.id, cfsqltype = "cf_sql_varchar"}}, + {datasource = application.wheels.dataSourceName} + ); + + // Build the job row as processQueue's SELECT would have seen it pre-claim + local.jobRow = { + id = local.enqueued.id, + jobClass = "app.jobs.ProcessOrdersJob", + queue = "test_claim_guard", + data = "{}", + attempts = 0, + maxRetries = 3 + }; + + local.job = new wheels.Job(); + prepareMock(local.job); + makePublic(local.job, "$processJob"); + local.jobResult = local.job.$processJob(jobRow = local.jobRow); + + // The lost claim must be reported as skipped, not executed + expect(local.jobResult).toHaveKey("skipped"); + expect(local.jobResult.skipped).toBeTrue(); + expect(local.jobResult.success).toBeFalse(); + + // The already-claimed row must be untouched: still processing, attempts not incremented + local.row = queryExecute( + "SELECT status, attempts FROM wheels_jobs WHERE id = :id", + {id = {value = local.enqueued.id, cfsqltype = "cf_sql_varchar"}}, + {datasource = application.wheels.dataSourceName} + ); + expect(local.row.status).toBe("processing"); + expect(local.row.attempts).toBe(0); + }); + }); + describe("Job Data Serialization", function() { it("enqueue handles complex data structures", function() { From d030d5cc3108e6f5a01c518631f40efd32b1b58b Mon Sep 17 00:00:00 2001 From: Peter Amiri Date: Tue, 9 Jun 2026 23:05:58 -0700 Subject: [PATCH 011/198] fix(controller): make $acceptableFormats honor onlyProvides per-action restrictions (#2901) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix(controller): make $acceptableFormats honor onlyProvides per-action restrictions onlyProvides() stores per-action format restrictions in variables.$class.formats.actions (provides.cfc), but $acceptableFormats() read the top-level variables.$class.formats struct - whose only keys are default/actions/existingTemplates/nonExistingTemplates - so the lookup never matched and every onlyProvides() call was a silent no-op. The function also read arguments.action without declaring it. Fix the read path to check the .actions sub-struct and declare the action argument as optional (default empty) so bare calls stay safe. Both framework callers ($callAction, renderWith) already pass it named. Behavioral change by design: onlyProvides() restrictions are now enforced. renderWith() coerces non-acceptable formats to html, and the $callAction auto-render block skips view rendering for non-acceptable non-html formats - previously the restriction was ignored and the requested format rendered anyway. Adds read-path specs to providesSpec and a behavioral renderWith spec to renderingSpec; all red against the pre-fix code (verified locally: HTTP 417 pre-fix, 200 post-fix on Lucee 7 + SQLite). Addresses finding T6 (onlyprovides-noop) of the 2026-06-09 framework review. Co-Authored-By: Claude Fable 5 Signed-off-by: Peter Amiri * fix(controller): address Reviewer A/B consensus findings (round 1) - Add CHANGELOG.md [Unreleased] entry documenting that onlyProvides() per-action format restrictions now take effect (silent no-op since introduction). Both reviewers explicitly aligned on the requirement; Reviewer B noted A had misattributed the source (it lives in CONTRIBUTING.md and .github/pull_request_template.md, not CLAUDE.md), but the underlying need to add the entry is correct. - Add $callAction auto-render-path coverage in vendor/wheels/tests/specs/controller/renderingSpec.cfc — closes Reviewer A's gap on processing.cfc:165, the branch that becomes reachable now that $acceptableFormats reads .actions. The new spec proves that requesting xml against an action whose onlyProvides allows only json does NOT fall through to renderView (no ViewNotFound); response stays empty. Mirrors the read-path test cleanup pattern (try/finally around StructDelete on the cached application-scope class data). - Skipped (not in consensus): A's suggestion to also link a follow-up issue for the html-fallback deferred behavior. Treated as nice-to- have prose, not a required change; PR body owner can add when ready. Signed-off-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com> * fix(controller): address Reviewer A/B consensus findings (round 2) - vendor/wheels/tests/specs/controller/renderingSpec.cfc — initialize `captured = ""` before the try block in the "skips view rendering when onlyProvides excludes the requested non-html format" spec (lines 779-804). Reviewer A's nit on the round-1 commit: if `$callAction` were to throw unexpectedly, an undefined `captured` would surface as a misleading "undefined variable" error instead of the rethrown dispatch failure. Both reviewers aligned — one-liner, consistent with the suite's pre-assert setup pattern, expected-no-throw path unchanged. - CHANGELOG.md — shorten the [Unreleased] entry from ~114 words to ~60 words. Reviewer A flagged the verbose form as breaking the Keep a Changelog convention of a short user-facing sentence or two (the root-cause enumeration belongs in the PR description). Reviewer B agreed on the verbosity ask while correctly noting A overstated the word count (~264 claimed vs ~114 actual); the underlying concern and the suggested shorter form are unchanged. Now keeps the bug summary, the read-path correction, and the behavior-change callout. Controller specs verified on Lucee 7 / SQLite: 439 pass, 0 fail, 0 error, 1 skipped (pre-existing). renderingSpec bundle: 77/77. Signed-off-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com> * chore: defer changelog entry to campaign consolidation wheels-bot added an [Unreleased] entry on this branch; with a dozen parallel remediation PRs these entries all conflict at the same CHANGELOG location as siblings merge. The entry text is preserved off-branch and will land in one consolidated changelog PR at the end of the remediation campaign. Co-Authored-By: Claude Fable 5 Signed-off-by: Peter Amiri --------- Signed-off-by: Peter Amiri Signed-off-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com> Co-authored-by: Claude Fable 5 Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com> --- vendor/wheels/controller/rendering.cfc | 6 +-- .../tests/specs/controller/providesSpec.cfc | 25 ++++++++++- .../tests/specs/controller/renderingSpec.cfc | 43 +++++++++++++++++++ 3 files changed, 70 insertions(+), 4 deletions(-) diff --git a/vendor/wheels/controller/rendering.cfc b/vendor/wheels/controller/rendering.cfc index 6b8aedaa2..1bbde5f73 100644 --- a/vendor/wheels/controller/rendering.cfc +++ b/vendor/wheels/controller/rendering.cfc @@ -878,10 +878,10 @@ component { /** * Internal function. */ - public string function $acceptableFormats() { + public string function $acceptableFormats(string action = "") { local.rv = variables.$class.formats.default; - if (StructKeyExists(variables.$class.formats, arguments.action)) { - local.rv = variables.$class.formats[arguments.action]; + if (Len(arguments.action) && StructKeyExists(variables.$class.formats.actions, arguments.action)) { + local.rv = variables.$class.formats.actions[arguments.action]; } return local.rv; } diff --git a/vendor/wheels/tests/specs/controller/providesSpec.cfc b/vendor/wheels/tests/specs/controller/providesSpec.cfc index c49eb5ea0..892ad3382 100644 --- a/vendor/wheels/tests/specs/controller/providesSpec.cfc +++ b/vendor/wheels/tests/specs/controller/providesSpec.cfc @@ -125,7 +125,30 @@ component extends="wheels.WheelsTest" { _controller.onlyProvides(formats = "html") expect(_controller.$getControllerClassData().formats.actions.dummy).toBe(formats) - + + }) + + it("acceptable formats honors an onlyProvides restriction for the action", () => { + _controller.onlyProvides(formats = "json", action = "dummy") + result = _controller.$acceptableFormats(action = "dummy") + + // Clean up before asserting: controller class data is cached in the + // application scope and shared by reference across specs. + StructDelete(_controller.$getControllerClassData().formats.actions, "dummy") + + expect(result).toBe("json") + }) + + it("acceptable formats falls back to the controller default for unrestricted actions", () => { + _controller.onlyProvides(formats = "json", action = "dummy") + result = _controller.$acceptableFormats(action = "someOtherAction") + StructDelete(_controller.$getControllerClassData().formats.actions, "dummy") + + expect(result).toBe(_controller.$getControllerClassData().formats.default) + }) + + it("acceptable formats returns the default when no action is passed", () => { + expect(_controller.$acceptableFormats()).toBe(_controller.$getControllerClassData().formats.default) }) }) } diff --git a/vendor/wheels/tests/specs/controller/renderingSpec.cfc b/vendor/wheels/tests/specs/controller/renderingSpec.cfc index a2c741887..ce206c6a3 100644 --- a/vendor/wheels/tests/specs/controller/renderingSpec.cfc +++ b/vendor/wheels/tests/specs/controller/renderingSpec.cfc @@ -319,6 +319,22 @@ component extends="wheels.WheelsTest" { expect(data).toInclude("xml template content") }) + it("falls back to html when onlyProvides excludes the requested format", () => { + params.format = "xml" + _controller = application.wo.controller("test", params) + _controller.provides("xml") + _controller.onlyProvides(formats = "json", action = "test") + user = application.wo.model("user").findOne(where = "username = 'tonyp'") + data = _controller.renderWith(data = user, layout = false, returnAs = "string") + + // Clean up before asserting: controller class data is cached in the + // application scope and shared by reference across specs. + StructDelete(_controller.$getControllerClassData().formats.actions, "test") + + expect(data).notToInclude("xml template content") + expect(data).toInclude("view template content") + }) + it("renders current action as xml with template", () => { params.format = "xml" _controller = application.wo.controller("test", params) @@ -759,6 +775,33 @@ component extends="wheels.WheelsTest" { // renderWith was attempted. expect(_controller.$renderWithAttempted()).toBeTrue() }) + + it("skips view rendering when onlyProvides excludes the requested non-html format", () => { + // Closes the gap on processing.cfc:165 — the $callAction auto-render + // branch that becomes reachable now that $acceptableFormats reads + // the .actions sub-struct. Requesting xml against an action whose + // onlyProvides allows only json must NOT fall through to renderView + // (and therefore not throw ViewNotFound) — shouldRenderView is set + // to false and the response stays empty. + params = {controller = "dummy", action = "noViewAction", format = "xml"} + _controller = application.wo.controller("dummy", params) + _controller.noViewAction = function() { + // no-op action; exercises the auto-render path + } + _controller.onlyProvides(formats = "json", action = "noViewAction") + + captured = "" + try { + _controller.$callAction(action = "noViewAction") + captured = _controller.response() + } finally { + // Controller class data is cached in the application scope and + // shared by reference across specs — clean up either way. + StructDelete(_controller.$getControllerClassData().formats.actions, "noViewAction") + } + + expect(captured).toBe("") + }) }) } From fa7233a6da29ccc603970abac3a7a66cf088b434 Mon Sep 17 00:00:00 2001 From: Peter Amiri Date: Tue, 9 Jun 2026 23:07:30 -0700 Subject: [PATCH 012/198] fix(view): redact secret-shaped settings on the /wheels/info HTML page (#2909) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix(view): redact secret-shaped settings on the /wheels/info HTML page The HTML branch of /wheels/info rendered csrfCookieEncryptionSecretKey in plaintext via outputSetting() -> formatSettingOutput(get()), while the JSON branch already omitted it through a hardcoded key compare. The two branches could drift, and the HTML page leaked the live CSRF cookie encryption key. Introduce a single source of truth on wheels.Public (2026-06-09 framework review, finding T3): - $isProtectedSetting(settingName): true for secret-shaped names (secret|password|passphrase|privatekey|apikey|credential|token), with an explicit exemption for *allowCredentials — accessControlAllowCredentials is the boolean CORS flag mirroring Access-Control-Allow-Credentials, not a credential value. Without the exemption it would have been redacted in HTML and silently dropped from the JSON cors collection (the triage plan missed this match; JSON output stays byte-identical today). - $settingDisplayValue(settingName): returns [redacted] for protected names WITHOUT calling get(), so an unset key cannot throw; otherwise renders through formatSettingOutput(get()) as before. outputSetting() in public/helpers.cfm now renders rows through $settingDisplayValue(), covering every HTML settings table (environment, paths, components, csrf, cors, settings tabs). The JSON branch in views/info.cfm replaces the hardcoded csrfCookieEncryptionSecretKey compare with !$isProtectedSetting() and applies the same guard to all collection loops so future secret-shaped settings are omitted uniformly. Both methods are public with a $ prefix per the mixin invariant; the new functions live on Public.cfc (not helpers.cfm, which is double-included via $init() and _header.cfm and also pulled into non-Public test contexts). This change does not alter the production gating ($blockInProduction) — reachability is a separate review finding; it only changes what leaks when the page is reachable. Verified red->green on Lucee 7 + SQLite via the worktree docker recipe: pre-fix 0 pass / 2 fail / 7 error, post-fix 9 pass. Co-Authored-By: Claude Fable 5 Signed-off-by: Peter Amiri * fix(view): address Reviewer A/B consensus findings (round 1) - Flatten the JSON-branch CSRF loop in vendor/wheels/public/views/info.cfm to match the compound-condition form already used by the other five collection loops (paths, components, environment, cors, settings). Behavior-preserving — combines the nested isDefined() + !$isProtectedSetting() guards via && and consolidates the two-line comment. - Add a CHANGELOG.md [Unreleased] Security entry describing the csrfCookieEncryptionSecretKey HTML-page leak fix, the shared $isProtectedSetting() / $settingDisplayValue() predicate-and-helper pair on wheels.Public, and the accessControlAllowCredentials exemption. Two reviewer findings are intentionally deferred (both A and B explicitly framed them as follow-up scope): - Adding a bare `key$` suffix to the predicate regex to catch hypothetical future settings named encryptionKey / signingKey (A: "Worth a follow-up issue ... before new settings land that use that naming style"). No current setting in the six rendered arrays uses that shape. - Moving outputSetting() from helpers.cfm into Public.cfc as a private method so the wheels.Public-mixin caller contract is structural rather than commented (A: "before helpers.cfm gets reused more broadly"). Signed-off-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com> * chore: defer changelog entry to campaign consolidation wheels-bot added an [Unreleased] entry on this branch; with a dozen parallel remediation PRs these entries all conflict at the same CHANGELOG location as siblings merge. The entry text is preserved off-branch and will land in one consolidated changelog PR at the end of the remediation campaign. Co-Authored-By: Claude Fable 5 Signed-off-by: Peter Amiri --------- Signed-off-by: Peter Amiri Signed-off-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com> Co-authored-by: Claude Fable 5 Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com> --- vendor/wheels/Public.cfc | 29 ++++ vendor/wheels/public/helpers.cfm | 4 +- vendor/wheels/public/views/info.cfm | 23 ++- .../security/InfoSecretRedactionSpec.cfc | 155 ++++++++++++++++++ 4 files changed, 198 insertions(+), 13 deletions(-) create mode 100644 vendor/wheels/tests/specs/security/InfoSecretRedactionSpec.cfc diff --git a/vendor/wheels/Public.cfc b/vendor/wheels/Public.cfc index 4057cd18a..c301a95ea 100644 --- a/vendor/wheels/Public.cfc +++ b/vendor/wheels/Public.cfc @@ -76,6 +76,35 @@ component output="false" displayName="Internal GUI" extends="wheels.Global" { return application.wheels.$packageRegistry; } + /** + * Returns true when a setting name looks like it holds a secret (keys, + * passwords, passphrases, tokens, credentials). Single source of truth for + * the /wheels/info page so the HTML and JSON branches cannot drift — the + * JSON branch omits matching settings and the HTML branch redacts them. + * + * `accessControlAllowCredentials` (and any future `*allowCredentials` flag) + * is exempt: it mirrors the boolean `Access-Control-Allow-Credentials` CORS + * response header and is not a credential value. + */ + public boolean function $isProtectedSetting(required string settingName) { + if (ReFindNoCase("allowcredentials$", arguments.settingName)) { + return false; + } + return ReFindNoCase("(secret|password|passphrase|privatekey|apikey|credential|token)", arguments.settingName) > 0; + } + + /** + * Returns the display-safe HTML value for a setting row on the /wheels/info + * page. Secret-shaped settings are redacted without ever being read, so an + * unset key cannot throw and the raw value never reaches the output buffer. + */ + public string function $settingDisplayValue(required string settingName) { + if ($isProtectedSetting(arguments.settingName)) { + return "[redacted]"; + } + return formatSettingOutput(get(arguments.settingName)); + } + /* This is just a proof of concept */ diff --git a/vendor/wheels/public/helpers.cfm b/vendor/wheels/public/helpers.cfm index 836686c55..d9057eed4 100644 --- a/vendor/wheels/public/helpers.cfm +++ b/vendor/wheels/public/helpers.cfm @@ -91,7 +91,9 @@ function outputSetting(array setting) { local.rv &= ''; local.rv &= ReReplace(ReReplace(arguments.setting[i], "(^[a-z])", "\u\1"), "([A-Z])", " \1", "all"); local.rv &= ''; - local.rv &= formatSettingOutput(get(arguments.setting[i])); + // Resolves on wheels.Public (outputSetting is only invoked from info.cfm + // inside Public.cfc::info()) and redacts secret-shaped settings. + local.rv &= $settingDisplayValue(arguments.setting[i]); local.rv &= ''; } return local.rv; diff --git a/vendor/wheels/public/views/info.cfm b/vendor/wheels/public/views/info.cfm index 589164f14..540277d1d 100644 --- a/vendor/wheels/public/views/info.cfm +++ b/vendor/wheels/public/views/info.cfm @@ -167,40 +167,39 @@ if (request.wheels.params.format == "json") { "settings": {} }; - // Collect path settings + // Collect path settings (secret-shaped names are omitted via the shared + // $isProtectedSetting() predicate, same as the HTML branch's redaction) for (local.path in paths) { - if (isDefined("application.wheels." & local.path)) { + if (isDefined("application.wheels." & local.path) && !$isProtectedSetting(local.path)) { local.infoData.paths[local.path] = $get(local.path); } } // Collect component settings for (local.comp in components) { - if (isDefined("application.wheels." & local.comp)) { + if (isDefined("application.wheels." & local.comp) && !$isProtectedSetting(local.comp)) { local.infoData.components[local.comp] = $get(local.comp); } } // Collect environment settings for (local.env in environment) { - if (isDefined("application.wheels." & local.env)) { + if (isDefined("application.wheels." & local.env) && !$isProtectedSetting(local.env)) { local.infoData.environment[local.env] = $get(local.env); } } - // Collect CSRF settings + // Collect CSRF settings (secret-shaped names are omitted via the shared + // $isProtectedSetting() predicate, same as the HTML branch's redaction) for (local.csrfSetting in csrf) { - if (isDefined("application.wheels." & local.csrfSetting)) { - // Don't expose secret keys in JSON - if (local.csrfSetting != "csrfCookieEncryptionSecretKey") { - local.infoData.csrf[local.csrfSetting] = $get(local.csrfSetting); - } + if (isDefined("application.wheels." & local.csrfSetting) && !$isProtectedSetting(local.csrfSetting)) { + local.infoData.csrf[local.csrfSetting] = $get(local.csrfSetting); } } // Collect CORS settings for (local.corsSetting in cors) { - if (isDefined("application.wheels." & local.corsSetting)) { + if (isDefined("application.wheels." & local.corsSetting) && !$isProtectedSetting(local.corsSetting)) { local.infoData.cors[local.corsSetting] = $get(local.corsSetting); } } @@ -210,7 +209,7 @@ if (request.wheels.params.format == "json") { local.groupName = local.settingGroup.name; local.infoData.settings[local.groupName] = {}; for (local.settingName in local.settingGroup.values) { - if (isDefined("application.wheels." & local.settingName)) { + if (isDefined("application.wheels." & local.settingName) && !$isProtectedSetting(local.settingName)) { local.infoData.settings[local.groupName][local.settingName] = $get(local.settingName); } } diff --git a/vendor/wheels/tests/specs/security/InfoSecretRedactionSpec.cfc b/vendor/wheels/tests/specs/security/InfoSecretRedactionSpec.cfc new file mode 100644 index 000000000..1a6f2469f --- /dev/null +++ b/vendor/wheels/tests/specs/security/InfoSecretRedactionSpec.cfc @@ -0,0 +1,155 @@ +/** + * The /wheels/info page must never render secret-shaped settings in plaintext. + * + * The JSON branch always omitted `csrfCookieEncryptionSecretKey`, but the HTML + * branch rendered it verbatim via outputSetting() -> formatSettingOutput(get()). + * Both branches now share a single predicate, `$isProtectedSetting()`, plus a + * display helper, `$settingDisplayValue()`, so they cannot drift. + * + * See the 2026-06-09 framework review (finding T3, info-secret-redaction). + */ +component extends="wheels.WheelsTest" { + + function run() { + + describe("/wheels/info secret redaction", () => { + + describe("$isProtectedSetting() predicate", () => { + + it("flags csrfCookieEncryptionSecretKey as protected", () => { + var publicCfc = createObject("component", "wheels.Public").$init(); + expect(publicCfc.$isProtectedSetting("csrfCookieEncryptionSecretKey")).toBeTrue(); + }); + + it("flags other secret-shaped names as protected", () => { + var publicCfc = createObject("component", "wheels.Public").$init(); + var secretShaped = [ + "reloadPassword", + "myApiKey", + "authToken", + "smtpCredential", + "awsCredentials", + "signingPassphrase", + "jwtPrivateKey", + "clientSecret" + ]; + for (var settingName in secretShaped) { + expect(publicCfc.$isProtectedSetting(settingName)).toBeTrue( + "Expected `#settingName#` to be treated as a protected setting." + ); + } + }); + + it("does not flag ordinary settings", () => { + var publicCfc = createObject("component", "wheels.Public").$init(); + var ordinary = [ + "csrfStore", + "csrfCookieName", + "environment", + "csrfCookieSecure", + "dataSourceName", + "urlRewriting" + ]; + for (var settingName in ordinary) { + expect(publicCfc.$isProtectedSetting(settingName)).toBeFalse( + "Expected `#settingName#` NOT to be treated as a protected setting." + ); + } + }); + + it("does not flag accessControlAllowCredentials (CORS boolean flag, not a credential value)", () => { + var publicCfc = createObject("component", "wheels.Public").$init(); + expect(publicCfc.$isProtectedSetting("accessControlAllowCredentials")).toBeFalse( + "accessControlAllowCredentials mirrors the Access-Control-Allow-Credentials response " + & "header. Redacting it would garble the HTML CORS table and silently drop the key from " + & "the JSON branch, breaking consumers that read it." + ); + }); + + }); + + describe("$settingDisplayValue()", () => { + + // Shared struct (not a bare local) so the beforeEach/afterEach + // closures reliably mutate the same state on every engine. + var keyState = {existed = false, priorValue = ""}; + + beforeEach(() => { + keyState.existed = StructKeyExists(application.wheels, "csrfCookieEncryptionSecretKey"); + if (keyState.existed) { + keyState.priorValue = application.wheels.csrfCookieEncryptionSecretKey; + } + application.wheels.csrfCookieEncryptionSecretKey = "sUpErSeCrEtTeStKeY123"; + }); + + afterEach(() => { + if (keyState.existed) { + application.wheels.csrfCookieEncryptionSecretKey = keyState.priorValue; + } else { + StructDelete(application.wheels, "csrfCookieEncryptionSecretKey"); + } + }); + + it("redacts the CSRF cookie encryption secret key", () => { + var publicCfc = createObject("component", "wheels.Public").$init(); + var rendered = publicCfc.$settingDisplayValue("csrfCookieEncryptionSecretKey"); + expect(Find("redacted", rendered) > 0).toBeTrue( + "Expected the rendered value for csrfCookieEncryptionSecretKey to be redacted." + ); + expect(Find("sUpErSeCrEtTeStKeY123", rendered)).toBe( + 0, + "The secret value must never reach the /wheels/info output buffer." + ); + }); + + it("redacts protected settings without reading them, so an unset key cannot throw", () => { + var publicCfc = createObject("component", "wheels.Public").$init(); + var rendered = publicCfc.$settingDisplayValue("someNonExistentApiKey"); + expect(Find("redacted", rendered) > 0).toBeTrue( + "Protected settings must short-circuit to the redacted marker before any get() lookup." + ); + }); + + it("renders ordinary settings through the standard formatter", () => { + var publicCfc = createObject("component", "wheels.Public").$init(); + var rendered = publicCfc.$settingDisplayValue("environment"); + expect(rendered).toBe(application.wheels.environment); + }); + + }); + + describe("Source coverage: HTML and JSON branches share the predicate", () => { + + it("helpers.cfm outputSetting() renders via $settingDisplayValue()", () => { + var source = FileRead(ExpandPath("/wheels/public/helpers.cfm")); + expect(Find("$settingDisplayValue(arguments.setting", source) > 0).toBeTrue( + "outputSetting() must render each row through $settingDisplayValue() so secret-shaped " + & "settings are redacted on the HTML /wheels/info page." + ); + expect(Find("formatSettingOutput(get(", source)).toBe( + 0, + "outputSetting() must not call formatSettingOutput(get(...)) directly — that bypasses " + & "secret redaction." + ); + }); + + it("info.cfm JSON branch uses $isProtectedSetting() instead of a hardcoded key compare", () => { + var source = FileRead(ExpandPath("/wheels/public/views/info.cfm")); + expect(Find("$isProtectedSetting", source) > 0).toBeTrue( + "The JSON branch of info.cfm must filter settings through the shared " + & "$isProtectedSetting() predicate." + ); + expect(Find('!= "csrfCookieEncryptionSecretKey"', source)).toBe( + 0, + "The hardcoded csrfCookieEncryptionSecretKey compare must be replaced by the shared " + & "predicate so the HTML and JSON branches cannot drift." + ); + }); + + }); + + }); + + } + +} From cb6241c1e963d4be38d0da92b5acffc6028122fa Mon Sep 17 00:00:00 2001 From: Peter Amiri Date: Tue, 9 Jun 2026 23:10:49 -0700 Subject: [PATCH 013/198] fix(dispatch): block /wheels/* dev UI unless environment is development (#2903) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix(dispatch): block /wheels/* dev UI unless environment is development $shouldBlockInProduction() was a denylist matching only the literal "production", while the RCE-grade endpoints behind it (consoleeval.cfm, mcp.cfm) already required environment == "development". Any other environment name (staging, qa, testing, maintenance, design, ...) passed the gate when enablePublicComponent was force-enabled. Rewrite the predicate as a fail-closed allowlist: block when application.wheels or application.wheels.environment is missing, otherwise block unless the environment is development (case-insensitive !=, same operator consoleeval.cfm uses). Method names are kept — 29 handler call sites and the static-coverage spec grep for them. Behavioral change: setting enablePublicComponent=true in a non-development environment no longer exposes the gated dev-UI handlers (they 404); only environment="development" may reach them. index() stays ungated per #2233. $loadRegistryPackages inherits the stricter gate. Spec changes (all RED pre-fix, verified on Lucee 7 + SQLite): - invert testing/maintenance/design predicate cases to expect blocking - add arbitrary non-dev environment names (staging, qa, uat, prod, production-1) - add fail-closed case for a missing environment key - LoadRegistryPackagesSpec: staging now yields empty packages Addresses finding T2 (S2/SEC-1) of the 2026-06-09 framework review. Co-Authored-By: Claude Fable 5 Signed-off-by: Peter Amiri * docs(changelog): add [Unreleased] section for $shouldBlockInProduction allowlist gate (round 1) Reviewer A and B converged on a single consensus finding: the security fix PR was missing a CHANGELOG entry for the denylist-to-allowlist behavioral change. Adds an `## [Unreleased]` section above [4.0.3] with a `### Security` bullet summarising the new fail-closed gate and the behavioral delta for operators using `enablePublicComponent=true` in non-development environments (#2903). Signed-off-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com> * chore: defer changelog entry to campaign consolidation wheels-bot added an [Unreleased] entry on this branch; with a dozen parallel remediation PRs these entries all conflict at the same CHANGELOG location as siblings merge. The entry text is preserved off-branch and will land in one consolidated changelog PR at the end of the remediation campaign. Co-Authored-By: Claude Fable 5 Signed-off-by: Peter Amiri --------- Signed-off-by: Peter Amiri Signed-off-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com> Co-authored-by: Claude Fable 5 Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com> --- vendor/wheels/Public.cfc | 24 ++++++---- .../packages/LoadRegistryPackagesSpec.cfc | 12 +++++ .../PublicComponentProductionSpec.cfc | 46 +++++++++++++++---- 3 files changed, 64 insertions(+), 18 deletions(-) diff --git a/vendor/wheels/Public.cfc b/vendor/wheels/Public.cfc index c301a95ea..8d0466b83 100644 --- a/vendor/wheels/Public.cfc +++ b/vendor/wheels/Public.cfc @@ -9,23 +9,29 @@ component output="false" displayName="Internal GUI" extends="wheels.Global" { } /** - * Returns true when the current application environment is `production`. + * Returns true unless the current application environment is `development` + * (fail closed: a missing `application.wheels` struct or `environment` key + * also blocks). This is an allowlist matching the environment checks in + * consoleeval.cfm and mcp.cfm; the name is historical from issue #2233, + * when the gate only matched `production`. * * The public GUI exposes routes, env info, a CFML REPL, test runners, and * a migration UI. Even if a developer overrides `enablePublicComponent` to - * true in production (documented historical behavior for ad-hoc - * debugging), these surfaces must stay gated. See issue #2233. + * true outside development (documented historical behavior for ad-hoc + * debugging), these surfaces must stay gated. */ public boolean function $shouldBlockInProduction() { - return StructKeyExists(application, "wheels") - && StructKeyExists(application.wheels, "environment") - && application.wheels.environment == "production"; + if (!StructKeyExists(application, "wheels") || !StructKeyExists(application.wheels, "environment")) { + return true; + } + return application.wheels.environment != "development"; } /** - * Defense-in-depth: if the current environment is production, short-circuit - * the handler with a 404 response before any view is included. Called as - * the first statement of every non-`index` handler in this component. + * Defense-in-depth: unless the current environment is `development`, + * short-circuit the handler with a 404 response before any view is + * included. Called as the first statement of every non-`index` handler in + * this component. */ public void function $blockInProduction() { if ($shouldBlockInProduction()) { diff --git a/vendor/wheels/tests/specs/packages/LoadRegistryPackagesSpec.cfc b/vendor/wheels/tests/specs/packages/LoadRegistryPackagesSpec.cfc index ba65cf461..3d5b8ffa1 100644 --- a/vendor/wheels/tests/specs/packages/LoadRegistryPackagesSpec.cfc +++ b/vendor/wheels/tests/specs/packages/LoadRegistryPackagesSpec.cfc @@ -35,6 +35,18 @@ component extends="wheels.WheelsTest" { }); }); + it("returns empty packages and no error in staging (gate allows development only)", () => { + // 2026-06-09 review (S2/SEC-1): the old denylist only matched + // "production", so any other non-development environment name + // reached the registry. The gate is now an allowlist. + $withEnv("staging", () => { + var pub = $newPublic(); + var result = pub.$loadRegistryPackages(registry = $fakeRegistry(packages = [{name = "should-not-appear"}])); + expect(result.packages).toBe([]); + expect(result.error).toBe(""); + }); + }); + it("returns packages from the registry in development", () => { $withEnv("development", () => { var pub = $newPublic(); diff --git a/vendor/wheels/tests/specs/security/PublicComponentProductionSpec.cfc b/vendor/wheels/tests/specs/security/PublicComponentProductionSpec.cfc index 1b974106a..89b3fb068 100644 --- a/vendor/wheels/tests/specs/security/PublicComponentProductionSpec.cfc +++ b/vendor/wheels/tests/specs/security/PublicComponentProductionSpec.cfc @@ -1,9 +1,12 @@ /** * Locks down `/wheels/*` dispatch so the internal GUI / migrator / test-runner / - * consoleeval surface cannot be reached in `production`, even if a developer - * has explicitly set `enablePublicComponent=true`. + * consoleeval surface cannot be reached outside `development`, even if a + * developer has explicitly set `enablePublicComponent=true`. * - * See issue #2233 (Bucket A8 in the v4 GA architectural review). + * The gate is an allowlist (block unless development, fail closed), matching + * the environment checks in consoleeval.cfm and mcp.cfm. See issue #2233 + * (Bucket A8 in the v4 GA architectural review) and the 2026-06-09 framework + * review (finding S2/SEC-1). */ component extends="wheels.WheelsTest" { @@ -35,22 +38,47 @@ component extends="wheels.WheelsTest" { expect(publicCfc.$shouldBlockInProduction()).toBeFalse(); }); - it("returns false in testing", () => { + it("returns true in testing (allowlist: only development passes)", () => { application.wheels.environment = "testing"; var publicCfc = createObject("component", "wheels.Public").$init(); - expect(publicCfc.$shouldBlockInProduction()).toBeFalse(); + expect(publicCfc.$shouldBlockInProduction()).toBeTrue(); }); - it("returns false in maintenance", () => { + it("returns true in maintenance (allowlist: only development passes)", () => { application.wheels.environment = "maintenance"; var publicCfc = createObject("component", "wheels.Public").$init(); - expect(publicCfc.$shouldBlockInProduction()).toBeFalse(); + expect(publicCfc.$shouldBlockInProduction()).toBeTrue(); }); - it("returns false in design", () => { + it("returns true in design (allowlist: only development passes)", () => { application.wheels.environment = "design"; var publicCfc = createObject("component", "wheels.Public").$init(); - expect(publicCfc.$shouldBlockInProduction()).toBeFalse(); + expect(publicCfc.$shouldBlockInProduction()).toBeTrue(); + }); + + // Attack-shaped cases from the 2026-06-09 review (S2/SEC-1): a + // denylist matching only the literal "production" let any other + // environment name straight through to the REPL/migrator/test + // surface. The predicate must be an allowlist instead. + var nonDevEnvironments = ["staging", "qa", "uat", "prod", "production-1"]; + for (var envName in nonDevEnvironments) { + (function(blockedEnv) { + it("returns true for arbitrary non-development environment '#blockedEnv#'", () => { + application.wheels.environment = blockedEnv; + var publicCfc = createObject("component", "wheels.Public").$init(); + expect(publicCfc.$shouldBlockInProduction()).toBeTrue(); + }); + })(envName); + } + + it("fails closed when application.wheels.environment is missing", () => { + // Instantiate before deleting the key so component setup + // can't trip over the missing environment; the predicate + // itself must treat a missing key as "block". + var publicCfc = createObject("component", "wheels.Public").$init(); + StructDelete(application.wheels, "environment"); + expect(publicCfc.$shouldBlockInProduction()).toBeTrue(); + // afterEach restores application.wheels.environment. }); }); From cc7cf7932a0c4d4069fabc4b2571fa62c8ec94a9 Mon Sep 17 00:00:00 2001 From: Peter Amiri Date: Tue, 9 Jun 2026 23:10:57 -0700 Subject: [PATCH 014/198] fix(model): prefer driver generated keys for Oracle and SQL Server identity retrieval (#2908) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix(model): prefer driver generated keys for Oracle and SQL Server identity retrieval Identity retrieval after INSERT raced under concurrency on both adapters: - Oracle resolved the new PK via WHERE ROWID = (SELECT MAX(ROWID) ...). ROWID is physical storage location, not insertion order, so a concurrent insert (or simply block reuse) can assign another session's key to the new object. - SQL Server resolved it via a standalone SELECT @@IDENTITY, which is session-scoped: a trigger that inserts into another identity table makes it return the trigger's key instead of ours. Both adapters now prefer the driver-supplied generated key from the insert result struct (result.generatedKey on Lucee/ACF, result.rowid on ACF+Oracle), mirroring the CockroachDB adapter. The driver retrieves the key in the insert's own statement, so it is scope-, trigger-, and concurrency-safe. Oracle uses a numeric key directly and resolves ROWID-shaped keys with an exact-row CHARTOROWID lookup gated by a strict 18-char base-64 pattern (Global.$query has no parameter binding, so nothing unvalidated is ever interpolated). The review's suggested SCOPE_IDENTITY()-first reorder was deliberately NOT implemented: a standalone SELECT SCOPE_IDENTITY() executes in its own scope (a batch is a scope per MS docs) and returns NULL - the documented BoxLang empty-value behavior - so the reorder would add a wasted round-trip per insert and still resolve via @@IDENTITY. The @@IDENTITY -> SCOPE_IDENTITY chain and the MAX(ROWID) query are kept as documented last resorts for engines that surface no generated key (currently BoxLang), with comments stating their hazards. Both adapters also gain the BoxLang ReplaceList column-parse workaround already used by the PostgreSQL/CockroachDB adapters so the fallback path cannot falsely match the PK and skip key retrieval. New DB-free unit specs (modeled on CockroachDBUnitSpec) fail against the pre-fix adapters (2 errors per bundle on Lucee 7 + SQLite) and pass with the fix; the database spec area is green (44 pass / 0 fail / 0 error). Co-Authored-By: Claude Fable 5 Signed-off-by: Peter Amiri * fix(model): address Reviewer A/B consensus findings (round 1) - Add DB-free spec exercising the ACF result.rowid numeric path in vendor/wheels/tests/specs/database/OracleUnitSpec.cfc. The Oracle adapter's $identitySelect reads two driver-key surfaces — Lucee's result.generatedKey (already covered) and ACF's result.rowid (uncovered) — and Reviewer A provided the exact spec to close that gap. A numeric rowid returns before any $query() call, so the case is fully DB-free. - Add [Unreleased] entry to CHANGELOG.md describing the Oracle MAX(ROWID) / SQL Server @@IDENTITY data-integrity fix this PR introduces. CHANGELOG had no [Unreleased] section above the 4.0.3 entry; Reviewer A flagged it as a nit that would confuse release-note time. Signed-off-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com> * chore: defer changelog entry to campaign consolidation wheels-bot added an [Unreleased] entry on this branch; with a dozen parallel remediation PRs these entries all conflict at the same CHANGELOG location as siblings merge. The entry text is preserved off-branch and will land in one consolidated changelog PR at the end of the remediation campaign. Co-Authored-By: Claude Fable 5 Signed-off-by: Peter Amiri --------- Signed-off-by: Peter Amiri Signed-off-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com> Co-authored-by: Claude Fable 5 Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com> --- .../MicrosoftSQLServerModel.cfc | 53 +++++++-- .../databaseAdapters/Oracle/OracleModel.cfc | 66 ++++++++++- .../database/MicrosoftSQLServerUnitSpec.cfc | 96 +++++++++++++++ .../tests/specs/database/OracleUnitSpec.cfc | 112 ++++++++++++++++++ 4 files changed, 311 insertions(+), 16 deletions(-) create mode 100644 vendor/wheels/tests/specs/database/MicrosoftSQLServerUnitSpec.cfc create mode 100644 vendor/wheels/tests/specs/database/OracleUnitSpec.cfc diff --git a/vendor/wheels/databaseAdapters/MicrosoftSQLServer/MicrosoftSQLServerModel.cfc b/vendor/wheels/databaseAdapters/MicrosoftSQLServer/MicrosoftSQLServerModel.cfc index b26f596b1..af746f7da 100755 --- a/vendor/wheels/databaseAdapters/MicrosoftSQLServer/MicrosoftSQLServerModel.cfc +++ b/vendor/wheels/databaseAdapters/MicrosoftSQLServer/MicrosoftSQLServerModel.cfc @@ -275,25 +275,56 @@ component extends="wheels.databaseAdapters.Base" output=false { if (Left(local.sql, 11) == "INSERT INTO" && !StructKeyExists(arguments.result, $generatedKey())) { local.startPar = Find("(", local.sql) + 1; local.endPar = Find(")", local.sql); - local.columnList = ReplaceList( - Mid(local.sql, local.startPar, (local.endPar - local.startPar)), - "#Chr(10)#,#Chr(13)#, ", - ",," - ); + local.columnList = ""; + if (local.endPar) { + local.rawColumns = Mid(local.sql, local.startPar, (local.endPar - local.startPar)); + + // BoxLang compatibility fix - ReplaceList behaves differently + if (StructKeyExists(server, "boxlang")) { + // For BoxLang, use regex to properly parse column names + local.columnList = REReplace(local.rawColumns, "\s*,\s*", ",", "all"); + local.columnList = REReplace(local.columnList, "[\r\n]", "", "all"); + local.columnList = Trim(local.columnList); + } else { + // Original Lucee/ACF behavior + local.columnList = ReplaceList( + local.rawColumns, + "#Chr(10)#,#Chr(13)#, ", + ",," + ); + } + } // Strip identifier quotes from column list for comparison local.columnList = $stripIdentifierQuotes(local.columnList); if (!ListFindNoCase(local.columnList, ListFirst(arguments.primaryKey))) { local.rv = {}; - // Use @@IDENTITY instead of SCOPE_IDENTITY() for BoxLang compatibility - // SCOPE_IDENTITY() returns empty values in BoxLang with SQL Server + // Prefer the driver-supplied generated key: mssql-jdbc retrieves it in the + // insert's own batch, so it is both scope-safe and trigger-safe — a trigger + // that inserts into another identity table cannot leak its key in here. + // StructKeyExists is case-insensitive, so Lucee's lowercase `generatedkey` + // result key matches. ListFirst because multi-row inserts can return a list. + if (StructKeyExists(arguments.result, "generatedKey") && Len(arguments.result.generatedKey)) { + local.rv[$generatedKey()] = ListFirst(arguments.result.generatedKey); + return local.rv; + } + + // Last resort — only runs when the driver supplied no generated key + // (currently BoxLang + SQL Server). @@IDENTITY is session-scoped and can + // return a trigger-generated identity instead of ours. The order is NOT + // flipped to prefer SCOPE_IDENTITY() because a standalone + // `SELECT SCOPE_IDENTITY()` executes in its own scope (a batch is a scope) + // and returns NULL — the documented BoxLang empty-value behavior — so the + // reorder would just add a wasted round-trip per insert and still resolve + // via @@IDENTITY. Same-batch retrieval for this fallback is tracked in a + // follow-up issue. query = $query(sql = "SELECT @@IDENTITY AS lastId", argumentCollection = arguments.queryAttributes); - - // Fallback to SCOPE_IDENTITY() if @@IDENTITY fails (for other CFML engines) - if (!len(query.lastId)) { + + // Fallback to SCOPE_IDENTITY() if @@IDENTITY returned nothing (other CFML engines). + if (!Len(query.lastId)) { query = $query(sql = "SELECT SCOPE_IDENTITY() AS lastId", argumentCollection = arguments.queryAttributes); } - + local.rv[$generatedKey()] = query.lastId; return local.rv; } diff --git a/vendor/wheels/databaseAdapters/Oracle/OracleModel.cfc b/vendor/wheels/databaseAdapters/Oracle/OracleModel.cfc index f761ab1ec..d94162fc1 100755 --- a/vendor/wheels/databaseAdapters/Oracle/OracleModel.cfc +++ b/vendor/wheels/databaseAdapters/Oracle/OracleModel.cfc @@ -133,16 +133,72 @@ component extends="wheels.databaseAdapters.Base" output=false { if (Left(local.sql, 11) == "INSERT INTO" && !StructKeyExists(arguments.result, $generatedKey())) { local.startPar = Find("(", local.sql) + 1; local.endPar = Find(")", local.sql); - local.columnList = ReplaceList( - Mid(local.sql, local.startPar, (local.endPar - local.startPar)), - "#Chr(10)#,#Chr(13)#, ", - ",," - ); + local.columnList = ""; + if (local.endPar) { + local.rawColumns = Mid(local.sql, local.startPar, (local.endPar - local.startPar)); + + // BoxLang compatibility fix - ReplaceList behaves differently + if (StructKeyExists(server, "boxlang")) { + // For BoxLang, use regex to properly parse column names + local.columnList = REReplace(local.rawColumns, "\s*,\s*", ",", "all"); + local.columnList = REReplace(local.columnList, "[\r\n]", "", "all"); + local.columnList = Trim(local.columnList); + } else { + // Original Lucee/ACF behavior + local.columnList = ReplaceList( + local.rawColumns, + "#Chr(10)#,#Chr(13)#, ", + ",," + ); + } + } // Strip identifier quotes from column list for comparison local.columnList = $stripIdentifierQuotes(local.columnList); if (!ListFindNoCase(local.columnList, ListFirst(arguments.primaryKey))) { local.rv = {}; local.tbl = SpanExcluding(Right(local.sql, Len(local.sql) - 12), " "); + + // Resolve a driver-supplied key first. CFML engines set + // Statement.RETURN_GENERATED_KEYS on INSERTs (see $bulkInsertSQL), so the + // Oracle JDBC driver returns the inserted row's ROWID. Lucee surfaces it + // as result.generatedKey (StructKeyExists is case-insensitive so the + // lowercase `generatedkey` key matches); ACF surfaces it as result.rowid. + // ListFirst because multi-row inserts can return a list. + local.generated = ""; + if (StructKeyExists(arguments.result, "generatedKey") && Len(arguments.result.generatedKey)) { + local.generated = ListFirst(arguments.result.generatedKey); + } else if (StructKeyExists(arguments.result, "rowid") && Len(arguments.result.rowid)) { + local.generated = arguments.result.rowid; + } + if (Len(local.generated)) { + // Some driver/engine combos return the identity value itself. + if (IsNumeric(local.generated)) { + local.rv[$generatedKey()] = local.generated; + return local.rv; + } + // Standard extended ROWID: 18 base-64 chars. The value originates from + // the JDBC driver — not user input — but $query has no parameter + // binding, so gate strictly before interpolating; UROWIDs and anything + // unexpected fall through to the legacy query below. This exact-row + // lookup targets OUR insert, so it is race-free under concurrent + // inserts (unlike MAX(ROWID)). + if (REFind("^[A-Za-z0-9/+]{18}$", local.generated) == 1) { + query = $query( + sql = "SELECT #arguments.primaryKey# AS lastId FROM #local.tbl# WHERE ROWID = CHARTOROWID('#local.generated#')", + argumentCollection = arguments.queryAttributes + ); + if (query.recordCount && Len(query.lastId)) { + local.rv[$generatedKey()] = query.lastId; + return local.rv; + } + } + } + + // Legacy heuristic, kept only for engines that surface no generated key + // (e.g. current BoxLang). ROWID is physical location, not insertion order, + // so MAX(ROWID) races under concurrent inserts and can return another + // session's row. Replacing this with CURRVAL on the identity sequence is + // tracked in a follow-up issue. query = $query( sql = "SELECT #arguments.primaryKey# AS lastId FROM #local.tbl# WHERE ROWID = (SELECT MAX(ROWID) FROM #local.tbl#)", argumentCollection = arguments.queryAttributes diff --git a/vendor/wheels/tests/specs/database/MicrosoftSQLServerUnitSpec.cfc b/vendor/wheels/tests/specs/database/MicrosoftSQLServerUnitSpec.cfc new file mode 100644 index 000000000..62c5bfc30 --- /dev/null +++ b/vendor/wheels/tests/specs/database/MicrosoftSQLServerUnitSpec.cfc @@ -0,0 +1,96 @@ +component extends="wheels.WheelsTest" { + + function beforeAll() { + adapter = CreateObject("component", "wheels.databaseAdapters.MicrosoftSQLServer.MicrosoftSQLServerModel"); + } + + function run() { + + describe("Microsoft SQL Server Adapter Unit Tests", () => { + + describe("$generatedKey", () => { + + it("returns identitycol", () => { + expect(adapter.$generatedKey()).toBe("identitycol"); + }); + }); + + describe("$identitySelect", () => { + + it("returns identitycol from result.generatedKey", () => { + var result = { + sql = "INSERT INTO users (firstname) VALUES ('test')", + generatedKey = "42" + }; + var rv = adapter.$identitySelect( + queryAttributes = {}, + result = result, + primaryKey = "id", + returningIdentity = "" + ); + expect(rv).toBeStruct(); + expect(rv).toHaveKey("identitycol"); + expect(rv.identitycol).toBe("42"); + }); + + it("returns the first key when result.generatedKey is a list", () => { + var result = { + sql = "INSERT INTO users (firstname) VALUES ('test')", + generatedKey = "42,43" + }; + var rv = adapter.$identitySelect( + queryAttributes = {}, + result = result, + primaryKey = "id", + returningIdentity = "" + ); + expect(rv).toBeStruct(); + expect(rv).toHaveKey("identitycol"); + expect(rv.identitycol).toBe("42"); + }); + + it("returns void when result already contains identitycol", () => { + var result = { + sql = "INSERT INTO users (firstname) VALUES ('test')", + identitycol = "7" + }; + // CFML void functions don't return null — the variable simply + // won't exist. Use IsNull() on the raw call to verify no return. + expect(IsNull(adapter.$identitySelect( + queryAttributes = {}, + result = result, + primaryKey = "id", + returningIdentity = "" + ))).toBeTrue(); + }); + + it("returns void when the primary key is in the insert column list", () => { + var result = { + sql = "INSERT INTO users (id, firstname) VALUES (1, 'test')", + generatedKey = "42" + }; + expect(IsNull(adapter.$identitySelect( + queryAttributes = {}, + result = result, + primaryKey = "id", + returningIdentity = "" + ))).toBeTrue(); + }); + + it("returns void for non-INSERT statements", () => { + var result = { + sql = "SELECT * FROM users WHERE id = 1", + generatedKey = "42" + }; + expect(IsNull(adapter.$identitySelect( + queryAttributes = {}, + result = result, + primaryKey = "id", + returningIdentity = "" + ))).toBeTrue(); + }); + }); + }); + } + +} diff --git a/vendor/wheels/tests/specs/database/OracleUnitSpec.cfc b/vendor/wheels/tests/specs/database/OracleUnitSpec.cfc new file mode 100644 index 000000000..74b2bcd6d --- /dev/null +++ b/vendor/wheels/tests/specs/database/OracleUnitSpec.cfc @@ -0,0 +1,112 @@ +component extends="wheels.WheelsTest" { + + function beforeAll() { + adapter = CreateObject("component", "wheels.databaseAdapters.Oracle.OracleModel"); + } + + function run() { + + describe("Oracle Adapter Unit Tests", () => { + + describe("$generatedKey", () => { + + it("returns lastId", () => { + expect(adapter.$generatedKey()).toBe("lastId"); + }); + }); + + describe("$identitySelect", () => { + + it("uses a numeric result.generatedKey directly", () => { + var result = { + sql = "INSERT INTO users (firstname) VALUES ('test')", + generatedKey = "42" + }; + var rv = adapter.$identitySelect( + queryAttributes = {}, + result = result, + primaryKey = "id", + returningIdentity = "" + ); + expect(rv).toBeStruct(); + expect(rv).toHaveKey("lastId"); + expect(rv.lastId).toBe("42"); + }); + + it("uses a numeric result.rowid directly (ACF surface)", () => { + var result = { + sql = "INSERT INTO users (firstname) VALUES ('test')", + rowid = "42" + }; + var rv = adapter.$identitySelect( + queryAttributes = {}, + result = result, + primaryKey = "id", + returningIdentity = "" + ); + expect(rv).toBeStruct(); + expect(rv).toHaveKey("lastId"); + expect(rv.lastId).toBe("42"); + }); + + it("uses the first value when result.generatedKey is a numeric list", () => { + var result = { + sql = "INSERT INTO users (firstname) VALUES ('test')", + generatedKey = "42,43" + }; + var rv = adapter.$identitySelect( + queryAttributes = {}, + result = result, + primaryKey = "id", + returningIdentity = "" + ); + expect(rv).toBeStruct(); + expect(rv).toHaveKey("lastId"); + expect(rv.lastId).toBe("42"); + }); + + it("returns void when the primary key is in the insert column list", () => { + var result = { + sql = "INSERT INTO users (id, firstname) VALUES (1, 'test')", + generatedKey = "42" + }; + // CFML void functions don't return null — the variable simply + // won't exist. Use IsNull() on the raw call to verify no return. + expect(IsNull(adapter.$identitySelect( + queryAttributes = {}, + result = result, + primaryKey = "id", + returningIdentity = "" + ))).toBeTrue(); + }); + + it("returns void when result already has lastId key", () => { + var result = { + sql = "INSERT INTO users (firstname) VALUES ('test')", + lastId = 10 + }; + expect(IsNull(adapter.$identitySelect( + queryAttributes = {}, + result = result, + primaryKey = "id", + returningIdentity = "" + ))).toBeTrue(); + }); + + it("returns void for non-INSERT statements", () => { + var result = { + sql = "SELECT * FROM users WHERE id = 1", + generatedKey = "42" + }; + expect(IsNull(adapter.$identitySelect( + queryAttributes = {}, + result = result, + primaryKey = "id", + returningIdentity = "" + ))).toBeTrue(); + }); + }); + }); + } + +} From e492e5c8dadc40a5be897dc9de4d12af9a374245 Mon Sep 17 00:00:00 2001 From: Peter Amiri Date: Tue, 9 Jun 2026 23:11:05 -0700 Subject: [PATCH 015/198] fix(model): key association JOIN memo by soft-delete and alias context (#2910) * fix(model): key association JOIN memo by soft-delete and alias context $expandedAssociations() memoized the built JOIN string onto the shared application-scoped association struct keyed only on existence, so the first caller's context won permanently: a join built with includeSoftDeletes=true was later served to default calls (dropping the soft-delete IS NULL predicate), and an aliased self-join built in a nested include context was served to top-level includes (and vice versa). The unlocked write also raced across concurrent first hits. Fix: - memoize per context variant (joinVariants struct keyed by soft-delete flag + alias flag, 1/0 ternary so keys stay engine-stable on Adobe CF) - write the memo under a double-checked named lock taken only on memo miss, keeping the steady-state hot path lock-free - return per-call shallow copies carrying the context-correct join, so callers are immune to concurrent re-memoization; every returned element always has a join key, preserving the StructKeyExists guards on the whereClause UPDATE paths - stop writing the legacy join key to the shared struct (no framework reader exists outside the returned arrays) The context-independent metadata fill-ins above the memo (foreignKey/joinKey/tableName/etc.) still write to the shared struct unlocked; they are idempotent and left for a follow-up. New spec ExpandedAssociationsJoinMemoSpec demonstrates the poisoning (all four cases fail against the pre-fix code) and asserts the memo is still populated per variant. Co-Authored-By: Claude Fable 5 Signed-off-by: Peter Amiri * docs(changelog): add [Unreleased] section for $expandedAssociations() JOIN memo fix (round 1) Reviewer A and B converged on a single consensus finding: the fix was missing a CHANGELOG entry. Adds an `## [Unreleased]` section above [4.0.3] with a `### Fixed` bullet calling out both bugs the memo-key change resolves (soft-delete predicate drop on default callers when an includeSoftDeletes call ran first, and alias-context bleed across nested vs top-level self-referential includes) plus the plugin- compatibility callout that the legacy `join` key is no longer written to the shared application-scoped association struct (#2910). Signed-off-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com> * chore: defer changelog entry to campaign consolidation wheels-bot added an [Unreleased] entry on this branch; with a dozen parallel remediation PRs these entries all conflict at the same CHANGELOG location as siblings merge. The entry text is preserved off-branch and will land in one consolidated changelog PR at the end of the remediation campaign. Co-Authored-By: Claude Fable 5 Signed-off-by: Peter Amiri --------- Signed-off-by: Peter Amiri Signed-off-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com> Co-authored-by: Claude Fable 5 Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com> --- vendor/wheels/model/sql.cfc | 40 +++++++-- .../ExpandedAssociationsJoinMemoSpec.cfc | 85 +++++++++++++++++++ 2 files changed, 117 insertions(+), 8 deletions(-) create mode 100644 vendor/wheels/tests/specs/model/ExpandedAssociationsJoinMemoSpec.cfc diff --git a/vendor/wheels/model/sql.cfc b/vendor/wheels/model/sql.cfc index f62ec7895..69c14bc5e 100644 --- a/vendor/wheels/model/sql.cfc +++ b/vendor/wheels/model/sql.cfc @@ -1214,12 +1214,20 @@ component { local.classAssociations[local.name].columnStruct = local.associatedClass.$classData().columnStruct; local.classAssociations[local.name].propertyStruct = local.associatedClass.$classData().propertyStruct; - // create the join string if it hasn't already been done - if (!StructKeyExists(local.classAssociations[local.name], "join")) { + // the JOIN string depends on the calling context (soft-delete handling and whether the + // table needs to be aliased), so memoize it per context variant instead of globally + local.aliasJoin = ListFindNoCase(local.tables, local.classAssociations[local.name].tableName) > 0; + local.joinVariantKey = "sd" & (arguments.includeSoftDeletes ? 1 : 0) & "_alias" & (local.aliasJoin ? 1 : 0); + + // create the join string if it hasn't already been done for this context variant + if ( + !StructKeyExists(local.classAssociations[local.name], "joinVariants") + || !StructKeyExists(local.classAssociations[local.name].joinVariants, local.joinVariantKey) + ) { local.joinType = UCase(ReplaceNoCase(local.classAssociations[local.name].joinType, "outer", "left outer", "one")); local.join = local.joinType & " JOIN " & variables.wheels.class.adapter.$quoteIdentifier(local.classAssociations[local.name].tableName); // alias the table as the association name when joining to itself - if (ListFindNoCase(local.tables, local.classAssociations[local.name].tableName)) { + if (local.aliasJoin) { local.join = variables.wheels.class.adapter.$tableAlias( local.join, local.classAssociations[local.name].pluralizedName @@ -1253,9 +1261,8 @@ component { // alias the table as the association name when joining to itself local.tableName = local.classAssociations[local.name].tableName; - if (ListFindNoCase(local.tables, local.classAssociations[local.name].tableName)) { + if (local.aliasJoin) { local.tableName = local.classAssociations[local.name].pluralizedName; - ; } local.toAppend = ListAppend( local.toAppend, @@ -1283,7 +1290,20 @@ component { ); } - local.classAssociations[local.name].join = local.join & Replace(local.toAppend, ",", " AND ", "all"); + // store the built string under a double-checked named lock so a concurrent first hit + // for another context cannot poison the shared application-scoped association struct; + // the lock is only taken on memo miss so the hot path stays lock-free + lock name="wheelsJoinMemo#application.applicationName#" type="exclusive" timeout="10" { + if (!StructKeyExists(local.classAssociations[local.name], "joinVariants")) { + local.classAssociations[local.name].joinVariants = {}; + } + local.classAssociations[local.name].joinVariants[local.joinVariantKey] = local.join & Replace( + local.toAppend, + ",", + " AND ", + "all" + ); + } } // loop over each character in the delimiter sequence and move up / down the levels as appropriate @@ -1300,8 +1320,12 @@ component { // add table name to the list of used ones so we know to alias it when used a second time local.tables = ListAppend(local.tables, local.classAssociations[local.name].tableName); - // add info to the array that we will return - ArrayAppend(local.rv, local.classAssociations[local.name]); + // add info to the array that we will return; use a per-call shallow copy carrying the + // context-correct join so callers are immune to concurrent re-memoization of other variants + local.entry = StructCopy(local.classAssociations[local.name]); + local.entry.join = local.classAssociations[local.name].joinVariants[local.joinVariantKey]; + StructDelete(local.entry, "joinVariants"); + ArrayAppend(local.rv, local.entry); } return local.rv; } diff --git a/vendor/wheels/tests/specs/model/ExpandedAssociationsJoinMemoSpec.cfc b/vendor/wheels/tests/specs/model/ExpandedAssociationsJoinMemoSpec.cfc new file mode 100644 index 000000000..072bfe1b2 --- /dev/null +++ b/vendor/wheels/tests/specs/model/ExpandedAssociationsJoinMemoSpec.cfc @@ -0,0 +1,85 @@ +component extends="wheels.WheelsTest" { + + function run() { + g = application.wo; + + describe("$expandedAssociations JOIN memoization", () => { + beforeEach(() => { + $resetJoinMemo("author", "posts"); + $resetJoinMemo("post", "author"); + }); + + afterEach(() => { + $resetJoinMemo("author", "posts"); + $resetJoinMemo("post", "author"); + }); + + it("does not serve a soft-delete-free join to a default call (true then false)", () => { + var withDeleted = g.model("author").$expandedAssociations(include = "posts", includeSoftDeletes = true); + expect(withDeleted[1].join).notToInclude("IS NULL"); + + var withoutDeleted = g.model("author").$expandedAssociations( + include = "posts", + includeSoftDeletes = false + ); + expect(withoutDeleted[1].join).toInclude("deletedat"); + expect(withoutDeleted[1].join).toInclude("IS NULL"); + }); + + it("does not serve a soft-delete-filtered join to an includeSoftDeletes call (false then true)", () => { + var withoutDeleted = g.model("author").$expandedAssociations(include = "posts"); + expect(withoutDeleted[1].join).toInclude("IS NULL"); + + var withDeleted = g.model("author").$expandedAssociations(include = "posts", includeSoftDeletes = true); + expect(withDeleted[1].join).notToInclude("IS NULL"); + }); + + it("does not serve an aliased self-join to a top-level include", () => { + // In the nested context c_o_r_e_posts is already in the table list (it is the root + // model's table), so the posts join must be aliased as the pluralized association name. + var nested = g.model("post").$expandedAssociations(include = "author(posts)"); + var aliasedFragment = $aliasedPostsFragment(); + expect(nested[2].join).toInclude(aliasedFragment); + + // In the top-level context there is no table collision, so no alias must be present. + var topLevel = g.model("author").$expandedAssociations(include = "posts"); + expect(topLevel[1].join).notToInclude(aliasedFragment); + expect(topLevel[1].join).notToBe(nested[2].join); + }); + + it("still memoizes the join string per context variant", () => { + var first = g.model("author").$expandedAssociations(include = "posts", includeSoftDeletes = false); + var second = g.model("author").$expandedAssociations(include = "posts", includeSoftDeletes = false); + expect(second[1].join).toBe(first[1].join); + + var assoc = g.model("author").$classData().associations["posts"]; + expect(StructKeyExists(assoc, "joinVariants")).toBeTrue(); + expect(StructCount(assoc.joinVariants)).toBe(1); + expect(StructKeyExists(assoc.joinVariants, "sd0_alias0")).toBeTrue(); + }); + }); + } + + /** + * Deletes both the legacy `join` memo key and the variant-aware `joinVariants` memo key from the + * shared application-scoped association struct so each case starts clean and never leaks a + * poisoned memo into other specs. + */ + private void function $resetJoinMemo(required string modelName, required string association) { + var associations = application.wo.model(arguments.modelName).$classData().associations; + if (StructKeyExists(associations, arguments.association)) { + StructDelete(associations[arguments.association], "join"); + StructDelete(associations[arguments.association], "joinVariants"); + } + } + + /** + * Builds the alias fragment exactly the way $expandedAssociations does (adapter-specific, e.g. + * Oracle uses a space instead of " AS ") so the assertions hold on every database. + */ + private string function $aliasedPostsFragment() { + var adapter = application.wo.model("post").getClass().adapter; + return adapter.$tableAlias(adapter.$quoteIdentifier("c_o_r_e_posts"), "posts"); + } + +} From 68eb33912c5b0f682b4ba8f769106eea90aca0c1 Mon Sep 17 00:00:00 2001 From: Peter Amiri Date: Tue, 9 Jun 2026 23:22:47 -0700 Subject: [PATCH 016/198] fix(events): validate url.format to prevent error-template path traversal (#2900) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix(events): validate url.format to prevent error-template path traversal $getRequestFormat() previously returned url.format verbatim, and $runOnError interpolates that value into the on-disk error-template include path (eventPath/onerror..cfm) guarded only by FileExists. An unvalidated value such as ../../somefile enabled path traversal / local file inclusion of any .cfm on disk during production error rendering (review finding T4, 2026-06-09). Only accept a plain alphanumeric token in the url.format branch — this covers every configured format key (html, xml, json, csv, pdf, xls) and any addFormat() extension — and fall back to the existing html default for anything else (traversal sequences, dots, slashes, empty string). The http_accept branch is untouched: it already only yields configured format keys via the $get("formats") iteration. Adds regression specs to onerrorSpec.cfc that save/restore url.format around each case; verified red (3 failing) pre-fix and green post-fix on Lucee 7 + SQLite. Co-Authored-By: Claude Fable 5 Signed-off-by: Peter Amiri * fix(events): address Reviewer A/B consensus findings (round 1) - CHANGELOG.md: add [Unreleased] Security section documenting the $getRequestFormat LFI fix so operators upgrading know what was patched (#2900). - vendor/wheels/events/EventMethods.cfc: collapse the 8-line security rationale comment before the ReFind guard into a single line per CLAUDE.md's inline-comment convention; the WHY still reads at a glance without bloating the function body. - vendor/wheels/tests/specs/events/onerrorSpec.cfc: collapse the 9-line block comment before the new "T4 LFI" describe into one line, and remove the 6-line /** */ docstring on the $requestFormatFor helper (the helper name + 13-line body are self-describing). Both reviewers converged on these changes; no functional code or test behavior is altered. Signed-off-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com> * chore: defer changelog entry to campaign consolidation wheels-bot added an [Unreleased] entry on this branch; with a dozen parallel remediation PRs these entries all conflict at the same CHANGELOG location as siblings merge. The entry text is preserved off-branch and will land in one consolidated changelog PR at the end of the remediation campaign. Co-Authored-By: Claude Fable 5 Signed-off-by: Peter Amiri --------- Signed-off-by: Peter Amiri Signed-off-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com> Co-authored-by: Claude Fable 5 Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com> --- vendor/wheels/events/EventMethods.cfc | 5 ++- .../wheels/tests/specs/events/onerrorSpec.cfc | 42 +++++++++++++++++++ 2 files changed, 46 insertions(+), 1 deletion(-) diff --git a/vendor/wheels/events/EventMethods.cfc b/vendor/wheels/events/EventMethods.cfc index e5e80a285..cc1fc2f3e 100644 --- a/vendor/wheels/events/EventMethods.cfc +++ b/vendor/wheels/events/EventMethods.cfc @@ -327,7 +327,10 @@ component extends="wheels.Global" implements="wheels.interfaces.events.EventHand public string function $getRequestFormat() { local.rv = "html"; if (StructKeyExists(url, "format")) { - local.rv = url.format; + // Security: reject non-alphanumeric url.format to prevent LFI via the error-template include path in $runOnError. + if (ReFind("^[A-Za-z0-9]+$", url.format)) { + local.rv = url.format; + } } else if ((StructKeyExists(request, "cgi") && StructKeyExists(request.cgi, "http_accept"))){ local.httpAccept = request.cgi.http_accept; local.formats = $get("formats"); diff --git a/vendor/wheels/tests/specs/events/onerrorSpec.cfc b/vendor/wheels/tests/specs/events/onerrorSpec.cfc index b36fc23f7..03be20cf5 100644 --- a/vendor/wheels/tests/specs/events/onerrorSpec.cfc +++ b/vendor/wheels/tests/specs/events/onerrorSpec.cfc @@ -62,6 +62,48 @@ component extends="wheels.WheelsTest" { expect($expectedStatusFor("Wheels.ActionParameterMissing")).toBe(500) }) }) + + // Security regression: $getRequestFormat must reject non-alphanumeric url.format (LFI via $runOnError's error-template include path). + describe("$getRequestFormat rejects unsafe format tokens (T4 LFI)", () => { + + it("coerces ../ traversal tokens to html", () => { + expect($requestFormatFor("../../../wheels/public/layout/_header_simple")).toBe("html") + }) + + it("coerces tokens containing a slash or dot to html", () => { + expect($requestFormatFor("onerror.cfm/../x")).toBe("html") + }) + + it("preserves a valid alphanumeric format", () => { + expect($requestFormatFor("json")).toBe("json") + }) + + it("preserves another valid format", () => { + expect($requestFormatFor("xml")).toBe("xml") + }) + + it("falls back to html for an empty format", () => { + expect($requestFormatFor("")).toBe("html") + }) + }) + } + + private string function $requestFormatFor(required string formatValue) { + var em = CreateObject("component", "wheels.events.EventMethods") + var hadFormat = StructKeyExists(url, "format") + var prior = hadFormat ? url.format : "" + var result = "" + try { + url.format = arguments.formatValue + result = em.$getRequestFormat() + } finally { + if (hadFormat) { + url.format = prior + } else { + StructDelete(url, "format") + } + } + return result } private numeric function $expectedStatusFor(required string wheelsType) { From 370a8074c6ac9c29738ddd30b02b80e11f09da7a Mon Sep 17 00:00:00 2001 From: Peter Amiri Date: Tue, 9 Jun 2026 23:30:23 -0700 Subject: [PATCH 017/198] fix(middleware): enforce database-backed rate limits with portable DDL and purge (#2913) * fix(middleware): enforce database-backed rate limits with portable DDL and purge Database storage in the RateLimiter middleware never actually enforced: $ensureTable used MySQL-only DDL, swallowed every error, and latched tableVerified unconditionally, while $dbIncrement relied on a duplicate-key throw that never fired because store_key only had a plain (non-unique) index. Result: fixedWindow + database did no limiting on MySQL, and fail-closed 429'd ALL traffic on every other engine. Changes (all in vendor/wheels/middleware/RateLimiter.cfc): - $queryOptions(): lazily resolve application.wheels.dataSourceName once and pass it to all rate-limit queries, so database storage works without a default datasource (apps with this.datasource keep working via {}). - $ensureTable(): now boolean and fail-closed-aware. Probes for an existing table first (accepts legacy MySQL tables with the old id column), creates with per-engine types via $detectDatabaseType() (copied from Job.cfc's CI-proven map; SQL Server gets DATETIME, never TIMESTAMP/rowversion; Oracle gets VARCHAR2), re-probes once on create failure (concurrent node), logs errors, and only latches tableVerified on verified success. Failed attempts are throttled so a broken config doesn't run DDL per request but can still recover. - All three $db* strategies honor failOpen via $handleError('table unavailable') when the table can't be verified, instead of throwing per-request DML exceptions. - $dbIncrement(): UPDATE-first counter algorithm (UPDATE, SELECT MAX, INSERT only when no row, re-read once on insert race). Enforces correctly on every engine, with or without a unique index, against old or new table shapes. No UNIQUE index is added on purpose: the sliding window strategy stores one row per request under the same store_key. - $dbPurgeExpired(): throttled global purge of expired rows. Deviation from the triage plan: the cutoff trails Now() by windowSeconds instead of purging at Now(), because the token bucket strategy stores its last-refill time in expires_at - purging at Now() would delete live buckets. A bucket idle longer than windowSeconds is fully refilled, so deleting it is semantically a no-op. - init(): drop the verbatim duplicate windowSeconds/maxRequests validation blocks (merge artifact, zero behavior change). New spec vendor/wheels/tests/specs/middleware/RateLimiterDatabaseSpec.cfc verified RED against the pre-fix code (6/8 fail or error on Lucee 7 + SQLite) and GREEN after (8/8). Behavioral note for the changelog: MySQL apps using storage=database believed they had rate limiting - over-limit traffic now actually gets 429s; non-MySQL apps stop 429ing all traffic. Deferred follow-up (to be filed as an issue): dialect-specific atomic upsert to close the bounded first-insert race undercount, schema redesign with a row-type discriminator, and locking for the DB tokenBucket / slidingWindow read-modify-write races. Co-Authored-By: Claude Fable 5 Signed-off-by: Peter Amiri * docs(web/guides): reword rate-limit table auto-creation to probe-then-create The database storage section claimed the wheels_rate_limits table is auto-created via CREATE TABLE IF NOT EXISTS; the RateLimiter now probes for the table first and creates it with engine-appropriate DDL when missing. Reword the parenthetical to match the actual mechanism. Co-Authored-By: Claude Fable 5 Signed-off-by: Peter Amiri * chore(web): refresh visual baseline(s) (blog) Manually triggered baseline refresh via .github/workflows/refresh-visual-baselines.yml on branch peter/review-ratelimiter-db-enforcement. 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. * chore: retrigger CI after baseline-refresh bot push The refresh-visual-baselines workflow pushed with GITHUB_TOKEN, which does not trigger pull_request workflows, leaving the required Bot PR TDD Gate check unreported on the new head. Co-Authored-By: Claude Fable 5 Signed-off-by: Peter Amiri --------- Signed-off-by: Peter Amiri Co-authored-by: Claude Fable 5 Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- vendor/wheels/middleware/RateLimiter.cfc | 327 ++++++++++++++---- .../middleware/RateLimiterDatabaseSpec.cfc | 241 +++++++++++++ .../v4-0-0/digging-deeper/rate-limiting.mdx | 2 +- web/tests/visual-baselines/blog.png | Bin 131766 -> 140277 bytes 4 files changed, 503 insertions(+), 67 deletions(-) create mode 100644 vendor/wheels/tests/specs/middleware/RateLimiterDatabaseSpec.cfc diff --git a/vendor/wheels/middleware/RateLimiter.cfc b/vendor/wheels/middleware/RateLimiter.cfc index 4375f1b5d..fa4be9ea1 100644 --- a/vendor/wheels/middleware/RateLimiter.cfc +++ b/vendor/wheels/middleware/RateLimiter.cfc @@ -90,22 +90,6 @@ component implements="wheels.middleware.MiddlewareInterface" output="false" { ); } - // A non-positive window is nonsensical and divides by zero in the fixedWindow / tokenBucket math. - if (arguments.windowSeconds <= 0) { - throw( - type = "Wheels.RateLimiter.InvalidConfiguration", - message = "Invalid rate limiter windowSeconds: #arguments.windowSeconds#. Must be a positive number of seconds." - ); - } - - // maxRequests = 0 is a legitimate kill-switch (block everything); negative values are not. - if (arguments.maxRequests < 0) { - throw( - type = "Wheels.RateLimiter.InvalidConfiguration", - message = "Invalid rate limiter maxRequests: #arguments.maxRequests#. Must be zero or greater." - ); - } - variables.maxRequests = arguments.maxRequests; variables.windowSeconds = arguments.windowSeconds; variables.strategy = arguments.strategy; @@ -131,6 +115,16 @@ component implements="wheels.middleware.MiddlewareInterface" output="false" { // Track whether DB table has been verified. variables.tableVerified = false; + // Datasource for database storage is resolved lazily (see $queryOptions()) because + // middleware is typically constructed in config/settings.cfm, before + // application.wheels.dataSourceName is guaranteed to exist. + variables.datasourceResolved = false; + variables.resolvedDatasource = ""; + + // Throttle markers for database housekeeping (epoch seconds via GetTickCount() / 1000). + variables.lastDbPurge = 0; + variables.lastTableAttempt = 0; + return this; } @@ -606,14 +600,20 @@ component implements="wheels.middleware.MiddlewareInterface" output="false" { /** * Database-backed fixed window increment. + * Uses an UPDATE-first algorithm: increment the existing counter row, and only INSERT + * when no row exists yet. This enforces correctly on every engine, with or without a + * unique index, and against tables created by older framework versions. */ private struct function $dbIncrement(required string clientKey, required string storeKey, required numeric resetAt) { - $ensureTable(); + if (!$ensureTable()) { + local.err = $handleError("table unavailable", arguments.clientKey); + return {allowed: local.err.allowed, remaining: local.err.remaining, resetAt: arguments.resetAt}; + } // Kill-switch: maxRequests = 0 blocks every request. Short-circuit before the // INSERT path, which would otherwise allow the first request per window through // because local.allowed is initialised to true and the counter > maxRequests - // check (line below) only fires from the UPDATE branch on subsequent requests. + // check (line below) only fires once a counter row exists. if (variables.maxRequests == 0) { return {allowed: false, remaining: 0, resetAt: arguments.resetAt}; } @@ -622,61 +622,109 @@ component implements="wheels.middleware.MiddlewareInterface" output="false" { local.remaining = variables.maxRequests; try { - // Try to insert a new row. - QueryExecute( - "INSERT INTO wheels_rate_limits (store_key, counter, expires_at) VALUES (:storeKey, 1, :expiresAt)", - {storeKey: {value: arguments.storeKey, cfsqltype: "cf_sql_varchar"}, expiresAt: {value: DateAdd("s", variables.windowSeconds, Now()), cfsqltype: "cf_sql_timestamp"}} - ); - local.remaining = variables.maxRequests - 1; - } catch (any e) { - // Row exists — update the counter. - try { - local.qUpdate = QueryExecute( - "UPDATE wheels_rate_limits SET counter = counter + 1 WHERE store_key = :storeKey", - {storeKey: {value: arguments.storeKey, cfsqltype: "cf_sql_varchar"}} - ); - // Read current count. - local.qCount = QueryExecute( - "SELECT counter FROM wheels_rate_limits WHERE store_key = :storeKey", - {storeKey: {value: arguments.storeKey, cfsqltype: "cf_sql_varchar"}} - ); - if (local.qCount.recordCount && local.qCount.counter > variables.maxRequests) { - local.allowed = false; - local.remaining = 0; - } else if (local.qCount.recordCount) { - local.remaining = variables.maxRequests - local.qCount.counter; + $dbPurgeExpired(); + + local.count = $dbUpdateAndCount(arguments.storeKey); + if (local.count == -1) { + // No counter row for this window yet — create it. + if ($dbTryInsert(arguments.storeKey)) { + local.count = 1; + } else { + // Lost the first-insert race to a concurrent request — re-read once. + local.count = $dbUpdateAndCount(arguments.storeKey); } - } catch (any e2) { - local.err = $handleError("DB error", arguments.clientKey); - local.allowed = local.err.allowed; - local.remaining = local.err.remaining; } + if (local.count == -1) { + // Still no row — surface as a DB error via the catch below. + throw( + type = "Wheels.RateLimiter.StoreUnavailable", + message = "The wheels_rate_limits counter row could not be created or read." + ); + } + + if (local.count > variables.maxRequests) { + local.allowed = false; + local.remaining = 0; + } else { + local.remaining = variables.maxRequests - local.count; + } + } catch (any e) { + local.err = $handleError("DB error", arguments.clientKey); + local.allowed = local.err.allowed; + local.remaining = local.err.remaining; } return {allowed: local.allowed, remaining: local.remaining, resetAt: arguments.resetAt}; } + /** + * Increment the counter for a store key and return the resulting count. + * Returns -1 when no counter row exists yet (MAX() over zero rows returns a single + * row with NULL, so IsNumeric — not recordCount — is the reliable "no row" signal). + */ + private numeric function $dbUpdateAndCount(required string storeKey) { + QueryExecute( + "UPDATE wheels_rate_limits SET counter = counter + 1 WHERE store_key = :storeKey", + {storeKey: {value: arguments.storeKey, cfsqltype: "cf_sql_varchar"}}, + $queryOptions() + ); + local.qCount = QueryExecute( + "SELECT MAX(counter) AS counter FROM wheels_rate_limits WHERE store_key = :storeKey", + {storeKey: {value: arguments.storeKey, cfsqltype: "cf_sql_varchar"}}, + $queryOptions() + ); + if (!IsNumeric(local.qCount.counter)) { + return -1; + } + return local.qCount.counter; + } + + /** + * Insert the first counter row for a store key. + * Returns false when the insert fails (e.g. losing a race against a concurrent + * request when a unique index exists) so the caller can re-read instead. + */ + private boolean function $dbTryInsert(required string storeKey) { + try { + QueryExecute( + "INSERT INTO wheels_rate_limits (store_key, counter, expires_at) VALUES (:storeKey, 1, :expiresAt)", + {storeKey: {value: arguments.storeKey, cfsqltype: "cf_sql_varchar"}, expiresAt: {value: DateAdd("s", variables.windowSeconds, Now()), cfsqltype: "cf_sql_timestamp"}}, + $queryOptions() + ); + return true; + } catch (any e) { + return false; + } + } + /** * Database-backed sliding window check. */ private struct function $dbSlidingWindow(required string clientKey, required numeric now, required numeric windowStart, required numeric resetAt) { - $ensureTable(); + if (!$ensureTable()) { + local.err = $handleError("table unavailable", arguments.clientKey); + return {allowed: local.err.allowed, remaining: local.err.remaining, resetAt: arguments.resetAt}; + } local.allowed = true; local.remaining = variables.maxRequests; local.expiresAt = DateAdd("s", variables.windowSeconds, Now()); try { + $dbPurgeExpired(); + // Clean expired entries for this client. QueryExecute( "DELETE FROM wheels_rate_limits WHERE store_key = :clientKey AND expires_at < :now", - {clientKey: {value: arguments.clientKey, cfsqltype: "cf_sql_varchar"}, now: {value: Now(), cfsqltype: "cf_sql_timestamp"}} + {clientKey: {value: arguments.clientKey, cfsqltype: "cf_sql_varchar"}, now: {value: Now(), cfsqltype: "cf_sql_timestamp"}}, + $queryOptions() ); // Count current entries. local.qCount = QueryExecute( "SELECT COUNT(*) AS cnt FROM wheels_rate_limits WHERE store_key = :clientKey", - {clientKey: {value: arguments.clientKey, cfsqltype: "cf_sql_varchar"}} + {clientKey: {value: arguments.clientKey, cfsqltype: "cf_sql_varchar"}}, + $queryOptions() ); if (local.qCount.cnt >= variables.maxRequests) { @@ -686,7 +734,8 @@ component implements="wheels.middleware.MiddlewareInterface" output="false" { // Insert a new timestamp entry. QueryExecute( "INSERT INTO wheels_rate_limits (store_key, counter, expires_at) VALUES (:clientKey, 1, :expiresAt)", - {clientKey: {value: arguments.clientKey, cfsqltype: "cf_sql_varchar"}, expiresAt: {value: local.expiresAt, cfsqltype: "cf_sql_timestamp"}} + {clientKey: {value: arguments.clientKey, cfsqltype: "cf_sql_varchar"}, expiresAt: {value: local.expiresAt, cfsqltype: "cf_sql_timestamp"}}, + $queryOptions() ); local.remaining = variables.maxRequests - local.qCount.cnt - 1; } @@ -703,15 +752,21 @@ component implements="wheels.middleware.MiddlewareInterface" output="false" { * Database-backed token bucket check. */ private struct function $dbTokenBucket(required string clientKey, required numeric now, required numeric refillRate, required numeric resetAt) { - $ensureTable(); + if (!$ensureTable()) { + local.err = $handleError("table unavailable", arguments.clientKey); + return {allowed: local.err.allowed, remaining: local.err.remaining, resetAt: arguments.resetAt}; + } local.allowed = true; local.remaining = variables.maxRequests; try { + $dbPurgeExpired(); + local.qBucket = QueryExecute( "SELECT counter, expires_at FROM wheels_rate_limits WHERE store_key = :clientKey", - {clientKey: {value: arguments.clientKey, cfsqltype: "cf_sql_varchar"}} + {clientKey: {value: arguments.clientKey, cfsqltype: "cf_sql_varchar"}}, + $queryOptions() ); if (local.qBucket.recordCount) { @@ -732,7 +787,8 @@ component implements="wheels.middleware.MiddlewareInterface" output="false" { tokens: {value: Int(local.currentTokens), cfsqltype: "cf_sql_integer"}, now: {value: Now(), cfsqltype: "cf_sql_timestamp"}, clientKey: {value: arguments.clientKey, cfsqltype: "cf_sql_varchar"} - } + }, + $queryOptions() ); } } else { @@ -744,7 +800,8 @@ component implements="wheels.middleware.MiddlewareInterface" output="false" { clientKey: {value: arguments.clientKey, cfsqltype: "cf_sql_varchar"}, tokens: {value: local.remaining, cfsqltype: "cf_sql_integer"}, now: {value: Now(), cfsqltype: "cf_sql_timestamp"} - } + }, + $queryOptions() ); } } catch (any e) { @@ -757,29 +814,167 @@ component implements="wheels.middleware.MiddlewareInterface" output="false" { } /** - * Auto-create the wheels_rate_limits table if it doesn't exist. + * Resolve query options for database storage. The Wheels datasource is resolved + * lazily (not in init()) because middleware is constructed in config/settings.cfm + * before application.wheels.dataSourceName may be set. Apps relying on a default + * datasource (this.datasource in Application.cfc) keep working: when nothing + * resolves, an empty options struct preserves the previous behavior. */ - private void function $ensureTable() { - if (variables.tableVerified) { + private struct function $queryOptions() { + if (!variables.datasourceResolved) { + try { + if (StructKeyExists(application, "wheels") && StructKeyExists(application.wheels, "dataSourceName")) { + variables.resolvedDatasource = application.wheels.dataSourceName; + variables.datasourceResolved = true; + } + } catch (any e) { + // No application scope available — fall through to the default datasource. + } + } + if (Len(variables.resolvedDatasource)) { + return {datasource: variables.resolvedDatasource}; + } + return {}; + } + + /** + * Detect the database type from the actual datasource via JDBC metadata. + * Returns: "oracle", "postgresql", "h2", "mysql", "sqlserver", "sqlite", or "default". + */ + private string function $detectDatabaseType() { + try { + local.options = $queryOptions(); + if (StructKeyExists(local.options, "datasource")) { + cfdbinfo(type = "version", datasource = "#local.options.datasource#", name = "local.info"); + } else { + cfdbinfo(type = "version", name = "local.info"); + } + local.product = local.info.database_productname; + if (FindNoCase("oracle", local.product)) return "oracle"; + if (FindNoCase("postgre", local.product)) return "postgresql"; + if (FindNoCase("h2", local.product)) return "h2"; + if (FindNoCase("mysql", local.product) || FindNoCase("mariadb", local.product)) return "mysql"; + if (FindNoCase("sql server", local.product)) return "sqlserver"; + if (FindNoCase("sqlite", local.product)) return "sqlite"; + } catch (any e) { + // cfdbinfo not available — fall through to default + } + return "default"; + } + + /** + * Throttled global purge of expired rows so the table doesn't grow without bound. + * The cutoff trails Now() by windowSeconds because the token bucket strategy stores + * its last-refill time in expires_at: a bucket idle longer than windowSeconds is + * fully refilled, so deleting it is semantically a no-op, while purging at Now() + * would wipe live buckets. For fixed/sliding window rows the extra lag is harmless. + */ + private void function $dbPurgeExpired() { + local.nowSeconds = GetTickCount() / 1000; + if ((local.nowSeconds - variables.lastDbPurge) < variables.cleanupThrottleSeconds) { return; } + variables.lastDbPurge = local.nowSeconds; try { QueryExecute( - "CREATE TABLE IF NOT EXISTS wheels_rate_limits ( - id INT AUTO_INCREMENT PRIMARY KEY, - store_key VARCHAR(255) NOT NULL, - counter INT DEFAULT 1, - expires_at TIMESTAMP, - INDEX idx_store_key (store_key), - INDEX idx_expires_at (expires_at) - )" + "DELETE FROM wheels_rate_limits WHERE expires_at < :cutoff", + {cutoff: {value: DateAdd("s", -variables.windowSeconds, Now()), cfsqltype: "cf_sql_timestamp"}}, + $queryOptions() ); } catch (any e) { - // Table may already exist or DB doesn't support IF NOT EXISTS — that's fine. + // Best-effort purge — never block the rate limit check. + } + } + + /** + * Auto-create the wheels_rate_limits table if it doesn't exist, using + * database-appropriate column types. Returns true only when the table is + * verified to exist (pre-existing tables from older framework versions are + * accepted as-is). Failed creation attempts are throttled so a permanently + * broken configuration doesn't run DDL on every request, but the limiter can + * still recover once the database becomes available. + * + * NOTE: store_key intentionally has a plain (non-unique) index — the sliding + * window strategy stores one row per request under the same store_key. + */ + private boolean function $ensureTable() { + if (variables.tableVerified) { + return true; + } + + // Throttle re-attempts after a failure so a broken configuration doesn't + // probe and run DDL on every request. + local.nowSeconds = GetTickCount() / 1000; + if (variables.lastTableAttempt > 0 && (local.nowSeconds - variables.lastTableAttempt) < variables.cleanupThrottleSeconds) { + return false; + } + + // Probe for an existing table. This also accepts tables created by older + // framework versions (extra columns like the legacy id column are fine). + try { + QueryExecute("SELECT counter FROM wheels_rate_limits WHERE 1=0", {}, $queryOptions()); + variables.tableVerified = true; + return true; + } catch (any e) { + // Table doesn't exist (or isn't reachable) — try to create it below. } - variables.tableVerified = true; + variables.lastTableAttempt = local.nowSeconds; + + try { + // Use database-appropriate types (same map as wheels.Job's wheels_jobs table). + // SQL Server must get DATETIME — TIMESTAMP means rowversion there and + // rejects explicit inserts. + local.dbType = $detectDatabaseType(); + if (local.dbType == "oracle") { + local.varcharType = "VARCHAR2"; + local.datetimeType = "TIMESTAMP"; + } else if (local.dbType == "postgresql") { + local.varcharType = "VARCHAR"; + local.datetimeType = "TIMESTAMP"; + } else if (local.dbType == "h2") { + local.varcharType = "VARCHAR"; + local.datetimeType = "TIMESTAMP"; + } else { + local.varcharType = "VARCHAR"; + local.datetimeType = "DATETIME"; + } + + QueryExecute(" + CREATE TABLE wheels_rate_limits ( + store_key #local.varcharType#(255) NOT NULL, + counter INT, + expires_at #local.datetimeType# + ) + ", {}, $queryOptions()); + + // Indexes are optional — don't fail table creation if they can't be created. + try { + QueryExecute("CREATE INDEX idx_wrl_store_key ON wheels_rate_limits (store_key)", {}, $queryOptions()); + QueryExecute("CREATE INDEX idx_wrl_expires_at ON wheels_rate_limits (expires_at)", {}, $queryOptions()); + } catch (any indexError) { + } + + writeLog(text = "Auto-created wheels_rate_limits table", type = "information", file = "wheels_ratelimiter"); + variables.tableVerified = true; + return true; + } catch (any createError) { + // A concurrent node or thread may have created the table between our probe + // and the CREATE — re-probe once before reporting failure. + try { + QueryExecute("SELECT counter FROM wheels_rate_limits WHERE 1=0", {}, $queryOptions()); + variables.tableVerified = true; + return true; + } catch (any reprobeError) { + } + writeLog( + text = "Failed to auto-create wheels_rate_limits table: #createError.message#", + type = "error", + file = "wheels_ratelimiter" + ); + return false; + } } } diff --git a/vendor/wheels/tests/specs/middleware/RateLimiterDatabaseSpec.cfc b/vendor/wheels/tests/specs/middleware/RateLimiterDatabaseSpec.cfc new file mode 100644 index 000000000..e1a3278a8 --- /dev/null +++ b/vendor/wheels/tests/specs/middleware/RateLimiterDatabaseSpec.cfc @@ -0,0 +1,241 @@ +/** + * Tests for RateLimiter middleware with storage="database". + * Covers enforcement for all three strategies, single-row counter accumulation, + * portable table auto-creation, expired-row purging, and failOpen behavior + * when the table is unavailable. + * + * The in-memory storage tests live in RateLimiterSpec.cfc. + */ +component extends="wheels.WheelsTest" { + + function run() { + + describe("RateLimiter database storage", function() { + + beforeEach(function() { + $cleanRateLimitRows(); + }); + + afterEach(function() { + $cleanRateLimitRows(); + }); + + it("fixedWindow + database enforces the limit", function() { + var limiter = new wheels.middleware.RateLimiter( + maxRequests = 3, + windowSeconds = 3600, + storage = "database" + ); + var nextFn = function(req) { + return "passed"; + }; + var clientKey = "rl-db-fixed-#CreateUUID()#"; + + var result1 = limiter.handle(request = {remoteAddr: clientKey}, next = nextFn); + var result2 = limiter.handle(request = {remoteAddr: clientKey}, next = nextFn); + var result3 = limiter.handle(request = {remoteAddr: clientKey}, next = nextFn); + var result4 = limiter.handle(request = {remoteAddr: clientKey}, next = nextFn); + + expect(result1).toBe("passed"); + expect(result2).toBe("passed"); + expect(result3).toBe("passed"); + expect(result4).toInclude("Rate limit exceeded"); + }); + + it("counter accumulates in a single row", function() { + var limiter = new wheels.middleware.RateLimiter( + maxRequests = 10, + windowSeconds = 3600, + storage = "database" + ); + var nextFn = function(req) { + return "passed"; + }; + var clientKey = "rl-db-row-#CreateUUID()#"; + + limiter.handle(request = {remoteAddr: clientKey}, next = nextFn); + limiter.handle(request = {remoteAddr: clientKey}, next = nextFn); + + // Fixed window store keys are ":". + var qRows = QueryExecute( + "SELECT COUNT(*) AS rowTotal, MAX(counter) AS maxCounter FROM wheels_rate_limits WHERE store_key LIKE :pattern", + {pattern: {value: clientKey & ":%", cfsqltype: "cf_sql_varchar"}}, + {datasource: application.wheels.dataSourceName} + ); + expect(qRows.rowTotal).toBe(1); + expect(qRows.maxCounter).toBe(2); + }); + + it("$ensureTable creates the table and reports success", function() { + var limiter = new wheels.middleware.RateLimiter( + maxRequests = 5, + windowSeconds = 60, + storage = "database" + ); + prepareMock(limiter); + makePublic(limiter, "$ensureTable"); + + expect(limiter.$ensureTable()).toBeTrue(); + + // The table must really exist now — a direct probe should not throw. + var qProbe = QueryExecute( + "SELECT counter FROM wheels_rate_limits WHERE 1=0", + {}, + {datasource: application.wheels.dataSourceName} + ); + expect(qProbe.recordCount).toBe(0); + }); + + it("purges expired rows", function() { + // Make sure the table exists before inserting directly. + var setupLimiter = new wheels.middleware.RateLimiter( + maxRequests = 5, + windowSeconds = 60, + storage = "database" + ); + prepareMock(setupLimiter); + makePublic(setupLimiter, "$ensureTable"); + expect(setupLimiter.$ensureTable()).toBeTrue(); + + var staleKey = "rl-db-stale-#CreateUUID()#"; + QueryExecute( + "INSERT INTO wheels_rate_limits (store_key, counter, expires_at) VALUES (:storeKey, 1, :expiresAt)", + { + storeKey: {value: staleKey, cfsqltype: "cf_sql_varchar"}, + expiresAt: {value: DateAdd("d", -1, Now()), cfsqltype: "cf_sql_timestamp"} + }, + {datasource: application.wheels.dataSourceName} + ); + + // A fresh limiter (lastDbPurge = 0) purges on its first request. + var limiter = new wheels.middleware.RateLimiter( + maxRequests = 5, + windowSeconds = 60, + storage = "database" + ); + var nextFn = function(req) { + return "passed"; + }; + limiter.handle(request = {remoteAddr: "rl-db-purger-#CreateUUID()#"}, next = nextFn); + + var qStale = QueryExecute( + "SELECT COUNT(*) AS rowTotal FROM wheels_rate_limits WHERE store_key = :storeKey", + {storeKey: {value: staleKey, cfsqltype: "cf_sql_varchar"}}, + {datasource: application.wheels.dataSourceName} + ); + expect(qStale.rowTotal).toBe(0); + }); + + it("slidingWindow + database enforces the limit", function() { + // Also a regression guard: sliding window stores one row per request + // under the same store_key, so the fix must NOT add a UNIQUE index. + var limiter = new wheels.middleware.RateLimiter( + maxRequests = 2, + windowSeconds = 60, + strategy = "slidingWindow", + storage = "database" + ); + var nextFn = function(req) { + return "passed"; + }; + var clientKey = "rl-db-sliding-#CreateUUID()#"; + + var result1 = limiter.handle(request = {remoteAddr: clientKey}, next = nextFn); + var result2 = limiter.handle(request = {remoteAddr: clientKey}, next = nextFn); + var result3 = limiter.handle(request = {remoteAddr: clientKey}, next = nextFn); + + expect(result1).toBe("passed"); + expect(result2).toBe("passed"); + expect(result3).toInclude("Rate limit exceeded"); + }); + + it("tokenBucket + database enforces the limit", function() { + var limiter = new wheels.middleware.RateLimiter( + maxRequests = 2, + windowSeconds = 60, + strategy = "tokenBucket", + storage = "database" + ); + var nextFn = function(req) { + return "passed"; + }; + var clientKey = "rl-db-bucket-#CreateUUID()#"; + + var result1 = limiter.handle(request = {remoteAddr: clientKey}, next = nextFn); + var result2 = limiter.handle(request = {remoteAddr: clientKey}, next = nextFn); + var result3 = limiter.handle(request = {remoteAddr: clientKey}, next = nextFn); + + expect(result1).toBe("passed"); + expect(result2).toBe("passed"); + expect(result3).toInclude("Rate limit exceeded"); + }); + + it("fails closed when the table is unavailable and failOpen is false", function() { + var limiter = new wheels.middleware.RateLimiter( + maxRequests = 5, + windowSeconds = 60, + storage = "database", + failOpen = false + ); + prepareMock(limiter); + limiter.$property(propertyName = "datasourceResolved", propertyScope = "variables", mock = true); + limiter.$property(propertyName = "resolvedDatasource", propertyScope = "variables", mock = "wheels_bogus_dsn_#Left(CreateUUID(), 8)#"); + + var nextFn = function(req) { + return "passed"; + }; + var state = {blocked: "", errored: false}; + try { + state.blocked = limiter.handle(request = {remoteAddr: "rl-db-closed-#CreateUUID()#"}, next = nextFn); + } catch (any e) { + state.errored = true; + } + + expect(state.errored).toBeFalse(); + expect(state.blocked).toInclude("Rate limit exceeded"); + }); + + it("fails open when the table is unavailable and failOpen is true", function() { + var limiter = new wheels.middleware.RateLimiter( + maxRequests = 5, + windowSeconds = 60, + storage = "database", + failOpen = true + ); + prepareMock(limiter); + limiter.$property(propertyName = "datasourceResolved", propertyScope = "variables", mock = true); + limiter.$property(propertyName = "resolvedDatasource", propertyScope = "variables", mock = "wheels_bogus_dsn_#Left(CreateUUID(), 8)#"); + + var nextFn = function(req) { + return "passed"; + }; + var state = {result: "", errored: false}; + try { + state.result = limiter.handle(request = {remoteAddr: "rl-db-open-#CreateUUID()#"}, next = nextFn); + } catch (any e) { + state.errored = true; + } + + expect(state.errored).toBeFalse(); + expect(state.result).toBe("passed"); + }); + }); + } + + /** + * Remove every row from wheels_rate_limits so tests are isolated. + * The table may not exist yet on a clean database — that's fine. + */ + private void function $cleanRateLimitRows() { + try { + QueryExecute( + "DELETE FROM wheels_rate_limits", + {}, + {datasource: application.wheels.dataSourceName} + ); + } catch (any e) { + // Table doesn't exist yet — nothing to clean. + } + } + +} diff --git a/web/sites/guides/src/content/docs/v4-0-0/digging-deeper/rate-limiting.mdx b/web/sites/guides/src/content/docs/v4-0-0/digging-deeper/rate-limiting.mdx index 7b03b9c55..09ed2f53f 100644 --- a/web/sites/guides/src/content/docs/v4-0-0/digging-deeper/rate-limiting.mdx +++ b/web/sites/guides/src/content/docs/v4-0-0/digging-deeper/rate-limiting.mdx @@ -102,7 +102,7 @@ set(middleware = [ ``` -The middleware auto-creates a `wheels_rate_limits` table on first use (via `CREATE TABLE IF NOT EXISTS`). All nodes read and write to the same table, so the budget is shared. Database storage is slower per request than memory — use it only when you need shared state. +The middleware auto-creates a `wheels_rate_limits` table on first use (it probes for the table and creates it with engine-appropriate DDL when missing). All nodes read and write to the same table, so the budget is shared. Database storage is slower per request than memory — use it only when you need shared state. ## Custom key function diff --git a/web/tests/visual-baselines/blog.png b/web/tests/visual-baselines/blog.png index 4d581cb6e4589ac50ca3a0990f679c157acf0fb6..ea0dffe861396ed715173a5623b0b539523c66da 100644 GIT binary patch literal 140277 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≦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 Date: Wed, 10 Jun 2026 00:05:33 -0700 Subject: [PATCH 018/198] fix(dispatch): onapplicationstart else-if chain and debug-bar output encoding (#2917) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Two findings from the 2026-06-09 framework review (events-bootstrap-debugbar package): - DC1: commit 4cda23e79 accidentally chained engine detection to the reloadPassword carryover block with else-if in onapplicationstart.cfc. If the carryover branch ever fired, engine detection was skipped and the serverVersion deref on the next line would throw. Currently dormant (the branch is unreachable in shipped flows) but a latent landmine — drop the else so engine detection always runs. - DC10 / SEC-7: the dev debug bar reflected client-controlled values (params.key, param names, cgi.query_string/path_info, controller/action/ route, and the query-string-bearing baseReloadURL hrefs) into HTML without encoding — reflected XSS on every dev page and, via allowIPBasedDebugAccess, in non-dev environments for allowlisted admins. Param values were already encoded; encode the rest with EncodeForHTML / EncodeForHTMLAttribute. New spec events/debugBarEncodingSpec.cfc renders debug.cfm with script-tag payloads in params.key and a param name; verified red against the pre-fix template (417) and green after (200) on Lucee 7 + SQLite, along with the rest of the events spec area (31 pass / 0 fail). Signed-off-by: Peter Amiri Co-authored-by: Claude Fable 5 --- vendor/wheels/events/onapplicationstart.cfc | 5 +- vendor/wheels/events/onrequestend/debug.cfm | 18 +++--- .../specs/events/debugBarEncodingSpec.cfc | 62 +++++++++++++++++++ 3 files changed, 74 insertions(+), 11 deletions(-) create mode 100644 vendor/wheels/tests/specs/events/debugBarEncodingSpec.cfc diff --git a/vendor/wheels/events/onapplicationstart.cfc b/vendor/wheels/events/onapplicationstart.cfc index 18082e6ea..7efbdf946 100644 --- a/vendor/wheels/events/onapplicationstart.cfc +++ b/vendor/wheels/events/onapplicationstart.cfc @@ -31,9 +31,10 @@ component { application.$wheels.reloadPassword = local.oldReloadPassword; } - // Check and store server engine name, throw error if using a version that we don't support. - else if (StructKeyExists(server, "boxlang")) { + // Note: this must NOT be chained to the reloadPassword carryover above with `else` — + // engine detection has to run unconditionally or serverVersion is never set. + if (StructKeyExists(server, "boxlang")) { application.$wheels.serverName = "BoxLang"; application.$wheels.serverVersion = server.boxlang.version; } else if (StructKeyExists(server, "lucee")) { diff --git a/vendor/wheels/events/onrequestend/debug.cfm b/vendor/wheels/events/onrequestend/debug.cfm index 8329b43f8..7e401cb81 100644 --- a/vendor/wheels/events/onrequestend/debug.cfm +++ b/vendor/wheels/events/onrequestend/debug.cfm @@ -140,7 +140,7 @@ OR (StructKeyExists(url, "format") AND ListFindNoCase("json,xml,csv,pdf", url.fo @@ -186,7 +186,7 @@ OR (StructKeyExists(url, "format") AND ListFindNoCase("json,xml,csv,pdf", url.fo - + @@ -207,20 +207,20 @@ OR (StructKeyExists(url, "format") AND ListFindNoCase("json,xml,csv,pdf", url.fo
Route
-
#request.wheels.params.route#
+
#EncodeForHTML(request.wheels.params.route)#
Controller
-
#request.wheels.params.controller#
+
#EncodeForHTML(request.wheels.params.controller)#
Action
-
#request.wheels.params.action#
+
#EncodeForHTML(request.wheels.params.action)#
Key
-
#request.wheels.params.key#
+
#EncodeForHTML(request.wheels.params.key)#
HTTP Method
#UCase(cgi.request_method)#
URL
-
#cgi.server_name##cgi.path_info#?#cgi.query_string#
+
#EncodeForHTML(cgi.server_name)##EncodeForHTML(cgi.path_info)#?#EncodeForHTML(cgi.query_string)#
Application
#application.applicationName#
Data Source
@@ -274,7 +274,7 @@ OR (StructKeyExists(url, "format") AND ListFindNoCase("json,xml,csv,pdf", url.fo - #local.paramsList[local.pIdx].name# + #EncodeForHTML(local.paramsList[local.pIdx].name)# #EncodeForHTML(local.paramsList[local.pIdx].value)# #local.paramsList[local.pIdx].type# @@ -306,7 +306,7 @@ OR (StructKeyExists(url, "format") AND ListFindNoCase("json,xml,csv,pdf", url.fo — - #capitalize(local.ei)# + #capitalize(local.ei)# diff --git a/vendor/wheels/tests/specs/events/debugBarEncodingSpec.cfc b/vendor/wheels/tests/specs/events/debugBarEncodingSpec.cfc new file mode 100644 index 000000000..0cbf69a60 --- /dev/null +++ b/vendor/wheels/tests/specs/events/debugBarEncodingSpec.cfc @@ -0,0 +1,62 @@ +component extends="wheels.WheelsTest" { + + function run() { + describe("debug.cfm output encoding", () => { + // The dev debug bar reflects client-controlled request data (params.key, + // param names, controller/action/route and the query string) into its + // HTML. These must be HTML-encoded or any link a developer clicks becomes + // reflected XSS on every dev page — and, via allowIPBasedDebugAccess, + // in non-dev environments for allowlisted admins as well. Param VALUES + // were already encoded; this locks in encoding for params.key and param + // NAMES (the cgi.query_string site is fixed in the same way but cannot + // be exercised here because the CGI scope is read-only in a spec). + it("HTML-encodes params.key and param names in the debug bar", () => { + var keyPayload = '">'; + var namePayload = ""; + var priorReqWheels = StructKeyExists(request, "wheels") ? Duplicate(request.wheels) : {}; + + try { + if (!StructKeyExists(request, "wheels")) { + request.wheels = {}; + } + request.wheels.execution = {total = 0}; + request.wheels.params = {controller = "wheels", action = "tests", route = ""}; + request.wheels.params.key = keyPayload; + request.wheels.params[namePayload] = "benign-value"; + + // debug.cfm bails out (cfexit) when url.format is one of + // json/xml/csv/pdf so it never breaks an API response. The + // test runner is hit with format=json — clear it for the + // duration of the include so the template renders. + var hadUrlFormat = StructKeyExists(url, "format"); + var priorUrlFormat = hadUrlFormat ? url.format : ""; + if (hadUrlFormat) { + StructDelete(url, "format"); + } + + var output = ""; + try { + output = application.wo.$includeAndReturnOutput($template = "/wheels/events/onrequestend/debug.cfm"); + } finally { + if (hadUrlFormat) { + url.format = priorUrlFormat; + } + } + + expect(output contains " + + + + + + + + +
@@ -517,53 +475,7 @@ OR (StructKeyExists(url, "format") AND ListFindNoCase("json,xml,csv,pdf", url.fo
- + - +#ReReplace(local.wdbHtml, "(?m)>\s+<", "><", "all")# diff --git a/vendor/wheels/public/assets/css/debugbar.css b/vendor/wheels/public/assets/css/debugbar.css new file mode 100644 index 000000000..0c34410bb --- /dev/null +++ b/vendor/wheels/public/assets/css/debugbar.css @@ -0,0 +1,41 @@ +#wheels-debugbar *{box-sizing:border-box;margin:0;padding:0;} +#wheels-debugbar{position:fixed;bottom:0;left:0;right:0;z-index:99999;font-size:13px;line-height:1.4;} +#wheels-debugbar .wdb-bar{display:flex;align-items:center;background:#1e1e2e;color:#cdd6f4;height:36px;padding:0 8px;gap:2px;border-top:1px solid #45475a;user-select:none;} +#wheels-debugbar .wdb-bar a,#wheels-debugbar .wdb-bar span{color:#cdd6f4;text-decoration:none;} +#wheels-debugbar .wdb-tab{display:flex;align-items:center;gap:5px;padding:0 10px;height:36px;cursor:pointer;border:none;background:none;color:#cdd6f4;font-size:12px;font-family:inherit;white-space:nowrap;transition:background .15s;} +#wheels-debugbar .wdb-tab:hover{background:#313244;} +#wheels-debugbar .wdb-tab.active{background:#313244;color:#89b4fa;border-top:2px solid #89b4fa;padding-top:2px;} +#wheels-debugbar .wdb-tab svg{width:14px;height:14px;fill:currentColor;flex-shrink:0;} +#wheels-debugbar .wdb-badge{display:inline-flex;align-items:center;justify-content:center;min-width:18px;height:18px;padding:0 5px;border-radius:9px;font-size:10px;font-weight:700;line-height:1;} +#wheels-debugbar .wdb-badge-green{background:#28a74533;color:#a6e3a1;} +#wheels-debugbar .wdb-badge-yellow{background:#ffc10733;color:#f9e2af;} +#wheels-debugbar .wdb-badge-red{background:#dc354533;color:#f38ba8;} +#wheels-debugbar .wdb-badge-blue{background:#89b4fa33;color:#89b4fa;} +#wheels-debugbar .wdb-sep{width:1px;height:20px;background:#45475a;margin:0 4px;} +#wheels-debugbar .wdb-spacer{flex:1;} +#wheels-debugbar .wdb-panel{display:none;position:fixed;bottom:36px;left:0;right:0;max-height:50vh;background:#1e1e2e;border-top:1px solid #45475a;overflow-y:auto;color:#cdd6f4;padding:0;} +#wheels-debugbar .wdb-panel.open{display:block;} +#wheels-debugbar .wdb-panel-header{display:flex;align-items:center;justify-content:space-between;padding:10px 16px;border-bottom:1px solid #313244;position:sticky;top:0;background:#1e1e2e;z-index:1;} +#wheels-debugbar .wdb-panel-header h3{font-size:14px;font-weight:600;color:#cdd6f4;} +#wheels-debugbar .wdb-panel-body{padding:12px 16px;} +#wheels-debugbar .wdb-table{width:100%;border-collapse:collapse;} +#wheels-debugbar .wdb-table th{text-align:left;padding:6px 12px;font-size:11px;font-weight:600;color:#a6adc8;text-transform:uppercase;letter-spacing:.5px;background:#181825;border-bottom:1px solid #313244;} +#wheels-debugbar .wdb-table td{padding:6px 12px;border-bottom:1px solid #313244;font-size:12px;vertical-align:top;} +#wheels-debugbar .wdb-table tr:hover td{background:#31324433;} +#wheels-debugbar .wdb-kv{display:grid;grid-template-columns:180px 1fr;gap:0;} +#wheels-debugbar .wdb-kv dt{padding:6px 12px;font-weight:600;color:#a6adc8;font-size:12px;border-bottom:1px solid #313244;} +#wheels-debugbar .wdb-kv dd{padding:6px 12px;font-size:12px;border-bottom:1px solid #313244;word-break:break-word;} +#wheels-debugbar .wdb-kv dd code{font-family:'SF Mono',SFMono-Regular,Menlo,Consolas,monospace;background:#313244;padding:1px 5px;border-radius:3px;font-size:11px;} +#wheels-debugbar .wdb-timing-row{display:flex;align-items:center;gap:8px;margin-bottom:6px;} +#wheels-debugbar .wdb-timing-label{width:100px;font-size:12px;color:#a6adc8;text-align:right;} +#wheels-debugbar .wdb-timing-bar-bg{flex:1;height:20px;background:#313244;border-radius:3px;overflow:hidden;position:relative;} +#wheels-debugbar .wdb-timing-bar{height:100%;border-radius:3px;display:flex;align-items:center;padding-left:6px;font-size:10px;font-weight:600;color:#1e1e2e;min-width:30px;} +#wheels-debugbar .wdb-close-btn{background:none;border:none;color:#a6adc8;cursor:pointer;font-size:18px;padding:4px 8px;border-radius:4px;line-height:1;} +#wheels-debugbar .wdb-close-btn:hover{background:#45475a;color:#cdd6f4;} +#wheels-debugbar .wdb-link-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:8px;padding:4px 0;} +#wheels-debugbar .wdb-link-card{display:flex;align-items:center;gap:8px;padding:10px 12px;background:#313244;border-radius:6px;color:#cdd6f4;text-decoration:none;font-size:12px;font-weight:500;transition:background .15s;} +#wheels-debugbar .wdb-link-card:hover{background:#45475a;} +#wheels-debugbar .wdb-link-card svg{width:16px;height:16px;fill:#89b4fa;flex-shrink:0;} +#wheels-debugbar .wdb-env-dot{width:8px;height:8px;border-radius:50%;display:inline-block;} +#wheels-debugbar .wdb-section{margin-bottom:16px;} +#wheels-debugbar .wdb-section-title{font-size:11px;font-weight:700;color:#89b4fa;text-transform:uppercase;letter-spacing:.5px;margin-bottom:8px;padding-bottom:4px;border-bottom:1px solid #313244;} diff --git a/vendor/wheels/public/assets/js/debugbar.js b/vendor/wheels/public/assets/js/debugbar.js new file mode 100644 index 000000000..382881954 --- /dev/null +++ b/vendor/wheels/public/assets/js/debugbar.js @@ -0,0 +1,45 @@ +(function () { + var activePanel = null; + window.wdbToggle = function (name) { + var panels = document.querySelectorAll('#wheels-debugbar .wdb-panel'); + var tabs = document.querySelectorAll('#wheels-debugbar .wdb-tab'); + if (activePanel === name) { + wdbClosePanel(); + return; + } + for (var i = 0; i < panels.length; i++) panels[i].classList.remove('open'); + var p = document.getElementById('wdb-panel-' + name); + if (p) p.classList.add('open'); + for (var j = 0; j < tabs.length; j++) tabs[j].classList.remove('active'); + var t = document.getElementById('wdb-tab-' + name); + if (t) t.classList.add('active'); + activePanel = name; + }; + window.wdbClosePanel = function () { + var panels = document.querySelectorAll('#wheels-debugbar .wdb-panel'); + var tabs = document.querySelectorAll('#wheels-debugbar .wdb-tab'); + for (var i = 0; i < panels.length; i++) panels[i].classList.remove('open'); + for (var j = 0; j < tabs.length; j++) tabs[j].classList.remove('active'); + activePanel = null; + }; + window.wdbMinimize = function () { + wdbClosePanel(); + document.getElementById('wheels-debugbar').style.display = 'none'; + document.getElementById('wdb-minimized').style.display = 'block'; + try { sessionStorage.setItem('wdb-hidden', '1'); } catch (e) {} + }; + window.wdbRestore = function () { + document.getElementById('wheels-debugbar').style.display = ''; + document.getElementById('wdb-minimized').style.display = 'none'; + try { sessionStorage.removeItem('wdb-hidden'); } catch (e) {} + }; + window.wdbEnvSwitch = function (el) { + var target = el.getAttribute('data-wdb-reload'); + if (!target) return false; + var pw = window.prompt('Enter the reload password to switch environments:'); + if (pw === null || pw === '') return false; + window.location.href = target + '&password=' + encodeURIComponent(pw); + return false; + }; + try { if (sessionStorage.getItem('wdb-hidden') === '1') wdbMinimize(); } catch (e) {} +})(); diff --git a/vendor/wheels/tests/specs/controller/protectedMethodsSpec.cfc b/vendor/wheels/tests/specs/controller/protectedMethodsSpec.cfc index fd6502746..f710d58b2 100644 --- a/vendor/wheels/tests/specs/controller/protectedMethodsSpec.cfc +++ b/vendor/wheels/tests/specs/controller/protectedMethodsSpec.cfc @@ -35,6 +35,39 @@ component extends="wheels.WheelsTest" { }) }) + // The dispatch hot path checks membership via an O(1) struct-as-set + // (perf) instead of an O(n) ListFindNoCase over the comma-list. The set + // must stay in lockstep with the list it is derived from. + describe("application.wheels.protectedControllerMethodsLookup", () => { + + it("is populated at application start", () => { + expect(StructCount(application.wheels.protectedControllerMethodsLookup)).toBeGT(0) + }) + + it("has one key per entry in the comma-list (case-insensitive)", () => { + for (var item in ListToArray(application.wheels.protectedControllerMethods)) { + expect(StructKeyExists(application.wheels.protectedControllerMethodsLookup, item)).toBeTrue() + } + }) + + it("matches helper names case-insensitively, like the prior ListFindNoCase", () => { + expect(StructKeyExists(application.wheels.protectedControllerMethodsLookup, "model")).toBeTrue() + expect(StructKeyExists(application.wheels.protectedControllerMethodsLookup, "MODEL")).toBeTrue() + expect(StructKeyExists(application.wheels.protectedControllerMethodsLookup, "redirectTo")).toBeTrue() + }) + + it("does not contain entries the list lacks", () => { + expect(StructCount(application.wheels.protectedControllerMethodsLookup)) + .toBe(ListLen(application.wheels.protectedControllerMethods)) + }) + + it("builds an equivalent set from a known list via the helper", () => { + var set = application.wo.$protectedControllerMethodsLookup("env,model,redirectTo") + expect(StructCount(set)).toBe(3) + expect(StructKeyExists(set, "ENV")).toBeTrue() + }) + }) + describe("$callAction action-dispatch gate", () => { beforeEach(() => { diff --git a/vendor/wheels/tests/specs/model/schemaColumnCacheSpec.cfc b/vendor/wheels/tests/specs/model/schemaColumnCacheSpec.cfc new file mode 100644 index 000000000..6e1f2276a --- /dev/null +++ b/vendor/wheels/tests/specs/model/schemaColumnCacheSpec.cfc @@ -0,0 +1,70 @@ +/** + * Coverage for the column-metadata cache (perf). `$getColumns()` issues a + * cfdbinfo type="columns" JDBC catalog round-trip — once per model class and + * re-paid on every reload and for every model sharing a table. On + * remote / wide-schema databases that round-trip dominates first-request + * latency. When `cacheDatabaseSchema` is on, the resolved column query is now + * memoized per datasource+table in `application.wheels.schemaColumnCache` (rebuilt + * on framework reload, so schema changes are still picked up on reload — the + * same contract as the model/controller config caches). + */ +component extends="wheels.WheelsTest" { + + function beforeAll() { + // Snapshot the shared caches/settings so a mid-spec failure can't leave + // the rest of the suite running against a polluted cache. + if (StructKeyExists(application.wheels, "schemaColumnCache")) { + variables.$priorSchemaCache = Duplicate(application.wheels.schemaColumnCache); + } + variables.$priorCacheDatabaseSchema = application.wheels.cacheDatabaseSchema; + } + + function afterAll() { + application.wheels.schemaColumnCache = StructKeyExists(variables, "$priorSchemaCache") + ? variables.$priorSchemaCache + : {}; + application.wheels.cacheDatabaseSchema = variables.$priorCacheDatabaseSchema; + } + + function run() { + + g = application.wo; + + describe("$getColumns column-metadata cache", () => { + + it("memoizes columns per datasource+table when cacheDatabaseSchema is on", () => { + application.wheels.cacheDatabaseSchema = true; + application.wheels.schemaColumnCache = {}; + var m = g.model("author"); + var adapter = m.$assignAdapter(); + var first = adapter.$getColumns(m.tableName()); + expect(StructCount(application.wheels.schemaColumnCache)).toBeGT(0); + }); + + it("returns identical column metadata on the cached path", () => { + application.wheels.cacheDatabaseSchema = true; + application.wheels.schemaColumnCache = {}; + var m = g.model("author"); + var adapter = m.$assignAdapter(); + var fresh = adapter.$getColumns(m.tableName()); + var cached = adapter.$getColumns(m.tableName()); + expect(cached.recordCount).toBe(fresh.recordCount); + expect(cached.columnList).toBe(fresh.columnList); + }); + + it("does not populate the cache when cacheDatabaseSchema is off", () => { + application.wheels.cacheDatabaseSchema = false; + application.wheels.schemaColumnCache = {}; + var m = g.model("author"); + var adapter = m.$assignAdapter(); + var cols = adapter.$getColumns(m.tableName()); + expect(StructCount(application.wheels.schemaColumnCache)).toBe(0); + // columns still resolve correctly with caching disabled + expect(cols.recordCount).toBeGT(0); + }); + + }); + + } + +} diff --git a/web/sites/guides/src/content/docs/v4-0-0/deployment/production-config.mdx b/web/sites/guides/src/content/docs/v4-0-0/deployment/production-config.mdx index e9cf0cee4..1f4f72c0b 100644 --- a/web/sites/guides/src/content/docs/v4-0-0/deployment/production-config.mdx +++ b/web/sites/guides/src/content/docs/v4-0-0/deployment/production-config.mdx @@ -161,7 +161,10 @@ Run through this before the first production request. Each item maps to a framew 7. **Error email is wired.** `sendEmailOnError` is auto-enabled in production (`debugging.cfm:22-25`). If `errorEmailToAddress` is empty, Wheels still tries to send — `events/EventMethods.cfc:5-13` reads the address at error time — and the mail bounces silently. Set it. 8. **URL rewriting matches the web server.** `set(URLRewriting="On")` only works if nginx/Apache/Tuckey rewrites `/posts/1` to `/index.cfm/posts/1`. If rewrites aren't configured, leave it at `"Partial"` or `"Off"`, or every link breaks. 9. **`allowEnvironmentSwitchViaUrl` is not re-enabled.** Confirm by grepping `config/production/settings.cfm` — don't set it to `true`. If you need to toggle environments, redeploy. -10. **Caches are warmed or warm fast.** First request after deploy compiles every controller/model. For latency-sensitive endpoints, hit them from the deploy script before flipping the load balancer. `cacheControllerConfig`, `cacheModelConfig`, `cacheDatabaseSchema`, and `cacheFileChecking` are always-on in every environment (`events/init/caching.cfm:3-7`), so a single warm-up request per controller is usually enough. +10. **Caches are warmed before traffic cutover.** The very first request to a freshly started node is dominated by one-time CFML-to-bytecode compilation — profiling a stock app puts roughly **85% of a ~1.2s cold start in the engine's compiler**, versus sub-millisecond once warm. That cost is paid once per process, so the goal is to move it off the first *real* visitor and onto the deploy sequence: + - Apps scaffolded with `wheels new` ship a `/up` route (`app/controllers/Up.cfc`). `wheels deploy`'s proxy healthcheck probes `/up` before flipping traffic, so the dispatch → controller → render path is compiled on the new node before it serves anyone. Touch your hottest models in that action (e.g. `model("Post").count()`) to warm their ORM column metadata too — the first query against a model is the other notable one-time cost. + - Not using `wheels deploy`? Curl your latency-sensitive endpoints from the deploy script before enabling the node at the load balancer. A single warm-up request per controller is usually enough, since `cacheControllerConfig`, `cacheModelConfig`, `cacheDatabaseSchema`, and `cacheFileChecking` are always-on in every environment (`events/init/caching.cfm:3-7`). +11. **Template inspection is set to `never` (engine-level).** In development the CFML engine re-checks each template's source timestamp on every request so edits are picked up live; in production that filesystem stat is pure per-request overhead. Set the engine's template-inspection mode to `never` so it trusts the compiled-class cache and skips the check — Lucee: admin → *Performance/Caching* → "Inspect Templates" = `Never` (or `inspectTemplate="never"` in `.CFConfig.json`); Adobe ColdFusion: enable "Trusted Cache". This is engine configuration, not a Wheels setting, so it isn't flipped by `environment="production"`. Pair it with a warm-up (item 10) and a cache-clear/reload step in your deploy so a new release's templates still recompile once. ## What production does not change diff --git a/web/tests/visual-baselines/api.png b/web/tests/visual-baselines/api.png index 4b65188349d81adcdc85282f03eebcb92a83054e..507f04ce9e455a4cc99e6e0b4d1e64a1dd6d878e 100644 GIT binary patch literal 122389 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

AGRxFW15I8mOM6G+{;+*-nWmRu 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

  • `Ta?;c#Xv1Z)nJX=WVPX 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 YYlsepT9my6pTSa)QI#%x`TG6;0(NEJD*ylh diff --git a/web/tests/visual-baselines/guides.png b/web/tests/visual-baselines/guides.png index e3ec16100ea893b07a87c775711c64c1229a1984..75ae73d56386e75dbe462d0b67f5a1aa3542490e 100644 GIT binary patch literal 167441 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Π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%0A``Gu0{1g;vX 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

    -R2AWAM7TXURUI=7kDDx|T@8c#FT3o6s zD#P~9z-+GEpp9=3fT6SxbwDB)EECX@NV^hrZv;KZT~x#}3rK_vz$0a0aQZNB)X{ZVJ% zW+*Q&SUTRne*U!VL10^p8jo|cvsVGQk?pX)@pZ9cj19N}YnslKS*XYJ8Cb^2Fk$lY z#0ZyEr?6E|0)HGH9wJVURa2n_<>j^@xl%QObkyB1<+$iB!#p_>5KsUR-`=lZ7JtJc z&CL9zs1_GD$1-3SRr*0L;^F4@1at}JiM54=n8(fr(AWf@V6v)7$l~Hwr3sNaJA-I` zsMvoCI}(FH?18c|K-yZ-pzXR8XpMfG(NQ07 zG>YmN8mb|S0frlg$$w3edhZP3=C+Ur`EgHq=V%o4eJXipCuM$yfzP54IIyp1I*C?K zWxFLMA)&|B*XXqD1e|)`B(>I6YQSJmYvK!RDb)uMb*`IS5FOwy+P9|bE}5c)`dB@qDH37tr*49WQ-k-U}!m<6Z&3uu4qrf&fckzEcad~%d?UNU5d)wPxK#MdtSM*Eah&AVx>sS1M z6&)VW8XSV#7lt^!4@qtvbLsBmGa=;d}>DLTU{Jun)7dvp_%@%nqdUG=K)+{m6ie zlhb35ow4KN_vn&NJs=yZDFK9c<9g21STRaoKVQ>r79-*s8a}wV?1RLXR3zg5Q(5?; zWh{qH`VJ3kP107L|M4OvBAO=M^}JDBQL%q=v_g{lC1!VK7)oNC-dzT6rUYPNOOYkFvY}I!I?bI~J)Q&_kAf zejnZ6zport(9rmo8g;&3q%F*I`x?lQ?~nKF2|PD%MgnPH1gKoSn_nNSkKt!$06#bm zq``UMrNiC1HcbdaK)V_LT_*F0i&BwFmCFy&JDB+IVXTG!U7yO9wqx-2ym1StA`D*u zrS;J&TH(9$WtRhrb1XYJQctT12036>MXG3n?uxCxAPo(%TEt z`=9oni0Jjl!GGxHZwa0wltkdWtxS|uA7cWB6xX>g70|kW%-J3LM4@N+TD%MDWpI3a zwWWb~x43fuP^w?3S(KW#Qr}!Wgt3(EgI;VfF_9(h1)nRvTSq4R#8WG#j<7r{*IC%7 zlcZmLGT-alN%ni7Cr4n$X|(l0rdcvOLNCjFp7x>omzCK)3PcS`{Ra5L&1E-;?>67l z4P!}pmT4u6^+I9py~s>5mV`wm74cUTzlusN;!k8d*e>@@^foN)avzxEC?n;2?X!9J&axA#zFr@tg;_gy{@t@o z22z=VDa0u%JUH~KND1XK=^R;7N|x}1!*-`aWP~caM?0FJKkqsA2G&EF9n@h)mqJo# z>Tx{E#*XjD9?>&><%_0mBt2jr-8^M$ZEv%&4lR|y&s!4_k*!>K3JMBg1=lRYzIR+_ zEoiHvxo+Uh&gm>;8EoG}^D5q=o<Wt;pJUp?y`;fitOOzIkM$*(HSGAwDZq}poe$jQBRp?vm^RCn$x=#wZ zp)g(Q`iHaiS$-0V8kszCX4t0KfPin*8#MCB!%qsa`_@v7pDD(+i=U2uN7OkC z;aQN5x;mWH|LmzJ#!(G81U?)hyEEW19Hek0hI5FNnoVT1tqEK*ZfZJ>LbAWsdCmq}=qqiMB5}GfJgq=}D>{#748(SaR%Aj{?sq_bZ;tT+iywN(cbmozrx;OHSu15iWfcgJy{cdt zx{K0JTiAS$dZv;0ei}7r&ytW{q+4hfL=@`aKB5pm5axX^@>j({cyP3^RM9`QoTcWs z3=O^*fAQ{MZcF+;w-YXlTZ|4xied-VuQ}2)8uvoPdYcw4Lz~ns7GR%g8B<4(EtHTo zmb0BFb*Z`RjNUy$YyRB0@>-Rr*qwk&7nBo&w6iY>KVuw~MhA#38jC;`v<7Kua+Q}zhbL(r}9`*PGYBY6uH8(b`q~1EaK>DjOpy!-y%{A>gLG;_05*{3*@dx$C#Eh zrlYaKMm*Q9?Qa8f`q5D@PpD3&W?WC$budzmLJG>pps(K+Gne}O@!g1_1 z`Yp^%GxO%N1Q#wKf{RZ@CA)o(uxFd`H456#%1SN1URht*ekMwVp-t#%_XpsFMv zSa;^_uUNLJI>kKhXui>Qi_88YI1H}e+fu2F&#N=KsLnxr*VX*x_qk6!)@Hj?vSCtF zCs$Y&f{(&hB zA13yGug=W%<~Tm)IYWNUDqXpwmU8sXfZHT;1Mr_jw3;j-bet-R{FX0}$OO)tA+_(e zP%EdYHBi_s661U}X#r@*VeAg;u2_L5w}yj_K*h;?h7~Tt+M8+@H@g#ZyW%~5i+da% zRCu_I4fTAr+_j*5XLEY5@~kbLPbnOEcdVQzKZ=d5JL8UYGL1mlcjUFMKBcs87;&X$##o_DD3*k?F4=^(zHP`hCvnVw>D{YJMo zjLRLh%}wf>n6%t-Gbp6*#qlkK(FD=YMHM_?<~?`xV)&s`!vnXT{;a3t$!K-B`|*Ku ze`uBDpVD{xU!SeHFOS~s?CvJ1$M-BdIy$)1bZ|J;$vWzZ9MMbj(6=7${k6n4Rxdk=D zckN|zS~8=ZBk2YC&L@Lp0!2L&qeHkqt-FQvp43eXZ_vtTTW4)!GUn`sh0!qlG0Hv{k%N_vxi?+75 z6E%Oh-Eb1n;#=C=um1P}b^6Z1_iNNGq9cq(M@L6qR#u6{_n4&V&_sk)`;~2bFn{J- zMHIHZUB-1BFsxl&>z{QD*8!o&T_-=4(eVdqOFG9rGl*Y7!}0_u4|kHL7rN85@_Txx zd#Bb_-BNj6ICREnCUe&HSeNRs2AsC_58@&GXOD{>_Kg;BK29hmgdLXqi5gwTz^oXQ ziAMK}Kivo!5MFD~j{@#O@}78xMCGHgoHOMR-u9o{@?0K`)0XlzOfdto8C8QFDN&-2 zPL(_mN1I_~Q>;@~*asDszDbQ{#P2UY7yUS|R!Pn33)b(5vl(+p{ngcG$NQWJd2K@6p-H zX^e}Xdwx9Pp>h;|m1T%I$yJ3{JYo1yJPRa(z=x`g-dUospDR;j)o4Guu~*}S)k~l8 zCHGfw!D`fV?U>TTLfj3G^5~L2V~o%^@KYYy18; zXIFP!j2HpH15>7p7OA|M>m?;61VMvZAYa}1xIQ4-a$pb*Xb;(7@nq5NTH?VV}rl!_{Z|qAoX4=UBj~CmAw2{ zTA|r=51>Nz)QxY$S_v-a0VQC8j8yw@25#^={s9)X5`7-nd4Gjx1%<&og-XRU@PRa zBOXh%S)@Om8P#6(rl%=`9cX=(v`Nk3P;6ydPfq6PSBQ-Z`j}H1ek>g(FGuTUqb;V6 zpT2{jo)?w&rQ2^H{XnrxKBHWXnp0Q#!u5EpKx*?_yT|b0x)}p$MefAMYWlZ;s(OQGdy73 zsN+m>a(WpIEh3NvTdS?vXIVz?OgZ=VtXz$=czC&ciZ7R2q=h|&E_u>HrFElHkx59K z=_9O6)5@J0d3GF~RcoipQhn#ItEo+VoKkgZhqv>@KQ!Lly#m)Prm(`=z#ppi@^Fdv zH!(1`McA#Fbycj;pOd6*G`z(-X{$z*qT$JdiBrdL5$gGz*>95c!ijXa?9l5Qaxv9j ze7_7cnJaeO`(rB_Tx?w|kw literal 166693 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 z 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 US2-QB;1d#6#b*kIa;6{t2SaJeqW}N^ From c81230f504280b6c6a57f94cdefc38f9f1bacd7b Mon Sep 17 00:00:00 2001 From: Peter Amiri Date: Tue, 16 Jun 2026 07:00:02 -0700 Subject: [PATCH 192/198] docs(web/blog): Wheels + Claude: Building a Feature via the stdio MCP --- .../blog/posts/wheels-claude-stdio-mcp.md | 267 ++++++++++++++++++ 1 file changed, 267 insertions(+) create mode 100644 web/content/blog/posts/wheels-claude-stdio-mcp.md diff --git a/web/content/blog/posts/wheels-claude-stdio-mcp.md b/web/content/blog/posts/wheels-claude-stdio-mcp.md new file mode 100644 index 000000000..c56f91e80 --- /dev/null +++ b/web/content/blog/posts/wheels-claude-stdio-mcp.md @@ -0,0 +1,267 @@ +--- +title: 'Wheels + Claude: Building a Feature via the stdio MCP' +slug: wheels-claude-stdio-mcp +publishedAt: '2026-06-16T14:00:00.000Z' +updatedAt: '2026-06-14T15:45:55.000Z' +author: Peter Amiri +tags: + - wheels-4 + - mcp + - ai + - cli +categories: [] +excerpt: >- + Wheels 4.0 ships a stdio MCP server that exposes the CLI to AI editors — not + as a chat sidekick, but as a tool surface a model can call. This post walks + the architecture (reflection over a single CFC), builds a commenting feature + end-to-end via Claude, and is honest about the config-template drift I hit + while writing it. +coverImage: null +--- + +There are two ways to make an AI assistant useful inside a framework. The first is to put it in a sidecar — a chat window glued to the IDE, fed with a vector index of your codebase, generating snippets you copy-paste. That's where most frameworks landed first, and it's fine. The model is a smarter Stack Overflow. + +The second is to teach the assistant the same vocabulary the framework already uses with humans. You don't ship "AI code generation"; you ship a CLI with `wheels generate model Post title:string`, and then you let the assistant *call that CLI directly* — with the same arguments, the same templates, the same validation — when a developer types "make me a Post model with a title." The model writes nothing. The framework writes everything, the same way it always has. The model just decides which command to run. + +Wheels 4.0 ships the second one. The mechanism is the Model Context Protocol, the transport is stdio, and the implementation is small enough to fit in your head: a single `Module.cfc` whose public functions become tools by reflection, with a declared denylist to hide the ones that don't make sense over an RPC. This post walks the architecture and then builds a commenting feature end-to-end through Claude Code talking to that surface. + +## The shape of the integration + +``` +┌─────────────────┐ spawn ┌────────────────────────┐ +│ AI editor │──────────▶│ wheels mcp wheels │ +│ (Claude/Cursor) │ │ (LuCLI stdio MCP) │ +│ │ JSON-RPC │ │ +│ │◀─────────▶│ Module.cfc │ +└─────────────────┘ (stdio) │ (public functions │ + │ → MCP tools) │ + └────────────────────────┘ +``` + +The AI editor spawns `wheels mcp wheels` as a subprocess and speaks newline-delimited JSON-RPC 2.0 over stdin and stdout. There's no port, no socket, no running dev server. The subprocess lives for the duration of the session. + +`wheels mcp wheels` is two pieces of vocabulary glued together: `wheels mcp` is LuCLI's generic MCP dispatcher (the binary's runtime is LuCLI, shipped under the `wheels` brand), and the trailing `wheels` is the *module name* to expose. LuCLI loads `cli/lucli/Module.cfc`, scans its public functions, and turns each one into a tool named after the function — `generate`, `migrate`, `test`. (The server advertises these bare names; MCP clients namespace them under the server name on their end — Claude Code surfaces them as `mcp__wheels__generate`.) The MCP protocol — `initialize`, `tools/list`, `tools/call`, the JSON-RPC framing — is all handled by the LuCLI runtime. The Wheels codebase contributes the functions, not the protocol. + +This is the design choice worth noticing first: the MCP server is not a separate codebase you maintain alongside the CLI. It *is* the CLI. Anything you can do as a developer typing `wheels migrate latest` is something Claude can do by calling the `migrate` tool with the same `latest` token. New CLI features become MCP features automatically, with no schema to write and no router to update. + +## Setup, end to end + +```bash +wheels mcp +``` + +That's a help command, not a wizard — it writes nothing and prints everything you need: + +```text +MCP is built into the Wheels CLI. Run: + wheels mcp wheels + +Configure in Claude Code (.mcp.json): + {"mcpServers":{"wheels":{"command":"wheels","args":["mcp","wheels"]}}} +``` + +Paste that snippet into a `.mcp.json` at your project root (pretty-printed, if you like): + +```json +{ + "mcpServers": { + "wheels": { + "command": "wheels", + "args": ["mcp", "wheels"] + } + } +} +``` + +That's the whole thing — a command and its arguments. Claude Code reads it on startup, spawns `wheels mcp wheels`, and starts speaking JSON-RPC over the subprocess's stdio. There's no installation step, no API key, no auth handshake. If the `wheels` binary is on your `PATH` and the project has a `vendor/wheels/` checkout, you have a working MCP integration. + +The project-root `.mcp.json` is Claude Code's convention. Other MCP clients point at the same server definition — `wheels` plus `["mcp", "wheels"]` — from their own config locations: Cursor from its settings, OpenCode from a `.opencode.json` you also write by hand (its wrapper shape appears later in this post). The server definition never changes; only the file it lives in does. + +Before restarting your editor, smoke-test the server with the one-shot helper the guide documents: + +```bash +wheels mcp wheels --once tools/list +``` + +That runs a single MCP method and exits — no long-lived stdio session — printing the JSON-RPC response that lists every exposed tool. If the tools are in that output, the editor will find them too. Restart it; on first start it spawns the subprocess and calls `initialize` and `tools/list` — and the tools panel should now list `generate`, `migrate`, and the rest. + +## What gets exposed (and what doesn't) + +Tool discovery is a one-line CFML reflection step. LuCLI walks `Module.cfc`, finds every public function — the return type doesn't matter — reads its `hint:` annotation for the description, and emits a tool entry. The tool name is the module name (`wheels`) joined to the function name with an underscore. + +A handful of functions don't belong over RPC, though, and `cli/lucli/Module.cfc` names them explicitly: + +```cfm +public array function mcpHiddenTools() { + var hidden = [ + "main", // bare `wheels` no-args dispatch target + "mcp", // meta command — prints MCP setup instructions + "d", // alias for destroy + "g", // alias for generate + "new", // scaffolds a whole new Wheels project + "console", // interactive CFML REPL — not usable over stdio + "start", // dev server lifecycle (stateful) + "stop", // dev server lifecycle (stateful) + "browser", // multi-step browser testing flow + "mcpToolSpecs", // per-tool inputSchema registry — not itself a tool + "$normalizeTestFilter", // internal helpers, public only + "$resolveAppTestDataSource" // so the spec suite can reach them + ]; + // ...plus a structural sweep: every public function whose name + // starts with "$" is appended via getMetaData(this). + return hidden; +} +``` + +Each exclusion has a reason that maps to a property of the tool. `start` and `stop` manage long-lived processes, which are awkward over a single JSON-RPC call. `console` needs a bidirectional interactive terminal; stdio MCP gives you one direction per message. `new` creates a whole project hierarchy and isn't something a model should fire mid-session without an explicit out-of-band confirmation. `mcp` itself is hidden because calling it over RPC would let one MCP server spawn another, which is a recursion you don't want. The aliases (`d`, `g`) would just duplicate `destroy` and `generate`, and `mcpToolSpecs` is a registry LuCLI reads, not a command anyone runs. The trailing sweep is defense-in-depth: the `$`-prefixed functions are internal helpers kept public only so the test suite can reach them, and the `getMetaData()` pass guarantees a future `$helper` added without a denylist update can't quietly leak into `tools/list`. + +`mcpHiddenTools()` is the module's own denylist, but it isn't the first filter. LuCLI's MCP runtime also auto-excludes its `BaseModule` plumbing and a few convention functions — `init`, `out`, `err`, `getEnv`, `verbose`, `getSecret`, `getAbsolutePath`, `executeCommand`, plus `version`, `showHelp`, `mcpHiddenTools`, and `mcpToolSpecs` — *before* the module denylist is even consulted. That's why `version` and `showHelp`, both perfectly real CLI commands, never appear as tools: they're framework-level internals, not something the Wheels module chose to hide. + +After the exclusions, the surface looks like this: + +| Tool | Purpose | +|---|---| +| `generate` | Create models, controllers, migrations, scaffolds, tests, helpers. | +| `destroy` | Remove generated components, cascading by default. | +| `migrate` | Run migrations (`latest`, `up`, `down`, `info`, plus `doctor`, `forget`, `pretend`). | +| `seed` | Run convention-based seed scripts. | +| `db` | Database utilities (reset, status, version). | +| `packages` | List, search, and add packages from the registry. | +| `test` | Run the test suite or a named subset. | +| `reload` | Reload a running dev-server app. | +| `routes` | Print the routing table. | +| `info` | Framework + project metadata. | +| `analyze` | Convention and anti-pattern scanner. | +| `validate` | Configuration + model validation. | +| `doctor` | Diagnose setup issues. | +| `stats` | Project statistics (model/controller/route counts). | +| `notes` | Find `TODO` / `FIXME` / `OPTIMIZE` annotations (`--annotations` customizes the list). | +| `upgrade` | Read-only breaking-change scanner. | +| `create` | Args-driven app creation; delegates to the same scaffolding as `new`. | +| `deploy` | Deployment orchestration (the `wheels deploy` family). | + +Most of these are read-only or strictly additive. `destroy` is the one to think twice about, but it's also the one a developer is most likely to want to drive through Claude — "drop the abandoned Comment scaffold, redo it with the new association." + +## A worked example: shipping commenting in 90 seconds + +The [previous post in this series](/posts/anatomy-of-a-wheels-package/) introduced a deliberately toy package called `wheels-greeter` to walk the manifest fields. Here's a real flow with no toy in sight: add commenting to an existing `Post` model on a blog. Migration, association, controller, routes, tests. The whole loop, driven by Claude through the MCP surface. + +Type this into Claude Code: + +> Add commenting to the blog. Each comment belongs to a Post, has an `author` (string) and `body` (text). Generate the migration and model, wire the association on Post, run the migration, and add a smoke test that asserts a Post can have many comments. + +Claude reads the surface (it called `tools/list` on session start), recognises that this is a generate-then-migrate-then-test loop, and starts dispatching: + +```json +{ + "jsonrpc": "2.0", + "id": 1, + "method": "tools/call", + "params": { + "name": "generate", + "arguments": { "arg1": "model", "arg2": "Comment", + "arg3": "postId:integer", "arg4": "author:string", + "arg5": "body:text" } + } +} +``` + +Those `arg1`/`arg2`/... keys are not an accident. LuCLI hands the arguments object to the module as the same structured collection a shell invocation produces — bare tokens keyed by position — so this call is exactly `wheels generate model Comment postId:integer author:string body:text`, one token per key. Commands that have migrated to the ArgSpec parser also accept named keys (you'll see `test` do it below); `generate` and `migrate` still parse their tokens by hand, so positional keys are the safe currency. + +`Module.generate()` runs, the codegen service substitutes templates, and you see `create app/models/Comment.cfc` plus a `*_create_comments_table.cfc` migration land on disk. The response back over stdout is a JSON-RPC result wrapping the CLI's stdout output as a single text content block: + +```json +{ + "jsonrpc": "2.0", + "id": 1, + "result": { + "content": [ + { "type": "text", "text": " create app/models/Comment.cfc\n create app/migrator/migrations/20260529140100_create_comments_table.cfc" } + ] + } +} +``` + +Claude reads the response, sees the migration filename, and continues. Next it edits `app/models/Post.cfc` directly (no MCP tool needed for a one-line file edit) to add `hasMany(name="comments", dependent="delete")`. Then: + +```json +{ "method": "tools/call", + "params": { "name": "migrate", "arguments": { "arg1": "latest" } } } +``` + +Migration runs, the `comments` table appears in the DB. Then: + +```json +{ "method": "tools/call", + "params": { "name": "generate", + "arguments": { "arg1": "test", "arg2": "model", "arg3": "Comment" } } } +``` + +A `CommentSpec.cfc` gets generated under `tests/specs/models/`. Claude writes the actual assertions into it (`expect(post.commentCount()).toBe(2)`), then runs the test suite — and `test` is one of the ArgSpec-migrated commands, so a named key binds directly: + +```json +{ "method": "tools/call", + "params": { "name": "test", + "arguments": { "filter": "tests.specs.models" } } } +``` + +If the test passes, Claude reports back to the developer. If it fails, Claude reads the error output (still text content, still over stdio), patches the model or the spec, and re-runs. The loop is conversational because the protocol is conversational — every tool call returns text, every text is something the model can read and act on. + +The whole exchange takes the model maybe four seconds of round-trip plus however long the migration and test suite take. The developer types one prompt; the framework does what it would have done if a developer had typed five commands. The MCP server is the bridge. + +## Why the reflection model holds up + +The temptation, when designing an AI integration, is to invent a separate surface. A new "AI service" CFC. A `aiCommands.cfm` that wraps the real CLI with a parallel set of carefully-curated entry points. A JSON schema kept by hand and updated whenever someone adds a new generator type. + +That's how you end up with two surfaces that drift. The CLI gains a `wheels generate api-resource` verb and somebody forgets to add it to the AI surface. The MCP tool advertises an `--attributes` flag that the underlying CLI renamed three months ago. The two surfaces are different enough that a bug fix in one doesn't reach the other. + +The reflection approach skips that drift by construction. `Module.cfc` is the CLI. It is also the MCP server. There is no second copy of "what generate accepts" to keep in sync. The tools/list response is regenerated every time the subprocess starts; the descriptions come from the same `hint:` comments humans read when they run `wheels generate --help`. If a generator gains a new component type, the MCP tool gains the same type at the same moment, with no extra work. + +The cost — through 4.0.3, anyway — was that the MCP schema was less expressive than a hand-curated one. Tool descriptions were one-line `hint:` strings, and because the module's functions declare no formal parameters (they consume LuCLI's structured argument collection), the advertised `inputSchema` was an empty `properties` map. Models coped — one-liners plus a couple of canonical examples go a long way — but it was the honest ceiling. That ceiling has since been raised, and in exactly the way the design predicts: develop (shipping in 4.0.4) wires the same `ArgSpec` declarations the commands already parse with into `tools/list`, via `ArgSpec.toInputSchema()` and a `mcpToolSpecs()` registry on the module. Eight commands advertise typed, described, defaulted parameters today; the hand-rolled token parsers (`generate`, `migrate`, and friends) gain entries as they migrate to ArgSpec. Nobody writes a schema by hand — the CLI's own argument vocabulary is the schema source, so the parse surface and the advertisement can't drift. + +## The deprecated HTTP endpoint + +If you've used the MCP integration in a 3.x build, you may remember a different shape: a dev-server route at `/wheels/mcp` that spoke Streamable HTTP JSON-RPC, required a running app, and lived in `vendor/wheels/public/views/mcp.cfm`. That endpoint still exists, with a deprecation notice at the top of the file and a one-time `WriteLog(type="warning", ...)` on first request. It's scheduled for removal in a future release. + +The reason for the shift is the same as the reason for the design choice above: the HTTP endpoint was a parallel surface that had to be kept in sync. Tool schemas in `vendor/wheels/public/mcp/McpServer.cfc` were hand-written, separate from the CLI's behaviour, and drifted. The stdio surface deletes the parallel surface entirely; the CLI *is* the MCP server, and the MCP server *is* the CLI. + +If you have a `.mcp.json` or `.opencode.json` from a 3.x project that points at `http://localhost:/wheels/mcp`, replace the stanza with the stdio form — the same snippet `wheels mcp` prints. + +## What changed while writing this post + +Drafting the post turned up two pieces of drift around the MCP config. The first was fixed in the same PR as this post; the second has since been fixed — but only halfway, which makes it the better story. + +The repo ships the MCP config as templates in two places — `cli/src/templates/` (the CommandBox-era CLI's setup templates) and `app/snippets/` (the app skeleton's snippet copies). The `.mcp.json` template — the shape Claude Code reads — was correct in both, pointing at the canonical `{"command": "wheels", "args": ["mcp", "wheels"]}` stdio surface. The OpenCode template was not. It still pointed at the deprecated HTTP endpoint: + +```json +{ + "$schema": "https://opencode.ai/config.json", + "mcp": { + "wheels": { + "url": "http://localhost:{PORT}/wheels/mcp", + "type": "remote", + "enabled": true + } + } +} +``` + +Two problems. First, the URL is the deprecated endpoint that emits a warning every time it's called and is scheduled for removal. Second, the `{PORT}` placeholder is a literal string — nothing ever substitutes it, so an OpenCode user copying the template ends up with a `.opencode.json` that contains the literal characters `{PORT}` in the URL. It does not resolve to anything. The OpenCode MCP plumbing tries to connect to a host called `{PORT}` and fails. + +The fix is the same shape OpenCode supports for any stdio MCP server — `type: "local"` plus a `command` array: + +```json +"wheels": { + "type": "local", + "command": ["wheels", "mcp", "wheels"], + "enabled": true +} +``` + +This shape was already in `tools/build/base/.opencode.json` (the canonical reference copy used by the monorepo's build), and the CHANGELOG entry from when the stdio shift landed actually claimed the templates had been updated everywhere. They hadn't — two files (`cli/src/templates/OpenCodeConfig.json` and `app/snippets/OpenCodeConfig.json`) were missed. Both are now corrected, and an OpenCode user copying the template gets a working stdio config on the first try. + +The second piece of drift is smaller, and its current state is the more instructive part. When this post was first drafted, the `mcp()` meta function in `Module.cfc` printed "For OpenCode, Cursor, and other AI IDEs, see: docs/command-line-tools/commands/mcp/mcp-configuration-guide.md" — a guide that was planned but never written. The CLI side has since been fixed in the 4.0.3-era audit sweep: `wheels mcp` now prints the live guide URL (`https://guides.wheels.dev/v4-0-0/command-line-tools/mcp-integration`). But the deprecated HTTP endpoint kept the stale pointer — the deprecation notice in `vendor/wheels/public/views/mcp.cfm` and the hand-written `McpServer.cfc` both still advertise the phantom path, in the file comments and in the warning they write to the log. The surface that's deprecated *because* it drifted is, fittingly, the one place the fix didn't reach. Aligning those references is its own follow-up. + +Neither of these is a code-path bug. They're documentation-and-templates drift, the same shape as the package-system fixes from the previous post. The pattern keeps holding: writing the article forces you to actually walk every path a reader will walk, and the parts where the docs disagree with the code are exactly the parts where the next person was going to get stuck. + +The next post in the series picks up the other surface where 4.0 quietly changed posture: *Beyond findAll — scopes, enums, and the chainable query builder*. Coming next. From efe88b7b715978ec456aa49bd5ffec88fc86f485 Mon Sep 17 00:00:00 2001 From: "wheels-bot[bot]" <283220952+wheels-bot[bot]@users.noreply.github.com> Date: Tue, 16 Jun 2026 14:07:58 +0000 Subject: [PATCH 193/198] chore(docs): auto-refresh blog visual baseline after content change [skip ci] Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- web/tests/visual-baselines/blog.png | Bin 122187 -> 118038 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/web/tests/visual-baselines/blog.png b/web/tests/visual-baselines/blog.png index b8ec6ca9c8d1d20d32344fe6bb7a830a667591d4..b122a1c1b446b383b5fb92fddc476d051d969a22 100644 GIT binary patch literal 118038 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 literal 122187 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 b*Y9Bf^L5tUi%UX(4uzbQ@|!Y=cOU;3+O}fk From e3f64e44ab310fd3787969de47689f71e4a9b03d Mon Sep 17 00:00:00 2001 From: Peter Amiri Date: Tue, 16 Jun 2026 13:27:26 -0700 Subject: [PATCH 194/198] docs(web/blog): close the MCP-drift paragraph in the stdio-MCP post (#3216) The "second piece of drift" paragraph claimed, present tense, that the deprecated /wheels/mcp endpoint "still" advertised the phantom mcp-configuration-guide.md path and that aligning it was "its own follow-up". That follow-up has since shipped (the 4.0.x audit sweep): both vendor/wheels/public/views/mcp.cfm and the hand-written McpServer.cfc point to the live guide, and McpDeprecationNoticeStaleDocPathSpec guards against the phantom path returning. Reframe the paragraph so a reader today sees the loop is closed. Exported from the publishing admin (post #1057). Signed-off-by: Peter Amiri Co-authored-by: Peter Amiri --- web/content/blog/posts/wheels-claude-stdio-mcp.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/web/content/blog/posts/wheels-claude-stdio-mcp.md b/web/content/blog/posts/wheels-claude-stdio-mcp.md index c56f91e80..241ee37bf 100644 --- a/web/content/blog/posts/wheels-claude-stdio-mcp.md +++ b/web/content/blog/posts/wheels-claude-stdio-mcp.md @@ -2,7 +2,7 @@ title: 'Wheels + Claude: Building a Feature via the stdio MCP' slug: wheels-claude-stdio-mcp publishedAt: '2026-06-16T14:00:00.000Z' -updatedAt: '2026-06-14T15:45:55.000Z' +updatedAt: '2026-06-16T19:33:31.000Z' author: Peter Amiri tags: - wheels-4 @@ -260,7 +260,7 @@ The fix is the same shape OpenCode supports for any stdio MCP server — `type: This shape was already in `tools/build/base/.opencode.json` (the canonical reference copy used by the monorepo's build), and the CHANGELOG entry from when the stdio shift landed actually claimed the templates had been updated everywhere. They hadn't — two files (`cli/src/templates/OpenCodeConfig.json` and `app/snippets/OpenCodeConfig.json`) were missed. Both are now corrected, and an OpenCode user copying the template gets a working stdio config on the first try. -The second piece of drift is smaller, and its current state is the more instructive part. When this post was first drafted, the `mcp()` meta function in `Module.cfc` printed "For OpenCode, Cursor, and other AI IDEs, see: docs/command-line-tools/commands/mcp/mcp-configuration-guide.md" — a guide that was planned but never written. The CLI side has since been fixed in the 4.0.3-era audit sweep: `wheels mcp` now prints the live guide URL (`https://guides.wheels.dev/v4-0-0/command-line-tools/mcp-integration`). But the deprecated HTTP endpoint kept the stale pointer — the deprecation notice in `vendor/wheels/public/views/mcp.cfm` and the hand-written `McpServer.cfc` both still advertise the phantom path, in the file comments and in the warning they write to the log. The surface that's deprecated *because* it drifted is, fittingly, the one place the fix didn't reach. Aligning those references is its own follow-up. +The second piece of drift is smaller, and its arc is the more instructive part. When this post was first drafted, the `mcp()` meta function in `Module.cfc` printed "For OpenCode, Cursor, and other AI IDEs, see: docs/command-line-tools/commands/mcp/mcp-configuration-guide.md" — a guide that was planned but never written. The CLI surface was fixed first, in the 4.0.3-era audit sweep: `wheels mcp` now prints the live guide URL (`https://guides.wheels.dev/v4-0-0/command-line-tools/mcp-integration`). The deprecated HTTP endpoint lagged behind — for a while the deprecation notice in `vendor/wheels/public/views/mcp.cfm` and the hand-written `McpServer.cfc` still advertised the phantom path, in their comments and in the warning they wrote to the log. Fittingly, the surface that was deprecated *because* it drifted was the last place the fix reached. A later sweep closed it: both references now point to the live guide, and a regression test (`McpDeprecationNoticeStaleDocPathSpec`) fails the build if the phantom path ever creeps back. Neither of these is a code-path bug. They're documentation-and-templates drift, the same shape as the package-system fixes from the previous post. The pattern keeps holding: writing the article forces you to actually walk every path a reader will walk, and the parts where the docs disagree with the code are exactly the parts where the next person was going to get stuck. From b1a7d8463b0b09071f6dca5d2ab8c015e880d3ee Mon Sep 17 00:00:00 2001 From: Peter Amiri Date: Tue, 16 Jun 2026 13:32:28 -0700 Subject: [PATCH 195/198] fix(plugin): make the deprecated plugins/ directory optional (#3211) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix(plugin): make the deprecated plugins/ directory optional The legacy plugins/ directory is superseded by vendor// packages and apps are expected to remove it. But two code paths still listed it unconditionally and threw when it was absent on engines whose directory listing errors on a missing path (e.g. RustCFML; Lucee/Adobe return empty): - The scaffold's public/Application.cfc jar-scan (this.javaSettings.LoadPaths loop) — guarded with DirectoryExists; mirrored into the demo app and the tweet/starter-app examples. - The framework plugin loader Plugins.cfc $folders()/$files() — now short-circuit to an empty query when the plugins directory does not exist. Behavior is unchanged when plugins/ exists (the scan runs as before); when it is absent, no plugins load and no error is raised. Adds pluginsMissingDirSpec (init + $folders()/$files() against a non-existent path). The lookup is deprecated and slated for removal in the next major. Signed-off-by: Peter Amiri * test(plugin): exercise the missing-dir guard via the $pluginObj helper The spec called $pluginObj(config) without defining the helper the four sibling plugin specs use, so it resolved to the parameterless Global.$pluginObj() that WheelsTest auto-binds — which ignores config and returns the cached PluginObj pointing at the real plugins/ dir. The missing-path branch (the $folders()/$files() DirectoryExists guards, the actual fix) was never executed; the assertions passed for the wrong reason. Add the same component-level $pluginObj helper the siblings use so $createObjectFromRoot dispatches $init with pluginPath=missingPath, building a Plugins instance bound to the non-existent path. The three assertions now genuinely exercise the guard. Addresses wheels-bot review on #3211. Co-Authored-By: Claude Opus 4.8 (1M context) Signed-off-by: Peter Amiri --------- Signed-off-by: Peter Amiri Co-authored-by: Peter Amiri Co-authored-by: Claude Opus 4.8 (1M context) --- changelog.d/plugins-dir-optional.fixed.md | 1 + .../templates/app/public/Application.cfc | 13 ++-- examples/starter-app/public/Application.cfc | 13 ++-- examples/tweet/public/Application.cfc | 13 ++-- public/Application.cfc | 13 ++-- vendor/wheels/Plugins.cfc | 12 ++++ .../tests/specs/pluginsMissingDirSpec.cfc | 67 +++++++++++++++++++ 7 files changed, 108 insertions(+), 24 deletions(-) create mode 100644 changelog.d/plugins-dir-optional.fixed.md create mode 100644 vendor/wheels/tests/specs/pluginsMissingDirSpec.cfc diff --git a/changelog.d/plugins-dir-optional.fixed.md b/changelog.d/plugins-dir-optional.fixed.md new file mode 100644 index 000000000..796041ec1 --- /dev/null +++ b/changelog.d/plugins-dir-optional.fixed.md @@ -0,0 +1 @@ +- The legacy `plugins/` directory is now optional. The scaffold's `Application.cfc` jar-scan and the framework plugin loader (`Plugins.cfc` `$folders()`/`$files()`) now guard their directory listing with `DirectoryExists`, so an app that has removed `plugins/` (the common case now that packages live in `vendor//`) no longer errors at startup on engines whose directory listing throws on a missing path — Lucee/Adobe tolerate a missing dir, but stricter engines (e.g. RustCFML) did not. The plugins-directory lookup is deprecated and slated for removal in the next major diff --git a/cli/lucli/templates/app/public/Application.cfc b/cli/lucli/templates/app/public/Application.cfc index d7d0bfc1f..0a38c6aac 100644 --- a/cli/lucli/templates/app/public/Application.cfc +++ b/cli/lucli/templates/app/public/Application.cfc @@ -24,13 +24,14 @@ component output="false" { this.sessionManagement = true; // If a plugin has a jar or class file, automatically add the mapping to this.javasettings. + // Legacy plugins system (DEPRECATED — superseded by vendor// packages). + // Only scan when a plugins/ directory exists, so a removed plugins/ dir does not + // error on engines whose directoryList() throws on a missing path (e.g. RustCFML; + // Lucee tolerates it). This lookup is slated for removal in the next major. this.wheels.pluginDir = this.appDir & "../plugins"; - this.wheels.pluginFolders = DirectoryList( - this.wheels.pluginDir, - "true", - "path", - "*.class|*.jar|*.java" - ); + this.wheels.pluginFolders = DirectoryExists(this.wheels.pluginDir) + ? DirectoryList(this.wheels.pluginDir, "true", "path", "*.class|*.jar|*.java") + : []; for (this.wheels.folder in this.wheels.pluginFolders) { if (!StructKeyExists(this, "javaSettings")) { diff --git a/examples/starter-app/public/Application.cfc b/examples/starter-app/public/Application.cfc index 5c7a53d5e..954ba4e7d 100644 --- a/examples/starter-app/public/Application.cfc +++ b/examples/starter-app/public/Application.cfc @@ -26,13 +26,14 @@ component output="false" { this.sessionManagement = true; // If a plugin has a jar or class file, automatically add the mapping to this.javasettings. + // Legacy plugins system (DEPRECATED — superseded by vendor// packages). + // Only scan when a plugins/ directory exists, so a removed plugins/ dir does not + // error on engines whose directoryList() throws on a missing path (e.g. RustCFML; + // Lucee tolerates it). This lookup is slated for removal in the next major. this.wheels.pluginDir = this.appDir & "../plugins"; - this.wheels.pluginFolders = DirectoryList( - this.wheels.pluginDir, - "true", - "path", - "*.class|*.jar|*.java" - ); + this.wheels.pluginFolders = DirectoryExists(this.wheels.pluginDir) + ? DirectoryList(this.wheels.pluginDir, "true", "path", "*.class|*.jar|*.java") + : []; for (this.wheels.folder in this.wheels.pluginFolders) { if (!StructKeyExists(this, "javaSettings")) { diff --git a/examples/tweet/public/Application.cfc b/examples/tweet/public/Application.cfc index 5c7a53d5e..954ba4e7d 100755 --- a/examples/tweet/public/Application.cfc +++ b/examples/tweet/public/Application.cfc @@ -26,13 +26,14 @@ component output="false" { this.sessionManagement = true; // If a plugin has a jar or class file, automatically add the mapping to this.javasettings. + // Legacy plugins system (DEPRECATED — superseded by vendor// packages). + // Only scan when a plugins/ directory exists, so a removed plugins/ dir does not + // error on engines whose directoryList() throws on a missing path (e.g. RustCFML; + // Lucee tolerates it). This lookup is slated for removal in the next major. this.wheels.pluginDir = this.appDir & "../plugins"; - this.wheels.pluginFolders = DirectoryList( - this.wheels.pluginDir, - "true", - "path", - "*.class|*.jar|*.java" - ); + this.wheels.pluginFolders = DirectoryExists(this.wheels.pluginDir) + ? DirectoryList(this.wheels.pluginDir, "true", "path", "*.class|*.jar|*.java") + : []; for (this.wheels.folder in this.wheels.pluginFolders) { if (!StructKeyExists(this, "javaSettings")) { diff --git a/public/Application.cfc b/public/Application.cfc index ab004fb99..b1eb617a6 100644 --- a/public/Application.cfc +++ b/public/Application.cfc @@ -37,13 +37,14 @@ component output="false" { this.sessionManagement = true; // If a plugin has a jar or class file, automatically add the mapping to this.javasettings. + // Legacy plugins system (DEPRECATED — superseded by vendor// packages). + // Only scan when a plugins/ directory exists, so a removed plugins/ dir does not + // error on engines whose directoryList() throws on a missing path (e.g. RustCFML; + // Lucee tolerates it). This lookup is slated for removal in the next major. this.wheels.pluginDir = this.appDir & "../plugins"; - this.wheels.pluginFolders = DirectoryList( - this.wheels.pluginDir, - "true", - "path", - "*.class|*.jar|*.java" - ); + this.wheels.pluginFolders = DirectoryExists(this.wheels.pluginDir) + ? DirectoryList(this.wheels.pluginDir, "true", "path", "*.class|*.jar|*.java") + : []; for (this.wheels.folder in this.wheels.pluginFolders) { if (!StructKeyExists(this, "javaSettings")) { diff --git a/vendor/wheels/Plugins.cfc b/vendor/wheels/Plugins.cfc index 5fcec9b62..3386df7be 100644 --- a/vendor/wheels/Plugins.cfc +++ b/vendor/wheels/Plugins.cfc @@ -1041,6 +1041,14 @@ component output="false" extends="wheels.Global"{ } public query function $folders() { + // The legacy plugins/ directory is deprecated (superseded by vendor// + // packages) and may be absent. Skip the scan when it does not exist so + // engines whose directory listing throws on a missing path (e.g. RustCFML) + // don't fail at boot; Lucee/Adobe return empty for a missing dir anyway. + // Slated for removal with the plugins system in the next major. + if (!DirectoryExists(variables.$class.pluginPathFull)) { + return QueryNew("name,directory,type"); + } local.query = $directory( action = "list", directory = variables.$class.pluginPathFull, @@ -1086,6 +1094,10 @@ component output="false" extends="wheels.Global"{ } public query function $files() { + // See $folders(): the deprecated plugins/ directory may be absent. + if (!DirectoryExists(variables.$class.pluginPathFull)) { + return QueryNew("name,directory,type"); + } local.query = $directory( action = "list", directory = variables.$class.pluginPathFull, diff --git a/vendor/wheels/tests/specs/pluginsMissingDirSpec.cfc b/vendor/wheels/tests/specs/pluginsMissingDirSpec.cfc new file mode 100644 index 000000000..726743398 --- /dev/null +++ b/vendor/wheels/tests/specs/pluginsMissingDirSpec.cfc @@ -0,0 +1,67 @@ +component extends="wheels.WheelsTest" { + + function run() { + + g = application.wo + + // The legacy plugins/ directory is deprecated (superseded by vendor// + // packages) and apps are expected to remove it. The plugin loader must not + // error when it is absent — Lucee/Adobe return empty for a missing dir, but + // stricter engines (e.g. RustCFML) throw on directory listing of a missing + // path, which previously failed onApplicationStart. $folders()/$files() now + // short-circuit to an empty query when the directory does not exist. + describe("plugin loader with an absent plugins/ directory", () => { + + missingPath = "/wheels/tests/_assets/plugins/__this_directory_does_not_exist__" + + it("initializes without throwing when the plugins directory is missing", () => { + var config = { + path = "wheels", + fileName = "Plugins", + method = "$init", + pluginPath = missingPath, + deletePluginDirectories = false, + overwritePlugins = false, + loadIncompatiblePlugins = true + } + var state = {thrown = false} + try { + pluginObj = $pluginObj(config) + } catch (any e) { + state.thrown = true + } + expect(state.thrown).toBeFalse() + }) + + it("$folders() returns an empty query for a missing directory", () => { + var config = { + path = "wheels", fileName = "Plugins", method = "$init", pluginPath = missingPath, + deletePluginDirectories = false, overwritePlugins = false, loadIncompatiblePlugins = true + } + var pluginObj = $pluginObj(config) + expect(pluginObj.$folders().recordCount).toBe(0) + }) + + it("$files() returns an empty query for a missing directory", () => { + var config = { + path = "wheels", fileName = "Plugins", method = "$init", pluginPath = missingPath, + deletePluginDirectories = false, overwritePlugins = false, loadIncompatiblePlugins = true + } + var pluginObj = $pluginObj(config) + expect(pluginObj.$files().recordCount).toBe(0) + }) + }) + } + + // Mirror the sibling plugin specs (pluginsSpec.cfc:549, pluginsModernSpec, + // pluginsSemverSpec, pluginsManifestIntegrationSpec): a component-level + // helper that instantiates wheels.Plugins via $createObjectFromRoot and + // dispatches $init with the full config — INCLUDING pluginPath. Without it, + // $pluginObj(config) resolves to the parameterless Global.$pluginObj() that + // WheelsTest auto-binds, which ignores config and returns the cached PluginObj + // pointing at the real plugins/ dir — so the missing-path branch (the fix) + // never runs and these specs pass for the wrong reason. + function $pluginObj(required struct config) { + return g.$createObjectFromRoot(argumentCollection = arguments.config) + } +} From c281b41e3632a5fc46afc8c8e7db7779e53b9506 Mon Sep 17 00:00:00 2001 From: Peter Amiri Date: Tue, 16 Jun 2026 13:35:37 -0700 Subject: [PATCH 196/198] fix(mapper): cross-engine null-safety for BoxLang strict null handling (#3212) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix(mapper): cross-engine null-safety for BoxLang strict null handling BoxLang throws a NullPointerException on a null string/struct subject where Lucee and Adobe coerce null to ""/empty. Surfaced benchmarking the framework on BoxLang via the perf bench app. - mapper/matching.cfc: normalize a null derived `pattern` to "" after the pattern/name guard. A named route given via `to=` with no explicit pattern (or some resource forms) left `pattern` null at the Find/ReFindNoCase/concat sites, failing to load on BoxLang at onApplicationStart. - Dispatch.cfc $buildMiddlewareCgiScope(): default null request headers to {} before iterating, so a null from the servlet host doesn't NPE the CGI build. - events/EventMethods.cfc $runOnError(): guard a null exception `cause` before StructKeyExists so the error handler itself doesn't NPE. Adds mapperNullPatternSpec covering the named-`to=` and resources() route shapes the compat-matrix demo app (.wildcard().root() only) left unexercised on BoxLang. Behavior is unchanged on Lucee/Adobe (null already coerced); full core suite green (4539). Note: this fixes route loading + these request-path sites; BoxLang's live request path has further null-handling spots tracked separately. Signed-off-by: Peter Amiri * fix(mapper): derive named-route pattern on BoxLang instead of emptying it Addresses the bot review on #3212. The previous normalization set a null `pattern` to "" AFTER the name->pattern derivation, so on BoxLang a named route given via to= (e.g. .get(name="ping", to="main##ping")) got an EMPTY pattern instead of the hyphenized name every other engine produces — trading the NPE for a silent cross-engine divergence that breaks URL matching and linkTo(). Root cause: on BoxLang an unpassed optional `pattern` arg is a present-but-null key, so StructKeyExists() is true and the hyphenize() derivation is skipped. Fix: strip the present-null `pattern` key BEFORE the derivation block, so the existing hyphenize() path runs identically on every engine and the "pattern or name required" guard still fires when neither is supplied. Strengthen the spec (now PascalCase MapperNullPatternSpec) to assert the derived pattern value (r[1].pattern == "/ping") mirroring MatchingSpec, so an empty-pattern regression fails on the BoxLang matrix rather than passing. Full core suite green (4539). Signed-off-by: Peter Amiri * fix(events): guard present-null rootCause in $runOnError; correct changelog Address wheels-bot review on #3212: - EventMethods.cfc $runOnError dereferenced arguments.exception.cause.rootCause.type after only guarding `cause`, so a present-but-null `rootCause` (BoxLang strict null semantics) still NPE'd — the same null-deref class this PR hardens (reproduced on real BoxLang 1.11.0). Add symmetric !IsNull + IsStruct + StructKeyExists(...,"type") guards before the deref in both branches. - The changelog fragment described the OLD, superseded approach ("normalizes a null derived pattern to ''"). Rewrite it to match the shipped code: matching.cfc removes the present-null `pattern` key before derivation so a named route derives its pattern from its name. Also reflect the new rootCause guard and the PascalCase MapperNullPatternSpec filename. Co-Authored-By: Claude Opus 4.8 (1M context) Signed-off-by: Peter Amiri --------- Signed-off-by: Peter Amiri Co-authored-by: Peter Amiri Co-authored-by: Claude Opus 4.8 (1M context) --- changelog.d/boxlang-null-safety.fixed.md | 1 + vendor/wheels/Dispatch.cfc | 6 ++ vendor/wheels/events/EventMethods.cfc | 8 +++ vendor/wheels/mapper/matching.cfc | 10 +++ .../specs/mapper/MapperNullPatternSpec.cfc | 61 +++++++++++++++++++ 5 files changed, 86 insertions(+) create mode 100644 changelog.d/boxlang-null-safety.fixed.md create mode 100644 vendor/wheels/tests/specs/mapper/MapperNullPatternSpec.cfc diff --git a/changelog.d/boxlang-null-safety.fixed.md b/changelog.d/boxlang-null-safety.fixed.md new file mode 100644 index 000000000..53f37b937 --- /dev/null +++ b/changelog.d/boxlang-null-safety.fixed.md @@ -0,0 +1 @@ +- Hardened cross-engine null handling in the router, dispatcher, and error handler for BoxLang, whose stricter semantics throw a `NullPointerException` on a null string/struct subject where Lucee and Adobe coerce null to `""`/empty. `mapper/matching.cfc` now removes a present-but-null `pattern` key before route-pattern derivation, so a named route given via `to=` with no explicit pattern derives its pattern from the route name (a present-null `pattern` key previously skipped derivation and left a null pattern that failed to load on BoxLang); `Dispatch.cfc` `$buildMiddlewareCgiScope()` defaults null request headers to an empty struct; and `EventMethods.cfc` `$runOnError()` guards a null/non-struct exception `cause` and `rootCause` before dereferencing their `type`. New `MapperNullPatternSpec` exercises the route shapes (named `to=` and `resources()`) that the compat-matrix demo app's `.wildcard().root()` routes left uncovered on BoxLang diff --git a/vendor/wheels/Dispatch.cfc b/vendor/wheels/Dispatch.cfc index a1c94c201..704d9efd9 100644 --- a/vendor/wheels/Dispatch.cfc +++ b/vendor/wheels/Dispatch.cfc @@ -480,6 +480,12 @@ component output="false" extends="wheels.Global"{ if (!StructKeyExists(arguments, "headers")) { arguments.headers = $requestHttpHeaders(); } + // $requestHttpHeaders() can hand back null on some servlet hosts (BoxLang + // under certain servers); iterating a null subject NPEs there where + // Lucee/Adobe iterate an empty struct. Default to an empty struct. + if (IsNull(arguments.headers) || !IsStruct(arguments.headers)) { + arguments.headers = {}; + } local.rv = {}; for (local.headerName in arguments.headers) { if (Len(local.headerName) && IsSimpleValue(arguments.headers[local.headerName])) { diff --git a/vendor/wheels/events/EventMethods.cfc b/vendor/wheels/events/EventMethods.cfc index 4dc7c558c..ec055aaac 100644 --- a/vendor/wheels/events/EventMethods.cfc +++ b/vendor/wheels/events/EventMethods.cfc @@ -51,7 +51,11 @@ component extends="wheels.Global" implements="wheels.interfaces.events.EventHand local.wheelsError = arguments.exception; } else if ( StructKeyExists(arguments.exception, "cause") + && !IsNull(arguments.exception.cause) && IsStruct(arguments.exception.cause) && StructKeyExists(arguments.exception.cause, "rootCause") + && !IsNull(arguments.exception.cause.rootCause) + && IsStruct(arguments.exception.cause.rootCause) + && StructKeyExists(arguments.exception.cause.rootCause, "type") && Left(arguments.exception.cause.rootCause.type, 6) == "Wheels" ) { local.wheelsError = arguments.exception.cause.rootCause; @@ -61,7 +65,11 @@ component extends="wheels.Global" implements="wheels.interfaces.events.EventHand local.wheelsError = arguments.exception.rootCause; } else if ( StructKeyExists(arguments.exception, "cause") + && !IsNull(arguments.exception.cause) && IsStruct(arguments.exception.cause) && StructKeyExists(arguments.exception.cause, "rootCause") + && !IsNull(arguments.exception.cause.rootCause) + && IsStruct(arguments.exception.cause.rootCause) + && StructKeyExists(arguments.exception.cause.rootCause, "type") && Left(arguments.exception.cause.rootCause.type, 6) == "Wheels" ) { local.wheelsError = arguments.exception.cause.rootCause; diff --git a/vendor/wheels/mapper/matching.cfc b/vendor/wheels/mapper/matching.cfc index f45f1150d..5df815c52 100644 --- a/vendor/wheels/mapper/matching.cfc +++ b/vendor/wheels/mapper/matching.cfc @@ -350,6 +350,16 @@ component { } } + // On BoxLang an unpassed optional `pattern` argument surfaces as a + // present-but-null key (Lucee/Adobe treat it as absent). Strip it so the + // name->pattern derivation below runs identically on every engine — deriving + // `hyphenize(name)` for a named route, and letting the "pattern or name + // required" guard fire when neither is supplied — instead of a present-null + // key skipping derivation and leaving a null/empty pattern on BoxLang. + if (StructKeyExists(arguments, "pattern") && IsNull(arguments.pattern)) { + StructDelete(arguments, "pattern"); + } + // Pull route name from arguments if it exists. local.name = ""; if (StructKeyExists(arguments, "name")) { diff --git a/vendor/wheels/tests/specs/mapper/MapperNullPatternSpec.cfc b/vendor/wheels/tests/specs/mapper/MapperNullPatternSpec.cfc new file mode 100644 index 000000000..cabc2a06b --- /dev/null +++ b/vendor/wheels/tests/specs/mapper/MapperNullPatternSpec.cfc @@ -0,0 +1,61 @@ +/** + * Regression coverage for cross-engine null-pattern handling in $match(). + * + * On BoxLang an unpassed optional `pattern` argument surfaces as a present-but-null + * key (Lucee/Adobe treat it as absent), which skipped the name->pattern derivation + * and left the route with a null/empty pattern. $match() now strips that present-null + * key before the derivation so a named route gets the hyphenized name on every + * engine — not an empty pattern (which would silently break URL matching and + * linkTo()). + * + * The compat-matrix demo app routes are only `.wildcard().root()`, so the named + * `to=` shape was previously unexercised on BoxLang; these specs run in the matrix + * and assert the derived pattern value (not just "didn't throw") so an empty-pattern + * regression fails rather than passes. + */ +component extends="wheels.WheelsTest" { + + function beforeAll() { + _originalRoutes = Duplicate(application.wheels.routes); + _originalStaticRoutes = StructKeyExists(application.wheels, "staticRoutes") ? StructCopy( + application.wheels.staticRoutes + ) : {}; + } + + function afterAll() { + application.wheels.routes = _originalRoutes; + application.wheels.staticRoutes = _originalStaticRoutes; + } + + function run() { + describe("named route given via to= with no explicit pattern", () => { + + beforeEach(() => { + m = new wheels.Mapper(); + m.$init(); + }); + + afterEach(() => { + StructDelete(variables, "m"); + }); + + it("derives the hyphenized name as the pattern (not empty)", () => { + m.$draw().$match(name = "ping", method = "get", to = "main##ping").end(); + var r = m.getRoutes(); + expect(r[1].pattern).toBe("/ping"); + expect(r[1].name).toBe("ping"); + expect(r[1].controller).toBe("main"); + expect(r[1].action).toBe("ping"); + }); + + it("builds a resources() route set with non-empty patterns", () => { + m.$draw().resources(name = "posts", mapFormat = false).end(); + var routes = m.getRoutes(); + expect(ArrayLen(routes)).toBeGT(0); + for (var route in routes) { + expect(Len(route.pattern)).toBeGT(0); + } + }); + }); + } +} From 66e8c2c85c52e41d3ee4d93e3765e17caab8b73c Mon Sep 17 00:00:00 2001 From: "wheels-bot[bot]" <283220952+wheels-bot[bot]@users.noreply.github.com> Date: Wed, 17 Jun 2026 19:53:17 -0700 Subject: [PATCH 197/198] fix(model): resolve hasMany shortcut name in include expansion (#3208) (#3209) * fix(model): resolve hasMany shortcut name in include expansion (#3208) A hasMany shortcut name (e.g. shortcut="Category") is registered as a dynamic accessor method, not a first-class association. Passing it to findAll(include=...) fell through include expansion unchanged and then threw Wheels.AssociationNotFound. $expandThroughAssociations now resolves an include name that is not a this-model association but matches a hasMany shortcut into the nested bridge include (()), so the join through the bridge model happens as expected. The issue #3109 contract is preserved: real association names never enter the shortcut branch. Co-Authored-By: Claude Opus 4.8 Signed-off-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com> * docs(web/guides): note shortcut name accepted in findAll include for many-to-many Signed-off-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com> * chore(web): refresh visual baseline(s) (all) Manually triggered baseline refresh via .github/workflows/refresh-visual-baselines.yml on branch fix/bot-3208-hasmany-shortcut-association-not-recognised-by-inc. 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. --------- Signed-off-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com> Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com> Co-authored-by: Claude Opus 4.8 Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- .../3208-hasmany-shortcut-include.fixed.md | 1 + vendor/wheels/model/sql.cfc | 41 +++++++++++++++++-- .../tests/specs/model/hasManyShortcutSpec.cfc | 30 ++++++++++++++ .../docs/v4-0-0/basics/associations.mdx | 2 +- 4 files changed, 70 insertions(+), 4 deletions(-) create mode 100644 changelog.d/3208-hasmany-shortcut-include.fixed.md diff --git a/changelog.d/3208-hasmany-shortcut-include.fixed.md b/changelog.d/3208-hasmany-shortcut-include.fixed.md new file mode 100644 index 000000000..1762f7ed4 --- /dev/null +++ b/changelog.d/3208-hasmany-shortcut-include.fixed.md @@ -0,0 +1 @@ +- `findAll(include=...)` now accepts a `hasMany` `shortcut` name and expands it into the nested bridge include (e.g. `include="Category"` joins through `ProductCategories`) instead of throwing `Wheels.AssociationNotFound` (#3208) diff --git a/vendor/wheels/model/sql.cfc b/vendor/wheels/model/sql.cfc index ab5c0375d..773068beb 100644 --- a/vendor/wheels/model/sql.cfc +++ b/vendor/wheels/model/sql.cfc @@ -1219,11 +1219,46 @@ component { } } } else { - // No through association, use as-is - local.rv = ListAppend(local.rv, local.currentInclude); + // `currentInclude` is not a this-model `through` association. It may, + // however, be the `shortcut` name of a many-to-many `hasMany` — a + // convenience accessor registered as a dynamic method (consumed by the + // shortcut dispatcher in $associationMethod), NOT as a first-class + // includable association. When such a name reaches `include`, resolve it + // to the nested this-model bridge include so the join still happens + // instead of throwing Wheels.AssociationNotFound (issue #3208). + // + // Only the shortcut path is rewritten here: a plain association without + // a `through` is left untouched, and a real association whose name was + // passed (even one carrying a shortcut's own through-chain) never enters + // this branch — preserving the issue #3109 contract. + local.shortcutExpanded = ""; + if (!StructKeyExists(local.associations, local.currentInclude)) { + for (local.assocName in local.associations) { + local.assoc = local.associations[local.assocName]; + if ( + StructKeyExists(local.assoc, "shortcut") + && Len(local.assoc.shortcut) + && local.assoc.shortcut == local.currentInclude + && StructKeyExists(local.assoc, "through") + && ListLen(local.assoc.through) == 2 + ) { + // through = ","; + // the first segment is the bridge model's association to the far + // side, so the shortcut joins as "()". + local.shortcutExpanded = local.assocName & "(" & ListFirst(local.assoc.through) & ")"; + break; + } + } + } + if (Len(local.shortcutExpanded)) { + local.rv = ListAppend(local.rv, local.shortcutExpanded); + } else { + // No through / shortcut match, use as-is + local.rv = ListAppend(local.rv, local.currentInclude); + } } } - + return local.rv; } diff --git a/vendor/wheels/tests/specs/model/hasManyShortcutSpec.cfc b/vendor/wheels/tests/specs/model/hasManyShortcutSpec.cfc index 653901060..03a5b1e8c 100644 --- a/vendor/wheels/tests/specs/model/hasManyShortcutSpec.cfc +++ b/vendor/wheels/tests/specs/model/hasManyShortcutSpec.cfc @@ -72,6 +72,36 @@ component extends="wheels.WheelsTest" { }); }); + describe("hasMany shortcut name as an include (issue ##3208)", () => { + + it("expands a shortcut name into the nested bridge include", () => { + // `memberTeams` declares `shortcut="teams"`, so the convenience name + // "teams" is NOT an association on Member — it only exists as a dynamic + // accessor. Used in `include`, it must expand into the this-model bridge + // include "memberTeams(team)" (Member -> memberTeams -> Team) instead of + // throwing Wheels.AssociationNotFound. ListFirst(through) ("team") is the + // bridge model's association to the far side. + var expanded = g.model("member").$expandThroughAssociations("teams"); + expect(expanded).toBe("memberTeams(team)"); + }); + + it("eager-loads the far side through a shortcut include", () => { + // Alice carries two join rows, Bob one — joining through the bridge to + // Team yields one row per join row, and must not throw. + var members = g.model("member").findAll(include = "teams", order = "id"); + expect(members.recordCount).toBe(3); + }); + + it("expands a shortcut declared with an explicit through override", () => { + // `rosterSpots` declares `shortcut="squads"` with an explicit + // `through="squad,rosterEntries"`. ListFirst(through) ("squad") is the + // bridge model's association to Team, so "squads" expands to the nested + // this-model include "rosterSpots(squad)". + var expanded = g.model("member").$expandThroughAssociations("squads"); + expect(expanded).toBe("rosterSpots(squad)"); + }); + }); + describe("$expandThroughAssociations this-model rewrite (preserved PR ##449 behavior)", () => { it("rewrites a 2-element through whose first segment IS an association on the model", () => { diff --git a/web/sites/guides/src/content/docs/v4-0-0/basics/associations.mdx b/web/sites/guides/src/content/docs/v4-0-0/basics/associations.mdx index 64d90a5fb..2dbe3c4df 100644 --- a/web/sites/guides/src/content/docs/v4-0-0/basics/associations.mdx +++ b/web/sites/guides/src/content/docs/v4-0-0/basics/associations.mdx @@ -239,7 +239,7 @@ component extends="Model" { } ``` -A single `hasMany` with `shortcut` provides both access paths: `user.userRoles()` for the join rows and `user.roles()` for the far-side records. Behind the scenes Wheels walks both association chains to build the query. The same declaration also works correctly with `include` — `model("User").findAll(include="userRoles")` joins the join table as expected. +A single `hasMany` with `shortcut` provides both access paths: `user.userRoles()` for the join rows and `user.roles()` for the far-side records. Behind the scenes Wheels walks both association chains to build the query. Both names also work in `include`: `model("User").findAll(include="userRoles")` loads just the join rows, and `model("User").findAll(include="roles")` uses the shortcut name to load the far-side records through the bridge in one step (Wheels expands it to `userRoles(role)` automatically). The join model needs both `belongsTo` declarations: From 8c4b2f35203de701169b262988fcc4d37e5a31e8 Mon Sep 17 00:00:00 2001 From: Peter Amiri Date: Thu, 18 Jun 2026 18:31:42 -0700 Subject: [PATCH 198/198] chore(release): promote changelog into [4.0.4] (+ fix promote tooling) (#3219) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix(build): changelog-promote emits release.yml-compatible section format The changelog.d fragment system (#2994) was never exercised by a real cut. Its promote step wrote "## [version] - date" (two-hash, no tag link), but every released section — and release.yml's notes extraction (awk '/^# \[VERSION\]/,/^---$/') — uses a single-hash "# [version](tag) => date". With the two-hash header the one-hash awk extracts zero lines, so the GitHub Release would publish with EMPTY notes. Also: boundary detection searched for the next "## " heading, but version sections here are single-hash, so the first "## " match landed on a subheading inside the 3.0.0 section — pulling every release since into the promoted body. And a stray "----"/"---" rule in [Unreleased] could leak in. - Match the next version heading at "#" OR "##" + " [" (correct tail boundary). - Drop horizontal-rule lines from the promoted body. - Emit "# [version](tag-url) => date" + explicit "---" separators around it. Co-Authored-By: Claude Opus 4.8 (1M context) Signed-off-by: Peter Amiri * chore(release): assemble changelog.d fragments into [4.0.4] Promote the 83 pending changelog.d fragments (plus prior [Unreleased] content) into the [4.0.4] release section via tools/changelog-promote.sh, and clear the fragment folder. Done on develop first (per the release playbook) so develop's [Unreleased] doesn't go stale and force a back-port after the cut. Co-Authored-By: Claude Opus 4.8 (1M context) Signed-off-by: Peter Amiri * fix(build): consolidate changelog sections by heading in canonical order The first promote pass exposed a second defect: when [Unreleased] carries the same heading twice (develop had two '### Performance' blocks), the merge appended the fragment bullets to EACH same-named section — double-counting every performance fragment (e.g. the $getStatusCodes entry appeared twice). It also emitted sections in [Unreleased] file order with the duplicate intact and fragment-only sections tacked on last. merged_sections now combines all bullets for a heading into ONE section and emits sections in canonical order (Added, Changed, Deprecated, Removed, Performance, Fixed, Security), existing bullets before fragment bullets. Regenerated the [4.0.4] section: 116 unique entries (was 124 with 8 dupes), canonical order, no duplicate headings. Verified zero unique entries lost. Co-Authored-By: Claude Opus 4.8 (1M context) Signed-off-by: Peter Amiri * docs(build): sync changelog-promote usage header + summary to new format Address the Reviewer-A nit: the top-of-file usage comment still advertised the old "## [version] - date" shape and the summary print() used " - " — both now reflect the single-hash, tag-linked, "=>"-dated section the script emits. Co-Authored-By: Claude Opus 4.8 (1M context) Signed-off-by: Peter Amiri * test(build): cover new changelog-promote format + section consolidation Address Reviewer-A (CHANGES_REQUESTED): the format change broke Test 3, which still asserted the old "## [ver] - date" header — re-anchor it to the single-hash, tag-linked, "=>"-dated section the script now emits. Add Test 5 covering the merged_sections consolidation: a [Unreleased] body with two "### Performance" blocks plus a matching *.performance.md fragment must collapse to one heading in canonical order with each bullet appearing exactly once (the double-count regression the 4.0.4 cut surfaced). Full suite green (11/11). Co-Authored-By: Claude Opus 4.8 (1M context) Signed-off-by: Peter Amiri --------- Signed-off-by: Peter Amiri Co-authored-by: Peter Amiri Co-authored-by: Claude Opus 4.8 (1M context) --- CHANGELOG.md | 112 +++++++++++++++++- ...pluginobj-request-lifecycle.performance.md | 1 - .../2911-ratelimiter-db-storage.fixed.md | 2 - changelog.d/2957-deploy-w4-rollup.fixed.md | 5 - ...uilder-scope-handler-sanitization.fixed.md | 1 - .../3016-mcp-deprecation-stale-path.fixed.md | 1 - changelog.d/3026-cli-test-base-path.fixed.md | 1 - .../3029-dispatch-bare-cfabort-adobe.fixed.md | 1 - .../3030-reload-envswitch-redirect.fixed.md | 1 - .../3031-envswitch-explicit-override.fixed.md | 1 - .../3045-upgrade-apply-docs.changed.md | 1 - ...53-buildredirecturl-url-shadowing.fixed.md | 1 - ...reload-component-case-sensitivity.fixed.md | 1 - ...rectafterreload-deferred-location.fixed.md | 1 - .../3059-cli-reload-false-success.fixed.md | 1 - ...2-reload-password-fails-closed.security.md | 1 - .../3063-includeconfig-compile-guard.fixed.md | 1 - .../3072-scope-namespace-callback.fixed.md | 1 - .../3074-middleware-context-cgi.fixed.md | 1 - .../3075-actionnotallowed-404-status.fixed.md | 1 - .../3076-onerror-engineadapter-scope.fixed.md | 1 - .../3077-sendfile-absolute-directory.fixed.md | 1 - .../3079-tablename-getter-guard.fixed.md | 1 - ...te-info-doctor-read-side-fallback.fixed.md | 1 - .../3081-cli-migration-exit-codes.fixed.md | 1 - changelog.d/3082-cli-seed-generate.fixed.md | 1 - ...3083-test-runner-scope-visibility.fixed.md | 1 - changelog.d/3090-jobs-worker-cli.added.md | 1 - changelog.d/3109-hasmany-shortcut.fixed.md | 1 - .../3110-reload-refire-contract.fixed.md | 1 - ...generate-controller-comma-actions.fixed.md | 1 - .../3113-cli-test-ci-annotations.fixed.md | 1 - .../3113-cli-test-verbose-tree.fixed.md | 1 - ...ors-global-middleware-arbitration.fixed.md | 1 - .../3115-upgrade-check-csrf-key-name.fixed.md | 1 - ...-rendering-bare-controller-params.fixed.md | 1 - ...8-deploy-init-envsecret-roundtrip.fixed.md | 1 - ...-redact-remote-failure-secrets.security.md | 1 - changelog.d/3175-welcome-page-title.fixed.md | 1 - .../3208-hasmany-shortcut-include.fixed.md | 1 - changelog.d/boxlang-null-safety.fixed.md | 1 - changelog.d/changelog-fragments.added.md | 1 - .../csrf-config-super-warning.added.md | 1 - ...pter-identity-fallbacks-and-dedup.fixed.md | 3 - changelog.d/debugbar-env-quickswitch.fixed.md | 1 - .../debugbar-externalized-assets.changed.md | 1 - ...deploy-config-destination-overlay.fixed.md | 1 - ...ploy-env-secret-env-file-delivery.added.md | 1 - .../deploy-fresh-host-bootstrap.fixed.md | 1 - .../deploy-hook-masking-and-app-port.fixed.md | 2 - changelog.d/deploy-lock-correctness.fixed.md | 2 - ...ploy-numeric-release-dry-run-hang.fixed.md | 1 - .../deploy-remote-exec-security.security.md | 1 - .../deploy-secrets-project-root.fixed.md | 1 - ...deploy-validator-allowlist-trim.changed.md | 1 - .../deploy-validator-host-colons.fixed.md | 1 - changelog.d/deploy-w3-observability.fixed.md | 3 - .../deploy-warmup-up-endpoint.added.md | 1 - .../dev-ui-cacheable-assets.changed.md | 1 - .../devui-info-metadata-core-format.fixed.md | 1 - .../eventmethods-headers-memo.performance.md | 1 - ...panded-associations-metadata-lock.fixed.md | 1 - .../issue-2952-model-sql-layer.security.md | 4 - .../mcp-integration-guide-tool-table.fixed.md | 1 - ...cp-tool-specs-and-test-crash-exit.added.md | 1 - .../onerror-di-container-guard.fixed.md | 1 - changelog.d/plugins-dir-optional.fixed.md | 1 - ...e-template-loud-migration-failure.fixed.md | 1 - ...omote-included-globals-memo.performance.md | 1 - ...protected-methods-o1-lookup.performance.md | 1 - changelog.d/ratelimiter-memory-store.fixed.md | 1 - ...includefile-logged-column-default.fixed.md | 1 - ...codes-memo-columnlist-hoist.performance.md | 2 - changelog.d/renderwith-json-coercion.fixed.md | 1 - ...t-start-plugins-guard-hoist.performance.md | 1 - changelog.d/reviewer-nit-sweep.fixed.md | 1 - .../route-tester-xss-and-scan.fixed.md | 1 - .../router-named-capture-groups.fixed.md | 1 - .../schema-column-cache.performance.md | 1 - changelog.d/seeder-partial-failure.fixed.md | 1 - .../struct-enum-validation-mismatch.fixed.md | 1 - changelog.d/subpath-setting.added.md | 1 - changelog.d/trust-proxy-headers.security.md | 1 - changelog.d/upgrade-apply-mode.added.md | 1 - tools/changelog-promote.sh | 92 ++++++++++---- tools/test-changelog-promote.sh | 59 ++++++++- 86 files changed, 235 insertions(+), 126 deletions(-) delete mode 100644 changelog.d/2897-shared-pluginobj-request-lifecycle.performance.md delete mode 100644 changelog.d/2911-ratelimiter-db-storage.fixed.md delete mode 100644 changelog.d/2957-deploy-w4-rollup.fixed.md delete mode 100644 changelog.d/3013-querybuilder-scope-handler-sanitization.fixed.md delete mode 100644 changelog.d/3016-mcp-deprecation-stale-path.fixed.md delete mode 100644 changelog.d/3026-cli-test-base-path.fixed.md delete mode 100644 changelog.d/3029-dispatch-bare-cfabort-adobe.fixed.md delete mode 100644 changelog.d/3030-reload-envswitch-redirect.fixed.md delete mode 100644 changelog.d/3031-envswitch-explicit-override.fixed.md delete mode 100644 changelog.d/3045-upgrade-apply-docs.changed.md delete mode 100644 changelog.d/3053-buildredirecturl-url-shadowing.fixed.md delete mode 100644 changelog.d/3053-reload-component-case-sensitivity.fixed.md delete mode 100644 changelog.d/3054-redirectafterreload-deferred-location.fixed.md delete mode 100644 changelog.d/3059-cli-reload-false-success.fixed.md delete mode 100644 changelog.d/3062-reload-password-fails-closed.security.md delete mode 100644 changelog.d/3063-includeconfig-compile-guard.fixed.md delete mode 100644 changelog.d/3072-scope-namespace-callback.fixed.md delete mode 100644 changelog.d/3074-middleware-context-cgi.fixed.md delete mode 100644 changelog.d/3075-actionnotallowed-404-status.fixed.md delete mode 100644 changelog.d/3076-onerror-engineadapter-scope.fixed.md delete mode 100644 changelog.d/3077-sendfile-absolute-directory.fixed.md delete mode 100644 changelog.d/3079-tablename-getter-guard.fixed.md delete mode 100644 changelog.d/3080-migrate-info-doctor-read-side-fallback.fixed.md delete mode 100644 changelog.d/3081-cli-migration-exit-codes.fixed.md delete mode 100644 changelog.d/3082-cli-seed-generate.fixed.md delete mode 100644 changelog.d/3083-test-runner-scope-visibility.fixed.md delete mode 100644 changelog.d/3090-jobs-worker-cli.added.md delete mode 100644 changelog.d/3109-hasmany-shortcut.fixed.md delete mode 100644 changelog.d/3110-reload-refire-contract.fixed.md delete mode 100644 changelog.d/3112-generate-controller-comma-actions.fixed.md delete mode 100644 changelog.d/3113-cli-test-ci-annotations.fixed.md delete mode 100644 changelog.d/3113-cli-test-verbose-tree.fixed.md delete mode 100644 changelog.d/3114-cors-global-middleware-arbitration.fixed.md delete mode 100644 changelog.d/3115-upgrade-check-csrf-key-name.fixed.md delete mode 100644 changelog.d/3136-rendering-bare-controller-params.fixed.md delete mode 100644 changelog.d/3158-deploy-init-envsecret-roundtrip.fixed.md delete mode 100644 changelog.d/3159-deploy-redact-remote-failure-secrets.security.md delete mode 100644 changelog.d/3175-welcome-page-title.fixed.md delete mode 100644 changelog.d/3208-hasmany-shortcut-include.fixed.md delete mode 100644 changelog.d/boxlang-null-safety.fixed.md delete mode 100644 changelog.d/changelog-fragments.added.md delete mode 100644 changelog.d/csrf-config-super-warning.added.md delete mode 100644 changelog.d/db-adapter-identity-fallbacks-and-dedup.fixed.md delete mode 100644 changelog.d/debugbar-env-quickswitch.fixed.md delete mode 100644 changelog.d/debugbar-externalized-assets.changed.md delete mode 100644 changelog.d/deploy-config-destination-overlay.fixed.md delete mode 100644 changelog.d/deploy-env-secret-env-file-delivery.added.md delete mode 100644 changelog.d/deploy-fresh-host-bootstrap.fixed.md delete mode 100644 changelog.d/deploy-hook-masking-and-app-port.fixed.md delete mode 100644 changelog.d/deploy-lock-correctness.fixed.md delete mode 100644 changelog.d/deploy-numeric-release-dry-run-hang.fixed.md delete mode 100644 changelog.d/deploy-remote-exec-security.security.md delete mode 100644 changelog.d/deploy-secrets-project-root.fixed.md delete mode 100644 changelog.d/deploy-validator-allowlist-trim.changed.md delete mode 100644 changelog.d/deploy-validator-host-colons.fixed.md delete mode 100644 changelog.d/deploy-w3-observability.fixed.md delete mode 100644 changelog.d/deploy-warmup-up-endpoint.added.md delete mode 100644 changelog.d/dev-ui-cacheable-assets.changed.md delete mode 100644 changelog.d/devui-info-metadata-core-format.fixed.md delete mode 100644 changelog.d/eventmethods-headers-memo.performance.md delete mode 100644 changelog.d/expanded-associations-metadata-lock.fixed.md delete mode 100644 changelog.d/issue-2952-model-sql-layer.security.md delete mode 100644 changelog.d/mcp-integration-guide-tool-table.fixed.md delete mode 100644 changelog.d/mcp-tool-specs-and-test-crash-exit.added.md delete mode 100644 changelog.d/onerror-di-container-guard.fixed.md delete mode 100644 changelog.d/plugins-dir-optional.fixed.md delete mode 100644 changelog.d/populate-template-loud-migration-failure.fixed.md delete mode 100644 changelog.d/promote-included-globals-memo.performance.md delete mode 100644 changelog.d/protected-methods-o1-lookup.performance.md delete mode 100644 changelog.d/ratelimiter-memory-store.fixed.md delete mode 100644 changelog.d/rendering-includefile-logged-column-default.fixed.md delete mode 100644 changelog.d/rendering-statuscodes-memo-columnlist-hoist.performance.md delete mode 100644 changelog.d/renderwith-json-coercion.fixed.md delete mode 100644 changelog.d/request-start-plugins-guard-hoist.performance.md delete mode 100644 changelog.d/reviewer-nit-sweep.fixed.md delete mode 100644 changelog.d/route-tester-xss-and-scan.fixed.md delete mode 100644 changelog.d/router-named-capture-groups.fixed.md delete mode 100644 changelog.d/schema-column-cache.performance.md delete mode 100644 changelog.d/seeder-partial-failure.fixed.md delete mode 100644 changelog.d/struct-enum-validation-mismatch.fixed.md delete mode 100644 changelog.d/subpath-setting.added.md delete mode 100644 changelog.d/trust-proxy-headers.security.md delete mode 100644 changelog.d/upgrade-apply-mode.added.md diff --git a/CHANGELOG.md b/CHANGELOG.md index 3532deb5a..fd58b2857 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -24,14 +24,42 @@ All historical references to "CFWheels" in this changelog have been preserved fo (see changelog.d/README.md); fragments are assembled into this file at release promotion via tools/changelog-promote.sh. --> +--- + +# [4.0.4](https://github.com/wheels-dev/wheels/releases/tag/v4.0.4) => 2026-06-18 + ### Added - `wheels upgrade check --strict` escalates advisory findings (the "Recommended Improvements" section) to the same hard-fail path as breaking findings, throwing `Wheels.UpgradeCheckFailed` and exiting non-zero so CI pipelines can gate on opt-in convention changes. Without `--strict`, advisories continue to report-and-pass. Under `--format=json` the emitted document's `success` field is gated on both breaking findings and the strict-advisory case, and the `strict` flag is echoed back so `jq .success` and `$?` always agree. The flag is documented in `wheels upgrade` help output (#2963). - `services/ArgSpec.toInputSchema()` derives a JSON-Schema-compatible `{type:"object", properties, required, additionalProperties:false}` envelope from a command's declared positionals / flags / options. `positional()` / `flag()` / `option()` now accept an optional `description` argument that flows into each emitted property (FastMCP / Symfony JsonDescriptor pattern). Foundation for per-tool MCP input schemas; wiring into `tools/list` is a follow-up (#2963). +- `wheels jobs work` (long-lived worker loop with `--queue`, `--interval`, `--max-jobs`, `--quiet`) and `wheels jobs status` (`--queue`, `--format=json`) CLI commands — thin wrappers over the existing `jobsProcessNext`/`jobsStatus` framework bridge that was left without a CLI surface in the LuCLI migration; the `retry`/`purge`/`monitor` verbs remain tracked follow-ups (#3090) +- Changelog entries are now authored as per-PR fragment files under `changelog.d/` (`..md`) instead of direct `CHANGELOG.md` edits, eliminating the `[Unreleased]`-anchor merge conflict every concurrently-open PR used to have with every other. `tools/changelog-promote.sh ` assembles fragments (plus any legacy `[Unreleased]` content) into the new version section at release cut and clears the folder. PR template, bot prompts (propose-fix, review-pr, address-review), and the TDD gate updated to the fragment convention (#2958) +- Development-mode warning (debug bar + wheels log) when a controller overrides `config()` without calling `super.config()`, which silently drops the base controller's `protectsFromForgery()` CSRF wiring and other inherited setup such as filters and verifies ([#2960](https://github.com/wheels-dev/wheels/issues/2960)) +- `wheels deploy` now delivers `env.secret` values to app and accessory containers via a remote env file (Kamal model): the file is created with 600 permissions before any content lands and re-locked to 600 right after the upload (the SFTP layer is also told not to carry local file attributes onto the remote), values travel over SFTP only (never argv, dry-run output, or exception summaries), and `docker run` references it with `--env-file`. A declared secret with no resolvable `.kamal/secrets` value fails fast with `Wheels.Deploy.EnvSecretMissing` (names only) before any remote call; the `Wheels.Deploy.EnvSecretUnsupported` fail-fast from #3008 is retired (#2957) +- New apps scaffolded with `wheels new` now ship a `/up` liveness/warm-up endpoint (`app/controllers/Up.cfc` + route). `wheels deploy`'s proxy healthcheck already probes `/up` before traffic cutover, so the dispatch → controller → render path is compiled on a freshly deployed node before the first real visitor — moving the one-time cold-start compile (the bulk of first-request latency) off user traffic. The production-config guide documents the warm-up recipe and recommends setting the engine's template-inspection mode to `never` in production (#3210) +- `mcpToolSpecs()` on the CLI module returns per-tool MCP input schemas (`test`, `seed`, `analyze`, `destroy`, `notes`, `upgrade`, `doctor`, `stats`), each built from the SAME ArgSpec the command's parser uses — extracted into shared per-command builders with property descriptions — so the CLI parse surface and the MCP `tools/list` advertisement cannot drift. Read by LuCLI per the `mcpHiddenTools()`-style optional convention (runtime support ships separately); commands still on hand-rolled parsing gain entries as #2861 migrates them. `wheels test` now also throws `Wheels.TestRunFailed` (non-zero exit) when the run crashes before producing results — previously a mid-run crash printed red but exited 0, which the post-run `Wheels.TestsFailed` gate (failing tests only) never caught (#2963). +- `set(subpath="/wheelsproject1")` (or the `WHEELS_SUBPATH` environment variable) now overrides the `cgi.script_name`-derived `webPath` / `rootPath` / `rootcomponentPath` / `wheelsComponentPath` so apps deployed under a URL subpath — CommandBox single-site → IIS subfolder migrations, reverse proxies that fold `/public/` out of the URL, generally any deployment where `cgi.script_name` does not match the public mount point — no longer need to hand-patch `application.$wheels.webPath` after each framework upgrade. Detection priority: explicit `set(subpath=...)` in `config/settings.cfm` wins; otherwise `server.system.environment.WHEELS_SUBPATH` is consulted; otherwise the legacy `cgi.script_name` derivation runs unchanged so existing root-install behavior is preserved. Path derivation is extracted into a pure, unit-testable helper `$resolveFrameworkPaths()` on `wheels.Global`. Subpath input is normalized (leading slash added, trailing slashes stripped, `"/"` treated as a root install) and the helper uses only cross-engine-safe primitives (`Replace`, `ListChangeDelims`, `Right`/`Left` with the Lucee 7 `Left(str, 0)` guard). (#2968) +- `wheels upgrade apply` performs the framework swap: it replaces the app's `vendor/wheels/` with the framework bundled in the installed CLI, announcing the exact backup destination (`vendor/wheels.bak-/`) and the one-line recovery command before touching anything (`--nobackup` opts out; a mid-copy failure throws `Wheels.FrameworkUpgrader.CopyFailed` naming the backup to restore from). Bare `wheels upgrade` prints usage and never modifies files — destructive commands require the explicit verb, so MCP clients calling `wheels_upgrade` with `{}` can never trigger the swap. Safety rails fire before any mutation: refuses outside a Wheels app, when source or target doesn't sniff as a real framework directory (`wheels.json`/`box.json` must carry a non-empty version identifying Wheels — a generic app `box.json` is rejected), when source and target resolve to the same directory (e.g. inside the wheels repo checkout), on unknown flags/subcommands, and when `--to=` doesn't match the bundled framework version — downloading arbitrary `--to=` targets is the planned follow-up. `wheels upgrade check` keeps the read-only scan unchanged (including `--strict`, `--format=json`, and the non-zero-exit contract); its closing hint now points at `wheels upgrade apply` instead of `brew upgrade wheels`, which only ever upgraded the CLI binary ([#3035](https://github.com/wheels-dev/wheels/issues/3035)) + +### Changed + +- Docs: upgrade guide, release-channels, and 3x-to-4x migration guide updated to document `wheels upgrade apply` as the framework-swap verb alongside `wheels upgrade check` (#3045) +- The development debug bar's static CSS and JavaScript are now maintained as standalone files (`vendor/wheels/public/assets/css/debugbar.css`, `vendor/wheels/public/assets/js/debugbar.js`) and included into the bar, eliminating the CFML `##`-escaped inline blocks (a documented "unescaped `#` crashes the suite" hazard) and trimming the per-response debug payload via inter-tag whitespace collapse. The bar remains development-only and unchanged in production (#3210) +- `wheels deploy` config validation now rejects the 13 Kamal top-level keys the runtime never reads (`boot`, `healthcheck`, `hooks`, `volumes`, `labels`, `logging`, `retain_containers`, `minimum_version`, `asset_path`, `require_destination`, `allow_empty_roles`, `run_directory`, `readiness_delay`) instead of accepting-and-ignoring them; the `unknown top-level key` error now lists the allowed keys ([#3088](https://github.com/wheels-dev/wheels/issues/3088)) +- Dev-UI pages (`/wheels/info`, `/wheels/routes`, `/wheels/migrator`, etc.) no longer inline ~1MB of JS/CSS (jQuery, Semantic UI, marked, highlight.js, base64 icon font) into every response. Bundled assets are now served from a `/wheels/assets/*` route with `Cache-Control: public, max-age=31536000, immutable` and a framework-version cache-buster, shrinking typical dev-UI page payloads from ~1.1MB to under 100KB after first load ([#2959](https://github.com/wheels-dev/wheels/issues/2959)). ### Performance - `URLFor()` controller/action route lookup is now memoized in application scope with negative caching, instead of a per-request memo that only cached matches. The previous memo was rebuilt on every request and was never written on a miss, so wildcard-`[controller]` apps — where `$addRoute` strips the `controller` key, guaranteeing no match — re-scanned the entire route table for every `linkTo` / `urlFor` / `redirectTo` call, on every request. The new `application.wheels.urlForCache` survives across requests and caches both hits and misses (empty-string sentinel) for O(1) lookup. Invalidation is plumbed through both `$lockedLoadRoutes` (route reload) and `$addRoute` (any mutation, including test-suite manipulation), so a previously negative-cached `(controller, action)` pair that a newly-added route now matches can never serve a stale miss (#2955) +- `model()` and `controller()` (global helpers in `vendor/wheels/Global.cfc`) now take a lock-free warm fast path on cache hits — a direct `StructKeyExists` lookup against `application.wheels.models` / `application.wheels.controllers` returns the cached class before `$doubleCheckedLock` (and its `$invoke` reflective `cfinvoke` dispatch) is consulted. Issue #2897 noted these as the framework's hottest warm-path calls, taking two reflective dispatches per association / per validation / per row just to evaluate a one-line cache predicate. The slow path is unchanged; cold-path bootstrap, `?reload=true` cache invalidation, and `controller(name, params)` calling `$createControllerObject(params)` on the cached class are all preserved. Two new internal helpers — `$cachedModelLookup(name)` and `$cachedControllerLookup(name)` — embody the guarded lookup, defending against early-bootstrap windows where `application.wheels.models` may not yet exist. Stages 2–4 from #2897 (mixin-integration memoization, shared `PluginObj`, `$resolveInitArguments` memoization) are deferred to follow-ups. +- Request-lifecycle mixin injection (`onDIcomplete` on controllers, model objects and the dispatcher, plus `$runOnRequestStart`) now reuses the application-cached `Plugins` instance via the new `$pluginObj()` helper instead of constructing a throwaway `wheels.Plugins` — and paying its 4,000-line `wheels.Global` parent pseudo-constructor — per request and per materialized model row. `$initializeMixins` keeps its scratch state (`appKey`/`metaData`/`className`) strictly local-scoped so the shared instance is safe across concurrent requests, and the `$runOnRequestStart` construction is hoisted inside the mixins-nonempty guard so mixin-free apps skip it entirely (#2897, Stage 3) +- `$runOnRequestStart` no longer re-materializes `GetHTTPRequestData()` on every request: the `request.$wheelsHeaders` memo guard checked a misspelled singular key, and headers are now reused from the `request.wheels.httpRequestData` snapshot taken at request start (#2961) +- Memoized the `$promoteIncludedGlobalsToThis()` promote-key scan that previously ran `isCustomFunction()` over every `variables` key on every instantiation of every Global-derived component (per model row, per controller, per Plugins instance). The include-injected function set is application-lifetime-constant, so the promote-key list is now cached in application scope (keyed per scanned class surface) and invalidated structurally by `?reload=true`; contexts without an application scope fall back to the full scan ([#2897](https://github.com/wheels-dev/wheels/issues/2897) PR C). +- The per-request action-dispatch gate now tests the protected-helper list with an O(1) `StructKeyExists` lookup instead of an O(n) `ListFindNoCase` scan over the ~100-250 framework helper names. A companion `application.wheels.protectedControllerMethodsLookup` struct-as-set is built once at application start alongside the existing comma-list (which is retained); case-insensitive matching is unchanged (#3210) +- `$getStatusCodes()` no longer rebuilds its 63-entry HTTP status map on every render: the map is memoized in the application scope together with a deterministic reverse (text-to-code) lookup, so `$returnStatusCode("Not Found")` is a struct-key hit instead of a `StructFindValue` scan over a freshly rebuilt struct, and a duplicated status text (e.g. "Unassigned" at 427/430/509) now always resolves to the lowest matching code (#2961) +- `$includeFile()` tokenizes the query column list once per partial render instead of re-running `ListToArray(query.columnList)` on every row of both per-row loops (#2961) +- Mixin-free apps no longer pay a throwaway `wheels.Plugins` (plus its `wheels.Global` pseudo-constructor) instantiation on every request: `$runOnRequestStart` now constructs the instance only inside the `!StructIsEmpty(application.wheels.mixins)` guard where it is used (issue [#2897](https://github.com/wheels-dev/wheels/issues/2897), Stage 3 quick win). +- Database column metadata is now memoized per datasource+table in `application.wheels.schemaColumnCache` when `cacheDatabaseSchema` is on (the default). Previously every model class init issued a fresh `cfdbinfo type="columns"` JDBC catalog round-trip — a significant first-request cost on remote or wide-schema databases, re-paid on every reload and for every model sharing a table. The cache is rebuilt on reload, so schema changes are still picked up on reload (the same contract as the model and controller config caches) (#3210) ### Fixed @@ -44,6 +72,76 @@ All historical references to "CFWheels" in this changelog have been preserved fo - Oracle and Microsoft SQL Server adapters now resolve the new primary key after INSERT from the JDBC driver-supplied generated key instead of session-wide / location-based heuristics, closing a silent data-integrity race. `wheels.databaseAdapters.Oracle.OracleModel::$identitySelect` previously fell back to `WHERE ROWID = (SELECT MAX(ROWID) FROM )`, but ROWID is the row's *physical location*, not insertion order — `MAX(ROWID)` can point at another concurrent session's row and the caller reads back the wrong PK under load. `MicrosoftSQLServerModel::$identitySelect` used `SELECT @@IDENTITY`, which returns the last identity generated in *any* scope on the connection — including AFTER INSERT triggers that insert into their own identity-keyed log/audit tables, in which case the trigger's identity is returned instead of the row's. Both adapters now read the driver-supplied generated key first — `result.generatedKey` on Lucee, `result.rowid` on Adobe CF (the surfaces CFML engines expose when `Statement.RETURN_GENERATED_KEYS` is set, which Wheels does on every INSERT via `$bulkInsertSQL`) — and either return it directly when it's numeric or use it as an exact-row lookup. The Oracle path treats the 18-character base-64 extended ROWID as a row pointer (`WHERE ROWID = CHARTOROWID('')`), targeting the just-inserted row race-free; the regex `^[A-Za-z0-9/+]{18}$` strictly gates before interpolating, and UROWIDs / anything unexpected fall through to the legacy `MAX(ROWID)` query, preserved as a last resort for engines that surface no generated key (current BoxLang). The SQL Server path uses `SCOPE_IDENTITY()` only as a fallback after the driver-supplied key is exhausted, sidestepping `@@IDENTITY`'s trigger-unsafety. The `endPar > 0` guard added around the column-list extraction also fixes a latent Adobe CF crash where `Mid(sql, N, -N)` ran when the closing parenthesis was missing. Mirrors the pattern already in `CockroachDBModel.cfc`. Covered by new server-free specs in `OracleUnitSpec.cfc` and `MicrosoftSQLServerUnitSpec.cfc` (#2908) - `$expandedAssociations()` no longer poisons the shared application-scoped association struct with the first caller's JOIN context, so subsequent callers see the JOIN built for their own context instead of the one cached on first hit. Two related bugs are fixed in the same memo: (1) when an `include` that passed `includeSoftDeletes=true` ran first, the built JOIN string (without the `IS NULL` soft-delete predicate) was reused for every later default-context call, silently dropping the soft-delete filter and returning soft-deleted rows; (2) when a nested self-referential `include` with an alias ran first, the aliased JOIN was reused at the top level (and vice versa), producing the wrong table/alias on later includes of the same association. The memo is now keyed per context variant (soft-delete flag + alias flag, written `sd0_alias0` / `sd1_alias0` / etc. with a `1/0` ternary so the key stays engine-stable across Adobe CF's `YES`/`NO` boolean stringification), and the memo write happens under a double-checked named lock taken only on memo miss so the steady-state hot path stays lock-free. Callers receive a per-call shallow copy carrying the context-correct join, immune to concurrent re-memoization of other variants. **Plugin-compatibility note:** the legacy `join` key is no longer written to the shared `$classData().associations[name]` struct (no framework reader exists outside the returned arrays); any community plugin reading that key directly will find it absent and should read the join off the returned association entries instead (#2910) - The dev-UI CLI bridge at `vendor/wheels/public/views/cli.cfm` no longer composes `dbSetup → dbSeed` through a recursive `` of itself. The legacy path mutated `request.wheels.params.command` to `"dbSeed"` mid-flight and re-included `cli.cfm`, but the re-included template rebuilt the response `data` envelope from scratch — so the `"Migrations completed. "` string the outer `dbSetup` run had just set was silently discarded and the final JSON only reported the seed outcome under `command: "dbSeed"`. The seed orchestration is now extracted into a page-level `runDbSeed(seedParams)` UDF (sibling to `generateTestData`) that returns a `{success, mode, message, ...}` result struct; both the `dbSeed` switch case and the `dbSetup → seed=true` branch call it directly and merge the result onto `data` via `StructAppend`, so `dbSetup` preserves its envelope (`command: "dbSetup"`, prefixed message, combined success). The outer `} catch (any e) { ... }` envelope is also standardized: per-command catches set `data.message` (singular), but the outer catch historically only set `data.messages` (plural), so a CLI client reading either name in isolation missed half the failure modes. The outer catch now mirrors the error on both keys (`data.message = ... ; data.messages = data.message;`) so the plural stays backward-compatible while the singular matches every other code path. Cross-framework research on dispatch composition (Rails, Laravel, Django, Phoenix, Spring Boot, Symfony) recorded on the issue; the bigger `CliBridge` singleton-service decomposition and the dev-UI asset cache-headers work tracked in the same issue remain follow-ups (#2959) +- RateLimiter database storage hardened for multi-node use: dialect-aware atomic counter upsert (MySQL/MariaDB, PostgreSQL, SQLite) with unique-constraint-backed insert-retry everywhere else, a v2 `wheels_rate_limits` schema (UNIQUE `store_key`, `row_type` discriminator, `client_key` lookup column), transaction + row-lock (`FOR UPDATE` / `UPDLOCK`) serialization for the slidingWindow and tokenBucket read-modify-write paths, and an automatic one-time upgrade of the auto-created table from the legacy schema (#2911) +- RateLimiter tokenBucket with storage=database now enforces correctly on engines where SQLite returns timestamps as raw epoch milliseconds (observed on Adobe ColdFusion + sqlite-jdbc) — the refill calculation previously read every bucket as fully refilled and never blocked (#2911) +- `wheels deploy`: a same-version redeploy no longer hits a guaranteed `docker run --name` conflict — deploy now force-removes an existing same-name container (exact-anchored, idempotent) before each app run, and stops superseded versions best-effort after the kamal-proxy cutover instead of leaving every old container running forever (#2957 DEP-11a) +- `wheels deploy secrets extract ` now matches the key case-sensitively, like Kamal — previously CFML's case-insensitive `==` let `extract path` return the `PATH` line's value (#2957 DEP-11b) +- `wheels deploy`: the kamal-proxy config volume now derives the remote home from the ssh user (`/root` for the default root user, `/home/` otherwise) instead of hardcoding the `/home/` layout, which was wrong on every default config (#2957 DEP-11c) +- `wheels deploy`: secret resolution from `.kamal/secrets` is now bounded by a timeout (default 60s, configurable via `timeoutSeconds`) — a command blocking on interactive input (e.g. `op read` prompting for sign-in) used to hang the deploy thread forever; it now kills the bash process and throws a clear `SecretResolver.ResolutionFailed` (#2957) +- `wheels deploy rollback --destination=X` now applies the destination overlay — rollback was the last verb loading `deploy.yml` without forwarding `--destination`, so it targeted the base config's hosts (#2957; same defect class as the `config` fix in #3085) +- `QueryBuilder.onMissingMethod` now sanitizes dynamic scope handler arguments via `$sanitizeScopeHandlerArgs`, matching the existing behavior of the model-root and `ScopeChain` invocation paths (#3013). Previously, `model.where(...).byHandlerScope(input)` delegated the raw `missingMethodArguments` to the handler, while `model.byHandlerScope(input)` and `model.someScope().byHandlerScope(input)` ran through the sanitizer — so the same scope produced different `where` specs depending on how it was reached. +- Deprecated `/wheels/mcp` HTTP transport's runtime warnings (log message, CLI-disabled-tool error, and legacy `wheels mcp setup` output) now point to the live integration guide (`https://guides.wheels.dev/v4-0-0/command-line-tools/mcp-integration`) instead of the phantom `docs/command-line-tools/commands/mcp/mcp-configuration-guide.md` path that #2888 missed (#3016) +- `wheels test` (and `wheels browser test`) now honour the `subpath` setting for subfolder-mounted apps via a new `--base-path` flag, auto-deriving the prefix from `WHEELS_SUBPATH` or `set(subpath=...)` when omitted, so the test runner is reachable under a URL prefix instead of always assuming a root mount (#3026) +- Dispatch: the `enablePublicComponent=false` anti-fingerprinting 404 branch ended in a bare `cfabort;`, which is Lucee-only tag-in-script syntax — every Adobe engine threw `Variable CFABORT is undefined` at runtime, turning `GET /` (and every `/wheels/*` request) on a stock app in `testing`/`production` into an HTTP 500 instead of a clean `404 Not Found`. Replaced with the script keyword `abort;`, and a new structural guard spec (`BareCfabortGuardSpec`) fails the suite if a bare script-context `cfabort` statement ever reappears under `vendor/wheels` (#3029) +- URL environment switching (`?reload=&password=...`) now works through the app template's `applicationStop()` reload flow: the restart redirect preserves `reload` + `password` for environment switches (plain `?reload=true` still strips everything), the configured `reloadPassword` is handed across the restart via a single-use server-scope entry so the framework's switch code can verify it on the cold start, and the reload gate skips the restart once the requested environment is active so the redirect chain always terminates. `allowEnvironmentSwitchViaUrl` is enforced pre-restart: when switching is disallowed — `set(allowEnvironmentSwitchViaUrl=false)` or the framework's production/testing/maintenance auto-disable — the parameters are stripped and the request degrades to a plain restart, preserving the existing hardening (the framework cannot enforce the flag itself after `applicationStop()` destroys its carryover state). Applied to all four `public/Application.cfc` copies (CLI app template, repo demo app, starter-app and tweet examples). Trade-off: `?reload=` is now a no-op — use `?reload=true` for a same-environment restart (#3030) +- Explicit `set(allowEnvironmentSwitchViaUrl=true)` in `config/settings.cfm` is now honored in production-like environments (production, testing, maintenance). It used to be indistinguishable from the framework default and was silently discarded, making the documented override impossible (#3031) +- Adobe ColdFusion: every password-gated reload (`?reload=true&password=...`), URL environment switch (`?reload=&password=...`), and `wheels reload` returned HTTP 500 since #3036 — `$buildRedirectUrl()` in the app template's `public/Application.cfc` declared a local variable named `url`, which on Adobe CF shadows the URL scope that the new environment-switch checks read (CLAUDE.md anti-pattern #11, reserved scope names). The local is renamed to `redirectPath` in all four same-lineage copies (CLI app template, repo demo app, starter-app and tweet examples), the `ReloadEnvironmentSwitchParitySpec` now fails if any `local.url`/`var url` declaration reappears in those files, and the non-dev smoke probes gained an opt-in probe 6 asserting an authorized reload answers 302 (#3053) +- Adobe ColdFusion on case-sensitive filesystems (i.e. every stock Linux deployment): authorized reloads (`?reload=true&password=...`) returned HTTP 500 "Could not find the ColdFusion component or interface application" in every environment — the reload gate and the shared-application-name branch in the app template's `public/Application.cfc` dispatched through `$simpleLock` with `componentReference = "application"`, a component path Adobe resolves by exact case then all-lowercase, so the lowercase literal never matches `Application.cfc` (Lucee resolves case-insensitively and was unaffected; the #3053 fix verified green only because macOS bind mounts are case-insensitive). The literal is now the case-exact `"Application"` in all four same-lineage copies (CLI app template, repo demo app, starter-app and tweet examples), and `ReloadEnvironmentSwitchParitySpec` fails if a miscased component reference reappears (#3053) +- URL environment switches into `production`/`maintenance` (`?reload=&password=...`) no longer 500 and silently revert: the `redirectAfterReload` block in `wheels/events/onapplicationstart.cfc` called a bare `$location()` that does not resolve in that mixin-free component, and even a resolvable redirect there aborts `onApplicationStart` mid-flight, making the engine discard the half-started application. The redirect is now deferred to `EventMethods.$runOnRequestStart`, which runs in the same request after the new application — including the switched environment — has been persisted ([#3054](https://github.com/wheels-dev/wheels/issues/3054)) +- `wheels reload` no longer prints `Application reloaded successfully.` when nothing was reloaded: the CLI now inspects the HTTP status of the `?reload=true` request instead of treating any completed exchange as success. A successful reload always answers with the framework's restart redirect (302), so a normal page render (200/404 — wrong reload password, the warm-path gate fell through) and endpoint errors (4xx/5xx, e.g. the #3053 Adobe regression) are now reported in red with the status and a hint, and the command exits non-zero (`Wheels.ReloadFailed`) so `wheels reload && ...` CI gates work. The interactive console's `/reload` applies the same 302-vs-200 verdict (printing red instead of throwing). Success-path output is unchanged (#3059) +- A compile-time or runtime error in a `config/*.cfm` file loaded during application start (e.g. an Adobe CF-illegal top-level `var di = injector();` in `config/services.cfm`) is now logged and rethrown by `$includeConfig()` as a named `Wheels.ConfigIncludeFailed` error carrying the failing template path and the original engine message (original type/detail preserved in `detail`) — a clear, located, fail-closed boot error in every environment, instead of the old masked, application-wide HTTP 500 whose secondary `onError` failure hid the real cause. An app whose config did not load no longer boots fail-open on framework defaults (#3063) +- Router: `scope()` (and the `namespace()` / `package()` / `controller()` wrappers that forward to it) silently dropped a `callback=` argument — the callback never ran (its routes 404'd as `Wheels.RouteNotFound`) and nothing closed the scope, so every route declared afterward (including `resources`, `root`, and `wildcard`) inherited the scope's path prefix and middleware. `scope()` now consumes `callback` the same way `group()` does: it runs `callback(this)` to declare the nested routes and auto-closes the scope, so the documented `.scope(path="/api", callback=function(map){ ... })` and `.namespace(name="admin", callback=...)` forms work as written and routes after the block are no longer swallowed (#3072) +- The dispatch middleware request context now carries a `cgi` member — the sanitized `request.cgi` copy overlaid on every inbound HTTP header mapped to its CGI-style `http_*` name — fulfilling the `handle()` contract that always documented "CGI info" on the request struct. Documented patterns like a `RateLimiter` `keyFunction` reading `req.cgi.http_x_api_key` now key budgets per client instead of silently collapsing all traffic into one shared bucket, inbound request-ID passthrough wrappers can honor `X-Request-Id` off the context, and `Cors`/`TenantResolver`/`TokenStrategy` resolve their headers from the context without falling back to the engine CGI scope. The CORS preflight short-circuit context carries the same member (#3074) +- The action-dispatch gate now returns HTTP 404 (not 500) when a request targets a framework helper or `$`-prefixed internal method, matching the missing-action behavior promised by #2845 and CLAUDE.md Anti-Pattern 8. `$callAction` routes the block through `$throwErrorOrShow404Page` (committing the 404 header and rendering the production 404 page), and the `EventMethods` status map now treats `Wheels.ActionNotAllowed` as a 404 alongside the `Wheels.*NotFound` family (#3075) +- The development error page no longer masks app-start exceptions: `$getRequestTimeout()`, `$statusCode()`, and `$contentType()` now resolve the engine adapter via `$engineAdapter()` (which checks both `application.wheels` and the `application.$wheels` startup-staging struct) instead of reading `application.wheels.engineAdapter` unconditionally. Previously, when a throw during settings/routes load left the adapter only in `application.$wheels`, `onError` itself crashed with `key [ENGINEADAPTER] doesn't exist` (Lucee) / `Element WHEELS.ENGINEADAPTER is undefined` (Adobe), hiding the original failure such as the `Wheels.Cors.InvalidConfiguration` guard (#3076) +- `sendFile()`: an absolute `directory` argument is now used verbatim instead of being post-processed, honouring the documented "must be a full path … outside of the web root" contract. Previously the resolver ran the caller-supplied absolute path through the `/wheels` mapping rewrite — substring-hijacking any directory containing `/wheels` (e.g. `/var/www/wheels/uploads`) on every engine — and through an `ExpandPath()` fallback that web-root-prefixed the path on Adobe CF, so serving files from outside the web root threw `Wheels.FileNotFound` there. The verbatim branch only engages when the directory actually exists on disk, so the long-standing webroot-relative idiom (`directory="/reports/"`) keeps resolving against the web root via `ExpandPath()`. Relative `filePath`-based resolution and the `..`-traversal guard are unchanged (#3077) +- Calling `tableName()` with an argument now throws `Wheels.InvalidArgument` when error information is shown (development/testing) instead of silently no-opping — some 4.0-era docs mistakenly taught `tableName("x")` as the table setter, leaving models on their convention table. The zero-argument getter is unchanged, production stays a no-op, and the canonical setter remains `table()` (#3079) +- `wheels migrate info` and `wheels migrate doctor` honor the read-side common-port fallback again. #2879 documented that read-only commands keep the legacy port probe (8080, 60000, 3000, 8500) when no `lucee.json` / `.env` port is configured, but `cli.lucli.Module::runMigration()` gated every migrate subcommand behind `requireProjectConfig = true`, so the two read-only inspectors refused a server on 8080 — the first entry of their own documented fallback list — with `Wheels.ServerNotRunning`. The schema-mutating actions (`latest`, `up`, `down`) keep the strict project-bound gate, and because a fallback attach can reach a *sibling* project's server (and report the wrong app's migration state), `info`/`doctor` now print a yellow notice naming the port whenever the fallback was used, with the `lucee.json` / `PORT` hint to pin the project. Covered by new call-site gating specs in `cli/lucli/tests/specs/services/ServerDetectionSpec.cfc` (#3080) +- CLI: migration failures now reach the exit code. A failed `up()`/`down()` step that `migrateTo()` folds into its output (e.g. `Error migrating to .`) made `wheels migrate latest|up|down` print the error inside the green success block and still exit 0; `wheels db reset --force` exited 0 when it refused on a `ServerNotRunning` check; and `wheels migrate forget|pretend` refusals (not in tracking table, matching local file exists, already applied, no matching file) printed red but exited 0. All three now exit non-zero, so a `wheels migrate latest && …` CI gate no longer proceeds as if the schema moved. Informational dry-run output (missing `` / missing `--yes`) still exits 0. The migrate-side sibling of the #2973/#2987 seeder honesty fix (#3081) +- `wheels seed --generate` now actually creates rows and reports honest success/failure. The CLI seed bridge's generate loop iterated `$classData().properties` (a struct keyed by property name) as if it were an array of property structs — so `prop.name` threw `there is no property with name [NAME] found in [string]`, every model errored, zero rows were created, yet the run still returned `success=true` and the CLI printed "Seeding completed." with exit 0. The generate path is now a dedicated, unit-tested `wheels.Seeder.generateSeeds(models, count)` method that iterates the property struct correctly and forces overall `success=false` when any model fails or no rows are created, so the CLI surfaces a non-zero exit instead of silently lying (the #2987 honesty fix had only covered convention mode) (#3082) +- The `/wheels/core/tests` and built-in app-test (`app-runner.cfm`) JSON runners now surface scope resolution instead of silently reporting green for the wrong scope: the payload carries `directoryRequested`, `directoryResolved`, `directoryRejected`, `bundlesDiscovered`, and a `warnings[]` array, so a `directory=` value that fails the allowlist (silently swapped for the full default suite) and an allowlist-passing single-spec-file value that discovers 0 bundles are both detectable from the response rather than masquerading as a passing run; `tools/ci/run-tests.sh` and `tools/test-local.sh` consume the new signals and fail loudly on a rejected `directory=` or a 0-bundle discovery (#3083) +- Declaring `shortcut` on a `hasMany` association no longer breaks that association: `$expandThroughAssociations` now only rewrites a 2-element `through` into a nested include when its first segment is an association on the current model, so the plain association method, the shortcut method, and `include` no longer throw `Wheels.AssociationNotFound` (#3109) +- `wheels reload` and `wheels packages add` no longer claim that `?reload=true` skips `onApplicationStart`. An authorized reload calls `applicationStop()`, so the next request re-fires `onApplicationStart` in full (re-running `config/services.cfm` and the package loader) — the CLI now says a reload activates an installed package and notes that only a missing/wrong reload password silently skips the restart (#3110) +- `wheels generate controller Name a,b` now splits the comma-joined action token into discrete actions (`a` and `b`) instead of silently emitting an invalid `function a,b()` method plus an `a,b.cfm` view file — the comma form now matches the documented space-separated form (#3112) +- `wheels test --ci` now has an observable effect: it emits GitHub Actions `::error` workflow-command annotations (one per failed or errored spec, with the message encoded to a single line) so failures surface inline in CI logs and PR checks, instead of being byte-identical to a plain run. The flag was previously parsed and threaded through to the runner but never consumed (#3113) +- `wheels test --verbose` (and `-v`, in any flag position) now actually prints the per-spec bundle → suite → spec tree: the test command honors the runtime `verboseEnabled` signal LuCLI passes through `init()`, since the launcher consumes the `--verbose`/`-v` token globally and it never reaches the module's own parser; requires a CLI binary built on a LuCLI runtime that preserves the flag across the module-shortcut re-dispatch (#3113) +- CORS: running the legacy global path (`set(allowCorsRequests=true)`) alongside a `wheels.middleware.Cors` instance stacked duplicate `Access-Control-Allow-*` headers — a duplicate `Access-Control-Allow-Origin` makes browsers reject the response per the Fetch spec. The global `onRequestStart` emitter now detects a registered Cors middleware (`$corsMiddlewareActive()`) and steps aside — skipping both `$setCORSHeaders` and the global OPTIONS abort so the dispatch-level middleware is the single source of truth for CORS headers and preflight — and logs a one-time warning so operators disable the redundant `allowCorsRequests` setting (#3114) +- `wheels upgrade check` for a 3.x→4.x jump now recommends `csrfCookieEncryptionSecretKey` — the setting the framework actually reads — instead of the inert `csrfEncryptionKey`, which no framework code consults; a user following the old advice added a setting Wheels ignored and kept the rotate-on-every-deploy CSRF-cookie behavior the rule exists to prevent (#3115) +- `$generateIncludeTemplatePath` no longer eagerly dereferences `variables.params` in its `$controllerName` default argument, so rendering through a bare-instantiated controller (e.g. `new wheels.Controller().sendEmail(template="/mailers/welcome", deliver=false, ...)`) with an absolute template path composes correctly instead of throwing a raw `PARAMS is undefined` 500 on Lucee and Adobe. Controller-relative (no-leading-slash) templates on a bare instance now surface a clear `Wheels.ControllerNameRequired` error instead of the cryptic dereference crash; request-built controllers are unaffected (#3136) +- `wheels deploy init` scaffolds an `env.secret: [WHEELS_RELOAD_PASSWORD]` block that now round-trips cleanly: with env-file delivery in place (#2957), a freshly-scaffolded config passes `wheels deploy config` and `wheels deploy deploy --dry-run` and ships the secret to containers via the remote `--env-file`, instead of hard-failing with the retired `Wheels.Deploy.EnvSecretUnsupported` guard. The scaffold and the deploy engine are now pinned together by a regression spec (#3158) +- The welcome/congratulations page rendered with `Wheels - Error` because it shared the error screen's header; it now reads "Welcome to Wheels" while the error page keeps its title (#3175) +- `findAll(include=...)` now accepts a `hasMany` `shortcut` name and expands it into the nested bridge include (e.g. `include="Category"` joins through `ProductCategories`) instead of throwing `Wheels.AssociationNotFound` (#3208) +- Hardened cross-engine null handling in the router, dispatcher, and error handler for BoxLang, whose stricter semantics throw a `NullPointerException` on a null string/struct subject where Lucee and Adobe coerce null to `""`/empty. `mapper/matching.cfc` now removes a present-but-null `pattern` key before route-pattern derivation, so a named route given via `to=` with no explicit pattern derives its pattern from the route name (a present-null `pattern` key previously skipped derivation and left a null pattern that failed to load on BoxLang); `Dispatch.cfc` `$buildMiddlewareCgiScope()` defaults null request headers to an empty struct; and `EventMethods.cfc` `$runOnError()` guards a null/non-struct exception `cause` and `rootCause` before dereferencing their `type`. New `MapperNullPatternSpec` exercises the route shapes (named `to=` and `resources()`) that the compat-matrix demo app's `.wildcard().root()` routes left uncovered on BoxLang +- SQL Server adapter: same-batch `SCOPE_IDENTITY()` retrieval replaces the session-scoped `@@IDENTITY` identity fallback on engines without driver generated keys, and paginated queries no longer drop their `GROUP BY` clause ([#2906](https://github.com/wheels-dev/wheels/issues/2906), [#2961](https://github.com/wheels-dev/wheels/issues/2961)) +- Oracle adapter: identity fallback now resolves the backing identity sequence and uses session-scoped `CURRVAL` instead of the race-prone `MAX(ROWID)` heuristic, and `findAll(order="random")` emits `DBMS_RANDOM.VALUE` instead of the invalid `RANDOM()` ([#2906](https://github.com/wheels-dev/wheels/issues/2906), [#2961](https://github.com/wheels-dev/wheels/issues/2961)) +- The six divergent `$identitySelect` copies across database adapters are unified into a Base template method with per-engine `$parseInsertColumnList`/`$lastIdLookup` hooks, so engine workarounds land once ([#2906](https://github.com/wheels-dev/wheels/issues/2906)) +- Debug bar: environment quick-switch links (Testing / Maintenance / Production) now render only when switching can actually work — a non-empty `reloadPassword` is configured and `allowEnvironmentSwitchViaUrl` allows it — and prompt for the reload password at click time instead of rendering dead anchors when no password is set (the configuration where `?reload=` has been a no-op since #2082). The password is never embedded in the page, and the plain `?reload=true` reload anchor keeps its existing behavior ([#3060](https://github.com/wheels-dev/wheels/issues/3060)) +- `wheels deploy config --destination=` now applies the destination overlay (`deploy..yml`) before dumping the resolved YAML, matching `deploy`/`details`/`audit`. Previously the destination was silently ignored and the un-overlaid base config was printed, breaking the `kamal config` diff step in the Kamal migration checklist ([#3085](https://github.com/wheels-dev/wheels/issues/3085)) +- `wheels deploy` now works on fresh hosts: the kamal-proxy boot guard `details() || boot()` never reached `boot()` (`docker ps` exits 0 whether or not the proxy exists) and was dispatched to only one host — the proxy is now booted via Kamal's `docker start kamal-proxy || docker run ...` (`ProxyCommands.start_or_run()`) on every proxy-fronted host; the `kamal` docker network, previously never created (zero `create_network` call sites while every app/proxy/accessory `docker run` joins `--network kamal`), is now idempotently ensured on every host before the first consumer; `wheels deploy setup` is a real setup phase (network create + accessory boot on accessory hosts, then deploy) instead of a literal `deploy()` alias; and `kamal-proxy deploy` registration is gated to proxy-fronted roles (role-level `proxy:` boolean, defaulting to the `web` role) instead of firing for every job/worker role (#2957) +- `wheels deploy`: a failing `post-deploy-failure` hook no longer masks the original deploy error — the hook is best-effort, its non-zero exit is logged (`[hook:post-deploy-failure] ...`), and the real failure rethrows ([#3087](https://github.com/wheels-dev/wheels/issues/3087)) +- `wheels deploy` / `wheels deploy rollback`: the kamal-proxy traffic target is now built from `proxy.app_port` (default `80`, matching Kamal) instead of a hardcoded `:3000`, so containers listening on the scaffolded `8080` (or any configured port) become healthy after cutover ([#3089](https://github.com/wheels-dev/wheels/issues/3089)) +- `wheels deploy` lock acquisition is now all-or-nothing across the fleet: the lock is acquired on every (deduped) host sequentially in config order with failures surfaced, already-acquired locks are rolled back on a partial failure (`Wheels.Deploy.LockAcquireFailed` names the contended host; the contended host's own lock is never touched), and release fans out to every acquired host. Previously the first-success-wins `onAny` dispatch swallowed contention on one host and silently re-acquired on another, so concurrent deploys were only mutually excluded on single-host configs — and release could target a different host than acquire, stranding stale locks. The manual `wheels deploy lock acquire/release/status` verbs follow the same fleet-wide semantics (#2957) +- Deploy lock metadata now actually expands `$(hostname)` and `$(date --iso-8601=seconds)` on the remote: the symlink target double-quotes the substitution segment while keeping the user and message inert via `shellEscape` single-quoting — previously the whole target was single-quoted, which suppressed command substitution and recorded the literal `$(hostname)` text (#2957) +- **CLI**: `wheels deploy ... --release=1 --dry-run` no longer hangs ~76 seconds with `Operation timed out`. CFML's coercing `==` treated the value `1` as the boolean string `true` during the argv round-trip, dropping the release value and letting the deploy flag parser swallow `--dry-run` as the version — so a documented dry run opened real SSH connections. Values are now compared exactly (`1`, `0`, `yes`, `no` stay values), and a value-taking deploy flag never consumes a following `--` flag as its value ([#3111](https://github.com/wheels-dev/wheels/issues/3111)) +- `wheels deploy` `${VAR}` interpolation now resolves `.kamal/secrets` from the project root for the standard `config/deploy.yml` layout, agreeing with `wheels deploy secrets print` and registry login. Previously it looked for `config/.kamal/secrets` — a file nothing creates — so secrets-file interpolation silently never fired ([#3084](https://github.com/wheels-dev/wheels/issues/3084)) +- `wheels deploy` host validation no longer under-counts adjacent colons: unbracketed IPv6-ish hosts like `::1:22`, `:a:b`, and `a::b` are now rejected with the documented `invalid host` error, while bracketed `[::1]:22` and single-colon `user@host:port` forms remain accepted ([#3086](https://github.com/wheels-dev/wheels/issues/3086)) +- Deploy read verbs (`wheels deploy audit`, `details`, `app logs`/`details`/`containers`/`images`, `lock status`) now surface the remote output host-prefixed (`[host] line`) instead of returning only a host-count summary — the dispatch layer previously discarded every `ssh.run()` result ([#2957](https://github.com/wheels-dev/wheels/issues/2957) DEP-6a). +- `wheels deploy` / `rollback` / `setup` now write the on-server audit trail (`/tmp/kamal-audit.log`): deploys are bracketed by `started deploy of version X` / `completed deploy of version X` records, rollbacks and setup's accessory boots are recorded, and audit writes are tolerated-on-failure so observability can never fail a deploy. Previously `AuditorCommands.record()` had zero call sites and `wheels deploy audit` tailed a file the tool never created ([#2957](https://github.com/wheels-dev/wheels/issues/2957) DEP-6b). +- The flat `wheels deploy bootstrap` / `wheels deploy exec` aliases — the only CLI-reachable form of these verbs ([#2677](https://github.com/wheels-dev/wheels/issues/2677)) — now seed their SSH pool from `deploy.yml`'s `ssh:` block like every other deploy verb; previously they constructed a bare pool that ignored `ssh.user`, `ssh.port`, and `keys:` and always connected as `root@host:22` ([#2957](https://github.com/wheels-dev/wheels/issues/2957) DEP-7). +- The JSON branch of `/wheels/info` no longer serializes the full `getApplicationMetadata()` struct — datasource definitions (credentials), ORM settings, and arbitrary application config flowed into the response wholesale, bypassing the per-setting redaction shipped in #2909. The metadata is now reduced to a whitelisted subset (`applicationTimeout`, `mappings`, `name`, `sessionManagement`, `sessionTimeout`, `setClientCookies`) via the new `Public.$safeApplicationMetadata()` helper. Also `vendor/wheels/public/docs/core.cfm` now validates the user-controllable `format` param through the new, unit-tested `Public.$resolveDocFormat()` helper (`^[A-Za-z0-9]+$` allowlist, `html` fallback) before interpolating it into the `layouts/` include path — the same traversal class `$getRequestFormat()` was hardened against. Both surfaces are development-gated; this is defense-in-depth (#2974) +- `$expandedAssociations()` now fills the context-independent association metadata (foreign/join keys, table name, column/property lists and structs) into the shared application-scoped association struct under the same double-checked named lock that already protects the JOIN-variant memo, so a concurrent first hit can no longer interleave partial writes; the hot path stays lock-free via a fill-once marker written last (Refs #2952) +- MCP integration guide tool table now lists all 18 exposed tools; adds `wheels_deploy` and `wheels_packages`, and the hidden-tools list now includes `g` and `main`. +- Guarded the `onError()` DI-container fallback in `Application.cfc` (repo demo app, CLI app template, and both examples) so routine error pages no longer re-create `application.wheelsdi` and silently wipe all `config/services.cfm` registrations and cached singletons — the fresh `Injector` is now constructed only when the container never came up, and `application.wo` is rebuilt only when missing ([#3061](https://github.com/wheels-dev/wheels/issues/3061)) +- The legacy `plugins/` directory is now optional. The scaffold's `Application.cfc` jar-scan and the framework plugin loader (`Plugins.cfc` `$folders()`/`$files()`) now guard their directory listing with `DirectoryExists`, so an app that has removed `plugins/` (the common case now that packages live in `vendor//`) no longer errors at startup on engines whose directory listing throws on a missing path — Lucee/Adobe tolerate a missing dir, but stricter engines (e.g. RustCFML) did not. The plugins-directory lookup is deprecated and slated for removal in the next major +- The scaffolded `tests/populate.cfm` (`wheels new` template) now fails the test run loudly when a migration fails. `migrateToLatest()` swallows per-migration exceptions into its returned string, so the old template — which discarded the return value — left a silently half-migrated test database; because `app-runner.cfm` only includes `populate.cfm` when the migrator-versions table is absent (it exists after the partial run), every subsequent `wheels test` ran against the broken schema with zero signal. The template now captures the migrator output, drops the migrator-versions table on failure (so the next run re-enters populate and stays loud), and throws `PopulateCfm.MigrationFailed` with the migrator output as detail — surfacing through app-runner's existing populate catch as a structured 500 (#2999) +- The `RateLimiter` middleware's memory storage no longer races or stalls under high key cardinality (#2971). Emergency eviction is now double-checked under the same named maintenance lock the periodic cleanup uses — previously `handle()` called the evictor unguarded, so concurrent requests that all saw a full store each purged their own 25% headroom. The eviction's second pass replaces the full-store closure-comparator sort (O(n log n) on the unlucky request thread, at exactly the moment the store is largest) with Redis-style bounded random sampling that still prefers idle entries. The periodic cleanup scan is capped per pass (1000 keys) with a rotating cursor so successive passes cover the whole store instead of one request paying a full scan (#2971) +- Rendering a partial with a query no longer silently swallows unreadable column values: the blanket `catch` in `$includeFile()` that blanked a column it could not read now logs a warning to the `wheels` log (once per column per render) naming the column, partial, first failing row, and the underlying error before defaulting the value to an empty string (#2961) +- `renderWith()` JSON type coercion no longer strips legitimate BEL (`Chr(7)`) bytes from data values (only the quote-adjacent marker bytes it inserts itself, raw or JSON-escaped, are removed — fixing string coercion on engines such as Lucee 7 that escape control characters during `SerializeJSON`), coerces `integer` directives pre-serialization via `JavaCast("long", ...)` instead of regex-editing the serialized payload (nested same-named keys are left untouched), skips rows that don't contain the directive key instead of throwing, and derives its parameter-exclusion list from function metadata so the `status` argument can no longer leak into the coercion-directive set ([#2961](https://github.com/wheels-dev/wheels/issues/2961)) +- Reviewer-nit sweep from the 2026-06 remediation campaign (#2977). Behavior fixes: conditional validations with uppercase word-form operators (`condition="1 EQ 0"`) no longer throw on Adobe CF (`$evaluateLogicalExpression` now lowercases the operator); the `/wheels/cli` mutation gate reads the reload password from the form scope ONLY, so a `?password=...` query string can no longer satisfy the gate while logging the password in access logs; `dbRollback` over the `/wheels/cli` bridge counts applied migrations by tracked `status` instead of the `version <= current` heuristic, so peer-applied versions on a shared dev database no longer skew `steps=N`; the CLI's three HTTP bridge helpers guard against `getErrorStream()` returning Java null on bodiless 4xx/5xx responses (was an NPE surfacing as a useless "null" error); the migrator's per-request column cache keys on the verbatim table name (case-folding let `Authors`/`authors` share a slot on case-sensitive databases); `$getForeignKeys()` throws `Wheels.Migrator.MissingAdapter` instead of silently interpolating an unquoted table name when the adapter is missing; and the dead ISO-date fallback branch in `$convertToString` uses real `\d` regex escapes. Plus assorted stale-docblock/comment updates (#2903 references, `renderWith`/`onlyProvides` enforcement notes, debug-panel guide note) and spec backfills (`waitForText` timeout surface, `$get()` without `request.wheels`, typed-column outlier defaults, conditional spec-state restore) (#2977) +- The dev route tester's verb-mismatch error message now HTML-encodes the user-supplied path (`EncodeForHTML`), closing a reflected-XSS sink rendered by `routetester.cfm` / `routetesterprocess.cfm` — the sibling 404 branch already encoded it. The alternative-verbs scan (a second full pass over the route table, including lazy `.regex` writes onto application-scope route structs) now runs only in the no-match branch instead of on every invocation, matching `Dispatch.cfc`'s structure (#2961) +- Route constraints containing a Java named capture group (`whereMatch("year", "(?20\d{2})")`) no longer corrupt route matching. `$nonCapturingConstraint` now normalizes the whole `(?` opener to `(?:`, the same treatment anonymous capturing groups already receive — previously a named group both shifted every subsequent route variable's value in `$mergeRoutePattern`'s positional extraction (java-regex engines) and threw `Sequence (?<...) not recognized` at match time (legacy-regex engines). Lookbehinds (`(?<=`, `(?`) fails fast at draw time via `$compileRegex` (#2976) +- `Seeder.runSeeds()` no longer reports success and commits when individual `seedOnce()` entries failed validation. Failed entries are now counted (`totalFailed` in the result struct and the `/wheels/cli` dbSeed envelope), named in the failure message, and the entire run is rolled back — `seedOnce()` is idempotent, so a corrected rerun re-applies everything, whereas a silently half-committed run looked identical to a fully-applied one in CI and `wheels seed` output. Because the dev-UI bridge already maps `success=false` to `Wheels.Cli.CommandFailed`, `wheels seed` now exits non-zero when any entry fails (#2973) +- Struct-form `enum(property=..., values={name: storedValue})` now validates against the stored values rather than the name keys, so rows that satisfy the auto-generated scopes and `is()` checkers also pass `valid()` (#3014) ### Security @@ -52,12 +150,16 @@ All historical references to "CFWheels" in this changelog have been preserved fo - `$getRequestFormat` now rejects non-alphanumeric `url.format` values, preventing path traversal / local file inclusion via the error-template include path in `$runOnError` (#2900) - `$shouldBlockInProduction()` is now a fail-closed allowlist: the `/wheels/*` dev-UI handlers (routes, env info, CFML REPL, test runner, migrator UI, MCP) 404 unless `application.wheels.environment == "development"` — case-insensitive, matching the gates in `consoleeval.cfm` and `mcp.cfm` — and also when `application.wheels` or its `environment` key is missing. Previously the predicate matched only the literal `"production"`, so any other environment name (`staging`, `qa`, `testing`, `maintenance`, `design`, ...) bypassed the gate when `enablePublicComponent=true` was set, exposing RCE-grade surfaces. `index()` stays ungated per #2233 and `$loadRegistryPackages()` inherits the stricter gate. **Behavioral change:** operators who set `enablePublicComponent=true` in a non-development environment for ad-hoc debugging will now receive 404s on the Tools links — set `environment="development"` (and `enablePublicComponent=true`) to reach them (#2903) - The HTML branch of `/wheels/info` no longer renders `csrfCookieEncryptionSecretKey` in plaintext. The HTML branch had been routing every setting through `outputSetting() -> formatSettingOutput(get(...))`, which read and rendered the live CSRF cookie encryption key into the page; the JSON branch already omitted it via a hardcoded one-off compare, so the two branches could drift. A shared predicate `$isProtectedSetting()` and display helper `$settingDisplayValue()` on `wheels.Public` now serve as the single source of truth for both branches — secret-shaped setting names (`secret|password|passphrase|privatekey|apikey|credential|token`) render as `[redacted]` without ever being read, so an unset key cannot throw and the value never reaches the output buffer. `accessControlAllowCredentials` is exempt (it mirrors the boolean `Access-Control-Allow-Credentials` CORS response header, not a credential value); without the exemption it would have been redacted in HTML and silently dropped from the JSON `cors` collection. Reachability of `/wheels/info` is gated by `$blockInProduction()` independently — this change only narrows what leaks when the page is reachable. Verified red→green on Lucee 7 + SQLite (#2909) +- The URL reload gate in the app template's `public/Application.cfc` now fails closed: `?reload=true` requires a non-empty configured `reloadPassword` AND a matching `password` parameter before `applicationStop()` fires. Previously an empty `reloadPassword` left plain `?reload=true` open to any anonymous client (restart-DoS on internet-reachable apps), contradicting the framework's own boot warning and both deployment guides. Empty password now disables URL-based reload entirely, matching the environment-switch leg. Wrong-password attempts against a warm application — previously invisible and unthrottled — are now logged to `wheels_security.log` with the trusted client IP and feed the same 5-failures-in-5-minutes per-IP rate limit as the cold-start path (accepted reloads are logged too); the two `examples/` copies also upgrade from CFML's case-insensitive `==` to the constant-time `$secureCompare()`. Applied to all four `public/Application.cfc` copies (CLI app template, repo demo app, starter-app and tweet examples), pinned by a structural parity spec; the Docker test-harness `settings.cfm` files now ship `reloadPassword="wheels-dev"` so edit-reload-test cycles keep working (#3062) +- `wheels deploy`: resolved secret values are now redacted (`[REDACTED]`) from `Wheels.Deploy.RemoteExecutionFailed` command summaries before the message is thrown. `env.clear` values interpolated from `${SECRET}` tokens in `.kamal/secrets` ride `docker run ... -e KEY=value`, so a nonzero remote exit previously surfaced the raw secret in the exception message and CI logs. Every occurrence is scrubbed (a value may appear in multiple `-e` flags), redaction happens before the 200-char trim so a value on the boundary can't leak a partial fragment, and empty/trivially short values are skipped so unrelated command text is never mangled (deferred from #3008; [#3159](https://github.com/wheels-dev/wheels/issues/3159)) +- `wheels deploy`: registry login now sends the password over SSH stdin (`docker login --password-stdin`) so it never appears in dry-run output, exception messages, or the remote process table; an unresolvable password fails fast instead of sending an empty secret. Env values, builder dockerfile/context paths, and lock user/message metadata are shell-escaped before reaching a remote shell, and service/role/accessory names are format-validated (docker-compliant `[a-zA-Z0-9][a-zA-Z0-9_.-]*`) since they are interpolated into lock paths, container names, and label-filter pipelines. A non-empty `env.secret` block now fails fast with `Wheels.Deploy.EnvSecretUnsupported` (naming the affected keys, never values) instead of silently shipping containers without the declared secrets — env-file delivery is tracked in #2957 (Refs #2956) +- Scope-handler arguments are no longer rewritten by a SQL-keyword denylist — values like `Union Pacific` now round-trip unchanged; quote-escaping plus the downstream `cfqueryparam` binding protect quoted interpolation contexts, and handlers can return `whereParams` for full parameterization. The escaping helper's documentation now states explicitly that unquoted interpolation (`where="age > #args.age#"`) is not made safe by escaping ([#2952](https://github.com/wheels-dev/wheels/issues/2952)) +- `findAll(select=)` items containing `;`, `--`, `/*`, or parenthesized subqueries now log a development-mode warning (SEC-21 deprecation window) — a future Wheels release will reject them; use calculated properties instead and never pass request input to `select=` ([#2952](https://github.com/wheels-dev/wheels/issues/2952)) +- The model SQL layer no longer instantiates `wheels.migrator.Migration` on every WHERE build just to read the dialect name — the new `$dialectName()` strips the `Model` suffix from the adapter name now persisted per model class at `$assignAdapter()` time, which also fixes the dialect being probed from the app default datasource for models on a custom datasource (the global `adapterName` setting is rewritten by every model class init, so it was never safe to read per model) ([#2952](https://github.com/wheels-dev/wheels/issues/2952)) +- `updateAll(include=)` WHERE building no longer splits JOIN strings on the bare `ON` token — join conditions survive identifiers containing the `ON` substring (uppercase H2 schemas), multiple includes contribute all their join conditions and tables (previously only the first include was used on PostgreSQL/H2/Oracle/SQLite), and loop counters are properly scoped ([#2952](https://github.com/wheels-dev/wheels/issues/2952)) +- Added a framework-level `trustProxyHeaders` setting (default `false`) governing `X-Forwarded-*` trust: `isSecure()` no longer honors a client-supplied `X-Forwarded-Proto: https`, maintenance-mode `ipExceptions` match the socket address (or the rightmost `X-Forwarded-For` hop when trust is on), and the reload rate-limit key uses the trusted client IP. The `?except=` URL parameter can no longer rewrite the maintenance exception list. Apps behind a TLS-terminating reverse proxy must `set(trustProxyHeaders=true)` and ensure the proxy overwrites — never appends to — forwarded headers (#2953) -### Performance - -- `model()` and `controller()` (global helpers in `vendor/wheels/Global.cfc`) now take a lock-free warm fast path on cache hits — a direct `StructKeyExists` lookup against `application.wheels.models` / `application.wheels.controllers` returns the cached class before `$doubleCheckedLock` (and its `$invoke` reflective `cfinvoke` dispatch) is consulted. Issue #2897 noted these as the framework's hottest warm-path calls, taking two reflective dispatches per association / per validation / per row just to evaluate a one-line cache predicate. The slow path is unchanged; cold-path bootstrap, `?reload=true` cache invalidation, and `controller(name, params)` calling `$createControllerObject(params)` on the cached class are all preserved. Two new internal helpers — `$cachedModelLookup(name)` and `$cachedControllerLookup(name)` — embody the guarded lookup, defending against early-bootstrap windows where `application.wheels.models` may not yet exist. Stages 2–4 from #2897 (mixin-integration memoization, shared `PluginObj`, `$resolveInitArguments` memoization) are deferred to follow-ups. - ----- +--- # [4.0.3](https://github.com/wheels-dev/wheels/releases/tag/v4.0.3) => 2026-06-09 diff --git a/changelog.d/2897-shared-pluginobj-request-lifecycle.performance.md b/changelog.d/2897-shared-pluginobj-request-lifecycle.performance.md deleted file mode 100644 index 2bd489c88..000000000 --- a/changelog.d/2897-shared-pluginobj-request-lifecycle.performance.md +++ /dev/null @@ -1 +0,0 @@ -- Request-lifecycle mixin injection (`onDIcomplete` on controllers, model objects and the dispatcher, plus `$runOnRequestStart`) now reuses the application-cached `Plugins` instance via the new `$pluginObj()` helper instead of constructing a throwaway `wheels.Plugins` — and paying its 4,000-line `wheels.Global` parent pseudo-constructor — per request and per materialized model row. `$initializeMixins` keeps its scratch state (`appKey`/`metaData`/`className`) strictly local-scoped so the shared instance is safe across concurrent requests, and the `$runOnRequestStart` construction is hoisted inside the mixins-nonempty guard so mixin-free apps skip it entirely (#2897, Stage 3) diff --git a/changelog.d/2911-ratelimiter-db-storage.fixed.md b/changelog.d/2911-ratelimiter-db-storage.fixed.md deleted file mode 100644 index c526d23af..000000000 --- a/changelog.d/2911-ratelimiter-db-storage.fixed.md +++ /dev/null @@ -1,2 +0,0 @@ -- RateLimiter database storage hardened for multi-node use: dialect-aware atomic counter upsert (MySQL/MariaDB, PostgreSQL, SQLite) with unique-constraint-backed insert-retry everywhere else, a v2 `wheels_rate_limits` schema (UNIQUE `store_key`, `row_type` discriminator, `client_key` lookup column), transaction + row-lock (`FOR UPDATE` / `UPDLOCK`) serialization for the slidingWindow and tokenBucket read-modify-write paths, and an automatic one-time upgrade of the auto-created table from the legacy schema (#2911) -- RateLimiter tokenBucket with storage=database now enforces correctly on engines where SQLite returns timestamps as raw epoch milliseconds (observed on Adobe ColdFusion + sqlite-jdbc) — the refill calculation previously read every bucket as fully refilled and never blocked (#2911) diff --git a/changelog.d/2957-deploy-w4-rollup.fixed.md b/changelog.d/2957-deploy-w4-rollup.fixed.md deleted file mode 100644 index bbec575c6..000000000 --- a/changelog.d/2957-deploy-w4-rollup.fixed.md +++ /dev/null @@ -1,5 +0,0 @@ -- `wheels deploy`: a same-version redeploy no longer hits a guaranteed `docker run --name` conflict — deploy now force-removes an existing same-name container (exact-anchored, idempotent) before each app run, and stops superseded versions best-effort after the kamal-proxy cutover instead of leaving every old container running forever (#2957 DEP-11a) -- `wheels deploy secrets extract ` now matches the key case-sensitively, like Kamal — previously CFML's case-insensitive `==` let `extract path` return the `PATH` line's value (#2957 DEP-11b) -- `wheels deploy`: the kamal-proxy config volume now derives the remote home from the ssh user (`/root` for the default root user, `/home/` otherwise) instead of hardcoding the `/home/` layout, which was wrong on every default config (#2957 DEP-11c) -- `wheels deploy`: secret resolution from `.kamal/secrets` is now bounded by a timeout (default 60s, configurable via `timeoutSeconds`) — a command blocking on interactive input (e.g. `op read` prompting for sign-in) used to hang the deploy thread forever; it now kills the bash process and throws a clear `SecretResolver.ResolutionFailed` (#2957) -- `wheels deploy rollback --destination=X` now applies the destination overlay — rollback was the last verb loading `deploy.yml` without forwarding `--destination`, so it targeted the base config's hosts (#2957; same defect class as the `config` fix in #3085) diff --git a/changelog.d/3013-querybuilder-scope-handler-sanitization.fixed.md b/changelog.d/3013-querybuilder-scope-handler-sanitization.fixed.md deleted file mode 100644 index 2917401d0..000000000 --- a/changelog.d/3013-querybuilder-scope-handler-sanitization.fixed.md +++ /dev/null @@ -1 +0,0 @@ -- `QueryBuilder.onMissingMethod` now sanitizes dynamic scope handler arguments via `$sanitizeScopeHandlerArgs`, matching the existing behavior of the model-root and `ScopeChain` invocation paths (#3013). Previously, `model.where(...).byHandlerScope(input)` delegated the raw `missingMethodArguments` to the handler, while `model.byHandlerScope(input)` and `model.someScope().byHandlerScope(input)` ran through the sanitizer — so the same scope produced different `where` specs depending on how it was reached. diff --git a/changelog.d/3016-mcp-deprecation-stale-path.fixed.md b/changelog.d/3016-mcp-deprecation-stale-path.fixed.md deleted file mode 100644 index 3bca2462d..000000000 --- a/changelog.d/3016-mcp-deprecation-stale-path.fixed.md +++ /dev/null @@ -1 +0,0 @@ -- Deprecated `/wheels/mcp` HTTP transport's runtime warnings (log message, CLI-disabled-tool error, and legacy `wheels mcp setup` output) now point to the live integration guide (`https://guides.wheels.dev/v4-0-0/command-line-tools/mcp-integration`) instead of the phantom `docs/command-line-tools/commands/mcp/mcp-configuration-guide.md` path that #2888 missed (#3016) diff --git a/changelog.d/3026-cli-test-base-path.fixed.md b/changelog.d/3026-cli-test-base-path.fixed.md deleted file mode 100644 index 65523dc75..000000000 --- a/changelog.d/3026-cli-test-base-path.fixed.md +++ /dev/null @@ -1 +0,0 @@ -- `wheels test` (and `wheels browser test`) now honour the `subpath` setting for subfolder-mounted apps via a new `--base-path` flag, auto-deriving the prefix from `WHEELS_SUBPATH` or `set(subpath=...)` when omitted, so the test runner is reachable under a URL prefix instead of always assuming a root mount (#3026) diff --git a/changelog.d/3029-dispatch-bare-cfabort-adobe.fixed.md b/changelog.d/3029-dispatch-bare-cfabort-adobe.fixed.md deleted file mode 100644 index 9d1c66f93..000000000 --- a/changelog.d/3029-dispatch-bare-cfabort-adobe.fixed.md +++ /dev/null @@ -1 +0,0 @@ -- Dispatch: the `enablePublicComponent=false` anti-fingerprinting 404 branch ended in a bare `cfabort;`, which is Lucee-only tag-in-script syntax — every Adobe engine threw `Variable CFABORT is undefined` at runtime, turning `GET /` (and every `/wheels/*` request) on a stock app in `testing`/`production` into an HTTP 500 instead of a clean `404 Not Found`. Replaced with the script keyword `abort;`, and a new structural guard spec (`BareCfabortGuardSpec`) fails the suite if a bare script-context `cfabort` statement ever reappears under `vendor/wheels` (#3029) diff --git a/changelog.d/3030-reload-envswitch-redirect.fixed.md b/changelog.d/3030-reload-envswitch-redirect.fixed.md deleted file mode 100644 index 31c4dc39b..000000000 --- a/changelog.d/3030-reload-envswitch-redirect.fixed.md +++ /dev/null @@ -1 +0,0 @@ -- URL environment switching (`?reload=&password=...`) now works through the app template's `applicationStop()` reload flow: the restart redirect preserves `reload` + `password` for environment switches (plain `?reload=true` still strips everything), the configured `reloadPassword` is handed across the restart via a single-use server-scope entry so the framework's switch code can verify it on the cold start, and the reload gate skips the restart once the requested environment is active so the redirect chain always terminates. `allowEnvironmentSwitchViaUrl` is enforced pre-restart: when switching is disallowed — `set(allowEnvironmentSwitchViaUrl=false)` or the framework's production/testing/maintenance auto-disable — the parameters are stripped and the request degrades to a plain restart, preserving the existing hardening (the framework cannot enforce the flag itself after `applicationStop()` destroys its carryover state). Applied to all four `public/Application.cfc` copies (CLI app template, repo demo app, starter-app and tweet examples). Trade-off: `?reload=` is now a no-op — use `?reload=true` for a same-environment restart (#3030) diff --git a/changelog.d/3031-envswitch-explicit-override.fixed.md b/changelog.d/3031-envswitch-explicit-override.fixed.md deleted file mode 100644 index 1215932e5..000000000 --- a/changelog.d/3031-envswitch-explicit-override.fixed.md +++ /dev/null @@ -1 +0,0 @@ -- Explicit `set(allowEnvironmentSwitchViaUrl=true)` in `config/settings.cfm` is now honored in production-like environments (production, testing, maintenance). It used to be indistinguishable from the framework default and was silently discarded, making the documented override impossible (#3031) diff --git a/changelog.d/3045-upgrade-apply-docs.changed.md b/changelog.d/3045-upgrade-apply-docs.changed.md deleted file mode 100644 index ff9b11232..000000000 --- a/changelog.d/3045-upgrade-apply-docs.changed.md +++ /dev/null @@ -1 +0,0 @@ -- Docs: upgrade guide, release-channels, and 3x-to-4x migration guide updated to document `wheels upgrade apply` as the framework-swap verb alongside `wheels upgrade check` (#3045) diff --git a/changelog.d/3053-buildredirecturl-url-shadowing.fixed.md b/changelog.d/3053-buildredirecturl-url-shadowing.fixed.md deleted file mode 100644 index 9624634e0..000000000 --- a/changelog.d/3053-buildredirecturl-url-shadowing.fixed.md +++ /dev/null @@ -1 +0,0 @@ -- Adobe ColdFusion: every password-gated reload (`?reload=true&password=...`), URL environment switch (`?reload=&password=...`), and `wheels reload` returned HTTP 500 since #3036 — `$buildRedirectUrl()` in the app template's `public/Application.cfc` declared a local variable named `url`, which on Adobe CF shadows the URL scope that the new environment-switch checks read (CLAUDE.md anti-pattern #11, reserved scope names). The local is renamed to `redirectPath` in all four same-lineage copies (CLI app template, repo demo app, starter-app and tweet examples), the `ReloadEnvironmentSwitchParitySpec` now fails if any `local.url`/`var url` declaration reappears in those files, and the non-dev smoke probes gained an opt-in probe 6 asserting an authorized reload answers 302 (#3053) diff --git a/changelog.d/3053-reload-component-case-sensitivity.fixed.md b/changelog.d/3053-reload-component-case-sensitivity.fixed.md deleted file mode 100644 index 16e4edd6f..000000000 --- a/changelog.d/3053-reload-component-case-sensitivity.fixed.md +++ /dev/null @@ -1 +0,0 @@ -- Adobe ColdFusion on case-sensitive filesystems (i.e. every stock Linux deployment): authorized reloads (`?reload=true&password=...`) returned HTTP 500 "Could not find the ColdFusion component or interface application" in every environment — the reload gate and the shared-application-name branch in the app template's `public/Application.cfc` dispatched through `$simpleLock` with `componentReference = "application"`, a component path Adobe resolves by exact case then all-lowercase, so the lowercase literal never matches `Application.cfc` (Lucee resolves case-insensitively and was unaffected; the #3053 fix verified green only because macOS bind mounts are case-insensitive). The literal is now the case-exact `"Application"` in all four same-lineage copies (CLI app template, repo demo app, starter-app and tweet examples), and `ReloadEnvironmentSwitchParitySpec` fails if a miscased component reference reappears (#3053) diff --git a/changelog.d/3054-redirectafterreload-deferred-location.fixed.md b/changelog.d/3054-redirectafterreload-deferred-location.fixed.md deleted file mode 100644 index f4b4b9143..000000000 --- a/changelog.d/3054-redirectafterreload-deferred-location.fixed.md +++ /dev/null @@ -1 +0,0 @@ -- URL environment switches into `production`/`maintenance` (`?reload=&password=...`) no longer 500 and silently revert: the `redirectAfterReload` block in `wheels/events/onapplicationstart.cfc` called a bare `$location()` that does not resolve in that mixin-free component, and even a resolvable redirect there aborts `onApplicationStart` mid-flight, making the engine discard the half-started application. The redirect is now deferred to `EventMethods.$runOnRequestStart`, which runs in the same request after the new application — including the switched environment — has been persisted ([#3054](https://github.com/wheels-dev/wheels/issues/3054)) diff --git a/changelog.d/3059-cli-reload-false-success.fixed.md b/changelog.d/3059-cli-reload-false-success.fixed.md deleted file mode 100644 index 5b64e9563..000000000 --- a/changelog.d/3059-cli-reload-false-success.fixed.md +++ /dev/null @@ -1 +0,0 @@ -- `wheels reload` no longer prints `Application reloaded successfully.` when nothing was reloaded: the CLI now inspects the HTTP status of the `?reload=true` request instead of treating any completed exchange as success. A successful reload always answers with the framework's restart redirect (302), so a normal page render (200/404 — wrong reload password, the warm-path gate fell through) and endpoint errors (4xx/5xx, e.g. the #3053 Adobe regression) are now reported in red with the status and a hint, and the command exits non-zero (`Wheels.ReloadFailed`) so `wheels reload && ...` CI gates work. The interactive console's `/reload` applies the same 302-vs-200 verdict (printing red instead of throwing). Success-path output is unchanged (#3059) diff --git a/changelog.d/3062-reload-password-fails-closed.security.md b/changelog.d/3062-reload-password-fails-closed.security.md deleted file mode 100644 index 4162bbc16..000000000 --- a/changelog.d/3062-reload-password-fails-closed.security.md +++ /dev/null @@ -1 +0,0 @@ -- The URL reload gate in the app template's `public/Application.cfc` now fails closed: `?reload=true` requires a non-empty configured `reloadPassword` AND a matching `password` parameter before `applicationStop()` fires. Previously an empty `reloadPassword` left plain `?reload=true` open to any anonymous client (restart-DoS on internet-reachable apps), contradicting the framework's own boot warning and both deployment guides. Empty password now disables URL-based reload entirely, matching the environment-switch leg. Wrong-password attempts against a warm application — previously invisible and unthrottled — are now logged to `wheels_security.log` with the trusted client IP and feed the same 5-failures-in-5-minutes per-IP rate limit as the cold-start path (accepted reloads are logged too); the two `examples/` copies also upgrade from CFML's case-insensitive `==` to the constant-time `$secureCompare()`. Applied to all four `public/Application.cfc` copies (CLI app template, repo demo app, starter-app and tweet examples), pinned by a structural parity spec; the Docker test-harness `settings.cfm` files now ship `reloadPassword="wheels-dev"` so edit-reload-test cycles keep working (#3062) diff --git a/changelog.d/3063-includeconfig-compile-guard.fixed.md b/changelog.d/3063-includeconfig-compile-guard.fixed.md deleted file mode 100644 index 625642de8..000000000 --- a/changelog.d/3063-includeconfig-compile-guard.fixed.md +++ /dev/null @@ -1 +0,0 @@ -- A compile-time or runtime error in a `config/*.cfm` file loaded during application start (e.g. an Adobe CF-illegal top-level `var di = injector();` in `config/services.cfm`) is now logged and rethrown by `$includeConfig()` as a named `Wheels.ConfigIncludeFailed` error carrying the failing template path and the original engine message (original type/detail preserved in `detail`) — a clear, located, fail-closed boot error in every environment, instead of the old masked, application-wide HTTP 500 whose secondary `onError` failure hid the real cause. An app whose config did not load no longer boots fail-open on framework defaults (#3063) diff --git a/changelog.d/3072-scope-namespace-callback.fixed.md b/changelog.d/3072-scope-namespace-callback.fixed.md deleted file mode 100644 index 0d1e68281..000000000 --- a/changelog.d/3072-scope-namespace-callback.fixed.md +++ /dev/null @@ -1 +0,0 @@ -- Router: `scope()` (and the `namespace()` / `package()` / `controller()` wrappers that forward to it) silently dropped a `callback=` argument — the callback never ran (its routes 404'd as `Wheels.RouteNotFound`) and nothing closed the scope, so every route declared afterward (including `resources`, `root`, and `wildcard`) inherited the scope's path prefix and middleware. `scope()` now consumes `callback` the same way `group()` does: it runs `callback(this)` to declare the nested routes and auto-closes the scope, so the documented `.scope(path="/api", callback=function(map){ ... })` and `.namespace(name="admin", callback=...)` forms work as written and routes after the block are no longer swallowed (#3072) diff --git a/changelog.d/3074-middleware-context-cgi.fixed.md b/changelog.d/3074-middleware-context-cgi.fixed.md deleted file mode 100644 index a08769bad..000000000 --- a/changelog.d/3074-middleware-context-cgi.fixed.md +++ /dev/null @@ -1 +0,0 @@ -- The dispatch middleware request context now carries a `cgi` member — the sanitized `request.cgi` copy overlaid on every inbound HTTP header mapped to its CGI-style `http_*` name — fulfilling the `handle()` contract that always documented "CGI info" on the request struct. Documented patterns like a `RateLimiter` `keyFunction` reading `req.cgi.http_x_api_key` now key budgets per client instead of silently collapsing all traffic into one shared bucket, inbound request-ID passthrough wrappers can honor `X-Request-Id` off the context, and `Cors`/`TenantResolver`/`TokenStrategy` resolve their headers from the context without falling back to the engine CGI scope. The CORS preflight short-circuit context carries the same member (#3074) diff --git a/changelog.d/3075-actionnotallowed-404-status.fixed.md b/changelog.d/3075-actionnotallowed-404-status.fixed.md deleted file mode 100644 index d3be4e310..000000000 --- a/changelog.d/3075-actionnotallowed-404-status.fixed.md +++ /dev/null @@ -1 +0,0 @@ -- The action-dispatch gate now returns HTTP 404 (not 500) when a request targets a framework helper or `$`-prefixed internal method, matching the missing-action behavior promised by #2845 and CLAUDE.md Anti-Pattern 8. `$callAction` routes the block through `$throwErrorOrShow404Page` (committing the 404 header and rendering the production 404 page), and the `EventMethods` status map now treats `Wheels.ActionNotAllowed` as a 404 alongside the `Wheels.*NotFound` family (#3075) diff --git a/changelog.d/3076-onerror-engineadapter-scope.fixed.md b/changelog.d/3076-onerror-engineadapter-scope.fixed.md deleted file mode 100644 index 714097bfc..000000000 --- a/changelog.d/3076-onerror-engineadapter-scope.fixed.md +++ /dev/null @@ -1 +0,0 @@ -- The development error page no longer masks app-start exceptions: `$getRequestTimeout()`, `$statusCode()`, and `$contentType()` now resolve the engine adapter via `$engineAdapter()` (which checks both `application.wheels` and the `application.$wheels` startup-staging struct) instead of reading `application.wheels.engineAdapter` unconditionally. Previously, when a throw during settings/routes load left the adapter only in `application.$wheels`, `onError` itself crashed with `key [ENGINEADAPTER] doesn't exist` (Lucee) / `Element WHEELS.ENGINEADAPTER is undefined` (Adobe), hiding the original failure such as the `Wheels.Cors.InvalidConfiguration` guard (#3076) diff --git a/changelog.d/3077-sendfile-absolute-directory.fixed.md b/changelog.d/3077-sendfile-absolute-directory.fixed.md deleted file mode 100644 index 17bee351a..000000000 --- a/changelog.d/3077-sendfile-absolute-directory.fixed.md +++ /dev/null @@ -1 +0,0 @@ -- `sendFile()`: an absolute `directory` argument is now used verbatim instead of being post-processed, honouring the documented "must be a full path … outside of the web root" contract. Previously the resolver ran the caller-supplied absolute path through the `/wheels` mapping rewrite — substring-hijacking any directory containing `/wheels` (e.g. `/var/www/wheels/uploads`) on every engine — and through an `ExpandPath()` fallback that web-root-prefixed the path on Adobe CF, so serving files from outside the web root threw `Wheels.FileNotFound` there. The verbatim branch only engages when the directory actually exists on disk, so the long-standing webroot-relative idiom (`directory="/reports/"`) keeps resolving against the web root via `ExpandPath()`. Relative `filePath`-based resolution and the `..`-traversal guard are unchanged (#3077) diff --git a/changelog.d/3079-tablename-getter-guard.fixed.md b/changelog.d/3079-tablename-getter-guard.fixed.md deleted file mode 100644 index 142f42693..000000000 --- a/changelog.d/3079-tablename-getter-guard.fixed.md +++ /dev/null @@ -1 +0,0 @@ -- Calling `tableName()` with an argument now throws `Wheels.InvalidArgument` when error information is shown (development/testing) instead of silently no-opping — some 4.0-era docs mistakenly taught `tableName("x")` as the table setter, leaving models on their convention table. The zero-argument getter is unchanged, production stays a no-op, and the canonical setter remains `table()` (#3079) diff --git a/changelog.d/3080-migrate-info-doctor-read-side-fallback.fixed.md b/changelog.d/3080-migrate-info-doctor-read-side-fallback.fixed.md deleted file mode 100644 index b0b6a15e6..000000000 --- a/changelog.d/3080-migrate-info-doctor-read-side-fallback.fixed.md +++ /dev/null @@ -1 +0,0 @@ -- `wheels migrate info` and `wheels migrate doctor` honor the read-side common-port fallback again. #2879 documented that read-only commands keep the legacy port probe (8080, 60000, 3000, 8500) when no `lucee.json` / `.env` port is configured, but `cli.lucli.Module::runMigration()` gated every migrate subcommand behind `requireProjectConfig = true`, so the two read-only inspectors refused a server on 8080 — the first entry of their own documented fallback list — with `Wheels.ServerNotRunning`. The schema-mutating actions (`latest`, `up`, `down`) keep the strict project-bound gate, and because a fallback attach can reach a *sibling* project's server (and report the wrong app's migration state), `info`/`doctor` now print a yellow notice naming the port whenever the fallback was used, with the `lucee.json` / `PORT` hint to pin the project. Covered by new call-site gating specs in `cli/lucli/tests/specs/services/ServerDetectionSpec.cfc` (#3080) diff --git a/changelog.d/3081-cli-migration-exit-codes.fixed.md b/changelog.d/3081-cli-migration-exit-codes.fixed.md deleted file mode 100644 index 116e8ecf3..000000000 --- a/changelog.d/3081-cli-migration-exit-codes.fixed.md +++ /dev/null @@ -1 +0,0 @@ -- CLI: migration failures now reach the exit code. A failed `up()`/`down()` step that `migrateTo()` folds into its output (e.g. `Error migrating to .`) made `wheels migrate latest|up|down` print the error inside the green success block and still exit 0; `wheels db reset --force` exited 0 when it refused on a `ServerNotRunning` check; and `wheels migrate forget|pretend` refusals (not in tracking table, matching local file exists, already applied, no matching file) printed red but exited 0. All three now exit non-zero, so a `wheels migrate latest && …` CI gate no longer proceeds as if the schema moved. Informational dry-run output (missing `` / missing `--yes`) still exits 0. The migrate-side sibling of the #2973/#2987 seeder honesty fix (#3081) diff --git a/changelog.d/3082-cli-seed-generate.fixed.md b/changelog.d/3082-cli-seed-generate.fixed.md deleted file mode 100644 index 2f58ec3f6..000000000 --- a/changelog.d/3082-cli-seed-generate.fixed.md +++ /dev/null @@ -1 +0,0 @@ -- `wheels seed --generate` now actually creates rows and reports honest success/failure. The CLI seed bridge's generate loop iterated `$classData().properties` (a struct keyed by property name) as if it were an array of property structs — so `prop.name` threw `there is no property with name [NAME] found in [string]`, every model errored, zero rows were created, yet the run still returned `success=true` and the CLI printed "Seeding completed." with exit 0. The generate path is now a dedicated, unit-tested `wheels.Seeder.generateSeeds(models, count)` method that iterates the property struct correctly and forces overall `success=false` when any model fails or no rows are created, so the CLI surfaces a non-zero exit instead of silently lying (the #2987 honesty fix had only covered convention mode) (#3082) diff --git a/changelog.d/3083-test-runner-scope-visibility.fixed.md b/changelog.d/3083-test-runner-scope-visibility.fixed.md deleted file mode 100644 index 06cf7f476..000000000 --- a/changelog.d/3083-test-runner-scope-visibility.fixed.md +++ /dev/null @@ -1 +0,0 @@ -- The `/wheels/core/tests` and built-in app-test (`app-runner.cfm`) JSON runners now surface scope resolution instead of silently reporting green for the wrong scope: the payload carries `directoryRequested`, `directoryResolved`, `directoryRejected`, `bundlesDiscovered`, and a `warnings[]` array, so a `directory=` value that fails the allowlist (silently swapped for the full default suite) and an allowlist-passing single-spec-file value that discovers 0 bundles are both detectable from the response rather than masquerading as a passing run; `tools/ci/run-tests.sh` and `tools/test-local.sh` consume the new signals and fail loudly on a rejected `directory=` or a 0-bundle discovery (#3083) diff --git a/changelog.d/3090-jobs-worker-cli.added.md b/changelog.d/3090-jobs-worker-cli.added.md deleted file mode 100644 index 697f110db..000000000 --- a/changelog.d/3090-jobs-worker-cli.added.md +++ /dev/null @@ -1 +0,0 @@ -- `wheels jobs work` (long-lived worker loop with `--queue`, `--interval`, `--max-jobs`, `--quiet`) and `wheels jobs status` (`--queue`, `--format=json`) CLI commands — thin wrappers over the existing `jobsProcessNext`/`jobsStatus` framework bridge that was left without a CLI surface in the LuCLI migration; the `retry`/`purge`/`monitor` verbs remain tracked follow-ups (#3090) diff --git a/changelog.d/3109-hasmany-shortcut.fixed.md b/changelog.d/3109-hasmany-shortcut.fixed.md deleted file mode 100644 index 76dac3628..000000000 --- a/changelog.d/3109-hasmany-shortcut.fixed.md +++ /dev/null @@ -1 +0,0 @@ -- Declaring `shortcut` on a `hasMany` association no longer breaks that association: `$expandThroughAssociations` now only rewrites a 2-element `through` into a nested include when its first segment is an association on the current model, so the plain association method, the shortcut method, and `include` no longer throw `Wheels.AssociationNotFound` (#3109) diff --git a/changelog.d/3110-reload-refire-contract.fixed.md b/changelog.d/3110-reload-refire-contract.fixed.md deleted file mode 100644 index d4a406d71..000000000 --- a/changelog.d/3110-reload-refire-contract.fixed.md +++ /dev/null @@ -1 +0,0 @@ -- `wheels reload` and `wheels packages add` no longer claim that `?reload=true` skips `onApplicationStart`. An authorized reload calls `applicationStop()`, so the next request re-fires `onApplicationStart` in full (re-running `config/services.cfm` and the package loader) — the CLI now says a reload activates an installed package and notes that only a missing/wrong reload password silently skips the restart (#3110) diff --git a/changelog.d/3112-generate-controller-comma-actions.fixed.md b/changelog.d/3112-generate-controller-comma-actions.fixed.md deleted file mode 100644 index 75f56394d..000000000 --- a/changelog.d/3112-generate-controller-comma-actions.fixed.md +++ /dev/null @@ -1 +0,0 @@ -- `wheels generate controller Name a,b` now splits the comma-joined action token into discrete actions (`a` and `b`) instead of silently emitting an invalid `function a,b()` method plus an `a,b.cfm` view file — the comma form now matches the documented space-separated form (#3112) diff --git a/changelog.d/3113-cli-test-ci-annotations.fixed.md b/changelog.d/3113-cli-test-ci-annotations.fixed.md deleted file mode 100644 index eee4404e9..000000000 --- a/changelog.d/3113-cli-test-ci-annotations.fixed.md +++ /dev/null @@ -1 +0,0 @@ -- `wheels test --ci` now has an observable effect: it emits GitHub Actions `::error` workflow-command annotations (one per failed or errored spec, with the message encoded to a single line) so failures surface inline in CI logs and PR checks, instead of being byte-identical to a plain run. The flag was previously parsed and threaded through to the runner but never consumed (#3113) diff --git a/changelog.d/3113-cli-test-verbose-tree.fixed.md b/changelog.d/3113-cli-test-verbose-tree.fixed.md deleted file mode 100644 index 361f0e95b..000000000 --- a/changelog.d/3113-cli-test-verbose-tree.fixed.md +++ /dev/null @@ -1 +0,0 @@ -- `wheels test --verbose` (and `-v`, in any flag position) now actually prints the per-spec bundle → suite → spec tree: the test command honors the runtime `verboseEnabled` signal LuCLI passes through `init()`, since the launcher consumes the `--verbose`/`-v` token globally and it never reaches the module's own parser; requires a CLI binary built on a LuCLI runtime that preserves the flag across the module-shortcut re-dispatch (#3113) diff --git a/changelog.d/3114-cors-global-middleware-arbitration.fixed.md b/changelog.d/3114-cors-global-middleware-arbitration.fixed.md deleted file mode 100644 index cacf4a90e..000000000 --- a/changelog.d/3114-cors-global-middleware-arbitration.fixed.md +++ /dev/null @@ -1 +0,0 @@ -- CORS: running the legacy global path (`set(allowCorsRequests=true)`) alongside a `wheels.middleware.Cors` instance stacked duplicate `Access-Control-Allow-*` headers — a duplicate `Access-Control-Allow-Origin` makes browsers reject the response per the Fetch spec. The global `onRequestStart` emitter now detects a registered Cors middleware (`$corsMiddlewareActive()`) and steps aside — skipping both `$setCORSHeaders` and the global OPTIONS abort so the dispatch-level middleware is the single source of truth for CORS headers and preflight — and logs a one-time warning so operators disable the redundant `allowCorsRequests` setting (#3114) diff --git a/changelog.d/3115-upgrade-check-csrf-key-name.fixed.md b/changelog.d/3115-upgrade-check-csrf-key-name.fixed.md deleted file mode 100644 index ec73d7afe..000000000 --- a/changelog.d/3115-upgrade-check-csrf-key-name.fixed.md +++ /dev/null @@ -1 +0,0 @@ -- `wheels upgrade check` for a 3.x→4.x jump now recommends `csrfCookieEncryptionSecretKey` — the setting the framework actually reads — instead of the inert `csrfEncryptionKey`, which no framework code consults; a user following the old advice added a setting Wheels ignored and kept the rotate-on-every-deploy CSRF-cookie behavior the rule exists to prevent (#3115) diff --git a/changelog.d/3136-rendering-bare-controller-params.fixed.md b/changelog.d/3136-rendering-bare-controller-params.fixed.md deleted file mode 100644 index 56883f1b5..000000000 --- a/changelog.d/3136-rendering-bare-controller-params.fixed.md +++ /dev/null @@ -1 +0,0 @@ -- `$generateIncludeTemplatePath` no longer eagerly dereferences `variables.params` in its `$controllerName` default argument, so rendering through a bare-instantiated controller (e.g. `new wheels.Controller().sendEmail(template="/mailers/welcome", deliver=false, ...)`) with an absolute template path composes correctly instead of throwing a raw `PARAMS is undefined` 500 on Lucee and Adobe. Controller-relative (no-leading-slash) templates on a bare instance now surface a clear `Wheels.ControllerNameRequired` error instead of the cryptic dereference crash; request-built controllers are unaffected (#3136) diff --git a/changelog.d/3158-deploy-init-envsecret-roundtrip.fixed.md b/changelog.d/3158-deploy-init-envsecret-roundtrip.fixed.md deleted file mode 100644 index 0d68bcd7c..000000000 --- a/changelog.d/3158-deploy-init-envsecret-roundtrip.fixed.md +++ /dev/null @@ -1 +0,0 @@ -- `wheels deploy init` scaffolds an `env.secret: [WHEELS_RELOAD_PASSWORD]` block that now round-trips cleanly: with env-file delivery in place (#2957), a freshly-scaffolded config passes `wheels deploy config` and `wheels deploy deploy --dry-run` and ships the secret to containers via the remote `--env-file`, instead of hard-failing with the retired `Wheels.Deploy.EnvSecretUnsupported` guard. The scaffold and the deploy engine are now pinned together by a regression spec (#3158) diff --git a/changelog.d/3159-deploy-redact-remote-failure-secrets.security.md b/changelog.d/3159-deploy-redact-remote-failure-secrets.security.md deleted file mode 100644 index 3c7a7d592..000000000 --- a/changelog.d/3159-deploy-redact-remote-failure-secrets.security.md +++ /dev/null @@ -1 +0,0 @@ -- `wheels deploy`: resolved secret values are now redacted (`[REDACTED]`) from `Wheels.Deploy.RemoteExecutionFailed` command summaries before the message is thrown. `env.clear` values interpolated from `${SECRET}` tokens in `.kamal/secrets` ride `docker run ... -e KEY=value`, so a nonzero remote exit previously surfaced the raw secret in the exception message and CI logs. Every occurrence is scrubbed (a value may appear in multiple `-e` flags), redaction happens before the 200-char trim so a value on the boundary can't leak a partial fragment, and empty/trivially short values are skipped so unrelated command text is never mangled (deferred from #3008; [#3159](https://github.com/wheels-dev/wheels/issues/3159)) diff --git a/changelog.d/3175-welcome-page-title.fixed.md b/changelog.d/3175-welcome-page-title.fixed.md deleted file mode 100644 index 7796e5648..000000000 --- a/changelog.d/3175-welcome-page-title.fixed.md +++ /dev/null @@ -1 +0,0 @@ -- The welcome/congratulations page rendered with `Wheels - Error` because it shared the error screen's header; it now reads "Welcome to Wheels" while the error page keeps its title (#3175) diff --git a/changelog.d/3208-hasmany-shortcut-include.fixed.md b/changelog.d/3208-hasmany-shortcut-include.fixed.md deleted file mode 100644 index 1762f7ed4..000000000 --- a/changelog.d/3208-hasmany-shortcut-include.fixed.md +++ /dev/null @@ -1 +0,0 @@ -- `findAll(include=...)` now accepts a `hasMany` `shortcut` name and expands it into the nested bridge include (e.g. `include="Category"` joins through `ProductCategories`) instead of throwing `Wheels.AssociationNotFound` (#3208) diff --git a/changelog.d/boxlang-null-safety.fixed.md b/changelog.d/boxlang-null-safety.fixed.md deleted file mode 100644 index 53f37b937..000000000 --- a/changelog.d/boxlang-null-safety.fixed.md +++ /dev/null @@ -1 +0,0 @@ -- Hardened cross-engine null handling in the router, dispatcher, and error handler for BoxLang, whose stricter semantics throw a `NullPointerException` on a null string/struct subject where Lucee and Adobe coerce null to `""`/empty. `mapper/matching.cfc` now removes a present-but-null `pattern` key before route-pattern derivation, so a named route given via `to=` with no explicit pattern derives its pattern from the route name (a present-null `pattern` key previously skipped derivation and left a null pattern that failed to load on BoxLang); `Dispatch.cfc` `$buildMiddlewareCgiScope()` defaults null request headers to an empty struct; and `EventMethods.cfc` `$runOnError()` guards a null/non-struct exception `cause` and `rootCause` before dereferencing their `type`. New `MapperNullPatternSpec` exercises the route shapes (named `to=` and `resources()`) that the compat-matrix demo app's `.wildcard().root()` routes left uncovered on BoxLang diff --git a/changelog.d/changelog-fragments.added.md b/changelog.d/changelog-fragments.added.md deleted file mode 100644 index e05f549dc..000000000 --- a/changelog.d/changelog-fragments.added.md +++ /dev/null @@ -1 +0,0 @@ -- Changelog entries are now authored as per-PR fragment files under `changelog.d/` (`..md`) instead of direct `CHANGELOG.md` edits, eliminating the `[Unreleased]`-anchor merge conflict every concurrently-open PR used to have with every other. `tools/changelog-promote.sh ` assembles fragments (plus any legacy `[Unreleased]` content) into the new version section at release cut and clears the folder. PR template, bot prompts (propose-fix, review-pr, address-review), and the TDD gate updated to the fragment convention (#2958) diff --git a/changelog.d/csrf-config-super-warning.added.md b/changelog.d/csrf-config-super-warning.added.md deleted file mode 100644 index ca4826dc3..000000000 --- a/changelog.d/csrf-config-super-warning.added.md +++ /dev/null @@ -1 +0,0 @@ -- Development-mode warning (debug bar + wheels log) when a controller overrides `config()` without calling `super.config()`, which silently drops the base controller's `protectsFromForgery()` CSRF wiring and other inherited setup such as filters and verifies ([#2960](https://github.com/wheels-dev/wheels/issues/2960)) diff --git a/changelog.d/db-adapter-identity-fallbacks-and-dedup.fixed.md b/changelog.d/db-adapter-identity-fallbacks-and-dedup.fixed.md deleted file mode 100644 index 2b4c7c53d..000000000 --- a/changelog.d/db-adapter-identity-fallbacks-and-dedup.fixed.md +++ /dev/null @@ -1,3 +0,0 @@ -- SQL Server adapter: same-batch `SCOPE_IDENTITY()` retrieval replaces the session-scoped `@@IDENTITY` identity fallback on engines without driver generated keys, and paginated queries no longer drop their `GROUP BY` clause ([#2906](https://github.com/wheels-dev/wheels/issues/2906), [#2961](https://github.com/wheels-dev/wheels/issues/2961)) -- Oracle adapter: identity fallback now resolves the backing identity sequence and uses session-scoped `CURRVAL` instead of the race-prone `MAX(ROWID)` heuristic, and `findAll(order="random")` emits `DBMS_RANDOM.VALUE` instead of the invalid `RANDOM()` ([#2906](https://github.com/wheels-dev/wheels/issues/2906), [#2961](https://github.com/wheels-dev/wheels/issues/2961)) -- The six divergent `$identitySelect` copies across database adapters are unified into a Base template method with per-engine `$parseInsertColumnList`/`$lastIdLookup` hooks, so engine workarounds land once ([#2906](https://github.com/wheels-dev/wheels/issues/2906)) diff --git a/changelog.d/debugbar-env-quickswitch.fixed.md b/changelog.d/debugbar-env-quickswitch.fixed.md deleted file mode 100644 index 588263b93..000000000 --- a/changelog.d/debugbar-env-quickswitch.fixed.md +++ /dev/null @@ -1 +0,0 @@ -- Debug bar: environment quick-switch links (Testing / Maintenance / Production) now render only when switching can actually work — a non-empty `reloadPassword` is configured and `allowEnvironmentSwitchViaUrl` allows it — and prompt for the reload password at click time instead of rendering dead anchors when no password is set (the configuration where `?reload=` has been a no-op since #2082). The password is never embedded in the page, and the plain `?reload=true` reload anchor keeps its existing behavior ([#3060](https://github.com/wheels-dev/wheels/issues/3060)) diff --git a/changelog.d/debugbar-externalized-assets.changed.md b/changelog.d/debugbar-externalized-assets.changed.md deleted file mode 100644 index b6b7dc00d..000000000 --- a/changelog.d/debugbar-externalized-assets.changed.md +++ /dev/null @@ -1 +0,0 @@ -- The development debug bar's static CSS and JavaScript are now maintained as standalone files (`vendor/wheels/public/assets/css/debugbar.css`, `vendor/wheels/public/assets/js/debugbar.js`) and included into the bar, eliminating the CFML `##`-escaped inline blocks (a documented "unescaped `#` crashes the suite" hazard) and trimming the per-response debug payload via inter-tag whitespace collapse. The bar remains development-only and unchanged in production (#3210) diff --git a/changelog.d/deploy-config-destination-overlay.fixed.md b/changelog.d/deploy-config-destination-overlay.fixed.md deleted file mode 100644 index 340945b73..000000000 --- a/changelog.d/deploy-config-destination-overlay.fixed.md +++ /dev/null @@ -1 +0,0 @@ -- `wheels deploy config --destination=` now applies the destination overlay (`deploy..yml`) before dumping the resolved YAML, matching `deploy`/`details`/`audit`. Previously the destination was silently ignored and the un-overlaid base config was printed, breaking the `kamal config` diff step in the Kamal migration checklist ([#3085](https://github.com/wheels-dev/wheels/issues/3085)) diff --git a/changelog.d/deploy-env-secret-env-file-delivery.added.md b/changelog.d/deploy-env-secret-env-file-delivery.added.md deleted file mode 100644 index f6116ede8..000000000 --- a/changelog.d/deploy-env-secret-env-file-delivery.added.md +++ /dev/null @@ -1 +0,0 @@ -- `wheels deploy` now delivers `env.secret` values to app and accessory containers via a remote env file (Kamal model): the file is created with 600 permissions before any content lands and re-locked to 600 right after the upload (the SFTP layer is also told not to carry local file attributes onto the remote), values travel over SFTP only (never argv, dry-run output, or exception summaries), and `docker run` references it with `--env-file`. A declared secret with no resolvable `.kamal/secrets` value fails fast with `Wheels.Deploy.EnvSecretMissing` (names only) before any remote call; the `Wheels.Deploy.EnvSecretUnsupported` fail-fast from #3008 is retired (#2957) diff --git a/changelog.d/deploy-fresh-host-bootstrap.fixed.md b/changelog.d/deploy-fresh-host-bootstrap.fixed.md deleted file mode 100644 index ddc2c574e..000000000 --- a/changelog.d/deploy-fresh-host-bootstrap.fixed.md +++ /dev/null @@ -1 +0,0 @@ -- `wheels deploy` now works on fresh hosts: the kamal-proxy boot guard `details() || boot()` never reached `boot()` (`docker ps` exits 0 whether or not the proxy exists) and was dispatched to only one host — the proxy is now booted via Kamal's `docker start kamal-proxy || docker run ...` (`ProxyCommands.start_or_run()`) on every proxy-fronted host; the `kamal` docker network, previously never created (zero `create_network` call sites while every app/proxy/accessory `docker run` joins `--network kamal`), is now idempotently ensured on every host before the first consumer; `wheels deploy setup` is a real setup phase (network create + accessory boot on accessory hosts, then deploy) instead of a literal `deploy()` alias; and `kamal-proxy deploy` registration is gated to proxy-fronted roles (role-level `proxy:` boolean, defaulting to the `web` role) instead of firing for every job/worker role (#2957) diff --git a/changelog.d/deploy-hook-masking-and-app-port.fixed.md b/changelog.d/deploy-hook-masking-and-app-port.fixed.md deleted file mode 100644 index d665d676d..000000000 --- a/changelog.d/deploy-hook-masking-and-app-port.fixed.md +++ /dev/null @@ -1,2 +0,0 @@ -- `wheels deploy`: a failing `post-deploy-failure` hook no longer masks the original deploy error — the hook is best-effort, its non-zero exit is logged (`[hook:post-deploy-failure] ...`), and the real failure rethrows ([#3087](https://github.com/wheels-dev/wheels/issues/3087)) -- `wheels deploy` / `wheels deploy rollback`: the kamal-proxy traffic target is now built from `proxy.app_port` (default `80`, matching Kamal) instead of a hardcoded `:3000`, so containers listening on the scaffolded `8080` (or any configured port) become healthy after cutover ([#3089](https://github.com/wheels-dev/wheels/issues/3089)) diff --git a/changelog.d/deploy-lock-correctness.fixed.md b/changelog.d/deploy-lock-correctness.fixed.md deleted file mode 100644 index 01c7fb2a7..000000000 --- a/changelog.d/deploy-lock-correctness.fixed.md +++ /dev/null @@ -1,2 +0,0 @@ -- `wheels deploy` lock acquisition is now all-or-nothing across the fleet: the lock is acquired on every (deduped) host sequentially in config order with failures surfaced, already-acquired locks are rolled back on a partial failure (`Wheels.Deploy.LockAcquireFailed` names the contended host; the contended host's own lock is never touched), and release fans out to every acquired host. Previously the first-success-wins `onAny` dispatch swallowed contention on one host and silently re-acquired on another, so concurrent deploys were only mutually excluded on single-host configs — and release could target a different host than acquire, stranding stale locks. The manual `wheels deploy lock acquire/release/status` verbs follow the same fleet-wide semantics (#2957) -- Deploy lock metadata now actually expands `$(hostname)` and `$(date --iso-8601=seconds)` on the remote: the symlink target double-quotes the substitution segment while keeping the user and message inert via `shellEscape` single-quoting — previously the whole target was single-quoted, which suppressed command substitution and recorded the literal `$(hostname)` text (#2957) diff --git a/changelog.d/deploy-numeric-release-dry-run-hang.fixed.md b/changelog.d/deploy-numeric-release-dry-run-hang.fixed.md deleted file mode 100644 index 764c8ccbd..000000000 --- a/changelog.d/deploy-numeric-release-dry-run-hang.fixed.md +++ /dev/null @@ -1 +0,0 @@ -- **CLI**: `wheels deploy ... --release=1 --dry-run` no longer hangs ~76 seconds with `Operation timed out`. CFML's coercing `==` treated the value `1` as the boolean string `true` during the argv round-trip, dropping the release value and letting the deploy flag parser swallow `--dry-run` as the version — so a documented dry run opened real SSH connections. Values are now compared exactly (`1`, `0`, `yes`, `no` stay values), and a value-taking deploy flag never consumes a following `--` flag as its value ([#3111](https://github.com/wheels-dev/wheels/issues/3111)) diff --git a/changelog.d/deploy-remote-exec-security.security.md b/changelog.d/deploy-remote-exec-security.security.md deleted file mode 100644 index e73bc3b40..000000000 --- a/changelog.d/deploy-remote-exec-security.security.md +++ /dev/null @@ -1 +0,0 @@ -- `wheels deploy`: registry login now sends the password over SSH stdin (`docker login --password-stdin`) so it never appears in dry-run output, exception messages, or the remote process table; an unresolvable password fails fast instead of sending an empty secret. Env values, builder dockerfile/context paths, and lock user/message metadata are shell-escaped before reaching a remote shell, and service/role/accessory names are format-validated (docker-compliant `[a-zA-Z0-9][a-zA-Z0-9_.-]*`) since they are interpolated into lock paths, container names, and label-filter pipelines. A non-empty `env.secret` block now fails fast with `Wheels.Deploy.EnvSecretUnsupported` (naming the affected keys, never values) instead of silently shipping containers without the declared secrets — env-file delivery is tracked in #2957 (Refs #2956) diff --git a/changelog.d/deploy-secrets-project-root.fixed.md b/changelog.d/deploy-secrets-project-root.fixed.md deleted file mode 100644 index 5e798aa25..000000000 --- a/changelog.d/deploy-secrets-project-root.fixed.md +++ /dev/null @@ -1 +0,0 @@ -- `wheels deploy` `${VAR}` interpolation now resolves `.kamal/secrets` from the project root for the standard `config/deploy.yml` layout, agreeing with `wheels deploy secrets print` and registry login. Previously it looked for `config/.kamal/secrets` — a file nothing creates — so secrets-file interpolation silently never fired ([#3084](https://github.com/wheels-dev/wheels/issues/3084)) diff --git a/changelog.d/deploy-validator-allowlist-trim.changed.md b/changelog.d/deploy-validator-allowlist-trim.changed.md deleted file mode 100644 index df42e7e47..000000000 --- a/changelog.d/deploy-validator-allowlist-trim.changed.md +++ /dev/null @@ -1 +0,0 @@ -- `wheels deploy` config validation now rejects the 13 Kamal top-level keys the runtime never reads (`boot`, `healthcheck`, `hooks`, `volumes`, `labels`, `logging`, `retain_containers`, `minimum_version`, `asset_path`, `require_destination`, `allow_empty_roles`, `run_directory`, `readiness_delay`) instead of accepting-and-ignoring them; the `unknown top-level key` error now lists the allowed keys ([#3088](https://github.com/wheels-dev/wheels/issues/3088)) diff --git a/changelog.d/deploy-validator-host-colons.fixed.md b/changelog.d/deploy-validator-host-colons.fixed.md deleted file mode 100644 index 37d0ae74b..000000000 --- a/changelog.d/deploy-validator-host-colons.fixed.md +++ /dev/null @@ -1 +0,0 @@ -- `wheels deploy` host validation no longer under-counts adjacent colons: unbracketed IPv6-ish hosts like `::1:22`, `:a:b`, and `a::b` are now rejected with the documented `invalid host` error, while bracketed `[::1]:22` and single-colon `user@host:port` forms remain accepted ([#3086](https://github.com/wheels-dev/wheels/issues/3086)) diff --git a/changelog.d/deploy-w3-observability.fixed.md b/changelog.d/deploy-w3-observability.fixed.md deleted file mode 100644 index 70199ced2..000000000 --- a/changelog.d/deploy-w3-observability.fixed.md +++ /dev/null @@ -1,3 +0,0 @@ -- Deploy read verbs (`wheels deploy audit`, `details`, `app logs`/`details`/`containers`/`images`, `lock status`) now surface the remote output host-prefixed (`[host] line`) instead of returning only a host-count summary — the dispatch layer previously discarded every `ssh.run()` result ([#2957](https://github.com/wheels-dev/wheels/issues/2957) DEP-6a). -- `wheels deploy` / `rollback` / `setup` now write the on-server audit trail (`/tmp/kamal-audit.log`): deploys are bracketed by `started deploy of version X` / `completed deploy of version X` records, rollbacks and setup's accessory boots are recorded, and audit writes are tolerated-on-failure so observability can never fail a deploy. Previously `AuditorCommands.record()` had zero call sites and `wheels deploy audit` tailed a file the tool never created ([#2957](https://github.com/wheels-dev/wheels/issues/2957) DEP-6b). -- The flat `wheels deploy bootstrap` / `wheels deploy exec` aliases — the only CLI-reachable form of these verbs ([#2677](https://github.com/wheels-dev/wheels/issues/2677)) — now seed their SSH pool from `deploy.yml`'s `ssh:` block like every other deploy verb; previously they constructed a bare pool that ignored `ssh.user`, `ssh.port`, and `keys:` and always connected as `root@host:22` ([#2957](https://github.com/wheels-dev/wheels/issues/2957) DEP-7). diff --git a/changelog.d/deploy-warmup-up-endpoint.added.md b/changelog.d/deploy-warmup-up-endpoint.added.md deleted file mode 100644 index 6f5a35f85..000000000 --- a/changelog.d/deploy-warmup-up-endpoint.added.md +++ /dev/null @@ -1 +0,0 @@ -- New apps scaffolded with `wheels new` now ship a `/up` liveness/warm-up endpoint (`app/controllers/Up.cfc` + route). `wheels deploy`'s proxy healthcheck already probes `/up` before traffic cutover, so the dispatch → controller → render path is compiled on a freshly deployed node before the first real visitor — moving the one-time cold-start compile (the bulk of first-request latency) off user traffic. The production-config guide documents the warm-up recipe and recommends setting the engine's template-inspection mode to `never` in production (#3210) diff --git a/changelog.d/dev-ui-cacheable-assets.changed.md b/changelog.d/dev-ui-cacheable-assets.changed.md deleted file mode 100644 index 5d876efc1..000000000 --- a/changelog.d/dev-ui-cacheable-assets.changed.md +++ /dev/null @@ -1 +0,0 @@ -- Dev-UI pages (`/wheels/info`, `/wheels/routes`, `/wheels/migrator`, etc.) no longer inline ~1MB of JS/CSS (jQuery, Semantic UI, marked, highlight.js, base64 icon font) into every response. Bundled assets are now served from a `/wheels/assets/*` route with `Cache-Control: public, max-age=31536000, immutable` and a framework-version cache-buster, shrinking typical dev-UI page payloads from ~1.1MB to under 100KB after first load ([#2959](https://github.com/wheels-dev/wheels/issues/2959)). diff --git a/changelog.d/devui-info-metadata-core-format.fixed.md b/changelog.d/devui-info-metadata-core-format.fixed.md deleted file mode 100644 index a5d5ed158..000000000 --- a/changelog.d/devui-info-metadata-core-format.fixed.md +++ /dev/null @@ -1 +0,0 @@ -- The JSON branch of `/wheels/info` no longer serializes the full `getApplicationMetadata()` struct — datasource definitions (credentials), ORM settings, and arbitrary application config flowed into the response wholesale, bypassing the per-setting redaction shipped in #2909. The metadata is now reduced to a whitelisted subset (`applicationTimeout`, `mappings`, `name`, `sessionManagement`, `sessionTimeout`, `setClientCookies`) via the new `Public.$safeApplicationMetadata()` helper. Also `vendor/wheels/public/docs/core.cfm` now validates the user-controllable `format` param through the new, unit-tested `Public.$resolveDocFormat()` helper (`^[A-Za-z0-9]+$` allowlist, `html` fallback) before interpolating it into the `layouts/` include path — the same traversal class `$getRequestFormat()` was hardened against. Both surfaces are development-gated; this is defense-in-depth (#2974) diff --git a/changelog.d/eventmethods-headers-memo.performance.md b/changelog.d/eventmethods-headers-memo.performance.md deleted file mode 100644 index 0bcccdad2..000000000 --- a/changelog.d/eventmethods-headers-memo.performance.md +++ /dev/null @@ -1 +0,0 @@ -- `$runOnRequestStart` no longer re-materializes `GetHTTPRequestData()` on every request: the `request.$wheelsHeaders` memo guard checked a misspelled singular key, and headers are now reused from the `request.wheels.httpRequestData` snapshot taken at request start (#2961) diff --git a/changelog.d/expanded-associations-metadata-lock.fixed.md b/changelog.d/expanded-associations-metadata-lock.fixed.md deleted file mode 100644 index 093fb5ccb..000000000 --- a/changelog.d/expanded-associations-metadata-lock.fixed.md +++ /dev/null @@ -1 +0,0 @@ -- `$expandedAssociations()` now fills the context-independent association metadata (foreign/join keys, table name, column/property lists and structs) into the shared application-scoped association struct under the same double-checked named lock that already protects the JOIN-variant memo, so a concurrent first hit can no longer interleave partial writes; the hot path stays lock-free via a fill-once marker written last (Refs #2952) diff --git a/changelog.d/issue-2952-model-sql-layer.security.md b/changelog.d/issue-2952-model-sql-layer.security.md deleted file mode 100644 index 742dc3811..000000000 --- a/changelog.d/issue-2952-model-sql-layer.security.md +++ /dev/null @@ -1,4 +0,0 @@ -- Scope-handler arguments are no longer rewritten by a SQL-keyword denylist — values like `Union Pacific` now round-trip unchanged; quote-escaping plus the downstream `cfqueryparam` binding protect quoted interpolation contexts, and handlers can return `whereParams` for full parameterization. The escaping helper's documentation now states explicitly that unquoted interpolation (`where="age > #args.age#"`) is not made safe by escaping ([#2952](https://github.com/wheels-dev/wheels/issues/2952)) -- `findAll(select=)` items containing `;`, `--`, `/*`, or parenthesized subqueries now log a development-mode warning (SEC-21 deprecation window) — a future Wheels release will reject them; use calculated properties instead and never pass request input to `select=` ([#2952](https://github.com/wheels-dev/wheels/issues/2952)) -- The model SQL layer no longer instantiates `wheels.migrator.Migration` on every WHERE build just to read the dialect name — the new `$dialectName()` strips the `Model` suffix from the adapter name now persisted per model class at `$assignAdapter()` time, which also fixes the dialect being probed from the app default datasource for models on a custom datasource (the global `adapterName` setting is rewritten by every model class init, so it was never safe to read per model) ([#2952](https://github.com/wheels-dev/wheels/issues/2952)) -- `updateAll(include=)` WHERE building no longer splits JOIN strings on the bare `ON` token — join conditions survive identifiers containing the `ON` substring (uppercase H2 schemas), multiple includes contribute all their join conditions and tables (previously only the first include was used on PostgreSQL/H2/Oracle/SQLite), and loop counters are properly scoped ([#2952](https://github.com/wheels-dev/wheels/issues/2952)) diff --git a/changelog.d/mcp-integration-guide-tool-table.fixed.md b/changelog.d/mcp-integration-guide-tool-table.fixed.md deleted file mode 100644 index 3ad172cef..000000000 --- a/changelog.d/mcp-integration-guide-tool-table.fixed.md +++ /dev/null @@ -1 +0,0 @@ -- MCP integration guide tool table now lists all 18 exposed tools; adds `wheels_deploy` and `wheels_packages`, and the hidden-tools list now includes `g` and `main`. diff --git a/changelog.d/mcp-tool-specs-and-test-crash-exit.added.md b/changelog.d/mcp-tool-specs-and-test-crash-exit.added.md deleted file mode 100644 index a1e391279..000000000 --- a/changelog.d/mcp-tool-specs-and-test-crash-exit.added.md +++ /dev/null @@ -1 +0,0 @@ -- `mcpToolSpecs()` on the CLI module returns per-tool MCP input schemas (`test`, `seed`, `analyze`, `destroy`, `notes`, `upgrade`, `doctor`, `stats`), each built from the SAME ArgSpec the command's parser uses — extracted into shared per-command builders with property descriptions — so the CLI parse surface and the MCP `tools/list` advertisement cannot drift. Read by LuCLI per the `mcpHiddenTools()`-style optional convention (runtime support ships separately); commands still on hand-rolled parsing gain entries as #2861 migrates them. `wheels test` now also throws `Wheels.TestRunFailed` (non-zero exit) when the run crashes before producing results — previously a mid-run crash printed red but exited 0, which the post-run `Wheels.TestsFailed` gate (failing tests only) never caught (#2963). diff --git a/changelog.d/onerror-di-container-guard.fixed.md b/changelog.d/onerror-di-container-guard.fixed.md deleted file mode 100644 index 727d37b3d..000000000 --- a/changelog.d/onerror-di-container-guard.fixed.md +++ /dev/null @@ -1 +0,0 @@ -- Guarded the `onError()` DI-container fallback in `Application.cfc` (repo demo app, CLI app template, and both examples) so routine error pages no longer re-create `application.wheelsdi` and silently wipe all `config/services.cfm` registrations and cached singletons — the fresh `Injector` is now constructed only when the container never came up, and `application.wo` is rebuilt only when missing ([#3061](https://github.com/wheels-dev/wheels/issues/3061)) diff --git a/changelog.d/plugins-dir-optional.fixed.md b/changelog.d/plugins-dir-optional.fixed.md deleted file mode 100644 index 796041ec1..000000000 --- a/changelog.d/plugins-dir-optional.fixed.md +++ /dev/null @@ -1 +0,0 @@ -- The legacy `plugins/` directory is now optional. The scaffold's `Application.cfc` jar-scan and the framework plugin loader (`Plugins.cfc` `$folders()`/`$files()`) now guard their directory listing with `DirectoryExists`, so an app that has removed `plugins/` (the common case now that packages live in `vendor//`) no longer errors at startup on engines whose directory listing throws on a missing path — Lucee/Adobe tolerate a missing dir, but stricter engines (e.g. RustCFML) did not. The plugins-directory lookup is deprecated and slated for removal in the next major diff --git a/changelog.d/populate-template-loud-migration-failure.fixed.md b/changelog.d/populate-template-loud-migration-failure.fixed.md deleted file mode 100644 index d129cda55..000000000 --- a/changelog.d/populate-template-loud-migration-failure.fixed.md +++ /dev/null @@ -1 +0,0 @@ -- The scaffolded `tests/populate.cfm` (`wheels new` template) now fails the test run loudly when a migration fails. `migrateToLatest()` swallows per-migration exceptions into its returned string, so the old template — which discarded the return value — left a silently half-migrated test database; because `app-runner.cfm` only includes `populate.cfm` when the migrator-versions table is absent (it exists after the partial run), every subsequent `wheels test` ran against the broken schema with zero signal. The template now captures the migrator output, drops the migrator-versions table on failure (so the next run re-enters populate and stays loud), and throws `PopulateCfm.MigrationFailed` with the migrator output as detail — surfacing through app-runner's existing populate catch as a structured 500 (#2999) diff --git a/changelog.d/promote-included-globals-memo.performance.md b/changelog.d/promote-included-globals-memo.performance.md deleted file mode 100644 index 00e3f269d..000000000 --- a/changelog.d/promote-included-globals-memo.performance.md +++ /dev/null @@ -1 +0,0 @@ -- Memoized the `$promoteIncludedGlobalsToThis()` promote-key scan that previously ran `isCustomFunction()` over every `variables` key on every instantiation of every Global-derived component (per model row, per controller, per Plugins instance). The include-injected function set is application-lifetime-constant, so the promote-key list is now cached in application scope (keyed per scanned class surface) and invalidated structurally by `?reload=true`; contexts without an application scope fall back to the full scan ([#2897](https://github.com/wheels-dev/wheels/issues/2897) PR C). diff --git a/changelog.d/protected-methods-o1-lookup.performance.md b/changelog.d/protected-methods-o1-lookup.performance.md deleted file mode 100644 index 520c67c69..000000000 --- a/changelog.d/protected-methods-o1-lookup.performance.md +++ /dev/null @@ -1 +0,0 @@ -- The per-request action-dispatch gate now tests the protected-helper list with an O(1) `StructKeyExists` lookup instead of an O(n) `ListFindNoCase` scan over the ~100-250 framework helper names. A companion `application.wheels.protectedControllerMethodsLookup` struct-as-set is built once at application start alongside the existing comma-list (which is retained); case-insensitive matching is unchanged (#3210) diff --git a/changelog.d/ratelimiter-memory-store.fixed.md b/changelog.d/ratelimiter-memory-store.fixed.md deleted file mode 100644 index 1544d33e8..000000000 --- a/changelog.d/ratelimiter-memory-store.fixed.md +++ /dev/null @@ -1 +0,0 @@ -- The `RateLimiter` middleware's memory storage no longer races or stalls under high key cardinality (#2971). Emergency eviction is now double-checked under the same named maintenance lock the periodic cleanup uses — previously `handle()` called the evictor unguarded, so concurrent requests that all saw a full store each purged their own 25% headroom. The eviction's second pass replaces the full-store closure-comparator sort (O(n log n) on the unlucky request thread, at exactly the moment the store is largest) with Redis-style bounded random sampling that still prefers idle entries. The periodic cleanup scan is capped per pass (1000 keys) with a rotating cursor so successive passes cover the whole store instead of one request paying a full scan (#2971) diff --git a/changelog.d/rendering-includefile-logged-column-default.fixed.md b/changelog.d/rendering-includefile-logged-column-default.fixed.md deleted file mode 100644 index 02cf5fecd..000000000 --- a/changelog.d/rendering-includefile-logged-column-default.fixed.md +++ /dev/null @@ -1 +0,0 @@ -- Rendering a partial with a query no longer silently swallows unreadable column values: the blanket `catch` in `$includeFile()` that blanked a column it could not read now logs a warning to the `wheels` log (once per column per render) naming the column, partial, first failing row, and the underlying error before defaulting the value to an empty string (#2961) diff --git a/changelog.d/rendering-statuscodes-memo-columnlist-hoist.performance.md b/changelog.d/rendering-statuscodes-memo-columnlist-hoist.performance.md deleted file mode 100644 index b38f43dd6..000000000 --- a/changelog.d/rendering-statuscodes-memo-columnlist-hoist.performance.md +++ /dev/null @@ -1,2 +0,0 @@ -- `$getStatusCodes()` no longer rebuilds its 63-entry HTTP status map on every render: the map is memoized in the application scope together with a deterministic reverse (text-to-code) lookup, so `$returnStatusCode("Not Found")` is a struct-key hit instead of a `StructFindValue` scan over a freshly rebuilt struct, and a duplicated status text (e.g. "Unassigned" at 427/430/509) now always resolves to the lowest matching code (#2961) -- `$includeFile()` tokenizes the query column list once per partial render instead of re-running `ListToArray(query.columnList)` on every row of both per-row loops (#2961) diff --git a/changelog.d/renderwith-json-coercion.fixed.md b/changelog.d/renderwith-json-coercion.fixed.md deleted file mode 100644 index 0f07697a7..000000000 --- a/changelog.d/renderwith-json-coercion.fixed.md +++ /dev/null @@ -1 +0,0 @@ -- `renderWith()` JSON type coercion no longer strips legitimate BEL (`Chr(7)`) bytes from data values (only the quote-adjacent marker bytes it inserts itself, raw or JSON-escaped, are removed — fixing string coercion on engines such as Lucee 7 that escape control characters during `SerializeJSON`), coerces `integer` directives pre-serialization via `JavaCast("long", ...)` instead of regex-editing the serialized payload (nested same-named keys are left untouched), skips rows that don't contain the directive key instead of throwing, and derives its parameter-exclusion list from function metadata so the `status` argument can no longer leak into the coercion-directive set ([#2961](https://github.com/wheels-dev/wheels/issues/2961)) diff --git a/changelog.d/request-start-plugins-guard-hoist.performance.md b/changelog.d/request-start-plugins-guard-hoist.performance.md deleted file mode 100644 index 80a86d101..000000000 --- a/changelog.d/request-start-plugins-guard-hoist.performance.md +++ /dev/null @@ -1 +0,0 @@ -- Mixin-free apps no longer pay a throwaway `wheels.Plugins` (plus its `wheels.Global` pseudo-constructor) instantiation on every request: `$runOnRequestStart` now constructs the instance only inside the `!StructIsEmpty(application.wheels.mixins)` guard where it is used (issue [#2897](https://github.com/wheels-dev/wheels/issues/2897), Stage 3 quick win). diff --git a/changelog.d/reviewer-nit-sweep.fixed.md b/changelog.d/reviewer-nit-sweep.fixed.md deleted file mode 100644 index b7096d7a8..000000000 --- a/changelog.d/reviewer-nit-sweep.fixed.md +++ /dev/null @@ -1 +0,0 @@ -- Reviewer-nit sweep from the 2026-06 remediation campaign (#2977). Behavior fixes: conditional validations with uppercase word-form operators (`condition="1 EQ 0"`) no longer throw on Adobe CF (`$evaluateLogicalExpression` now lowercases the operator); the `/wheels/cli` mutation gate reads the reload password from the form scope ONLY, so a `?password=...` query string can no longer satisfy the gate while logging the password in access logs; `dbRollback` over the `/wheels/cli` bridge counts applied migrations by tracked `status` instead of the `version <= current` heuristic, so peer-applied versions on a shared dev database no longer skew `steps=N`; the CLI's three HTTP bridge helpers guard against `getErrorStream()` returning Java null on bodiless 4xx/5xx responses (was an NPE surfacing as a useless "null" error); the migrator's per-request column cache keys on the verbatim table name (case-folding let `Authors`/`authors` share a slot on case-sensitive databases); `$getForeignKeys()` throws `Wheels.Migrator.MissingAdapter` instead of silently interpolating an unquoted table name when the adapter is missing; and the dead ISO-date fallback branch in `$convertToString` uses real `\d` regex escapes. Plus assorted stale-docblock/comment updates (#2903 references, `renderWith`/`onlyProvides` enforcement notes, debug-panel guide note) and spec backfills (`waitForText` timeout surface, `$get()` without `request.wheels`, typed-column outlier defaults, conditional spec-state restore) (#2977) diff --git a/changelog.d/route-tester-xss-and-scan.fixed.md b/changelog.d/route-tester-xss-and-scan.fixed.md deleted file mode 100644 index 8cd717bf0..000000000 --- a/changelog.d/route-tester-xss-and-scan.fixed.md +++ /dev/null @@ -1 +0,0 @@ -- The dev route tester's verb-mismatch error message now HTML-encodes the user-supplied path (`EncodeForHTML`), closing a reflected-XSS sink rendered by `routetester.cfm` / `routetesterprocess.cfm` — the sibling 404 branch already encoded it. The alternative-verbs scan (a second full pass over the route table, including lazy `.regex` writes onto application-scope route structs) now runs only in the no-match branch instead of on every invocation, matching `Dispatch.cfc`'s structure (#2961) diff --git a/changelog.d/router-named-capture-groups.fixed.md b/changelog.d/router-named-capture-groups.fixed.md deleted file mode 100644 index ca4795c1e..000000000 --- a/changelog.d/router-named-capture-groups.fixed.md +++ /dev/null @@ -1 +0,0 @@ -- Route constraints containing a Java named capture group (`whereMatch("year", "(?20\d{2})")`) no longer corrupt route matching. `$nonCapturingConstraint` now normalizes the whole `(?` opener to `(?:`, the same treatment anonymous capturing groups already receive — previously a named group both shifted every subsequent route variable's value in `$mergeRoutePattern`'s positional extraction (java-regex engines) and threw `Sequence (?<...) not recognized` at match time (legacy-regex engines). Lookbehinds (`(?<=`, `(?`) fails fast at draw time via `$compileRegex` (#2976) diff --git a/changelog.d/schema-column-cache.performance.md b/changelog.d/schema-column-cache.performance.md deleted file mode 100644 index 4f27aae46..000000000 --- a/changelog.d/schema-column-cache.performance.md +++ /dev/null @@ -1 +0,0 @@ -- Database column metadata is now memoized per datasource+table in `application.wheels.schemaColumnCache` when `cacheDatabaseSchema` is on (the default). Previously every model class init issued a fresh `cfdbinfo type="columns"` JDBC catalog round-trip — a significant first-request cost on remote or wide-schema databases, re-paid on every reload and for every model sharing a table. The cache is rebuilt on reload, so schema changes are still picked up on reload (the same contract as the model and controller config caches) (#3210) diff --git a/changelog.d/seeder-partial-failure.fixed.md b/changelog.d/seeder-partial-failure.fixed.md deleted file mode 100644 index 1d6d238ad..000000000 --- a/changelog.d/seeder-partial-failure.fixed.md +++ /dev/null @@ -1 +0,0 @@ -- `Seeder.runSeeds()` no longer reports success and commits when individual `seedOnce()` entries failed validation. Failed entries are now counted (`totalFailed` in the result struct and the `/wheels/cli` dbSeed envelope), named in the failure message, and the entire run is rolled back — `seedOnce()` is idempotent, so a corrected rerun re-applies everything, whereas a silently half-committed run looked identical to a fully-applied one in CI and `wheels seed` output. Because the dev-UI bridge already maps `success=false` to `Wheels.Cli.CommandFailed`, `wheels seed` now exits non-zero when any entry fails (#2973) diff --git a/changelog.d/struct-enum-validation-mismatch.fixed.md b/changelog.d/struct-enum-validation-mismatch.fixed.md deleted file mode 100644 index aee745614..000000000 --- a/changelog.d/struct-enum-validation-mismatch.fixed.md +++ /dev/null @@ -1 +0,0 @@ -- Struct-form `enum(property=..., values={name: storedValue})` now validates against the stored values rather than the name keys, so rows that satisfy the auto-generated scopes and `is()` checkers also pass `valid()` (#3014) diff --git a/changelog.d/subpath-setting.added.md b/changelog.d/subpath-setting.added.md deleted file mode 100644 index a9a48442e..000000000 --- a/changelog.d/subpath-setting.added.md +++ /dev/null @@ -1 +0,0 @@ -- `set(subpath="/wheelsproject1")` (or the `WHEELS_SUBPATH` environment variable) now overrides the `cgi.script_name`-derived `webPath` / `rootPath` / `rootcomponentPath` / `wheelsComponentPath` so apps deployed under a URL subpath — CommandBox single-site → IIS subfolder migrations, reverse proxies that fold `/public/` out of the URL, generally any deployment where `cgi.script_name` does not match the public mount point — no longer need to hand-patch `application.$wheels.webPath` after each framework upgrade. Detection priority: explicit `set(subpath=...)` in `config/settings.cfm` wins; otherwise `server.system.environment.WHEELS_SUBPATH` is consulted; otherwise the legacy `cgi.script_name` derivation runs unchanged so existing root-install behavior is preserved. Path derivation is extracted into a pure, unit-testable helper `$resolveFrameworkPaths()` on `wheels.Global`. Subpath input is normalized (leading slash added, trailing slashes stripped, `"/"` treated as a root install) and the helper uses only cross-engine-safe primitives (`Replace`, `ListChangeDelims`, `Right`/`Left` with the Lucee 7 `Left(str, 0)` guard). (#2968) diff --git a/changelog.d/trust-proxy-headers.security.md b/changelog.d/trust-proxy-headers.security.md deleted file mode 100644 index 6e22c9425..000000000 --- a/changelog.d/trust-proxy-headers.security.md +++ /dev/null @@ -1 +0,0 @@ -- Added a framework-level `trustProxyHeaders` setting (default `false`) governing `X-Forwarded-*` trust: `isSecure()` no longer honors a client-supplied `X-Forwarded-Proto: https`, maintenance-mode `ipExceptions` match the socket address (or the rightmost `X-Forwarded-For` hop when trust is on), and the reload rate-limit key uses the trusted client IP. The `?except=` URL parameter can no longer rewrite the maintenance exception list. Apps behind a TLS-terminating reverse proxy must `set(trustProxyHeaders=true)` and ensure the proxy overwrites — never appends to — forwarded headers (#2953) diff --git a/changelog.d/upgrade-apply-mode.added.md b/changelog.d/upgrade-apply-mode.added.md deleted file mode 100644 index 64da3ee2f..000000000 --- a/changelog.d/upgrade-apply-mode.added.md +++ /dev/null @@ -1 +0,0 @@ -- `wheels upgrade apply` performs the framework swap: it replaces the app's `vendor/wheels/` with the framework bundled in the installed CLI, announcing the exact backup destination (`vendor/wheels.bak-/`) and the one-line recovery command before touching anything (`--nobackup` opts out; a mid-copy failure throws `Wheels.FrameworkUpgrader.CopyFailed` naming the backup to restore from). Bare `wheels upgrade` prints usage and never modifies files — destructive commands require the explicit verb, so MCP clients calling `wheels_upgrade` with `{}` can never trigger the swap. Safety rails fire before any mutation: refuses outside a Wheels app, when source or target doesn't sniff as a real framework directory (`wheels.json`/`box.json` must carry a non-empty version identifying Wheels — a generic app `box.json` is rejected), when source and target resolve to the same directory (e.g. inside the wheels repo checkout), on unknown flags/subcommands, and when `--to=` doesn't match the bundled framework version — downloading arbitrary `--to=` targets is the planned follow-up. `wheels upgrade check` keeps the read-only scan unchanged (including `--strict`, `--format=json`, and the non-zero-exit contract); its closing hint now points at `wheels upgrade apply` instead of `brew upgrade wheels`, which only ever upgraded the CLI binary ([#3035](https://github.com/wheels-dev/wheels/issues/3035)) diff --git a/tools/changelog-promote.sh b/tools/changelog-promote.sh index 83ba27cac..56b8f6b2e 100755 --- a/tools/changelog-promote.sh +++ b/tools/changelog-promote.sh @@ -5,8 +5,10 @@ # tools/changelog-promote.sh --preview # print assembled sections, change nothing # tools/changelog-promote.sh [date] # promote: merge fragments + current # # [Unreleased] body into a new -# # "## [] - " section, -# # reset [Unreleased], delete fragments +# # "# [](tag-url) => " +# # section (the format release.yml's +# # awk extraction expects), reset +# # [Unreleased], delete fragments # # Promotion only edits files — review the diff and commit yourself. The # script refuses to promote when there is nothing to promote, and fails @@ -90,7 +92,14 @@ def parse_unreleased(text): fail("CHANGELOG.md has no '## [Unreleased]' section") head = text[: match.end()] rest = text[match.end():] - next_heading = re.search(r"(?m)^## ", rest) + # Version sections in this changelog use a SINGLE '#' (e.g. + # "# [4.0.3](...) => date"); [Unreleased] and some legacy 1.x entries use + # '##', and old sections contain '## ' subheadings (e.g. "## Detailed + # Changes"). Match the next VERSION heading at either level ("#"/"##" + # followed by " [") so the tail begins at the previous release — not at a + # '## ' subheading buried inside an old section (which would pull every + # release since into the promoted body). + next_heading = re.search(r"(?m)^#{1,2} \[", rest) body = rest[: next_heading.start()] if next_heading else rest tail = rest[next_heading.start():] if next_heading else "" @@ -100,6 +109,12 @@ def parse_unreleased(text): sections = [] current = (None, []) for line in body.splitlines(): + # Drop horizontal-rule separators ('---' / '----') left in the + # [Unreleased] body — the promote step re-emits its own '---' separators + # around the new section, and a stray rule promoted as content would + # break release.yml's awk '/^# [VERSION]/,/^---$/' notes extraction. + if re.fullmatch(r"-{3,}", line.strip()): + continue if line.startswith("### "): if current[0] is not None or any(l.strip() for l in current[1]): sections.append(current) @@ -112,24 +127,51 @@ def parse_unreleased(text): def merged_sections(existing, fragments): - """Merge fragment bullets into the existing Unreleased sections.""" - out = [] - seen = set() + """Combine existing [Unreleased] bullets with fragment bullets into ONE + section per heading, emitted in CANONICAL order. + + The [Unreleased] body can accumulate the same heading more than once (e.g. + two separate '### Performance' blocks added by different PRs over a cycle); + consolidating per-heading keeps the released section from carrying duplicate + or out-of-order headings into the public release notes. Within a heading, + existing bullets (which predate the fragments) come first, then fragment + bullets. Headings outside CANONICAL are preserved after the canonical ones + in first-seen order so nothing is silently dropped.""" + combined = {} # heading -> [bullets] + extra_order = [] # non-canonical headings, first-seen order + prose = [] # heading=None prose (rare) + + def add(heading, lines): + bullets = [l for l in lines if l.strip()] + if not bullets: + return + if heading not in combined: + combined[heading] = [] + if heading not in CANONICAL: + extra_order.append(heading) + combined[heading].extend(bullets) + for heading, lines in existing: if heading is None: - # Prose before the first ### heading (rare) — keep as-is. - out.append((heading, [l for l in lines if l.strip()])) - continue - bullets = [l for l in lines if l.strip()] + prose.extend(l for l in lines if l.strip()) + else: + add(heading, lines) + for heading in CANONICAL: if heading in fragments: - bullets.extend(fragments[heading]) - out.append((heading, bullets)) - seen.add(heading) + add(heading, fragments[heading]) + for heading in fragments: # defensive: read_fragments validates + if heading not in CANONICAL: # types, so this normally never fires + add(heading, fragments[heading]) + + out = [] + if prose: + out.append((None, prose)) for heading in CANONICAL: - if heading in fragments and heading not in seen: - out.append((heading, list(fragments[heading]))) - # Drop empty sections. - return [(h, b) for h, b in out if b] + if heading in combined: + out.append((heading, combined[heading])) + for heading in extra_order: + out.append((heading, combined[heading])) + return out def render(sections): @@ -178,8 +220,18 @@ if not merged: fail("nothing to promote: no fragments and [Unreleased] is empty") new_unreleased = f"\n{MARKER}\n\n" -version_section = f"## [{version}] - {date}\n\n{render(merged)}\n" -CHANGELOG.write_text(head + new_unreleased + version_section + tail, encoding="utf-8") +# Match the established section format: a single '#' heading that links to the +# release tag and uses ' => ' before the date — every prior release uses this, +# and release.yml builds the GitHub Release notes with +# awk '/^# \[VERSION\]/,/^---$/' (single hash, terminated by exactly '---'). +tag_url = f"https://github.com/wheels-dev/wheels/releases/tag/v{version}" +version_section = f"# [{version}]({tag_url}) => {date}\n\n{render(merged)}\n" +# Emit explicit '---' (three-dash) separators around the new section: one +# between [Unreleased] and it, one between it and the previous release (tail). +# A '----' (four-dash) rule would silently extend release.yml's awk range into +# the previous version's notes (the recurring #2606 / #2768 footgun). +sep = "---\n\n" +CHANGELOG.write_text(head + new_unreleased + sep + version_section + sep + tail, encoding="utf-8") removed = [] for path in sorted(FRAG_DIR.glob("*.md")): @@ -187,7 +239,7 @@ for path in sorted(FRAG_DIR.glob("*.md")): path.unlink() removed.append(path.name) -print(f"[{version}] - {date} now carries {sum(len(b) for _, b in merged)} entries (fragments + prior [Unreleased] content).") +print(f"[{version}] => {date} now carries {sum(len(b) for _, b in merged)} entries (fragments + prior [Unreleased] content).") print(f"Removed {len(removed)} fragment(s): {', '.join(removed) if removed else '(none)'}") print("Review the CHANGELOG.md diff, then commit.") PYEOF diff --git a/tools/test-changelog-promote.sh b/tools/test-changelog-promote.sh index df881d48c..7511033a1 100755 --- a/tools/test-changelog-promote.sh +++ b/tools/test-changelog-promote.sh @@ -87,10 +87,10 @@ else bad "promote exited $rc:" sed 's/^/ /' "$tmp/perr" fi -if grep -q '## \[1.2.3\] - 2026-01-01' "$tmp/CHANGELOG.md"; then - ok "promote wrote the '## [1.2.3] - 2026-01-01' section" +if grep -qE '^# \[1\.2\.3\]\(https://github.com/wheels-dev/wheels/releases/tag/v1\.2\.3\) => 2026-01-01$' "$tmp/CHANGELOG.md"; then + ok "promote wrote the '# [1.2.3](tag) => 2026-01-01' section" else - bad "CHANGELOG.md is missing the promoted version section" + bad "CHANGELOG.md is missing the promoted version section (expected single-hash, tag-linked, '=>' header)" fi if [ ! -e "$tmp/changelog.d/big.fixed.md" ]; then ok "promote deleted the fragment" @@ -103,4 +103,57 @@ else bad "promote summary missing 'Removed 1 fragment'" fi +# Test 5: consolidation — a heading that appears twice in [Unreleased] plus a +# matching fragment must collapse into ONE section in canonical order, with no +# duplicated bullets. Regression for the double-append bug merged_sections +# fixes (the 4.0.4 cut promoted two '### Performance' blocks with the +# performance fragments double-counted across both). +tmp5="$(mktemp -d)"; tmpdirs+=("$tmp5") +mkdir -p "$tmp5/tools" "$tmp5/changelog.d" +cp "$TOOLS_DIR/changelog-promote.sh" "$tmp5/tools/" +cat >"$tmp5/CHANGELOG.md" <<'EOF' +# Changelog + +## [Unreleased] + +### Performance + +- perf block one (#2) + +### Added + +- an added entry (#1) + +### Performance + +- perf block two (#3) + +# [0.0.1](https://github.com/wheels-dev/wheels/releases/tag/v0.0.1) => 2020-01-01 + +### Fixed + +- baseline (#0) +EOF +printf -- '- perf from fragment (#4)\n' >"$tmp5/changelog.d/speed.performance.md" +( cd "$tmp5" && bash tools/changelog-promote.sh 2.0.0 2026-02-02 ) >/dev/null 2>"$tmp5/err" +# Isolate the promoted [2.0.0] section (up to the next version heading). +sec="$(awk '/^# \[2\.0\.0\]/{f=1;next} f && /^#{1,2} \[[0-9]/{exit} f' "$tmp5/CHANGELOG.md")" +nperf="$(printf '%s\n' "$sec" | grep -cE '^### Performance$')" +if [ "$nperf" -eq 1 ]; then + ok "consolidation: two [Unreleased] '### Performance' blocks collapse to one heading" +else + bad "consolidation: expected 1 '### Performance' heading, found $nperf" +fi +dupes=0 +for b in 'perf block one (#2)' 'perf block two (#3)' 'perf from fragment (#4)' 'an added entry (#1)'; do + c="$(printf '%s\n' "$sec" | grep -Fc "$b")" + [ "$c" -eq 1 ] || { dupes=1; bad "consolidation: '$b' appears $c times in the section (expected exactly 1)"; } +done +[ "$dupes" -eq 0 ] && ok "consolidation: existing + fragment bullets each appear exactly once (no double-count)" +if printf '%s\n' "$sec" | awk '/^### Added$/{a=NR} /^### Performance$/{p=NR} END{exit !(a && p && a < p)}'; then + ok "consolidation: canonical order (Added before Performance)" +else + bad "consolidation: sections not in canonical order (Added must precede Performance)" +fi + exit $fail