diff --git a/REPORT.md b/REPORT.md index 91edf8d5..4c6dfa75 100644 --- a/REPORT.md +++ b/REPORT.md @@ -1,24 +1,29 @@ -# REPORT — D53: the hub learns which apps are held — committed, NOT released (2026-10-26 evening) +# REPORT — controller v0.346.0 RELEASED; the line-test hold fixed the same day (2026-10-27, attended) -**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). +**Plain words first.** Controller 0.346.0 is out on every box (global floor 15:37 CET, MinAgent 0.158.1). It carries +last night's data-safety fixes and one fix made today: a box that seeds torrents all day now gets its weekly line test. +The old hold asked the line test too early — qBittorrent keeps sending for about 14 seconds after it is slowed — so +the test was refused every time. Now the controller waits until the app has really slowed down. -## The change (`5bd03ad`, CI 2377 ✓) +## What 0.346.0 carries -- `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. +D53 held-app reports (R-1291), R-1220, R-1218 + R-1219, R-1187 (a)(b)(d)(f)(g) and the two import defects, R-1298, +Go 1.27.3 (R-972), and **R-1250** (`710ceac`). CHANGELOG `## v0.346.0`. -## Live proof (felhom.eu `documentation/audits/d53-held-apps-2026-10-26/`) +## R-1250 (`710ceac`) -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. +- Before (0.345.1 on demo-hp 9201, a throwaway qBittorrent seeding to DooPlex): four holds 11:36–12:21 CET, each + refused „not quiet" 4.0–4.2 Mbit/s. Per-second reads: qBittorrent reports its limit 1024 within a second but sends + at full speed ~14 s; the forwarder and UDP queues hold nothing (felhom.eu `audits/linetest-2026-10-27/`). +- Fix: `upwatch.waitDrained` — after the hold, poll each held app's own upload (`Holdable.UploadRate`: qBittorrent + `up_info_speed`, Transmission `uploadSpeed`) until ≤ 16 KiB/s twice, 2 s apart; at most 90 s; an unreadable speed + waits 20 s; then ask the agent. Tests `linehold_r1250_drain_test.go` (five), red-proved by four mutations. +- After (0.346.0-rc.1 on 9201): held 13:39:56 → slowed after 22 s → 94.5 Mbit/s → the limit back exactly; the 50 % rule + kept the normal slot (0.15 % move). + +## Release + +rc.1 by hand on 9201 and Tester 1 (9202 was in another session's use); `b1b9be3` (CI 2423) built as 0.346.0 +(`sha256:3d910b03…`); per-box floors 15:09 CET → all three on 0.346.0 („update successful"); box walk green (start +logs 0 errors, every app healthy, `https_only_check.py` green, held-apps lists match 0 = 0); global floor 15:37 CET, +30-min watch. R-1218's live proof was waived by the operator (felhom.eu `09` §3 decision 270).