v0.313.0: media apps on every drive, drive events, a real restart, Plex without the race — release notes (MinAgent 0.155.0); golden next (bake → vouch → floor)
gates / gates (push) Successful in 44s

Claude-Session: https://claude.ai/code/session_0159rPz1ZhFKsS53msqPYxtS
This commit is contained in:
2026-10-15 10:48:58 +02:00
parent f327bc53a9
commit cac92a407e
4 changed files with 71 additions and 13 deletions
+31 -9
View File
@@ -1,11 +1,33 @@
# REPORT — v0.312.0: every public name answers only over https (R-1033, P1, 2026-10-14 night)
# REPORT — v0.313.0: media apps on every drive, drive events, a real restart, Plex without the race (2026-10-15)
Baseline `9b95e8e` (0.311.0). Design: felhom.eu `09` §3 decision 244 + the unattended decision recorded there (traefik on
the box, because the box keys cannot change Cloudflare zone settings). Evidence: felhom.eu
`documentation/audits/https-only-2026-10-14/`.
Baseline `8bc7ec5` (0.312.0). Design: felhom.eu `architecture/15-media-library.md` §2, §3, §7–§10; `09` §3 decisions 245,
247, 248. Evidence: felhom.eu `documentation/audits/media-build-2026-10-15/` (A = Plex gate, G = Tester 1, G7 = demo-hp).
- `forwarded.yml`: `felhom-forwarded` = chain [`felhom-https-only` (redirectScheme https, 301), `felhom-forwarded-headers`
(clean-up + HSTS 86400)]; catch-all router for unknown names over http. traefik.yml unchanged, no traefik restart.
- Tests red-proofed (three mutations, each seen failing). Green gate: build, vet, test all OK.
- Delivered by hand to Tester 1, demo-hp 9201 and demo-felhom 9201 for the proof (Tier 0). **Not vouched, floor not
moved** — the operator's morning step.
## What changed
- `internal/stacks/media_library.go` — per-drive binds for `media_library:` templates, only present drives; dead-drive
check `system.MountIsShutdown`; R-1031 (no drive question), R-1027/R-1032 (removal never deletes shared/`:ro`; safety
list knows userdata).
- `RestartStack` — a real restart (R-1026).
- `internal/mediawire` — the drive wiring (R-1024, R-1037), the old-install repair (R-1047), safe-removal pause/resume,
the stream count.
- `internal/web/media_events.go` + `media_notice.html` — the notice, restart now/later, safe removal that keeps the drive
(R-1044), the returned drive's file browser recreate (R-1038), the Plex claim (R-1028) and „Kész" refused while
unclaimed (R-1045). `after_start` deploy fields.
## Proven
- Tester 1 (rc.1–rc.3): existing apps moved to the marker binds with every stored path, library item, watch mark and file
identical; Media D added → notice → restart → wired in every app, second run writes nothing; Media B pulled → nothing
lost, the file browser let go and came back at once, one restart cured the apps; Media D safely removed with torrents →
only its torrents paused, every app let go before the unmount, the drive came back by itself, torrents resumed with no
re-check; 13 hardlink pairs intact.
- demo-hp 9201: the marker ignored by 0.312.0; rc.4 wired qBittorrent + Sonarr from the live catalog; a fresh Plex with
no code stays gated and „Kész" is refused while unclaimed.
## Tests (each seen failing once)
`TestRestartStack_R1026_*`, `TestMediaLibrary_*`, `TestMountIsShutdown_K4`, `TestRemoveStack_R1027_*`,
`TestProtectedHDDPaths_R1032_*`, `TestR1031_*`, `TestAfterStartField_*`, `TestRun_SecondRunWritesNothing`,
`TestRepairOldRoot_K7`, `TestMediaEvents_*`, `TestEjectStep_G4`, `TestPlanDriveGates_SkipsSafelyRemovedDrive`,
`TestSetupDoneProbe_AcceptJSON_Plex`, `TestPlexClaimBox_RendersPerBranch`, `TestPlexDonePress_RefusedWhileUnclaimed`.
## Fixed without a row (found on the boxes this session)
qBittorrent 5's 204 login; the gate racing a safe removal; presence read from the agent's `state`.