Prowlarr linked on 9201 (live catalog): R-1048 closed, R-1058 filed; the session report
gates / gates (push) Successful in 6m47s
gates / gates (push) Successful in 6m47s
- audits/prowlarr-2026-10-15/box9201: Sonarr then Prowlarr — no link until „Bekötés most"; Radarr after Prowlarr — linked by itself ~60 s later; Prowlarr's connection test 200 for both, its sync command completed; all removed keeping data. The first run's key-quoting defect in the tool is recorded and fixed. - R-1058 (Apps & catalog, P3): the wiring does not start when Prowlarr itself comes up. - R-1048 closed (CLOSED-ITEMS). STATUS, CONTEXT. REPORT-release-rule-prowlarr-2026-10-15.md. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0159rPz1ZhFKsS53msqPYxtS
This commit is contained in:
1 parent
5d78569bac
commit
02be5006bb
13 files changed
+282
-5
No files matched your search
@@ -29,5 +29,7 @@ e917a58 restored the file; run 3 repeated the step. Run 1's checks before the bu
|
||||
it redirects to the login (measured; FIRST-ADMIN row).
|
||||
- No lock-out after wrong passwords → a stranger cannot lock the household out (the property `09` §3 decisions 57–60
|
||||
protect); no row.
|
||||
- The box links Prowlarr only when Sonarr/Radarr come up, or on „Bekötés most" → the copy says so; the register row is
|
||||
in `OPEN-ITEMS.md` (filed in this session, see `box9201/`).
|
||||
- The box links Prowlarr only when Sonarr/Radarr come up, or on „Bekötés most" → measured on 9201 (`box9201/`); the copy
|
||||
and the website card say so; R-1058.
|
||||
- A restore of a removed gated app comes back without the gate, even from a backup made before the setup → measured
|
||||
on 9202 run 3 (a stranger's `/ping` 200 after the restore, 401 before); R-1057.
|
||||
@@ -0,0 +1,14 @@
|
||||
2026/10/15 11:01:52 sync.go:283: [INFO] [sync] Catalog sync complete
|
||||
2026/10/15 11:01:52 sync.go:126: [INFO] [sync] Initial sync: Sablonok frissítve — frissítve: immich, prowlarr
|
||||
|
||||
26: repo_url: https://gitea.dooplex.hu/admin/app-catalog-felhom.eu.git
|
||||
27: sync_interval: 15m
|
||||
-rw------- 1 root root 1944 Oct 12 20:52 /var/lib/docker/volumes/felhom-controller-data/_data/controller.yaml.pre-prowlarr1015
|
||||
mirror main ebf3668f DRILL prowlarr: the step -> lscr.io/linuxserver/prowlarr:version-2.6.5.5623 (R-1048, checklist 2.5)
|
||||
cache HEAD 73b45a6 Prowlarr into the live catalog, with its complete onboarding record (R-1048)
|
||||
https://gitea.dooplex.hu/admin/app-catalog-felhom.eu.git
|
||||
|
||||
ls: cannot access '/var/lib/docker/volumes/felhom-controller-data/_data/drill-catalog.git': No such file or directory
|
||||
repo_url: https://gitea.dooplex.hu/admin/app-catalog-felhom.eu.git
|
||||
0
|
||||
e129d58b0b4f1ad551c92aeb876d52a3 /opt/docker/stacks/prowlarr/.felhom.yml
|
||||
@@ -0,0 +1,20 @@
|
||||
# demo-hp 9201, LIVE catalog 73b45a6, controller 0.313.0 — the Prowlarr link read-back (2026-10-15)
|
||||
|
||||
`link.txt` is the record; the two consoles are the raw output. Pressed only what a person presses: the sync, the deploy
|
||||
wizard's call, „Bekötés most" (`POST /api/storage/media/wire`), stop + remove keeping data.
|
||||
|
||||
- **[B] Sonarr first, Prowlarr after:** the box's wiring ran when Sonarr came up; in the 150 s after Prowlarr came up no
|
||||
wiring ran at all. „Bekötés most" then answered `prowlarr: done, wrote application Sonarr` — the wirer writes only a
|
||||
link that is missing (`mediawire.go` `prowlarr()`), so the link was not there before the press.
|
||||
- **[A] Radarr after Prowlarr:** the wiring ran ~60 s after Radarr came up (`radarr=done(3) prowlarr=done(1)`) and
|
||||
Prowlarr's Apps listed Radarr and Sonarr, both `fullSync`, by container name.
|
||||
- **[D]** Prowlarr's own connection test for each link: 200. Its sync command `ApplicationIndexerSync`: completed.
|
||||
Prowlarr holds no indexer yet, so Sonarr's and Radarr's indexer lists are empty, as expected.
|
||||
- **[X]** All three removed keeping data: each config volume removed (that is what remove does to a volume), the
|
||||
drive's media folder kept (4.9 MB, Sonarr's and Radarr's), 0 containers and 0 volumes left.
|
||||
|
||||
**One tool defect, recorded:** the first run read Prowlarr's API key in the guest shell instead of inside the container
|
||||
(double quotes), so its own reads in [B3] and [C2] show 401. The box-side facts above do not depend on them. The
|
||||
script was fixed (`shlex.quote`) and re-entered with `CONTINUE=1` from [A] on; the installs stood.
|
||||
|
||||
The install-order gap is register row R-1058; the copy and the website card already tell the household about the button.
|
||||
@@ -0,0 +1,18 @@
|
||||
13:02:21 [0] controller: gitea.dooplex.hu/admin/felhom-controller:0.313.0
|
||||
13:03:40 [sync] the badge NEVER caught up to lscr.io/linuxserver/prowlarr:version-2.6.5.5623 in 79.2s — catalog_images = None
|
||||
13:03:44 [0] live catalog on the box: 73b45a6 Prowlarr into the live catalog, with its complete onboarding record (R-1048) | https://gitea.dooplex.hu/admin/app-catalog-felhom.eu.git
|
||||
13:03:47 [0] prowlarr template on the box: 4949 /opt/docker/stacks/prowlarr/.felhom.yml | image: lscr.io/linuxserver/prowlarr:version-2.6.5.5623@sha256:f9151e5bc1025c6d0a630d503210cdcb6bb55a7cc098562609d96a408d838902 | setup_gate: true
|
||||
13:03:47 deploy sonarr {"DOMAIN": "enkisfelhom.hu", "SUBDOMAIN": "sonarr", "HDD_PATH": "/mnt/felhom-drives/hdd_1"} -> 202 {"ok": true, "message": "The install has started – the card shows how it is going"}
|
||||
13:04:17 sonarr: deployed, running, pinned={'sonarr': 'lscr.io/linuxserver/sonarr:4.0.20'}
|
||||
13:05:40 [B1] wiring after Sonarr came up:
|
||||
2026/10/15 11:04:55 media_events.go:69: [INFO] [media] wiring the drives into the media apps (a media app came up: sonarr)
|
||||
2026/10/15 11:04:56 mediawire.go:138: [INFO] [mediawire] 1 drive(s) wired in 1.046s: folders=done(0) sonarr=done(3) plex=household(0)
|
||||
13:05:40 deploy prowlarr {"DOMAIN": "enkisfelhom.hu", "SUBDOMAIN": "prowlarr"} -> 202 {"ok": true, "message": "The install has started – the card shows how it is going"}
|
||||
13:06:05 prowlarr: deployed, running, pinned={'prowlarr': 'lscr.io/linuxserver/prowlarr:version-2.6.5.5623'}
|
||||
13:06:12 [B2] prowlarr first-start line: [felhom] first start - AuthenticationRequired=Enabled, AnalyticsEnabled=False seeded
|
||||
13:08:48 [B3] 150 s after Prowlarr came up (Sonarr was there first): Prowlarr's Apps = 401
|
||||
13:08:48 [B3] wiring runs since Prowlarr's install: (none)
|
||||
13:08:50 [C1] „Bekötés most” (POST /api/storage/media/wire) -> 200; prowlarr result: [{"app": "prowlarr", "state": "done", "wrote": ["application Sonarr"]}]
|
||||
13:08:53 [C2] Prowlarr's Apps after the press: 401
|
||||
13:08:53 deploy radarr {"DOMAIN": "enkisfelhom.hu", "SUBDOMAIN": "radarr", "HDD_PATH": "/mnt/felhom-drives/hdd_1"} -> 202 {"ok": true, "message": "The install has started – the card shows how it is going"}
|
||||
13:09:14 radarr: deployed, running, pinned={'radarr': 'lscr.io/linuxserver/radarr:6.4.4'}
|
||||
@@ -0,0 +1,17 @@
|
||||
13:09:45 [CONTINUE] re-entered after the key fix; Radarr started 2026-10-15T11:09:01Z; Sonarr, Prowlarr, Radarr installed by run 1 of this script
|
||||
13:09:48 [CONTINUE] Prowlarr's Apps read now with the right key: [('Sonarr', 'fullSync', 'http://sonarr:8989')]
|
||||
13:10:15 [A1] Radarr appeared in Prowlarr's Apps by itself, ~20 s after Radarr ran
|
||||
13:10:15 [A2] Prowlarr's Apps: [('Radarr', 'fullSync', 'http://radarr:7878'), ('Sonarr', 'fullSync', 'http://sonarr:8989')]
|
||||
13:10:18 [A2] wiring runs since Radarr's install:
|
||||
2026/10/15 11:10:02 media_events.go:69: [INFO] [media] wiring the drives into the media apps (a media app came up: radarr)
|
||||
2026/10/15 11:10:03 mediawire.go:138: [INFO] [mediawire] 1 drive(s) wired in 1.849s: folders=done(0) sonarr=unchanged(0) radarr=done(3) prowlarr=done(1) plex=household(0)
|
||||
13:10:25 [D1] Prowlarr's connection test for Radarr (Radarr, syncLevel fullSync) -> 200
|
||||
13:10:28 [D1] Prowlarr's connection test for Sonarr (Sonarr, syncLevel fullSync) -> 200
|
||||
13:10:31 [D2] sync command ApplicationIndexerSync -> 201 id=1
|
||||
13:10:37 [D2] sync command status: completed
|
||||
13:10:40 [D3] Prowlarr's own log of the sync:
|
||||
13:10:43 [D4] Sonarr's and Radarr's indexer lists (Prowlarr has no indexer yet, so both empty is the expected answer): [] <- sonarr | [] <- radarr
|
||||
13:11:19 [X] radarr: stop 200, remove keeping data -> 200 {"ok": true, "data": {"removed": "radarr", "volumes_removed": ["radarr_radarr_config"], "hdd_paths_removed": [], "hdd_paths_preserved": [], "userdata_kept": ["/mnt/felhom-drives/hdd_1/userdata/media (4.9M)"], "verified": true}, "message": "Stack radarr removed
|
||||
13:11:54 [X] prowlarr: stop 200, remove keeping data -> 200 {"ok": true, "data": {"removed": "prowlarr", "volumes_removed": ["prowlarr_prowlarr_config"], "hdd_paths_removed": [], "hdd_paths_preserved": [], "userdata_kept": [], "verified": true}, "message": "Stack prowlarr removed"}
|
||||
13:12:30 [X] sonarr: stop 200, remove keeping data -> 200 {"ok": true, "data": {"removed": "sonarr", "volumes_removed": ["sonarr_sonarr_config"], "hdd_paths_removed": [], "hdd_paths_preserved": [], "userdata_kept": ["/mnt/felhom-drives/hdd_1/userdata/media (4.9M)"], "verified": true}, "message": "Stack sonarr removed
|
||||
13:12:39 [X] left: containers=0 volumes=0
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"order_A_apps": [
|
||||
[
|
||||
"Radarr",
|
||||
"fullSync",
|
||||
"http://radarr:7878"
|
||||
],
|
||||
[
|
||||
"Sonarr",
|
||||
"fullSync",
|
||||
"http://sonarr:8989"
|
||||
]
|
||||
],
|
||||
"test_Radarr": "200",
|
||||
"test_Sonarr": "200",
|
||||
"sync_status": "completed"
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
[0] controller: gitea.dooplex.hu/admin/felhom-controller:0.313.0
|
||||
[sync] the badge NEVER caught up to lscr.io/linuxserver/prowlarr:version-2.6.5.5623 in 79.2s — catalog_images = None
|
||||
[0] live catalog on the box: 73b45a6 Prowlarr into the live catalog, with its complete onboarding record (R-1048) | https://gitea.dooplex.hu/admin/app-catalog-felhom.eu.git
|
||||
[0] prowlarr template on the box: 4949 /opt/docker/stacks/prowlarr/.felhom.yml | image: lscr.io/linuxserver/prowlarr:version-2.6.5.5623@sha256:f9151e5bc1025c6d0a630d503210cdcb6bb55a7cc098562609d96a408d838902 | setup_gate: true
|
||||
deploy sonarr {"DOMAIN": "enkisfelhom.hu", "SUBDOMAIN": "sonarr", "HDD_PATH": "/mnt/felhom-drives/hdd_1"} -> 202 {"ok": true, "message": "The install has started – the card shows how it is going"}
|
||||
sonarr: deployed, running, pinned={'sonarr': 'lscr.io/linuxserver/sonarr:4.0.20'}
|
||||
[B1] wiring after Sonarr came up:
|
||||
2026/10/15 11:04:55 media_events.go:69: [INFO] [media] wiring the drives into the media apps (a media app came up: sonarr)
|
||||
2026/10/15 11:04:56 mediawire.go:138: [INFO] [mediawire] 1 drive(s) wired in 1.046s: folders=done(0) sonarr=done(3) plex=household(0)
|
||||
deploy prowlarr {"DOMAIN": "enkisfelhom.hu", "SUBDOMAIN": "prowlarr"} -> 202 {"ok": true, "message": "The install has started – the card shows how it is going"}
|
||||
prowlarr: deployed, running, pinned={'prowlarr': 'lscr.io/linuxserver/prowlarr:version-2.6.5.5623'}
|
||||
[B2] prowlarr first-start line: [felhom] first start - AuthenticationRequired=Enabled, AnalyticsEnabled=False seeded
|
||||
[B3] 150 s after Prowlarr came up (Sonarr was there first): Prowlarr's Apps = 401
|
||||
[B3] wiring runs since Prowlarr's install: (none)
|
||||
[C1] „Bekötés most” (POST /api/storage/media/wire) -> 200; prowlarr result: [{"app": "prowlarr", "state": "done", "wrote": ["application Sonarr"]}]
|
||||
[C2] Prowlarr's Apps after the press: 401
|
||||
deploy radarr {"DOMAIN": "enkisfelhom.hu", "SUBDOMAIN": "radarr", "HDD_PATH": "/mnt/felhom-drives/hdd_1"} -> 202 {"ok": true, "message": "The install has started – the card shows how it is going"}
|
||||
radarr: deployed, running, pinned={'radarr': 'lscr.io/linuxserver/radarr:6.4.4'}
|
||||
[CONTINUE] re-entered after the key fix; Radarr started 2026-10-15T11:09:01Z; Sonarr, Prowlarr, Radarr installed by run 1 of this script
|
||||
[CONTINUE] Prowlarr's Apps read now with the right key: [('Sonarr', 'fullSync', 'http://sonarr:8989')]
|
||||
[A1] Radarr appeared in Prowlarr's Apps by itself, ~20 s after Radarr ran
|
||||
[A2] Prowlarr's Apps: [('Radarr', 'fullSync', 'http://radarr:7878'), ('Sonarr', 'fullSync', 'http://sonarr:8989')]
|
||||
[A2] wiring runs since Radarr's install:
|
||||
2026/10/15 11:10:02 media_events.go:69: [INFO] [media] wiring the drives into the media apps (a media app came up: radarr)
|
||||
2026/10/15 11:10:03 mediawire.go:138: [INFO] [mediawire] 1 drive(s) wired in 1.849s: folders=done(0) sonarr=unchanged(0) radarr=done(3) prowlarr=done(1) plex=household(0)
|
||||
[D1] Prowlarr's connection test for Radarr (Radarr, syncLevel fullSync) -> 200
|
||||
[D1] Prowlarr's connection test for Sonarr (Sonarr, syncLevel fullSync) -> 200
|
||||
[D2] sync command ApplicationIndexerSync -> 201 id=1
|
||||
[D2] sync command status: completed
|
||||
[D3] Prowlarr's own log of the sync:
|
||||
[D4] Sonarr's and Radarr's indexer lists (Prowlarr has no indexer yet, so both empty is the expected answer): [] <- sonarr | [] <- radarr
|
||||
[X] radarr: stop 200, remove keeping data -> 200 {"ok": true, "data": {"removed": "radarr", "volumes_removed": ["radarr_radarr_config"], "hdd_paths_removed": [], "hdd_paths_preserved": [], "userdata_kept": ["/mnt/felhom-drives/hdd_1/userdata/media (4.9M)"], "verified": true}, "message": "Stack radarr removed
|
||||
[X] prowlarr: stop 200, remove keeping data -> 200 {"ok": true, "data": {"removed": "prowlarr", "volumes_removed": ["prowlarr_prowlarr_config"], "hdd_paths_removed": [], "hdd_paths_preserved": [], "userdata_kept": [], "verified": true}, "message": "Stack prowlarr removed"}
|
||||
[X] sonarr: stop 200, remove keeping data -> 200 {"ok": true, "data": {"removed": "sonarr", "volumes_removed": ["sonarr_sonarr_config"], "hdd_paths_removed": [], "hdd_paths_preserved": [], "userdata_kept": ["/mnt/felhom-drives/hdd_1/userdata/media (4.9M)"], "verified": true}, "message": "Stack sonarr removed
|
||||
[X] left: containers=0 volumes=0
|
||||
@@ -14,6 +14,7 @@ Then: Prowlarr's own connection test for each link, and its sync command to comp
|
||||
import json
|
||||
import os
|
||||
import re
|
||||
import shlex
|
||||
import sys
|
||||
import time
|
||||
|
||||
@@ -38,13 +39,15 @@ w.say = say
|
||||
|
||||
|
||||
def papi(path, body=None, method=None):
|
||||
# FIXED 2026-10-15 after the first run: json.dumps() quoted this with DOUBLE quotes, so the guest shell expanded
|
||||
# $(sed …) and $K before docker exec — empty key, every call 401 (link.txt [B3]/[C2]). shlex.quote keeps it literal.
|
||||
"""Prowlarr's own API from inside its container (the key read from its config.xml at use, never printed)."""
|
||||
m = method or ("POST" if body is not None else "GET")
|
||||
data = json.dumps(body) if body is not None else ""
|
||||
script = ("K=$(sed -n 's:.*<ApiKey>\\(.*\\)</ApiKey>.*:\\1:p' /config/config.xml); "
|
||||
f"curl -s -o /tmp/pb.json -w '%{{http_code}}' -X {m} -H \"X-Api-Key: $K\" -H 'Content-Type: application/json' "
|
||||
f"--data-binary @- http://127.0.0.1:9696/api/v1{path}; echo; cat /tmp/pb.json")
|
||||
out = w.guest(f"docker exec -i prowlarr sh -c {json.dumps(script)} <<'EOF'\n{data}\nEOF")
|
||||
out = w.guest(f"docker exec -i prowlarr sh -c {shlex.quote(script)} <<'EOF'\n{data}\nEOF")
|
||||
code, _, body_ = out.partition("\n")
|
||||
try:
|
||||
return code.strip(), json.loads(body_) if body_.strip() else None
|
||||
@@ -87,6 +90,8 @@ def wait_healthy(c, tries=60):
|
||||
|
||||
def main():
|
||||
w.login()
|
||||
if os.environ.get("CONTINUE") == "1":
|
||||
return part2()
|
||||
t0 = time.strftime("%Y-%m-%dT%H:%M:%SZ", time.gmtime())
|
||||
for a in ("prowlarr", "sonarr", "radarr"):
|
||||
if w.stack(a).get("deployed"):
|
||||
@@ -125,6 +130,15 @@ def main():
|
||||
tR = time.strftime("%Y-%m-%dT%H:%M:%SZ", time.gmtime())
|
||||
install("radarr", {"DOMAIN": w.DOMAIN, "SUBDOMAIN": "radarr", "HDD_PATH": HDD})
|
||||
wait_healthy("radarr")
|
||||
part2(tR)
|
||||
|
||||
|
||||
def part2(tR=None):
|
||||
"""From order A's check on (CONTINUE=1 re-enters here after the first run's key bug; the installs stand)."""
|
||||
if tR is None:
|
||||
tR = w.guest("docker inspect radarr -f '{{.State.StartedAt}}'").strip()[:19] + "Z"
|
||||
say(f"[CONTINUE] re-entered after the key fix; Radarr started {tR}; Sonarr, Prowlarr, Radarr installed by run 1 of this script")
|
||||
say(f"[CONTINUE] Prowlarr's Apps read now with the right key: {apps()}")
|
||||
a_apps = None
|
||||
for i in range(30):
|
||||
time.sleep(10)
|
||||
|
||||
Reference in new issue
Block a user