The pre-0.7.0 migration manufactures a version entry nobody installed, and never mentions it #117
Labels
No labels
blocked
blocker:ci-red
blocker:conflict
blocker:drill-pending
blocker:unrequested
bug
claimed
documentation
enhancement
epic
merge-next
needs-triage
ready
release
scope:cli
scope:drill
scope:host
scope:installer
scope:templates
scope:tiers
stale
state:addressing
state:bots-reviewing
state:building
state:needs-human
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: heavy-duty/box#117
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Found during the 0.8.0 release drill. Distinct from #115, which is about
setup-hostbeing skipped by the same migration — this one is about the tree the migration leaves behind.What happens
Installing 0.7.0+ over a pre-0.7.0 flat
/opt/boxconverts that flat tree into the versioned layout, creating/opt/box/versions/<old-version>/. On the drill host, a flat 0.6.0 install becameversions/0.6.0, and after installing 0.8.0 the machine had:0.6.0is now a first-class entry inbox versions— a version the operator never installed into that layout, has no reason to keep, and was never told about. Nothing reaps it, nothing mentions it, and it stays there indefinitely.Why it is a defect and not just untidiness
The install output never names it. The migration is silent. An operator who ran
sudo bash install.shto get 0.8.0 has no way to learn a second tree now exists short of runningbox versionsand noticing an entry they did not put there.It is indistinguishable from a deliberate rollback target.
box versionsis also how an operator sees versions they intentionally kept forbox use. A migration-manufactured entry looks identical to one they chose, so the natural reading of that list is wrong.It quietly contradicts uninstall's own contract.
box uninstall --allpromises "everything: every version, the current and PATH symlinks" — and it does remove the orphan, correctly. But the asymmetry is that install created a version entry the operator never asked for, so the install/uninstall pair is not symmetric even though each half behaves as documented.Not a removal bug — verified
To be precise about severity: the tree is removable through the normal path, and it worked first try on the drill host:
So this is a discoverability and lifecycle problem, not an unremovable-garbage problem. Filing it because nothing surfaces the orphan, not because anything is stuck.
Scope
Same population as #115: hosts upgrading from a pre-0.7.0 flat
/opt/box. Hosts already on the versioned layout never trigger the migration and are unaffected.Suggested fix
Cheapest honest option: say so. Have the migration print what it did and what it left — "migrated the existing flat 0.6.0 install to versions/0.6.0; remove it with
box uninstall 0.6.0if you do not need a rollback target." That turns an invisible artifact into a decision, costs nothing, and preserves the rollback option for anyone who wants it.Deleting it automatically is the wrong default: the pre-existing install is the only thing to roll back to if the new version misbehaves, and this runs at exactly the moment that matters.
Worth considering alongside #115, since both come from the same migration block and a single pass could address the reporting for both.
Refs
Found during the
release: 0.8.0drill (#114). Closely related: #115 (the same migration skippingsetup-host, which is the more serious half). Context: #71 (the global-install requirement making/opt/boxoperative).