You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
U1: wheels upgrade check now throws Wheels.UpgradeCheckFailed after the
report flushes when breaking findings exist (mirrors validate()'s
Wheels.ValidationFailed), so it exits non-zero and can gate CI. Adds
--format=json for a machine-readable report; advisories never affect
the exit code.
U4: breaker scan covers the canonical eleven — the WireBox check now
matches wirebox.system.ioc and scans the root Application.cfc + config/
in addition to app/; new breaking grep for removed renderPage()/
renderPageToString(); new advisories for the HSTS default flip
(SecurityHeaders, #2081) and the CSRF SameSite cookie attribute
(protectsFromForgery, #2035). UpgradeCheckCoverageSpec pins the full
set plus the exit-code throw and --format=json plumbing.
U5: wheels.Testbox shim now documented with a 5.0 removal target (CFC
docblock + 3x-to-4x guide), mapperModernSpec migrated off it to
wheels.WheelsTest, and the upgrade-check test-base-class grep matches
wheels.Testbox and single-quoted extends forms.
U7: renamed the scanTargets loop var that shadowed the target-version
local; fixed the dead 2.x->3.x app/plugins check to the real root
plugins/ path (skipped on 2.x->4.x jumps where the 4.x entry covers
it); breaking-finding output now links the version-appropriate upgrade
guide and the wheels-legacy-adapter soft landing; new in-repo
regression spec for wheels-legacy-adapter registry resolution.
CLI-D5: structuredArgs() now consumes __arguments once (cleared on
every call), so a delegation stash (create/generate app -> new) can
never replay stale argv into a later zero-arg tool call under the
persistent stdio MCP server.
CLI-D1: ArgSpec.parse()/toArgv() bind positionals by collecting and
numerically sorting arg<N> keys (parseTestArgs' proven pattern) instead
of fixed-index probing / stop-at-gap loops. LuCLI numbers positionals
by global token index, so a flag between positionals leaves a gap —
'wheels new --port=3000 blog' previously ignored the app name and
threw, and 'wheels g scaffold Post --force title:string body:text'
silently dropped every column after the flag.
Verified locally (Lucee 7 + SQLite, worktree docker recipe): core cli
specs 78/78, mapperModernSpec 27/27, CLI suite 774 pass with only the
pre-existing environment-dependent SSH/live-server failures.
Signed-off-by: Peter Amiri <peter@alurium.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
fix:"Use service() / application.wheelsdi instead of application.wirebox; replace `new wirebox.system.ioc.Injector(...)` bootstraps with `new wheels.Injector()`. The legacy adapter does NOT shim this item."
4186
+
});
4187
+
// renderPage()/renderPageToString() removed in 4.0 — shimmed by
4188
+
// the optional wheels-legacy-adapter package, but unshimmed apps
fix:"Use service() or inject() from the DI container instead"
4196
+
fix:'Replace renderPage() with renderView() and renderPageToString() with renderView(returnAs="string"), or install the soft-landing shim: wheels packages add wheels-legacy-adapter'
4197
+
});
4198
+
// HSTS defaults on in production (guide item 2, ##2081). Advisory:
4199
+
// fires on SecurityHeaders usage so proxied/LB setups know the
4200
+
// header now emits by default.
4201
+
arrayAppend(checks, {
4202
+
description:"SecurityHeaders middleware — HSTS defaults on in production in 4.0 (advisory)",
fix:"4.0 emits Strict-Transport-Security (max-age=31536000; includeSubDomains) by default in production. Pass hsts=false to the middleware if your load balancer already sets it."
// fires on CSRF protection usage — same-site flows are unaffected,
4212
+
// but cross-site POSTs from third-party frames will break.
4213
+
arrayAppend(checks, {
4214
+
description:"CSRF cookie sets SameSite in 4.0 (advisory: review cross-site POST flows)",
4215
+
severity:"advisory",
4216
+
pattern:"protectsFromForgery",
4217
+
checkType:"grep",
4218
+
scanDir:"app",
4219
+
extensions:"cfc",
4220
+
fix:"The CSRF cookie now sets the SameSite attribute. Cross-site POSTs from third-party frames that relied on the missing attribute will break; same-site app flows are unaffected."
4138
4221
});
4139
4222
// CORS default flip — wildcard "*" → deny-all (#2039). A bare
4140
4223
// `new wheels.middleware.Cors()` accepts no requests in 4.0.
0 commit comments