docs: REPORT — v0.135.0 deploy + §13 live validation (v2 tree, Part 0 opt-out-sticks, restore round-trip; leg-0 cause was transient not F-6C-1; leg-6 = unconfigured customer email)

This commit is contained in:
2026-07-15 10:24:34 +02:00
parent 3603d1fc7f
commit 5f216138e5
+42 -4
View File
@@ -57,15 +57,45 @@ All reverted; post-revert full suite green; no residue.
## Deploy / verify
`<filled after deploy>`
Built + pushed `felhom-controller:0.135.0` on 180; deployed to guest 9201 → `Up (healthy)`. Commit
`3603d1f`.
## §13 live validation
`<filled after the live legs>`
- **Leg 0 (pre-deploy diagnose) — the prompt's expected cause was WRONG.** The nightly
`crossdrive_failed` was **calibre-web** with `LastError = "mkdir …/teszt_enroll/backups/secondary/
calibre-web/recovery-unit…"`. teszt_enroll is a **local** ext4 drive, now mounted + writable — the
failure was a **transient disconnect** at run time, **not F-6C-1**. Confirmed read-only that **no
app auto-targets the `nas-media` NFS path** (all dests are felhom-usb / teszt_enroll). So F-6C-1 is
not the demo's failure cause.
- **Leg 1 — classified v2 tree (calibre-web):** `Tier 2 copied calibre-web → teszt_enroll (258.4 MB,
1 leg, 33s)`; dest tree = `.felhom-tier2-layout`=**2** + `recovery-unit/` + the class-driven
**`userdata/media/books/`** leg (its mandatory bind — not the whole userdata, no flat appdata). Also
the leg-0 before/after: calibre-web was `error` → now `ok`. Migration clean (no old flat `appdata/`).
- **Leg 2 — v2 layout (radarr):** marker=2 + `recovery-unit/` only, **0 legs** (radarr is classified
all-excluded → correctly unit-only). Migration clean.
- **Leg 3 — NAS exclusion:** read-only confirmed no app targets the nas-media NFS path (leg 0);
pinned + auto exclusion is unit-tested (F1/F2 red-proofs) and live in the deployed code.
- **Leg 4 — restore round-trip (calibre-web):** planted a sentinel in live userdata → tier-2 copied it
to the v2 secondary (`userdata/media/books/.felhom-t2probe`) → deleted it live → `RestoreTier2Files`
→ **restored** (the v2 `userdata/` subtree missing-only merge, end-to-end). Sentinel cleaned up.
- **Leg 5 — Part 0 opt-out sticks (LIVE):** unchecked `offbox_enlarge_blocked` + saved + **restarted
the controller** → the checkbox is **still unchecked** and the stored `enabled_events` count is 0 —
the seed did NOT re-enable it (vs the 3a-fix getter-append bug). Pref restored afterward.
- **Leg 6 — customer-email diagnosis:** the controller's `notifications.email` is **EMPTY** (synced as
`email=` to the hub), so the dispatcher has no customer address — the synthetic event's operator-only
delivery is **expected, not a bug** (the customer whitelist has the type, the hub accepts it). Fix =
configure a customer email (operator/customer action); **no hub code change** (flagged per §13-6).
- **Leg 7 — NAS hygiene:** removed the empty F-6C-1-era `nas-media/backups/secondary/` dir (rmdir;
nas-media/backups/ now holds only `primary/` + `offsite-restore/`); the NAS is never a tier-2 target
again.
## 6D-pending
## 6D-pending (shrunk)
`<updated after §13>`
- `PlaceOffsiteRestore` against live data; organic enlarge-block firing; the SQ3 immich offsite-only
full circle (all from Task 3a — unchanged by 3b).
- A pure **legacy (no-block)** app's live tier-2 `hdd/appdata/<name>` leg — not found on the demo (all
toggled apps carry classification blocks); covered by unit tests (`LegacyMultiDir`).
## Observations
@@ -73,3 +103,11 @@ All reverted; post-revert full suite green; no residue.
hint was already rendered via `EffectiveIsSSD`/`EffectiveDesc` (no new template needed there).
- `tier2SSDFits` seam added because `system.GetDiskUsage` is Linux-only (nil on the Windows test host)
— production uses the real predicate.
- **Leg-0 finding contradicts the prompt:** the demo's nightly `crossdrive_failed` is a transient
teszt_enroll mkdir failure, not F-6C-1 (no app auto-targets the NFS path). Recorded, not acted on.
- `nas-media/backups/offsite-restore/` (Jul 15) remains — a pre-Part-0.5 offsite scratch on the network
drive (3a-fix era). Out of leg-7 scope (that leg is tier-2 `backups/secondary/` residue); Part 0.5
prevents NEW offsite scratch landing there. Noted for a future offsite-scratch hygiene pass.
- Leg 6: the demo customer has no notification email configured — the customer-email delivery leg is
blocked on that config gap (not code); setting a customer email + re-firing one synthetic event would
complete it.