Skip to content

recovery: destination reset and machine replacement paths #163

Description

@mbertschler

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

  • Destination reset: an explicit operator verb ("forget this destination's recorded state") that clears 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.
  • Machine replacement / restore-from-node: a supported path to rebuild an edge machine from its hub — plausibly a reverse peer push driven from the hub, or a documented 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.
  • Cross-reference the existing manual DR that does work and stays: mirror restore, ride-along index snapshot recovery (walked successfully — see friction log checkpoint 8), and packed-layout DR (restore: support the packed (and content-addressed) layouts #142 tracks squirrel-native packed restore).

See design/friction-log.md F20/F28 and the checkpoint 8 section.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions