Follow-up from #2247 / #2256.
Background
Both package CLAUDE.md files claim the package loader injects methods into the view scope directly:
packages/basecoat/CLAUDE.md: "Wheels injects every public method into controller and view scopes via PackageLoader."
packages/hotwire/CLAUDE.md: "the main CFC (Hotwire.cfc) contains init() and all public methods, which Wheels injects into controller and view scopes via PackageLoader."
Neither statement is accurate — view is not in variables.mixableComponents, and #2247 now rejects it with a clear error. Helpers are callable in views, but only because Wheels views execute in the controller's variables scope, so controller mixins surface transitively.
Fix
Acceptance
- No package-internal doc claims there is a
view mixin target.
- The explanation of how helpers become available in views describes the controller-scope inheritance, not a direct view mixin.
Out of scope
No code changes — documentation only.
Follow-up from #2247 / #2256.
Background
Both package CLAUDE.md files claim the package loader injects methods into the view scope directly:
packages/basecoat/CLAUDE.md: "Wheels injects every public method into controller and view scopes via PackageLoader."packages/hotwire/CLAUDE.md: "the main CFC (Hotwire.cfc) contains init() and all public methods, which Wheels injects into controller and view scopes via PackageLoader."Neither statement is accurate —
viewis not invariables.mixableComponents, and #2247 now rejects it with a clear error. Helpers are callable in views, but only because Wheels views execute in the controller's variables scope, so controller mixins surface transitively.Fix
packages/basecoat/CLAUDE.mdto state controller mixins surface in views via the controller scope.packages/hotwire/CLAUDE.mdwith the same correction.packages/basecoat/.ai/ARCHITECTURE.mdandpackages/hotwire/.ai/ARCHITECTURE.mdfor the same inaccuracy.Acceptance
viewmixin target.Out of scope
No code changes — documentation only.