156 lines
10 KiB
Markdown
156 lines
10 KiB
Markdown
# 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.
|