Skip to content

Commit 9beb102

Browse files
bpamiriclaude
andauthored
fix(component): drop mixin="controller" attr that breaks Lucee 7 fresh-install load (#4)
Lucee 7.0.0.395 enforces native trait composition on `component mixin="..."` and tries to resolve `controller` as a CFML component path. On a clean install with empty Lucee class caches, that resolution fails and the entire CFC bombs out with the misleading error `invalid component definition, can't find component [vendor.wheels-basecoat.Basecoat]`. Net effect on a fresh `wheels packages add wheels-basecoat`: `application.wheels.failedPackages` carries the package, every helper call (`uiCard`, `uiField`, `uiButton`, etc.) blows up with `No matching function [...] found`, and the bonus chapter is unreachable. Cached-class reproductions appeared to load fine, which masked the bug during 1.0.2 and 1.0.3 release testing. The 1.0.3 changelog explicitly (and wrongly) called the attribute a no-op based on cached-state testing. The authoritative source for the mixin target is `provides.mixins: "controller"` in `package.json`, which `PackageLoader` already reads. The component-level attribute is redundant and now also actively breaks Lucee 7. Drop it. Verified end-to-end on a fresh VM: stop server, remove vendor/wheels-basecoat, clear lucee-server/context/cfclasses/*, run `wheels packages add wheels-basecoat`, cold restart. Without this fix: failedPackages non-empty. With it: application.wheels.packages.wheels-basecoat populated and all 57 helpers resolve. Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent 70f6657 commit 9beb102

4 files changed

Lines changed: 11 additions & 3 deletions

File tree

Basecoat.cfc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
* Generates shadcn/ui-quality HTML using Basecoat CSS classes.
55
* Works with or without wheels-hotwire.
66
*/
7-
component mixin="controller" output="false" {
7+
component output="false" {
88

99
function init() {
1010
this.version = "3.0";

CHANGELOG.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,14 @@
22

33
All notable changes to this package will be documented in this file.
44

5+
## [1.0.4] — 2026-04-30
6+
7+
### Fixed
8+
- Drop `mixin="controller"` from the `Basecoat.cfc` component declaration. The 1.0.3 changelog claimed this attribute was a no-op — that was wrong. Lucee 7.0.0.395 enforces native trait composition on `component mixin="..."` and tries to resolve `controller` as a CFML component path; on a clean install with empty Lucee class caches, that resolution fails and the whole component bombs out with the misleading error `invalid component definition, can't find component [vendor.wheels-basecoat.Basecoat]`. Net effect on a fresh `wheels packages add wheels-basecoat`: `application.wheels.failedPackages` carries the package, every helper call (`uiCard`, `uiField`, `uiButton`, etc.) blows up with `No matching function [...] found`, and the bonus chapter is unreachable. Cached-class reproductions appeared to load the package fine, which masked the bug during 1.0.2/1.0.3 release testing. The authoritative source for the mixin target is the `provides.mixins: "controller"` field in `package.json`, which `PackageLoader` already reads — the component-level attribute is genuinely redundant and now also actively breaks Lucee 7. (Verified end-to-end on a fresh VM with `wheels stop && rm -rf vendor/wheels-basecoat ~/.wheels/servers/<app>/lucee-server/context/cfclasses/* && wheels packages add wheels-basecoat && wheels start` — without this fix, `application.wheels.failedPackages` is non-empty; with it, `application.wheels.packages.wheels-basecoat` is populated and all 57 helpers resolve.)
9+
10+
### Retraction
11+
- The 1.0.3 changelog included a "Note on the 1.0.2 changelog" stating that the `mixin="controller"` attribute compiles fine on Lucee 7.0.0.395 and is a no-op. That note was based on testing against a Lucee class cache that already had the package compiled — the actual fresh-install behavior is the failure described above. The 1.0.2 changelog's original diagnosis (Lucee 7 rejecting the `mixin` attribute) was directionally correct; what was wrong was its claim that 1.0.2 "fixed" it by removing only `view` from the comma list. Removing `controller` was also required, and is what 1.0.4 does.
12+
513
## [1.0.3] — 2026-04-29
614

715
### Fixed

box.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "wheels-basecoat",
33
"slug": "wheels-basecoat",
4-
"version": "1.0.3",
4+
"version": "1.0.4",
55
"author": "Wheels Core Team",
66
"homepage": "https://wheels.dev",
77
"repository": {

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "wheels-basecoat",
3-
"version": "1.0.3",
3+
"version": "1.0.4",
44
"author": "Wheels Core Team",
55
"description": "Basecoat UI component helpers for Wheels. shadcn/ui-quality design using plain HTML + Tailwind CSS. No React required.",
66
"wheelsVersion": ">=4.0",

0 commit comments

Comments
 (0)