Files
felhom.eu/REPORT-night-2026-10-22.md
T
2026-10-22 18:47:33 +02:00

112 lines
8.5 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-22: seven decisions, the data-loss candidates, the 03:30 pressure, the tunnel alarm, private repositories
Evening → night brief, started ~16:00 CEST. Nothing was released, deployed or published, except the catalog change and
the scratch box's catalog login (both allowed by the brief). Design read: `07-backup-architecture.md` §6.1.1, §6.2,
§10.2; `03-host-agent.md` (tunnel, bundle); `05-hub-architecture.md` §15; `06-offsite-connectivity.md`;
`09-update-architecture.md` §6.5.
## 1. Five lines
1. **D8:** done before 18:00 — DooPlex's Docker settings come from git (no change, no restart), and a weekly build-cache
prune timer runs Sunday 23:30.
2. **The seven decisions:** live — D6, D8, D27 (report only). Ready, waiting for a release or publish — D21
(controller 0.340.0), D3 + D5 (one website patch), D4 (agent bundle patch + installer patch).
3. **Data-loss candidates:** 2 proven and fixed in code (R-1187 c, R-1189 d); 5 real in code, now rows with a written
fix (R-1218, R-1219, R-1220, R-1221, R-1222); 1 closed half (R-1189 b, fixed in 0.304.0); 3 to the operator
(R-1205 as D31, R-1189 f, R-1190 d); the rest stay as named candidates.
4. **03:30 pressure:** the second-drive copy's file cache is charged to the guest and pushes the apps out of memory.
The fix runs the copy in a 512 MB memory-capped container: full stall 5.7 s → 0.37 s on the scratch box.
5. **Private repositories:** only felhom-controller can go private (after one CI change). felhom.eu, the agent and the
catalog must stay public: the website, every install and every box read them with no login.
## 2. The morning list (also in STATUS)
1. Publish the website patch (D3 wording, D5 hardware page).
2. D4: the agent bundle patch with the next agent release (your vouch) + the installer patch with a new installer tag.
Discard appliance 49 on the hub's Hosts page (tonight's test install).
3. Deploy hub 0.166.0 (tunnel alarm) and release the agent with `handshake_future_s` — one agent release with item 2.
4. Release controller 0.340.0 (R-49, R-1187 c, R-1189 d, R-1214), MinAgent 0.158.1.
5. Decide D29 — the controller repository private? CC: No, not now.
6. Decide D30 — the tunnel repair. CC: the agent makes a new key and registers it on the path that exists.
7. (D31, R-1205, when there is time.) Tester 2's „go" from yesterday stays on the list.
## 3. Per candidate
| Item | Result | Reason |
|---|---|---|
| R-1187 a | REAL in code → row R-1187 (now P2) | an export drops a folder with a symlink and still says done; capture code: needs a red-proof + 9202 proof |
| R-1187 b | REAL in code → R-1187 | the import sets no owners and drops symlinks |
| R-1187 c | **PROVEN and FIXED** (`d5f88a2`) | 9202 rc.1: an import over a stopped app merged old + new data; rc.2: refused, app untouched |
| R-1187 d | PLAUSIBLE → R-1187 | no busy check; after (a) |
| R-1187 f, g | REAL in code → R-1187 | HDD_PATH trusted; postgis missed, psql without ON_ERROR_STOP |
| R-1188 a, c | already CLOSED (R-1195; 0.337.0) | — |
| R-1188 b, d, e | R-1188, re-ranked P4 | unlikely or a sentence |
| R-1189 a | REAL, half-live → R-1189 | agent code; rides an agent release |
| R-1189 b | SPLIT: skipped nights CLOSED (R-899, 0.304.0); creep → **R-1221** (P4) | demo-hp journal: a night run after each of 3 off-cycle runs; creep 1.5–5 min/night measured |
| R-1189 c, g, i | REAL in code → R-1189 (P4-shaped) | quiesce vs restore; spring forward 2027; double click |
| R-1189 d | **FIXED** (`d5f88a2`) | the catch-up now runs the proof + integrity once; red-proved |
| R-1189 e | REAL in code → **R-1222** (hub, P3) | an evening backup time gives a false „dump missed" every morning |
| R-1189 f | operator → R-1189 | design question |
| R-1190 a | REAL in code → **R-1218** (P2) | proposed fix, not built: key code needs a live proof, and 9202 has no hub |
| R-1190 b | REAL in code → **R-1219** (P2) | the top bar links to a ceremony the page hides during an offer |
| R-1190 c | PLAUSIBLE → R-1190 | a read-only fingerprint compare decides it |
| R-1190 d | operator → R-1190 | design question |
| R-1190 g | REAL in code → **R-1220** (P2) | an unreadable app.yaml lists a live folder as kept (deletable) |
| R-1205 | operator → **D31** | the F-14 gate is deliberate (ruling 2026-07-13) |
| R-1206 | NARROWED | Felhom tier: no loss, by design (R-822 guard). NAS tier: a unit test is owed |
Research input: `documentation/audits/night-2026-10-22/P3-candidates/analysis.md`.
## 4. Records
**Commits.**
- felhom-controller: `6a17c95` (R-49), `d5f88a2` (R-1187 c, R-1189 d), `03c0a69` + `ae39467` (R-1214), `df78b6c` (docs).
CI jobs 2214, 2220, 2221, 2222, 2223 — all success, attempt 1.
- felhom-agent: `a0c88e5` (R-1204 + D4), `7651461` (D4 moved to a patch), `e803ad2` (docs, a correction). CI 2217,
2218, 2224 success.
- felhom.eu: `0639cf07`, `e267c5e2` + `1100a344` (one push), `acc78637`. CI 2215, 2219, 2225 success (2219 covers `e267c5e2`).
- app-catalog-felhom.eu: `ce33e3b` (Immich `backup.volumes`). CI 2216 success.
- homelab-manifests: `b35ba83` (D8), `c7506df` + `b0cce29` (REPORT). No CI in that repo.
- Drill catalog (scratch, no CI by design): `2ba4b53`, `9ebdba6`, `b0350a3` (tree = live `ce33e3b` again).
**Images pushed.** `felhom-controller:0.340.0-rc.1`..`rc.4` (never offered to a household: not X.Y.Z).
`felhom-hub:0.166.0` (built, NOT deployed: the live hub and `manifests/hub.yaml` are 0.165.0, read 18:2x).
**Teardown, three layers.**
- **Machine (9202):** the throwaway uptime-kuma removed through the product (its `.fab` deleted); the hog container and
19 GB of test files removed; memory 25898 MB / swap 512 MB again; Immich's `.felhom.yml` back to its pre-night file;
controller back on 0.339.0 (healthy, every app up). Kept on purpose: the `drill-reader` catalog login (D6).
Left: the four rc images in 9202's own Docker store, like earlier rc images there.
- **Host (demo-hp):** VM 9343 destroyed (own id); `/tmp/r1214*` removed; two sampler loops stopped. The scratch
storage and VM 341 / CT 9401 are standing items, not tonight's.
- **Hub:** appliance 49 from VM 9343 is still „registered" — Discard is the operator's (session-only). Nothing else.
- **DooPlex:** the D8 timer (intended). Nothing else changed.
**Rows:** before 178, after 180. Opened 5: R-1218, R-1219, R-1220, R-1221, R-1222. Closed 3: R-206 (D8), R-992 (D6),
R-1207 (D27). Updated: R-49, R-925, R-982, R-985, R-991, R-1187 (P3→P2), R-1188 (P3→P4), R-1189, R-1190, R-1204,
R-1205, R-1206, R-1214, R-1215.
**Unproven claims:** 35 of 55 not walked — unchanged. **System poster:** no listed fact changed (nothing that the
poster draws shipped tonight) — none of the three actions was needed.
**Observations.**
- 9202's sync refused Immich's template (R-971: Immich's data sits on a bench mount, not a household drive). —
NOT-A-FINDING: R-971 by design; the file was placed by hand for the proof and put back.
- The local unit restore of Immich was refused (R-538). — NOT-A-FINDING: by design; the proof used an empty-cache start.
- A non-`--fast` catalog gate run started the runtime gate on DooPlex; its canary refused and left nothing. —
NOT-A-FINDING: the canary is the control; the rule (`--fast` on DooPlex) exists.
- Images and packages stay public when a repository goes private. — NOT-A-FINDING: they follow the user `admin`, and
boxes must pull them; recorded in R-925 and D29.
- A CI read token is a precondition of D29. — NOT-A-FINDING: a step of that decision, written in it.
- R-925 said „32 source comments"; the served count is 61 on four pages. — fixed in the row.
- **CC's own mistake 1:** the agent CHANGELOG and felhom.eu commit `1100a344`'s message say a push of the installer
publishes it. Wrong: `/scripts/` is served from the tag `installer-v1.35.0` (R-110). Corrected in the agent CHANGELOG
(`e803ad2`) and R-982; the commit message cannot change (no force-push). Keeping D4 as a patch still holds: both
halves need a release that was forbidden tonight.
- **CC's own mistake 2:** controller commit `df78b6c` carries a „Co-Authored-By" line, which the brief forbids. It stays
(no force-push); no other commit tonight has one.
- **CC's own mistake 3:** homelab-manifests' REPORT first claimed a separate daemon.json backup. There was none — the
file did not change and is byte-identical to the role's copy in git (`cmp`). Corrected in `b0cce29`.
- The guest has no rsync. — NOT-A-FINDING: rsync lives in the controller image; the capped copy uses that image.
- R-1215's evidence is gone (Immich restarted at 02:16). — said in the row; it stays a watch.