hub v0.137.0 source + burn-down round 2 in felhom.eu: R-277 R-581 R-600 R-544 R-855 R-134 R-92 R-292 R-599 R-725 R-728 (hub), R-819 R-857 R-555 R-364 R-587 (gates/tools), R-571 R-129 R-124-runbook (docs); 28 rows closed incl. catalog + agent v0.147.0 rows, R-350 merged into R-132, R-888 opened, R-887 mechanism (249 -> 222)
gates / gates (push) Successful in 2m3s

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0159rPz1ZhFKsS53msqPYxtS
This commit is contained in:
2026-10-05 19:43:37 +02:00
parent e0d884565f
commit 557629d2bf
65 changed files with 2680 additions and 122 deletions
+28
View File
@@ -75,6 +75,34 @@ The full text of every row below: `git show e8c56c44:documentation/backlog/OPEN-
| **R-704** | **[P3-LOW] The box's crash-loop stop (decision 28) outlives the app: after remove and reinstall, the new install is still held.** (P3) | CLOSED 2026-10-05 — ACCEPTED BY THE OPERATOR (ruling 2026-10-05 18:23, the burn-down list) | Reason on the list: A fresh install drops an old update hold: fixed in v0.278.0 with tests; not seen live. Fix would cost: a live install with a leftover hold. If never: the tests stay the proof. Evidence of the verdict: `audits/burndown-2026-10-05/partA-table.md`. |
| **R-706** | **[P3-LOW] Removing an app "with its backups" leaves its off-site verification copy on the drive.** (P3) | CLOSED 2026-10-05 — ACCEPTED BY THE OPERATOR (ruling 2026-10-05 18:23, the burn-down list) | Reason on the list: Removing an app with its backups also deletes its off-site test copy: fixed in v0.279.0 with tests; not seen live. Fix would cost: a live remove with an off-site copy. If never: the tests stay the proof. Evidence of the verdict: `audits/burndown-2026-10-05/partA-table.md`. |
| **R-723** | **[P3-LOW] A fresh box sends the operator two mails on day one that describe nothing wrong.** (P3) | CLOSED 2026-10-05 — ACCEPTED BY THE OPERATOR (ruling 2026-10-05 18:23, the burn-down list) | Reason on the list: No 'box recovered' alarm in a new box's first hour: fixed in hub v0.126.0 with tests; not seen at a real first install. Fix would cost: watch the next real install. If never: the tests stay the proof. Evidence of the verdict: `audits/burndown-2026-10-05/partA-table.md`. |
| **R-277** | **Three hub surfaces jointly present a HEALTHY off-site tier as an absent one — and it produced a wrong operator statement during this run.** (P3) | CLOSED 2026-10-05 — FIXED (burn-down round 2) | felhom.eu (hub v0.137.0 commit, this one): `hub/internal/web/offsite_box.go` — a repo under 1 GB is not „0.0 GB"; `TestOffsiteRow_SmallRepoNotZeroGB`; red-proof `audits/burndown2-2026-10-05/felhom-eu-red-proofs.txt` |
| **R-581** | **[P2-MED] `ORDER BY received_at` cannot answer "the newest report" — the column has SECOND granularity.** (P3) | CLOSED 2026-10-05 — FIXED (burn-down round 2) | felhom.eu (hub v0.137.0 commit, this one): `GetCustomers` joins on `MAX(id)`; `TestGetCustomers_SameSecondReportsOneRowNewestWins` (old query: 2 rows); red-proof `audits/burndown2-2026-10-05/felhom-eu-red-proofs.txt` |
| **R-600** | **[P2-MEDIUM] "Full teardown" is logged while the deleted box's WireGuard peer is still configured on ep0.** (P3) | CLOSED 2026-10-05 — FIXED (burn-down round 2) | felhom.eu (hub v0.137.0 commit, this one): delete cascade triggers the WG peer push and says so; wired in main; `TestDeleteCascade_*`, `TestR600_MainWiresWGPeerSyncIntoWeb`; red-proofs `audits/burndown2-2026-10-05/felhom-eu-red-proofs.txt` |
| **R-544** | **[P3-LOW] The host-delete log line says „escrow deleted: true" while the documented (and actual) effect is DEMOTION to retained custody.** (P4) | CLOSED 2026-10-05 — FIXED (burn-down round 2) | felhom.eu (hub v0.137.0 commit, this one): host-delete log states the escrow effect; `TestHostDelete_LogSaysEscrowDemotedNotDeleted`; red-proof `audits/burndown2-2026-10-05/felhom-eu-red-proofs.txt` |
| **R-855** | **The hub's start log prints "after -1 healthy ring-0 night(s)" for the TEST override `OS_DOCKER_APPROVE_NIGHTS=0`** (P4) | CLOSED 2026-10-05 — FIXED (burn-down round 2) | felhom.eu (hub v0.137.0 commit, this one): `DockerNightsEffective` printed in the start log; `TestDockerNightsEffective`, `TestR855_StartLogPrintsEffectiveDockerNights`; red-proof `audits/burndown2-2026-10-05/felhom-eu-red-proofs.txt` |
| **R-134** | **Two zone-resolvers disagree on depth.** (P4) | CLOSED 2026-10-05 — FIXED (burn-down round 2) | felhom.eu (hub v0.137.0 commit, this one): `cloudflare.zoneCandidates`; `TestZoneCandidates`; red-proof `audits/burndown2-2026-10-05/felhom-eu-red-proofs.txt` |
| **R-92** | Hub PBS-DR gauge is 0.1 GB-granular — small deltas unverifiable (P4) | CLOSED 2026-10-05 — FIXED (burn-down round 2) | felhom.eu (hub v0.137.0 commit, this one): PBS-DR panel exact bytes; `TestPBSDRPanel_ExactBytesShowsSmallDelta`; red-proof `audits/burndown2-2026-10-05/felhom-eu-red-proofs.txt` |
| **R-292** | **The artifact-save flash conflates three different facts, and a failing test found it rather than a reading.** (P4) | CLOSED 2026-10-05 — FIXED (burn-down round 2) | felhom.eu (hub v0.137.0 commit, this one): artifact save flashes name the cause (new `artifact_version_missing`); `TestArtifactSave_FlashNamesTheCause` +2; red-proof `audits/burndown2-2026-10-05/felhom-eu-red-proofs.txt` |
| **R-599** | **[P3-LOW] A drill's teardown is blocked for 30 minutes by design, and nothing says so.** (P4) | CLOSED 2026-10-05 — FIXED (burn-down round 2) | felhom.eu (hub v0.137.0 commit, this one): 409 bodies say last report + when deletion opens; `TestHostDelete_OnlineRefusalSaysWhenItOpens`; target-selection names the wait; red-proof `audits/burndown2-2026-10-05/felhom-eu-red-proofs.txt` |
| **R-725** | **[P3-LOW] Small copy slips on the first-hour path.** (P4) | CLOSED 2026-10-05 — FIXED (burn-down round 2) | felhom.eu (hub v0.137.0 commit, this one): `bind.invalid.body_resend` (hu+en) points at the button; ISO glyph removed (ships with the next ISO); `TestBindExpiredPage_PointsAtTheButton`, `iso/test/test_console_glyphs.py`; red-proofs `audits/burndown2-2026-10-05/felhom-eu-red-proofs.txt` |
| **R-728** | **[P3-LOW] A customer created with one press was created TWICE, and the first of its two connect mails holds a dead link.** (P3) | CLOSED 2026-10-05 — FIXED (burn-down round 2) | felhom.eu (hub v0.137.0 commit, this one): per-customer-ID in-flight guard; `TestConfigCreate_ConcurrentSubmitCreatesOnce` (old: two creates for one press; passes under -race); red-proof `audits/burndown2-2026-10-05/felhom-eu-red-proofs.txt` |
| **R-571** | **[P3-LOW] The off-site failure classifier and the dashboard's alert-placement rules are described in no architecture document.** (P4) | CLOSED 2026-10-05 — FIXED (burn-down round 2) | felhom.eu (hub v0.137.0 commit, this one): `07` §6.7 the six off-site failure classes and what each means for the household; `02` alert placement. Docs only. |
| **R-819** | **`scripts/check_stands.py` is red and runs in no runner.** (P4) | CLOSED 2026-10-05 — FIXED (burn-down round 2) | felhom.eu (hub v0.137.0 commit, this one): `check_stands.py` rule 3 accepts CLOSED-ITEMS ids; `stands` gate registered with 3 decoys (the status-agreement half not built — too vague); red-proof `audits/burndown2-2026-10-05/felhom-eu-red-proofs.txt` |
| **R-857** | **Baking a golden twice under the SAME version leaves two stale facts.** (P4) | CLOSED 2026-10-05 — FIXED (burn-down round 2) | felhom.eu (hub v0.137.0 commit, this one): golden gate reads suffixed bake dirs and the newest bake log; runbook re-vouch line; CASE 16/17; red-proof `audits/burndown2-2026-10-05/felhom-eu-red-proofs.txt` |
| **R-555** | **[P3-LOW] The wire-contract gate counts a field as received when its name appears in a Go COMMENT on the receiving side.** (P4) | CLOSED 2026-10-05 — FIXED (burn-down round 2) | felhom.eu (hub v0.137.0 commit, this one): wire gate strips comments before matching; 6 surfaced fields allow-listed (2 → R-888); decoy, exemption removed; red-proof `audits/burndown2-2026-10-05/felhom-eu-red-proofs.txt` |
| **R-364** | **Accented-text search is an instrument that silently transforms its input, and discipline alone has failed at least three times.** (P4) | CLOSED 2026-10-05 — FIXED (burn-down round 2) | felhom.eu (hub v0.137.0 commit, this one): `scripts/hu_grep.py` + `test_hu_grep.py`; pointer in `REUSE.md`; red-proof `audits/burndown2-2026-10-05/felhom-eu-red-proofs.txt` |
| **R-587** | **[P3-LOW] Two root-password files sit in the directory the public ISO is published FROM.** (P3) | CLOSED 2026-10-05 — FIXED (burn-down round 2) | felhom.eu (hub v0.137.0 commit, this one): release ISO build refuses with a `*.rootpw.txt` in its out dir; skill publish block stops on one; `iso/test/test_rootpw_guard.py` (BusyBox PATH); red-proof `audits/burndown2-2026-10-05/felhom-eu-red-proofs.txt` |
| **R-129** | **Every doc says demo-hp has "no baked SSH key"** (P4) | CLOSED 2026-10-05 — FIXED (burn-down round 2) | felhom.eu (hub v0.137.0 commit, this one): demo-hp authenticates with DooPlex's own key (`ssh -o BatchMode=yes demo-hp` → ok; authorized_keys holds `SHA256:pgQh228R…`, the same as DooPlex's `~/.ssh/id_ed25519`, deliberate); `operations/nodes.md` „Access", `target-selection.md`, memory corrected; G1 stays the fallback. |
| **R-593** | **[P3-LOW] papra's session-signing key is described as „the app's subdomain".** (P3) | CLOSED 2026-10-05 — FIXED (burn-down round 2) | app-catalog `4828dc7` (CI run 1368, re-run success): papra SUBDOMAIN/AUTH_SECRET descriptions; `test_deploy_field_descriptions.py`; red-proof `audits/burndown2-2026-10-05/catalog-red-proofs.txt` |
| **R-760** | **[P3-LOW] vikunja's compose has no healthcheck, and nothing says why.** (P4) | CLOSED 2026-10-05 — FIXED (burn-down round 2) | app-catalog `4828dc7`: vikunja compose says why there is no healthcheck (comment only); `test_healthcheck_explained.py`; red-proof catalog-red-proofs.txt |
| **R-594** | **[P3-LOW] The catalog copy gate can CONVICT a retrieval promise but has no way to REGISTER a true one.** (P4) | CLOSED 2026-10-05 — FIXED (burn-down round 2) | app-catalog `4828dc7`: `check-copy-i18n.py` English allow-list (`copy_freeze/allowlist_en.json`); 5 decoys; red-proof catalog-red-proofs.txt |
| **R-605** | **[P3-LOW] A catalog gate that REFUSED TO RUN and a gate that ran and could not decide print the same word, so a reader cannot tell which happened.** (P4) | CLOSED 2026-10-05 — FIXED (burn-down round 2) | app-catalog `4828dc7`: a refusing harness exits 3, the runner prints DID-NOT-RUN; decoys both ways; red-proof catalog-red-proofs.txt. (The CLAUDE.md exit-code line was NOT updated — permission check refused the instruction-file edit.) |
| **R-781** | **[P3-LOW] The catalog's `scripts/test_gate_decoys.py` fails 4 of its own "genuine" onboarding cases — on the untouched tree.** (P4) | CLOSED 2026-10-05 — FIXED (burn-down round 2) | app-catalog `4828dc7`: onboarding decoys run on a scratch clone without the real records; 137 decoy cases pass; red-proof catalog-red-proofs.txt |
| **R-124** | **The recipe spells PBS's root namespace `"root"`, but the PBS API spells it `""`** (P4) | CLOSED 2026-10-05 — FIXED (burn-down round 2) | felhom-agent v0.147.0 (`f1b9b41`, tag v0.147.0, sha256 `642c4d19…`; delivered by signed jobs 2026-10-05 — `audits/burndown2-2026-10-05/delivery/`): the recipe's root namespace is `""` beside `namespace_state: resolved`; `TestR124_RootNamespaceOnTheWireIsPBSSpelling` (red-proof: "root" → FAIL, `r124-red-proof.txt`); runbook `ep0-datastore-copy.md` step 2 says how to read it. Operator ruling 2026-10-05 18:23: fix it. |
| **R-118** | **An absent drive's union row advertises the ROOT filesystem's capacity as its own.** (P3) | CLOSED 2026-10-05 — FIXED (burn-down round 2) | felhom-agent v0.147.0 (delivered): capacity read only while the device is present; `TestDisks_UnionPath_AbsentDeviceReportsNoRootCapacity`; red-proof `audits/burndown2-2026-10-05/agent-red-proofs.txt` |
| **R-269** | **A rotated-out per-guest local-API token still authorises, and the test that appears to pin the opposite passes only because of its lookup ORDER.** (P3) | CLOSED 2026-10-05 — FIXED (burn-down round 2) | felhom-agent v0.147.0 (delivered): token store reloads on growth before answering; `TestTokenStore_RotatedOutTokenRejectedFirst`; red-proof agent-red-proofs.txt |
| **R-317** | **The agent decides whether to install dnsmasq by stat-ing a file the OTHER package owns.** (P3) | CLOSED 2026-10-05 — FIXED (burn-down round 2) | felhom-agent v0.147.0 (delivered): dnsmasq install probed by its service unit; `TestEnsureDnsmasq_*`; red-proof agent-red-proofs.txt |
| **R-350** | **SECURITY — the hub operator password was printed in cleartext into a session transcript by CC, 2026-08-20. Rotation recommended.** (P3) | CLOSED 2026-10-05 — DUPLICATE of R-132 (its unique facts moved there) | Same credential (hub operator password HUB_PW), same mechanism (curl -w '%{redirect_url}' re-renders Basic-auth into the URL), same single action (operator decides to rotate). R-132 already folded R-580 (third occurrence 2026-09-18) on 2026-10-03; R-350 is the 2026-08-20 occurrence. |
---
File diff suppressed because one or more lines are too long