Problem
The ForgeBox/CommandBox install path (box install wheels-base-template → box server start) was published but broken end to end, and the breakage went undetected for weeks because nothing in CI exercises the built packages the way a CommandBox user installs them. ForgeBox publishing is stable-only and asynchronous, so a packaging regression only surfaces in production long after the offending commit lands.
The path-repair campaign fixed the underlying defects:
These are all easy to silently re-break: a placeholder reintroduced into a config override, a db/ exclude added back, a prepare script re-pointed at the demo app.
The durability net
Add a CI leg that builds the base + core packages from the tree (tools/build/scripts/prepare-base.sh + prepare-core.sh), installs them into a CommandBox container the way box install lands them, boots, and asserts the install→serve journey:
- server starts with no manual edits
GET / is 200
/wheels/info is 200 in development
- clean URLs work
db/ ships
tools/ci/smoke-env.sh passes its reload-gate / no-trace probes in production
Gated on tools/build/**, cli/lucli/templates/app/**, tools/ci/smoke-env.sh, and the workflow file itself.
Acceptance
- A regression in any of the four campaign fixes turns this leg red on the offending PR (verified locally: the unfixed
develop artifact exits 1 with "Invalid slug detected" and the connectivity probe fails; the keystone-composed tree passes all six smoke-env.sh probes plus the dev journey).
Refs #3173, #3174, #3176, #3177.
Problem
The ForgeBox/CommandBox install path (
box install wheels-base-template→box server start) was published but broken end to end, and the breakage went undetected for weeks because nothing in CI exercises the built packages the way a CommandBox user installs them. ForgeBox publishing is stable-only and asynchronous, so a packaging regression only surfaces in production long after the offending commit lands.The path-repair campaign fixed the underlying defects:
wheels newtemplate (single source of truth) #3176 — regenerate the base template fromcli/lucli/templates/app/(single source of truth)box server startfails out of the box #3173 — substitute|placeholders|/{{tokens}}to working defaults at build time (box server startwas hard-erroring oncfengine:"|cfmlEngine|"— "Invalid slug detected")/db/**strips it at publish #3174 — keepdb/in the package (the base.gitignore/db/**stripped it at publish)box install wheels-corein awheels newapp lands in vendor/wheels/vendor/wheels and never upgrades the running framework #3177 — landwheels-coreflat (box.jsondouble-nested it intovendor/wheels/vendor/wheels/)These are all easy to silently re-break: a placeholder reintroduced into a config override, a
db/exclude added back, a prepare script re-pointed at the demo app.The durability net
Add a CI leg that builds the base + core packages from the tree (
tools/build/scripts/prepare-base.sh+prepare-core.sh), installs them into a CommandBox container the waybox installlands them, boots, and asserts the install→serve journey:GET /is 200/wheels/infois 200 in developmentdb/shipstools/ci/smoke-env.shpasses its reload-gate / no-trace probes in productionGated on
tools/build/**,cli/lucli/templates/app/**,tools/ci/smoke-env.sh, and the workflow file itself.Acceptance
developartifact exits 1 with "Invalid slug detected" and the connectivity probe fails; the keystone-composed tree passes all six smoke-env.sh probes plus the dev journey).Refs #3173, #3174, #3176, #3177.