112 lines
8.5 KiB
Markdown
112 lines
8.5 KiB
Markdown
# 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.
|