box: mark bootstrapped after a successful rig hook
#130
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
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: heavy-duty/box#130
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?
Follow-up carved out of #104, at the explicit request of its PR (#128) so the
deferred half is not lost when #104 closes. Child of heavy-duty/rig#62.
What #104 shipped, and what it did not
#104 asked for a
pristinesnapshot at mint and floated a second one:#128 implements
pristineonly, and argues the deferral rather thansilently dropping it. Restating that argument here so this issue starts
where that one left off:
pristineis a rollback floor — the onestate that is definitionally clean, and the thing rig#62 asked for.
bootstrappedis a convenience checkpoint: cheaper than a re-mint, but itcompetes with
box snapshot <box> <label>, which already exists and whichan operator can take at exactly the moment they care about.
dir-backenddisk objection that #128's driver detection exists to answer. Better to let
that machinery be reviewed carrying one mark before it carries two.
The two questions this issue has to settle
The blank-template asymmetry. A
blankbox never runs the rig hook, sobootstrappedwould exist on some boxes and not others.pristinedeliberatelyavoids exactly this by being unconditional within a fresh mint. Either
bootstrappedaccepts the asymmetry and documents it, or it needs a story forwhat a hookless box gets — and "nothing" is a real answer, but it should be a
chosen one.
The hand-re-run case, which is the sharper one. When the hook fails,
cmd_new's failure message tells the operator to fix it viabox shell.Nothing re-takes the mark afterwards — so
bootstrappedwould be absentprecisely on the boxes whose convergence was interesting enough to need
intervention. A mark that is reliably missing on the interesting cases is
worse than no mark, because its presence elsewhere implies a coverage it
does not have.
Shape
box: mark 'bootstrapped' after a successful rig hook— taken after the[ -n "$T_BOOTSTRAP_ROLE" ]block succeeds, reusingsnapshot_pristine'sstorage_driverdetection, itsBOX_SNAPSHOT_*opt-out shape, and itsnever-fatal contract. The helper #128 adds is deliberately close to reusable;
whether it generalises cleanly or wants a second function is an
implementation call.
Same durability caveat applies and must be stated on every surface that
mentions it: snapshots do not outlive their box (
box rmtakes them all),so this is an undo, not a backup — and a filesystem rollback cannot reach
off-box state (a tailnet device record, a runner registration), which is
rig#62's whole finding.
Blocked
On #128. This extends
snapshot_pristine/storage_driver, which do notexist until it lands, and whose shape can still change in review.
Refs
#104 (the parent), #128 (where it was deferred, with the argument),
heavy-duty/rig#62 (the rollback design parent)
Triage sweep: removed the stale
blockedlabel — this issue closed 2026-07-21 with the work landed, and the label predates the close.