Problem (friction log F20 + F28 — recovery day)
Both recovery scenarios the walk exercised dead-ended:
- F20 — a wrecked destination has no supported reset. After the bucket-addressing bug era, the packed-layout guard refused every further sync — and following its own advice (fresh
root) still refused, because the guard keys on run history by destination name. The only escape was a new destination name: a cross-machine, by-hand config migration (hub sync_to lists, edge offload_requires) plus total loss of evidence continuity, with sqlite surgery as the only alternative.
- F28 — a dead edge machine has no supported restore. The laptop syncs only to the nas (a node), and
restore refuses nodes. The machinery exists (a reverse peer push is exactly what nas→htpc does daily), but there's no verb and no runbook; re-pairing a replacement machine is the full bootstrap gauntlet again. "Laptop died" is the most likely disaster in the household; today the answer is "copy files back by hand".
Decision (Martin, 2026-07-24 — option 6d)
Recovery paths are their own issue, separate from the day-1 bootstrap helpers (#162).
Scope
See design/friction-log.md F20/F28 and the checkpoint 8 section.
Problem (friction log F20 + F28 — recovery day)
Both recovery scenarios the walk exercised dead-ended:
root) still refused, because the guard keys on run history by destination name. The only escape was a new destination name: a cross-machine, by-hand config migration (hubsync_tolists, edgeoffload_requires) plus total loss of evidence continuity, with sqlite surgery as the only alternative.restorerefuses nodes. The machinery exists (a reverse peer push is exactly what nas→htpc does daily), but there's no verb and no runbook; re-pairing a replacement machine is the full bootstrap gauntlet again. "Laptop died" is the most likely disaster in the household; today the answer is "copy files back by hand".Decision (Martin, 2026-07-24 — option 6d)
Recovery paths are their own issue, separate from the day-1 bootstrap helpers (#162).
Scope
remote_objects/remote_packs/vectors/freshness for a destination audit-preservingly (runs history stays; the reset itself is recorded as a run). Plus: the layout guard should recognise "configured root is empty on the remote ⇒ fresh start" instead of refusing on name-keyed history alone.restore --from <node>implementation. Includes the re-pairing story (leans on cli: day-1 bootstrap helpers — config check, agent cert, node pairing #162's pairing helper) and a "your machine died" runbook in the docs.See
design/friction-log.mdF20/F28 and the checkpoint 8 section.