Files
felhom.eu/documentation/audits/review-round-2-2026-10-24/D44-D45-picks.md
T

7.7 KiB

D44 and D45 — one line per note, with CC's pick (prepared 2026-10-24 night)

Answer „all picks" or name the ones you disagree with. Rows: D44 = R-1265 (decisions the code takes that no document named), D45 = R-1266 (rulings or promises the code does not do as written). Count: 25 + 7 = 32 (the review said „about 30" for D44; 25 is the number of notes actually written). Each line: what the code does · the risk if it is wrong · the pick · the cost. „Confirm" = the note loses its „undocumented" tag and stays as written.

D44 — safe to confirm (21)

# Where What the code does Risk if wrong Pick Cost
1 03 local API 41 routes; 24 are not listed in 03 (one starts a host action: the 55 s line test) a review that reads 03 misses what a guest can ask the host change the document (list every route) docs only
2 07 §8.2c a second-drive copy stops at 60 min; a stray copy blocks restores; one copy per destination at a time a first copy of a very large library takes several nights confirm none (rsync resumes each night)
3 07 §8.2c „Eltávolítás" of a kept copy is refused while a backup, restore or copy runs none — a refusal, said on the page confirm none
4 07 §8.2c a start that fails AFTER a good put-back leaves the app stopped, not held none — the data is as before; Start is safe confirm none
5 07 §8.2c the hub's off-site delivery check skips a box that waits for the recovery code a box stuck there is not alarmed as „stuck" confirm none (the box says it waits)
6 07 §8.2c the nightly release copy to ep0 (D33) has no row in the recovery matrix a reader of §8 does not find it change the document (add the row) docs only
7 09 §6.4.x build.sh --push also refuses a dirty tree, a HEAD not at origin/main, a non-git directory none confirm none
8 09 §6.4.x the night leg retries a „busy" refusal once in the same night none confirm none
9 09 §6.4.x the night leg skips an app the household stopped (an update would start it) none — R-721's own rule confirm none
10 09 §6.4.x a manual chain run gives the leg its normal length as the deadline, not W+5 h none confirm none
11 09 §6.4.x already_current and engine_no_test are plain skips none confirm none
12 09 §6.4.x an unreadable catalog template leaves the app's compose alone that cycle none — the safe side confirm none
13 09 §6.4.x the R-971 image allow-list runs before ANY compose write none — the safe side confirm none
14 14 a re-enroll during the power-off hold counts as „gone" (a reinstall) none known confirm none
15 14 setting and clearing the off time each make an info event, not mailed none confirm none
16 14 the confirmation word is accepted as „KIKAPCSOLÁS", „KIKAPCSOLAS" and „TURN OFF" none confirm none
17 15 the Sonarr/Radarr API key is read from /config/config.xml an upstream format change breaks the wiring (loud, not silent) confirm none
18 16 systemd-detect-virt is read once per agent process; empty → „unknown" none — fail-closed confirm none
19 16 a path the controller cannot read counts as the SAME disk (no second copy claimed) none — fail-closed confirm none
20 16 the internal place refuses eject, decommission and wipe; moving its data is allowed none confirm none
21 16 the internal place's size subtracts every thin volume already promised none — the safe side confirm none

D44 — the few that matter (4)

# Where What the code does Risk if wrong Pick Cost
22 04 §2 a signed operation's window has no maximum length (felhom-opsign defaults to 30 min) a signed job made with a long window by mistake stays usable for that whole time change the code: the agent and the root wrapper refuse a window longer than 24 h one small agent change + test; rides an agent release
23 13 (file manager sign-in) FileBrowser trusts its proxy header; the only guard is that the header NAME is a per-box secret, and every app container can reach filebrowser:80 an app that learns the name (a hacked app on the box) reads and writes every household file change the code: FileBrowser joins only the network traefik uses, so no app container reaches it directly a compose/network change in the controller + a live check; one release
24 15 the „Később" 03:30 media restart is an in-memory timer — a controller restart forgets it (only the notice stays) media apps do not see the new drives until the household presses „now" change the code: store the due time and run it after a restart small controller change
25 catalog c50adfc (R-1019) MeTube, NZBGet and SABnzbd downloads are excluded from every backup, like qBittorrent and Transmission MeTube downloads may be gone from their source site — on a drive failure they cannot be fetched again change the catalog for MeTube only: optional (the second-drive copy carries it; off-site does not); NZBGet/SABnzbd stay excluded (re-downloadable) second-drive space for MeTube's folder

D45 — the text or the code (7)

The default pick is „the text follows the code" wherever the code is the safer or the decided behaviour; CC then rewrites each passage and you read the diff.

# Where The document says The code does Risk Pick Cost
1 09 decision 13 the tag rule moves to the catalog gate it stays in the controller (updateorder.go:134) none — the controller check is the safe one text follows code docs only
2 09 decision 14 a box „never jumps" versions a PERSON's press on an app older than the ladder takes the catalog's current definition; the night leg never jumps a big jump can fail — the guarded update undoes it text follows code (say: the night never jumps; a person's press may) docs only
3 09 decision 250 item 5 the golden gate judges by AGE while the floor is above it the gate cannot read the floor; it uses „release ahead" none — the gate is stricter text follows code docs only
4 01 §1/§4 „the hub never connects into a box", „no inbound control endpoint", „no standing operator backdoor" the hub sends a UDP poke (no command) through ep0; the operator's WireGuard peer reaches the operator door (felhom-sshd) a household reads a promise that is not exact text follows code, with the exact words: a poke carries no command, the box still pulls; the operator door is the documented break-glass docs + the website check (R-985 style)
5 03 §5, 06 §6 break-glass „via the Cloudflare Tunnel behind Access"; „no inbound listener" old text — the break-glass is the operator door over WireGuard none in code; the text misleads text follows code docs only
6 01 §8 the operator „cannot open / read" the off-site backup the operator holds the retained escrow key and can open an old store (R-985 already softened the website) a promise to the household that is not exact text follows code, in the words the website already uses docs only
7 06 §8 the agent will manage cloudflared 03 §2: it will not none text follows code (03 wins) docs only

What happens if you do nothing: the 25 notes stay tagged „undocumented" and the 7 passages keep saying something the code does not do. Nothing in a box changes either way until you answer.