Files
felhom.eu/REPORT-night-2026-10-28.md
T

156 lines
10 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.
# REPORT — night 2026-10-28 → 29 (unattended)
## Safest readings taken (decided by CC unattended — operator may reverse)
1. **An unused restore copy is deleted after 14 days** (R-1256 H8; `07` §6.3 [DESIGN] 2026-10-28; CONTEXT). Options:
14 days, for ever (as before), or 3 days. A held or waiting copy is never touched.
2. **H4 and H5's failed-stop branch stay on main with test proofs only.** Rule 1 asks for a live proof by morning or a
revert.
- H4 runs only on an off-site restore, and 9202 has no off-site target. A fault injected there races the write-back.
It can leave an operator-only hold (R-379), which is not ours to clear.
- H5's failed stop needs a `docker stop` that fails on demand.
- Both fixes fail safe: they hold or keep, and never pour.
- Reading: keep them, and say so first. The live proof is owed to an attended session. Or the operator reverts those
two branches of controller `342a394`.
3. **The catalog changes are two prepared patches, not a push** (the brief: drill only, no live catalog push).
`documentation/audits/night-2026-10-28/catalog-morning/`. The catalog working tree is clean again.
4. **Plex's `catalog_since` stays 2026-10-23** in the prepared patch. The ladder writer set it to the day it ran. But the
date means "the pin last moved", and the pin did not move tonight (it moved on 10-23, the one `--no-verify` push).
Put back by hand, and written in the patch README.
5. **STATUS was at its 50-line limit.** Yesterday's one-item do-list (the homelab list, R-1328) became item 5 of the
morning list. Its words did not change.
## Five lines
1. Restore edges: 4 of 4 fixed (H4, H5, H6, H8), each test red first. Proven live: 2 (H5's busy volume, H8's sweep).
2. Escrow edges: R-1255 (hub: the carry, the set-aside name, the purge) and R-1254 (the ceremony half, agent +
controller) fixed on main, tests red first. No live proof: that needs a hub deploy, and no hub deploy runs at night.
3. OOM proven: **yes** — on Tester 1, one `app_oom` "seen by docker,cgroup" and one mail.
4. Plex route: **works** — unclaimed, from Plex's own container. Proven on the bench and on box 9202 (1.41.4 → 1.43.5,
the section read back with the same uuid).
5. Claims walked: 2 walked, 2 proven, 0 failed. Not walked: 31 of 55 (was 32).
## Morning release list (each one is yours; nothing was released)
1. **Hub vX:** R-1255 (felhom.eu `1ee6d5a5`).
2. **Agent vY + your vouch:** R-1254 (`5ddd124`) and R-528 (`6f933d6`). Then `pinned.day0_agent` (D50).
3. **Controller vZ:** R-1256 (`342a394`), R-1254's controller half (`e33cffa`), R-528 (`eed23e7`), and an unknown app
answers 404 (`20c5877`). MinAgent unchanged (0.158.1): an older agent answers 404, and the controller asks again
after 10 minutes.
4. **Catalog:** the two prepared patches. R-1338 (the memory figure; Wanderer re-measured at 27.7 %, not tight), and
the Plex fixtures + the Plex ladder entry (R-1238, proven on both venues).
5. Owed to an attended session: the live proof of H4 and H5's failed stop, or a revert of those two branches.
If nothing is done: the fixes stay on main only. No box changes.
## [DESIGN] lines
- R-1256: `documentation/architecture/07-backup-architecture.md` §6.3, "[DESIGN] 2026-10-28 night — four restore
edges", plus two [FACT] paragraphs (H5, H8 live).
- R-1255: `03-host-agent.md`, "[DESIGN] 2026-10-28 night — WHICH retained row is carried".
- R-1254: `03-host-agent.md`, "[DESIGN] 2026-10-28 night — a lost or late answer".
- R-528: `08-alarm-ladder.md`, "[DESIGN] 2026-10-28 night — the host's counter beside Docker's flag", with its [FACT]
of the Tester 1 proof.
## What was proven live
- **H5, scratch 9202, 01:33 UTC:** Vikunja's first volume was held by a created-only container. The household's
restore was pressed through the page. The result was "Failed to remove volume vikunja_vikunja_data before the restore
… (not written into)". The restore failed, and the put-back poured the live copy of both volumes. The app ran, with
no hold. Projects from before and after the restore point read back.
- **H8, scratch 9202, 03:29 UTC:** three copies were planted by hand. The first sweep removed the two older than 14
days and kept the young one (8 ms). Then the young one was removed by hand.
- **R-528, Tester 1, 2026-10-28 23:27 UTC:** a Radicale capped at 128 MB. The host counter went 0 → 1, with one
`app_oom` "seen by docker,cgroup" and one operator mail.
- **R-1238 Plex box walk, 9202, 03:45–03:59 UTC:**
- Deployed through the setup gate at 1.41.4.
- A library section was seeded from Plex's own container. Its front door answers 401 to the proxy.
- The household's Update ran in 41 s.
- The section read back on 1.43.5 with the same uuid.
- The 10-minute soak peaked at 10.6 %, with no kill. The verdict was `proven`.
## Claims walked (household first; front doors only)
| Claim | Result | Evidence |
|---|---|---|
| fail.customer-self-restore | **PROVEN-LIVE** (the route). Stays `partial`: no one other than the operator has done it yet. | `audits/night-2026-10-28/part5-claims/selfrestore-walk.log` |
| fault.selfheal | **PROVEN-LIVE**, built → walked. A crashed redis ran again in 1 s, and the probe read the app healthy. A guest reboot brought everything back in under 2 minutes. No event, no mail. | `…/part5-claims/selfheal/WALK.md` |
Not walkable tonight, with the reason for each:
- backup.sikeres (the run half): needs an off-site target, and 9202 has none.
- backup.fill-warning: 9202's drive is a shared 938 GB host disk, which cannot be filled safely.
- The app-crash mail and fault.operator-email: 9202 has no hub, and a hub deploy is not a night's work.
- backup.restore-proof: needs every tier on both machines. Its block is R-366. CC's hub token reads no event list.
## Commits and CI (by commit)
| Repo | Commit | CI run id / # | Result |
|---|---|---|---|
| felhom.eu (hub) | `1ee6d5a5` R-1255 | 2470 / #1331 | green |
| felhom.eu | `8a3df79f` design notes | 2476 / #1332 | green |
| felhom.eu | `d8752de9` R-1338 evidence | 2477 / #1333 | green |
| felhom.eu | `0abed37f` + `6a6dd94d` H5, the self-restore walk, row states | 2478 / #1334 | green |
| felhom.eu | `7a6b9ff1` 07 [DESIGN] + facts, fault.selfheal walked | 2482 / #1337 | green |
| felhom.eu | close-out (this report, STATUS, CONTEXT, rows, Plex box evidence, patches) | see the end of the final report | — |
| controller | `342a394` R-1256 | 2469 / #532 | green |
| controller | `e33cffa` R-1254 | 2472 / #533 | green |
| controller | `eed23e7` R-528 | 2474 / #534 | green |
| controller | `20c5877` unknown app → 404 | 2475 / #535 | green |
| controller | `a815b37` docs | 2483 / #536 | green |
| agent | `5ddd124` R-1254 | 2471 / #283 | green |
| agent | `6f933d6` R-528 | 2473 / #284 | green |
| agent | `91bd96c` docs | 2479 / #285 | green |
| catalog | none pushed (2 prepared patches) | — | — |
| drill | `41b37ad`, `37736f0`, then their reverts `8aaf198` + `3b66d35` (the tree equals its start) | — | — |
## Teardown (three layers)
- **Machine — scratch 9202 (04:14 UTC):**
- The controller is back on 0.346.1 and healthy. The test image `0.347.0-rc.n1028` is removed (a local tag, never
pushed).
- The live catalog is back; the config is byte-identical to the saved copy.
- The drill mirror is back at its start (`320cff5d`).
- No throwaway app, no planted restore copy, no volume made tonight. The containers are as found: the controller,
the file manager, paperless (3) and traefik.
- **Machine — Tester 1 (23:30 UTC):** controller 0.346.1, agent 0.167.0 (sha256 `28bdd282…`), the test app removed.
- **Host — demo-hp:** the bench 9401 is stopped. No new guest, and nothing on the thin pool.
- **Hub:** nothing provisioned.
## Register
Before: 225. After: 226. Opened: 1 (R-1339). Closed: 0.
## Observations
- FILED: R-1339 — at boot the controller logs "drive …/userdata/<app> not mounted", but the drive IS mounted. No data
is lost; the log line misleads a diagnosis.
- NOT-A-FINDING: the Plex bench soak got 401s. An unclaimed Plex refuses the harness's request. There were 0 kills, and
the peak was 12 % of 2 GiB.
- NOT-A-FINDING: Plex's front door answers 401 to the box walk. Plex does not take the proxy's address as local. The
fixture asks from Plex's own container, which is the measured route (R-1238).
- NOT-A-FINDING: 9202 drops `app_start_failed` and `controller_started`, because it has no hub. This is by design on a
scratch box.
- NOT-A-FINDING: the ladder writer sets `catalog_since` to the day it runs. It is made for a pin move, and this was the
one entry written after a move made by hand (R-1238's history). Put back in the patch.
- NOT-A-FINDING: the security review flagged the drill's Plex downgrade. It was on purpose: drill only, scratch 9202,
and reverted.
- NOT-A-FINDING: the 03:45 push was refused once. The nightly security watch pushed its own state during the gate run.
A rebase, then the push went in.
- NOT-A-FINDING: the security watch's daily list has a new Brotli decoder hole in many images. That is its normal job,
with its own mail. A catalog image move would be a live catalog push, which the night fences.
- NOT-A-FINDING: 9202 holds 359 Docker volumes, all made before 2026-10-28 16:00. None is from tonight. This is scratch
hygiene from earlier sessions, not a product defect.
- Fixed (small): two dead bench Wanderer tokens were redacted from committed evidence. They stay in the history of
`d8752de9`; the throwaway app is gone.
- Fixed (small): a stale R-356 sentence in the self-restore claim's note.
## Other
- Instruction files: none edited.
- System poster: no listed fact changed. The restore copy is not on the poster, and nothing was released.
- Architecture read: `07-backup-architecture.md` (restore), `03-host-agent.md` (escrow), `08-alarm-ladder.md` (OOM),
`09-update-architecture.md` §6.4 (the ladder).
- Secrets: the night's passwords stayed in the scratchpad. Every evidence folder was scanned; the only hits are setting
names (`cf_tunnel_token`, `PLEX_CLAIM`, "password from settings.json"), never values.