Release block 2026-10-27: hub 0.173.0, agent 0.167.0, controller 0.346.0 released; R-1250 fixed the same day and proven; ten rows closed, R-1312 opened
gates / gates (push) Successful in 2m29s

- audits/linetest-2026-10-27/: the hold failed four times as built (qBittorrent drains ~14 s), the fix 710ceac, the test
  through the hold on 0.346.0-rc.1 (94.5 Mbit/s, the limit back exactly), teardown.
- audits/release-2026-10-27/: builds, agent release + signed updates, per-box and global floors, box walk.
- 09 §3 decisions 269 (R-1250 fix the same day) and 270 (R-1218 live proof waived); D55's window result in 268.
- 08 §: the drain-wait design line. STATUS, CONTEXT, register (223 -> 214).
This commit is contained in:
admin committed 2026-10-27 15:45:59 +01:00
1 parent 708a34512e
commit acd79a78cc
51 files changed
+1767 -22

No files matched your search

@@ -591,6 +591,11 @@ normal use; work it does not explain is the sign of a hacked app. Numbers and me
start-up check puts it back; the 50 % rule waits while a record exists. Measured on demo-hp with a real seed (10
Mbit/s to DooPlex's qBittorrent): refused `not-quiet` without the hold; with it the uplink fell to 0.02–0.16 Mbit/s,
94.2 Mbit/s measured, the app held 56.8 s and back to 1 249 280 B/s exactly (`audits/dooplex-alarms-2026-10-24/`).
**[DESIGN — R-1250 drain wait, 2026-10-27; controller `710ceac`, released v0.346.0]:** between the hold and the call
the controller waits until every held app REPORTS its own upload ≤ 16 KiB/s on two readings 2 s apart (at most 90 s;
an unreadable speed waits 20 s) — qBittorrent 5.2.4 kept sending at full speed ~14 s after its limit fell, inside the
agent's 5–15 s quiet read, and four tries in an hour were refused; with the wait the test ran (94.5 Mbit/s, the limit
back exactly; `audits/linetest-2026-10-27/`; `09` §3 decision 269).
**[DESIGN — R-1261, 2026-10-25 night; controller `a79a292`, unreleased]:** EVERY running seeder is held (qBittorrent
and Transmission — one left seeding kept the test refused `not-quiet` every time); all records first
(`upwatch.line_test_holds`), then the apps; a record whose app was removed while held is dropped (it used to stop the
@@ -1107,6 +1107,25 @@ its length, and both fixes cost something the household would notice — operato
the plan grows ~14 a night (209 on 2026-10-26, ~223 at the next run), so it is refused again. Why A: the cap must sit
above the honest plan on the night it is used. CC's token lacks `offsite:write`, so the operator made a one-purpose
token `cc-d55-window` (Off-site write only); CC used it once, 2026-10-26 19:10:31Z (`max:260` stored, read back).
**The window ran** 2026-10-27 03:18:15–03:18:41Z (window 17): 223 of 223 planned removed, 373 → 150, closed by the
box, no alarm (hub row + the box's own log agree). The operator revokes the token.
### 2026-10-27 (attended release block) — the line-test hold is fixed the same day; R-1218's live proof is waived
269. **The line-test hold waits until the held app has really slowed down — fixed in the controller the same day.**
*Operator, 2026-10-27 12:30 CET.* Options: A) fix in the controller now, prove it on an rc on demo-hp's 9201 while the
seed runs, ride today's 0.346.0 — cost: ~1.5 h, the release later in the afternoon; B) file it and fix later — cost:
a box that seeds all day keeps getting no weekly test. Why A: measured four refusals in an hour (qBittorrent sends
~14 s after its limit falls; the agent reads 5–15 s after the call). Built `710ceac`; live on `0.346.0-rc.1`: 94.5
Mbit/s, the limit back exactly (`audits/linetest-2026-10-27/`).
270. **R-1218 is released without its live proof (rule 2 waived for this row).** *Operator, 2026-10-27 15:15 CET.*
Options: A) keep both halves, waive the live proof — cost: released key code proven by red tests only; a box that
lost its key file entirely now gets a 409 on its ceremony instead of a silent demotion; B) revert both halves — cost:
a hub 0.173.1 and a second deploy, and the demotion bug stays. Why A: no product path makes the box's saved off-site
target „off" on a hub box (the hub page's switch did not reach Tester 1's target; the household's clear is refused on
a hub tier), so no live run can tell the old code from the new; the change only widens a safety step and adds a
refusal. R-1312 asks what the hub switch does on the box.
### 2026-10-26 (evening brief) — D53: held apps reach the operator; D54: demo-hp's stuck clean-up; R-1297 (B): a second CI runner
@@ -0,0 +1,53 @@
# Line test on a seeding box, 2026-10-27 (R-1250, R-1261) — the hold failed as built, was fixed, and then held
Venue: demo-hp guest 9201 (controller 0.345.1, then `0.346.0-rc.1`; agent 0.166.0), a THROWAWAY qBittorrent ("qbline",
installed and removed through the product), seeding a private 3 GiB sparse file to DooPlex's qBittorrent (download
only, capped 3–4 Mbit/s, operator yes 2026-10-25). DooPlex's qBittorrent is reachable only inside the cluster, so it
dialled the seed through a small forwarder on 9201 (`tools/fwd.py`, LAN :6881 → the container). Method: reads of the
controller log, the agent journal, qBittorrent's own API and the interface counters. Nothing forced the line test.
## What the agent's slot is
demo-hp's slot is NOT 10:00: `slot_minute=95` (the agent's start line), so its test may start from 11:35 CET. Tester 1's
is 213 (13:33), demo-felhom's 20 (10:20). The seed was paused on DooPlex from 10:20 to 11:15 so it ran across 11:35
(`dooplex-add.txt`).
## Before the fix — four holds, four refusals (controller 0.345.1)
11:36, 11:51, 12:06, 12:21 CET: the controller held qBittorrent at 1 KiB/s, asked the agent, put the limit back
exactly (5898240 B/s), and the agent refused „not quiet" — 4.2, 4.2, 4.0, 4.0 Mbit/s while held
(`controller-upwatch-0345-refusals.txt`, `agent-demohp-day.txt`). **The 0.345.1 container's log was dropped when the rc
replaced it**; the refusal lines were recovered from this session's reads of the watcher's copies (said in that file's
header). The agent's journal holds the same four refusals independently.
Why, measured three ways:
1. `sec1-guest.txt` / `sec1-host.txt` (12:05:40–12:08 CET, one sample per second at the container, the guest and the
host NIC): during the 12:06:17–12:06:32 hold the CONTAINER itself kept sending 2–11 Mbit/s each second — the
forwarder was not the cause.
2. `udp-queues.txt`: the transfer is uTP (no TCP socket); every UDP queue was 0 — no buffering outside qBittorrent.
3. `qbsec-2-clean.txt` (the 12:21 hold) and `limitprobe.txt` (12:27, the controller's own 1 KiB/s value set by hand for
60 s on the throwaway, then the exact value back; no test started): qBittorrent reports its limit as 1024 within a
second, yet sends at full speed for **~14 s**, then 0. The agent reads the uplink 5–15 s after the call
(`RequestSettle` 5 s + `RequestQuietWindow` 10 s), inside that drain — so every test on request was refused.
## The fix (operator's choice 2026-10-27: fix in the controller now) — felhom-controller `710ceac`
After the hold, `upwatch.waitDrained` polls each held app's OWN upload (`up_info_speed` / Transmission `uploadSpeed`)
until ≤ 16 KiB/s twice, 2 s apart (at most 90 s; an unreadable speed waits 20 s), and only then asks the agent. Five
tests, red-proved by four mutations (`redproof-r1250-drain.txt`).
## After the fix — the test ran through the hold (`0.346.0-rc.1` on 9201 from 13:24 CET)
`rc1-hold-proof.txt`: 13:39:56 held → 13:40:20 „the held app(s) slowed down after 22s — asking the agent" → three runs
94.5 / 93.4 / 94.4 Mbit/s → **94.5 Mbit/s** stored (`last_ok_at` 12:40:35Z) → 13:41:17 the limit back as it was
(5898240). The 50 % rule then KEPT the normal limit: the line moved 0.15 %, inside its 20 % band
(`qblimit.go` „kept"); no household flag; the alternative slot untouched (`upwatch-settings-after.txt`).
## Teardown (`teardown.txt`)
DooPlex: the torrent and its data removed, `/tmp/r1250` removed, 326 torrents as before, no category left. 9201: the
app removed through the product with `remove_hdd_data` and `remove_backups` FALSE — its download folder is the shared
library `media/torrents` (holding `movies`, `tv`, `.temp` from 14–15 October), and it made no backup today; its own
volume went with it. The forwarder stopped; the hand-made seed folder `r1250` and `/root/r1250` removed. Hub: nothing
provisioned. 9201 stayed on the rc until the per-box floor moved it to 0.346.0 (15:10 CET).
@@ -0,0 +1,34 @@
Oct 27 11:36:32 demo-hp felhom-agent[1156735]: time=2026-10-27T11:36:32.542+01:00 level=INFO msg="linetest: test on request refused — the uplink is not quiet" mbps=4.2
Oct 27 11:51:32 demo-hp felhom-agent[1156735]: time=2026-10-27T11:51:32.488+01:00 level=INFO msg="linetest: test on request refused — the uplink is not quiet" mbps=4.2
Oct 27 12:06:32 demo-hp felhom-agent[1156735]: time=2026-10-27T12:06:32.519+01:00 level=INFO msg="linetest: test on request refused — the uplink is not quiet" mbps=4.0
Oct 27 12:21:32 demo-hp felhom-agent[1156735]: time=2026-10-27T12:21:32.698+01:00 level=INFO msg="linetest: test on request refused — the uplink is not quiet" mbps=4.0
Oct 27 12:36:32 demo-hp felhom-agent[1156735]: time=2026-10-27T12:36:32.503+01:00 level=INFO msg="linetest: test on request refused — the uplink is not quiet" mbps=4.8
Oct 27 12:51:32 demo-hp felhom-agent[1156735]: time=2026-10-27T12:51:32.497+01:00 level=INFO msg="linetest: test on request refused — the uplink is not quiet" mbps=4.3
Oct 27 13:06:32 demo-hp felhom-agent[1156735]: time=2026-10-27T13:06:32.477+01:00 level=INFO msg="linetest: test on request refused — the uplink is not quiet" mbps=4.8
Oct 27 13:21:32 demo-hp felhom-agent[1156735]: time=2026-10-27T13:21:32.507+01:00 level=INFO msg="linetest: test on request refused — the uplink is not quiet" mbps=4.1
Oct 27 13:40:35 demo-hp felhom-agent[1156735]: time=2026-10-27T13:40:35.610+01:00 level=INFO msg="linetest: test on request (a held torrent app, R-1250)" server=10.77.0.1:5201
Oct 27 13:40:45 demo-hp felhom-agent[1156735]: time=2026-10-27T13:40:45.982+01:00 level=INFO msg="linetest: run 1: 94.5 Mbit/s" server=10.77.0.1:5201 server_bytes=118751232 server_seconds=10.050698
Oct 27 13:41:01 demo-hp felhom-agent[1156735]: time=2026-10-27T13:41:01.335+01:00 level=INFO msg="linetest: run 2: 93.4 Mbit/s" server=10.77.0.1:5201 server_bytes=117440512 server_seconds=10.053919
Oct 27 13:41:16 demo-hp felhom-agent[1156735]: time=2026-10-27T13:41:16.678+01:00 level=INFO msg="linetest: run 3: 94.4 Mbit/s" server=10.77.0.1:5201 server_bytes=118620160 server_seconds=10.053608
Oct 27 13:41:16 demo-hp felhom-agent[1156735]: time=2026-10-27T13:41:16.678+01:00 level=INFO msg="linetest: upload line measured: 94.5 Mbit/s (best of 3)" server=10.77.0.1:5201 runs=3 duration_s=41.067967365
Oct 27 13:48:23 demo-hp felhom-agent[1156735]: time=2026-10-27T13:48:23.735+01:00 level=WARN msg="signedjobs: AUTHORIZED signed op — executing" job=454a8763e3e8adf9 op=agent_update key_id=felhom-op-1 nonce=656f0799bd7c791166bea35f4503caef
Oct 27 13:48:24 demo-hp felhom-agent[1156735]: time=2026-10-27T13:48:24.016+01:00 level=WARN msg="agent_update: handing the signed job to the root wrapper (felhom-os-apply agent_update)" staged=/var/lib/felhom-agent/selfupdate/felhom-agent-0.167.0 version=0.167.0
Oct 27 13:48:24 demo-hp felhom-agent[1156735]: time=2026-10-27T13:48:24.619+01:00 level=WARN msg="agent_update: signed update verified as root and handed off; restart scheduled" version=0.167.0 report="{\"agent_update\": {\"sha256\": \"28bdd2826f45f3767880fcff4d3105afb7247c09c0ced99d78b3a978d8d826f0\", \"version\": \"0.167.0\", \"wrapper\": \"Running timer as unit: run-p3482367-i20260742.timer\\nWill run service as unit: run-p3482367-i20260742.service\\nfelhom-selfupdate-guarded: applied 0.167.0 (prev 0.166.0, sha 28bdd2826f45f3767880fcff4d3105afb7247c09c0ced99d78b3a978d8d826f0); detached restart scheduled\", \"…"
Oct 27 13:48:24 demo-hp felhom-agent[1156735]: time=2026-10-27T13:48:24.620+01:00 level=WARN msg="signedjobs: signed op COMPLETED" job=454a8763e3e8adf9 op=agent_update
Oct 27 13:48:28 demo-hp felhom-agent[3482565]: time=2026-10-27T13:48:28.849+01:00 level=INFO msg="linetest: weekly upload line test starting" schedule="weekly, due Tuesday from 10:00 host-local time; starts 10:00-15:59 after 10 quiet minutes; never beside a backup, restore-test or update" slot_minute=95
Oct 27 13:48:28 demo-hp felhom-agent[3482565]: time=2026-10-27T13:48:28.850+01:00 level=WARN msg="selfupdate: new version running — dwelling before commit" version=0.167.0 prev=0.166.0 dwell=1m0s
Oct 27 13:49:28 demo-hp sudo[3486943]: felhom-agent : PWD=/ ; USER=root ; COMMAND=/usr/local/sbin/felhom-selfupdate-guarded commit
Oct 27 13:49:28 demo-hp felhom-agent[3482565]: time=2026-10-27T13:49:28.876+01:00 level=WARN msg="selfupdate: update committed" version=0.167.0 wrapper=""
{
"last_ok_at": "2026-10-27T12:40:35.610771254Z",
"mbps": 94.5217790843979,
"runs_mbps": [
94.5217790843979,
93.44854439348477,
94.39012143700053
],
"server": "10.77.0.1:5201",
"last_attempt_at": "2026-10-27T12:40:35.610771254Z",
"tries_day": "2026-10-27",
"tries_today": 1
}
@@ -0,0 +1,14 @@
Oct 27 11:36:32 demo-hp felhom-agent[1156735]: time=2026-10-27T11:36:32.542+01:00 level=INFO msg="linetest: test on request refused — the uplink is not quiet" mbps=4.2
Oct 27 11:51:32 demo-hp felhom-agent[1156735]: time=2026-10-27T11:51:32.488+01:00 level=INFO msg="linetest: test on request refused — the uplink is not quiet" mbps=4.2
Oct 27 12:06:32 demo-hp felhom-agent[1156735]: time=2026-10-27T12:06:32.519+01:00 level=INFO msg="linetest: test on request refused — the uplink is not quiet" mbps=4.0
Oct 27 12:21:32 demo-hp felhom-agent[1156735]: time=2026-10-27T12:21:32.698+01:00 level=INFO msg="linetest: test on request refused — the uplink is not quiet" mbps=4.0
Oct 27 12:36:32 demo-hp felhom-agent[1156735]: time=2026-10-27T12:36:32.503+01:00 level=INFO msg="linetest: test on request refused — the uplink is not quiet" mbps=4.8
Oct 27 12:51:32 demo-hp felhom-agent[1156735]: time=2026-10-27T12:51:32.497+01:00 level=INFO msg="linetest: test on request refused — the uplink is not quiet" mbps=4.3
Oct 27 13:06:32 demo-hp felhom-agent[1156735]: time=2026-10-27T13:06:32.477+01:00 level=INFO msg="linetest: test on request refused — the uplink is not quiet" mbps=4.8
Oct 27 13:21:32 demo-hp felhom-agent[1156735]: time=2026-10-27T13:21:32.507+01:00 level=INFO msg="linetest: test on request refused — the uplink is not quiet" mbps=4.1
Oct 27 13:40:35 demo-hp felhom-agent[1156735]: time=2026-10-27T13:40:35.610+01:00 level=INFO msg="linetest: test on request (a held torrent app, R-1250)" server=10.77.0.1:5201
Oct 27 13:40:45 demo-hp felhom-agent[1156735]: time=2026-10-27T13:40:45.982+01:00 level=INFO msg="linetest: run 1: 94.5 Mbit/s" server=10.77.0.1:5201 server_bytes=118751232 server_seconds=10.050698
Oct 27 13:41:01 demo-hp felhom-agent[1156735]: time=2026-10-27T13:41:01.335+01:00 level=INFO msg="linetest: run 2: 93.4 Mbit/s" server=10.77.0.1:5201 server_bytes=117440512 server_seconds=10.053919
Oct 27 13:41:16 demo-hp felhom-agent[1156735]: time=2026-10-27T13:41:16.678+01:00 level=INFO msg="linetest: run 3: 94.4 Mbit/s" server=10.77.0.1:5201 server_bytes=118620160 server_seconds=10.053608
Oct 27 13:41:16 demo-hp felhom-agent[1156735]: time=2026-10-27T13:41:16.678+01:00 level=INFO msg="linetest: upload line measured: 94.5 Mbit/s (best of 3)" server=10.77.0.1:5201 runs=3 duration_s=41.067967365
Oct 27 13:48:28 demo-hp felhom-agent[3482565]: time=2026-10-27T13:48:28.849+01:00 level=INFO msg="linetest: weekly upload line test starting" schedule="weekly, due Tuesday from 10:00 host-local time; starts 10:00-15:59 after 10 quiet minutes; never beside a backup, restore-test or update" slot_minute=95
@@ -0,0 +1,19 @@
# demo-hp guest 9201, controller 0.345.1 — the four holds before the fix. SOURCE: the watcher's copies read into the
# CC session at 11:55 and 12:22 CET (the container was replaced by the rc at 13:24 CET, which dropped its log; the
# watcher rewrote its file each minute from the current container). The agent's own journal (agent-demohp-day.txt)
# holds the matching four refusals independently.
2026/10/27 10:36:17 linehold.go:252: [INFO] [upwatch] line test: qbittorrent held at {Bytes:1024 Alt:false Enabled:false KBps:0} (was {Bytes:5898240 Alt:false Enabled:false KBps:0})
2026/10/27 10:36:17 linehold.go:254: [INFO] [upwatch] line test: 1 app(s) held — asking the agent for a test
2026/10/27 10:36:32 linehold.go:187: [INFO] [upwatch] qbittorrent's upload limit is back as it was ({Bytes:5898240 Alt:false Enabled:false KBps:0})
2026/10/27 10:36:32 linehold.go:267: [INFO] [upwatch] line test on request refused by the agent: not-quiet (the uplink sent 4.2 Mbit/s while held)
2026/10/27 10:51:17 linehold.go:252: [INFO] [upwatch] line test: qbittorrent held at {Bytes:1024 Alt:false Enabled:false KBps:0} (was {Bytes:5898240 Alt:false Enabled:false KBps:0})
2026/10/27 10:51:17 linehold.go:254: [INFO] [upwatch] line test: 1 app(s) held — asking the agent for a test
2026/10/27 10:51:32 linehold.go:187: [INFO] [upwatch] qbittorrent's upload limit is back as it was ({Bytes:5898240 Alt:false Enabled:false KBps:0})
2026/10/27 10:51:32 linehold.go:267: [INFO] [upwatch] line test on request refused by the agent: not-quiet (the uplink sent 4.2 Mbit/s while held)
2026/10/27 11:06:17 linehold.go:252: [INFO] [upwatch] line test: qbittorrent held at {Bytes:1024 Alt:false Enabled:false KBps:0} (was {Bytes:5898240 Alt:false Enabled:false KBps:0})
2026/10/27 11:06:17 linehold.go:254: [INFO] [upwatch] line test: 1 app(s) held — asking the agent for a test
2026/10/27 11:06:32 linehold.go:187: [INFO] [upwatch] qbittorrent's upload limit is back as it was ({Bytes:5898240 Alt:false Enabled:false KBps:0})
2026/10/27 11:06:32 linehold.go:267: [INFO] [upwatch] line test on request refused by the agent: not-quiet (the uplink sent 4.0 Mbit/s while held)
2026/10/27 11:21:17 linehold.go:254: [INFO] [upwatch] line test: 1 app(s) held — asking the agent for a test
2026/10/27 11:21:33 linehold.go:187: [INFO] [upwatch] qbittorrent's upload limit is back as it was ({Bytes:5898240 Alt:false Enabled:false KBps:0})
2026/10/27 11:21:33 linehold.go:267: [INFO] [upwatch] line test on request refused by the agent: not-quiet (the uplink sent 4.0 Mbit/s while held)
@@ -0,0 +1,8 @@
2026/10/27 12:24:55 service.go:83: [INFO] [upwatch] the host's weekly line test: 94.4 Mbit/s (measured 2026-10-24T08:00:33Z)
2026/10/27 12:24:55 upwatch_wiring.go:154: [INFO] [upwatch] upload and CPU watch started (line 97 Mbit/s, qBittorrent share 50 %)
2026/10/27 12:39:56 linehold.go:327: [INFO] [upwatch] line test: qbittorrent held at {Bytes:1024 Alt:false Enabled:false KBps:0} (was {Bytes:5898240 Alt:false Enabled:false KBps:0})
2026/10/27 12:39:56 linehold.go:329: [INFO] [upwatch] line test: 1 app(s) held — asking the agent for a test
2026/10/27 12:40:20 linehold.go:261: [INFO] [upwatch] line test: the held app(s) slowed down after 22s — asking the agent
2026/10/27 12:41:17 linehold.go:192: [INFO] [upwatch] qbittorrent's upload limit is back as it was ({Bytes:5898240 Alt:false Enabled:false KBps:0})
2026/10/27 12:41:17 linehold.go:340: [INFO] [upwatch] line test on request: 94.5 Mbit/s
2026/10/27 12:41:17 service.go:83: [INFO] [upwatch] the host's weekly line test: 94.5 Mbit/s (measured 2026-10-27T12:40:35Z)
Whitespace-only changes.
@@ -0,0 +1,6 @@
{"added_torrent_ids":["8828f12fe7899fa6a8a1c4994c26f11ae19eb6fa"],"failure_count":0,"pending_count":0,"success_count":1}
{"8828f12fe7899fa6a8a1c4994c26f11ae19eb6fa":{"added":1,"failed":0}}
cap 500000 B/s at 08:26:26
paused 09:21:08 — demo-hp's slot_minute=95 (11:35 CET); resume 10:15Z
resumed 10:15:22
re-added 11:09:31 for the buffer measurement
@@ -0,0 +1,6 @@
total 0
0 -rw-r--r-- 1 1000 1000 3221225472 Oct 27 06:53 r1250-seed.bin
addTask: {"taskID":"0a6c300e-631b-4b47-8df3-f74e5b74a6f1"}
creator: "pieceSize":1048576 "status":"Finished"
torrent r1250-seed.bin 8828f12fe7899fa6a8a1c4994c26f11ae19eb6fa checkingResumeData size 3221225472 private True
172.18.0.17
@@ -0,0 +1,6 @@
deploy-fields: 200 [('DOMAIN', 'domain', True), ('SUBDOMAIN', 'subdomain', True), ('HDD_PATH', 'path', True), ('QBT_ADMIN_PASSWORD', 'password', True)]
07:52:19 [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['HDD_PATH', 'QBT_ADMIN_PASSWORD']
07:52:19 [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'}
07:52:35 [1] deployed, controller state=running, pinned={'qbittorrent': 'qbittorrentofficial/qbittorrent-nox:5.2.4-1'}
deployed: True
answers: True
@@ -0,0 +1,64 @@
previous up_limit=5898240
11:27:32 set up_limit=1024: ok
11:27:33 t=1s ctr=4929kbit limit=1024 speed=3.01
11:27:34 t=2s ctr=0kbit limit=1024 speed=3.01
11:27:35 t=3s ctr=11082kbit limit=1024 speed=5.50
11:27:36 t=4s ctr=6573kbit limit=1024 speed=1.83
11:27:38 t=5s ctr=2870kbit limit=1024 speed=6.03
11:27:39 t=6s ctr=8351kbit limit=1024 speed=5.33
11:27:40 t=7s ctr=2865kbit limit=1024 speed=5.33
11:27:41 t=8s ctr=0kbit limit=1024 speed=1.83
11:27:42 t=9s ctr=8765kbit limit=1024 speed=5.59
11:27:44 t=10s ctr=5462kbit limit=1024 speed=3.49
11:27:45 t=11s ctr=4937kbit limit=1024 speed=3.15
11:27:46 t=12s ctr=5882kbit limit=1024 speed=3.15
11:27:47 t=13s ctr=2455kbit limit=1024 speed=3.76
11:27:49 t=14s ctr=0kbit limit=1024 speed=1.56
11:27:50 t=15s ctr=0kbit limit=1024 speed=0.00
11:27:51 t=16s ctr=0kbit limit=1024 speed=0.00
11:27:52 t=17s ctr=0kbit limit=1024 speed=0.00
11:27:53 t=18s ctr=0kbit limit=1024 speed=0.00
11:27:55 t=19s ctr=0kbit limit=1024 speed=0.00
11:27:56 t=20s ctr=107kbit limit=1024 speed=0.07
11:27:57 t=21s ctr=0kbit limit=1024 speed=0.00
11:27:58 t=22s ctr=0kbit limit=1024 speed=0.00
11:28:00 t=23s ctr=0kbit limit=1024 speed=0.00
11:28:01 t=24s ctr=0kbit limit=1024 speed=0.00
11:28:02 t=25s ctr=0kbit limit=1024 speed=0.00
11:28:03 t=26s ctr=0kbit limit=1024 speed=0.00
11:28:04 t=27s ctr=0kbit limit=1024 speed=0.00
11:28:06 t=28s ctr=85kbit limit=1024 speed=0.05
11:28:07 t=29s ctr=0kbit limit=1024 speed=0.05
11:28:08 t=30s ctr=0kbit limit=1024 speed=0.00
11:28:09 t=31s ctr=0kbit limit=1024 speed=0.00
11:28:11 t=32s ctr=0kbit limit=1024 speed=0.00
11:28:12 t=33s ctr=0kbit limit=1024 speed=0.00
11:28:13 t=34s ctr=0kbit limit=1024 speed=0.00
11:28:14 t=35s ctr=0kbit limit=1024 speed=0.00
11:28:15 t=36s ctr=85kbit limit=1024 speed=0.00
11:28:17 t=37s ctr=13kbit limit=1024 speed=0.05
11:28:18 t=38s ctr=0kbit limit=1024 speed=0.00
11:28:19 t=39s ctr=0kbit limit=1024 speed=0.00
11:28:20 t=40s ctr=0kbit limit=1024 speed=0.00
11:28:22 t=41s ctr=0kbit limit=1024 speed=0.00
11:28:23 t=42s ctr=0kbit limit=1024 speed=0.00
11:28:24 t=43s ctr=0kbit limit=1024 speed=0.00
11:28:25 t=44s ctr=1kbit limit=1024 speed=0.05
11:28:26 t=45s ctr=85kbit limit=1024 speed=0.05
11:28:28 t=46s ctr=0kbit limit=1024 speed=0.00
11:28:29 t=47s ctr=0kbit limit=1024 speed=0.00
11:28:30 t=48s ctr=0kbit limit=1024 speed=0.00
11:28:31 t=49s ctr=0kbit limit=1024 speed=0.00
11:28:33 t=50s ctr=0kbit limit=1024 speed=0.00
11:28:34 t=51s ctr=0kbit limit=1024 speed=0.00
11:28:35 t=52s ctr=0kbit limit=1024 speed=0.00
11:28:36 t=53s ctr=85kbit limit=1024 speed=0.05
11:28:37 t=54s ctr=0kbit limit=1024 speed=0.00
11:28:39 t=55s ctr=0kbit limit=1024 speed=0.00
11:28:40 t=56s ctr=0kbit limit=1024 speed=0.00
11:28:41 t=57s ctr=0kbit limit=1024 speed=0.00
11:28:42 t=58s ctr=0kbit limit=1024 speed=0.00
11:28:44 t=59s ctr=0kbit limit=1024 speed=0.00
11:28:45 t=60s ctr=0kbit limit=1024 speed=0.00
11:28:45 put back up_limit=5898240: ok
after: limit=5898240 speed=0.55
@@ -0,0 +1,4 @@
08:25:21 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=0.00Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
{
"last_ok_at": "2026-10-24T08:00:33.132515698Z",
"mbps": 94.38232008767471,
@@ -0,0 +1,35 @@
11:21:08 rate_limit=5898240 up_speed=4.98Mbit
11:21:09 rate_limit=5898240 up_speed=4.98Mbit
11:21:09 rate_limit=5898240 up_speed=4.98Mbit
11:21:09 rate_limit=5898240 up_speed=3.59Mbit
11:21:10 rate_limit=5898240 up_speed=3.59Mbit
11:21:10 rate_limit=5898240 up_speed=3.59Mbit
11:21:11 rate_limit=5898240 up_speed=3.05Mbit
11:21:11 rate_limit=5898240 up_speed=3.05Mbit
11:21:12 rate_limit=5898240 up_speed=3.05Mbit
11:21:12 rate_limit=5898240 up_speed=2.69Mbit
11:21:13 rate_limit=5898240 up_speed=2.69Mbit
11:21:13 rate_limit=5898240 up_speed=2.69Mbit
11:21:14 rate_limit=5898240 up_speed=4.38Mbit
11:21:14 rate_limit=5898240 up_speed=4.38Mbit
11:21:15 rate_limit=5898240 up_speed=4.38Mbit
11:21:15 rate_limit=5898240 up_speed=5.68Mbit
11:21:16 rate_limit=5898240 up_speed=5.68Mbit
11:21:16 rate_limit=5898240 up_speed=5.68Mbit
11:21:17 rate_limit=5898240 up_speed=5.30Mbit
11:21:17 rate_limit=1024 up_speed=5.30Mbit
11:21:18 rate_limit=1024 up_speed=5.30Mbit
11:21:18 rate_limit=1024 up_speed=1.80Mbit
11:21:19 rate_limit=1024 up_speed=1.80Mbit
11:21:19 rate_limit=1024 up_speed=1.80Mbit
11:21:20 rate_limit=1024 up_speed=5.58Mbit
11:21:20 rate_limit=1024 up_speed=5.58Mbit
11:21:21 rate_limit=1024 up_speed=5.58Mbit
11:21:21 rate_limit=1024 up_speed=3.58Mbit
11:21:22 rate_limit=1024 up_speed=3.58Mbit
11:21:22 rate_limit=1024 up_speed=3.58Mbit
11:21:23 rate_limit=1024 up_speed=3.06Mbit
11:21:23 rate_limit=1024 up_speed=3.06Mbit
11:21:24 rate_limit=1024 up_speed=3.06Mbit
11:21:24 rate_limit=1024 up_speed=5.32Mbit
11:21:25 rate_limit=1024 up_speed=5.32Mbit
@@ -0,0 +1,19 @@
2026/10/27 12:24:55 service.go:83: [INFO] [upwatch] the host's weekly line test: 94.4 Mbit/s (measured 2026-10-24T08:00:33Z)
2026/10/27 12:24:55 upwatch_wiring.go:154: [INFO] [upwatch] upload and CPU watch started (line 97 Mbit/s, qBittorrent share 50 %)
2026/10/27 12:39:56 linehold.go:327: [INFO] [upwatch] line test: qbittorrent held at {Bytes:1024 Alt:false Enabled:false KBps:0} (was {Bytes:5898240 Alt:false Enabled:false KBps:0})
2026/10/27 12:39:56 linehold.go:329: [INFO] [upwatch] line test: 1 app(s) held — asking the agent for a test
2026/10/27 12:40:20 linehold.go:261: [INFO] [upwatch] line test: the held app(s) slowed down after 22s — asking the agent
2026/10/27 12:41:17 linehold.go:192: [INFO] [upwatch] qbittorrent's upload limit is back as it was ({Bytes:5898240 Alt:false Enabled:false KBps:0})
2026/10/27 12:41:17 linehold.go:340: [INFO] [upwatch] line test on request: 94.5 Mbit/s
2026/10/27 12:41:17 service.go:83: [INFO] [upwatch] the host's weekly line test: 94.5 Mbit/s (measured 2026-10-27T12:40:35Z)
Oct 27 13:40:35 demo-hp felhom-agent[1156735]: time=2026-10-27T13:40:35.610+01:00 level=INFO msg="linetest: test on request (a held torrent app, R-1250)" server=10.77.0.1:5201
Oct 27 13:40:45 demo-hp felhom-agent[1156735]: time=2026-10-27T13:40:45.982+01:00 level=INFO msg="linetest: run 1: 94.5 Mbit/s" server=10.77.0.1:5201 server_bytes=118751232 server_seconds=10.050698
Oct 27 13:41:01 demo-hp felhom-agent[1156735]: time=2026-10-27T13:41:01.335+01:00 level=INFO msg="linetest: run 2: 93.4 Mbit/s" server=10.77.0.1:5201 server_bytes=117440512 server_seconds=10.053919
Oct 27 13:41:16 demo-hp felhom-agent[1156735]: time=2026-10-27T13:41:16.678+01:00 level=INFO msg="linetest: run 3: 94.4 Mbit/s" server=10.77.0.1:5201 server_bytes=118620160 server_seconds=10.053608
Oct 27 13:41:16 demo-hp felhom-agent[1156735]: time=2026-10-27T13:41:16.678+01:00 level=INFO msg="linetest: upload line measured: 94.5 Mbit/s (best of 3)" server=10.77.0.1:5201 runs=3 duration_s=41.067967365
{
"last_ok_at": "2026-10-27T12:40:35.610771254Z",
"mbps": 94.5217790843979,
"runs_mbps": [
[exited with code 0]
@@ -0,0 +1,52 @@
### 1: no waitDrained call
=== RUN TestR1250_TheAgentIsAskedOnlyAfterTheHeldAppSlowedDown
linehold_r1250_drain_test.go:40: the agent was asked after 0 speed readings, want 7 — only after two quiet readings in a row
--- FAIL: TestR1250_TheAgentIsAskedOnlyAfterTheHeldAppSlowedDown (0.00s)
=== RUN TestR1250_EveryHeldAppMustSlowDown
linehold_r1250_drain_test.go:66: asked 1 time(s) with 0 transmission reading(s), want once and after its two quiet readings (5)
--- FAIL: TestR1250_EveryHeldAppMustSlowDown (0.00s)
=== RUN TestR1250_AnAppThatNeverSlowsIsAskedAboutAfterTheMaximum
linehold_r1250_drain_test.go:78: asked 1 time(s) after 0s, want once after 1m30s
--- FAIL: TestR1250_AnAppThatNeverSlowsIsAskedAboutAfterTheMaximum (0.00s)
=== RUN TestR1250_AnUnreadableSpeedGetsTheFallbackWait
linehold_r1250_drain_test.go:93: asked 1 time(s) after 0s, want once after 20s
--- FAIL: TestR1250_AnUnreadableSpeedGetsTheFallbackWait (0.00s)
=== RUN TestR1250_UploadRateReadsTheAppsOwnSpeed
--- PASS: TestR1250_UploadRateReadsTheAppsOwnSpeed (0.00s)
FAIL
FAIL gitea.dooplex.hu/admin/felhom-controller/internal/upwatch 0.010s
FAIL
### 2: only the first app read
=== RUN TestR1250_TheAgentIsAskedOnlyAfterTheHeldAppSlowedDown
--- PASS: TestR1250_TheAgentIsAskedOnlyAfterTheHeldAppSlowedDown (0.00s)
=== RUN TestR1250_EveryHeldAppMustSlowDown
linehold_r1250_drain_test.go:66: asked 1 time(s) with 0 transmission reading(s), want once and after its two quiet readings (5)
--- FAIL: TestR1250_EveryHeldAppMustSlowDown (0.00s)
=== RUN TestR1250_AnAppThatNeverSlowsIsAskedAboutAfterTheMaximum
--- PASS: TestR1250_AnAppThatNeverSlowsIsAskedAboutAfterTheMaximum (0.00s)
=== RUN TestR1250_AnUnreadableSpeedGetsTheFallbackWait
--- PASS: TestR1250_AnUnreadableSpeedGetsTheFallbackWait (0.00s)
=== RUN TestR1250_UploadRateReadsTheAppsOwnSpeed
--- PASS: TestR1250_UploadRateReadsTheAppsOwnSpeed (0.00s)
FAIL
FAIL gitea.dooplex.hu/admin/felhom-controller/internal/upwatch 0.008s
FAIL
### 3: no fallback wait on a read error
=== RUN TestR1250_TheAgentIsAskedOnlyAfterTheHeldAppSlowedDown
--- PASS: TestR1250_TheAgentIsAskedOnlyAfterTheHeldAppSlowedDown (0.00s)
=== RUN TestR1250_EveryHeldAppMustSlowDown
--- PASS: TestR1250_EveryHeldAppMustSlowDown (0.00s)
=== RUN TestR1250_AnAppThatNeverSlowsIsAskedAboutAfterTheMaximum
--- PASS: TestR1250_AnAppThatNeverSlowsIsAskedAboutAfterTheMaximum (0.00s)
=== RUN TestR1250_AnUnreadableSpeedGetsTheFallbackWait
linehold_r1250_drain_test.go:93: asked 1 time(s) after 0s, want once after 20s
--- FAIL: TestR1250_AnUnreadableSpeedGetsTheFallbackWait (0.00s)
=== RUN TestR1250_UploadRateReadsTheAppsOwnSpeed
--- PASS: TestR1250_UploadRateReadsTheAppsOwnSpeed (0.00s)
FAIL
FAIL gitea.dooplex.hu/admin/felhom-controller/internal/upwatch 0.010s
FAIL
### 4: no drainMax (expect a hang → timeout)
panic: test timed out after 10s
FAIL gitea.dooplex.hu/admin/felhom-controller/internal/upwatch 10.012s
FAIL
@@ -0,0 +1,255 @@
08:27:16 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=3.49Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
08:28:20 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=3.76Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
08:29:24 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=2.97Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
08:30:28 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=5.33Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
08:31:32 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=4.03Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
08:32:36 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=8.65Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
08:33:40 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=3.49Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
08:34:44 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=3.24Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
08:35:48 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=0.13Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
08:36:51 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=3.31Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
08:37:55 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=6.72Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
08:38:59 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=5.07Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
08:40:03 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=2.76Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
08:41:07 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=4.20Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
08:42:11 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=7.17Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
08:43:15 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=3.24Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
08:44:19 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=3.58Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
08:45:23 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=3.14Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
08:46:27 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=3.83Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
08:47:31 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=1.92Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
08:48:35 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=3.23Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
08:49:39 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=2.88Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
08:50:43 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=4.99Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
08:51:47 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=4.20Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
08:52:51 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=2.89Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
08:53:55 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=5.59Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
08:54:59 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=0.00Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
08:56:03 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=4.70Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
08:57:07 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=7.17Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
08:58:11 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=6.81Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
08:59:15 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=1.83Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
09:00:19 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=7.07Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
09:01:24 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=0.00Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
09:02:28 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=3.59Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
09:03:32 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=6.43Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
09:04:36 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=3.93Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
09:05:40 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=2.97Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
09:06:44 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=4.89Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
09:07:48 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=5.07Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
09:08:52 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=3.32Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
09:09:56 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=0.00Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
09:11:00 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=3.75Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
09:12:04 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=6.11Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
09:13:08 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=1.83Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
09:14:12 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=3.93Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
09:15:16 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=3.23Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
09:16:20 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=8.21Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
09:17:25 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=3.50Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
09:18:29 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=6.98Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
09:19:33 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=3.24Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
09:20:36 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=5.07Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
09:21:40 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=0.00Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
09:22:44 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=0.00Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
09:23:48 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=0.00Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
09:24:52 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=0.00Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
09:25:57 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=0.00Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
09:27:01 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=0.00Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
09:28:05 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=0.00Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
09:29:09 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=0.00Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
09:30:13 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=0.00Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
09:31:17 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=0.00Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
09:32:21 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=0.00Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
09:33:26 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=0.00Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
09:34:30 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=0.00Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
09:35:34 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=0.00Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
09:36:38 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=0.00Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
09:37:42 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=0.00Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
09:38:46 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=0.00Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
09:39:50 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=0.00Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
09:40:54 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=0.00Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
09:41:59 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=0.00Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
09:43:03 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=0.00Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
09:44:07 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=0.00Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
09:45:11 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=0.00Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
09:46:15 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=0.00Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
09:47:19 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=0.00Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
09:48:24 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=0.00Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
09:49:28 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=0.00Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
09:50:32 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=0.00Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
09:51:36 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=0.00Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
09:52:40 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=0.00Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
09:53:45 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=0.00Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
09:54:49 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=0.00Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
09:55:53 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=0.00Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
09:56:57 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=0.00Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
09:58:01 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=0.00Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
09:59:05 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=0.00Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
10:00:09 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=0.00Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
10:01:14 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=0.00Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
10:02:18 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=0.00Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
10:03:22 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=0.00Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
10:04:26 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=0.00Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
10:05:31 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=0.00Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
10:06:35 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=0.00Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
10:07:39 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=0.00Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
10:08:43 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=0.00Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
10:09:47 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=0.00Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
10:10:52 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=0.00Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
10:11:56 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=0.00Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
10:13:00 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=0.00Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
10:14:04 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=0.00Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
10:15:09 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=0.00Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
10:16:13 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=4.02Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
10:17:17 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=5.25Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
10:18:21 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=6.96Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
10:19:26 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=6.59Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
10:20:30 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=5.15Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
10:21:34 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=2.71Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
10:22:39 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=4.02Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
10:23:43 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=3.40Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
10:24:47 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=3.94Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
10:25:51 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=4.95Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
10:26:56 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=0.00Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
10:28:00 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=3.76Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
10:29:04 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=6.98Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
10:30:08 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=3.93Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
10:31:13 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=3.13Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
10:32:17 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=5.07Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
10:33:21 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=4.87Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
10:34:26 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=0.00Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
10:35:30 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=3.75Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
10:36:34 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=0.00Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
10:37:38 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=4.96Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
10:38:43 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=5.07Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
10:39:47 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=3.15Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
10:40:51 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=3.49Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
10:41:56 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=4.98Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
10:43:00 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=2.62Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
10:44:04 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=4.27Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
10:45:08 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=5.69Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
10:46:13 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=2.97Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
10:47:17 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=6.12Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
10:48:21 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=5.06Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
10:49:26 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=1.66Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
10:50:30 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=3.94Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
10:51:34 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=3.68Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
10:52:39 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=3.58Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
10:53:43 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=4.89Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
10:54:47 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=2.79Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
10:55:52 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=3.66Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
10:56:56 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=6.73Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
10:58:01 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=3.33Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
10:59:05 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=4.72Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
11:00:09 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=2.88Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
11:01:14 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=5.33Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
11:02:18 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=4.11Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
11:03:23 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=3.49Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
11:04:27 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=5.17Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
11:05:31 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=4.02Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
11:06:35 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=4.51Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
11:07:39 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=0.00Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
11:08:43 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=0.00Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
11:09:48 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=2.45Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
11:10:52 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=0.00Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
11:11:57 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=5.06Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
11:13:01 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=6.73Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
11:14:05 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=0.00Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
11:15:09 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=6.81Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
11:16:14 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=3.24Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
11:17:18 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=0.00Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
11:18:23 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=3.58Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
11:19:28 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=5.33Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
11:20:32 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=3.06Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
11:21:36 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=3.91Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
11:22:41 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=8.91Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
11:23:45 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=7.08Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
11:24:50 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=0.00Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
11:25:54 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=4.02Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
11:26:59 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=3.76Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
11:28:03 seeder: up_limit=1024 alt_up_limit=10240 alt_mode=0 up_speed=0.00Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
11:29:07 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=4.72Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
11:30:12 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=0.15Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
11:31:16 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=4.46Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
11:32:21 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=3.92Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
11:33:25 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=3.50Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
11:34:30 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=3.85Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
11:35:35 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=3.41Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
11:36:39 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=3.75Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
11:37:43 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=4.11Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
11:38:48 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=3.58Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
11:39:52 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=7.07Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
11:40:56 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=6.12Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
11:42:01 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=5.86Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
11:43:05 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=3.74Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
11:44:10 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=3.32Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
11:45:14 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=0.00Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
11:46:19 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=4.19Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
11:47:23 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=3.50Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
11:48:28 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=0.00Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
11:49:33 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=5.34Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
11:50:37 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=3.23Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
11:51:42 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=4.81Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
11:52:46 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=1.52Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
11:53:51 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=3.67Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
11:54:55 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=5.33Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
11:55:59 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=3.93Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
11:57:04 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=3.76Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
11:58:08 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=4.02Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
11:59:12 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=4.19Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
12:00:17 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=1.75Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
12:01:21 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=3.76Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
12:02:26 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=5.41Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
12:03:30 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=2.85Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
12:04:35 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=3.33Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
12:05:39 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=1.94Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
12:06:43 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=3.50Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
12:07:48 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=8.31Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
12:08:52 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=0.00Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
12:09:56 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=4.28Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
12:11:01 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=5.15Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
12:12:05 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=4.97Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
12:13:10 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=3.24Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
12:14:14 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=3.50Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
12:15:18 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=4.02Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
12:16:23 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=6.57Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
12:17:27 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=5.15Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
12:18:32 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=3.68Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
12:19:37 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=7.16Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
12:20:41 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=3.41Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
12:21:45 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=2.65Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
12:22:50 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=1.87Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
12:23:54 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=3.93Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
12:24:58 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=4.10Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
12:26:02 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=2.71Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
12:27:06 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=3.94Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
12:28:10 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=3.41Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
12:29:15 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=5.33Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
12:30:19 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=4.37Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
12:31:23 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=7.08Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
12:32:27 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=6.12Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
12:33:31 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=3.50Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
12:34:35 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=2.80Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
12:35:39 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=3.68Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
12:36:43 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=4.89Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
12:37:47 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=3.58Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
12:38:51 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=3.59Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
12:39:55 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=3.93Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
12:41:00 seeder: up_limit=1024 alt_up_limit=10240 alt_mode=0 up_speed=0.00Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
12:42:04 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=7.06Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
12:42:06 TEST DONE — 20 more minutes for the 50 % rule's tick
12:43:08 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=1.42Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
12:44:12 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=6.92Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
12:45:16 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=4.89Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
12:46:20 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=2.62Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
12:47:24 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=3.91Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
12:48:28 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=3.34Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
12:49:34 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=6.82Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
12:50:38 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=4.11Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
12:51:42 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=4.98Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
12:52:46 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=8.21Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
12:53:50 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=2.80Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
12:54:54 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=5.07Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
12:55:59 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=2.98Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
12:57:03 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=0.00Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
12:58:07 seeder: up_limit=5898240 alt_up_limit=10240 alt_mode=0 up_speed=3.59Mbit | ctl: upwatch={"line": [{"at": "2026-10-25T03:17:47Z", "peak10_mbps": 7.54, "bytes": 18588326, "seconds": 46, "counts": false}, {"at": "2026-10-26T03:17:56Z", "peak10_mbps": 5.99, "bytes": 17694322, "seconds": 55, "counts": false}, {"at": "2026-10-27T03:18:41Z", "peak10_mbps": 97.21, "bytes": 169114983, "seconds": 82, "counts": true}], "qb_limit": {"box_set_bytes": 5898240, "line_mbps": 94.38232008767471, "set_
@@ -0,0 +1,45 @@
11:21:08 ctr_tx=3720430734 guest_tx=4191329811
11:21:09 ctr_tx=3721161419 guest_tx=4192048156
11:21:10 ctr_tx=3721803031 guest_tx=4192678300
11:21:11 ctr_tx=3721803031 guest_tx=4192678639
11:21:12 ctr_tx=3722329245 guest_tx=4193201516
11:21:13 ctr_tx=3723186755 guest_tx=4194078439
11:21:14 ctr_tx=3724033016 guest_tx=4194917738
11:21:15 ctr_tx=3724376145 guest_tx=4195269350
11:21:16 ctr_tx=3724376145 guest_tx=4195269699
11:21:17 ctr_tx=3725419455 guest_tx=4196340083
11:21:18 ctr_tx=3725771666 guest_tx=4196690340
11:21:19 ctr_tx=3725771666 guest_tx=4196704446
11:21:20 ctr_tx=3726885998 guest_tx=4197824018
11:21:21 ctr_tx=3727569177 guest_tx=4198522946
11:21:22 ctr_tx=3728167648 guest_tx=4199135443
11:21:23 ctr_tx=3728167648 guest_tx=4199135692
11:21:24 ctr_tx=3729251591 guest_tx=4200237966
11:21:25 ctr_tx=3729577628 guest_tx=4200571609
11:21:26 ctr_tx=3730433281 guest_tx=4201446511
11:21:27 ctr_tx=3730757142 guest_tx=4201777963
11:21:28 ctr_tx=3730757142 guest_tx=4201778402
11:21:29 ctr_tx=3731854062 guest_tx=4202899979
11:21:30 ctr_tx=3732403419 guest_tx=4203462274
11:21:31 ctr_tx=3733079530 guest_tx=4204127706
11:21:32 ctr_tx=3733079530 guest_tx=4204128145
11:21:33 ctr_tx=3734045673 guest_tx=4205107863
11:21:34 ctr_tx=3734049230 guest_tx=4205108131
11:21:35 ctr_tx=3734620537 guest_tx=4205692808
11:21:36 ctr_tx=3735383082 guest_tx=4206472874
11:21:37 ctr_tx=3735383082 guest_tx=4206473301
11:21:38 ctr_tx=3736361579 guest_tx=4207452416
11:21:39 ctr_tx=3737096572 guest_tx=4208204190
11:21:40 ctr_tx=3737787526 guest_tx=4208887884
11:21:41 ctr_tx=3737787658 guest_tx=4208888394
11:21:42 ctr_tx=3738495267 guest_tx=4209587505
11:21:43 ctr_tx=3739333599 guest_tx=4210445029
11:21:44 ctr_tx=3739333599 guest_tx=4210445463
11:21:45 ctr_tx=3740103138 guest_tx=4211232933
11:21:46 ctr_tx=3740694338 guest_tx=4211828555
11:21:47 ctr_tx=3740694338 guest_tx=4211828899
11:21:48 ctr_tx=3741686134 guest_tx=4212843181
11:21:49 ctr_tx=3742405075 guest_tx=4213578722
11:21:50 ctr_tx=3743067504 guest_tx=4214244964
11:21:51 ctr_tx=3743067504 guest_tx=4214245396
11:21:52 ctr_tx=3743768303 guest_tx=4214962364
@@ -0,0 +1,150 @@
11:05:45 ctr_tx=3313871257 guest_tx=3777840176
11:05:46 ctr_tx=3314487726 guest_tx=3778471133
11:05:47 ctr_tx=3314487726 guest_tx=3778471477
11:05:48 ctr_tx=3315497309 guest_tx=3779504388
11:05:49 ctr_tx=3316198893 guest_tx=3780222432
11:05:50 ctr_tx=3316198893 guest_tx=3780222851
11:05:51 ctr_tx=3316884725 guest_tx=3780924993
11:05:52 ctr_tx=3317569183 guest_tx=3781625913
11:05:53 ctr_tx=3318390305 guest_tx=3782466273
11:05:54 ctr_tx=3318390305 guest_tx=3782467595
11:05:55 ctr_tx=3319178173 guest_tx=3783273791
11:05:56 ctr_tx=3319743674 guest_tx=3783852666
11:05:57 ctr_tx=3319743674 guest_tx=3783853052
11:05:58 ctr_tx=3320754016 guest_tx=3784886756
11:05:59 ctr_tx=3321113058 guest_tx=3785254370
11:06:00 ctr_tx=3321113100 guest_tx=3785254780
11:06:01 ctr_tx=3322192604 guest_tx=3786359369
11:06:02 ctr_tx=3322859502 guest_tx=3787041987
11:06:03 ctr_tx=3323476191 guest_tx=3787673254
11:06:04 ctr_tx=3323476191 guest_tx=3787673508
11:06:05 ctr_tx=3324845825 guest_tx=3789075323
11:06:06 ctr_tx=3324845825 guest_tx=3789075577
11:06:07 ctr_tx=3325685101 guest_tx=3789934597
11:06:08 ctr_tx=3326010790 guest_tx=3790267978
11:06:09 ctr_tx=3326010790 guest_tx=3790268496
11:06:10 ctr_tx=3327071817 guest_tx=3791354051
11:06:11 ctr_tx=3327619583 guest_tx=3791914797
11:06:12 ctr_tx=3328252881 guest_tx=3792562901
11:06:13 ctr_tx=3328252881 guest_tx=3792563335
11:06:14 ctr_tx=3329193887 guest_tx=3793525981
11:06:15 ctr_tx=3329827027 guest_tx=3794174197
11:06:16 ctr_tx=3330495271 guest_tx=3794857995
11:06:17 ctr_tx=3330501276 guest_tx=3794862021
11:06:18 ctr_tx=3331446550 guest_tx=3795824910
11:06:19 ctr_tx=3332166653 guest_tx=3796575731
11:06:20 ctr_tx=3332166653 guest_tx=3796576217
11:06:21 ctr_tx=3332816688 guest_tx=3797241500
11:06:22 ctr_tx=3333826412 guest_tx=3798274582
11:06:23 ctr_tx=3334220153 guest_tx=3798677723
11:06:24 ctr_tx=3334220153 guest_tx=3798678273
11:06:25 ctr_tx=3335333658 guest_tx=3799817334
11:06:26 ctr_tx=3335333658 guest_tx=3799817666
11:06:27 ctr_tx=3336019176 guest_tx=3800519282
11:06:28 ctr_tx=3336668809 guest_tx=3801184139
11:06:29 ctr_tx=3337387905 guest_tx=3801919994
11:06:30 ctr_tx=3337387905 guest_tx=3801920392
11:06:31 ctr_tx=3338175741 guest_tx=3802726848
11:06:32 ctr_tx=3338644552 guest_tx=3803206672
11:06:33 ctr_tx=3338727332 guest_tx=3803279803
11:06:34 ctr_tx=3339539697 guest_tx=3804111085
11:06:35 ctr_tx=3340550257 guest_tx=3805145250
11:06:36 ctr_tx=3340550257 guest_tx=3805145945
11:06:37 ctr_tx=3341252097 guest_tx=3805864252
11:06:38 ctr_tx=3341902119 guest_tx=3806529666
11:06:39 ctr_tx=3342588273 guest_tx=3807232481
11:06:40 ctr_tx=3342588273 guest_tx=3807232730
11:06:41 ctr_tx=3343391916 guest_tx=3808055025
11:06:42 ctr_tx=3344163034 guest_tx=3808844151
11:06:43 ctr_tx=3344727879 guest_tx=3809422306
11:06:44 ctr_tx=3344727879 guest_tx=3809422638
11:06:45 ctr_tx=3345703537 guest_tx=3810420988
11:06:46 ctr_tx=3345703537 guest_tx=3810421386
11:06:47 ctr_tx=3346422666 guest_tx=3811157452
11:06:48 ctr_tx=3347039295 guest_tx=3811788649
11:06:49 ctr_tx=3347740853 guest_tx=3812506865
11:06:50 ctr_tx=3347740853 guest_tx=3812507376
11:06:51 ctr_tx=3348510332 guest_tx=3813294852
11:06:52 ctr_tx=3349281337 guest_tx=3814083738
11:06:53 ctr_tx=3349829152 guest_tx=3814644484
11:06:54 ctr_tx=3349829152 guest_tx=3814644887
11:06:55 ctr_tx=3350787682 guest_tx=3815625808
11:06:56 ctr_tx=3351490003 guest_tx=3816344392
11:06:57 ctr_tx=3352106613 guest_tx=3816975651
11:06:58 ctr_tx=3352106613 guest_tx=3816975942
11:06:59 ctr_tx=3353116754 guest_tx=3818009581
11:07:00 ctr_tx=3353116796 guest_tx=3818009918
11:07:01 ctr_tx=3353817760 guest_tx=3818727406
11:07:02 ctr_tx=3354502861 guest_tx=3819428484
11:07:03 ctr_tx=3355188640 guest_tx=3820130356
11:07:04 ctr_tx=3355188640 guest_tx=3820131009
11:07:05 ctr_tx=3356009234 guest_tx=3820970756
11:07:06 ctr_tx=3356796965 guest_tx=3821776742
11:07:07 ctr_tx=3356796965 guest_tx=3821777159
11:07:08 ctr_tx=3357362583 guest_tx=3822356060
11:07:09 ctr_tx=3358373252 guest_tx=3823389926
11:07:10 ctr_tx=3358732029 guest_tx=3823757310
11:07:11 ctr_tx=3358732029 guest_tx=3823757661
11:07:12 ctr_tx=3359810599 guest_tx=3824861218
11:07:13 ctr_tx=3360478431 guest_tx=3825544735
11:07:14 ctr_tx=3360478431 guest_tx=3825545970
11:07:15 ctr_tx=3361095665 guest_tx=3826177788
11:07:16 ctr_tx=3361095665 guest_tx=3826178120
11:07:17 ctr_tx=3362466441 guest_tx=3827579026
11:07:18 ctr_tx=3362466441 guest_tx=3827579358
11:07:19 ctr_tx=3363305362 guest_tx=3828437977
11:07:20 ctr_tx=3363630069 guest_tx=3828770462
11:07:21 ctr_tx=3363630069 guest_tx=3828770884
11:07:22 ctr_tx=3364692510 guest_tx=3829857745
11:07:23 ctr_tx=3365239269 guest_tx=3830417406
11:07:24 ctr_tx=3365873417 guest_tx=3831066529
11:07:25 ctr_tx=3365873549 guest_tx=3831066885
11:07:26 ctr_tx=3366815697 guest_tx=3832030595
11:07:27 ctr_tx=3367448221 guest_tx=3832678035
11:07:28 ctr_tx=3368050637 guest_tx=3833294485
11:07:29 ctr_tx=3368050637 guest_tx=3833294907
11:07:30 ctr_tx=3368050699 guest_tx=3833295301
11:07:31 ctr_tx=3368050741 guest_tx=3833295699
11:07:32 ctr_tx=3368050741 guest_tx=3833296097
11:07:33 ctr_tx=3368050741 guest_tx=3833296453
11:07:34 ctr_tx=3368050741 guest_tx=3833297173
11:07:35 ctr_tx=3368050741 guest_tx=3833297529
11:07:36 ctr_tx=3368050741 guest_tx=3833297861
11:07:37 ctr_tx=3368052169 guest_tx=3833298217
11:07:38 ctr_tx=3368052169 guest_tx=3833298712
11:07:39 ctr_tx=3368052169 guest_tx=3833299134
11:07:40 ctr_tx=3368052169 guest_tx=3833299466
11:07:41 ctr_tx=3368052169 guest_tx=3833299906
11:07:42 ctr_tx=3368052169 guest_tx=3833300238
11:07:43 ctr_tx=3368052169 guest_tx=3833300594
11:07:44 ctr_tx=3368052169 guest_tx=3833300992
11:07:45 ctr_tx=3368052301 guest_tx=3833301348
11:07:46 ctr_tx=3368052301 guest_tx=3833301680
11:07:47 ctr_tx=3368052301 guest_tx=3833302102
11:07:48 ctr_tx=3368052301 guest_tx=3833302434
11:07:49 ctr_tx=3368052301 guest_tx=3833303522
11:07:50 ctr_tx=3368052301 guest_tx=3833303942
11:07:51 ctr_tx=3368052301 guest_tx=3833304381
11:07:52 ctr_tx=3368052301 guest_tx=3833304801
11:07:53 ctr_tx=3368052301 guest_tx=3833305240
11:07:54 ctr_tx=3368052301 guest_tx=3833305726
11:07:55 ctr_tx=3368052301 guest_tx=3833306249
11:07:56 ctr_tx=3368052301 guest_tx=3833306669
11:07:57 ctr_tx=3368052301 guest_tx=3833307174
11:07:58 ctr_tx=3368052301 guest_tx=3833307506
11:07:59 ctr_tx=3368052301 guest_tx=3833307948
11:08:01 ctr_tx=3368052301 guest_tx=3833308285
11:08:02 ctr_tx=3368052301 guest_tx=3833308636
11:08:03 ctr_tx=3368052301 guest_tx=3833309181
11:08:04 ctr_tx=3368052301 guest_tx=3833309532
11:08:05 ctr_tx=3368052301 guest_tx=3833309935
11:08:06 ctr_tx=3368052301 guest_tx=3833310286
11:08:07 ctr_tx=3368052301 guest_tx=3833310789
11:08:08 ctr_tx=3368052301 guest_tx=3833311140
11:08:09 ctr_tx=3368052301 guest_tx=3833311477
11:08:10 ctr_tx=3368052301 guest_tx=3833311904
11:08:11 ctr_tx=3368052301 guest_tx=3833312325
11:08:12 ctr_tx=3368052301 guest_tx=3833312718
11:08:13 ctr_tx=3368052301 guest_tx=3833313121
11:08:14 ctr_tx=3368052301 guest_tx=3833313472
11:08:15 ctr_tx=3368052301 guest_tx=3833313875
@@ -0,0 +1,150 @@
11:05:44 nic0_tx=10835385824
11:05:45 nic0_tx=10836105439
11:05:46 nic0_tx=10836737019
11:05:47 nic0_tx=10836745529
11:05:48 nic0_tx=10837779155
11:05:49 nic0_tx=10838505203
11:05:50 nic0_tx=10838513817
11:05:51 nic0_tx=10839230759
11:05:52 nic0_tx=10839947446
11:05:53 nic0_tx=10840795720
11:05:54 nic0_tx=10840798099
11:05:55 nic0_tx=10841604925
11:05:56 nic0_tx=10842186544
11:05:57 nic0_tx=10842304662
11:05:58 nic0_tx=10843594238
11:05:59 nic0_tx=10843595212
11:06:00 nic0_tx=10844052562
11:06:01 nic0_tx=10845391161
11:06:02 nic0_tx=10845392559
11:06:03 nic0_tx=10846024611
11:06:04 nic0_tx=10846025675
11:06:05 nic0_tx=10847428113
11:06:06 nic0_tx=10847429897
11:06:07 nic0_tx=10848297292
11:06:08 nic0_tx=10848631435
11:06:09 nic0_tx=10848633002
11:06:10 nic0_tx=10849719277
11:06:11 nic0_tx=10850295044
11:06:12 nic0_tx=10850943827
11:06:13 nic0_tx=10850952184
11:06:14 nic0_tx=10851915467
11:06:15 nic0_tx=10852564306
11:06:16 nic0_tx=10853248741
11:06:17 nic0_tx=10853270223
11:06:18 nic0_tx=10854260861
11:06:19 nic0_tx=10855034035
11:06:20 nic0_tx=10855057090
11:06:21 nic0_tx=10855736582
11:06:22 nic0_tx=10856777847
11:06:23 nic0_tx=10857181701
11:06:24 nic0_tx=10857183134
11:06:25 nic0_tx=10858322825
11:06:26 nic0_tx=10858329509
11:06:27 nic0_tx=10859033359
11:06:28 nic0_tx=10859698846
11:06:29 nic0_tx=10860435373
11:06:30 nic0_tx=10860436658
11:06:31 nic0_tx=10861257686
11:06:32 nic0_tx=10861738289
11:06:33 nic0_tx=10861819440
11:06:34 nic0_tx=10862657149
11:06:35 nic0_tx=10863691944
11:06:36 nic0_tx=10863701375
11:06:37 nic0_tx=10864433012
11:06:38 nic0_tx=10865101373
11:06:39 nic0_tx=10865804901
11:06:40 nic0_tx=10865805870
11:06:41 nic0_tx=10866636034
11:06:42 nic0_tx=10867425888
11:06:43 nic0_tx=10868004758
11:06:44 nic0_tx=10868005720
11:06:45 nic0_tx=10869004700
11:06:46 nic0_tx=10869005770
11:06:47 nic0_tx=10869749766
11:06:48 nic0_tx=10870381593
11:06:49 nic0_tx=10871107676
11:06:50 nic0_tx=10871121953
11:06:51 nic0_tx=10871925790
11:06:52 nic0_tx=10872725592
11:06:53 nic0_tx=10873291138
11:06:54 nic0_tx=10873292171
11:06:55 nic0_tx=10874273722
11:06:56 nic0_tx=10874996430
11:06:57 nic0_tx=10875632329
11:06:58 nic0_tx=10875633142
11:06:59 nic0_tx=10876667411
11:07:00 nic0_tx=10876668378
11:07:01 nic0_tx=10877393504
11:07:02 nic0_tx=10878095254
11:07:03 nic0_tx=10878797756
11:07:04 nic0_tx=10878799375
11:07:05 nic0_tx=10879639752
11:07:06 nic0_tx=10880446510
11:07:07 nic0_tx=10880454848
11:07:08 nic0_tx=10881034372
11:07:09 nic0_tx=10882068875
11:07:10 nic0_tx=10882447678
11:07:11 nic0_tx=10882452162
11:07:12 nic0_tx=10883563780
11:07:13 nic0_tx=10884247934
11:07:14 nic0_tx=10884249792
11:07:15 nic0_tx=10884882583
11:07:16 nic0_tx=10884883704
11:07:17 nic0_tx=10886299805
11:07:18 nic0_tx=10886306269
11:07:19 nic0_tx=10887172783
11:07:20 nic0_tx=10887521315
11:07:21 nic0_tx=10887536486
11:07:22 nic0_tx=10888631558
11:07:23 nic0_tx=10889191676
11:07:24 nic0_tx=10889841618
11:07:25 nic0_tx=10889842781
11:07:26 nic0_tx=10890814590
11:07:27 nic0_tx=10891462667
11:07:28 nic0_tx=10892079740
11:07:29 nic0_tx=10892080799
11:07:30 nic0_tx=10892094408
11:07:31 nic0_tx=10892096933
11:07:32 nic0_tx=10892105254
11:07:33 nic0_tx=10892106247
11:07:34 nic0_tx=10892107756
11:07:35 nic0_tx=10892108881
11:07:36 nic0_tx=10892109878
11:07:37 nic0_tx=10892118479
11:07:38 nic0_tx=10892124860
11:07:39 nic0_tx=10892126179
11:07:40 nic0_tx=10892139696
11:07:41 nic0_tx=10892147979
11:07:42 nic0_tx=10892151258
11:07:43 nic0_tx=10892152251
11:07:44 nic0_tx=10892153272
11:07:45 nic0_tx=10892154265
11:07:46 nic0_tx=10892162050
11:07:47 nic0_tx=10892163629
11:07:48 nic0_tx=10892164750
11:07:49 nic0_tx=10892176424
11:07:50 nic0_tx=10892196445
11:07:51 nic0_tx=10892206601
11:07:52 nic0_tx=10892219726
11:07:53 nic0_tx=10892220802
11:07:54 nic0_tx=10892221995
11:07:55 nic0_tx=10892223491
11:07:56 nic0_tx=10892231746
11:07:57 nic0_tx=10892232888
11:07:58 nic0_tx=10892233843
11:07:59 nic0_tx=10892234922
11:08:00 nic0_tx=10892242370
11:08:02 nic0_tx=10892243878
11:08:03 nic0_tx=10892245046
11:08:04 nic0_tx=10892246034
11:08:05 nic0_tx=10892247060
11:08:06 nic0_tx=10892248048
11:08:07 nic0_tx=10892249174
11:08:08 nic0_tx=10892257726
11:08:09 nic0_tx=10892258686
11:08:10 nic0_tx=10892259841
11:08:11 nic0_tx=10892275237
11:08:12 nic0_tx=10892276333
11:08:13 nic0_tx=10892284797
11:08:14 nic0_tx=10892285785
@@ -0,0 +1,15 @@
== 11:13:47
-- qbittorrent (container netns), established, port 6881:
-- forwarder (guest netns), established, port 6881:
== 11:13:50
-- qbittorrent (container netns), established, port 6881:
-- forwarder (guest netns), established, port 6881:
== 11:13:53
-- qbittorrent (container netns), established, port 6881:
-- forwarder (guest netns), established, port 6881:
== 11:13:56
-- qbittorrent (container netns), established, port 6881:
-- forwarder (guest netns), established, port 6881:
== 11:13:59
-- qbittorrent (container netns), established, port 6881:
-- forwarder (guest netns), established, port 6881:
@@ -0,0 +1,21 @@
== 1. DooPlex qBittorrent: torrent + data removed
left in the list: []
left on disk: total 8
drwxr-xr-x 2 abc users 4096 Oct 27 13:59 .
drwxrwxrwt 1 root root 4096 Oct 27 12:09 ..
categories: {"prowlarr":{"download_path":null,"inactive_seeding_time_limit":-2,"name":"prowlarr","ratio_limit":-2,"savePath":"","seeding_time_limit":-2,"share_limit_action":"Default","share_limits_mode":"Default"
== 2. forwarder stopped, my seed folder removed (made by hand, not by the product)
0
movies
tv
== 3. app removed through the product
stop: 200
remove: 200 {'ok': True, 'data': {'removed': 'qbittorrent', 'volumes_removed': ['qbittorrent_qbittorrent_config'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'user
== 4. verify: no container, no app.yaml, no volume
0
ls: cannot access '/opt/docker/stacks/qbittorrent/app.yaml': No such file or directory
0
0
/tmp/r1250 removed
0
326 torrents
@@ -0,0 +1,25 @@
#!/bin/bash
# dooplex_qb.sh add|status|remove — R-1250 live test (2026-10-27) only: DooPlex's qBittorrent as the DOWNLOAD-ONLY peer.
# add: the torrent saved to the pod's /tmp/r1250 (never a media folder), its download capped at 375000 B/s (3 Mbit/s,
# above the agent's 2 Mbit/s quiet line), the seed's address given as its peer. remove: the torrent AND its data.
set -u
H=8828f12fe7899fa6a8a1c4994c26f11ae19eb6fa; TOR=$(dirname "$0")/../p8ev/r1250.torrent
P=$(sudo kubectl -n servarr-system get pod -l app=qbittorrent -o name | head -1); P=${P#pod/}
x(){ sudo kubectl -n servarr-system exec "$P" -- "$@"; }
B=http://127.0.0.1:8080/api/v2
case "$1" in
add)
sudo kubectl -n servarr-system cp "$TOR" "$P:/tmp/r1250.torrent" >/dev/null
x curl -s -F torrents=@/tmp/r1250.torrent -F savepath=/tmp/r1250 -F dlLimit=375000 -F category=cc-r1250 $B/torrents/add; echo
sleep 3
x curl -s --data "hashes=$H&limit=375000" $B/torrents/setDownloadLimit; x curl -s --data "hashes=$H&value=0" $B/torrents/setShareLimits >/dev/null 2>&1
x curl -s --data "hashes=$H&peers=192.168.0.155:6881" $B/torrents/addPeers; echo
x rm -f /tmp/r1250.torrent ;;
status)
x curl -s "$B/torrents/info?hashes=$H" | python3 -c 'import json,sys
for t in json.load(sys.stdin): print(t["name"], t["state"], "%.1f%%" % (t["progress"]*100), "dl %.2f Mbit/s" % (t["dlspeed"]*8/1e6), "limit", t["dl_limit"], "seeds", t["num_seeds"], "save", t["save_path"])' ;;
remove)
x curl -s --data "hashes=$H&deleteFiles=true" $B/torrents/delete; sleep 3
echo "left in the list: $(x curl -s "$B/torrents/info?hashes=$H")"; echo "left on disk: $(x sh -c 'ls -la /tmp/r1250 2>&1 | head -3')"
x curl -s "$B/torrents/categories" | grep -q cc-r1250 && x curl -s --data "categories=cc-r1250" $B/torrents/removeCategories; echo "categories: $(x curl -s $B/torrents/categories | head -c 200)" ;;
esac
@@ -0,0 +1,36 @@
# R-1250 live test only (2026-10-27): forward guest 9201's LAN :6881 (TCP and UDP) to its throwaway qBittorrent
# container, so DooPlex's qBittorrent can reach the seed. Started by hand, killed at teardown.
import socket, sys, threading
LAN, DST = sys.argv[1], (sys.argv[2], 6881)
def pipe(a, b):
try:
while True:
d = a.recv(65536)
if not d: break
b.sendall(d)
except OSError: pass
finally:
for s in (a, b):
try: s.shutdown(socket.SHUT_RDWR)
except OSError: pass
def udp():
us = socket.socket(socket.AF_INET, socket.SOCK_DGRAM); us.bind((LAN, 6881)); peers = {}
def back(client, s):
while True:
try: d, _ = s.recvfrom(65536)
except OSError: return
us.sendto(d, client)
while True:
d, client = us.recvfrom(65536)
s = peers.get(client)
if s is None:
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM); s.connect(DST); peers[client] = s
threading.Thread(target=back, args=(client, s), daemon=True).start()
s.send(d)
threading.Thread(target=udp, daemon=True).start()
ls = socket.socket(); ls.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1); ls.bind((LAN, 6881)); ls.listen(16)
while True:
c, _ = ls.accept()
u = socket.create_connection(DST)
threading.Thread(target=pipe, args=(c, u), daemon=True).start()
threading.Thread(target=pipe, args=(u, c), daemon=True).start()
+16
View File
@@ -0,0 +1,16 @@
#!/bin/sh
# gsample.sh — INSIDE guest 9201: one sample of the seeder (its limits, speed) and the controller's line-test records.
Q=/root/r1250/qbg.sh
P=$(sh $Q app/preferences | python3 -c 'import json,sys
try:
d=json.load(sys.stdin); print("up_limit=%s alt_up_limit=%s" % (d.get("up_limit"), d.get("alt_up_limit")))
except Exception as e: print("prefs unreadable")')
M=$(sh $Q transfer/speedLimitsMode)
T=$(sh $Q transfer/info | python3 -c 'import json,sys
try:
d=json.load(sys.stdin); print("up_speed=%.2fMbit" % (d.get("up_info_speed",0)*8/1e6))
except Exception: print("transfer unreadable")')
R=$(python3 -c 'import json
d=json.load(open("/var/lib/docker/volumes/felhom-controller-data/_data/data/settings.json")); u=d.get("upwatch") or {}
print("upwatch=%s" % json.dumps(u)[:400])' 2>&1)
echo "$(date -u +%H:%M:%S) seeder: $P alt_mode=$M $T | ctl: $R"
+19
View File
@@ -0,0 +1,19 @@
#!/bin/sh
# gsetup.sh — INSIDE guest 9201 (R-1250 live test, 2026-10-27): a SPARSE 3 GiB seed file in the throwaway qBittorrent's
# downloads folder, a private torrent of it made by qBittorrent's own creator, its peer settings (fixed port 6881, no
# DHT/PeX/LSD so it talks to the one LAN peer only). Prints the container IP and the torrent's hash. No secret printed.
set -eu
Q=/root/r1250/qbg.sh
D=/mnt/felhom-drives/hdd_1/userdata/media/torrents/r1250
mkdir -p $D; [ -f $D/r1250-seed.bin ] || truncate -s 3G $D/r1250-seed.bin
chown -R 1000:1000 $D 2>/dev/null || true
ls -ls $D
sh $Q app/setPreferences 'json={"listen_port":6881,"upnp":false,"dht":false,"pex":false,"lsd":false,"queueing_enabled":false,"max_connec_per_torrent":20}'
T=$(sh $Q torrentcreator/addTask 'sourcePath=/downloads/r1250/r1250-seed.bin&private=true&startSeeding=true&comment=R-1250 live proof, LAN only')
echo "addTask: $T"; ID=$(echo "$T" | grep -oE '"taskID":"[^"]+"' | cut -d'"' -f4)
i=0; while [ $i -lt 120 ]; do S=$(sh $Q "torrentcreator/status?taskID=$ID"); echo "$S" | grep -q '"Finished"' && break; i=$((i+1)); sleep 2; done
echo "creator: $(echo "$S" | grep -oE '"(status|errorMessage|pieceSize)":[^,]*' | paste -sd' ')"
docker exec qbittorrent sh -c 'ls /config/qBittorrent/BT_backup 2>/dev/null | head' || true
sh $Q torrents/info | python3 -c 'import json,sys
for t in json.load(sys.stdin): print("torrent", t["name"], t["hash"], t["state"], "size", t["size"], "private", t.get("private"))'
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}} {{end}}' qbittorrent
@@ -0,0 +1,12 @@
#!/usr/bin/env python3
"""install_qb.py — Part 8 (R-1250): install a THROWAWAY qBittorrent on demo-hp guest 9201 through the endpoints the UI
invokes (box_walk). usage: SC=<dir with .ctlpw> TARGET=9201 DRIVE_ROOT=/mnt/felhom-drives/hdd_1 python3 -u install_qb.py"""
import os, sys
sys.path.insert(0, "/mnt/5_hdd/felhom.eu/git/felhom.eu/documentation/audits/catalog-sweep-2026-10-24/tools")
import box_walk as w
w.login()
code, d = w.ctl("GET", "/api/stacks/qbittorrent/deploy-fields")
print("deploy-fields:", code, [(f.get("env_var"), f.get("type"), f.get("required")) for f in ((((d.get("data") or {}).get("metadata") or {}).get("deploy_fields")) or [])])
ok = w.deploy("qbittorrent", "qbline")
print("deployed:", ok)
print("answers:", ok and w.wait_app("qbline", "/", tries=60, delay=5))
@@ -0,0 +1,13 @@
#!/bin/sh
# limitprobe.sh — INSIDE guest 9201, R-1250 diagnosis on the THROWAWAY qBittorrent only (no line test is started): the
# controller's own hold value (up_limit 1024 B/s, the same app/preferences call) for 60 s, then the exact previous
# value back. Each second: qBittorrent's reported limit + speed and the bytes its container sent.
Q=/root/r1250/qbg.sh; PID=$(docker inspect -f '{{.State.Pid}}' qbittorrent)
rd(){ sh $Q transfer/info | python3 -c 'import json,sys;d=json.load(sys.stdin);print("limit=%s speed=%.2f" % (d.get("up_rate_limit"), d.get("up_info_speed",0)*8/1e6))'; }
PREV=$(sh $Q app/preferences | python3 -c 'import json,sys;print(json.loads(sys.stdin.read().replace("\\\\","/")).get("up_limit"))' 2>/dev/null)
echo "previous up_limit=$PREV"; [ -n "$PREV" ] || { echo "cannot read the previous limit — no probe"; exit 1; }
c0=$(awk '/eth0:/{print $10}' /proc/$PID/net/dev)
echo "$(date -u +%T) set up_limit=1024: $(sh $Q app/setPreferences 'json={"up_limit":1024}'; echo ok)"
i=0; while [ $i -lt 60 ]; do sleep 1; c=$(awk '/eth0:/{print $10}' /proc/$PID/net/dev); echo "$(date -u +%T) t=$((i+1))s ctr=$(( (c-c0)*8/1000 ))kbit $(rd)"; c0=$c; i=$((i+1)); done
echo "$(date -u +%T) put back up_limit=$PREV: $(sh $Q app/setPreferences "json={\"up_limit\":$PREV}"; echo ok)"
sleep 2; echo "after: $(rd)"
+10
View File
@@ -0,0 +1,10 @@
#!/bin/sh
# qbg.sh <api path> [form data] [-F] — INSIDE guest 9201: one call to the throwaway qBittorrent's API from inside its
# container. The admin password is read from the container's own env inside the container — never an argument, never printed.
P="$1"; D="${2:-}"
docker exec -i -e AP="$P" -e AD="$D" qbittorrent sh -s <<'IN'
c=/tmp/r1250.c; B=http://localhost:8080
printf 'username=admin&password=%s' "$QBT_ADMIN_PASSWORD" | curl -s -o /dev/null -c $c -H "Referer: $B" --data-binary @- $B/api/v2/auth/login
if [ -n "$AD" ]; then curl -s -b $c -H "Referer: $B" --data "$AD" "$B/api/v2/$AP"; else curl -s -b $c -H "Referer: $B" "$B/api/v2/$AP"; fi
rm -f $c
IN
@@ -0,0 +1,8 @@
#!/bin/sh
# qbsec.sh <n> — INSIDE guest 9201 (R-1250 diagnosis, read only): each second, qBittorrent's own view of the global
# upload limit (transfer/info up_rate_limit and preferences up_limit) and its upload speed.
i=0; while [ $i -lt $1 ]; do
T=$(sh /root/r1250/qbg.sh transfer/info); P=$(sh /root/r1250/qbg.sh app/preferences)
printf '%s %s %s\n' "$(date -u +%H:%M:%S)" "$(echo "$T" | python3 -c 'import json,sys;d=json.load(sys.stdin);print("rate_limit=%s up_speed=%.2fMbit" % (d.get("up_rate_limit"), d.get("up_info_speed",0)*8/1e6))' 2>&1)" "$(echo "$P" | python3 -c 'import json,sys;d=json.load(sys.stdin);print("pref_up_limit=%s" % d.get("up_limit"))' 2>&1)"
i=$((i+1))
done
@@ -0,0 +1,12 @@
#!/usr/bin/env python3
"""remove_qb.py — Part 8 teardown: the throwaway qBittorrent on 9201 removed THROUGH THE PRODUCT (stop, then remove). The
shared library folder media/torrents (older than this test) and the app's older backups stay: remove_hdd_data and
remove_backups are false. usage: SC=<dir with .ctlpw> TARGET=9201 python3 remove_qb.py"""
import sys, time
sys.path.insert(0, "/mnt/5_hdd/felhom.eu/git/felhom.eu/documentation/audits/catalog-sweep-2026-10-24/tools")
import box_walk as w
w.login()
print("stop:", w.ctl("POST", "/api/stacks/qbittorrent/stop")[0])
time.sleep(5)
c, d = w.ctl("POST", "/api/stacks/qbittorrent/remove", {"remove_hdd_data": False, "remove_backups": False})
print("remove:", c, str(d)[:160])
@@ -0,0 +1,8 @@
#!/bin/sh
# sec1.sh <seconds> — INSIDE guest 9201 (R-1250 diagnosis, read only): every second, the bytes the throwaway qBittorrent
# container sent (its own eth0, inside its netns) and the bytes the guest sent on its LAN eth0 (after the forwarder).
N=$1; PID=$(docker inspect -f '{{.State.Pid}}' qbittorrent)
i=0; while [ $i -lt $N ]; do
c=$(awk '/eth0:/{print $10}' /proc/$PID/net/dev); g=$(cat /sys/class/net/eth0/statistics/tx_bytes)
echo "$(date -u +%H:%M:%S) ctr_tx=$c guest_tx=$g"; i=$((i+1)); sleep 1
done
@@ -0,0 +1,12 @@
#!/bin/sh
# ssq.sh — INSIDE guest 9201 (R-1250 diagnosis, read only): the queued bytes on the seed's TCP sockets — qBittorrent's own
# (in its container's netns) and the forwarder's two (guest netns) — five readings 3 s apart.
PID=$(docker inspect -f '{{.State.Pid}}' qbittorrent)
for i in 1 2 3 4 5; do
echo "== $(date -u +%T)"
echo "-- qbittorrent (container netns), established, port 6881:"
nsenter -t $PID -n ss -tni state established '( sport = :6881 or dport = :6881 )' | grep -v '^Recv' | awk 'NR%2==1{printf "%s ",$0; next}{print}' | awk '{print "Recv-Q="$1, "Send-Q="$2, $3, $4}'
echo "-- forwarder (guest netns), established, port 6881:"
ss -tni state established '( sport = :6881 or dport = :6881 )' | grep -v '^Recv' | awk 'NR%2==1{printf "%s ",$0; next}{print}' | awk '{print "Recv-Q="$1, "Send-Q="$2, $3, $4}'
sleep 3
done
+15
View File
@@ -0,0 +1,15 @@
#!/bin/bash
# watch.sh <evidence-dir> — on DooPlex, 2026-10-27 from ~09:45 CET: sample every 60 s; stop 20 min after the agent's
# measurement AND the controller's „limit is back" line, or at 16:05 CET. Reads only; forces nothing.
E=$1; since=$(date -u +%Y-%m-%dT%H:%M:%SZ); done_at=""
while true; do
ssh -o ConnectTimeout=20 demo-hp "pct exec 9201 -- sh /root/r1250/gsample.sh" >> $E/samples.txt 2>&1
ssh -o ConnectTimeout=20 demo-hp "journalctl -u felhom-agent --since '$since' --no-pager | grep -iE 'linetest'" > $E/agent-linetest.txt 2>&1
ssh -o ConnectTimeout=20 demo-hp "pct exec 9201 -- sh -c 'docker logs --since $since felhom-controller 2>&1 | grep -iE \"upwatch|line test|qbittorrent.*limit\" | grep -v DEBUG'" > $E/controller-upwatch.txt 2>&1
if [ -z "$done_at" ] && grep -q "upload line measured" $E/agent-linetest.txt && grep -q "limit is back" $E/controller-upwatch.txt; then
done_at=$(date +%s); echo "$(date -u +%T) TEST DONE — 20 more minutes for the 50 % rule's tick" >> $E/samples.txt
fi
[ -n "$done_at" ] && [ $(( $(date +%s) - done_at )) -ge 1200 ] && { echo "$(date -u +%T) watch end (done)" >> $E/samples.txt; exit 0; }
[ "$(TZ=Europe/Budapest date +%H%M)" -ge 1605 ] && { echo "$(date -u +%T) watch end (16:05 CET)" >> $E/samples.txt; exit 0; }
sleep 60
done
@@ -0,0 +1,17 @@
11:14:23
container: UNCONN 0 0 172.18.0.17%eth0:6881 0.0.0.0:* UNCONN 0 0 127.0.0.1%lo:6881 0.0.0.0:* UNCONN 0 0 [::1]%lo:6881 [::]:*
guest: UNCONN 0 0 192.168.0.155:6881 0.0.0.0:* ESTAB 0 0 172.18.0.1:57134 172.18.0.17:6881 ESTAB 0 0 172.18.0.1:58337 172.18.0.17:6881 ESTAB 0 0 172.18.0.1:45298 172.18.0.17:6881
11:14:25
container: UNCONN 0 0 172.18.0.17%eth0:6881 0.0.0.0:* UNCONN 0 0 127.0.0.1%lo:6881 0.0.0.0:* UNCONN 0 0 [::1]%lo:6881 [::]:*
guest: UNCONN 0 0 192.168.0.155:6881 0.0.0.0:* ESTAB 0 0 172.18.0.1:57134 172.18.0.17:6881 ESTAB 0 0 172.18.0.1:58337 172.18.0.17:6881 ESTAB 0 0 172.18.0.1:45298 172.18.0.17:6881
11:14:27
container: UNCONN 0 0 172.18.0.17%eth0:6881 0.0.0.0:* UNCONN 0 0 127.0.0.1%lo:6881 0.0.0.0:* UNCONN 0 0 [::1]%lo:6881 [::]:*
guest: UNCONN 0 0 192.168.0.155:6881 0.0.0.0:* ESTAB 0 0 172.18.0.1:57134 172.18.0.17:6881 ESTAB 0 0 172.18.0.1:58337 172.18.0.17:6881 ESTAB 0 0 172.18.0.1:45298 172.18.0.17:6881
11:14:29
container: UNCONN 0 0 172.18.0.17%eth0:6881 0.0.0.0:* UNCONN 0 0 127.0.0.1%lo:6881 0.0.0.0:* UNCONN 0 0 [::1]%lo:6881 [::]:*
guest: UNCONN 0 0 192.168.0.155:6881 0.0.0.0:* ESTAB 0 0 172.18.0.1:57134 172.18.0.17:6881 ESTAB 0 0 172.18.0.1:58337 172.18.0.17:6881 ESTAB 0 0 172.18.0.1:45298 172.18.0.17:6881
11:14:31
container: UNCONN 0 0 172.18.0.17%eth0:6881 0.0.0.0:* UNCONN 0 0 127.0.0.1%lo:6881 0.0.0.0:* UNCONN 0 0 [::1]%lo:6881 [::]:*
guest: UNCONN 0 0 192.168.0.155:6881 0.0.0.0:* ESTAB 0 0 172.18.0.1:57134 172.18.0.17:6881 ESTAB 0 0 172.18.0.1:58337 172.18.0.17:6881 ESTAB 0 0 172.18.0.1:45298 172.18.0.17:6881
net.core.rmem_default = 212992
net.core.wmem_default = 212992
@@ -0,0 +1,30 @@
{
"line": [
{
"at": "2026-10-25T03:17:47Z",
"peak10_mbps": 7.54,
"bytes": 18588326,
"seconds": 46,
"counts": false
},
{
"at": "2026-10-26T03:17:56Z",
"peak10_mbps": 5.99,
"bytes": 17694322,
"seconds": 55,
"counts": false
},
{
"at": "2026-10-27T03:18:41Z",
"peak10_mbps": 97.21,
"bytes": 169114983,
"seconds": 82,
"counts": true
}
],
"qb_limit": {
"box_set_bytes": 5898240,
"line_mbps": 94.38232008767471,
"set_at": "2026-10-27T07:06:17Z"
}
}
@@ -0,0 +1,18 @@
demo-felhom
felhom-agent 0.167.0
Oct 27 10:25:25 demo-felhom felhom-agent[1634408]: time=2026-10-27T10:25:25.584+01:00 level=WARN msg="selfupdate: new version running — dwelling before commit" version=0.167.0 prev=0.166.0 dwell=1m0
Oct 27 10:26:25 demo-felhom sudo[1636399]: felhom-agent : PWD=/ ; USER=root ; COMMAND=/usr/local/sbin/felhom-selfupdate-guarded commit
Oct 27 10:26:25 demo-felhom felhom-agent[1634408]: time=2026-10-27T10:26:25.627+01:00 level=WARN msg="selfupdate: update committed" version=0.167.0 wrapper=""
Oct 27 10:26:25 demo-felhom felhom-agent[1634408]: time=2026-10-27T10:26:25.627+01:00 level=INFO msg="osupdate: running the bundle policy pass after the self-update commit (R-1285)" agent_version=0.16
Oct 27 10:26:25 demo-felhom felhom-agent[1634408]: time=2026-10-27T10:26:25.745+01:00 level=INFO msg="osupdate: wrapper" line="os-apply: BUNDLE POLICY DONE install_mode=appliance removed=0"
Oct 27 10:26:25 demo-felhom felhom-agent[1634408]: time=2026-10-27T10:26:25.745+01:00 level=INFO msg="osupdate: bundle policy pass done" bundle_policy="{\"install_mode\": \"appliance\", \"removed\": [
felhom
felhom-agent 0.167.0
Oct 27 10:32:30 felhom sudo[963380]: felhom-agent : PWD=/ ; USER=root ; COMMAND=/usr/local/sbin/felhom-selfupdate-guarded commit
Oct 27 10:32:30 felhom felhom-agent[961489]: time=2026-10-27T10:32:30.608+01:00 level=WARN msg="selfupdate: update committed" version=0.167.0 wrapper=""
Oct 27 10:32:30 felhom felhom-agent[961489]: time=2026-10-27T10:32:30.609+01:00 level=INFO msg="osupdate: running the bundle policy pass after the self-update commit (R-1285)" agent_version=0.167.0
Oct 27 10:32:30 felhom felhom-os-apply[963416]: os-apply: BUNDLE POLICY DONE install_mode=appliance removed=0
Oct 27 10:32:30 felhom felhom-agent[961489]: time=2026-10-27T10:32:30.744+01:00 level=INFO msg="osupdate: wrapper" line="os-apply: BUNDLE POLICY DONE install_mode=appliance removed=0"
Oct 27 10:32:30 felhom felhom-agent[961489]: time=2026-10-27T10:32:30.744+01:00 level=INFO msg="osupdate: bundle policy pass done" bundle_policy="{\"install_mode\": \"appliance\", \"removed\": []}"
[exited with code 0]
@@ -0,0 +1,29 @@
[release-agent] building 0.167.0 …
[release-agent] built ok: sha256 28bdd2826f45f3767880fcff4d3105afb7247c09c0ced99d78b3a978d8d826f0
[release-agent] config bundle built: sha256 9d0344164b22634159984bfbcdaf77c53e6d2423812973ed8b4f2135a7ed1268
[release-agent] tagging v0.167.0 at 54d3a10 …
[release-agent] publishing …
[publish-agent] publishing /tmp/felhom-agent-RAFefZ (16296021 bytes, sha256 28bdd2826f45f376…) → https://gitea.dooplex.hu/api/packages/admin/generic/felhom-agent/0.167.0/felhom-agent
[publish-agent] pre-delete existing artifact: HTTP 404 (404/204 expected)
[publish-agent] upload OK (HTTP 201)
[publish-agent] round-trip GET verified (sha256 matches)
[publish-agent] DONE. Record in the hub operator UI (Configs → Day-0 artifacts): agent 0.167.0 / 28bdd2826f45f3767880fcff4d3105afb7247c09c0ced99d78b3a978d8d826f0
[release-agent] config bundle published (HTTP 201)
[release-agent] pushing v0.167.0 …
remote: . Processing 1 references
remote: Processed 1 references in total
To https://gitea.dooplex.huAGENT_VERSION=0.167.0
AGENT_SHA256=28bdd2826f45f3767880fcff4d3105afb7247c09c0ced99d78b3a978d8d826f0
RELEASED — and installable, verified by download, not by this script's own say-so.
version : 0.167.0
tag : v0.167.0
sha256 : 28bdd2826f45f3767880fcff4d3105afb7247c09c0ced99d78b3a978d8d826f0
bundle : 9d0344164b22634159984bfbcdaf77c53e6d2423812973ed8b4f2135a7ed1268 (felhom-config-bundle.json — vouch it with the agent)
NOT VOUCHED. Vouching is what points machines at this version and stays your deliberate act:
hub operator UI → Configs → Day-0 artifacts. Until then boxes keep installing the previous one.
/admin/felhom-agent.git
* [new tag] v0.167.0 -> v0.167.0
[release-agent] verifying by independent download …
@@ -0,0 +1,70 @@
grep: write error: Broken pipe
2026/10/27 14:09:43 [INFO] felhom-controller 0.346.0 starting (customer: demo-felhom, domain: demo-felhom.eu)
2026/10/27 14:09:43 [INFO] [selfupdate] Post-update startup: update successful (0.345.1 → 0.346.0)
apps:
opengist Up 10 hours (healthy)
prowlarr Up 10 hours (healthy)
qbittorrent Up 10 hours (healthy)
radarr Up 10 hours (healthy)
sonarr Up 10 hours (healthy)
unhealthy: 0
2026/10/27 14:09:43 [INFO] local-api: channel up (agent 169.254.253.1:8443) — guest 9201, 3 mount(s) visible
2026/10/27 14:09:43 [INFO] local-api: mount mp0 → /var/lib/felhom (storage=local-lvm, class=, backup=true)
2026/10/27 14:09:43 [INFO] local-api: mount mp9 → /etc/felhom-bootstrap (storage=/var/lib/felhom-agent/guests/9201/bootstrap, class=, backup=false)
2026/10/27 14:09:43 [INFO] local-api: mount mp8 → /mnt/felhom-drives (storage=/mnt/felhom-drives, class=, backup=false)
2026/10/27 14:09:43 [INFO] felhom-controller 0.346.0 starting (customer: demo-felhom, domain: demo-felhom.eu)
2026/10/27 14:09:43 [INFO] [settings] Loaded settings from /opt/docker/felhom-controller/data/settings.json
2026/10/27 14:09:43 [INFO] Encryption key loaded from /opt/docker/felhom-controller/data/encryption.key
2026/10/27 14:09:43 [INFO] [stacks] Using compose command: docker compose
2026/10/27 14:09:43 [INFO] [stacks] ScanStacks complete: 68 stacks found (5 deployed, 63 available)
2026/10/27 14:09:43 [INFO] [stacks] Status refresh: 8 containers across 68 stacks
2026/10/27 14:09:43 [INFO] [stacks] InjectMissingFields: processed 5 stacks
2026/10/27 14:09:43 [INFO] [stacks] Encryption migration: no stacks needed migration
2026/10/27 14:09:43 [INFO] [quiesce] loop started (poll 5m0s, max-quiesce 30m0s)
2026/10/27 14:09:43 [INFO] [stacks] desired-state backfill: 0 app(s) recorded as running, 0 left unrecorded (state ambiguous — legacy boot behaviour retained)
2026/10/27 14:09:43 [INFO] [stacks] installed-images backfill: 0 app(s) recorded, 5 already had a record, 0 left unrecorded (could not be observed completely — unknown, which renders nothing)
2026/10/27 14:09:43 [INFO] [stacks] pin adoption: 0 pinned, 5 already pinned, 0 left unpinned (0 not completely observed, 0 running something the template no longer offers)
2026/10/27 14:09:43 [INFO] [stacks] applied-meta backfill (R-646): recorded 0 []; skipped 0 [] — not current with the catalog, their pinned version's .felhom.yml is no longer on the box
2026/10/27 14:09:43 [INFO] [sync] Starting catalog sync (repo: https://gitea.dooplex.hu/admin/app-catalog-felhom.eu.git, interval: 15m0s)
2026/10/27 14:09:43 [INFO] [sync] Starting catalog sync
2026/10/27 14:09:43 [INFO] Metrics store opened at /opt/docker/felhom-controller/data/metrics.db
2026/10/27 14:09:43 [INFO] Metrics collector started (60s interval)
2026/10/27 14:09:43 [INFO] [sync] Pulling latest from https://gitea.dooplex.hu/admin/app-catalog-felhom.eu.git (branch: main)
2026/10/27 14:09:43 [INFO] [tier2] start-up: no leftover second-drive copy container
2026/10/27 14:09:43 [INFO] [backup] restore record wired: /opt/docker/felhom-controller/data/restore-status.json (interrupted at startup: false)
2026/10/27 14:09:43 [INFO] [backup] app-data run record wired: /opt/docker/felhom-controller/data/appdata-run.json (an earlier cut still shown: false)
2026/10/27 14:09:43 [INFO] Notifier enabled (hub: https://hub.felhom.eu)
2026/10/27 14:09:43 [INFO] [upwatch] the host's weekly line test: 94.0 Mbit/s (measured 2026-10-27T09:20:13Z)
2026/10/27 14:09:43 [INFO] [upwatch] upload and CPU watch started (line 94 Mbit/s, qBittorrent share 50 %)
2026/10/27 14:09:43 [INFO] [selfupdate] Post-update startup: update successful (0.345.1 → 0.346.0)
2026/10/27 14:09:43 [INFO] Self-update enabled (check every 6h, auto-update: false, auto-update time: 04:30)
2026/10/27 14:09:43 [INFO] [scheduler] Registered periodic job: status-refresh (every 10s)
2026/10/27 14:09:43 [INFO] [scheduler] Registered periodic job: stack-scan (every 2m0s)
2026/10/27 14:09:43 [INFO] [scheduler] Registered periodic job: docker-socket-watch (every 15s)
2026/10/27 14:09:43 [INFO] [scheduler] Registered periodic job: docker-socket-users (every 5m0s)
2026/10/27 14:09:43 [INFO] [scheduler] Registered periodic job: health-probes (every 10s)
2026/10/27 14:09:43 [INFO] [scheduler] Registered periodic job: system-health (every 5m0s)
2026/10/27 14:09:43 [INFO] [scheduler] Registered periodic job: after-unclean-boot (every 30s)
2026/10/27 14:09:43 [INFO] [scheduler] Registered periodic job: hold-report (every 1m0s)
2026/10/27 14:09:43 [INFO] [scheduler] Registered periodic job: deadapp-check (every 30s)
2026/10/27 14:09:43 [INFO] [scheduler] Registered periodic job: ring-spill (every 30s)
2026/10/27 14:09:43 [INFO] [offsite-apply] settle-gate: awaiting floor knowledge (first report ACK) before offsite apply
2026/10/27 14:09:43 [INFO] [scheduler] Daily job db-dump scheduled for 2026-10-28 02:30 CET
2026/10/27 14:09:43 [INFO] [scheduler] Registered periodic job: offsite-credential-retry (every 5m0s)
2026/10/27 14:09:43 [INFO] [scheduler] Registered periodic job: backup-cache (every 5m0s)
2026/10/27 14:09:43 [INFO] [scheduler] Registered periodic job: conversion-copy-release (every 1h0m0s)
2026/10/27 14:09:43 [INFO] [scheduler] Daily job tier2-backup scheduled for 2026-10-28 03:30 CET
2026/10/27 14:09:43 [INFO] [scheduler] Daily job offbox-backup scheduled for 2026-10-28 04:15 CET
2026/10/27 14:09:43 [INFO] [catch-up] controller start: no backup leg missed its last scheduled time — nothing to make up
2026/10/27 14:09:43 [INFO] [scheduler] Daily job offsite-abandon-sweep scheduled for 2026-10-28 05:10 CET
2026/10/27 14:09:43 [INFO] [scheduler] Daily job offsite-integrity scheduled for 2026-10-28 06:00 CET
2026/10/27 14:09:43 [INFO] [scheduler] Daily job offsite-proof scheduled for 2026-10-28 05:30 CET
2026/10/27 14:09:43 [INFO] [scheduler] Daily job metrics-prune scheduled for 2026-10-28 04:00 CET
2026/10/27 14:09:43 [INFO] [scheduler] Daily job fill-watch scheduled for 2026-10-28 03:30 CET
2026/10/27 14:09:43 [INFO] [scheduler] Registered periodic job: fill-watch-interval (every 10m0s)
2026/10/27 14:09:43 [INFO] [scheduler] Registered periodic job: hub-report (every 15m0s)
2026/10/27 14:09:43 [INFO] Hub reporting enabled (every 15m0s to https://hub.felhom.eu)
2026/10/27 14:09:43 [INFO] [scheduler] Registered periodic job: selfupdate-check (every 6h0m0s)
2026/10/27 14:09:43 [INFO] ========== Startup Self-Test ==========
2026/10/27 14:09:43 [INFO] [PASS] Docker socket: reachable (v29.9.2)
2026/10/27 14:09:43 [INFO] [PASS] Stacks directory: /opt/docker/stacks
@@ -0,0 +1,87 @@
grep: write error: Broken pipe
2026/10/27 14:10:02 main.go:356: [INFO] felhom-controller 0.346.0 starting (customer: demo-hp, domain: enkisfelhom.hu)
2026/10/27 14:10:02 updater.go:855: [INFO] [selfupdate] Post-update startup: update successful (0.346.0-rc.1 → 0.346.0)
apps:
adventurelog Up 11 hours (healthy)
adventurelog-frontend Up 11 hours (healthy)
adventurelog-postgres Up 11 hours (healthy)
bentopdf Up 11 hours (healthy)
bookstack Up 11 hours (healthy)
bookstack-db Up 11 hours (healthy)
calibre-web Up 11 hours (healthy)
docmost Up 11 hours (healthy)
docmost-postgres Up 11 hours (healthy)
docmost-redis Up 11 hours (healthy)
home-assistant Up 11 hours (healthy)
kimai Up 11 hours (healthy)
kimai-db Up 11 hours (healthy)
opengist Up 11 hours (healthy)
paperless-postgres Up 11 hours (healthy)
paperless-redis Up 11 hours (healthy)
paperless-webserver Up 11 hours (healthy)
plex Up 11 hours (healthy)
privatebin Up 11 hours (healthy)
romm Up 11 hours (healthy)
romm-db Up 11 hours (healthy)
romm-redis Up 11 hours (healthy)
unhealthy: 0
2026/10/27 14:10:02 main.go:4010: [INFO] local-api: channel up (agent 169.254.253.1:8443) — guest 9201, 3 mount(s) visible
2026/10/27 14:10:02 main.go:4013: [INFO] local-api: mount mp0 → /var/lib/felhom (storage=local-lvm, class=, backup=true)
2026/10/27 14:10:02 main.go:4013: [INFO] local-api: mount mp8 → /mnt/felhom-drives (storage=/mnt/felhom-drives, class=, backup=false)
2026/10/27 14:10:02 main.go:4013: [INFO] local-api: mount mp9 → /etc/felhom-bootstrap (storage=/var/lib/felhom-agent/guests/9201/bootstrap, class=, backup=false)
2026/10/27 14:10:02 main.go:356: [INFO] felhom-controller 0.346.0 starting (customer: demo-hp, domain: enkisfelhom.hu)
2026/10/27 14:10:02 settings.go:821: [INFO] [settings] Loaded settings from /opt/docker/felhom-controller/data/settings.json
2026/10/27 14:10:02 main.go:382: [INFO] Encryption key loaded from /opt/docker/felhom-controller/data/encryption.key
2026/10/27 14:10:02 manager.go:400: [INFO] [stacks] Using compose command: docker compose
2026/10/27 14:10:02 manager.go:792: [INFO] [stacks] ScanStacks complete: 69 stacks found (12 deployed, 57 available)
2026/10/27 14:10:02 manager.go:843: [INFO] [stacks] Status refresh: 25 containers across 69 stacks
2026/10/27 14:10:02 deploy.go:1470: [WARN] [stacks] Stack plex: new field PLEX_CLAIM (type=text) requires manual configuration
2026/10/27 14:10:02 deploy.go:1470: [WARN] [stacks] Stack bookstack: new field ADMIN_PASSWORD (type=password) requires manual configuration
2026/10/27 14:10:02 deploy.go:1470: [WARN] [stacks] Stack calibre-web: new field ADMIN_PASSWORD (type=password) requires manual configuration
2026/10/27 14:10:02 deploy.go:1482: [INFO] [stacks] InjectMissingFields: processed 12 stacks
2026/10/27 14:10:02 manager.go:583: [INFO] [stacks] Encryption migration: no stacks needed migration
2026/10/27 14:10:02 quiesce.go:192: [INFO] [quiesce] loop started (poll 5m0s, max-quiesce 30m0s)
2026/10/27 14:10:02 desiredstate.go:137: [INFO] [stacks] desired-state backfill: 0 app(s) recorded as running, 0 left unrecorded (state ambiguous — legacy boot behaviour retained)
2026/10/27 14:10:02 installed.go:537: [INFO] [stacks] installed-images backfill: 0 app(s) recorded, 12 already had a record, 0 left unrecorded (could not be observed completely — unknown, which renders nothing)
2026/10/27 14:10:02 pin.go:290: [INFO] [stacks] pin adoption: 0 pinned, 12 already pinned, 0 left unpinned (0 not completely observed, 0 running something the template no longer offers)
2026/10/27 14:10:02 undo.go:676: [INFO] [stacks] applied-meta backfill (R-646): recorded 0 []; skipped 0 [] — not current with the catalog, their pinned version's .felhom.yml is no longer on the box
2026/10/27 14:10:02 sync.go:137: [INFO] [sync] Starting catalog sync (repo: https://gitea.dooplex.hu/admin/app-catalog-felhom.eu.git, interval: 15m0s)
2026/10/27 14:10:02 sync.go:228: [INFO] [sync] Starting catalog sync
2026/10/27 14:10:02 sync.go:358: [INFO] [sync] Pulling latest from https://gitea.dooplex.hu/admin/app-catalog-felhom.eu.git (branch: main)
2026/10/27 14:10:02 main.go:571: [INFO] Metrics store opened at /opt/docker/felhom-controller/data/metrics.db
2026/10/27 14:10:02 main.go:580: [INFO] Metrics collector started (60s interval)
2026/10/27 14:10:02 [INFO] [tier2] start-up: no leftover second-drive copy container
2026/10/27 14:10:02 restore_record_wiring.go:37: [INFO] [backup] restore record wired: /opt/docker/felhom-controller/data/restore-status.json (interrupted at startup: false)
2026/10/27 14:10:02 run_record_wiring.go:29: [INFO] [backup] app-data run record wired: /opt/docker/felhom-controller/data/appdata-run.json (an earlier cut still shown: false)
2026/10/27 14:10:02 notifier.go:81: [INFO] Notifier enabled (hub: https://hub.felhom.eu)
2026/10/27 14:10:02 service.go:83: [INFO] [upwatch] the host's weekly line test: 94.5 Mbit/s (measured 2026-10-27T12:40:35Z)
2026/10/27 14:10:02 upwatch_wiring.go:154: [INFO] [upwatch] upload and CPU watch started (line 97 Mbit/s, qBittorrent share 50 %)
2026/10/27 14:10:02 updater.go:855: [INFO] [selfupdate] Post-update startup: update successful (0.346.0-rc.1 → 0.346.0)
2026/10/27 14:10:02 main.go:865: [INFO] Self-update enabled (check every 6h, auto-update: false, auto-update time: 04:30)
2026/10/27 14:10:02 scheduler.go:120: [INFO] [scheduler] Registered periodic job: status-refresh (every 10s)
2026/10/27 14:10:02 scheduler.go:120: [INFO] [scheduler] Registered periodic job: stack-scan (every 2m0s)
2026/10/27 14:10:02 scheduler.go:120: [INFO] [scheduler] Registered periodic job: docker-socket-watch (every 15s)
2026/10/27 14:10:02 scheduler.go:120: [INFO] [scheduler] Registered periodic job: docker-socket-users (every 5m0s)
2026/10/27 14:10:02 scheduler.go:120: [INFO] [scheduler] Registered periodic job: health-probes (every 10s)
2026/10/27 14:10:02 offsiteapply.go:148: [INFO] [offsite-apply] settle-gate: awaiting floor knowledge (first report ACK) before offsite apply
2026/10/27 14:10:02 scheduler.go:120: [INFO] [scheduler] Registered periodic job: system-health (every 5m0s)
2026/10/27 14:10:02 scheduler.go:120: [INFO] [scheduler] Registered periodic job: after-unclean-boot (every 30s)
2026/10/27 14:10:02 scheduler.go:120: [INFO] [scheduler] Registered periodic job: hold-report (every 1m0s)
2026/10/27 14:10:02 scheduler.go:120: [INFO] [scheduler] Registered periodic job: deadapp-check (every 30s)
2026/10/27 14:10:02 scheduler.go:120: [INFO] [scheduler] Registered periodic job: ring-spill (every 30s)
2026/10/27 14:10:02 scheduler.go:150: [INFO] [scheduler] Daily job db-dump scheduled for 2026-10-28 02:30 CET
2026/10/27 14:10:02 scheduler.go:120: [INFO] [scheduler] Registered periodic job: offsite-credential-retry (every 5m0s)
2026/10/27 14:10:02 scheduler.go:120: [INFO] [scheduler] Registered periodic job: backup-cache (every 5m0s)
2026/10/27 14:10:02 scheduler.go:120: [INFO] [scheduler] Registered periodic job: conversion-copy-release (every 1h0m0s)
2026/10/27 14:10:02 scheduler.go:150: [INFO] [scheduler] Daily job tier2-backup scheduled for 2026-10-28 03:30 CET
2026/10/27 14:10:02 scheduler.go:150: [INFO] [scheduler] Daily job offbox-backup scheduled for 2026-10-28 04:15 CET
2026/10/27 14:10:02 nightchain.go:284: [INFO] [catch-up] controller start: no backup leg missed its last scheduled time — nothing to make up
2026/10/27 14:10:02 scheduler.go:150: [INFO] [scheduler] Daily job offsite-abandon-sweep scheduled for 2026-10-28 05:10 CET
2026/10/27 14:10:02 scheduler.go:150: [INFO] [scheduler] Daily job offsite-integrity scheduled for 2026-10-28 06:00 CET
2026/10/27 14:10:02 scheduler.go:150: [INFO] [scheduler] Daily job offsite-proof scheduled for 2026-10-28 05:30 CET
2026/10/27 14:10:02 scheduler.go:150: [INFO] [scheduler] Daily job metrics-prune scheduled for 2026-10-28 04:00 CET
2026/10/27 14:10:02 scheduler.go:150: [INFO] [scheduler] Daily job fill-watch scheduled for 2026-10-28 03:30 CET
2026/10/27 14:10:02 scheduler.go:120: [INFO] [scheduler] Registered periodic job: fill-watch-interval (every 10m0s)
2026/10/27 14:10:02 scheduler.go:120: [INFO] [scheduler] Registered periodic job: hub-report (every 15m0s)
2026/10/27 14:10:02 main.go:1838: [INFO] Hub reporting enabled (every 15m0s to https://hub.felhom.eu)
2026/10/27 14:10:02 scheduler.go:120: [INFO] [scheduler] Registered periodic job: selfupdate-check (every 6h0m0s)
@@ -0,0 +1,6 @@
== demo-hp: holds: [] | reported: None | log: 2026/10/27 14:28:02 scheduler.go:450: [INFO] [scheduler] Running job: hold-report
2026/10/27 14:28:02 scheduler.go:467: [INFO] [scheduler] Job hold-report completed (took 0s)
== tester-1: holds: [] | reported: None | log: 2026/10/27 14:28:00 [INFO] [scheduler] Running job: hold-report
2026/10/27 14:28:00 [INFO] [scheduler] Job hold-report completed (took 0s)
== demo-felhom: holds: [] | reported: None | log: 2026/10/27 14:27:43 [INFO] [scheduler] Running job: hold-report
2026/10/27 14:27:43 [INFO] [scheduler] Job hold-report completed (took 0s)
@@ -0,0 +1,34 @@
control NEGATIVE (a stub answering 200 over plain http): convicted, as it must (200 -)
== tester-1 (enkicsifelhom.hu): 6 public name(s)
OK control POSITIVE http://felhom.enkicsifelhom.hu/r1033-check?q=1 -> 301 https://felhom.enkicsifelhom.hu/r1033-check?q=1
OK http://files.enkicsifelhom.hu/r1033-check?q=1 -> 301 https://files.enkicsifelhom.hu/r1033-check?q=1
OK http://no-such-name-r1033.enkicsifelhom.hu/r1033-check?q=1 -> 301 https://no-such-name-r1033.enkicsifelhom.hu/r1033-check?q=1
OK http://paperless.enkicsifelhom.hu/r1033-check?q=1 -> 301 https://paperless.enkicsifelhom.hu/r1033-check?q=1
OK http://paste.enkicsifelhom.hu/r1033-check?q=1 -> 301 https://paste.enkicsifelhom.hu/r1033-check?q=1
OK http://wiki.enkicsifelhom.hu/r1033-check?q=1 -> 301 https://wiki.enkicsifelhom.hu/r1033-check?q=1
== demo-hp (enkisfelhom.hu): 15 public name(s)
OK http://arcade.enkisfelhom.hu/r1033-check?q=1 -> 301 https://arcade.enkisfelhom.hu/r1033-check?q=1
OK http://books.enkisfelhom.hu/r1033-check?q=1 -> 301 https://books.enkisfelhom.hu/r1033-check?q=1
OK http://docs.enkisfelhom.hu/r1033-check?q=1 -> 301 https://docs.enkisfelhom.hu/r1033-check?q=1
OK http://felhom.enkisfelhom.hu/r1033-check?q=1 -> 301 https://felhom.enkisfelhom.hu/r1033-check?q=1
OK http://files.enkisfelhom.hu/r1033-check?q=1 -> 301 https://files.enkisfelhom.hu/r1033-check?q=1
OK http://gist.enkisfelhom.hu/r1033-check?q=1 -> 301 https://gist.enkisfelhom.hu/r1033-check?q=1
OK http://ha.enkisfelhom.hu/r1033-check?q=1 -> 301 https://ha.enkisfelhom.hu/r1033-check?q=1
OK http://no-such-name-r1033.enkisfelhom.hu/r1033-check?q=1 -> 301 https://no-such-name-r1033.enkisfelhom.hu/r1033-check?q=1
OK http://papir.enkisfelhom.hu/r1033-check?q=1 -> 301 https://papir.enkisfelhom.hu/r1033-check?q=1
OK http://paste.enkisfelhom.hu/r1033-check?q=1 -> 301 https://paste.enkisfelhom.hu/r1033-check?q=1
OK http://pdf.enkisfelhom.hu/r1033-check?q=1 -> 301 https://pdf.enkisfelhom.hu/r1033-check?q=1
OK http://plex.enkisfelhom.hu/r1033-check?q=1 -> 301 https://plex.enkisfelhom.hu/r1033-check?q=1
OK http://time.enkisfelhom.hu/r1033-check?q=1 -> 301 https://time.enkisfelhom.hu/r1033-check?q=1
OK http://travel.enkisfelhom.hu/r1033-check?q=1 -> 301 https://travel.enkisfelhom.hu/r1033-check?q=1
OK http://wiki.enkisfelhom.hu/r1033-check?q=1 -> 301 https://wiki.enkisfelhom.hu/r1033-check?q=1
== demo-felhom (demo-felhom.eu): 8 public name(s)
OK http://felhom.demo-felhom.eu/r1033-check?q=1 -> 301 https://felhom.demo-felhom.eu/r1033-check?q=1
OK http://files.demo-felhom.eu/r1033-check?q=1 -> 301 https://files.demo-felhom.eu/r1033-check?q=1
OK http://gist.demo-felhom.eu/r1033-check?q=1 -> 301 https://gist.demo-felhom.eu/r1033-check?q=1
OK http://no-such-name-r1033.demo-felhom.eu/r1033-check?q=1 -> 301 https://no-such-name-r1033.demo-felhom.eu/r1033-check?q=1
OK http://prowlarr.demo-felhom.eu/r1033-check?q=1 -> 301 https://prowlarr.demo-felhom.eu/r1033-check?q=1
OK http://radarr.demo-felhom.eu/r1033-check?q=1 -> 301 https://radarr.demo-felhom.eu/r1033-check?q=1
OK http://sonarr.demo-felhom.eu/r1033-check?q=1 -> 301 https://sonarr.demo-felhom.eu/r1033-check?q=1
OK http://torrent.demo-felhom.eu/r1033-check?q=1 -> 301 https://torrent.demo-felhom.eu/r1033-check?q=1
== every public name redirects http -> https
@@ -0,0 +1,71 @@
grep: write error: Broken pipe
2026/10/27 14:09:59 [INFO] felhom-controller 0.346.0 starting (customer: tester-1, domain: enkicsifelhom.hu)
2026/10/27 14:10:00 [INFO] [selfupdate] Post-update startup: update successful (0.346.0-rc.1 → 0.346.0)
apps:
bookstack Up 11 hours (healthy)
bookstack-db Up 11 hours (healthy)
paperless-postgres Up 11 hours (healthy)
paperless-redis Up 11 hours (healthy)
paperless-webserver Up 11 hours (healthy)
privatebin Up 11 hours (healthy)
unhealthy: 0
2026/10/27 14:09:59 [INFO] local-api: channel up (agent 169.254.253.1:8443) — guest 9201, 3 mount(s) visible
2026/10/27 14:09:59 [INFO] local-api: mount mp8 → /mnt/felhom-drives (storage=/mnt/felhom-drives, class=, backup=false)
2026/10/27 14:09:59 [INFO] local-api: mount mp0 → /var/lib/felhom (storage=local-lvm, class=, backup=true)
2026/10/27 14:09:59 [INFO] local-api: mount mp9 → /etc/felhom-bootstrap (storage=/var/lib/felhom-agent/guests/9201/bootstrap, class=, backup=false)
2026/10/27 14:09:59 [INFO] felhom-controller 0.346.0 starting (customer: tester-1, domain: enkicsifelhom.hu)
2026/10/27 14:09:59 [INFO] [settings] Loaded settings from /opt/docker/felhom-controller/data/settings.json
2026/10/27 14:09:59 [INFO] Encryption key loaded from /opt/docker/felhom-controller/data/encryption.key
2026/10/27 14:09:59 [INFO] [stacks] Using compose command: docker compose
2026/10/27 14:09:59 [INFO] [stacks] ScanStacks complete: 68 stacks found (3 deployed, 65 available)
2026/10/27 14:10:00 [INFO] [stacks] Status refresh: 9 containers across 68 stacks
2026/10/27 14:10:00 [INFO] [stacks] InjectMissingFields: processed 3 stacks
2026/10/27 14:10:00 [INFO] [stacks] Encryption migration: no stacks needed migration
2026/10/27 14:10:00 [INFO] [quiesce] loop started (poll 5m0s, max-quiesce 30m0s)
2026/10/27 14:10:00 [INFO] [stacks] desired-state backfill: 0 app(s) recorded as running, 0 left unrecorded (state ambiguous — legacy boot behaviour retained)
2026/10/27 14:10:00 [INFO] [stacks] installed-images backfill: 0 app(s) recorded, 3 already had a record, 0 left unrecorded (could not be observed completely — unknown, which renders nothing)
2026/10/27 14:10:00 [INFO] [stacks] pin adoption: 0 pinned, 3 already pinned, 0 left unpinned (0 not completely observed, 0 running something the template no longer offers)
2026/10/27 14:10:00 [INFO] [stacks] applied-meta backfill (R-646): recorded 0 []; skipped 0 [] — not current with the catalog, their pinned version's .felhom.yml is no longer on the box
2026/10/27 14:10:00 [INFO] [sync] Starting catalog sync (repo: https://gitea.dooplex.hu/admin/app-catalog-felhom.eu.git, interval: 15m0s)
2026/10/27 14:10:00 [INFO] [sync] Starting catalog sync
2026/10/27 14:10:00 [INFO] Metrics store opened at /opt/docker/felhom-controller/data/metrics.db
2026/10/27 14:10:00 [INFO] Metrics collector started (60s interval)
2026/10/27 14:10:00 [INFO] [sync] Pulling latest from https://gitea.dooplex.hu/admin/app-catalog-felhom.eu.git (branch: main)
2026/10/27 14:10:00 [INFO] [tier2] start-up: no leftover second-drive copy container
2026/10/27 14:10:00 [INFO] [backup] restore record wired: /opt/docker/felhom-controller/data/restore-status.json (interrupted at startup: false)
2026/10/27 14:10:00 [INFO] [backup] app-data run record wired: /opt/docker/felhom-controller/data/appdata-run.json (an earlier cut still shown: false)
2026/10/27 14:10:00 [INFO] Notifier enabled (hub: https://hub.felhom.eu)
2026/10/27 14:10:00 [INFO] [upwatch] the host's weekly line test: 94.0 Mbit/s (measured 2026-10-27T12:33:30Z)
2026/10/27 14:10:00 [INFO] [upwatch] upload and CPU watch started (line 94 Mbit/s, qBittorrent share 50 %)
2026/10/27 14:10:00 [INFO] [selfupdate] Post-update startup: update successful (0.346.0-rc.1 → 0.346.0)
2026/10/27 14:10:00 [INFO] Self-update enabled (check every 6h, auto-update: false, auto-update time: 04:30)
2026/10/27 14:10:00 [INFO] [scheduler] Registered periodic job: status-refresh (every 10s)
2026/10/27 14:10:00 [INFO] [scheduler] Registered periodic job: stack-scan (every 2m0s)
2026/10/27 14:10:00 [INFO] [scheduler] Registered periodic job: docker-socket-watch (every 15s)
2026/10/27 14:10:00 [INFO] [scheduler] Registered periodic job: docker-socket-users (every 5m0s)
2026/10/27 14:10:00 [INFO] [scheduler] Registered periodic job: health-probes (every 10s)
2026/10/27 14:10:00 [INFO] [scheduler] Registered periodic job: system-health (every 5m0s)
2026/10/27 14:10:00 [INFO] [scheduler] Registered periodic job: after-unclean-boot (every 30s)
2026/10/27 14:10:00 [INFO] [scheduler] Registered periodic job: hold-report (every 1m0s)
2026/10/27 14:10:00 [INFO] [scheduler] Registered periodic job: deadapp-check (every 30s)
2026/10/27 14:10:00 [INFO] [scheduler] Registered periodic job: ring-spill (every 30s)
2026/10/27 14:10:00 [INFO] [offsite-apply] settle-gate: awaiting floor knowledge (first report ACK) before offsite apply
2026/10/27 14:10:00 [INFO] [scheduler] Daily job db-dump scheduled for 2026-10-28 02:30 CET
2026/10/27 14:10:00 [INFO] [scheduler] Registered periodic job: offsite-credential-retry (every 5m0s)
2026/10/27 14:10:00 [INFO] [scheduler] Registered periodic job: backup-cache (every 5m0s)
2026/10/27 14:10:00 [INFO] [scheduler] Registered periodic job: conversion-copy-release (every 1h0m0s)
2026/10/27 14:10:00 [INFO] [scheduler] Daily job tier2-backup scheduled for 2026-10-28 03:30 CET
2026/10/27 14:10:00 [INFO] [scheduler] Daily job offbox-backup scheduled for 2026-10-28 04:15 CET
2026/10/27 14:10:00 [INFO] [catch-up] controller start: no backup leg missed its last scheduled time — nothing to make up
2026/10/27 14:10:00 [INFO] [scheduler] Daily job offsite-abandon-sweep scheduled for 2026-10-28 05:10 CET
2026/10/27 14:10:00 [INFO] [scheduler] Daily job offsite-integrity scheduled for 2026-10-28 06:00 CET
2026/10/27 14:10:00 [INFO] [scheduler] Daily job offsite-proof scheduled for 2026-10-28 05:30 CET
2026/10/27 14:10:00 [INFO] [scheduler] Daily job metrics-prune scheduled for 2026-10-28 04:00 CET
2026/10/27 14:10:00 [INFO] [scheduler] Daily job fill-watch scheduled for 2026-10-28 03:30 CET
2026/10/27 14:10:00 [INFO] [scheduler] Registered periodic job: fill-watch-interval (every 10m0s)
2026/10/27 14:10:00 [INFO] [scheduler] Registered periodic job: hub-report (every 15m0s)
2026/10/27 14:10:00 [INFO] Hub reporting enabled (every 15m0s to https://hub.felhom.eu)
2026/10/27 14:10:00 [INFO] [scheduler] Registered periodic job: selfupdate-check (every 6h0m0s)
2026/10/27 14:10:00 [INFO] ========== Startup Self-Test ==========
2026/10/27 14:10:00 [INFO] Event pushed: controller_updated (info) [hu-only] — Controller frissítve: 0.346.0-rc.1 → 0.346.0
2026/10/27 14:10:00 [INFO] [PASS] Docker socket: reachable (v29.8.2)
@@ -0,0 +1,5 @@
14:37:27
HTTP/1.1 303 See Other
Location: /configuration?flash=floor_set
min_controller_version|0.346.0
min_controller_version_declared_min_agent|0.346.0=0.158.1
@@ -0,0 +1,176 @@
[STEP] 0/3 — Checking the registry: is 0.173.0 already published?
[INFO] 0.173.0 is not present in the registry — proceeding.
[STEP] 1/3 — Pulling latest code (the tree must be clean and at origin/main)...
[INFO] ╔══════════════════════════════════════╗
[INFO] ║ felhom-hub build ║
[INFO] ╚══════════════════════════════════════╝
[INFO] Version: 0.173.0 (build-hub.sh v1.25.0)
[INFO] Commit: 29134c52
[INFO] Source: /mnt/5_hdd/felhom.eu/git/felhom.eu/hub
[INFO] Build: /mnt/5_hdd/felhom.eu/build/felhom-hub/workspace
[INFO] Image: gitea.dooplex.hu/admin/felhom-hub:0.173.0
[STEP] 2/3 — Syncing source to workspace...
[INFO] Source synced to /mnt/5_hdd/felhom.eu/build/felhom-hub/workspace
[INFO] App assets synced (263 files)
[INFO] Package structure verified ✓
[INFO] Running go mod tidy...
[STEP] 3/3 — Building Docker image...
[INFO] Building for current platform + pushing...
#0 building with "default" instance using docker driver
#1 [internal] load build definition from Dockerfile
#1 transferring dockerfile: 1.46kB done
#1 DONE 0.0s
#2 [internal] load metadata for docker.io/library/golang:1.27.3-alpine3.24@sha256:b8c9b82affbbb82a020bbcf998dad2ba9516944ac7e883524642a481a9505e9c
#2 ...
#3 [auth] library/alpine:pull token for registry-1.docker.io
#3 DONE 0.0s
#4 [auth] library/golang:pull token for registry-1.docker.io
#4 DONE 0.0s
#5 [internal] load metadata for docker.io/library/alpine:3.24.2@sha256:294b683cb724975bec92580e1e685676bd4b50bda910ddb8c51d4cabeaec77e6
#5 DONE 1.0s
#2 [internal] load metadata for docker.io/library/golang:1.27.3-alpine3.24@sha256:b8c9b82affbbb82a020bbcf998dad2ba9516944ac7e883524642a481a9505e9c
#2 DONE 1.7s
#6 [internal] load .dockerignore
#6 transferring context: 2B done
#6 DONE 0.0s
#7 [stage-1 1/5] FROM docker.io/library/alpine:3.24.2@sha256:294b683cb724975bec92580e1e685676bd4b50bda910ddb8c51d4cabeaec77e6
#7 resolve docker.io/library/alpine:3.24.2@sha256:294b683cb724975bec92580e1e685676bd4b50bda910ddb8c51d4cabeaec77e6 0.0s done
#7 DONE 0.0s
#8 [builder 1/6] FROM docker.io/library/golang:1.27.3-alpine3.24@sha256:b8c9b82affbbb82a020bbcf998dad2ba9516944ac7e883524642a481a9505e9c
#8 resolve docker.io/library/golang:1.27.3-alpine3.24@sha256:b8c9b82affbbb82a020bbcf998dad2ba9516944ac7e883524642a481a9505e9c 0.0s done
#8 extracting sha256:7b229517ed222597277036d94892173207d01a731ab3a88eeb1de2e963a2c788
#8 ...
#9 [internal] load build context
#9 transferring context: 22.57MB 0.3s done
#9 DONE 0.3s
#8 [builder 1/6] FROM docker.io/library/golang:1.27.3-alpine3.24@sha256:b8c9b82affbbb82a020bbcf998dad2ba9516944ac7e883524642a481a9505e9c
#8 sha256:c8e3100880d834be60a9562375f4c5018b2cb26d64591bd0060aa3a80b935f43 0B / 126B 0.2s
#8 extracting sha256:7b229517ed222597277036d94892173207d01a731ab3a88eeb1de2e963a2c788 0.2s done
#8 sha256:c8e3100880d834be60a9562375f4c5018b2cb26d64591bd0060aa3a80b935f43 126B / 126B 0.2s done
#8 sha256:82e0bb27ae78502103ed383ed33346f88a83943fb7bd93977850d5890ee8fb3b 0B / 71.15MB 0.3s
#8 sha256:c012d78a862fe59ae6789c91f982ea68a882c9c44bbde97013914458dcdd9c4c 0B / 244.47kB 0.2s
#8 sha256:c012d78a862fe59ae6789c91f982ea68a882c9c44bbde97013914458dcdd9c4c 244.47kB / 244.47kB 0.6s done
#8 sha256:82e0bb27ae78502103ed383ed33346f88a83943fb7bd93977850d5890ee8fb3b 15.73MB / 71.15MB 0.8s
#8 extracting sha256:c012d78a862fe59ae6789c91f982ea68a882c9c44bbde97013914458dcdd9c4c 0.1s done
#8 sha256:82e0bb27ae78502103ed383ed33346f88a83943fb7bd93977850d5890ee8fb3b 26.21MB / 71.15MB 0.9s
#8 sha256:82e0bb27ae78502103ed383ed33346f88a83943fb7bd93977850d5890ee8fb3b 34.60MB / 71.15MB 1.1s
#8 sha256:82e0bb27ae78502103ed383ed33346f88a83943fb7bd93977850d5890ee8fb3b 45.09MB / 71.15MB 1.2s
#8 sha256:82e0bb27ae78502103ed383ed33346f88a83943fb7bd93977850d5890ee8fb3b 56.62MB / 71.15MB 1.4s
#8 sha256:82e0bb27ae78502103ed383ed33346f88a83943fb7bd93977850d5890ee8fb3b 69.21MB / 71.15MB 1.5s
#8 sha256:82e0bb27ae78502103ed383ed33346f88a83943fb7bd93977850d5890ee8fb3b 71.15MB / 71.15MB 1.7s done
#8 extracting sha256:82e0bb27ae78502103ed383ed33346f88a83943fb7bd93977850d5890ee8fb3b
#8 extracting sha256:82e0bb27ae78502103ed383ed33346f88a83943fb7bd93977850d5890ee8fb3b 5.6s done
#8 DONE 7.5s
#8 [builder 1/6] FROM docker.io/library/golang:1.27.3-alpine3.24@sha256:b8c9b82affbbb82a020bbcf998dad2ba9516944ac7e883524642a481a9505e9c
#8 extracting sha256:c8e3100880d834be60a9562375f4c5018b2cb26d64591bd0060aa3a80b935f43 0.0s done
#8 extracting sha256:4f4fb700ef54461cfa02571ae0db9a0dc1e0cdb5577484a6d75e68dc38e8acc1 0.0s done
#8 DONE 7.6s
#10 [builder 2/6] WORKDIR /app
#10 DONE 1.0s
#11 [builder 3/6] COPY go.mod go.sum* ./
#11 DONE 0.0s
#12 [builder 4/6] RUN go mod download || true
#12 DONE 8.8s
#13 [builder 5/6] COPY . .
#13 DONE 0.8s
#14 [builder 6/6] RUN go mod tidy && CGO_ENABLED=0 go build -ldflags "-s -w -X main.Version=0.173.0 -X main.BuildTime=2026-10-27T08:30:47Z" -o /felhom-hub ./cmd/hub/
#14 0.706 go: downloading gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405
#14 0.745 go: downloading modernc.org/fileutil v1.3.40
#14 0.746 go: downloading github.com/google/pprof v0.0.0-20250317173921-a4b03ec1a45e
#14 0.764 go: downloading golang.org/x/term v0.47.0
#14 0.916 go: downloading modernc.org/ccgo/v4 v4.30.1
#14 0.916 go: downloading modernc.org/goabi0 v0.2.0
#14 0.916 go: downloading golang.org/x/tools v0.38.0
#14 0.916 go: downloading modernc.org/cc/v4 v4.27.1
#14 1.357 go: downloading modernc.org/token v1.1.0
#14 1.357 go: downloading modernc.org/opt v0.1.4
#14 1.357 go: downloading modernc.org/strutil v1.2.1
#14 1.357 go: downloading modernc.org/sortutil v1.2.1
#14 1.458 go: downloading modernc.org/gc/v2 v2.6.5
#14 1.458 go: downloading golang.org/x/mod v0.29.0
#14 1.458 go: downloading modernc.org/gc/v3 v3.1.1
#14 1.647 go: downloading github.com/hashicorp/golang-lru/v2 v2.0.7
#14 1.987 go: downloading golang.org/x/sync v0.17.0
#14 DONE 23.0s
#15 [stage-1 2/5] RUN apk add --no-cache ca-certificates tzdata
#15 CACHED
#16 [stage-1 3/5] COPY --from=builder /felhom-hub /usr/local/bin/felhom-hub
#16 DONE 0.1s
#17 [stage-1 4/5] RUN mkdir -p /data /etc/felhom-hub
#17 DONE 0.3s
#18 [stage-1 5/5] COPY assets/ /usr/share/felhom/assets-seed/
#18 DONE 0.2s
#19 exporting to image
#19 exporting layers
#19 exporting layers 1.7s done
#19 exporting manifest sha256:4bb29461bedd838aa9d1acfcd37af056498a1a57ca1f8b1c6b4191951c06ac5b 0.0s done
#19 exporting config sha256:b9818cbb36163c3fa20d3c88d331763eb75b855c79447f4256db9b5c9c3f3660 done
#19 exporting attestation manifest sha256:f20f1ff514f2c68b9300f1996540d8d8195e67e2c39f852a7333d8b12ef1d88a 0.0s done
#19 exporting manifest list sha256:458bfb03e614db4b7abd6442e6af15c652ba4b9b4509fe2b0efe00ac979b8f52 done
#19 naming to gitea.dooplex.hu/admin/felhom-hub:0.173.0 done
#19 unpacking to gitea.dooplex.hu/admin/felhom-hub:0.173.0
#19 unpacking to gitea.dooplex.hu/admin/felhom-hub:0.173.0 0.4s done
#19 DONE 2.2s
[INFO] Pushing...
The push refers to repository [gitea.dooplex.hu/admin/felhom-hub]
44136fa355b3: Waiting
93c1eb832da7: Waiting
b128e85bfc6d: Waiting
e2de96513ba9: Waiting
44136fa355b3: Waiting
93c1eb832da7: Waiting
b128e85bfc6d: Waiting
e2de96513ba9: Waiting
9d2a0c58fd60: Waiting
6b29cdaa98fc: Waiting
44136fa355b3: Already exists
93c1eb832da7: Layer already exists
e2de96513ba9: Layer already exists
b128e85bfc6d: Pushed
9d2a0c58fd60: Pushed
99c9eb131832: Pushed
6b29cdaa98fc: Pushed
0.173.0: digest: sha256:458bfb03e614db4b7abd6442e6af15c652ba4b9b4509fe2b0efe00ac979b8f52 size: 856
[INFO] ╔══════════════════════════════════════╗
[INFO] ║ Build complete ✓ ║
[INFO] ╚══════════════════════════════════════╝
[INFO] Image: gitea.dooplex.hu/admin/felhom-hub:0.173.0
[INFO] Size: 73M
[INFO] Image pushed to registry.
[INFO] Deploy to k3s — GitOps ONLY. The manifest in git is the source of truth:
[INFO] 1. bump the image tag in /mnt/5_hdd/felhom.eu/git/felhom.eu/manifests/hub.yaml to 0.173.0, commit, push
[INFO] 2. hard-refresh + sync the ArgoCD app (auto-sync is OFF — the sync is deliberate):
[INFO] sudo kubectl -n argocd annotate application felhom argocd.argoproj.io/refresh=hard --overwrite
[INFO] sudo kubectl -n argocd patch application felhom --type merge \
[INFO] -p '"{"operation":"initiatedBy":{"username":"cc"}}"' -p '"{"operation":"sync":{"syncStrategy":{"apply":{}}}}"'
[INFO]
[INFO] NEVER `kubectl set image` or `kubectl apply` by hand — ArgoCD reverts it on the next
[INFO] sync, so the change looks applied, works for a while, and then silently disappears.
@@ -0,0 +1,9 @@
== tester-1
HTTP/1.1 303 See Other
Location: /customers/tester-1?flash=floor_set
== demo-hp
HTTP/1.1 303 See Other
Location: /customers/demo-hp?flash=floor_set
== demo-felhom
HTTP/1.1 303 See Other
Location: /customers/demo-felhom?flash=floor_set
+15
View File
@@ -26,6 +26,21 @@
---
## 2026-10-27 (attended release block) — ten rows released and closed (full text of the rows: `git show 708a3451:documentation/backlog/OPEN-ITEMS.md`)
| Row | What | Closed | Evidence |
|---|---|---|---|
| **R-1250** | **A qBittorrent that seeds all day is never line-tested, so it never gets the limit that exists for it.** (P3) | CLOSED 2026-10-27 — the hold FAILED as built (four holds 11:36–12:21 CET on demo-hp, each refused „not quiet” 4.0–4.2 Mbit/s: qBittorrent 5.2.4 sends at full speed ~14 s after its limit falls, the agent reads 5–15 s after the call); fixed in controller `710ceac` (`waitDrained`: ask only after the held app reports its own upload near zero; red-proved by four mutations), RELEASED in v0.346.0 (global floor 15:37 CET). Live on the rc: 13:39:56 held → slowed after 22 s → **94.5 Mbit/s** → the limit back exactly (5898240) → the 50 % rule kept the normal slot (0.15 % move, inside its 20 % band). Operator's choice 2026-10-27: fix in the controller the same day. | `audits/linetest-2026-10-27/` (README, `rc1-hold-proof.txt`, `limitprobe.txt`, `sec1-*.txt`, `redproof-r1250-drain.txt`) |
| **R-1261** | **The R-1250 line hold (committed, NOT released): three edges before it ships (review round 2, HUNT-4 H4–H6).** (P3) | CLOSED 2026-10-27 — released in v0.344.0; live 2026-10-27 on demo-hp: every hold put the limit back exactly in the slot it held (five holds), and the 50 % rule did not read the put-back value as the household's (no household flag). | `audits/linetest-2026-10-27/` (`controller-upwatch-0345-refusals.txt`, `upwatch-settings-after.txt`) |
| **R-1218** | **A recovery ceremony done while off-site is switched off (or cleared) seals no off-site repository password, and the hub then demotes the GOOD older package to operator-only custody: the household's own recovery code no longer opens its off-site copy.** (P2) | CLOSED 2026-10-27 — both halves RELEASED (hub v0.173.0 09:35 CET; controller v0.346.0, global floor 15:37 CET). **Live proof WAIVED by the operator** (2026-10-27, attended): no product path makes the box's saved off-site target „off” on a hub box — the hub customer page's switch did not reach Tester 1's target or its controller.yaml (unchanged since 2026-10-04), and the household's clear is refused on a hub tier — so a live run could not tell old code from new. Red-proofs stand for both halves. Follow-up: R-1312. | `audits/night-fixes-2026-10-26/`; `audits/release-2026-10-27/` |
| **R-1219** | **During a recovery offer the backups page hides the „create your recovery code” ceremony (it would replace the key that opens the old off-site copy), but the global top bar still links to it and the start handler does not refuse.** (P2) | CLOSED 2026-10-27 — RELEASED in controller v0.346.0 (global floor 15:37 CET). Proof: the handler tests (the brief's allowance — a recovery offer cannot be staged safely), red-proved. | controller `1170b48` tests |
| **R-1220** | **„Megőrzött adatok” (kept data) can list an INSTALLED app's live folder as kept — and offer to delete it — when that app's app.yaml cannot be read.** (P2) | CLOSED 2026-10-27 — RELEASED in controller v0.346.0 (global floor 15:37 CET); live 2026-10-26 night on 9202 (`audits/night-fixes-2026-10-26/`). | `audits/night-fixes-2026-10-26/` |
| **R-1232** | **A reinstalled box may take its first whole-box copy to ep0 up to a week late: the old box's copy in the same household space seems to count as its last one.** (P2) | CLOSED 2026-10-27 — RELEASED in agent v0.167.0 (published + tagged 2026-10-27; signed updates committed on demo-felhom 10:26, Tester 1 10:32, demo-hp 13:49 CET); live 2026-10-26 night on a fresh BYO Tester4 box. The Day-0 vouch of 0.167.0 is the operator's (STATUS). | `audits/night-fixes-2026-10-26/r1232/`; `audits/release-2026-10-27/agent-*` |
| **R-1187** | **A `.fab` export or import can lose or mix household data — code-confirmed paths from the data-loss hunt:** (P2) | CLOSED 2026-10-27 — (a)(b)(d)(f)(g) + the two import defects RELEASED in controller v0.346.0 (global floor 15:37 CET); live 2026-10-26 night on 9202 for (a)(b)(g), unit tests for (d)(f) (`audits/night-fixes-2026-10-26/`). | `audits/night-fixes-2026-10-26/` |
| **R-1298** | **Scratch guest 9202 carries leftovers made outside the product, and D53 would remind about them every week once released: four crash-loop holds since 2026-09-24 for apps that are not installed (`chaoscrash`, `chaosoom`, `chaosoomb`, `gokapi`), and a PrivateBin `app.yaml` (2026-10-25) with no container that the product reads as „installed".** (P3) | CLOSED 2026-10-27 — RELEASED in controller v0.346.0; live 2026-10-26 night on 9202 (four orphan holds cleared, PrivateBin removed through the product). The three test boxes report 0 holds and the hub lists 0 (15:30 CET). | `audits/night-fixes-2026-10-26/r1298/`; `audits/release-2026-10-27/boxes-0.346.0/held-apps-boxes.txt` |
| **R-972** | **The shipped controller and hub programs are built with Go 1.24.13 and golang.org/x/crypto v0.31.0, and the agent with Go 1.26.0, so dozens of fixed Go security bugs (including html/template escaping fixes) are still in what runs on boxes and the hub.** (P2) | CLOSED 2026-10-27 — Go 1.27.3 RELEASED in all three: hub v0.173.0, agent v0.167.0, controller v0.346.0 (govulncheck 1 → 0 called each, `audits/r972-*`). | `audits/r972-*` |
| **R-1291** | **A held app gives the operator no lasting signal: one event at the stop, then nothing — demo-hp's Kimai sat held 11 days unseen.** (P3) | CLOSED 2026-10-27 — RELEASED: hub v0.173.0 (09:35 CET, the Hosts page shows „Held apps”, 30-min watch clean) + controller v0.346.0 (global floor 15:37 CET); the three test boxes' hold report runs every minute and the hub list matches each box (0 = 0). | `audits/d53-held-apps-2026-10-26/`; `audits/release-2026-10-27/` |
## 2026-10-27 (night) — R-1174 measured and closed (full text of the row: `git show 3c8c1ded:documentation/backlog/OPEN-ITEMS.md`)
| Row | What | Closed | Evidence |
+7 -17
View File
@@ -159,7 +159,7 @@ stopping line that lies.
| **R-683** | App updates | P3 | **[P3-LOW] Watch: after a power cut during an update's health check, the hold named an HOUR-OLD second-drive copy, not the one the update's own backup should have just made.** 2026-09-24 chaos round 3 (nextcloud, `backup_max_age: 1m`): no `backing-up` phase was seen and the hold named Tier 2 at 13:04 for an update pressed at 14:04; the pre-cut controller log was lost with the container (the runner now saves it at arm time — R-320). Round 11, the same action without a power cut, named a fresh 14:34 copy and logged the Tier-2 copy. The sentence was TRUE (it named the copy it offered); the question is why the update did not back up first. Not reproduced; watch the next power-cut drill. `audits/night-2026-09-24/E/round-03*.json`, `E/round-11-controller-pre.log` | **OPEN — P3; owner: CC (watch)** | — | — | CC |
| **R-785** | App updates | P3 | **[P3-LOW] SparkyFitness is pinned 11 releases and a major behind upstream (v0.17.3; upstream v1.7.3, v1.6.0 dated 2026-07-24).** READ 2026-10-01 (`audits/visitors-2026-10-01/C/bench/C1-previous-tag.txt`). **Needs:** an update walk 0.17 → 1.x through the ladder (bench + box), after R-784 is decided. | **OPEN — rank P3-LOW; owner: CC (after R-784)** | — | — | CC |
## Backup & restore — 51 rows (P2 9, P3 24, P4 18)
## Backup & restore — 46 rows (P2 4, P3 24, P4 18)
| ID | Category | Sev | What | State | Blocked on | Next action | Owner |
|---|---|---|---|---|---|---|---|
@@ -195,7 +195,6 @@ stopping line that lies.
| **R-1184** | Backup & restore | P3 | **A cut-off shared-folder restore can be „placed" and reported restored while files are missing; the download is then deleted.** Readiness is only „the scratch folder is not empty" (`internal/backup/shares_restore.go:131-140`) — the R-358 class fixed for apps, not for shares; 30-min download window (`web/offbox_handlers.go:716`); fixed 2 GiB free-space gate that fails open (`:107`). CONFIRMED in code. Data-loss hunt 2026-10-20 (C1 reviewer 1, R3). | OPEN | — | Fix: a completion marker after restic succeeds, as for apps | CC |
| **R-1185** | Backup & restore | P3 | **A database dump that fails its own content check has already replaced last night's good dump, and the second drive copies it an hour later.** `appbackup/dbdump.go:388-422`: size check, rename over the good file (`:399`), then `ValidateDump` (`:419`). Volume tars are promoted with no content check either (`backup.go:902`). Tier 1 is one point per app by design (07 §6.1); the ORDER is the defect. PROVEN against production code (`audits/dataloss-hunt-2026-10-20/C3-D5-dump-replaced/`, a docker stub prints a header-only dump): `ValidateDump` says invalid („dump file too small"), `DumpOneTo` returns no error, and last night's good dump (with its `CREATE TABLE`) is gone from disk. Data-loss hunt 2026-10-20 (D5). | OPEN | — | Fix: validate the temp file before the rename; keep the last good dump on a failed check | CC |
| **R-1186** | Backup & restore | P3 | **The nightly off-site copy is skipped silently when another backup holds the flag, and the catch-up never re-runs it.** `offbox.go:981-996` returns nil with an INFO line on the nightly path; `withLeg` marks the leg ended anyway (`cmd/controller/main.go:1246`). The 05:30 proof and 06:00 integrity check take the same flag, so a backup time near them collides every night. Only the hub's 48 h `offsite_stale` notices. CONFIRMED in code. Data-loss hunt 2026-10-20 (T5). | OPEN | — | Fix: mark the leg NOT ended on a busy skip so the catch-up retries; say it on the backups page | CC |
| **R-1187** | Backup & restore | P2 | **A `.fab` export or import can lose or mix household data — code-confirmed paths from the data-loss hunt:** (a) an export silently drops a whole drive folder that holds a symlink and still ends „done” (`appexport/fabplan.go:292-310`, `export.go:712`; a FIFO also hangs the export on `os.Open`); (b) the import handles only folders and regular files: no owners set, symlinks dropped (`restore.go:1138-1183`); (c) **FIXED in controller main `d5f88a2`, unreleased (rides 0.340.0):** an import over an installed app that is not running merged the old data with the bundle's (`docker cp` never deletes) — reproduced on 9202 before the fix (stopped: a marker written after the export SURVIVED the import; running control: replaced), now refused with a Hungarian sentence and the app untouched; red-proved (`r1187c_test.go`), proven on 9202 rc.2 (`audits/night-2026-10-22/P3-candidates/r1187c-9202.txt`); (d) PLAUSIBLE: no restore-busy check in `StartImport`, no undo, no record (`restore.go:181-186`); (f) the bundle's HDD_PATH is trusted, an empty one gives a relative path (`restore.go:589-631`); (g) the DB import misses postgis images (adventurelog, dawarich: `classifyDBImage`) and runs psql without ON_ERROR_STOP (`restore.go:1047-1056, 933-943`; the dump is `--clean --if-exists`, so ON_ERROR_STOP is safe). (e) was R-1191. Research `audits/night-2026-10-22/P3-candidates/analysis.md`; first list `audits/dataloss-hunt-2026-10-20/C1-restore-rollback-candidates.md`. | **VERIFY — fixed on `main`: (a), (b), (d), (f), (g) + two import defects found by the live proof; waits for the controller release** — 2026-10-26 night: controller `dfd0f8e`, `106325d`, `f24233c`, `cccb9ae` (three rounds of the automated security review on the link handling: writes only through `os.Root`, links only downward), `a3ed63e` (the import's compose runs get the controller's path variables; a warning is never the container id), `90a2530` (the database loads through `appbackup.ImportDump` — every MariaDB 11+ import had timed out on `mysqladmin`). Live on 9202 (Grimmory: FIFO refused naming the path, owner/mode/inside link back, outside link refused; the import now succeeds and the app answers; AdventureLog: a postgis user back after the import) — `audits/night-fixes-2026-10-26/`. (d), (f): unit tests. Still open from the row: C2's two merge paths of an import over an existing app. **Earlier:** OPEN — **2026-10-23: (c) and the C3/N9 refusal texts released in controller 0.340.0;** (a), (b), (f), (g) and the two import paths of C2 stay open. OPEN — **2026-10-22 night: re-ranked P3→P2** ((a) and (b) lose household files on a move to a new box with no error). (c) fixed in code; (a), (b), (f), (g) read in code, not live-proven. **2026-10-23 night — fresh review (`REPORT-night-2026-10-23.md`, C2, C3):** two more import paths still merge — a running app whose `RemoveStackVolumes` fails falls back to `StopStack` and goes on (`appexport/restore.go:375-380`), and `restoreHDDData` extracts drive-folder tars over the existing folder without clearing it (`restore.go:602-655`) for running and stopped apps alike. Both exist in 0.339.0 — not a hold for 0.340.0. The (c) refusal also catches an unhealthy or restarting app (`IsStackRunning`: running/degraded only); its text now says so and names removal (controller `943c517`). Recovery code: fix only with a red-proof + a 9202 proof. | — | Fix (a)+(b) with a red-proof and a 9202 proof (capture code — the night rule); (g) small fix with a 9202 postgis app; (d) after (a) | CC |
| **R-1188** | Backup & restore | P4 | **Restore-path candidates from the data-loss hunt — what is left is unlikely or a sentence:** (b) a failed `volume rm` is ignored before the untar, which then lands in the old volume (`backup/restore.go:218`; `StopStack` is `compose down`, so the rm rarely fails); (d) the full off-site download stops at 30 min per press and the household is not told to press again (`web/offbox_handlers.go:455`; the scratch is kept, so a second press probably continues — not measured); (e) place and full restore re-read the LATEST snapshot, not the downloaded one (`offbox_restore.go:675-679`, `_ = id`). Closed parts: (a) with R-1195 (controller 0.338.0), (c) in controller 0.337.0 (`TestR1188c_ALeftoverTempDoesNotBlockTheRetry`). Evidence `audits/dataloss-hunt-2026-10-20/C1-restore-rollback-candidates.md`, `audits/night-2026-10-22/P3-candidates/analysis.md`. | OPEN — **2026-10-22 night: re-ranked P3→P4**: (a) and (c) are shipped; the rest is low-chance or a sentence. | — | (d): measure a second press on a large download on 9202, then write the sentence; (b), (e): unit tests when the file is next touched | CC |
| **R-1189** | Backup & restore | P3 | **Time and concurrency candidates from the data-loss hunt — what is left:** (a) a host clock ahead during one whole-guest backup silences that tier until real time passes it: the agent turns a future archive time into a negative age (`localapi/server.go:1179-1192`); half-live 2026-10-21 (B6 #8, `s8-wrong-clock/README.md`: a local archive dated 2028-10-21); agent code, so it rides an agent release and the operator's vouch; (c) the whole-guest quiesce waits for the catch-up and the update leg, not for a restore (`quiesce.go:213-275, 565`); (f) the OS leg and kernel reboot follow a daytime valve backup (agent `server.go:982-986`, `kernel.go:101-114`) — a design question; (g) spring forward 2027-03-28 moves 02:30 onto the 03:30 second copy; (h) self-update busy check before the pull only (`updater.go:532-545, 764`; not re-read); (i) a double-clicked restore shows failed while it runs (check and begin not atomic, `web/handlers.go:1860, 1881`). **Moved out 2026-10-22 night:** (b) the skipped nights after an off-cycle run were FIXED by R-899 (controller 0.304.0; demo-hp's journal shows a night run after each of three off-cycle runs since), the creep → R-1221; (d) **FIXED in controller main `d5f88a2`, unreleased (rides 0.340.0):** the catch-up now runs the off-site proof and the integrity check once after its legs, the false comment corrected; red-proved (`nightchain/r1189d_test.go`, `cmd/controller/r1189d_wiring_test.go`); (e) → R-1222 (hub). Evidence `audits/dataloss-hunt-2026-10-20/C1-time-concurrency-candidates.md`, `audits/night-2026-10-22/P3-candidates/analysis.md`. | OPEN — **2026-10-23: (d) released in controller 0.340.0;** (a), (c), (f), (g) stay as written. OPEN — 2026-10-22 night: (b) half closed, (d) fixed in code, (e) split out. | — | (a) with the next agent release (a unit test with a future archive); (c) a 9202 recipe; (g) a unit test with the 2027 clock; (f) to the operator at the next design review | CC |
| **R-1190** | Backup & restore | P3 | **Key and retention candidates from the data-loss hunt — what is left:** (c) PLAUSIBLE: after a reuse-path reinstall the new PBS key K is never escrowed and nothing compares fingerprints (`felhom-pbs-apply:99`, `escrow_confirm.go:182-205`); (d) whole-guest off-site copies run before any escrow exists — a design question against `07` §6.1's Tier-3 gate (the operator's); (e) the escrow PUT is two statements; (f) the operator's off-site re-issue resets the provider password before saving it (hub `offsite.go:217-245`); (h) a unit restore can point an app back at an old drive and F5 then prunes the current drive's unit (`backup.go:1517-1574`) — (e), (f), (h) not re-read. **Moved out 2026-10-22 night:** (a) → R-1218, (b) → R-1219, (g) → R-1220. Evidence `audits/dataloss-hunt-2026-10-20/C1-keys-candidates.md`, `C1-delete-retention-candidates.md`, `audits/night-2026-10-22/P3-candidates/analysis.md`. | OPEN | — | (c) a read-only fingerprint compare on a reinstalled test box; (e), (f), (h) re-read, then unit tests; (d) to the operator at the next design review | CC |
@@ -203,14 +202,10 @@ stopping line that lies.
| **R-1200** | Backup & restore | P3 | **A box installed in the afternoon gets no whole-box backup on its first night: the install's own backup starts the 24 h clock, so the family's whole first day reaches a whole-box copy only on the SECOND night (~38 h after install).** Rehearsal 2026-10-20 B5 (`audits/rehearsal-2026-10-20/B5-night/README.md`): Tester4's install backup at 12:09Z; at the 02:30–06:30Z window the agent answered „within cadence window" (`felhom-agent internal/localapi/server.go:1187`, `age >= tier.Cadence`, default 24 h). R-899 (closed) fixed the same shape for a daytime PRESS only. The other tiers did run that night (database copy, second drive, off-site — all PASS), so app data was covered; the whole-box (DR) tier was not. | **OPEN** — a design question: should the first scheduled night always run (like a press), or is one tier enough on night one? | — | decide; if „always run": treat the install backup like a press in the due rule, with a test on the first night | CC |
| **R-1206** | Backup & restore | P3 | **Backups written while the box's clock ran ahead stay „the latest" after the clock is fixed.** The rehearsal's scenario #10 (clock set to 2026-10-28) left off-site snapshots dated 2026-10-28; on 2026-10-21 the rebuilt box's recovery page listed every app's „Legutóbbi mentés: 2026. 10. 28. 07:39", and the full restore said „mentés: 2026. 10. 28. 07:37" — a date in the future (`audits/fixes-2026-10-21/P1-live/07-unlock-right.txt`, `11-nextcloud-full-restore.txt`). restic orders snapshots by their own time, so the future ones are „newest" to every retention rule for a week. NOT measured: whether the box's keep-daily prune then drops a real snapshot. Related R-1202, R-1204 (clock). | NARROWED — the NAS tier only. **2026-10-22 night (read, `backup/offbox_window.go:22-24, 130-137`):** on the Felhom off-site tier no real snapshot is lost — the guard refuses a prune while any snapshot is future-dated (R-822, by design). The NAS tier prunes without that guard: open. **2026-10-25:** the kept-data choice no longer takes such a future-dated copy as the newest (R-1271, controller `bd9f4f7`); retention is unchanged — this row. | — | A pure unit test with the policy simulator on the NAS tier and one future-dated snapshot; if a real one is dropped, give the NAS tier the same guard | CC |
| **R-1212** | Backup & restore | P4 | **Two household texts on the backup path do not follow the box's language:** the share-restore summary (`SharesRestoreResult.FlashMessage`, `controller/internal/backup/shares_restore.go`) is built from Hungarian Go literals, and the off-site `LastError` for an interrupted run is the Hungarian literal „megszakadt futás (a vezérlő újraindult futás közben)" (`controller/internal/backup/backup.go`). An English household reads Hungarian there. Found by the night helper 2026-10-21. | OPEN | — | Bundle keys for both (rendered in the box language when written, R-557), with parity fixtures | CC |
| **R-1218** | Backup & restore | P2 | **A recovery ceremony done while off-site is switched off (or cleared) seals no off-site repository password, and the hub then demotes the GOOD older package to operator-only custody: the household's own recovery code no longer opens its off-site copy.** REAL in code (night 2026-10-22, read; split from R-1190 (a)): `web/escrow_handlers.go:217-224` stages the password only if `OffboxConfigured()` (`backup/offbox.go:695-710`), false when the target is cleared or disabled — although `ClearOffboxTarget` keeps the password file on purpose (`offbox_clear.go` header); the agent then seals no password (`cmd/felhom-agent/main.go:2981-3003`) and uploads sha ""; hub `SaveHostEscrow` sees `curSHA != ""` and moves the good package to retained custody; `OffsiteRecoveryOffer` reads "" as „covers no key” (`offbox.go:1855-1873`) and says nothing. Evidence `audits/night-2026-10-22/P3-candidates/analysis.md` §R-1190(a). | **OPEN — fixed on `main` (both halves), red-proved; LIVE PROOF PENDING** — controller `1170b48` (stage when the password FILE exists) + hub `09b5f02f` (a keyed package is never replaced by a key-less one: 409). The live shape needs off-site switched OFF on a hub box: the household cannot switch a hub tier off (only per-app switches; a clear is refused by design), so it needs the operator's customer-page change on Tester 1 during Tuesday's attended block — otherwise both halves are REVERTED before the release (rule 2). **Earlier:** OPEN — proposed fix, not built (key-handling code: a fix needs a red-proof AND a live proof, and 9202 has no hub to prove it with) | — | Fix (~6 lines): stage when the password FILE exists (`PushOffboxPasswordForEscrow`, `offbox.go:800`, reads only the file). Red-proof: a web test that the stage runs with off-site cleared; a hub store test pinning „abc”→"" ⇒ superseded (and refuse that demotion). Live proof on a test box with a hub (demo-hp 9201) | CC |
| **R-1219** | Backup & restore | P2 | **During a recovery offer the backups page hides the „create your recovery code” ceremony (it would replace the key that opens the old off-site copy), but the global top bar still links to it and the start handler does not refuse.** REAL in code (night 2026-10-22, read; split from R-1190 (b)): `web/escrow_banner.go:23-35` ignores `recoveryOffer()`; `templates/backups_remote.html:144-160` hides it and its own comment names the harm (R-199); `escrow_handlers.go:180-245` starts anyway; reachable in offer shape (c), `offbox.go:1866-1870`. Evidence `audits/night-2026-10-22/P3-candidates/analysis.md`. | **VERIFY — fixed on `main`, waits for the controller release** — controller `1170b48` (the top bar hides the ceremony during a recovery offer; the start handler answers 409 `api.escrow.recovery_offer_open`), red-proved with a real session and a no-offer control. The offer state cannot be staged without hand-set state, so the handler test is the proof (the brief's allowance). **Earlier:** OPEN — proposed fix, not built (key-handling code) | — | Fix: the bar hides its link during an offer, and the start handler answers 409 with a Hungarian sentence; red-proof with a handler test; live proof with an offer state on a test box with a hub | CC |
| **R-1220** | Backup & restore | P2 | **„Megőrzött adatok” (kept data) can list an INSTALLED app's live folder as kept — and offer to delete it — when that app's app.yaml cannot be read.** REAL in code (night 2026-10-22, read; split from R-1190 (g)): a nil AppConfig drops the app from `liveDriveBinds` (`stacks/kept.go:220-235, 336-360, 372-389`); a parse error gives nil (`deploy.go:1113-1125`). Evidence `audits/night-2026-10-22/P3-candidates/analysis.md`. | **VERIFY — fixed on `main`, waits for the controller release** — 2026-10-26 night: controller `7e15a37` (an app whose `app.yaml` exists but does not parse counts as installed; its folders are never kept data), red-proved; live on 9202 (the kept-data page did not list the folder) — `audits/night-fixes-2026-10-26/`. **Earlier:** OPEN — proposed fix, not built (delete-path code) | — | Fix: an app whose app.yaml is unreadable counts as live (fail closed); its folders are never listed as kept. Red-proof: a unit test with a broken app.yaml; 9202 proof with a throwaway app | CC |
| **R-1221** | Backup & restore | P4 | **The nightly whole-box backup starts ~1.5–5 min later each night, until one night is skipped (after ~70–80 nights with no press between).** REAL, low harm (night 2026-10-22; split from R-1189 (b)): agent `localapi/server.go:1184` is `age >= Cadence` with the age counted from the archive START; the controller polls every 5 min (`quiesce.go:150`) and the archive starts after the apps stop. Measured on demo-hp: 04:31:07 → 04:33:18 → 04:36:47 → 04:38:14, and 04:33:37 → 04:38:44 → 04:42:40. At W+6h one night is skipped (44 h is below the 48 h valve, `quiesce.go:807-818`); the hub's 26 h line (`deadline.go:29`) mails the operator. Any manual or off-cycle run resets the drift. Evidence `audits/night-2026-10-22/P3-candidates/demohp-whole-box-completions.txt`. | OPEN | — | Fix: inside the night window a tier is due at `age >= cadence - 4h`; the agent answers due-ness, so it is agent code (a unit test with an injected clock) and rides an agent release | CC |
| **R-1228** | Backup & restore | P3 | **The website, the installer script and the hub are all served from the home line — a DooPlex loss stops new installs and the public site.** DooPlex survey 2026-10-23 night (`audits/dooplex-survival-2026-10-22/PLAN.md`, G8): `felhom.eu`, `hub.felhom.eu` and `gitea.dooplex.hu` resolve to the home address; the installer fetches `felhom.eu/scripts/felhom-host-install.sh`; only the ISO (Cloudflare R2) survives. | OPEN — **2026-10-23 — D35 ruled YES, after the release week (operator):** serve the website and the installer from Cloudflare like the ISO. Dated: start on or after 2026-10-30 (DUE-CHECKS). OPEN | the operator's yes | Operator decides (STATUS): A) accept — Gitea and the hub first, the site after; B) the static site + the installer tag on Cloudflare like the ISO — CC's pick, after the release week | CC (ruled yes 2026-10-23, D35) |
| **R-1229** | Backup & restore | P4 | **ArgoCD's per-app auto-sync settings live only on the cluster, not in git.** DooPlex survey 2026-10-23 night (`audits/dooplex-survival-2026-10-22/PLAN.md`, G9): the Applications differ (`enabled` true/false, prune, selfHeal); a rebuilt cluster from `homelab-manifests` would not have them. | OPEN | — | Write each Application's sync policy into `homelab-manifests` (a homelab change, the operator's yes for the commit that changes live behaviour) | operator |
| **R-1231** | Backup & restore | P4 | **The recovery page says the box's host service is „older” when the controller only cannot tell.** Test night 2026-10-23 (`P4-testnight/07a-unlock-refused-fixture-version.txt`): with the agent's capability `unknown` (a version string it could not compare), the page read „…a hozzá tartozó házon belüli szolgáltatás régebbi… A gép magától frissül”. The same page is reached by a merely-down agent, for which „older” and „updates itself” are not true. | OPEN | — | A separate sentence for `unknown` („a gép most nem éri el a házon belüli szolgáltatást — próbáld újra pár perc múlva”); a render test per state; rides a controller release | CC |
| **R-1232** | Backup & restore | P2 | **A reinstalled box may take its first whole-box copy to ep0 up to a week late: the old box's copy in the same household space seems to count as its last one.** Test night 2026-10-23 (`audits/night-2026-10-23/P4-testnight/`): the new Tester4 box (guest 9201) had its PBS tier applied at 19:28 UTC, but no whole-box run to ep0 came all night; the only archive in the household's ep0 space is the rehearsal box's `ct/9201` of 2026-10-20 (same guest number), and the tier's cadence is 168 h. The agent's due-check reads the newest archive for that vmid on the tier's storage (`localapi/server.go` `newestArchiveOn`) — so the old box's copy reads as „2.6 days old, not due”. If so, the ep0 copy is the OLD box's for up to a week. PLAUSIBLE — read from the code and the night's silence, not proven by a log line (the controller logs the due-check only at debug). | **VERIFY — fixed on `main`, waits for the agent release (the operator's vouch)** — 2026-10-26 night: agent `3911cc6` (the due-check counts only archives with this storage's key, the R-727 discriminator), red-proved; live on a fresh BYO Tester4 box (VM 9375): the released agent said `due: false` (the old box's archive, 6.3 days), the fixed one `due: true / absent`, and the first whole-box copy ran 4 minutes later — `audits/night-fixes-2026-10-26/`. Hub host `Tester4-b5dbbd` to delete (operator). **Earlier:** OPEN | — | Prove: read `GET /backup/tiers` for the box (the agent's answer per tier) on the next reinstall; fix: a tier's „last backup” counts only archives this host wrote (or after the host's enrollment); an agent test with a foreign archive in the namespace | CC |
| **R-1235** | Backup & restore | P3 | **The release copy on ep0 (D33) is proven to load, not yet to restore a registry — and it follows the newest versions, not the ones the fleet needs.** Built 2026-10-23 (`scripts/release-copy/`, `audits/day-2026-10-23/08-release-copy-D33.txt`). (a) `total-loss-of-dooplex.md` „Restore the release copy” steps 2 (skopeo push back, same digest) and 3 (agent packages back) were never walked into a real new registry — only a `docker load` on 9202. (b) The copy keeps the newest 3 image tags and 5 agent versions; it does not ask the hub for the floor and the vouched agent and always include them — a vouch more than 5 releases behind would fall out. (c) The golden (`felhom-golden`, 637 MB for 0.331.0) is not copied: a new install after a DooPlex loss needs it (the brief named images + agent packages only; one golden fits under the 3 GB cap). | OPEN | — | (a) a throwaway registry on demo-hp, push one tag back, compare digests; (b) read `/configuration`'s floor + vouched agent; (c) the operator says whether the golden goes in | CC |
| **R-1263** | Backup & restore | P4 | **Small items from review round 2:** a LOCAL restore's put-back mails the operator „its off-site restore FAILED” (`felhom-controller/controller/cmd/controller/main.go:1514-1518`, shared via `restore_unit.go:517-518`); Remove — even „keep my data” — deletes undeclared volumes labelled with the app's project, which no tier holds (`internal/stacks/delete.go:763-764`, R-1117); the capped copy's `--delete` reads the source in the daemon's mount view, the emptiness check in the controller's (`tier2.go:834` vs `:464`); stale comments — `felhom-agent/internal/localapi/backup_cap.go:15` („keep-last”) and `restore_crash_putback.go:32` (names a test file that does not exist); the qBittorrent password goes to whatever answers the DNS name `qbittorrent` (`upwatch/explain.go:94,108-113`); kept-copy Remove has a check-to-remove gap (`tier2_kept.go:92-111`); the release-copy restore check trusts hashes stored on ep0 (`runbooks/total-loss-of-dooplex.md`); rrsync without `-munge`/`-wo` (`audits/day-2026-10-23/08-release-copy-D33.txt:6`). | OPEN | — | fix in each repo's next attended pass | CC |
| **R-1294** | Backup & restore | P3 | **demo-hp's weekly off-site clean-up was refused by its own guard on 2026-10-26 (window 16): the plan would remove 209 of 359 snapshots, above the week's cap (179) — nothing was deleted, and each refused week adds to the next plan.** Seen in the operator mailbox during the 2026-10-26 release run (03:17Z, `offsite_prune_guard_refused`, error; details `count_before 359, count_after 359, outcome guard-refused`). The cap refusal is kept on purpose (R-824, R-867 closed the false ones); the open question is whether a store that once exceeds the cap can ever prune again by itself, or refuses every week while it grows. demo-hp is the Tier-0 box with many hand-made backups (sweeps, probes). Earlier cap refusals: demo-hp 2026-10-03 (window 1), demo-felhom 2026-10-05 (window 3). | **OPEN — the grant is SET (D55 = 260, `09` §3 decision 268)**: 2026-10-26 19:10:31Z through the operator's one-purpose token `cc-d55-window`, read back `max:260`; it is used at demo-hp's next window request (after its nightly off-site run, ~03:15Z). Close when that window prunes; then the operator revokes the token. **Earlier:** WAITING-ON-OPERATOR — 2026-10-26 evening: CC could NOT set the D54 grant — `POST /offsite/window-grant/demo-hp` (`max_remove=220`) with CC's hub token answered **403 „missing scope offsite:write"** (the hub log shows the refusal; nothing granted). The plan also grows: restic's dry-run 2026-10-26 18:56Z still 359 copies / plan 209 / default cap 179 (before tonight's run); a simulation of the keep rule adds ~14 per night (14 of 18 groups back up nightly), so ~223 at the night of 10-27 and ~237 at 10-28 — a cap of 220 would be refused again. STATUS D55: the operator grants it, with the cap. The grant opens the box's NEXT window request, which comes after its next nightly off-site run. Ruled D54 = prune once (`09` §3 decision 266). **Earlier:** WAITING-ON-OPERATOR — 2026-10-26 (read only, `audits/r1294-offsite-cap-2026-10-26/`): the plan is HONEST (restic's own dry-run: keep 150, remove 209; every removal 7–30 days old; every app keeps ≥ 9 or its last copies; the bulk is one test day, 2026-10-16, 152 snapshots). It can NOT recover by itself: the cap is half the store and grows ~49/week while the plan grows ~84/week. Only demo-hp has this shape (demo-felhom and Tester 1 pruned normally 10-26). The pick is STATUS D54. **Earlier:** OPEN | — | read the guard's cap rule (controller off-site prune) against demo-hp's snapshot list: is the plan honest (old, superseded) or not; if honest, say how such a store gets back under the cap (an attended one-time prune, or a cap that follows the store) — a design question for the operator if it changes what a box may delete | CC |
@@ -233,7 +228,7 @@ stopping line that lies.
| **R-1275** | Storage & devices | P4 | **An English household sees the drive names in Hungarian** on the install page (and wherever a storage label shows): „Belső tárhely — 52.0 GB free (default)”, „Külső tárhely (hdd_1)” (catalog sweep 2026-10-24, `audits/catalog-sweep-2026-10-24/navidrome/page-install-en.txt`). The label is stored once, in Hungarian, when the drive is found (`felhom-controller/controller/internal/settings/settings.go` `InferStorageLabel`); a household may rename it. | OPEN | — | Render a label that still equals the inferred default in the reader's language; a test per language | CC |
| **R-1276** | Storage & devices | P4 | **„Remove with data” leaves the app's empty parent folder** (`<drive>/appdata/<app>`) when the template binds a subfolder: Grimmory, RomM, Paperless-ngx (catalog sweep 2026-10-24; 4 KB each; the bound folders were removed). Harmless (empty, not counted as old data), untidy for a household that browses the drive. | OPEN | — | Remove the parent when it is empty after the bound folders go; a test | CC |
## Security & access — 30 rows (P1 2, P2 5, P3 16, P4 7)
## Security & access — 31 rows (P1 2, P2 5, P3 17, P4 7)
| ID | Category | Sev | What | State | Blocked on | Next action | Owner |
|---|---|---|---|---|---|---|---|
@@ -267,8 +262,9 @@ stopping line that lies.
| **R-1237** | Security & access | P3 | **The nightly CC-secrets sweep found stored one-time codes in a session record dated 2026-10-23: 14 names in one file (bind tokens and setup codes of test boxes — NIGHT_2026_10_23_*, FIXES_2026_10_21_*, NIGHT_2026_10_21_*, REHEARSAL_2026_10_20_* — and R_DEMO_FELHOM in a file of 2026-10-20).** Mail „[DooPlex CC secrets] 2 secret name(s) found in old session records", 2026-10-23 01:57 UTC, read in the day session (names only). One file holding all of them suggests one command printed many stored values at once (a listing or a dump) in the night session. All but R_DEMO_FELHOM are one-time install codes of test boxes; NIGHT_2026_10_23_* die when Tester4-16fdef is deleted (the operator's do list). | OPEN | — | CC: find the file and the command by the sweep's own report (names only), add a hook shape for that command if it is not one; R_DEMO_FELHOM (demo-felhom's recovery code) — the operator decides whether to rotate it | CC |
| **R-1248** | Security & access | P3 | **An app's own numbers can lie: an attacker with code inside an app's container can answer the app's API with whatever matches its flood, and the upload watch (R-1244) would then call it explained.** Measured remedy, not built: a per-container upload ceiling with `tc` from a helper container in the app's network namespace — on scratch 9202 (unprivileged) a flood was held at 19.9–20.1 Mbit/s and the app kept answering (`audits/SPIKE-upload-watch-2026-10-23.md` §5). Costs: a helper image with `tc` (a new external image, or `tc` in the controller image), `NET_ADMIN` for that helper, re-applied after each app restart. | OPEN | an operator decision (the new image / capability) | Decide; if yes, CC builds the ceiling for the download and media apps first | operator |
| **R-1309** | Security & access | P4 | **What no automated source shows: a fix announced only by mail, forum or a blog we do not read; a security fix nobody calls one (cloudflared 2026.10.2's „bump distroless image"); closed-source apps (Plex, Emby).** The watch (R-1303) shows these only as BEHIND (weekly). The vendor mails the operator receives stay a source. `audits/security-watch-2026-10-26/SPIKE.md` | OPEN — filed 2026-10-26 (a stated limit) | — | none until a vendor offers a feed; add a vendor's feed to `security_watch.FEEDS` when one exists | CC |
| **R-1312** | Backup & restore | P3 | **The hub customer page's off-site switch did not reach the box: on Tester 1 (2026-10-27, operator-attended, ~14:00–14:12 UTC) the box's saved off-site target stayed `enabled` and its `controller.yaml` `offsite.enabled: true` (unchanged since 2026-10-04) while the hub showed off-site OFF.** So what the switch stops on the box side is not known: the controller reads `cfg.Offsite.Enabled` only at start (`cmd/controller/main.go:890`), and nothing rewrote the file. Either the switch is hub-side only by design (then the page must say so), or a box keeps pushing off-site while the operator believes it is off. Found by the R-1218 live attempt (R-1218 closed 2026-10-27 with its live proof waived by the operator). | OPEN | — | Read the hub handler behind the switch and what it changes (config, tenancy, storage access); then one attended run: switch off, watch the box's next off-site push (does it run, does it fail at the storage) | CC |
## Box system & updates — 14 rows (P2 1, P3 8, P4 5)
## Box system & updates — 13 rows (P3 8, P4 5)
| ID | Category | Sev | What | State | Blocked on | Next action | Owner |
|---|---|---|---|---|---|---|---|
@@ -277,7 +273,6 @@ stopping line that lies.
| **R-984** | Box system & updates | P4 | **Host and agent hardening, low risk each: the backup-target route has no role check; the unsigned guest spec has no size bounds; signed ops have no maximum validity; the guarded mkfs does not refuse LVs, zvols or RAID devices; the local API is reachable from the LAN by a static route; a sudoers inspect pattern is wider than needed; install passes secrets on the command line; guest settings files are world-readable; the host offers rpcbind and DNS on the LAN.** Fix each in its own small change. Security review 2026-10-12 (`audits/security-review-2026-10-12/`); detail held off-git for the operator (`/mnt/5_hdd/felhom.eu/evidence/security-review-2026-10-12-PRIVATE/`). | OPEN | — | Batch into hardening work | CC |
| **R-979** | Box system & updates | P3 | **Controller updates are trusted by registry tag alone (no digest, no signature), and the Update button offers any newer tag, even an unvouched one; the built-in traefik, cloudflared and FileBrowser images are also pinned by tag only.** Whoever can push to the registry decides what runs. Fix: pin by digest from the hub's vouched list; offer only vouched versions. Security review 2026-10-12 (`audits/security-review-2026-10-12/`); detail held off-git for the operator (`/mnt/5_hdd/felhom.eu/evidence/security-review-2026-10-12-PRIVATE/`). | OPEN — design-proposal | — | Design note, then build | CC |
| **R-974** | Box system & updates | P3 | **A compromised host agent can likely become root on the host through the root wrapper that applies PBS settings: the wrapper accepts a folder path inside the agent's own writable tree and then acts on it as root.** Static (the symlink behaviour was reasoned, not run). Same class as R-861. Fix: a fixed root-owned folder, and refuse symlinks before any root action. Security review 2026-10-12 (`audits/security-review-2026-10-12/`); detail held off-git for the operator (`/mnt/5_hdd/felhom.eu/evidence/security-review-2026-10-12-PRIVATE/`). | OPEN | — | Fix the wrapper with a test on a throwaway box | CC |
| **R-972** | Box system & updates | P2 | **The shipped controller and hub programs are built with Go 1.24.13 and golang.org/x/crypto v0.31.0, and the agent with Go 1.26.0, so dozens of fixed Go security bugs (including html/template escaping fixes) are still in what runs on boxes and the hub.** Go 1.24 has had no security fixes since Go 1.26 was released (Go supports the two newest major releases: https://go.dev/doc/devel/release#policy); the scanners name fixes in Go 1.26.9 and 1.27.2. Also: the controller image's Debian 12 base has 12 fixable critical packages, and the Samba image has 48 fixable high ones. Fix: build all three on a supported, patched Go; update x/crypto; rebuild the base images. Scanner output: `audits/security-review-2026-10-12/scanners/`. | **NARROWED — Go 1.27.3 committed in all three, waits for the releases** — 2026-10-26 night: agent `fbbb168`, controller `2560cf1` (+ builder `golang:1.27.3-trixie`), hub `d625a143` (+ `golang:1.27.3-alpine3.24`); govulncheck 1 → 0 called vulnerabilities each (GO-2026-6809, `crypto/x509`); x/crypto v0.58.0 already newest; full tests green — `audits/r972-go1273-2026-10-26/`. **Earlier:** **NARROWED** 2026-10-16 (burndown 2): **controller v0.322.0 released** on Go 1.27.2 + x/crypto v0.58.0, runtime debian:12.13-slim + `apt-get upgrade` (Debian 13 deliberately not: restic 0.18, R-1105) — scanner: critical 16 → 4, fixable criticals and highs in the OS 0; govulncheck 62 → 1 (module-level, `openpgp` not linked). **Hub v0.156.0 deployed** 2026-10-16 19:26 on the operator's yes (Go 1.27.2, alpine 3.24.2: 0 critical, 0 high); Synced/Healthy, reports from all three boxes after the start, the floor reads 0.322.0. **Agent: Go 1.27.2 committed (`37b99d7`), tested, NOT released** — the next vouched agent release carries it. Open: the Samba image (48 fixable high, not rebuilt); docker-compose plugin's own Go (4 high, upstream). Evidence `audits/burndown2-2026-10-16/P4/` **2026-10-16 (evening): the Samba part is DONE in controller v0.323.0** — felhom-samba 1.2.0 on Alpine 3.24.2 (0 critical / 0 high, was 48 fixable high), proven on demo-hp with the same household password (smbclient, nmbd, mDNS, WS-Discovery); on the three test boxes now, on every box with the global floor (R-1105's night check). The controller's Debian 13 OS part: 1 critical / 70 high, none fixable. Left: docker-compose plugin's own Go (4 high, upstream); the agent release; restic's binary is R-1107. **2026-10-17 (evening): agent v0.159.1 (Go 1.27.2) RELEASED and running on demo-hp, Tester 1 and demo-felhom** (signed jobs on the operator's yes); waiting for the operator's vouch — then only the upstream compose plugin is left (close then, recorded). | the next vouched agent release | Close when the global floor carries v0.323.0 and the next vouched agent release carries Go 1.27.2 (compose plugin: upstream, recorded) | CC |
| **R-1214** | Box system & updates | P3 | **On the 8 GB box with the swap fix, the night's second-drive backup still pushes memory „full" pressure above 20 % for about 3 minutes; the box keeps answering.** Night soak 2026-10-21→22 (`audits/night-2026-10-21/P1-soak/03-rec.jsonl`, 10-s samples; fresh box from the public ISO, agent with swap = RAM, 8 apps, the rehearsal uploads for 2 h): at 01:30–01:34 UTC (the 03:30 tier2 job) host 39 % / guest 45 % over 10 s, over 60 s at most 20 % / 25 %; IO „full" 66 %; guest swap 1.35 → 2.1 GB; `/api/health` answered every probe (slowest 4.1 s, largest interval 16 s); 0 OOM kills. Once more in the upload window (Immich loading its models, 31 % / 35 % for one sample). The brief's soak pass line was „full" < 20 %, so the soak missed that one line; the freeze itself (96 % for an hour, R-1192) did not come back. Not diagnosed: which part of the tier2 job (the copy's page cache, the volume dumps) causes it. | WATCHING — **2026-10-24 02:4xZ dated check read (weekend-night session, read only):** Tester 1 (8 GB host, guest 4 GB, controller 0.341.0) ran its 03:30 copy at 01:30:00–01:30:13Z (3 apps, 157 MB + 86 MB + 16 KB; no „capped copy container did not start" WARN, no leftover `felhom-tier2-copy-*`); the guest cgroup's memory „full" stall counter on the host (`/sys/fs/cgroup/lxc/9201/memory.pressure`) read **total 444 µs** over the whole 11.1 h since the host started (15:32Z), so „full" stayed far under 20 % (20 % of 10 s = 2 s); 0 OOM kills. **Not shown:** that the copy ran in the capped container (the INFO log does not name it; Docker keeps only ~200 events, from 02:36Z). **Weak load:** 0.24 GB, not the soak's large copy — so the row stays WATCHING; close after a night whose copy moves ≥ 1 GB, read from the same counter. WATCHING — **RELEASED 2026-10-23 in controller 0.340.0** (floor 06:41 UTC; on all three test boxes, start-up „no leftover”, 0 copy containers; Tester 1's manual second-drive run: 3 apps, 0 containers left). **Open only for the consequence:** dated check 2026-10-24 — Tester 1's first night copy ran in the capped container and memory „full” pressure stayed under 20 % (the box's own night log). READY — rides controller 0.340.0. READY — waits for the controller 0.340.0 release. **2026-10-22 night — cause measured, fix built and proven on 9202, waits for the controller release.** Cause: the copy's page cache is charged to the guest and evicts the apps' working set. On 9202 (4 GB RAM, 1.8 GB held by a hog, a 6 GB copy): plain rsync full stall 5 702 / 2 464 ms, peak „full” 16.8 / 6.9 %; the same copy in a 512 MB memory-capped container 374 / 320 ms, 0.9 / 1.0 %. Controller main `03c0a69` + `ae39467` (unreleased, rides 0.340.0): the copy runs capped only for clean `/mnt/` paths with no symlink (security review); a docker error (exit 125) falls back to plain rsync. A real `POST /api/backup/tier2` on rc.4: 6 capped containers, each exit 0; Immich's copy equals its source (dry-run 0 differences, 44 = 44 files). Evidence `audits/night-2026-10-22/P4-R1214/`. **2026-10-23 night (stray-copy fix, night brief Part 1).** The capped copy's container outlived the copy (a timeout or a controller restart killed only the `docker` CLI; `--delete` went on outside the R-1180 guard). Controller main `66a69d4` + `912e592` (unreleased, rides 0.340.0): a fixed name + label per copy, removed by name on any error, every leftover removed at start before the scheduler and the web server, a restore refused while a copy runs or may run; `--mount` (a path the daemon does not see is refused, not created empty) and the image ID with `--pull never` (review C4, C7). Proven on 9202 with rc.5 (`audits/night-2026-10-23/P1-straycopy/`): a restart in the middle of a 16 GB copy → the new controller removed `felhom-tier2-copy-immich-948f2280` at start, the restore probe was refused during the copy, the redone copy equals the source; a 15 s test build → the timed-out copy's container removed, the partial copy stopped growing. A second review of that code (N2–N5) and the commit's own security review (two races) → `9d9e404`, `1babfe9`: a stray clears when a later removal works, the start-up check never removes this process's own copy and holds the destination's lock, one copy per destination at a time, `RunTier2` refuses during a restore for every caller and records itself in one step with that check, every leg asks again. Re-proven on 9202 with rc.8 (`audits/night-2026-10-23/P1-straycopy/1*`). 9202 back on 0.339.0. | — | Release 0.340.0; then re-measure the 03:30 job on the 8 GB soak box and close if „full” stays low | CC |
| **R-862** | Box system & updates | P3 | **Tester 2 cannot take the config bundle until one by-hand bootstrap is done: its `felhom-os-apply` (agent 0.142.0) predates the bundle mode, and no signed job can write a root file on it.** FOUND 2026-10-04 (R-840 build, Part C): the route reaches every box installed from installer 1.31.0 on, and the demo boxes (bootstrapped by CC); Tester 2 has every root file of agent 0.142.0 (installer 1.30.0) and lacks only the R-858 wrapper fix, which matters only for a Docker step it gets solely from a signed job. CC has no route to Tester 2 (its door admits only the operator's WireGuard peer; `felhom-op` cannot become root). The steps: `runbooks/config-bundle.md` "Tester 2". Then CC signs the bundle and reads it back. | **WAITING-ON-OPERATOR** — the operator said (2026-10-04 ~19:05) he will try through his tunnel **2026-10-07 07:58 (`09` §3 decision 170): the operator believes Tester 2 never set up the off-site backup (no escrow); the laptop may stay off for days; the tester plans to add an HDD.** **2026-10-07 (Part H, read only):** in Tester 2's last 10 notifications (2026-10-05 09:16 → 2026-10-07 06:58) the household got 0 mails, the operator 10 (host_down ×9, expected_dbdump_missed ×1); control: the household channel shows on the other three customers. So the household is not mailed daily while the box is off; no row (`audits/day-2026-10-07/H/`). **2026-10-22: closes when Tester 2 is reinstalled (operator ruling 2026-10-22 14:11 — a new install from the public download replaces the bootstrap and the off-site check; `pilot/TESTER2-handover.md`).** | the operator's WireGuard tunnel | the operator runs the three bootstrap commands; CC sends the bundle | operator |
| **R-78** | Box system & updates | P3 | **`local_api` authority ruling — auto-reconcile vs detect-only** **MIGRATED FROM `ROADMAP.md` 2026-08-22 (R-369) — originally filed 2026-07-25, size M, roadmap state `idea (deferred OUT of R-77 on purpose)`.** Moved verbatim; nothing added or reinterpreted. The roadmap keeps its copy as history, marked moved. **An OWED OPERATOR DECISION, not a defect — moved because an owed ruling hidden among feature ideas is the shape this session exists to remove.** | **OPEN — migrated from ROADMAP 2026-08-22, rank unchanged** | — | R-77 ships detection because the fix is genuinely undecided, and **both directions can lose customer-visible function**. **Direction 1 (today):** `controller.yaml` wins and drift is silent → the 2026-07-25 island migration blinded the whole fleet's control plane for 17.5 h (drive gate, guest-reboot recovery, quiesce/backup all degrade). R-77 makes that loud but does not stop it recurring. **Direction 2 (`bootstrap.json` wins, auto-reconcile on boot):** a guest whose `controller.yaml` is CORRECT and whose `bootstrap.json` is stale — a half-completed re-provision, a hand-repaired guest, a setup-wizard box — gets a **working channel clobbered on the next restart**, fleet-wide and silently, during a routine deploy. That is not obviously better than the bug. Needs a spike: which writer is authoritative per field (endpoint vs fingerprint vs token — `mergeLocalAPI` replaces the whole block, so they cannot be reconciled independently today), whether the agent side should stamp a generation/mtime so 'newer wins' is even expressible, and whether reconcile should require an operator ack. Until then the drift alert plus a manual edit is the supported path. | CC |
@@ -285,19 +280,17 @@ stopping line that lies.
| **R-1004** | Box system & updates | P4 | **After an unclean stop every guest ext4 volume waits ~43 s in multi-mount protection before it mounts, so each restart after a power cut takes ~1.5 min longer.** Kernel: „EXT4-fs warning (device dm-6): ext4_multi_mount_protect: MMP interval 42 higher than expected, please wait" on dm-6/dm-7 and loop0/loop1, demo-hp and Tester 1, every round of `audits/night-power-2026-10-13/` (R1 `repairs.txt`). | **READY** — filed 2026-10-14 | — | CC: find where MMP is switched on for the guest volumes (Proxmox `pct` create, or our own mkfs), whether it protects anything on a one-host disk, and measure the restart without it on a scratch guest | CC |
| **R-1013** | Box system & updates | P4 | **After a power cut the agent's start-up stale-lock pass logs an ERROR „pct unlock failed … no lock found" when Proxmox's own start-all removed the lock in the same second.** The outcome is the goal (no lock), so the line is a false alarm in the log. Seen on demo-hp 2026-10-14 12:07:44–45 UTC (`audits/power-cut-fixes-2026-10-14/E/after-boot.txt`; Proxmox: „removed left over backup lock from '9201'!"). Small, but the agent's release for this session is spent (v0.156.1). | **OPEN** — filed 2026-10-14 | — | CC: treat „no lock found" from `pct unlock` as already clear (INFO), with a test; ride the next agent release | CC |
| **R-1061** | Box system & updates | P4 | **A per-customer floor reached Tester 1 only at its next 15-minute report, not in seconds.** Set 2026-10-15 12:55:51 UTC for tester-1, demo-hp and demo-felhom together (hub 0.153.0, CC's token): demo-hp and demo-felhom ran 0.314.0 within 13 s (the hub's wake); Tester 1 moved at 13:09:35, its regular report (`audits/gate-restore-2026-10-15/release/03-boxes-move.txt`). It had restarted at 12:54:29 onto rc.1 and logged „hub wait channel active". Why the wake did not reach it is not read (the wake line is DEBUG). No harm: the floor arrived. | **OPEN** — filed 2026-10-15 | — | Read Tester 1's DEBUG ring at the next floor change; compare with the hub's bump log | CC |
| **R-1285** | Box system & updates | P4 | **D43's removal of our SSH drop-in from a BYO host happens one bundle LATE: the bundle run that delivers agent 0.165.0 is planned by the box's OLD (0.164.0) wrapper, which writes the drop-in as before („same"), and only then replaces itself.** Measured 2026-10-25 on the BYO test host (VM 9371 on demo-hp, `Tester4-f967d4`; attended release run): 0.164.0 day-0 → signed `agent_update` + `agent_config_update` 0.165.0 → the planted drop-in still there; a second `agent_config_update` (same bundle) → `BUNDLE REMOVED … (ours, on a BYO host — D43)`, nothing written, `sshd -T` the owner's own `permitrootlogin yes` (`audits/release-2026-10-26/byo/byo-proof.txt`). No box is affected today (the fleet's only BYO host is this test host); a fresh BYO install on ≥ 0.165.0 runs the new wrapper from the start. | **VERIFY** — 2026-10-26: agent `b1bc63d` (unreleased) — the new agent runs the bundle-policy pass once right after its self-update commits (`selfupdate.SetOnCommitted`); test in the real order (commit, then one pass), red-proved. **Not live:** only a box coming FROM 0.164.0 discriminates (0.165.0's wrapper already applies D43), which needs a signed downgrade chain on a BYO box — the live proof rides the next agent release. **Earlier:** **OPEN** — 2026-10-26 (agent 0.166.0 released, attended run): the policy pass is wired, but in the normal delivery it does NOT run: the box gets `agent_update` and `agent_config_update` in ONE pass, and the bundle job runs in the OLD process (demo-hp: pid 1966780, agent 0.165.0, bundle 09:03:07–09:03:09 CET; the restart into 0.166.0 at 09:03:10) — no `bundle policy pass` line on any of the three boxes. So a BYO host coming from 0.164.0 still loses our drop-in one release late. The night proof (`audits/night-2026-10-25/rig/r1285-live.txt`) ran a bundle under an agent that was ALREADY 0.166.0-code, so it did not cover this order. No BYO host is in the fleet today. Fix options: the agent runs the pass once at start-up after `update committed`; or the release procedure sends the bundle job only after the commit. **Earlier state:** **VERIFY** — fixed on main 2026-10-25 night (agent `abcc1e6`), waits for the agent release + the vouch: the agent runs the wrapper's `bundle-policy` pass after every install (red-proved, `redproof-r1285.txt`). **Live on the rig in ONE signed run** (BYO host, staged as upgraded from 0.164.0: the new agent by hand, the old 0.164.0 wrapper on disk, our drop-in planted; one `agent_config_update` of a test bundle): the old wrapper installed the bundle and replaced itself, then „BUNDLE POLICY REMOVED … (ours, on a BYO host)", `sshd -T` the owner's own `permitrootlogin yes` (`rig/r1285-live.txt`); the test package deleted from the registry after. **Earlier state:** OPEN | — | either the wrapper plans again after it replaced itself (one agent change + a test that a 0.164.0→0.165.0 bundle on a BYO record removes our copy in ONE run, red first), or the release procedure sends a BYO box's config bundle twice; until then a BYO box upgraded from ≤ 0.164.0 keeps our drop-in until its next bundle | CC |
| **R-1285** | Box system & updates | P4 | **D43's removal of our SSH drop-in from a BYO host happens one bundle LATE: the bundle run that delivers agent 0.165.0 is planned by the box's OLD (0.164.0) wrapper, which writes the drop-in as before („same"), and only then replaces itself.** Measured 2026-10-25 on the BYO test host (VM 9371 on demo-hp, `Tester4-f967d4`; attended release run): 0.164.0 day-0 → signed `agent_update` + `agent_config_update` 0.165.0 → the planted drop-in still there; a second `agent_config_update` (same bundle) → `BUNDLE REMOVED … (ours, on a BYO host — D43)`, nothing written, `sshd -T` the owner's own `permitrootlogin yes` (`audits/release-2026-10-26/byo/byo-proof.txt`). No box is affected today (the fleet's only BYO host is this test host); a fresh BYO install on ≥ 0.165.0 runs the new wrapper from the start. | **VERIFY** — 2026-10-27: agent v0.167.0 RELEASED; in the NORMAL signed delivery the pass now runs right after the commit on all three boxes („running the bundle policy pass after the self-update commit (R-1285)” → `BUNDLE POLICY DONE install_mode=appliance removed=0`; `audits/release-2026-10-27/agent-0167-tester1-demofelhom.txt`). Not live: a BYO box coming FROM 0.164.0 (none in the fleet). **Earlier:** **VERIFY** — 2026-10-26: agent `b1bc63d` (unreleased) — the new agent runs the bundle-policy pass once right after its self-update commits (`selfupdate.SetOnCommitted`); test in the real order (commit, then one pass), red-proved. **Not live:** only a box coming FROM 0.164.0 discriminates (0.165.0's wrapper already applies D43), which needs a signed downgrade chain on a BYO box — the live proof rides the next agent release. **Earlier:** **OPEN** — 2026-10-26 (agent 0.166.0 released, attended run): the policy pass is wired, but in the normal delivery it does NOT run: the box gets `agent_update` and `agent_config_update` in ONE pass, and the bundle job runs in the OLD process (demo-hp: pid 1966780, agent 0.165.0, bundle 09:03:07–09:03:09 CET; the restart into 0.166.0 at 09:03:10) — no `bundle policy pass` line on any of the three boxes. So a BYO host coming from 0.164.0 still loses our drop-in one release late. The night proof (`audits/night-2026-10-25/rig/r1285-live.txt`) ran a bundle under an agent that was ALREADY 0.166.0-code, so it did not cover this order. No BYO host is in the fleet today. Fix options: the agent runs the pass once at start-up after `update committed`; or the release procedure sends the bundle job only after the commit. **Earlier state:** **VERIFY** — fixed on main 2026-10-25 night (agent `abcc1e6`), waits for the agent release + the vouch: the agent runs the wrapper's `bundle-policy` pass after every install (red-proved, `redproof-r1285.txt`). **Live on the rig in ONE signed run** (BYO host, staged as upgraded from 0.164.0: the new agent by hand, the old 0.164.0 wrapper on disk, our drop-in planted; one `agent_config_update` of a test bundle): the old wrapper installed the bundle and replaced itself, then „BUNDLE POLICY REMOVED … (ours, on a BYO host)", `sshd -T` the owner's own `permitrootlogin yes` (`rig/r1285-live.txt`); the test package deleted from the registry after. **Earlier state:** OPEN | — | either the wrapper plans again after it replaced itself (one agent change + a test that a 0.164.0→0.165.0 bundle on a BYO record removes our copy in ONE run, red first), or the release procedure sends a BYO box's config bundle twice; until then a BYO box upgraded from ≤ 0.164.0 keeps our drop-in until its next bundle | CC |
## Monitoring & notifications — 25 rows (P2 1, P3 17, P4 7)
## Monitoring & notifications — 21 rows (P2 1, P3 13, P4 7)
| ID | Category | Sev | What | State | Blocked on | Next action | Owner |
|---|---|---|---|---|---|---|---|
| **R-1261** | Monitoring & notifications | P3 | **The R-1250 line hold (committed, NOT released): three edges before it ships (review round 2, HUNT-4 H4–H6).** Two seeders behind one uplink: the hold takes only the first, so the test is refused „not quiet” every 15 min in the Tuesday window and never counted (`felhom-controller/controller/internal/upwatch/linehold.go:155-160`; agent `internal/linetest/linetest.go:379-381`); a hold record of an app removed while held is never cleared and the 50 % rule never runs again (`linehold.go:106-108`; `upwatch/service.go:149`); a qBittorrent alt-speed flip during the hold leaves 1 KiB/s stored (`explain.go:175`; `linehold.go:127-128`). | **VERIFY** — RELEASED in controller v0.344.0 (global floor 2026-10-26 09:07:47Z, every live box on 0.344.0); the live test with a seeding box is Tuesday 10:00–16:00 (R-1250's dated check). **Earlier:** **VERIFY** — fixed on main 2026-10-25 night (controller `a79a292`), waits for the controller release (before any household gets agent 0.165.0 by signed update): every running seeder held, a removed app's record dropped, qBittorrent's slot named (`up_limit`/`alt_up_limit`). Red-proofs `audits/night-2026-10-25/redproof-r1261.txt`. **Live on the night's rig** (BYO VM, agent 0.165.0, rc.1, two seeders): both held, 94.8 Mbit/s, both limits back; a speed-mode switch mid-test left no 1 KiB/s (`rig/hold-watch*.txt`); the removed-app case by test only. **Earlier state:** OPEN — **now in controller 0.343.0 (released 2026-10-25); the three edges act only on a box whose agent is ≥ 0.165.0 (it alone reports `waiting_for_quiet`) — fix before any household gets agent 0.165.0 by signed update** | — | before the next controller and agent release: hold every running seeder; clear a record whose app is gone; read the mode | CC |
| **R-1262** | Monitoring & notifications | P3 | **The upload watch treats ANY viewer as an explanation for any amount of upload, so a hacked Plex can send freely while one family member watches.** Found 2026-10-24 (SEC-1 X1): `felhom-controller/controller/internal/upwatch/watch.go:275,299`; `08` §9 states the rule, its limits list did not name this case. | OPEN | — | propose a cap (viewers × a bitrate ceiling) for the operator's R-1244 design; `08`'s limits list names the case meanwhile | CC |
| **R-1310** | Monitoring & notifications | P3 | **The security watch (R-1303) flags notices that do not apply and misses fixes that do — measured by reading all 38 flagged pins by hand on 2026-10-27.** False: advisories of ecosystem `actions` (Home Assistant's CI), of another package in the repo (Gitea's runner), with a hostname or ≤-old range (cal.com 2023/2024, Grafana 2022), for the desktop/Electron client (Termix), for the rootless image only (Uptime Kuma); a release hit on a word (Dawarich „no longer receives security fixes", Rallly v4.16.0). Wrong „no fix": Vikunja's six (range `<= 2.6.0`, fixed in 2.7.0), karakeep-chrome (154/156 exist). Missed: Tandoor 2.7.0 names 8 GHSA ids (1 matched), Dawarich 1.16.0 (2FA, export deletion), Wishlist v0.69.0 (critical, no GHSA). BEHIND reads linuxserver `26.09.20260929` as newer than 26.09.2; Seerr follows the renamed-away `fallenbagel/jellyseerr`. `audits/security-app-updates-2026-10-27/TRIAGE.md` NOT-A-FINDING list and `triage-notes/` | OPEN — filed 2026-10-27; **two shapes FIXED the same day** (ecosystem `actions` not listed; an empty fix with a closed range reads „after X"; test W9, red first) | — | teach `security_watch.py`: skip a package that is not the pinned one; match every GHSA id a release body names; ignore `YY.MM.YYYYMMDD` tags; repoint seerr to `seerr-team/seerr`; each with a test seen failing | CC |
| **R-1020** | Monitoring & notifications | P4 | **`app_repaired_after_crash` reports a duration of 0 s, and the controller log says „in 0s".** `RunAfterUncleanBoot` sets `res.Duration` in a deferred func after the result is already returned (no named result), so the caller sees 0; the `app.yaml` record is right (10,172 ms on demo-hp 2026-10-14, `audits/immich-repair-2026-10-14/D/`). Small, but the controller release for this session is spent (v0.311.0). | **OPEN** — filed 2026-10-14 | — | CC: a named result (or set the duration before return), with a test on the returned value; ride the next controller release | CC |
| **R-528** | Monitoring & notifications | P2 | **[P2-MEDIUM] Docker does not report an OOM kill inside a Felhom LXC guest: `OOMKilled` stays false and no `oom` event fires, so the v0.243.0 OOM line is not proven live.** MEASURED 2026-09-15 on scratch 9202 (Docker 29.8.0): Paperless capped at 128M restarted 11 times with `OOMKilled=false` and zero `docker events --filter event=oom`; a memory hog inside the running container was killed (rc 137) with the same silence (`E2-oom-signal-measure-9202.txt`). BIGNIGHT VM 333 did read `oomkilled=true`, so the shape differs by case. **Fix shape:** the agent reads the guest container cgroups' `memory.events oom_kill` counters (host-side, reliable), or the controller alarms on a restart-count trend **RE-MEASURED 2026-09-16 on the DRILL box (fresh install, nested VM 334, Docker in an LXC guest, controller 0.243.0), so the finding is not a property of one machine:** the Paperless webserver was capped at 128 M with `docker update --memory`; it restarted 9-10 times, and all three signals stayed silent - `OOMKilled=false` on every inspect, `docker events --filter event=oom` EMPTY for the whole window, the container's cgroup not visible from inside the guest, and `dmesg` unreadable there. Identical to scratch 9202. So the v0.243.0 OOM line cannot fire on ANY Felhom box as shipped, on either host. Evidence: `audits/evidence-drill-0243-2026-09-16/phase2-m1-oom.txt`. | **WATCHING — DESIGN WRITTEN 2026-10-26 night (the brief's Part 7: build only if time is left; it was not built — the line test and the attended release came first).** The host-side counter EXISTS and is readable (read on demo-hp 2026-10-26): `/sys/fs/cgroup/lxc/<vmid>/ns/system.slice/docker-<64-hex id>.scope/memory.events`, line `oom_kill N`. **Design:** (1) agent: a read-only collector (no root CLI — a sysfs read under the agent's own rights; if not readable, the existing sudoers fence gets one read-only `Cmnd_Alias`) that, for each guest in the `felhom` pool, globs those scopes and keeps `{container_id: oom_kill}`; served on the guest's own local API as `GET /guest/oom-kills` (`withGuest`, the guest's containers only). (2) controller: the 30-s dead-app scan asks once per pass; a RISE of a container's counter = an OOM kill whatever Docker's `OOMKilled` says → the existing `app_oom` line (R-636's per-run grain), `source: cgroup` in the details. An agent without the route = today's behaviour. (3) Tests: a fake cgroup tree (agent), a rising counter → one `app_oom` (controller, red-first). (4) Live: 9202, a throwaway app capped at 64M with a memory hog: the counter rises, `app_oom` names the container while `OOMKilled` reads false. ~1 day, two repos, one agent release. **Earlier:** WATCHING — **2026-10-12: the built part is released** (agent v0.150.0 carries the Docker-approval memory-kill check; the boxes run 0.154.0; hub 0.140.0+ requires a passing `oom_check` before a Docker set is approved). Per decision 157 nothing else is built; the row watches for a box whose Docker reports a false OOM flag. Dated look: 2026-11-12. **READY — rank P2-MEDIUM; owner: CC** **2026-09-17 (chaos night): an OOM WAS detected on a fresh box, and named precisely.** On `tester-1-022354` (controller 0.245.0, guest 9201, 6 GB RAM) immich’s Postgres was killed by the memory limit during its reverse-geocoding import, and the controller pushed `app_oom` (warning, operator-only): „Alkalmazás memóriája elfogyott: immich (immich-postgres) — egy folyamatát a memóriakorlát leállította” — naming the app AND the exact container. The visible consequence was `write CONNECTION_CLOSED immich-postgres:5432` and twelve restarts of immich-server. So on THIS box the OOM scan works and was the fastest route to the diagnosis; recorded here rather than filed as a new row. Evidence: `audits/evidence-chaos-night-2026-09-17/round-2.txt`. **2026-10-05 (burn-down night): a one-page design proposal (no code) is in `audits/night-burndown-2026-10-05/design-R-528.md`** — for the operator. **2026-10-06: STOPPED BEFORE ANY CODE — the measurement contradicted the design** (decision 155 said A then C). On scratch 9202, Docker 29.8.2, the `OOMKilled` flag was TRUE in all four shapes tried: a child process killed while the container kept running (`oom_kill` 0 → 3, flag true) and three main-process kills (exit 137, flag true); an `oom` event each time. The false flags of 2026-09-15 were on Docker 29.8.0. Cost read for the record: one exec read of 21 containers on demo-hp = 1.6 s. `audits/design-build-2026-10-06/`C/. **2026-10-06 18:24: operator ruling, option A (decision 157):** nothing is built; the row stays open as a WATCH for a box whose Docker reports a false flag. **Added:** a Docker engine set may not be approved until it reports a memory kill correctly on the boxes that ran it (built in this row's next session). **2026-10-06 (night): the Docker-approval memory-kill check is BUILT** — hub v0.140.0 (LIVE: the approval waits for a Line truncated
| **R-1250** | Monitoring & notifications | P3 | **A qBittorrent that seeds all day is never line-tested, so it never gets the limit that exists for it.** The weekly test (R-1247) starts only after 10 minutes in which the host's uplink sent < 2 Mbit/s each minute; a seed at the line's speed keeps it busy through every window, so no test, no tested line, and no qBittorrent limit (D41 uses the tested line only). Found 2026-10-24 by reading the rule against the case it serves; not yet seen on a box (no test box seeds). **Due check moved 2026-10-27 → 2026-10-28 (2026-10-27 04:20Z, CC):** the measurement runs TODAY in the host's window (from 10:00 CET); on 2026-10-27 the gate would refuse every push until then. The result is recorded here today, and the line leaves the block. | **VERIFY — released 2026-10-25, the live proof is a dated check:** controller 0.343.0 (global floor 17:53Z) + agent 0.165.0 (vouched 18:38 CET) carry it; the real proof cannot run before the next due window — the agent starts a test only on its due Tuesday 10:00–15:59 local, and every box measured on 2026-10-24. **DUE 2026-10-27:** a throwaway qBittorrent on demo-hp seeding to DooPlex's qBittorrent (operator's yes 2026-10-25, about 30 minutes), from before the host's slot; read the agent's line value and the limit back. **Earlier: NARROWED 2026-10-24 — FIXED on main, not released** (brief 2026-10-24 Part 4, commit only): agent `29bcf44`+`1e087bb` (`waiting_for_quiet`, `POST /host/line-test/run`), controller `046b808` (`internal/upwatch/linehold.go`: record first, hold at 1 KiB/s, test, the exact old limit back; the start-up check after a kill; the 50 % rule waits). Red-proofs in both CHANGELOGs. **Live on demo-hp with a real seed** (10 Mbit/s to DooPlex's qBittorrent): refused `not-quiet` without the hold; held: uplink 0.02–0.16 Mbit/s, 94.2 Mbit/s, 56.8 s, back to 1 249 280 B/s exactly; a kill -9 mid-test left the record and the start-up check put the limit back (`audits/dooplex-alarms-2026-10-24/part4-r1250-live-proof.txt`). The live run used probes over plain HTTP (the pinned agent client is unit-tested, not live). | the next release train (agent ≥ 0.165.0 needs the operator's vouch) | Release agent + controller in the next normal train; on a seeding box read one Tuesday's `line test on request` line; then close | CC |
| **R-1193** | Monitoring & notifications | P3 | **When the box froze (R-1192), the operator heard only „no report for 45 m" — 28 minutes in — and the household heard nothing at all.** Measured 2026-10-20 against the operator mailbox (the second channel): the freeze began ~13:05 UTC; the hub page read ONLINE / OK at 13:22 (correct inside the 45-minute threshold, R-549); `host_stale` at 13:33, `app_oom` at 13:34 (immich-machine-learning killed by its memory limit), `host_crash_restart` at 14:26 and 16:29 (the two plug pulls), `node_stale` 15:59 / `node_recovered` 16:03. No mail or banner tells the household that its box is not answering, and no operator mail says „the box answers ping but not its dashboard". CORRECTED the same day: the first version of this row said the hub showed OK „throughout" and „nobody was told" — that read only the hub page, not the mailbox. Evidence `audits/rehearsal-2026-10-20/journal.md`. | OPEN | — | Design note (2026-10-21, after R-1192's diagnosis): the freeze's signature is cheap to see from the HOST side — the guest cgroup's memory PSI „full" above ~50 % for a minute, or its `memory.events max` climbing, while the host still reports; the agent could raise `guest_memory_thrash` (operator mail in its own words, not „no report for 45 m") and the household banner „A dobozod most nagyon lassú…". With the swap fix (R-1192) the measured thrash ends within a minute, so this alarm should be built only if a freeze is seen again after the agent release; until then it stays a design. Decide whether a dashboard that does not answer for N minutes while the host still reports should alarm sooner and in its own words (guest-side liveness), and whether the household is told | CC |
| **R-1202** | Monitoring & notifications | P3 | **A box whose clock is behind blames the hub and stops an app without telling anyone.** Rehearsal 2026-10-20 B6 #8: RTC set 2 years back (the OS raised it to 2026-04-13): the dashboard shows only „Hub nem elérhető" while the log says „x509: certificate … not yet valid: current time 2026-04-13…"; Paperless crash-looped and the box stopped it with a restore hold; the `app_stopped_unhealthy` event failed (hub unreachable), so neither the household nor the operator heard. After the real time came back the app stayed stopped until a Start (clear sentence, 1 min). | **OPEN** | — | say „the box's clock is wrong (it says <date>)" when TLS fails with not-yet-valid/expired against a hub that answers; keep the stop event queued until the hub is reachable | CC |
| **R-340** | Monitoring & notifications | P3 | **The new reachability check does not touch the surface that actually failed.** R-339 reports when the hub cannot READ ep0 — but the read it performs is the `usage` op, which is `proxmox-backup-manager` plus `df` over SSH, and therefore rides the **local API daemon**. The 2026-08-18 incident explicitly CLEARED that daemon: `proxmox-backup.service` was healthy throughout, and it was the **HTTPS proxy on 8007** that was wedged with a full accept queue. **So R-339's check would have returned green for all 9 h 37 m of that outage.** It closes the case where ep0 is unreachable *as a host*; it does not close the case that actually happened. This is not a defect in R-339 — it is the honest boundary of what it watches, recorded so a future reader does not mistake a green box gauge for a working off-site tier | **READY (M) — NEW 2026-08-18** | a tenantsync endpoint-script version bump (the op is added on ep0, so it needs the same version-gated rollout `ErrUsageUnsupported` already models) | Add a **health op** to `scripts/felhom-tenantsync.sh` that probes `https://127.0.0.1:8007/` on ep0 and reports the proxy's fd count and listen-queue depth, then surface it as a third signal. **Overlaps the connections spike (R-336's remaining half): both want the same observations from ep0, so whichever runs SECOND must reuse the first's evidence rather than re-measuring a protected machine twice** **REUSE, per this row's own instruction — the connections spike ran FIRST (2026-08-20) and already produced most of what the health op wants; do not re-measure a protected machine a third time.** Available in `audits/evidence-ep0-established-connections-2026-08-20/`: the proxy **fd count** and its type breakdown (`lsof` + `/proc/<pid>/fd`), the **listen-queue depth** (`ss -lnt` — `Recv-Q 0`, `Send-Q 1024`), the **ESTAB/CLOSE-WAIT split**, the **per-peer** connection histogram, a **31-minute persistence diff** of full 4-tuples, and a **46.18 h** slope with Poisson bounds. What the health op would still add beyond these: a loopback `GET https://127.0.0.1:8007/` probe — the observation that distinguished "process problem" from "network problem" on 2026-08-18 and the one thing this spike did NOT take, because it is the surface R-339 cannot see. **And this spike sharpens what the op should report:** a rising **ESTAB** count is the live signal (CLOSE-WAIT was **0**, not merely flat), and per **R-344** the fd ceiling that matters may be the **agent's**, not only ep0's. | CC |
@@ -314,7 +307,6 @@ stopping line that lies.
| **R-1223** | Monitoring & notifications | P3 | **After a reboot, a box whose tunnel ep0 refuses is invisible: the future stamp is gone, so neither the D30 re-key nor the hub's alarm sees it.** Fresh review 2026-10-23 night (`REPORT-night-2026-10-23.md`, A8 + H1): the kernel forgets `latest-handshake` when the interface restarts (0 = never); the agent then sends neither `last_handshake_age_s` nor `handshake_future_s`, and `checkWGTunnel` (`hub/internal/api/host_tunnel.go`) does not judge a registered, active tunnel with no handshake at all. Shape: the clock ran ahead, was corrected, the box rebooted (some households switch off at night), ep0 still holds the future stamp and starts nothing. | OPEN | — | Agent: report `tunnel_up_s` (how long the unit has been active) with no handshake; hub: a registered, active tunnel with no handshake for > 30 min while reporting → `wg_tunnel_stale`; the agent re-keys the same way after 30 min with no handshake. Tests both sides; rides an agent release + a hub deploy | CC |
| **R-1224** | Monitoring & notifications | P4 | **The operator's 1-hour mail cooldown for `wg_tunnel_stale` is per customer, not per host, and `wg_tunnel_ok` does not end it.** Fresh review 2026-10-23 night (`REPORT-night-2026-10-23.md`, H3): `notify/dispatcher.go:620` keys the cooldown `customerID:eventType`. Two hosts of one household going stale within an hour, or stale → ok → stale, store a second event row but mail once (the suppression is in `notification_log`). | OPEN | — | Key the cooldown by `host_id` from the details for host-scoped operator events, and let the matching ok event end it; a dispatcher test with two hosts; rides a hub deploy | CC |
| **R-1233** | Monitoring & notifications | P4 | **`[ERROR] [stacks] execCommand failed: exit status 1` names no command.** Seen once a night (2026-10-21 00:30:49 and 2026-10-23 02:17:14 UTC, each right after an app stopped for its dump); the command and stderr go only into the returned error, which the caller may drop (`internal/stacks/manager.go:1757`). An ERROR nobody can judge. | OPEN | — | Log the command's first two words (`docker inspect`, never the arguments — `docker exec … psql` can carry a password) and the stderr's first line; find the caller of the nightly one | CC |
| **R-1291** | Monitoring & notifications | P3 | **A held app gives the operator no lasting signal: one event at the stop, then nothing — demo-hp's Kimai sat held 11 days unseen.** Found 2026-10-25 night (R-1286). No held-app state reaches the hub (the report carries none; the hub shows none); the crash-loop stop sends `app_stopped_unhealthy` once. On a household box an app held after a crash loop, a failed update or a failed restore stays stopped until someone opens its page. | **OPEN — BUILT, commit only, NOT released** — 2026-10-26 evening: controller `5bd03ad` (`internal/holdreport`) + hub `7e57e824` (`held_apps`, `HeldAppsChecker`, the „Held apps" list on the host page and the Hosts page); red-proved; live on 9202 against a test hub with a 3-min grace (listed, one operator mail, Start cleared it, the row went, household leg `skipped operator_only`) — `audits/d53-held-apps-2026-10-26/`. Closes when both release. Ruled D53 = operator-only reminders first (`09` §3 decision 265). **Earlier:** WAITING-ON-OPERATOR — 2026-10-26: the design is written (`08` §10 [DESIGN — proposed]: `app_held` / `app_hold_cleared` events + a daily re-send, a „Held apps" list on the host page, an operator reminder after a grace per reason, the hub never clears a hold; ~½ day controller + ~1 day hub). The pick is STATUS D53. **Earlier:** OPEN | — | a two-repo design: the controller reports its holds (stack, reason, since), the hub shows them on the host and mails a reminder after N days (the D-level of the reason); one row's worth of design first | CC |
| **R-1296** | Monitoring & notifications | P4 | **When ep0's tenancy script refuses, the hub log shows only its one-line error — PBS's own reason (the 403 `missing Datastore.Audit|Datastore.Backup on …`) stays in the script's stderr, which the hub drops on a refusal.** Found 2026-10-26 diagnosing R-1295: the cause was visible only by reading ep0's proxy journal over root SSH. `hub/internal/tenantsync/client.go` `parseResponse` returns the JSON error and ignores stderr; the script keeps secrets off stderr by design (its header), so the tail is safe to log. | OPEN | — | append the last ~3 stderr lines to the refusal error (bounded, never stdout); a test that a secret on stdout never appears | CC |
## Hub & operator — 12 rows (P3 3, P4 9)
@@ -353,7 +345,7 @@ stopping line that lies.
| **R-990** | Business & legal | P4 | **Operator: read `documentation/audits/forum-research-2026-10-12/FELHOM.md` §5 and rule on each recommendation.** READ-ONLY research 2026-10-12: three years (#7943–#11092, 2,908 posts, 195 people, 82 beginner threads) of the public PROHARDVER! topic „Home server / házi szerver építése”, tagged and counted by person (`FINDINGS.md`, method and spot-check in `METHOD.md`; no username or post text in git). Ten ranked recommendations, none acted on; the top three: a „which machine works” page (8 of 33 beginners who name their hardware own only a Synology, a router disk or a Raspberry Pi — the installer cannot run there; the same gap is R-989's first recommendation from a different source, and the shipped-page half is R-991), „you do not choose an operating system — we do” (the biggest beginner question, 20 of 82 threads), and „bring your old office PC” as the cheap entry. Catalog gap (≥ 3 people): a DLNA server (7), an ad/DNS blocker (5), a camera recorder (5). | **WAITING-ON-OPERATOR** — filed 2026-10-12 | the operator's reading | Operator: rule on each of the ten (yes / no / later). If nothing is done: nothing changes; the research ages | operator |
| **R-1035** | Business & legal | P4 | **Did the „felhő tárhely” page earn anything? Two dated checks.** **Baseline (reported by the operator from Search Console, 2026-10-14, last 3 months):** 1 click, 48 impressions, CTR 2.1 %, average position **73.6**; „felhő tárhely” 19 impressions, „felhőtárhely” 5, „felhő alapú tárhely” 3. CC measured separately that the phrase „felhő tárhely” appeared **0 times** on the home, FAQ and backup pages — Google was showing the home page for those queries by accident. `/sajat-felho-tarhely` + `/en/own-cloud-storage` published **2026-10-14**; full baseline, price sources and the power provenance in `audits/seo-2026-10-14/BASELINE.md`. **What to measure, both times:** impressions and average position for „felhő tárhely” and „saját felhő tárhely”, plus the new page's own impressions, clicks and position. **A null result at +4 weeks means nothing on its own** — a new page on a site at position 73.6 takes weeks to months to move, and „felhő tárhely” alone is held by Microsoft, Google and the big list sites; the page aims at the two longer phrases. That is why there are two checks and not one, and why neither should be read as a verdict on the copy. **There is no Search Console connector in this project, so CC cannot read these numbers** — the operator reads them, CC records and compares. **Blocked until the operator asks for indexing** (Search Console → URL-ellenőrzés → the URL → „Indexelés kérése”): until that happens, or Google finds the page itself, both checks read zero for a reason that is not the page. **This is a slow channel and does not replace talking to people.** | **WATCHING** | operator: request indexing, then supply the Search Console read | 2026-11-11: first read (+4 weeks); 2026-12-09: second (+8 weeks), compared with the first | operator + CC |
## Process & tooling — 33 rows (P3 8, P4 25)
## Process & tooling — 34 rows (P3 8, P4 26)
| ID | Category | Sev | What | State | Blocked on | Next action | Owner |
|---|---|---|---|---|---|---|---|
@@ -397,7 +389,6 @@ stopping line that lies.
the R-row. Duplicating them here would create the second source this design avoids. -->
| item | due (UTC) | what to measure |
|---|---|---|
| R-1250 | 2026-10-28 | the released line hold, live: a seeding qBittorrent on demo-hp (peer DooPlex's, operator yes 2026-10-25) through the host's due window; the line value and the limit back; detail in the R-1250 row |
| R-1293 | 2027-03-29 | the spring clock change: the hub's 02:00 snapshot and the 02:30 push on 2027-03-28 (02:00–03:00 does not exist) — which file each push took; detail in the R-1293 row |
| R-1228 | 2026-10-30 | D35 (yes, after the release week): start moving the website + installer to Cloudflare; detail in the R-1228 row |
| R-1050 | 2026-11-15 | HSTS one year if no https trouble since 2026-10-15; detail in the R-1050 row |
@@ -406,6 +397,5 @@ stopping line that lies.
| R-1035 | 2026-12-09 | the same three numbers 8 weeks after publishing, compared with the 4-week read; a null at 4 weeks is not a verdict, both reads are needed; detail in the R-1035 row |
<!-- DUE-CHECKS-END -->
| **R-1297** | Process & tooling | P3 | **CI waits dominate a working day: felhom.eu's CI run takes ~13 min and the ONE runner makes every repo's job wait behind it (up to 10–17 min queued).** Measured 2026-10-26 (operator: „these CI waiting times are getting out of hand"): since 10-25 felhom.eu runs median 793 s, the controller/agent/catalog 57–102 s; queue median 5 s, max 548–1023 s. In run 2366, ~10 of 13 minutes are four suites — `test_gate_decoys.py` 232 s, `test_due_checks_gate.py` 133 s, `test_repo_gates.py` 132 s (it runs the whole gate set a SECOND time), `dooplex-offsite/test_dooplex_offsite.py` 69 s — plus `hub-gofmt` ~110 s (a cold Go cache per run). **Ruled 2026-10-26 by the operator: BOTH** — (A) trim felhom.eu CI: the heavy suites only when their own files change, no duplicate full run, a Go cache for hub-gofmt; (B) a second CI runner on DooPlex. | **OPEN — (A) BUILT 2026-10-26 evening, closes after the first nightly run (2026-10-27 03:20 UTC) is read.** Both runners proven at once (jobs 2374 + 2375 on `felhom-gates-runner` / `-2`, 17:11:41Z). felhom.eu CI, one push each: **(a) docs only** 810 s (old runner) → 351 s (2 CPUs) → see the close-out; **(b) a gate script** 351 → 203 s (`ecd82aba`, job 2376); **(c) a hub change** 351 → 118 s (`7e57e824`, job 2378). Heavy suites by path + tag + nightly; `test_repo_gates.py` and due-checks group G test the wiring (130 s each → under 3 s). Decoys through CI's entry point with the filter ON: a docs-only register break → red; an inert gate → GREEN at first (a decoy hole, fixed in `e33ec821`) → red. No Go cache: CI has no Go (the 110 s was security-scan, now 27 s). `audits/r1297-ci-trim-2026-10-26/`. (B) DONE by the operator (`09` §3 decision 267). | — | (A) CC, a run of its own (a CI scope change, ruled); (B) a DooPlex change — a brief or the homelab session; and CC waits on CI only before a release or at the end of a run | CC |
| **R-1298** | Monitoring & notifications | P3 | **Scratch guest 9202 carries leftovers made outside the product, and D53 would remind about them every week once released: four crash-loop holds since 2026-09-24 for apps that are not installed (`chaoscrash`, `chaosoom`, `chaosoomb`, `gokapi`), and a PrivateBin `app.yaml` (2026-10-25) with no container that the product reads as „installed".** Found 2026-10-26 evening in the D53 live proof: the new reporter sent the four holds at its first tick and the test hub mailed four reminders („held 32 days"). The product's removal clears an install's hold (R-704); these apps were removed by hand in a chaos drill. On a household box the same shape would mail the operator weekly about an app that does not exist. | **VERIFY — fixed on `main`, waits for the controller release** — controller `b156e45` (an install's hold of an app that is not installed is not reported; a restore hold always is), red-proved; live on 9202 (the four orphans skipped by name). 9202's four holds cleared with `-clear-restore-hold` and the PrivateBin leftover removed through the product — `audits/night-fixes-2026-10-26/`. Close at the release. **Earlier:** OPEN | — | decide whether the reporter (or the hub) skips an `unhealthy_stop` / `update_failed` / `putback_pending` hold whose app is not installed (a restore hold stays reported — operator-cleared by design, R-379); then clear 9202's four holds with `-clear-restore-hold` and remove PrivateBin through the product | CC |
| **R-1299** | Process & tooling | P4 | **The operator's one-shot clean-up grant (`POST /offsite/window-grant/<customer>`, optional `max_remove`) has no button on any hub page** — the operator could not find it on 2026-10-26 (D55) and had to make a one-purpose access token so CC could call the route. The route, its scope (`offsite:write`) and its event exist (R-833); only the form is missing. | OPEN | — | a small form on the Off-site page (customer, optional cap ≤ 500), with a render test for both branches | CC |
| **R-1302** | Monitoring & notifications | P4 | **A fresh install's agent logs ERROR „store-grant: GRANT WAS MISSING AND HAS BEEN SELF-REPAIRED — investigate the loss (R-190)" and „capability DEGRADED" for `felhom-pbs` at its FIRST start, although the grant was simply never made yet** — the whole-guest tier is armed (21:00:45) before the PBS storage exists (created 21:00:57 on the hub's descriptor). Seen 2026-10-26 night on the R-1232 BYO box (VM 9375, `audits/night-fixes-2026-10-26/r1232/3-first-run.txt`) and on 2026-10-25's BYO box (`degraded=pve:store-grant:felhom-pbs`). An ERROR that says „investigate the loss" on every new box teaches the reader to skip it. | OPEN | — | on the first grant of a tier whose storage did not exist before, log INFO „granted" instead of the loss ERROR; keep the ERROR for a grant that existed and vanished; a test for both | CC |
+8
View File
@@ -5,6 +5,14 @@ Moved here byte for byte on 2026-10-14 (night session), newest first, so that `S
**Updated 2026-10-13 (night): demo-hp, demo-felhom and Tester 1 run agent 0.155.0; demo-felhom runs controller 0.310.0, the other two 0.309.0 until the floor is raised. The open-items list is at 127. Reports: `REPORT-poweroff.md`, `REPORT-plugmeter.md`, `REPORT-usenet-2026-10-12.md`, `REPORT-newapps-2026-10-12.md`, `REPORT-disk-evening-2026-10-12.md`, `REPORT-answers-2026-10-12.md`, `REPORT-m3-2026-10-11.md`, `REPORT-redesign-2026-10-10.md`, `REPORT-testers-2026-10-10.md`, `REPORT-register-shrink-2026-10-10.md`, `REPORT-new-apps-2026-10-10.md`, `REPORT-release-2026-10-10.md`, `REPORT-break-the-circle-2026-10-09.md`, `REPORT-dooplex-survival-2026-10-09.md`, `REPORT-day4-2026-10-09.md`.**
## Moved from STATUS on 2026-10-27 (afternoon)
**Updated 2026-10-26 (night).** Saved and proven tonight, not released: kept data never offers a live app's folder; a reinstalled box backs up off-site at once; app-file import keeps links and owners and works again for MariaDB apps; Go 1.27.3. D55's window runs tonight.
- Built, not released (Tuesday's block, each on your yes): R-1291, R-1220, R-1232, R-1187, R-1219, R-1298, R-972, R-1285. R-1218 needs you: off-site off on Tester 1 for minutes (hub customer page), or it leaves the release.
**2026-10-26.** On the hub's Hosts page, delete `Tester4-b5dbbd` (CC's test VM of tonight, uninstalled and destroyed; you already deleted `Tester4-b5ec39`). If not: the hub alarms that the box went silent. After demo-hp's window has run (CC says when, Tuesday morning), revoke the token `cc-d55-window` (R-1294). New: a nightly security watch mails you (R-1303).
## Moved from STATUS on 2026-10-26 (night)
**Updated 2026-10-26 (evening).** CI is faster: two runners work at once, and a hub or document push now takes about 2 minutes instead of 6–13. Held apps now reach you (built, not released): a „Held apps" list on the host page and the Hosts page, and one mail after a waiting time. One pick for you: D55.