Files
felhom-controller/REPORT.md
T
2026-10-02 09:03:51 +02:00

2.6 KiB
Raw Blame History

REPORT — v0.287.0: the family gate (decisions 63/64, R-780) — 2026-10-02

Full session report: felhom.eu/REPORT-family-gate-2026-10-02.md. Evidence: felhom.eu/documentation/audits/family-gate-2026-10-02/ (A = the controller live on 9202, B = the catalog apps on 9202, B4 = a demo box, E = the floor). Architecture read: 01-topology-and-trust.md §5 (now with the family gate paragraph), 09 §3 decisions 46, 47, 63, 64.

What shipped (v0.287.0, commits 977665d + c8d5ee2)

  • internal/family — the household's family members: own name + password each (4×4 letters, shown once, bcrypt in family.json 0600), sessions of 30 days, asked on EVERY request (Valid), so reset / remove / logout end access at the next request. A wrong name costs the same bcrypt time as a right one.
  • internal/stacks/family_gate.go — a template's family_gate: true gets a traefik forwardAuth door per router, written BEFORE the first start (an app is never published open); family_gate_except: literal prefixes become routers without the door, anchored ^/prefix(/|$) (finding F1); the record is written at install and at a removed app's restore; the tick rewrites/removes the files. min_controller: refuses a template that needs a newer box.
  • internal/web/family_gate.go — /__felhom_gate/family (forwardAuth), /__family/start|login|logout on the dashboard host; the family cookie (Path=/__family) is NEVER accepted by RequireAuth; the sign-in locks per visitor (5/min, via rateKey, R-753) and per name (10/10 min). The Család card (Settings → Security): add / new password / remove, password once, no-store. hu + en, informal „te", no „kérjük"; parity green.

Proof

  • Tests: internal/family/family_test.go, internal/stacks/family_gate_test.go, internal/web/family_gate_test.go. Red-proofs RP-F1..F7 (each mutant made its named test fail, then reverted): A/RP-F-family-gate-mutants.txt. Full suite rc 0; controller_gates.py OK.
  • Live on 9202 through the product (A/items.txt): a stranger 0 app answers of 36 (LAN + simulated tunnel); members in with their own logins, the websocket 101; reset/remove/logout end access at once; a stranger's 7 guesses locked only the stranger; each Grimmory exception kept Grimmory's own login and the look-alikes stayed gated; the controller down → 500, never the app; the gate's own cost 0.49 ms median. Survived an Update and a remove + restore (B/box/).
  • Floor 0.287.0 (min_agent 0.131.0): both demo boxes on 0.287.0 in ~25 s (E/floor.txt). Golden 0.287.0 baked, round-tripped, vouched (felhom.eu/documentation/tests/golden-0.287.0-2026-10-02/).