docs: REPORT — D53 (committed, not released; live-proven on 9202 against a test hub)
gates / gates (push) Successful in 58s

This commit is contained in:
2026-10-26 19:16:59 +01:00
parent 5bd03ad152
commit e333477b11
+19 -22
View File
@@ -1,27 +1,24 @@
# REPORT — controller v0.345.0 released (2026-10-26 afternoon, attended at the STOPs)
# REPORT — D53: the hub learns which apps are held — committed, NOT released (2026-10-26 evening)
**Plain words first.** Every live box runs 0.345.0 (global floor 13:27:04 UTC, MinAgent 0.158.1, on the operator's yes).
The one change: qBittorrent's 50 % upload rule now sets only the NORMAL limit. Before, with the household's „alternative
speed" on, it changed the alternative limit or gave up for good (R-1292, closed).
**Plain words first.** A held app (stopped on purpose until a person acts) now reaches the hub: the box sends one
message when a hold appears or changes, one when it goes, and repeats every hold once a day. The hub shows the list
and mails the operator after a waiting time (felhom.eu `7e57e824`). Not released (this run allows no release).
## Release
## The change (`5bd03ad`, CI 2377 ✓)
- Image `felhom-controller:0.345.0`, sha256 `2dc2c0a5ad34d08ebe4b8ae7b48708f00ff36ec36bc8249d6be7ecdff933a069`, from
`6bfb784` (CI 2368 ✓); the fix `2619191` (CI 2365 ✓). Test image `0.345.0-rc.1` on 9202 (then back to 0.343.0 as found)
and Tester 1.
- Per-box floors for Tester 1, demo-hp, demo-felhom → each „Post-update startup: update successful", healthy; the
https-only check green on all three; then the global floor (read back from the hub DB with its WAL and the hub log);
the per-box floors cleared.
- `internal/holdreport`: one observer of the hold store, ticked every minute by the scheduler (`hold-report`). It sends
`app_held` (stack, reason, since, the hold's sentence) for a new or changed hold, `app_hold_cleared` when a hold is
gone — also one cleared while the controller was down (`settings.reported_holds`) — and every hold again daily and at
start. Severity info.
- `settings.RestoreHold.Why()` / `WireReason()`: the hold sentence lives in one place (`holdWhy` calls it); the legacy
empty reason is sent as `restore_failed`.
- Tests `internal/holdreport/holdreport_test.go` (8). Red-proved: an inert `Tick` failed all six behaviour tests; the
scheduler line commented out failed the wiring test.
## The fix (R-1292)
## Live proof (felhom.eu `documentation/audits/d53-held-apps-2026-10-26/`)
`internal/upwatch/qblimit.go`: `QBLimiter` is `NormalLimit`/`SetNormalLimit` — `up_limit` through `app/preferences` (the
R-1261 slot helpers), never `transfer/uploadLimit`/`setUploadLimit` (they act on the current speed mode's slot).
Test `TestR1292_TheRuleSetsTheNormalSlotWhileTheAlternativeIsOn`, red-proved against the current-mode calls.
**Live on Tester 1** (9202 has no tested line, so the rule never acts there): alternative speed ON with a 500 KiB/s
alternative limit → the first tick set the normal limit to 5892096 B/s (50 % of 94.3 Mbit/s), the alternative stayed;
after a switch back and one more tick the limit was still the box's own. Evidence: felhom.eu
`documentation/audits/r1292-qb-normal-slot-2026-10-26/` (run 1 was an instrument failure in the probe, kept).
**Observation (NOT-A-FINDING):** 9202's first FileBrowser round after leaving 0.343.0 logged „could not join felhom-files"
again (healed in 3 s; log only); every live box is past that move.
9202 ran a local-only image of this commit (`0.346.0-d53test`, never pushed to the registry) against a test hub process.
A throwaway Radicale, crashed seven times, was stopped and held by the box (17:37:52Z); `app_held` reached the hub at the
next tick; one operator reminder after the 3-minute test grace; the household's Start lifted the hold and
`app_hold_cleared` removed the row. The first tick also reported four holds 9202 has carried since 2026-09-24 for apps
that are not installed (felhom.eu R-1298). 9202 is back on 0.343.0 with its own config.