v0.325.0: CONTEXT, REPORT

Claude-Session: https://claude.ai/code/session_0159rPz1ZhFKsS53msqPYxtS
This commit is contained in:
2026-10-17 10:01:33 +02:00
parent 6ed223886d
commit 88aa65d595
2 changed files with 32 additions and 26 deletions
+10 -1
View File
@@ -7,7 +7,16 @@
>
> Ask Claude Code: "Please update CONTEXT.md with what we did today"
Last updated: 2026-10-17 (v0.324.0 — the DB password comes back with the data, restic 0.19.1, dashboard hardening)
Last updated: 2026-10-17 (v0.325.0 — burndown 3: limiters, family fingerprints, samba label, path guard, gates in a worktree)
> **2026-10-17 (day) — v0.325.0 (burndown 3).** R-1111 `reserveAttempt` is the one limiter body (dashboard sign-in,
> share password, escrow re-auth). R-1112 `family.json` stores fingerprints; an old file is converted when the
> controller STARTS (`webServer.OpenFamilyStore` — rc.1 opened it lazily, found live on 9201). R-1113 the household's
> pass reuses its family session (`Store.HouseholdSession`, new one under half-life). R-1109 samba compose label
> `felhom.smb-conf-sha256` (every box with sharing on recreates samba once). R-1110 `TestNoBareDrivePathToPathHelpers`.
> R-1114 `scripts/shared_scripts.py` + `FELHOM_WORKSPACE`. Same day, catalog `5d9450b`: five apps' Redis → RDB
> (R-1096), applied at each app's next start. Known flake filed: a stacks test writes `update-journal.json(.tmp)` into
> the package folder (empty DataDir), and the R-578 walk can trip on it.
> **2026-10-17 (night) — v0.324.0 RELEASED to the three test boxes (per-box floors, 21:52 UTC).** R-1106 / R-127 b
> (operator decision 1A): `appbackup.DBCredentialVars` + `DBDataVolumes`; `backup/restore_dbcreds.go` (pure
+22 -25
View File
@@ -1,37 +1,34 @@
# REPORT — v0.324.0: the database password comes back with the data; restic 0.19.1; hardening; three fixes (2026-10-17)
# REPORT — v0.325.0: two more limiters reserve first; family sessions as fingerprints; samba renames apply; path guard widened; gates in a worktree (2026-10-17)
Night brief 2026-10-16 → 17 (operator decisions 1A, 2A). Full report in plain words: felhom.eu `REPORT-night-2026-10-17.md`.
Evidence: felhom.eu `documentation/audits/night-restore-2026-10-17/`.
Burndown 3 (Parts 2–5). Full report in plain words: felhom.eu `REPORT-burndown-3-2026-10-17.md`. Evidence: felhom.eu
`documentation/audits/burndown-3-2026-10-17/`.
## 1. What changed
- **R-1106 / R-127 (b) / R-926:** a restore puts back the database password the data was saved with
(`internal/backup/restore_dbcreds.go`, `restore_unit.go`, `offbox_reconstitute.go`; `internal/appbackup/dbservices.go`;
`stacks.SetStackSecretValues`). Refusal `err.backup.restore_no_db_password` (HU/EN). Design: felhom.eu `07` §7.4.
- **R-1107:** restic 0.19.1 (Dockerfile ARGs; fixtures `internal/backup/testdata/restic/{0.14.0,0.18.1,0.19.1}`).
- **R-1108** (samba), **R-1065** (Plex claim → wiring), **R-1017** (guard + `userdataKept` fix).
- **R-983** (six items) and **R-976** (two items): `internal/web` auth, family gate, setup gate, claim; templates.
- **R-1111:** `reserveAttempt` (auth.go) — the share password and the escrow re-auth count a try before the compare.
- **R-1112:** `family.Fingerprint`; `family.json` holds `fp`; old files converted at load; the store opens at start.
- **R-1113:** `Store.HouseholdSession` — one household family session, renewed under half-life.
- **R-1109:** samba compose label `felhom.smb-conf-sha256`.
- **R-1110:** `TestNoBareDrivePathToPathHelpers`; `GetStackBackupData(nsRoot)`; `appDetailsForPath` through `NamespaceRootFor`.
- **R-1114:** `scripts/shared_scripts.py`; the runner passes `FELHOM_WORKSPACE`.
## 2. Tests (each red-proved)
`TestR1106_*` (backup 7, stacks 1; six mutations + one), `TestR1105_*` over three versions, `TestSambaPassword_*`,
`TestPlexClaim_TriggersMediaWiring`, `TestNoBareDrivePathToUserdataDir`, `TestRemoveStack_R800_UserdataKeptOnSystemDrive`,
`TestR983_*`, `TestR976_*`. Full suite green; `controller_gates.py --fast` green. 135 i18n fixtures re-captured, 22 unchanged.
`TestR1111_*` (2), `TestR1112_*` (4) + `TestFamily_OldFileThatCannotBeRewrittenIsAnError`, `TestR1113_*`,
`TestRenderSambaCompose_ConfigHashLabel`, `TestSambaReconcile_SamePathRenameChangesCompose`,
`TestNoBareDrivePathToPathHelpers`, `test_shared_scripts.py`. Full suite green; `controller_gates.py --fast` green in the
clone and in a worktree. No page changed: every i18n fixture byte-identical.
## 3. Live
## 3. Live (demo-hp 9201, the dashboard's own posts)
demo-hp 9201 on rc.1: off-site, on-box, refusal and kept-data restore paths with Rallly and Grimmory; restic three-way
on the real store; headless Chrome through the public address. Released to Tester 1, demo-hp, demo-felhom by per-box
floors (21:52 UTC), box walk green; the night's off-site runs `backup OK` on all three (02:15–02:18 UTC); **global floor
0.324.0 / MinAgent 0.158.1 at 02:46 UTC**, read back from the hub DB and page; per-box floors cleared.
rc.1: samba — share added, renamed (delete + add on the same folder), a second share on the same folder; each read and
written with `smbclient` from 9202, the old name refused; the label equals the smb.conf hash at every step. rc.1 also
showed the lazy family-store open (old `family.json` unchanged) → fixed in rc.2: at start „2 session(s) … rewritten as
fingerprints", file keys `exp, fp, gen, member`. Headless Chrome ×3 through the public address: sign in, `DENY`, POST
sign-out, MeTube through the family gate; household sessions stayed 2 (no growth).
## 4. Observations
1. A share renamed at the same path is never applied to a running samba. FILED: R-1109
2. Two sibling path helpers are called with drive-named arguments, unguarded. FILED: R-1110
3. The share-password and escrow limiters count a try after the password check. FILED: R-1111
4. Family sessions are stored raw, not as a fingerprint. FILED: R-1112
5. Each `/__family/start` pass with a household session creates a new family session. FILED: R-1113
6. `controller_gates.py` cannot pass in a worktree outside `git/`. FILED: R-1114
7. Grimmory's on-box restore after its books were removed refused. NOT-A-FINDING: by design (R-479); its route is „use my kept data", proven.
8. The launcher logs 404s for SVG app logos. NOT-A-FINDING: it falls back to the PNG; the same assets were in 0.322.0.
1. A stacks test writes `update-journal.json(.tmp)` into its package folder; the R-578 source walk can trip on it. FILED (see felhom.eu report)
2. The escrow re-auth answers a wrong password in Hungarian only. FILED (see felhom.eu report)
3. Through the dashboard a rename was already applied before R-1109 (delete and add each change the compose); the label covers a controller update that changes smb.conf alone. NOT-A-FINDING: recorded in the row's close.