diff --git a/REPORT.md b/REPORT.md index 9e420f1..04fb978 100644 --- a/REPORT.md +++ b/REPORT.md @@ -90,16 +90,59 @@ red commit elsewhere in this arc). - **Overrun defer** — dropping the `break` fails with `the second tier MUST NOT start while the first is still running; started=[local felhom-pbs]`. -## 8. NOT live-validated — and NOT deployed +## 8. Deployment — DEPLOYED 2026-07-26 18:22 CEST (this section was stale; corrected) -The controller change is **unit-proven only**. Both production controllers still run **v0.173.0**; -this release was deliberately not deployed, because the multi-tier path only engages against an agent -that serves `/backup/tiers`, and the agent rollout was still mid-flight (demo-hp's first offsite -backup in progress). Specifically unproven live: +**Live on both boxes:** `felhom-controller:0.175.0`, healthy. -1. A real both-due night with exactly one stop/start pair observed on a box. -2. The degrade path against a genuinely old agent in production. -3. The overrun defer firing on a real long-running offsite backup. +### The correction, and why the record disagreed with itself -Deploying is the natural next step once demo-hp's first offsite backup lands and the agent rollout -is settled. +This section previously read *"NOT live-validated — and NOT deployed"*. That was **true when +written** and went **stale 26 minutes later**: + +| CEST | event | +|---|---| +| 17:56:10 | this REPORT committed (`f5e1064`) — "not deployed", accurate at that moment | +| 18:22:56 | controller **0.175.0 deployed** to both boxes (container `StartedAt` 16:22:56 **UTC**) | +| 19:01:39 | the multi-tier quiesce cycle ran (controller log line `17:01:39` — **UTC**) | + +**The defect is mine and it is real:** `REPORT.md` is defined as "overwrite with the most recent +state", and I deployed without updating it. An artifact this project validates against was left +asserting the opposite of reality for the rest of the session. + +**One thing to be precise about, because it nearly became a second wrong conclusion:** the apparent +*contradiction* — a 17:01 quiesce log "before" a 17:56 commit — is a **timezone artifact, not +evidence of a false claim**. The controller logs **UTC**; git commit timestamps here are **CEST**. +Converted to one clock the ordering is consistent and unremarkable: REPORT 17:56 → deploy 18:22 → +quiesce 19:01. That host=CEST / controller=UTC mismatch is already recorded as a project trap and it +caught me once earlier the same day. + +So: a stale artifact (real, mine) — not a claim contradicted by its own evidence. + +## 9. Live validation + +**The multi-tier quiesce ran on demo-hp**, driven through the real UI endpoint +(`POST /api/guest-backup/trigger`, session auth + CSRF — the exact call "Mentés most" makes): + +``` +17:01:39Z manual backup requested — quiescing now +17:01:39Z backup due on 2 tier(s) — quiescing 1 stack(s): [paperless-ngx] <- ONE stop +17:01:46Z tier local: backup job ... started +17:02:56Z tier local: ... done — next tier may start (app still quiesced) <- app stays DOWN +17:02:56Z tier felhom-pbs: backup job backup-9201-felhom-pbs-... started +17:03:06Z tier felhom-pbs: ... snapshotted — resuming app early (8B.2) +17:03:06Z unquiescing (snapshotted (early resume, last tier)): restarting 1 stack(s) <- ONE start +``` + +**Exactly one stop/start pair with both backups inside it** — the assertion that matters, since +"both backups ran" would also pass against an implementation that quiesces twice. Tier order +local-first/PBS-last as designed; the app stayed quiesced *through* the non-last tier, preserving +app-consistency on the DR tier; it resumed at the **last** tier's snapshot rather than its upload. +**Total app downtime 1m27s for both tiers**, and paperless came back healthy. + +## 10. Still NOT live-validated + +1. A **scheduled** both-due night (this was the manual `TriggerNow` path; the scheduled path shares + `quiesceAndPollTiers` but has not been observed firing on its own). +2. The **degrade path** against a genuinely pre-R-82 agent in production — both boxes now run an + agent that serves `/backup/tiers`, so the fallback has not been exercised live. +3. The **overrun defer** firing on a real long-running offsite backup.