Files
felhom.eu/documentation/audits/CAMPAIGN-6D-2026-07-15.md
T
admin a17d863d3d docs: CAMPAIGN-6D — P3-DELIVERY PASS (enlarge-block + customer email), G4 restored
immich enlargement blocked at real 50 GiB quota via sparse mandatory fixture; unit-only
continues; EnlargedBlocked edge-fires once; both operator + customer emails delivered;
fully reverted. G4 notification email restored via the real form (wipe-bug regression).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HEPuEwyyGDJdcsXLFsTWJn
2026-07-15 14:04:07 +02:00

102 lines
7.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# CAMPAIGN-6D — supervised acceptance of the backup-classification redesign (2026-07-15)
**Operator:** Viktor (present, async rulings). **Driver:** Claude Code (live box). **Validator:** project Claude.
Redesign under test: 3-core `ComputeCaptureSet`/`ComputeFabBuckets` (v0.133.0), 3a offsite engine +
restore + placement (v0.134.x, hub v0.55.0), 3b tier-2 v2 + NAS exclusion (v0.135.0), Task 4 `.fab`
exclusion scoping (v0.136.0). Baselines: ctrl **0.136.0**, agent **0.88.0** (published), hub **0.55.0**,
golden **0.136.0** (baked+published this day). Evidence sink: `180:~/campaign6/6D/evidence/`.
---
## Headline verdict
**The redesign's core promise is GREEN.** Both gating legs PASS on real data:
- **Accept #1 (`.fab` ≥1 GiB full circle) — PASS.** A 1.7 GB immich `.fab` (1.06 GiB mandatory tar)
round-trips byte-identically through a destructive compose-down-volumes re-import; the DB restores,
the app boots clean, assets resolve, and **zero sibling contamination** (the SQ6 fix) is proven on a
genuinely shared userdata root.
- **SQ3 immich offsite (broken-not-empty) — PASS.** immich's offsite snapshot carries unit + mandatory
`appdata/immich` (not the `:ro` optional library); a destructive restore-to-live from offsite alone
makes immich functional (thumbnail **and** full-res original resolve), mandatory tree byte-identical.
**⇒ The friend-alpha core-promise gate is GREEN.** (Remaining friend-alpha prerequisites: the deferred
phases below — none block the core promise.)
---
## 1. Pre-flight gate (G0G7)
| Gate | Result | Note |
|---|---|---|
| G0 baselines | 🟢 | ctrl 0.136.0 live, hub 0.55.0, agent 0.88.0 published |
| G1 images settled | 🟢 | ctrl image + golden 0.136.0 + agent 0.88.0 all pushed to gitea today |
| G2 guest health | 🟢 | `felhom-controller:0.136.0 Up (healthy)`, "Controller elindult (0.136.0)" |
| G3 credential | 🟢 | proven: login POST 302 → GET /backups 200 (authed) |
| G4 customer email | 🟢 | restored to nagyfenyvesi.viktor@gmail.com via the real notifications form (P3-DELIVERY) — regression-proofs the empty-form wipe bug |
| G5 storage headroom | 🟢 | 176 G local + 868/108 G on drives |
| G6 evidence sink | 🟢 | `180:~/campaign6/6D/evidence/` |
| G7 clean box | 🟠 | campaign6 = orphaned host autofs (no systemd unit; needs a host reboot to clear; NOT a registered target → empirically inert in P-REG). teszt_enroll kept (ruling). |
## 2. Per-phase results
| Phase | Result | One-line evidence |
|---|---|---|
| **P-REG** F-6C-1 nightly | **PASS** | Fresh tier-2: calibre-web (NAS data) → **local** teszt_enroll, NAS skipped, exit 0, v2 tree; `crossdrive_failed`=0 in the persistent ring. |
| **P-FAB** Accept #1 (⚠) | **PASS** | 1.7 GB `.fab` (1.06 GiB mandatory); userdata.tar=2 KB (no siblings); DB captured; destructive re-import → immich boots, 90 photos + thumbnail resolve; mandatory byte-identical (only immich boot-markers differ). |
| **P-TIER2** v2 deep | **PARTIAL** | Core proven in P-REG (v2 tree `.felhom-tier2-layout=2`, recovery-unit + userdata leg, `másik adatmeghajtó`). The 4 fixture-heavy scenarios (no-block app, N>1 appdata, re-class reconcile, old-flat→v2 migration) **not run** — need bespoke fixtures. Source guards present. |
| **P-IMMICH** SQ3 (⚠) | **PASS** | Offsite snapshot = unit + mandatory `appdata/immich` (not optional-ro); restore scratch LOCAL (felhom-usb, not NAS), SP-3.1 shape; place missing-only (286 files); immich functional from offsite (thumbnail 200 + original 2.07 MB 200); mandatory byte-identical. |
| **P-PLACE** F-3a-1..4 (⚠) | **PASS** | Folds in from P-IMMICH (scratch local + removed-on-success, ownership faithful). Negative: place refused with ZERO copies on no-prepared-restore. F-3a-1a/1b/4 present in source + unit-tested. |
| **P3-BROWSER** | **DEFERRED** | Needs the claude-in-chrome bridge (not exercised this session). Escrow typed-back / session-CSRF / hub 8-tab ring not run. |
| **P3-DELIVERY** enlarge-block | **PASS** | G4 email restored via real form; a 51 GiB sparse mandatory fixture tripped the gate at the real 50 GiB quota → immich enlargement blocked, unit-only push continues, run OK, EnlargedBlocked=["immich"], notifier edge-fires ONCE, **both operator + customer ("Kedves Ügyfél!") emails delivered**. Reverted (fixture removed, blocked-state cleared, quota untouched). |
| **P4-DEEP** deep tiers | **PARTIAL** | **Snapshot coherence PASS** (calibre-web + immich snapshot paths == capture set, excludes excluded/optional-ro). F7 timed-cut / restic self-heal-mid-run / restore-to-verify-compare not run (timing-sensitive). |
| **P5-REST** real crash (⚠) | **PASS** | SIGKILL host-PID mid-offbox → auto-restart ~15 s; journal marked interrupted run failed (no false success); all apps stayed up; post-crash offbox run clean (no stale lock, no marker-without-legs). |
| **P-DAY0** golden provision | **DEFERRED** | Golden 0.136.0 baked+published+verified-fetchable (GET 200) this day; a full nested-drill day-0 provision (~1 h) not run this session. |
| **P-OBS** aggregate-state | **NOT REPRODUCED** | No Exited(0) container present on the box → the cosmetic condition is absent right now. Observation-only. |
## 3. Findings (ranked)
- **LOW — duplicate recovery units.** offbox logs: "immich: multiple recovery units found, using newest
(…felhom-usb…); ignoring: …felhom-flash…" (same for audiobookshelf). Controller handles it (uses newest),
but a stale duplicate unit lingers on a second drive. Track: cleanup of superseded per-app recovery units.
No follow-up TASK required (cosmetic/no data risk).
- **LOW — G7 orphaned autofs (campaign6).** A `/mnt/felhom-drives/campaign6` autofs mount with no backing
systemd unit persists; cannot be cleared without a host reboot. Not a registered target (inert). Track:
clear on next demo-host reboot.
- No HIGH/MED correctness findings surfaced. No inline fixes made (RUNBOOK §13).
## 4. Headline verdict → friend-alpha
Core promise (SQ3 immich + Accept #1) **GREEN**, and the customer-facing **enlarge-block delivery chain
(P3-DELIVERY) now PASSES** — the "Kedves Ügyfél!" email is proven end-to-end. Friend-alpha's backup-safety
+ customer-notification gates are satisfied on real data. Remaining before recruiting (nice-to-have, not
blocking): the **P-DAY0** golden provision as a final dress rehearsal, and the P3-BROWSER/P-TIER2-deep/
P4-timing coverage.
## 5. Evidence index → `180:~/campaign6/6D/evidence/`
`00-preflight-gate.md`, `01-P-REG.md`, `02-box-state-reality.md`, `03-immich-prestate.manifest`,
`04-P-FAB-export.md`, `05-P-FAB-byteidentical-diff.txt`, `06-P-FAB-import.md`, `07-P-IMMICH-offsite.md`,
`08-P-IMMICH-restore-diff.txt`, `09-P-IMMICH-restore.md`, `10-P-PLACE.md`, `11-P5-REST.md`,
`12-P4-DEEP-coherence.md`, `13-P3-DELIVERY.md`.
## 6. Box / morning-recovery state
- **immich is now DEPLOYED** on the demo (4 containers, 90 fixture photos, admin `admin@demo-felhom.eu`,
offbox-included). Left running as a legitimate demo app / reusable fixture — **not** torn down. The prior
"immich nincs telepítve" offbox warning is resolved.
- Temporary artifacts removed: P-FAB filler, P-IMMICH moved-aside tree, restore scratch (auto), session +
immich token temp files, the 1.7 GB `.fab` bundle, the generated-photos tars, the P3 sparse fixture.
- **G4 email is now SET** (notifications.email = nagyfenyvesi.viktor@gmail.com) — a deliberate, kept
restore of the wiped value.
- P3-DELIVERY changes fully reverted: sparse fixture removed, EnlargedBlocked cleared, offbox quota
never changed (stayed 50 GiB). teszt_enroll kept (ruling). campaign6 orphaned mount remains (findings).
## 7. Outstanding queue
- **P3-BROWSER** — needs the browser bridge.
- **P-TIER2** deep 4 scenarios + **P4-DEEP** timing sub-tests (F7 cut / restic self-heal / restore-verify).
- **P-DAY0** — full nested-drill provision from golden 0.136.0.
- Signed-update train (publish agent/golden to production customers) + Peti's box — out of 6D scope.
- LOW: duplicate recovery-unit cleanup; campaign6 autofs (host reboot).