Follow-up noticed while working on #2215.
Context
wheels and lucli are the same binary renamed. When invoked as wheels, LuCLI reads modules from ~/.wheels/modules/ (not ~/.lucli/modules/). If ~/.wheels/modules/wheels/ is a real directory holding an installed copy of Module.cfc (rather than a symlink to the source checkout), a merged fix in the source repo will not take effect for the wheels CLI on that machine.
This happened locally during #2222: the #2216 fix for framework-not-found exit codes was merged, but wheels kept exit-0ing because ~/.wheels/modules/wheels/Module.cfc was a pre-#2216 copy.
Why this is footgun-class
- Symptoms look like "the fix didn't land" — a contributor debugging a CI-green PR locally gets exit-0 behavior that contradicts the merged code.
- No error is surfaced; the stale module just runs.
- Easy to miss because
~/.wheels/modules/wheels/ has no visible "installed version" marker that tracks repo state.
Proposed check
Add a new category to cli/lucli/services/Doctor.cfc (or a new CLI-scoped sibling):
Open questions
- Where does the divergence check live? The existing
Doctor service is project-scoped (migrations, config, db). This check is CLI-install-scoped. Options:
- New category inside
Doctor.cfc — keeps one entry point but muddies the service's purpose.
- New
wheels doctor --cli subcommand or new wheels install status command — cleaner separation.
- Should
wheels modules install wheels (if that's the install path) ever create a symlink automatically when run from inside a source checkout? Would obviate most of this, but could surprise users who want the installed copy pinned.
Related
Follow-up noticed while working on #2215.
Context
wheelsandlucliare the same binary renamed. When invoked aswheels, LuCLI reads modules from~/.wheels/modules/(not~/.lucli/modules/). If~/.wheels/modules/wheels/is a real directory holding an installed copy ofModule.cfc(rather than a symlink to the source checkout), a merged fix in the source repo will not take effect for thewheelsCLI on that machine.This happened locally during #2222: the #2216 fix for framework-not-found exit codes was merged, but
wheelskept exit-0ing because~/.wheels/modules/wheels/Module.cfcwas a pre-#2216 copy.Why this is footgun-class
~/.wheels/modules/wheels/has no visible "installed version" marker that tracks repo state.Proposed check
Add a new category to
cli/lucli/services/Doctor.cfc(or a new CLI-scoped sibling):cli/lucli/Module.cfcandvendor/wheels/).~/.wheels/modules/wheels/Module.cfcagainst the checkout'scli/lucli/Module.cfc:~/.wheels/modules/wheels/diverges from your source checkout. CLI changes you make tocli/lucli/won't take effect until you reinstall or symlink."Open questions
Doctorservice is project-scoped (migrations, config, db). This check is CLI-install-scoped. Options:Doctor.cfc— keeps one entry point but muddies the service's purpose.wheels doctor --clisubcommand or newwheels install statuscommand — cleaner separation.wheels modules install wheels(if that's the install path) ever create a symlink automatically when run from inside a source checkout? Would obviate most of this, but could surprise users who want the installed copy pinned.Related