docs(v0.27.0): REPORT — P3 self-heal reconcile done; live-validated on 9201
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -58,8 +58,22 @@ live-propagation alternative is deferred to its own spike. (Build remaining —
|
||||
`findmnt /mnt/<name>` shows two (identical) rows — functional (IsMountPoint true, apps write fine);
|
||||
inherent to rbind (a non-recursive bind would hide the submounts from the container). Tidy later.
|
||||
|
||||
## Not done (next build increments)
|
||||
- **P3** self-heal watchdog reconcile (4-state new/enrolled/ejected/decommissioned, durable-id-keyed) +
|
||||
safety rails (flapping backoff, durable-id-only, in-progress-op respect, PVE coordination,
|
||||
re-propagate); flags "restart to reconnect" for recovered drives.
|
||||
- **P4** dual-role eligibility + backup-aware wipe warning. Cross-drive backup ENGINE stays out of scope.
|
||||
## P3 self-heal reconcile — DONE (agent v0.27.0)
|
||||
- **`IntentStore`** (`internal/storage/intent.go`): durable, durable-id-keyed 4-state model
|
||||
(new/enrolled/ejected/decommissioned), atomic writes, `OnAbsent` replug rule. Intent recorded ONLY
|
||||
via the official enroll (`/disks/guest-attach`, incl. the idempotent path) + eject (`/disks/eject`,
|
||||
before unmount) paths.
|
||||
- **Watchdog**: re-mount candidate now intent-gated (only `enrolled` self-heals) + a present→absent
|
||||
hook clears `ejected`; exponential-backoff flapping guard (alert@4, hard stop@8, failure = "still
|
||||
not present a full backoff window after dispatch" so a slow async re-mount isn't miscounted).
|
||||
- **Wired in main.go**: one `IntentStore` at `<state-dir>/drive-intents.json`, shared by the watchdog
|
||||
+ the local API; open failure degrades to ungated legacy remount.
|
||||
- **Tests**: intent states/persistence/replug-rule/gate + the watchdog scenarios (colleague-unmount→
|
||||
reconciled, ejected/new/decommissioned→left alone, ejected→absent→replug→auto-mount, flapping→caps).
|
||||
- **Live-validated on 9201**: out-of-band `umount` → watchdog "self-heal — re-mounting enrolled drive
|
||||
(no eject intent)" → host **HEALED** within a tick; official eject → intent `ejected` → **NOT
|
||||
reconciled** (stays unmounted). (No golden change — P3 is host-side.)
|
||||
|
||||
## Not done
|
||||
- **P4** dual-role eligibility + backup-aware wipe warning (controller). Cross-drive backup ENGINE stays
|
||||
out of scope (needs a 2nd physical drive).
|
||||
|
||||
Reference in New Issue
Block a user