Security app updates 2026-10-27: 14 security-fix steps + 2 normal steps live (catalog 06e603e, 7b0071e, 65a6b11); controller v0.346.1 (traefik, file manager, cloudflared) floor set; R-1304 and R-1306 CLOSED, R-1305 NARROWED; R-1313, R-1315–R-1325 filed (big steps left, three observations); 09 decision 255 and B23: the batch use of the lane; evidence

This commit is contained in:
admin committed 2026-10-27 17:22:02 +01:00
1 parent 7c75162a18
commit 7610f69e7c
69 files changed
+7530 -10

No files matched your search

@@ -0,0 +1,7 @@
# Batch 1 live read-back on demo-hp 9201 (read only; the other session's yes 2026-10-27). 2026-10-27T14:12:27Z
catalog cache: 06e603e88d45f94c2b2723db45a240dea69faca6 2026-10-27 15:05:13 +0100
romm running: rommapp/romm:5.3.1
security_fix entries in the cached romm .felhom.yml: 1
cached romm compose image: rommapp/romm:5.4.1
app_update.unattended saved anywhere: 0 file(s) — absent means ON (settings.go:210)
Expected tonight: the night leg (after the off-site copy) takes romm 5.3.1 -> 5.4.1 and logs '[security fix romm: GHSA-…,… done]' in its 'update leg (…)' line.
@@ -0,0 +1,7 @@
# 9202 AFTER (0.346.1-rc.1), 2026-10-27T14:58:26Z
images: traefik=traefik:v3.7.16 filebrowser=gtstef/filebrowser:1.5.8-stable cloudflared=
none
filebrowser networks: felhom-filebrowser felhom-files
from traefik-public -> filebrowser:80 (by name): wget: bad address 'filebrowser:80' rc=0
from traefik-public -> filebrowser by IP 172.21.0.2: wget: download timed out rc=0
CONTROL from traefik-public -> traefik:80: HTTP/1.1 301 Moved Permanently rc=0
@@ -0,0 +1,7 @@
# 9202 BEFORE (controller 0.343.0), 2026-10-27T14:57:46Z
images: traefik=traefik:v3.7.13 filebrowser=gtstef/filebrowser:1.5.6-stable cloudflared=
none
filebrowser networks: felhom-filebrowser traefik-public
from traefik-public -> filebrowser:80 (by name): HTTP/1.1 200 OK rc=0
from traefik-public -> filebrowser by IP 172.21.0.2: wget: download timed out rc=0
CONTROL from traefik-public -> traefik:80: HTTP/1.1 301 Moved Permanently rc=0
@@ -0,0 +1,4 @@
1. dashboard /__files/open -> HTTP/2 302 | to files host: True
2. files host /_felhom/sso -> HTTP/2 302 | files cookie set: True
3. a listing through traefik with the files cookie -> 200
4. the same without any cookie (control) -> 401
@@ -0,0 +1,15 @@
filebrowser gtstef/filebrowser:1.5.8-stable Up 2 seconds (health: starting)
traefik traefik:v3.7.16 Up 5 seconds
felhom-controller gitea.dooplex.hu/admin/felhom-controller:0.346.1-rc.1 Up 14 seconds (healthy)
2026/10/27 14:58:06 manager.go:680: [DEBUG] [stacks] ScanStacks: found stack "filebrowser" deployed=false composePath=/opt/docker/stacks/filebrowser/docker-compose.yml
2026/10/27 14:58:06 infra.go:147: [INFO] [infra] traefik config changed (docker-compose.yml, tunnel trust true) — rewriting and recreating traefik (routing pauses a few seconds)
2026/10/27 14:58:06 dbdump.go:171: [DEBUG] DiscoverDatabases: skipping container filebrowser (image=gtstef/filebrowser:1.5.6-stable, not a database)
2026/10/27 14:58:06 manager.go:680: [DEBUG] [stacks] ScanStacks: found stack "filebrowser" deployed=false composePath=/opt/docker/stacks/filebrowser/docker-compose.yml
2026/10/27 14:58:06 manager.go:258: [DEBUG] [integrations] ReapplyConfigForTarget: target=filebrowser integrations=0
2026/10/27 14:58:15 infra.go:378: [INFO] [infra] connected felhom-controller to traefik-public
2026/10/27 14:58:15 infra.go:97: [INFO] [infra] cloudflared skipped — no cf_tunnel_token configured (LAN-only node)
2026/10/27 14:58:15 filebrowser_gate.go:70: [INFO] [infra] connected felhom-controller to felhom-filebrowser (the FileBrowser default-login check, R-1126)
2026/10/27 14:58:17 filebrowser_gate.go:101: [INFO] [infra] filebrowser: traefik joined felhom-files — the only route to FileBrowser (R-1281)
2026/10/27 14:58:17 filebrowser_gate.go:108: [INFO] [infra] filebrowser: default login refused for this run — joined felhom-files, files.<domain> served (R-1126, R-1281)
2026/10/27 14:58:17 filebrowser_gate.go:112: [WARN] [infra] filebrowser: could not leave traefik-public — every app can still reach it (R-1281): Error response from daemon: No such container: 503e946085d8f32ed26e1134778f7a9d02d3d75c67cda5ebfb7629da3a173f54: exit status 1
2026/10/27 14:58:20 filebrowser_gate.go:108: [INFO] [infra] filebrowser: default login refused for this run — joined felhom-files, files.<domain> served (R-1126, R-1281)
@@ -0,0 +1,15 @@
2026/10/27 15:41:26 [INFO] [selfupdate] Post-update startup: update successful (0.346.0 → 0.346.1)
2026/10/27 15:41:26 [INFO] [scheduler] Registered periodic job: selfupdate-check (every 6h0m0s)
2026/10/27 15:41:26 [INFO] [infra] traefik config changed (docker-compose.yml, tunnel trust true) — rewriting and recreating traefik (routing pauses a few seconds)
2026/10/27 15:41:33 [INFO] [infra] connected felhom-controller to traefik-public
2026/10/27 15:41:33 [INFO] [infra] cloudflared compose changed (tunnel network true) — recreating cloudflared (the tunnel reconnects in seconds)
2026/10/27 15:41:36 [INFO] [infra] connected felhom-controller to felhom-filebrowser (the FileBrowser default-login check, R-1126)
2026/10/27 15:41:36 [INFO] [infra] filebrowser: traefik joined felhom-files — the only route to FileBrowser (R-1281)
2026/10/27 15:41:37 [INFO] [infra] filebrowser: default login refused for this run — joined felhom-files, files.<domain> served (R-1126, R-1281)
-- cloudflared (new container) first lines:
2026-10-27T15:41:36Z INF Starting tunnel tunnelID=8b4edf48-1846-4484-870e-68b48cf43483
2026-10-27T15:41:37Z INF Registered tunnel connection connIndex=0 connection=8eb9754f-ff0d-4134-925b-769d0f95002a event=0 ip=198.41.192.37 location=bud01 protocol=quic
2026-10-27T15:41:37Z INF Registered tunnel connection connIndex=1 connection=7d303a85-782a-4edd-9c77-7d1b3003235a event=0 ip=198.41.200.233 location=vie05 protocol=quic
2026-10-27T15:41:38Z INF Registered tunnel connection connIndex=2 connection=316aa0f8-4472-40f2-90ff-1d08da5d1be2 event=0 ip=198.41.200.33 location=vie05 protocol=quic
2026-10-27T15:41:39Z INF Registered tunnel connection connIndex=3 connection=3ef8334c-383c-4ccc-91bd-578675e88372 event=0 ip=198.41.192.67 location=bud01 protocol=quic
-- cloudflared StartedAt: 2026-10-27T15:41:36.543853737Z traefik StartedAt: 2026-10-27T15:41:32.861698806Z
@@ -0,0 +1,16 @@
2026/10/27 15:41:31 updater.go:855: [INFO] [selfupdate] Post-update startup: update successful (0.346.0 → 0.346.1)
2026/10/27 15:41:31 scheduler.go:120: [INFO] [scheduler] Registered periodic job: selfupdate-check (every 6h0m0s)
2026/10/27 15:41:31 infra.go:147: [INFO] [infra] traefik config changed (docker-compose.yml, tunnel trust true) — rewriting and recreating traefik (routing pauses a few seconds)
2026/10/27 15:41:52 infra.go:378: [INFO] [infra] connected felhom-controller to traefik-public
2026/10/27 15:41:52 infra.go:188: [INFO] [infra] cloudflared compose changed (tunnel network true) — recreating cloudflared (the tunnel reconnects in seconds)
2026/10/27 15:41:56 filebrowser_gate.go:70: [INFO] [infra] connected felhom-controller to felhom-filebrowser (the FileBrowser default-login check, R-1126)
2026/10/27 15:41:58 filebrowser_gate.go:101: [INFO] [infra] filebrowser: traefik joined felhom-files — the only route to FileBrowser (R-1281)
2026/10/27 15:41:58 filebrowser_gate.go:108: [INFO] [infra] filebrowser: default login refused for this run — joined felhom-files, files.<domain> served (R-1126, R-1281)
2026/10/27 15:42:06 updater.go:196: [INFO] [selfupdate] Current version 0.346.1 is up to date
-- cloudflared (new container) first lines:
2026-10-27T15:41:55Z INF Starting tunnel tunnelID=d7a3c848-d754-46ce-a1c1-ca6bc7a81775
2026-10-27T15:41:56Z INF Registered tunnel connection connIndex=0 connection=678ca6cf-b165-46bb-8385-1ab98028776c event=0 ip=198.41.200.53 location=vie05 protocol=quic
2026-10-27T15:41:57Z INF Registered tunnel connection connIndex=1 connection=abfcb8da-5e7f-4176-9451-b9b71389ba07 event=0 ip=198.41.192.7 location=bud01 protocol=quic
2026-10-27T15:41:57Z INF Registered tunnel connection connIndex=2 connection=873f8fcf-a8eb-464c-9298-7ab0732b44e3 event=0 ip=198.41.192.167 location=bud01 protocol=quic
2026-10-27T15:41:58Z INF Registered tunnel connection connIndex=3 connection=a9d19736-d544-48bc-8583-a086e27fed66 event=0 ip=198.41.200.13 location=vie05 protocol=quic
-- cloudflared StartedAt: 2026-10-27T15:41:55.714288153Z traefik StartedAt: 2026-10-27T15:41:51.786522796Z
@@ -0,0 +1,12 @@
setting is independent of the Day-0 artifact manifest below. Effective floor: v0.346.1 — source: DB (hub_settings) ; env fallback would be v0.120.0 Save global floor…
DB override: v0.346.1 … Type the version again to confirm (or CLEAR to remove the DB override): Confi
rtifact. Agent — none — 0.167.0 0.166.0 0.165.0 0.164.0 0.163.0 0.162.0 0.161.0 0.158.1 Golden — none — 0.344.0 0.331.0 0.329.0 0.318.0 0.313.0 0.312.0 0.311.0 Min age
0.165.0 0.164.0 0.163.0 0.162.0 0.161.0 0.158.1 Golden — none — 0.344.0 0.331.0 0.329.0 0.318.0 0.313.0 0.312.0 0.311.0 Min agent The golden's controller CHANGELOG MinAgent: . The hub HOLDS the floor for any box whose agent is below this — blank = u
2026/10/27 16:41:19 [INFO] Customer tester-1 controller-version floor override set to "0.346.1" (declared MinAgent "0.158.1")
2026/10/27 16:41:19 [INFO] access token "cc-releases-2": POST /customers/tester-1/floor → 303
2026/10/27 16:41:19 [INFO] Customer demo-hp controller-version floor override set to "0.346.1" (declared MinAgent "0.158.1")
2026/10/27 16:41:19 [INFO] access token "cc-releases-2": POST /customers/demo-hp/floor → 303
2026/10/27 16:41:19 [INFO] Customer demo-felhom controller-version floor override set to "0.346.1" (declared MinAgent "0.158.1")
2026/10/27 16:41:19 [INFO] access token "cc-releases-2": POST /customers/demo-felhom/floor → 303
2026/10/27 16:50:15 [INFO] Global controller-version floor set to "0.346.1" (declared MinAgent "0.158.1")
2026/10/27 16:50:15 [INFO] access token "cc-releases-2": POST /configuration/global-floor → 303
@@ -0,0 +1,3 @@
== global floor 2026-10-27T15:50:15Z (operator's yes at the STOP)
HTTP/1.1 303 See Other
Location: /configuration?flash=floor_set
@@ -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,9 @@
== tester-1 2026-10-27T15:41:19Z
HTTP/1.1 303 See Other
Location: /customers/tester-1?flash=floor_set
== demo-hp 2026-10-27T15:41:19Z
HTTP/1.1 303 See Other
Location: /customers/demo-hp?flash=floor_set
== demo-felhom 2026-10-27T15:41:19Z
HTTP/1.1 303 See Other
Location: /customers/demo-felhom?flash=floor_set
@@ -0,0 +1,21 @@
# tester-1 2026-10-27T15:44:39Z
images: traefik=traefik:v3.7.16 filebrowser=gtstef/filebrowser:1.5.8-stable cloudflared=cloudflare/cloudflared:2026.10.4
filebrowser networks: felhom-filebrowser felhom-files
from traefik-public -> filebrowser:80 (by name): wget: bad address 'filebrowser:80' rc=0
from traefik-public -> filebrowser by IP 172.21.0.2: wget: download timed out rc=0
CONTROL from traefik-public -> traefik:80: HTTP/1.1 301 Moved Permanently rc=0
# demo-hp 9201 2026-10-27T15:44:47Z
images: traefik=traefik:v3.7.16 filebrowser=gtstef/filebrowser:1.5.8-stable cloudflared=cloudflare/cloudflared:2026.10.4
filebrowser networks: felhom-filebrowser felhom-files
from traefik-public -> filebrowser:80 (by name): wget: bad address 'filebrowser:80' rc=0
from traefik-public -> filebrowser by IP 172.24.0.2: wget: download timed out rc=0
CONTROL from traefik-public -> traefik:80: HTTP/1.1 301 Moved Permanently rc=0
# demo-felhom 9201 2026-10-27T15:44:55Z
images: traefik=traefik:v3.7.16 filebrowser=gtstef/filebrowser:1.5.8-stable cloudflared=cloudflare/cloudflared:2026.10.4
filebrowser networks: felhom-filebrowser felhom-files
from traefik-public -> filebrowser:80 (by name): wget: bad address 'filebrowser:80' rc=0
from traefik-public -> filebrowser by IP 172.19.0.2: wget: download timed out rc=0
CONTROL from traefik-public -> traefik:80: HTTP/1.1 301 Moved Permanently rc=0
https://files.enkicsifelhom.hu/ -> 200 <title>"FileBrowser Quantum"
https://files.enkisfelhom.hu/ -> 200 <title>"FileBrowser Quantum"
https://files.demo-felhom.eu/ -> 200 <title>"FileBrowser Quantum"
@@ -0,0 +1,4 @@
1. dashboard /__files/open -> HTTP/2 302 | to files host: True
2. files host /_felhom/sso -> HTTP/2 302 | files cookie set: True
3. a listing through traefik with the files cookie -> 200
4. the same without any cookie (control) -> 401
@@ -0,0 +1,14 @@
2026/10/27 15:41:33 [INFO] [selfupdate] Post-update startup: update successful (0.346.0 → 0.346.1)
2026/10/27 15:41:33 [INFO] [scheduler] Registered periodic job: selfupdate-check (every 6h0m0s)
2026/10/27 15:41:33 [INFO] [infra] traefik config changed (docker-compose.yml, tunnel trust true) — rewriting and recreating traefik (routing pauses a few seconds)
2026/10/27 15:41:47 [INFO] [infra] connected felhom-controller to traefik-public
2026/10/27 15:41:47 [INFO] [infra] cloudflared compose changed (tunnel network true) — recreating cloudflared (the tunnel reconnects in seconds)
2026/10/27 15:41:52 [INFO] [infra] connected felhom-controller to felhom-filebrowser (the FileBrowser default-login check, R-1126)
2026/10/27 15:41:52 [INFO] [infra] filebrowser: traefik joined felhom-files — the only route to FileBrowser (R-1281)
2026/10/27 15:41:52 [INFO] [infra] filebrowser: default login refused for this run — joined felhom-files, files.<domain> served (R-1126, R-1281)
2026/10/27 15:42:05 [INFO] [selfupdate] Current version 0.346.1 is up to date
-- cloudflared:
2026-10-27T15:41:52Z INF Starting tunnel tunnelID=52d0c214-b833-477c-86d8-f787d9b550dd
2026-10-27T15:41:52Z INF Registered tunnel connection connIndex=0 connection=9620f255-82f6-4233-ae47-8c852baa748a event=0 ip=198.41.200.193 location=vie05 protocol=quic
2026-10-27T15:41:52Z INF Registered tunnel connection connIndex=1 connection=d6b75d06-cfa8-4a92-b669-3ed2f9a66816 event=0 ip=198.41.192.67 location=bud01 protocol=quic
-- cloudflared StartedAt: 2026-10-27T15:41:51.942094496Z traefik StartedAt: 2026-10-27T15:41:47.240479453Z
@@ -0,0 +1,12 @@
#!/bin/bash
# r1281probe.sh — run INSIDE a guest (pct exec <vmid> -- bash -s < r1281probe.sh). R-1281: an app container on
# traefik-public must NOT reach the file manager; the control (same image, same network, same wget) reaches traefik.
# The throwaway client is the box's own traefik image (busybox wget), `--rm`, on traefik-public. Prints codes only.
img=$(docker inspect -f '{{.Config.Image}}' traefik)
fbip=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}} {{end}}' filebrowser | awk '{print $1}')
echo "images: traefik=$img filebrowser=$(docker inspect -f '{{.Config.Image}}' filebrowser) cloudflared=$(docker inspect -f '{{.Config.Image}}' cloudflared 2>/dev/null || echo none)"
echo "filebrowser networks: $(docker inspect -f '{{range $k,$v := .NetworkSettings.Networks}}{{$k}} {{end}}' filebrowser)"
t() { docker run --rm --network traefik-public --entrypoint sh "$img" -c "wget -q -T 5 -O /dev/null -S '$1' 2>&1 | head -1 | tr -d '\r' ; echo rc=\$?" 2>&1 | tr '\n' ' '; }
echo "from traefik-public -> filebrowser:80 (by name): $(t http://filebrowser:80/)"
echo "from traefik-public -> filebrowser by IP $fbip: $(t http://$fbip:80/)"
echo "CONTROL from traefik-public -> traefik:80: $(t http://traefik:80/)"
@@ -0,0 +1,5 @@
#!/bin/bash
# tunnelprobe.sh <url> <seconds> — one GET per second through the PUBLIC path (Cloudflare → the box's tunnel); prints
# "HH:MM:SS code". The gap is the run of codes that are not the name's normal answer (530/502/000 = tunnel away).
u=$1; n=$2
for i in $(seq 1 "$n"); do printf '%s %s\n' "$(date -u +%T)" "$(curl -s -o /dev/null -m 3 -w '%{http_code}' "$u")"; sleep 1; done
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
@@ -0,0 +1,72 @@
== 15:51:19
Tester-2 DOWN 0.292.0
Tester4 DOWN 0.345.1
demo-felhom OK 0.346.1
demo-hp OK 0.346.1
tester-1 OK 0.346.1
https://paste.enkicsifelhom.hu/ 200
https://paste.enkisfelhom.hu/ 200
https://felhom.demo-felhom.eu/ 302
https://files.enkicsifelhom.hu/ 200
https://files.enkisfelhom.hu/ 200
https://files.demo-felhom.eu/ 200
== 15:56:20
Tester-2 DOWN 0.292.0
Tester4 DOWN 0.345.1
demo-felhom OK 0.346.1
demo-hp OK 0.346.1
tester-1 OK 0.346.1
https://paste.enkicsifelhom.hu/ 200
https://paste.enkisfelhom.hu/ 200
https://felhom.demo-felhom.eu/ 302
https://files.enkicsifelhom.hu/ 200
https://files.enkisfelhom.hu/ 200
https://files.demo-felhom.eu/ 200
== 16:01:21
Tester-2 DOWN 0.292.0
Tester4 DOWN 0.345.1
demo-felhom OK 0.346.1
demo-hp OK 0.346.1
tester-1 OK 0.346.1
https://paste.enkicsifelhom.hu/ 200
https://paste.enkisfelhom.hu/ 200
https://felhom.demo-felhom.eu/ 302
https://files.enkicsifelhom.hu/ 200
https://files.enkisfelhom.hu/ 200
https://files.demo-felhom.eu/ 200
== 16:06:23
Tester-2 DOWN 0.292.0
Tester4 DOWN 0.345.1
demo-felhom OK 0.346.1
demo-hp OK 0.346.1
tester-1 OK 0.346.1
https://paste.enkicsifelhom.hu/ 200
https://paste.enkisfelhom.hu/ 200
https://felhom.demo-felhom.eu/ 302
https://files.enkicsifelhom.hu/ 200
https://files.enkisfelhom.hu/ 200
https://files.demo-felhom.eu/ 200
== 16:11:24
Tester-2 DOWN 0.292.0
Tester4 DOWN 0.345.1
demo-felhom OK 0.346.1
demo-hp OK 0.346.1
tester-1 OK 0.346.1
https://paste.enkicsifelhom.hu/ 200
https://paste.enkisfelhom.hu/ 200
https://felhom.demo-felhom.eu/ 302
https://files.enkicsifelhom.hu/ 200
https://files.enkisfelhom.hu/ 200
https://files.demo-felhom.eu/ 200
== 16:16:26
Tester-2 DOWN 0.292.0
Tester4 DOWN 0.345.1
demo-felhom OK 0.346.1
demo-hp OK 0.346.1
tester-1 OK 0.346.1
https://paste.enkicsifelhom.hu/ 200
https://paste.enkisfelhom.hu/ 200
https://felhom.demo-felhom.eu/ 302
https://files.enkicsifelhom.hu/ 200
https://files.enkisfelhom.hu/ 200
https://files.demo-felhom.eu/ 200
@@ -0,0 +1,46 @@
{
"app": "homebox",
"walk": "security",
"box_walk_version": 1,
"verdict": "inconclusive",
"venue": "box 9202 (drill catalog), the guarded Update",
"from": {
"homebox": "ghcr.io/sysadminsmedia/homebox:0.26.2"
},
"to": {
"homebox": "ghcr.io/sysadminsmedia/homebox:0.27.1"
},
"observables_before": {
"pinned_images": {
"homebox": "ghcr.io/sysadminsmedia/homebox:0.26.2"
},
"installed_images": {
"homebox": "ghcr.io/sysadminsmedia/homebox:0.26.2"
},
"catalog_images": null,
"live_compose_image_lines": [
"image: ghcr.io/sysadminsmedia/homebox:0.26.2"
],
"docker_inspect": [
"homebox ghcr.io/sysadminsmedia/homebox:0.26.2 running=true restarts=0"
]
},
"setup_gate_before": {
"browser": {
"status": "302",
"redirect": "https://felhom.enkisfelhom.hu/__gate/start?…"
},
"script": {
"status": "401",
"redirect": null
}
},
"why": "C1: the fixture could not seed and read back before the update",
"log": [
"14:51:49 [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'}",
"14:52:09 [1] deployed, controller state=running, pinned={'homebox': 'ghcr.io/sysadminsmedia/homebox:0.26.2'}",
"14:52:09 gate: homebox is gated — passed as the household (cookie set)",
"14:52:12 [2] setup gate as installed: {'browser': {'status': '302', 'redirect': 'https://felhom.enkisfelhom.hu/__gate/start?…'}, 'script': {'status': '401', 'redirect': None}}",
"14:52:13 homebox: create location -> 404 404 page not found\n"
]
}
@@ -0,0 +1,11 @@
14:51:49 [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'}
14:52:09 [1] deployed, controller state=running, pinned={'homebox': 'ghcr.io/sysadminsmedia/homebox:0.26.2'}
14:52:09 gate: homebox is gated — passed as the household (cookie set)
14:52:12 [2] setup gate as installed: {'browser': {'status': '302', 'redirect': 'https://felhom.enkisfelhom.hu/__gate/start?…'}, 'script': {'status': '401', 'redirect': None}}
14:52:13 homebox: create location -> 404 404 page not found
14:52:13 [9] verdict inconclusive -> /mnt/5_hdd/felhom.eu/git/felhom.eu/documentation/audits/security-app-updates-2026-10-27/walks/homebox/verdict.json
14:52:13 RESULT inconclusive — C1: the fixture could not seed and read back before the update
14:52:13 [X] stop -> 200 {'ok': True, 'message': 'Stack homebox stop completed'}
14:52:45 [X] remove (with drive data) -> 200 {'ok': True, 'data': {'removed': 'homebox', 'volumes_removed': ['homebox_homebox_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'hdd_note': 'Az alk
14:52:53 [X] after remove: deployed=False leftovers=''
@@ -0,0 +1,47 @@
{
"app": "mealie",
"walk": "security",
"box_walk_version": 1,
"verdict": "inconclusive",
"venue": "box 9202 (drill catalog), the guarded Update",
"from": {
"mealie": "ghcr.io/mealie-recipes/mealie:v3.28.0"
},
"to": {
"mealie": "ghcr.io/mealie-recipes/mealie:v3.29.0"
},
"observables_before": {
"pinned_images": {
"mealie": "ghcr.io/mealie-recipes/mealie:v3.28.0"
},
"installed_images": {
"mealie": "ghcr.io/mealie-recipes/mealie:v3.28.0"
},
"catalog_images": null,
"live_compose_image_lines": [
"image: ghcr.io/mealie-recipes/mealie:v3.28.0@sha256:8b02290f4d1806f02acac6f25f6d48a3c965612fda1f8e914d5af533276f8688"
],
"docker_inspect": [
"mealie ghcr.io/mealie-recipes/mealie:v3.28.0@sha256:8b02290f4d1806f02acac6f25f6d48a3c965612fda1f8e914d5af533276f8688 running=true restarts=0"
]
},
"setup_gate_before": {
"browser": {
"status": "200",
"redirect": null
},
"script": {
"status": "200",
"redirect": null
}
},
"why": "C1: the fixture could not seed and read back before the update",
"log": [
"15:17:18 [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['ADMIN_PASSWORD']",
"15:17:18 [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'}",
"15:18:29 [1] deployed, controller state=running, pinned={'mealie': 'ghcr.io/mealie-recipes/mealie:v3.28.0'}",
"15:18:29 gate: recipes is gated — passed as the household (cookie set)",
"15:18:34 [2] setup gate as installed: {'browser': {'status': '200', 'redirect': None}, 'script': {'status': '200', 'redirect': None}}",
"15:18:35 mealie: could not authenticate as the first-run admin :: http=401 {\"detail\":\"Unauthorized\"}"
]
}
@@ -0,0 +1,11 @@
15:17:18 [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['ADMIN_PASSWORD']
15:17:18 [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'}
15:18:29 [1] deployed, controller state=running, pinned={'mealie': 'ghcr.io/mealie-recipes/mealie:v3.28.0'}
15:18:29 gate: recipes is gated — passed as the household (cookie set)
15:18:34 [2] setup gate as installed: {'browser': {'status': '200', 'redirect': None}, 'script': {'status': '200', 'redirect': None}}
15:18:35 mealie: could not authenticate as the first-run admin :: http=401 {"detail":"Unauthorized"}
15:18:35 [9] verdict inconclusive -> /mnt/5_hdd/felhom.eu/git/felhom.eu/documentation/audits/security-app-updates-2026-10-27/walks/mealie/verdict.json
15:18:35 RESULT inconclusive — C1: the fixture could not seed and read back before the update
15:18:37 [X] stop -> 200 {'ok': True, 'message': 'Stack mealie stop completed'}
15:19:09 [X] remove (with drive data) -> 200 {'ok': True, 'data': {'removed': 'mealie', 'volumes_removed': ['mealie_mealie_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'hdd_note': 'Az alkalm
15:19:17 [X] after remove: deployed=False leftovers=''
@@ -0,0 +1,222 @@
{
"app": "audiobookshelf",
"walk": "security",
"box_walk_version": 1,
"verdict": "proven",
"venue": "box 9202 (drill catalog), the guarded Update",
"from": {
"audiobookshelf": "ghcr.io/advplyr/audiobookshelf:2.37.1"
},
"to": {
"audiobookshelf": "ghcr.io/advplyr/audiobookshelf:2.37.2"
},
"observables_before": {
"pinned_images": {
"audiobookshelf": "ghcr.io/advplyr/audiobookshelf:2.37.1"
},
"installed_images": {
"audiobookshelf": "ghcr.io/advplyr/audiobookshelf:2.37.1"
},
"catalog_images": {
"audiobookshelf": "ghcr.io/advplyr/audiobookshelf:2.37.1"
},
"live_compose_image_lines": [
"image: ghcr.io/advplyr/audiobookshelf:2.37.1@sha256:581d68b2a6fc7ebf58d81c878a9f387cbbc0d88ac9d37b298b9cee10168af85b"
],
"docker_inspect": [
"audiobookshelf ghcr.io/advplyr/audiobookshelf:2.37.1@sha256:581d68b2a6fc7ebf58d81c878a9f387cbbc0d88ac9d37b298b9cee10168af85b running=true restarts=0"
]
},
"setup_gate_before": {
"browser": {
"status": "302",
"redirect": "https://felhom.enkisfelhom.hu/__gate/start?…"
},
"script": {
"status": "401",
"redirect": null
}
},
"seed": "read_back",
"drill_commit": "36f907d89474",
"sync_waited_s": 4.5,
"badge_before": {
"hu": [
{
"title": "Újabb változat érhető el ehhez az alkalmazáshoz. A frissítés indításához nyomd meg a Frissítés gombot.",
"text": "Frissítés elérhető — ma"
}
],
"en": [
{
"title": "A newer version of this app is available. Select the Update button to start it.",
"text": "Update available — today"
}
]
},
"measured_at": "2026-10-27T14:20:08Z",
"update": {
"accepted": true,
"http": "202",
"phases": [
{
"t": 0.0,
"phase": "backing-up",
"label": "Biztonsági mentés készül a frissítés előtt…",
"updating": true,
"error": null,
"hold": null
},
{
"t": 3.1,
"phase": "safety-dump",
"label": "Adatbázis pillanatkép…",
"updating": true,
"error": null,
"hold": null
},
{
"t": 4.1,
"phase": "pulling",
"label": "Új verzió letöltése…",
"updating": true,
"error": null,
"hold": null
},
{
"t": 16.4,
"phase": "copying",
"label": "Az adatok másolása a frissítés előtt…",
"updating": true,
"error": null,
"hold": null
},
{
"t": 21.5,
"phase": "verifying",
"label": "Működés ellenőrzése…",
"updating": true,
"error": null,
"hold": null
},
{
"t": 26.7,
"phase": "done",
"label": "Frissítve",
"updating": false,
"error": null,
"hold": null
}
],
"duration_s": 26.7,
"final_phase": "done",
"update_error": null,
"hold_reason": null,
"state": "running"
},
"observables_after": {
"pinned_images": {
"audiobookshelf": "ghcr.io/advplyr/audiobookshelf:2.37.2"
},
"installed_images": {
"audiobookshelf": "ghcr.io/advplyr/audiobookshelf:2.37.2"
},
"catalog_images": {
"audiobookshelf": "ghcr.io/advplyr/audiobookshelf:2.37.2"
},
"live_compose_image_lines": [
"image: ghcr.io/advplyr/audiobookshelf:2.37.2"
],
"docker_inspect": [
"audiobookshelf ghcr.io/advplyr/audiobookshelf:2.37.2 running=true restarts=0"
]
},
"badge_after": {
"hu": [
{
"title": "Ez az alkalmazás a legfrissebb elérhető változatot futtatja.",
"text": "Naprakész"
}
],
"en": [
{
"title": "This app is running the newest version available.",
"text": "Up to date"
}
]
},
"state_after": "running",
"hold_after": null,
"to_digests": {
"audiobookshelf": "sha256:b897c33f05972fb1bf484f7487bc878fa91ec8691335c1db6e2929c3a7658efa"
},
"four_observables": {
"pinned": {
"audiobookshelf": "ghcr.io/advplyr/audiobookshelf:2.37.2"
},
"installed": {
"audiobookshelf": "ghcr.io/advplyr/audiobookshelf:2.37.2"
},
"catalog": {
"audiobookshelf": "ghcr.io/advplyr/audiobookshelf:2.37.2"
},
"live_compose": [
"ghcr.io/advplyr/audiobookshelf:2.37.2"
]
},
"seed_read_after": true,
"setup_gate_after": {
"browser": {
"status": "404",
"redirect": null
},
"script": {
"status": "404",
"redirect": null
}
},
"memory": {
"soak_s": 600,
"interval_s": 10,
"samples": 60,
"containers": {
"audiobookshelf": {
"samples": 60,
"anon_peak_bytes": 51740672,
"limit_bytes": 536870912,
"anon_peak_pct": 9.6,
"cgroup_peak_pct": 11.7,
"oom_kill_delta": 0,
"oom_killed_flag": false,
"restarts_delta": 0,
"running_all_samples": true,
"cgroup": "/sys/fs/cgroup/system.slice/docker-204ecffd61b9b118d4c783d86b7e00b8a1da656d9463b9bacebaaad58a13dc9a.scope"
}
},
"oom_kills": 0,
"restarts": 0,
"peak_pct": 9.6
},
"why": "the security-fix step ran on the box through the guarded Update; healthy, TO on all four observables, no undo, no hold, a clean soak, seed read back",
"log": [
"15:19:19 [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['HDD_PATH']",
"15:19:19 [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'}",
"15:19:49 [1] deployed, controller state=running, pinned={'audiobookshelf': 'ghcr.io/advplyr/audiobookshelf:2.37.1'}",
"15:19:49 gate: audiobooks is gated — passed as the household (cookie set)",
"15:19:53 [2] setup gate as installed: {'browser': {'status': '302', 'redirect': 'https://felhom.enkisfelhom.hu/__gate/start?…'}, 'script': {'status': '401', 'redirect': None}}",
"15:19:53 audiobookshelf: /init http=200",
"15:19:53 audiobookshelf: login as the seeded root http=200 ok=True",
"15:19:55 [5] drill commit 36f907d89474: audiobookshelf ghcr.io/advplyr/audiobookshelf:2.37.1 -> ghcr.io/advplyr/audiobookshelf:2.37.2 (push rc=0)",
"15:20:04 [5] the box's drill mirror now at 36f907d89",
"15:20:09 [6] Update -> 202 {'ok': True, 'data': {'accepted': True, 'completed': False}, 'message': 'Frissítés elindult – az állapot a kártyán követhető'}",
"15:20:09 + 0.0s phase=backing-up label=Biztonsági mentés készül a frissítés előtt… err=None hold=None",
"15:20:12 + 3.1s phase=safety-dump label=Adatbázis pillanatkép… err=None hold=None",
"15:20:13 + 4.1s phase=pulling label=Új verzió letöltése… err=None hold=None",
"15:20:25 + 16.4s phase=copying label=Az adatok másolása a frissítés előtt… err=None hold=None",
"15:20:30 + 21.5s phase=verifying label=Működés ellenőrzése… err=None hold=None",
"15:20:35 + 26.7s phase=done label=Frissítve err=None hold=None",
"15:20:54 audiobookshelf: login as the seeded root http=200 ok=True",
"15:20:54 [7] memory soak 600 s …",
"15:31:00 [7] soak: peak 9.6% of the limit (anon), kills 0, restarts 0"
]
}
@@ -0,0 +1,3 @@
15:31:43 [5] drill commit d8006e9e6de8: audiobookshelf ghcr.io/advplyr/audiobookshelf:2.37.2 -> ghcr.io/advplyr/audiobookshelf:2.37.1 (push rc=0)
15:31:51 [5] the box's drill mirror now at d8006e9e6
d8006e9e6de8
@@ -0,0 +1,24 @@
15:19:19 [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['HDD_PATH']
15:19:19 [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'}
15:19:49 [1] deployed, controller state=running, pinned={'audiobookshelf': 'ghcr.io/advplyr/audiobookshelf:2.37.1'}
15:19:49 gate: audiobooks is gated — passed as the household (cookie set)
15:19:53 [2] setup gate as installed: {'browser': {'status': '302', 'redirect': 'https://felhom.enkisfelhom.hu/__gate/start?…'}, 'script': {'status': '401', 'redirect': None}}
15:19:53 audiobookshelf: /init http=200
15:19:53 audiobookshelf: login as the seeded root http=200 ok=True
15:19:55 [5] drill commit 36f907d89474: audiobookshelf ghcr.io/advplyr/audiobookshelf:2.37.1 -> ghcr.io/advplyr/audiobookshelf:2.37.2 (push rc=0)
15:20:04 [5] the box's drill mirror now at 36f907d89
15:20:09 [6] Update -> 202 {'ok': True, 'data': {'accepted': True, 'completed': False}, 'message': 'Frissítés elindult – az állapot a kártyán követhető'}
15:20:09 + 0.0s phase=backing-up label=Biztonsági mentés készül a frissítés előtt… err=None hold=None
15:20:12 + 3.1s phase=safety-dump label=Adatbázis pillanatkép… err=None hold=None
15:20:13 + 4.1s phase=pulling label=Új verzió letöltése… err=None hold=None
15:20:25 + 16.4s phase=copying label=Az adatok másolása a frissítés előtt… err=None hold=None
15:20:30 + 21.5s phase=verifying label=Működés ellenőrzése… err=None hold=None
15:20:35 + 26.7s phase=done label=Frissítve err=None hold=None
15:20:54 audiobookshelf: login as the seeded root http=200 ok=True
15:20:54 [7] memory soak 600 s …
15:31:00 [7] soak: peak 9.6% of the limit (anon), kills 0, restarts 0
15:31:00 [9] verdict proven -> /mnt/5_hdd/felhom.eu/git/felhom.eu/documentation/audits/security-app-updates-2026-10-27/walks/audiobookshelf/verdict.json
15:31:00 RESULT proven — the security-fix step ran on the box through the guarded Update; healthy, TO on all four observables, no undo, no hold, a clean soak, seed read back
15:31:00 [X] stop -> 200 {'ok': True, 'message': 'Stack audiobookshelf stop completed'}
15:31:33 [X] remove (with drive data) -> 200 {'ok': True, 'data': {'removed': 'audiobookshelf', 'volumes_removed': ['audiobookshelf_audiobookshelf_config', 'audiobookshelf_audiobookshelf_metadata'], 'hdd_p
15:31:41 [X] after remove: deployed=False leftovers=''
@@ -0,0 +1,3 @@
STEP audiobookshelf: the superseded step {'audiobookshelf': 'ghcr.io/advplyr/audiobookshelf:2.37.1'} keeps its definition at steps/357e2920c1d33ed0.yml
STEP audiobookshelf: … and its .felhom.yml at steps/357e2920c1d33ed0.felhom.yml
WROTE audiobookshelf: {'audiobookshelf': 'ghcr.io/advplyr/audiobookshelf:2.37.1'} -> {'audiobookshelf': 'ghcr.io/advplyr/audiobookshelf:2.37.2'} peak 9.6% marks {'files_may_change': False, 'needs_person': None, 'memory_tight': False}
@@ -0,0 +1,209 @@
{
"app": "bentopdf",
"walk": "security",
"box_walk_version": 1,
"verdict": "proven",
"venue": "box 9202 (drill catalog), the guarded Update",
"from": {
"bentopdf": "ghcr.io/alam00000/bentopdf:v2.8.6"
},
"to": {
"bentopdf": "ghcr.io/alam00000/bentopdf:v2.8.10"
},
"observables_before": {
"pinned_images": {
"bentopdf": "ghcr.io/alam00000/bentopdf:v2.8.6"
},
"installed_images": {
"bentopdf": "ghcr.io/alam00000/bentopdf:v2.8.6"
},
"catalog_images": {
"bentopdf": "ghcr.io/alam00000/bentopdf:v2.8.6"
},
"live_compose_image_lines": [
"image: ghcr.io/alam00000/bentopdf:v2.8.6"
],
"docker_inspect": [
"bentopdf ghcr.io/alam00000/bentopdf:v2.8.6 running=true restarts=0"
]
},
"setup_gate_before": {
"browser": {
"status": "404",
"redirect": null
},
"script": {
"status": "404",
"redirect": null
}
},
"seed": "none",
"seed_why": "no box fixture for this app",
"drill_commit": "6d42520c7a8c",
"sync_waited_s": 4.5,
"badge_before": {
"hu": [
{
"title": "Újabb változat érhető el ehhez az alkalmazáshoz. A frissítés indításához nyomd meg a Frissítés gombot.",
"text": "Frissítés elérhető — ma"
}
],
"en": [
{
"title": "A newer version of this app is available. Select the Update button to start it.",
"text": "Update available — today"
}
]
},
"measured_at": "2026-10-27T14:22:11Z",
"update": {
"accepted": true,
"http": "202",
"phases": [
{
"t": 0.0,
"phase": "backing-up",
"label": "Biztonsági mentés készül a frissítés előtt…",
"updating": true,
"error": null,
"hold": null
},
{
"t": 1.1,
"phase": "pulling",
"label": "Új verzió letöltése…",
"updating": true,
"error": null,
"hold": null
},
{
"t": 14.4,
"phase": "copying",
"label": "Az adatok másolása a frissítés előtt…",
"updating": true,
"error": null,
"hold": null
},
{
"t": 18.5,
"phase": "verifying",
"label": "Működés ellenőrzése…",
"updating": true,
"error": null,
"hold": null
},
{
"t": 23.6,
"phase": "done",
"label": "Frissítve",
"updating": false,
"error": null,
"hold": null
}
],
"duration_s": 23.6,
"final_phase": "done",
"update_error": null,
"hold_reason": null,
"state": "running"
},
"observables_after": {
"pinned_images": {
"bentopdf": "ghcr.io/alam00000/bentopdf:v2.8.10"
},
"installed_images": {
"bentopdf": "ghcr.io/alam00000/bentopdf:v2.8.10"
},
"catalog_images": {
"bentopdf": "ghcr.io/alam00000/bentopdf:v2.8.10"
},
"live_compose_image_lines": [
"image: ghcr.io/alam00000/bentopdf:v2.8.10"
],
"docker_inspect": [
"bentopdf ghcr.io/alam00000/bentopdf:v2.8.10 running=true restarts=0"
]
},
"badge_after": {
"hu": [
{
"title": "Ez az alkalmazás a legfrissebb elérhető változatot futtatja.",
"text": "Naprakész"
}
],
"en": [
{
"title": "This app is running the newest version available.",
"text": "Up to date"
}
]
},
"state_after": "running",
"hold_after": null,
"to_digests": {
"bentopdf": "sha256:039239902a01e58a5a0f52e29039fafa18ffc2a481bb8acd807599f1c6dde7ef"
},
"four_observables": {
"pinned": {
"bentopdf": "ghcr.io/alam00000/bentopdf:v2.8.10"
},
"installed": {
"bentopdf": "ghcr.io/alam00000/bentopdf:v2.8.10"
},
"catalog": {
"bentopdf": "ghcr.io/alam00000/bentopdf:v2.8.10"
},
"live_compose": [
"ghcr.io/alam00000/bentopdf:v2.8.10"
]
},
"setup_gate_after": {
"browser": {
"status": "404",
"redirect": null
},
"script": {
"status": "404",
"redirect": null
}
},
"memory": {
"soak_s": 600,
"interval_s": 10,
"samples": 60,
"containers": {
"bentopdf": {
"samples": 60,
"anon_peak_bytes": 2605056,
"limit_bytes": 402653184,
"anon_peak_pct": 0.6,
"cgroup_peak_pct": 2.5,
"oom_kill_delta": 0,
"oom_killed_flag": false,
"restarts_delta": 0,
"running_all_samples": true,
"cgroup": "/sys/fs/cgroup/system.slice/docker-d58f1be38bb12778ce92b3b932ad4c67cfec769459dbdc1941ea47b41cf5c3e9.scope"
}
},
"oom_kills": 0,
"restarts": 0,
"peak_pct": 0.6
},
"why": "the security-fix step ran on the box through the guarded Update; healthy, TO on all four observables, no undo, no hold, a clean soak",
"log": [
"15:21:19 [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'}",
"15:21:54 [1] deployed, controller state=running, pinned={'bentopdf': 'ghcr.io/alam00000/bentopdf:v2.8.6'}",
"15:21:57 [2] setup gate as installed: {'browser': {'status': '404', 'redirect': None}, 'script': {'status': '404', 'redirect': None}}",
"15:21:57 [3] seed: none — no box fixture for this app",
"15:21:58 [5] drill commit 6d42520c7a8c: bentopdf ghcr.io/alam00000/bentopdf:v2.8.6 -> ghcr.io/alam00000/bentopdf:v2.8.10 (push rc=0)",
"15:22:07 [5] the box's drill mirror now at 6d42520c7",
"15:22:12 [6] Update -> 202 {'ok': True, 'data': {'accepted': True, 'completed': False}, 'message': 'Frissítés elindult – az állapot a kártyán követhető'}",
"15:22:12 + 0.0s phase=backing-up label=Biztonsági mentés készül a frissítés előtt… err=None hold=None",
"15:22:13 + 1.1s phase=pulling label=Új verzió letöltése… err=None hold=None",
"15:22:26 + 14.4s phase=copying label=Az adatok másolása a frissítés előtt… err=None hold=None",
"15:22:30 + 18.5s phase=verifying label=Működés ellenőrzése… err=None hold=None",
"15:22:35 + 23.6s phase=done label=Frissítve err=None hold=None",
"15:22:53 [7] memory soak 600 s …",
"15:32:59 [7] soak: peak 0.6% of the limit (anon), kills 0, restarts 0"
]
}
@@ -0,0 +1,3 @@
15:33:42 [5] drill commit 0e02cd781bcf: bentopdf ghcr.io/alam00000/bentopdf:v2.8.10 -> ghcr.io/alam00000/bentopdf:v2.8.6 (push rc=0)
15:33:50 [5] the box's drill mirror now at 0e02cd781
0e02cd781bcf
@@ -0,0 +1,19 @@
15:21:19 [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'}
15:21:54 [1] deployed, controller state=running, pinned={'bentopdf': 'ghcr.io/alam00000/bentopdf:v2.8.6'}
15:21:57 [2] setup gate as installed: {'browser': {'status': '404', 'redirect': None}, 'script': {'status': '404', 'redirect': None}}
15:21:57 [3] seed: none — no box fixture for this app
15:21:58 [5] drill commit 6d42520c7a8c: bentopdf ghcr.io/alam00000/bentopdf:v2.8.6 -> ghcr.io/alam00000/bentopdf:v2.8.10 (push rc=0)
15:22:07 [5] the box's drill mirror now at 6d42520c7
15:22:12 [6] Update -> 202 {'ok': True, 'data': {'accepted': True, 'completed': False}, 'message': 'Frissítés elindult – az állapot a kártyán követhető'}
15:22:12 + 0.0s phase=backing-up label=Biztonsági mentés készül a frissítés előtt… err=None hold=None
15:22:13 + 1.1s phase=pulling label=Új verzió letöltése… err=None hold=None
15:22:26 + 14.4s phase=copying label=Az adatok másolása a frissítés előtt… err=None hold=None
15:22:30 + 18.5s phase=verifying label=Működés ellenőrzése… err=None hold=None
15:22:35 + 23.6s phase=done label=Frissítve err=None hold=None
15:22:53 [7] memory soak 600 s …
15:32:59 [7] soak: peak 0.6% of the limit (anon), kills 0, restarts 0
15:32:59 [9] verdict proven -> /mnt/5_hdd/felhom.eu/git/felhom.eu/documentation/audits/security-app-updates-2026-10-27/walks/bentopdf/verdict.json
15:32:59 RESULT proven — the security-fix step ran on the box through the guarded Update; healthy, TO on all four observables, no undo, no hold, a clean soak
15:33:00 [X] stop -> 200 {'ok': True, 'message': 'Stack bentopdf stop completed'}
15:33:31 [X] remove (with drive data) -> 200 {'ok': True, 'data': {'removed': 'bentopdf', 'volumes_removed': [], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'hdd_note': 'Az alkalmazás nem tárolt sa
15:33:40 [X] after remove: deployed=False leftovers=''
@@ -0,0 +1 @@
WROTE bentopdf: {'bentopdf': 'ghcr.io/alam00000/bentopdf:v2.8.6'} -> {'bentopdf': 'ghcr.io/alam00000/bentopdf:v2.8.10'} peak 0.6% marks {'files_may_change': False, 'needs_person': None, 'memory_tight': False}
@@ -0,0 +1,294 @@
{
"app": "docmost",
"walk": "security",
"box_walk_version": 1,
"verdict": "proven",
"venue": "box 9202 (drill catalog), the guarded Update",
"from": {
"docmost": "docmost/docmost:0.96.0",
"docmost-postgres": "postgres:18-alpine",
"docmost-redis": "redis:7-alpine"
},
"to": {
"docmost": "docmost/docmost:0.97.0",
"docmost-postgres": "postgres:18-alpine",
"docmost-redis": "redis:7-alpine"
},
"observables_before": {
"pinned_images": {
"docmost": "docmost/docmost:0.96.0",
"docmost-postgres": "postgres:18-alpine",
"docmost-redis": "redis:7-alpine"
},
"installed_images": {
"docmost": "docmost/docmost:0.96.0",
"docmost-postgres": "postgres:18-alpine",
"docmost-redis": "redis:7-alpine"
},
"catalog_images": null,
"live_compose_image_lines": [
"image: docmost/docmost:0.96.0@sha256:b56947fcfd08aab8fae12a377e1792784786adbf8b96e4281f14ef4fc072685a",
"image: postgres:18-alpine@sha256:77f585114c32fbca283dc835b0596f4e52b51b4c6662d7810b2f4084f60a1873",
"image: redis:7-alpine@sha256:858f009f9709ce576febc734aa78b8f6d624b82571f9ddb6bda4377c833b3499"
],
"docker_inspect": [
"docmost docmost/docmost:0.96.0@sha256:b56947fcfd08aab8fae12a377e1792784786adbf8b96e4281f14ef4fc072685a running=true restarts=0",
"docmost-postgres postgres:18-alpine@sha256:77f585114c32fbca283dc835b0596f4e52b51b4c6662d7810b2f4084f60a1873 running=true restarts=0",
"docmost-redis redis:7-alpine@sha256:858f009f9709ce576febc734aa78b8f6d624b82571f9ddb6bda4377c833b3499 running=true restarts=0"
]
},
"setup_gate_before": {
"browser": {
"status": "302",
"redirect": "https://felhom.enkisfelhom.hu/__gate/start?…"
},
"script": {
"status": "401",
"redirect": null
}
},
"seed": "read_back",
"drill_commit": "1105b2da8b4c",
"sync_waited_s": 26.9,
"badge_before": {
"hu": [
{
"title": "Újabb változat érhető el ehhez az alkalmazáshoz. A frissítés indításához nyomd meg a Frissítés gombot.",
"text": "Frissítés elérhető — ma"
}
],
"en": [
{
"title": "A newer version of this app is available. Select the Update button to start it.",
"text": "Update available — today"
}
]
},
"measured_at": "2026-10-27T14:00:23Z",
"update": {
"accepted": true,
"http": "202",
"phases": [
{
"t": 0.0,
"phase": "checking",
"label": "Ellenőrzés…",
"updating": true,
"error": null,
"hold": null
},
{
"t": 1.0,
"phase": "backing-up",
"label": "Biztonsági mentés készül a frissítés előtt…",
"updating": true,
"error": null,
"hold": null
},
{
"t": 24.6,
"phase": "safety-dump",
"label": "Adatbázis pillanatkép…",
"updating": true,
"error": null,
"hold": null
},
{
"t": 26.6,
"phase": "pulling",
"label": "Új verzió letöltése…",
"updating": true,
"error": null,
"hold": null
},
{
"t": 127.1,
"phase": "copying",
"label": "Az adatok másolása a frissítés előtt…",
"updating": true,
"error": null,
"hold": null
},
{
"t": 131.2,
"phase": "starting",
"label": "Indítás az új verzióval…",
"updating": true,
"error": null,
"hold": null
},
{
"t": 142.5,
"phase": "verifying",
"label": "Működés ellenőrzése…",
"updating": true,
"error": null,
"hold": null
},
{
"t": 163.0,
"phase": "done",
"label": "Frissítve",
"updating": false,
"error": null,
"hold": null
}
],
"duration_s": 163.0,
"final_phase": "done",
"update_error": null,
"hold_reason": null,
"state": "running"
},
"observables_after": {
"pinned_images": {
"docmost": "docmost/docmost:0.97.0",
"docmost-postgres": "postgres:18-alpine",
"docmost-redis": "redis:7-alpine"
},
"installed_images": {
"docmost": "docmost/docmost:0.97.0",
"docmost-postgres": "postgres:18-alpine",
"docmost-redis": "redis:7-alpine"
},
"catalog_images": {
"docmost": "docmost/docmost:0.97.0",
"docmost-postgres": "postgres:18-alpine",
"docmost-redis": "redis:7-alpine"
},
"live_compose_image_lines": [
"image: docmost/docmost:0.97.0",
"image: postgres:18-alpine",
"image: redis:7-alpine"
],
"docker_inspect": [
"docmost docmost/docmost:0.97.0 running=true restarts=0",
"docmost-redis redis:7-alpine running=true restarts=0",
"docmost-postgres postgres:18-alpine running=true restarts=0"
]
},
"badge_after": {
"hu": [
{
"title": "Ez az alkalmazás a legfrissebb elérhető változatot futtatja.",
"text": "Naprakész"
}
],
"en": [
{
"title": "This app is running the newest version available.",
"text": "Up to date"
}
]
},
"state_after": "running",
"hold_after": null,
"to_digests": {
"docmost": "sha256:40c454d74ffdd9ecb15833e4d96f3a630d59aad862a1869381ae6ee086454419",
"docmost-postgres": "sha256:10a5c69a83035ab5239f5620d708520e8b28f5aa1f2b20143e6024532edadfb5",
"docmost-redis": "sha256:6ba19c50b56777f5c11c58eff8ddb69d0d5f27ba131cffb63f180ccfd43c66af"
},
"four_observables": {
"pinned": {
"docmost": "docmost/docmost:0.97.0",
"docmost-postgres": "postgres:18-alpine",
"docmost-redis": "redis:7-alpine"
},
"installed": {
"docmost": "docmost/docmost:0.97.0",
"docmost-postgres": "postgres:18-alpine",
"docmost-redis": "redis:7-alpine"
},
"catalog": {
"docmost": "docmost/docmost:0.97.0",
"docmost-postgres": "postgres:18-alpine",
"docmost-redis": "redis:7-alpine"
},
"live_compose": [
"docmost/docmost:0.97.0",
"postgres:18-alpine",
"redis:7-alpine"
]
},
"seed_read_after": true,
"setup_gate_after": {
"browser": {
"status": "302",
"redirect": "https://felhom.enkisfelhom.hu/__gate/start?…"
},
"script": {
"status": "401",
"redirect": null
}
},
"memory": {
"soak_s": 600,
"interval_s": 10,
"samples": 174,
"containers": {
"docmost": {
"samples": 58,
"anon_peak_bytes": 435372032,
"limit_bytes": 805306368,
"anon_peak_pct": 54.1,
"cgroup_peak_pct": 100.0,
"oom_kill_delta": 0,
"oom_killed_flag": false,
"restarts_delta": 0,
"running_all_samples": true,
"cgroup": "/sys/fs/cgroup/system.slice/docker-31babd6a486c29cf55bcc4c17816b835a91ad9a1c6d261d594e4c15a1a38680b.scope"
},
"docmost-redis": {
"samples": 58,
"anon_peak_bytes": 4182016,
"limit_bytes": 134217728,
"anon_peak_pct": 3.1,
"cgroup_peak_pct": 16.9,
"oom_kill_delta": 0,
"oom_killed_flag": false,
"restarts_delta": 0,
"running_all_samples": true,
"cgroup": "/sys/fs/cgroup/system.slice/docker-08f976fb643fe7db20e4a4c91934e68946492af8a0d141fa61468ccb7eb14652.scope"
},
"docmost-postgres": {
"samples": 58,
"anon_peak_bytes": 12107776,
"limit_bytes": 268435456,
"anon_peak_pct": 4.5,
"cgroup_peak_pct": 23.5,
"oom_kill_delta": 0,
"oom_killed_flag": false,
"restarts_delta": 0,
"running_all_samples": true,
"cgroup": "/sys/fs/cgroup/system.slice/docker-23db659fc0d91e0a1dbbd8f356cb0fa649c382eaf518b54172dcbb1385379a5e.scope"
}
},
"oom_kills": 0,
"restarts": 0,
"peak_pct": 54.1
},
"why": "the security-fix step ran on the box through the guarded Update; healthy, TO on all four observables, no undo, no hold, a clean soak, seed read back",
"log": [
"14:57:50 [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'}",
"14:59:41 [1] deployed, controller state=running, pinned={'docmost': 'docmost/docmost:0.96.0', 'docmost-postgres': 'postgres:18-alpine', 'docmost-redis': 'redis:7-alpine'}",
"14:59:41 gate: docs is gated — passed as the household (cookie set)",
"14:59:44 [2] setup gate as installed: {'browser': {'status': '302', 'redirect': 'https://felhom.enkisfelhom.hu/__gate/start?…'}, 'script': {'status': '401', 'redirect': None}}",
"14:59:45 docmost: /api/auth/setup http=200 rc=0",
"14:59:45 docmost: login as the seeded user http=200 ok=True",
"14:59:46 [5] drill commit 1105b2da8b4c: docmost docmost/docmost:0.96.0 -> docmost/docmost:0.97.0 (push rc=0)",
"14:59:56 [5] the box's drill mirror now at 1105b2da8",
"15:00:23 [sync] the badge needed 26.9s and 3 sync+rescan rounds to catch up to docmost/docmost:0.97.0 — R-607's window, measured",
"15:00:23 [6] Update -> 202 {'ok': True, 'data': {'accepted': True, 'completed': False}, 'message': 'Frissítés elindult – az állapot a kártyán követhető'}",
"15:00:23 + 0.0s phase=checking label=Ellenőrzés… err=None hold=None",
"15:00:24 + 1.0s phase=backing-up label=Biztonsági mentés készül a frissítés előtt… err=None hold=None",
"15:00:47 + 24.6s phase=safety-dump label=Adatbázis pillanatkép… err=None hold=None",
"15:00:50 + 26.6s phase=pulling label=Új verzió letöltése… err=None hold=None",
"15:02:30 + 127.1s phase=copying label=Az adatok másolása a frissítés előtt… err=None hold=None",
"15:02:34 + 131.2s phase=starting label=Indítás az új verzióval… err=None hold=None",
"15:02:45 + 142.5s phase=verifying label=Működés ellenőrzése… err=None hold=None",
"15:03:06 + 163.0s phase=done label=Frissítve err=None hold=None",
"15:03:25 docmost: login as the seeded user http=200 ok=True",
"15:03:25 [7] memory soak 600 s …",
"15:13:34 [7] soak: peak 54.1% of the limit (anon), kills 0, restarts 0"
]
}
@@ -0,0 +1,3 @@
15:14:22 [5] drill commit fe89552ebf0b: docmost docmost/docmost:0.97.0 -> docmost/docmost:0.96.0 (push rc=0)
15:14:30 [5] the box's drill mirror now at fe89552eb
fe89552ebf0b
@@ -0,0 +1,26 @@
14:57:50 [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'}
14:59:41 [1] deployed, controller state=running, pinned={'docmost': 'docmost/docmost:0.96.0', 'docmost-postgres': 'postgres:18-alpine', 'docmost-redis': 'redis:7-alpine'}
14:59:41 gate: docs is gated — passed as the household (cookie set)
14:59:44 [2] setup gate as installed: {'browser': {'status': '302', 'redirect': 'https://felhom.enkisfelhom.hu/__gate/start?…'}, 'script': {'status': '401', 'redirect': None}}
14:59:45 docmost: /api/auth/setup http=200 rc=0
14:59:45 docmost: login as the seeded user http=200 ok=True
14:59:46 [5] drill commit 1105b2da8b4c: docmost docmost/docmost:0.96.0 -> docmost/docmost:0.97.0 (push rc=0)
14:59:56 [5] the box's drill mirror now at 1105b2da8
15:00:23 [sync] the badge needed 26.9s and 3 sync+rescan rounds to catch up to docmost/docmost:0.97.0 — R-607's window, measured
15:00:23 [6] Update -> 202 {'ok': True, 'data': {'accepted': True, 'completed': False}, 'message': 'Frissítés elindult – az állapot a kártyán követhető'}
15:00:23 + 0.0s phase=checking label=Ellenőrzés… err=None hold=None
15:00:24 + 1.0s phase=backing-up label=Biztonsági mentés készül a frissítés előtt… err=None hold=None
15:00:47 + 24.6s phase=safety-dump label=Adatbázis pillanatkép… err=None hold=None
15:00:50 + 26.6s phase=pulling label=Új verzió letöltése… err=None hold=None
15:02:30 + 127.1s phase=copying label=Az adatok másolása a frissítés előtt… err=None hold=None
15:02:34 + 131.2s phase=starting label=Indítás az új verzióval… err=None hold=None
15:02:45 + 142.5s phase=verifying label=Működés ellenőrzése… err=None hold=None
15:03:06 + 163.0s phase=done label=Frissítve err=None hold=None
15:03:25 docmost: login as the seeded user http=200 ok=True
15:03:25 [7] memory soak 600 s …
15:13:34 [7] soak: peak 54.1% of the limit (anon), kills 0, restarts 0
15:13:34 [9] verdict proven -> /mnt/5_hdd/felhom.eu/git/felhom.eu/documentation/audits/security-app-updates-2026-10-27/walks/docmost/verdict.json
15:13:34 RESULT proven — the security-fix step ran on the box through the guarded Update; healthy, TO on all four observables, no undo, no hold, a clean soak, seed read back
15:13:36 [X] stop -> 200 {'ok': True, 'message': 'Stack docmost stop completed'}
15:14:08 [X] remove (with drive data) -> 200 {'ok': True, 'data': {'removed': 'docmost', 'volumes_removed': ['docmost_docmost_postgres_data', 'docmost_docmost_redis_data', 'docmost_docmost_storage'], 'hdd_
15:14:16 [X] after remove: deployed=False leftovers=''
@@ -0,0 +1,3 @@
STEP docmost: the superseded step {'docmost': 'docmost/docmost:0.96.0', 'docmost-postgres': 'postgres:18-alpine', 'docmost-redis': 'redis:7-alpine'} keeps its definition at steps/01ae17194c827ab5.yml
STEP docmost: … and its .felhom.yml at steps/01ae17194c827ab5.felhom.yml
WROTE docmost: {'docmost': 'docmost/docmost:0.96.0', 'docmost-postgres': 'postgres:18-alpine', 'docmost-redis': 'redis:7-alpine'} -> {'docmost': 'docmost/docmost:0.97.0', 'docmost-postgres': 'postgres:18-alpine', 'docmost-redis': 'redis:7-alpine'} peak 54.1% marks {'files_may_change': False, 'needs_person': None, 'memory_tight': False}
@@ -0,0 +1,237 @@
{
"app": "grafana",
"walk": "security",
"box_walk_version": 1,
"verdict": "proven",
"venue": "box 9202 (drill catalog), the guarded Update",
"from": {
"grafana": "grafana/grafana:13.2.3"
},
"to": {
"grafana": "grafana/grafana:13.2.4"
},
"observables_before": {
"pinned_images": {
"grafana": "grafana/grafana:13.2.3"
},
"installed_images": {
"grafana": "grafana/grafana:13.2.3"
},
"catalog_images": null,
"live_compose_image_lines": [
"image: grafana/grafana:13.2.3@sha256:b28bae15e219c998fb0e0424ed724930cc61b1f61fb404d47c862f9a23f9e572"
],
"docker_inspect": [
"grafana grafana/grafana:13.2.3@sha256:b28bae15e219c998fb0e0424ed724930cc61b1f61fb404d47c862f9a23f9e572 running=true restarts=0"
]
},
"setup_gate_before": {
"browser": {
"status": "302",
"redirect": "/login?…"
},
"script": {
"status": "302",
"redirect": "/login?…"
}
},
"seed": "read_back",
"drill_commit": "b8137ea1370d",
"sync_waited_s": 4.5,
"badge_before": {
"hu": [
{
"title": "Újabb változat érhető el ehhez az alkalmazáshoz. A frissítés indításához nyomd meg a Frissítés gombot.",
"text": "Frissítés elérhető — ma"
}
],
"en": [
{
"title": "A newer version of this app is available. Select the Update button to start it.",
"text": "Update available — today"
}
]
},
"measured_at": "2026-10-27T14:01:18Z",
"update": {
"accepted": true,
"http": "202",
"phases": [
{
"t": 0.0,
"phase": "checking",
"label": "Ellenőrzés…",
"updating": true,
"error": null,
"hold": null
},
{
"t": 2.1,
"phase": "backing-up",
"label": "Biztonsági mentés készül a frissítés előtt…",
"updating": true,
"error": null,
"hold": null
},
{
"t": 26.7,
"phase": "safety-dump",
"label": "Adatbázis pillanatkép…",
"updating": true,
"error": null,
"hold": null
},
{
"t": 30.8,
"phase": "pulling",
"label": "Új verzió letöltése…",
"updating": true,
"error": null,
"hold": null
},
{
"t": 55.3,
"phase": "copying",
"label": "Az adatok másolása a frissítés előtt…",
"updating": true,
"error": null,
"hold": null
},
{
"t": 71.7,
"phase": "starting",
"label": "Indítás az új verzióval…",
"updating": true,
"error": null,
"hold": null
},
{
"t": 72.8,
"phase": "verifying",
"label": "Működés ellenőrzése…",
"updating": true,
"error": null,
"hold": null
},
{
"t": 77.9,
"phase": "done",
"label": "Frissítve",
"updating": false,
"error": null,
"hold": null
}
],
"duration_s": 77.9,
"final_phase": "done",
"update_error": null,
"hold_reason": null,
"state": "running"
},
"observables_after": {
"pinned_images": {
"grafana": "grafana/grafana:13.2.4"
},
"installed_images": {
"grafana": "grafana/grafana:13.2.4"
},
"catalog_images": {
"grafana": "grafana/grafana:13.2.4"
},
"live_compose_image_lines": [
"image: grafana/grafana:13.2.4"
],
"docker_inspect": [
"grafana grafana/grafana:13.2.4 running=true restarts=0"
]
},
"badge_after": {
"hu": [
{
"title": "Ez az alkalmazás a legfrissebb elérhető változatot futtatja.",
"text": "Naprakész"
}
],
"en": [
{
"title": "This app is running the newest version available.",
"text": "Up to date"
}
]
},
"state_after": "running",
"hold_after": null,
"to_digests": {
"grafana": "sha256:dbbc38ea21103cefb50396340cd88afec779c7e070b0a7bf5a75b4ce46651d3f"
},
"four_observables": {
"pinned": {
"grafana": "grafana/grafana:13.2.4"
},
"installed": {
"grafana": "grafana/grafana:13.2.4"
},
"catalog": {
"grafana": "grafana/grafana:13.2.4"
},
"live_compose": [
"grafana/grafana:13.2.4"
]
},
"seed_read_after": true,
"setup_gate_after": {
"browser": {
"status": "302",
"redirect": "/login?…"
},
"script": {
"status": "302",
"redirect": "/login?…"
}
},
"memory": {
"soak_s": 600,
"interval_s": 10,
"samples": 60,
"containers": {
"grafana": {
"samples": 60,
"anon_peak_bytes": 243650560,
"limit_bytes": 805306368,
"anon_peak_pct": 30.3,
"cgroup_peak_pct": 97.5,
"oom_kill_delta": 0,
"oom_killed_flag": false,
"restarts_delta": 0,
"running_all_samples": true,
"cgroup": "/sys/fs/cgroup/system.slice/docker-743819121be0a9189ca1c75cdc1c7ebb5d01df10cf1713ae19cab11edc7cfc4b.scope"
}
},
"oom_kills": 0,
"restarts": 0,
"peak_pct": 30.3
},
"why": "the security-fix step ran on the box through the guarded Update; healthy, TO on all four observables, no undo, no hold, a clean soak, seed read back",
"log": [
"14:59:48 [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['GF_SECURITY_ADMIN_PASSWORD']",
"14:59:49 [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'}",
"15:00:59 [1] deployed, controller state=running, pinned={'grafana': 'grafana/grafana:13.2.3'}",
"15:01:03 [2] setup gate as installed: {'browser': {'status': '302', 'redirect': '/login?…'}, 'script': {'status': '302', 'redirect': '/login?…'}}",
"15:01:03 grafana: create folder http=200",
"15:01:03 grafana: readback of the seeded folder http=200 ok=True",
"15:01:04 [5] drill commit b8137ea1370d: grafana grafana/grafana:13.2.3 -> grafana/grafana:13.2.4 (push rc=0)",
"15:01:14 [5] the box's drill mirror now at b8137ea13",
"15:01:19 [6] Update -> 202 {'ok': True, 'data': {'accepted': True, 'completed': False}, 'message': 'Frissítés elindult – az állapot a kártyán követhető'}",
"15:01:19 + 0.0s phase=checking label=Ellenőrzés… err=None hold=None",
"15:01:21 + 2.1s phase=backing-up label=Biztonsági mentés készül a frissítés előtt… err=None hold=None",
"15:01:45 + 26.7s phase=safety-dump label=Adatbázis pillanatkép… err=None hold=None",
"15:01:49 + 30.8s phase=pulling label=Új verzió letöltése… err=None hold=None",
"15:02:14 + 55.3s phase=copying label=Az adatok másolása a frissítés előtt… err=None hold=None",
"15:02:30 + 71.7s phase=starting label=Indítás az új verzióval… err=None hold=None",
"15:02:31 + 72.8s phase=verifying label=Működés ellenőrzése… err=None hold=None",
"15:02:36 + 77.9s phase=done label=Frissítve err=None hold=None",
"15:02:55 grafana: readback of the seeded folder http=200 ok=True",
"15:02:55 [7] memory soak 600 s …",
"15:13:01 [7] soak: peak 30.3% of the limit (anon), kills 0, restarts 0"
]
}
@@ -0,0 +1,3 @@
15:13:45 [5] drill commit fd2dff6dc40e: grafana grafana/grafana:13.2.4 -> grafana/grafana:13.2.3 (push rc=0)
15:13:54 [5] the box's drill mirror now at fd2dff6dc
fd2dff6dc40e
@@ -0,0 +1,25 @@
14:59:48 [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['GF_SECURITY_ADMIN_PASSWORD']
14:59:49 [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'}
15:00:59 [1] deployed, controller state=running, pinned={'grafana': 'grafana/grafana:13.2.3'}
15:01:03 [2] setup gate as installed: {'browser': {'status': '302', 'redirect': '/login?…'}, 'script': {'status': '302', 'redirect': '/login?…'}}
15:01:03 grafana: create folder http=200
15:01:03 grafana: readback of the seeded folder http=200 ok=True
15:01:04 [5] drill commit b8137ea1370d: grafana grafana/grafana:13.2.3 -> grafana/grafana:13.2.4 (push rc=0)
15:01:14 [5] the box's drill mirror now at b8137ea13
15:01:19 [6] Update -> 202 {'ok': True, 'data': {'accepted': True, 'completed': False}, 'message': 'Frissítés elindult – az állapot a kártyán követhető'}
15:01:19 + 0.0s phase=checking label=Ellenőrzés… err=None hold=None
15:01:21 + 2.1s phase=backing-up label=Biztonsági mentés készül a frissítés előtt… err=None hold=None
15:01:45 + 26.7s phase=safety-dump label=Adatbázis pillanatkép… err=None hold=None
15:01:49 + 30.8s phase=pulling label=Új verzió letöltése… err=None hold=None
15:02:14 + 55.3s phase=copying label=Az adatok másolása a frissítés előtt… err=None hold=None
15:02:30 + 71.7s phase=starting label=Indítás az új verzióval… err=None hold=None
15:02:31 + 72.8s phase=verifying label=Működés ellenőrzése… err=None hold=None
15:02:36 + 77.9s phase=done label=Frissítve err=None hold=None
15:02:55 grafana: readback of the seeded folder http=200 ok=True
15:02:55 [7] memory soak 600 s …
15:13:01 [7] soak: peak 30.3% of the limit (anon), kills 0, restarts 0
15:13:01 [9] verdict proven -> /mnt/5_hdd/felhom.eu/git/felhom.eu/documentation/audits/security-app-updates-2026-10-27/walks/grafana/verdict.json
15:13:01 RESULT proven — the security-fix step ran on the box through the guarded Update; healthy, TO on all four observables, no undo, no hold, a clean soak, seed read back
15:13:02 [X] stop -> 200 {'ok': True, 'message': 'Stack grafana stop completed'}
15:13:34 [X] remove (with drive data) -> 200 {'ok': True, 'data': {'removed': 'grafana', 'volumes_removed': ['grafana_grafana_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'hdd_note': 'Az alk
15:13:42 [X] after remove: deployed=False leftovers=''
@@ -0,0 +1,3 @@
STEP grafana: the superseded step {'grafana': 'grafana/grafana:13.2.3'} keeps its definition at steps/63fab8627e9b70ed.yml
STEP grafana: … and its .felhom.yml at steps/63fab8627e9b70ed.felhom.yml
WROTE grafana: {'grafana': 'grafana/grafana:13.2.3'} -> {'grafana': 'grafana/grafana:13.2.4'} peak 30.3% marks {'files_may_change': False, 'needs_person': None, 'memory_tight': False}
@@ -0,0 +1,221 @@
{
"app": "homebox",
"walk": "security",
"box_walk_version": 1,
"verdict": "proven",
"venue": "box 9202 (drill catalog), the guarded Update",
"from": {
"homebox": "ghcr.io/sysadminsmedia/homebox:0.26.2"
},
"to": {
"homebox": "ghcr.io/sysadminsmedia/homebox:0.27.1"
},
"observables_before": {
"pinned_images": {
"homebox": "ghcr.io/sysadminsmedia/homebox:0.26.2"
},
"installed_images": {
"homebox": "ghcr.io/sysadminsmedia/homebox:0.26.2"
},
"catalog_images": {
"homebox": "ghcr.io/sysadminsmedia/homebox:0.26.2"
},
"live_compose_image_lines": [
"image: ghcr.io/sysadminsmedia/homebox:0.26.2"
],
"docker_inspect": [
"homebox ghcr.io/sysadminsmedia/homebox:0.26.2 running=true restarts=0"
]
},
"setup_gate_before": {
"browser": {
"status": "302",
"redirect": "https://felhom.enkisfelhom.hu/__gate/start?…"
},
"script": {
"status": "401",
"redirect": null
}
},
"seed": "read_back",
"drill_commit": "47435b2461e9",
"sync_waited_s": 4.5,
"badge_before": {
"hu": [
{
"title": "Újabb változat érhető el ehhez az alkalmazáshoz. A frissítés indításához nyomd meg a Frissítés gombot.",
"text": "Frissítés elérhető — ma"
}
],
"en": [
{
"title": "A newer version of this app is available. Select the Update button to start it.",
"text": "Update available — today"
}
]
},
"measured_at": "2026-10-27T14:45:55Z",
"update": {
"accepted": true,
"http": "202",
"phases": [
{
"t": 0.0,
"phase": "backing-up",
"label": "Biztonsági mentés készül a frissítés előtt…",
"updating": true,
"error": null,
"hold": null
},
{
"t": 2.1,
"phase": "safety-dump",
"label": "Adatbázis pillanatkép…",
"updating": true,
"error": null,
"hold": null
},
{
"t": 3.1,
"phase": "pulling",
"label": "Új verzió letöltése…",
"updating": true,
"error": null,
"hold": null
},
{
"t": 12.3,
"phase": "copying",
"label": "Az adatok másolása a frissítés előtt…",
"updating": true,
"error": null,
"hold": null
},
{
"t": 13.3,
"phase": "verifying",
"label": "Működés ellenőrzése…",
"updating": true,
"error": null,
"hold": null
},
{
"t": 18.4,
"phase": "done",
"label": "Frissítve",
"updating": false,
"error": null,
"hold": null
}
],
"duration_s": 18.5,
"final_phase": "done",
"update_error": null,
"hold_reason": null,
"state": "running"
},
"observables_after": {
"pinned_images": {
"homebox": "ghcr.io/sysadminsmedia/homebox:0.27.1"
},
"installed_images": {
"homebox": "ghcr.io/sysadminsmedia/homebox:0.27.1"
},
"catalog_images": {
"homebox": "ghcr.io/sysadminsmedia/homebox:0.27.1"
},
"live_compose_image_lines": [
"image: ghcr.io/sysadminsmedia/homebox:0.27.1"
],
"docker_inspect": [
"homebox ghcr.io/sysadminsmedia/homebox:0.27.1 running=true restarts=0"
]
},
"badge_after": {
"hu": [
{
"title": "Ez az alkalmazás a legfrissebb elérhető változatot futtatja.",
"text": "Naprakész"
}
],
"en": [
{
"title": "This app is running the newest version available.",
"text": "Up to date"
}
]
},
"state_after": "running",
"hold_after": null,
"to_digests": {
"homebox": "sha256:9d0b64776c694f018c0ca06faf52105a33ca376024f46bb58e6ab0e2b728bb61"
},
"four_observables": {
"pinned": {
"homebox": "ghcr.io/sysadminsmedia/homebox:0.27.1"
},
"installed": {
"homebox": "ghcr.io/sysadminsmedia/homebox:0.27.1"
},
"catalog": {
"homebox": "ghcr.io/sysadminsmedia/homebox:0.27.1"
},
"live_compose": [
"ghcr.io/sysadminsmedia/homebox:0.27.1"
]
},
"seed_read_after": true,
"setup_gate_after": {
"browser": {
"status": "302",
"redirect": "https://felhom.enkisfelhom.hu/__gate/start?…"
},
"script": {
"status": "401",
"redirect": null
}
},
"memory": {
"soak_s": 600,
"interval_s": 10,
"samples": 60,
"containers": {
"homebox": {
"samples": 60,
"anon_peak_bytes": 85250048,
"limit_bytes": 268435456,
"anon_peak_pct": 31.8,
"cgroup_peak_pct": 34.8,
"oom_kill_delta": 0,
"oom_killed_flag": false,
"restarts_delta": 0,
"running_all_samples": true,
"cgroup": "/sys/fs/cgroup/system.slice/docker-fd6a3af6858e947718d8cee156dd49a48db3dcafa3b57130b6daa8e969edd96f.scope"
}
},
"oom_kills": 0,
"restarts": 0,
"peak_pct": 31.8
},
"why": "the security-fix step ran on the box through the guarded Update; healthy, TO on all four observables, no undo, no hold, a clean soak, seed read back",
"log": [
"15:45:21 [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'}",
"15:45:36 [1] deployed, controller state=running, pinned={'homebox': 'ghcr.io/sysadminsmedia/homebox:0.26.2'}",
"15:45:36 gate: homebox is gated — passed as the household (cookie set)",
"15:45:40 [2] setup gate as installed: {'browser': {'status': '302', 'redirect': 'https://felhom.enkisfelhom.hu/__gate/start?…'}, 'script': {'status': '401', 'redirect': None}}",
"15:45:40 homebox: seeded location drillloc79c848d6 through /api/v1/entities",
"15:45:41 homebox: readback found=True (http 200, control passed)",
"15:45:42 [5] drill commit 47435b2461e9: homebox ghcr.io/sysadminsmedia/homebox:0.26.2 -> ghcr.io/sysadminsmedia/homebox:0.27.1 (push rc=0)",
"15:45:50 [5] the box's drill mirror now at 47435b246",
"15:45:55 [6] Update -> 202 {'ok': True, 'data': {'accepted': True, 'completed': False}, 'message': 'Frissítés elindult – az állapot a kártyán követhető'}",
"15:45:55 + 0.0s phase=backing-up label=Biztonsági mentés készül a frissítés előtt… err=None hold=None",
"15:45:57 + 2.1s phase=safety-dump label=Adatbázis pillanatkép… err=None hold=None",
"15:45:58 + 3.1s phase=pulling label=Új verzió letöltése… err=None hold=None",
"15:46:07 + 12.3s phase=copying label=Az adatok másolása a frissítés előtt… err=None hold=None",
"15:46:08 + 13.3s phase=verifying label=Működés ellenőrzése… err=None hold=None",
"15:46:13 + 18.4s phase=done label=Frissítve err=None hold=None",
"15:46:32 homebox: readback found=True (http 200, control passed)",
"15:46:32 [7] memory soak 600 s …",
"15:56:38 [7] soak: peak 31.8% of the limit (anon), kills 0, restarts 0"
]
}
@@ -0,0 +1,3 @@
15:57:21 [5] drill commit 9837e99b3b3f: homebox ghcr.io/sysadminsmedia/homebox:0.27.1 -> ghcr.io/sysadminsmedia/homebox:0.26.2 (push rc=0)
15:57:29 [5] the box's drill mirror now at 9837e99b3b
9837e99b3b3f
@@ -0,0 +1,23 @@
15:45:21 [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'}
15:45:36 [1] deployed, controller state=running, pinned={'homebox': 'ghcr.io/sysadminsmedia/homebox:0.26.2'}
15:45:36 gate: homebox is gated — passed as the household (cookie set)
15:45:40 [2] setup gate as installed: {'browser': {'status': '302', 'redirect': 'https://felhom.enkisfelhom.hu/__gate/start?…'}, 'script': {'status': '401', 'redirect': None}}
15:45:40 homebox: seeded location drillloc79c848d6 through /api/v1/entities
15:45:41 homebox: readback found=True (http 200, control passed)
15:45:42 [5] drill commit 47435b2461e9: homebox ghcr.io/sysadminsmedia/homebox:0.26.2 -> ghcr.io/sysadminsmedia/homebox:0.27.1 (push rc=0)
15:45:50 [5] the box's drill mirror now at 47435b246
15:45:55 [6] Update -> 202 {'ok': True, 'data': {'accepted': True, 'completed': False}, 'message': 'Frissítés elindult – az állapot a kártyán követhető'}
15:45:55 + 0.0s phase=backing-up label=Biztonsági mentés készül a frissítés előtt… err=None hold=None
15:45:57 + 2.1s phase=safety-dump label=Adatbázis pillanatkép… err=None hold=None
15:45:58 + 3.1s phase=pulling label=Új verzió letöltése… err=None hold=None
15:46:07 + 12.3s phase=copying label=Az adatok másolása a frissítés előtt… err=None hold=None
15:46:08 + 13.3s phase=verifying label=Működés ellenőrzése… err=None hold=None
15:46:13 + 18.4s phase=done label=Frissítve err=None hold=None
15:46:32 homebox: readback found=True (http 200, control passed)
15:46:32 [7] memory soak 600 s …
15:56:38 [7] soak: peak 31.8% of the limit (anon), kills 0, restarts 0
15:56:38 [9] verdict proven -> /mnt/5_hdd/felhom.eu/git/felhom.eu/documentation/audits/security-app-updates-2026-10-27/walks/homebox/verdict.json
15:56:38 RESULT proven — the security-fix step ran on the box through the guarded Update; healthy, TO on all four observables, no undo, no hold, a clean soak, seed read back
15:56:38 [X] stop -> 200 {'ok': True, 'message': 'Stack homebox stop completed'}
15:57:11 [X] remove (with drive data) -> 200 {'ok': True, 'data': {'removed': 'homebox', 'volumes_removed': ['homebox_homebox_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'hdd_note': 'Az alk
15:57:19 [X] after remove: deployed=False leftovers=''
@@ -0,0 +1 @@
WROTE homebox: {'homebox': 'ghcr.io/sysadminsmedia/homebox:0.26.2'} -> {'homebox': 'ghcr.io/sysadminsmedia/homebox:0.27.1'} peak 31.8% marks {'files_may_change': False, 'needs_person': None, 'memory_tight': False}
@@ -0,0 +1,229 @@
{
"app": "jellyfin",
"walk": "security",
"box_walk_version": 1,
"verdict": "proven",
"venue": "box 9202 (drill catalog), the guarded Update",
"from": {
"jellyfin": "jellyfin/jellyfin:10.11.11"
},
"to": {
"jellyfin": "jellyfin/jellyfin:12.4"
},
"observables_before": {
"pinned_images": {
"jellyfin": "jellyfin/jellyfin:10.11.11"
},
"installed_images": {
"jellyfin": "jellyfin/jellyfin:10.11.11"
},
"catalog_images": null,
"live_compose_image_lines": [
"image: jellyfin/jellyfin:10.11.11"
],
"docker_inspect": [
"jellyfin jellyfin/jellyfin:10.11.11 running=true restarts=0"
]
},
"setup_gate_before": {
"browser": {
"status": "302",
"redirect": "https://felhom.enkisfelhom.hu/__gate/start?…"
},
"script": {
"status": "401",
"redirect": null
}
},
"seed": "read_back",
"drill_commit": "a6f8052b643e",
"sync_waited_s": 4.5,
"badge_before": {
"hu": [
{
"title": "Újabb változat érhető el ehhez az alkalmazáshoz. A frissítés indításához nyomd meg a Frissítés gombot.",
"text": "Frissítés elérhető — ma"
}
],
"en": [
{
"title": "A newer version of this app is available. Select the Update button to start it.",
"text": "Update available — today"
}
]
},
"measured_at": "2026-10-27T15:53:07Z",
"update": {
"accepted": true,
"http": "202",
"phases": [
{
"t": 0.0,
"phase": "backing-up",
"label": "Biztonsági mentés készül a frissítés előtt…",
"updating": true,
"error": null,
"hold": null
},
{
"t": 3.1,
"phase": "safety-dump",
"label": "Adatbázis pillanatkép…",
"updating": true,
"error": null,
"hold": null
},
{
"t": 4.1,
"phase": "pulling",
"label": "Új verzió letöltése…",
"updating": true,
"error": null,
"hold": null
},
{
"t": 31.8,
"phase": "copying",
"label": "Az adatok másolása a frissítés előtt…",
"updating": true,
"error": null,
"hold": null
},
{
"t": 42.0,
"phase": "starting",
"label": "Indítás az új verzióval…",
"updating": true,
"error": null,
"hold": null
},
{
"t": 43.0,
"phase": "verifying",
"label": "Működés ellenőrzése…",
"updating": true,
"error": null,
"hold": null
},
{
"t": 53.3,
"phase": "done",
"label": "Frissítve",
"updating": false,
"error": null,
"hold": null
}
],
"duration_s": 53.3,
"final_phase": "done",
"update_error": null,
"hold_reason": null,
"state": "running"
},
"observables_after": {
"pinned_images": {
"jellyfin": "jellyfin/jellyfin:12.4"
},
"installed_images": {
"jellyfin": "jellyfin/jellyfin:12.4"
},
"catalog_images": {
"jellyfin": "jellyfin/jellyfin:12.4"
},
"live_compose_image_lines": [
"image: jellyfin/jellyfin:12.4"
],
"docker_inspect": [
"jellyfin jellyfin/jellyfin:12.4 running=true restarts=0"
]
},
"badge_after": {
"hu": [
{
"title": "Ez az alkalmazás a legfrissebb elérhető változatot futtatja.",
"text": "Naprakész"
}
],
"en": [
{
"title": "This app is running the newest version available.",
"text": "Up to date"
}
]
},
"state_after": "running",
"hold_after": null,
"to_digests": {
"jellyfin": "sha256:fea863d0cd9ec445985d9c75fc6ed64e38a1d2766cf0c250a33d553f4fc1b771"
},
"four_observables": {
"pinned": {
"jellyfin": "jellyfin/jellyfin:12.4"
},
"installed": {
"jellyfin": "jellyfin/jellyfin:12.4"
},
"catalog": {
"jellyfin": "jellyfin/jellyfin:12.4"
},
"live_compose": [
"jellyfin/jellyfin:12.4"
]
},
"seed_read_after": true,
"setup_gate_after": {
"browser": {
"status": "404",
"redirect": null
},
"script": {
"status": "404",
"redirect": null
}
},
"memory": {
"soak_s": 600,
"interval_s": 10,
"samples": 60,
"containers": {
"jellyfin": {
"samples": 60,
"anon_peak_bytes": 105771008,
"limit_bytes": 2147483648,
"anon_peak_pct": 4.9,
"cgroup_peak_pct": 9.2,
"oom_kill_delta": 0,
"oom_killed_flag": false,
"restarts_delta": 0,
"running_all_samples": true,
"cgroup": "/sys/fs/cgroup/system.slice/docker-09b28f937d293c056afe38225eb9e0ee044f727e37f1da145ee588a471c4ec61.scope"
}
},
"oom_kills": 0,
"restarts": 0,
"peak_pct": 4.9
},
"why": "the security-fix step ran on the box through the guarded Update; healthy, TO on all four observables, no undo, no hold, a clean soak, seed read back",
"log": [
"16:51:46 [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['HDD_PATH']",
"16:51:46 [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'}",
"16:52:47 [1] deployed, controller state=running, pinned={'jellyfin': 'jellyfin/jellyfin:10.11.11'}",
"16:52:47 gate: jellyfin is gated — passed as the household (cookie set)",
"16:52:50 [2] setup gate as installed: {'browser': {'status': '302', 'redirect': 'https://felhom.enkisfelhom.hu/__gate/start?…'}, 'script': {'status': '401', 'redirect': None}}",
"16:52:51 jellyfin: seeded first user drill32e938f7",
"16:52:53 jellyfin: sign-in as the seeded user http=200 token=True (wrong password refused: http 401)",
"16:52:54 [5] drill commit a6f8052b643e: jellyfin jellyfin/jellyfin:10.11.11 -> jellyfin/jellyfin:12.4 (push rc=0)",
"16:53:02 [5] the box's drill mirror now at a6f8052",
"16:53:07 [6] Update -> 202 {'ok': True, 'data': {'accepted': True, 'completed': False}, 'message': 'Frissítés elindult – az állapot a kártyán követhető'}",
"16:53:07 + 0.0s phase=backing-up label=Biztonsági mentés készül a frissítés előtt… err=None hold=None",
"16:53:10 + 3.1s phase=safety-dump label=Adatbázis pillanatkép… err=None hold=None",
"16:53:11 + 4.1s phase=pulling label=Új verzió letöltése… err=None hold=None",
"16:53:39 + 31.8s phase=copying label=Az adatok másolása a frissítés előtt… err=None hold=None",
"16:53:49 + 42.0s phase=starting label=Indítás az új verzióval… err=None hold=None",
"16:53:50 + 43.0s phase=verifying label=Működés ellenőrzése… err=None hold=None",
"16:54:00 + 53.3s phase=done label=Frissítve err=None hold=None",
"16:54:20 jellyfin: sign-in as the seeded user http=200 token=True (wrong password refused: http 401)",
"16:54:20 [7] memory soak 600 s …",
"17:04:26 [7] soak: peak 4.9% of the limit (anon), kills 0, restarts 0"
]
}
@@ -0,0 +1,3 @@
17:05:09 [5] drill commit ea22847fcb97: jellyfin jellyfin/jellyfin:12.4 -> jellyfin/jellyfin:10.11.11 (push rc=0)
17:05:17 [5] the box's drill mirror now at ea22847
ea22847fcb97
@@ -0,0 +1,25 @@
16:51:46 [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['HDD_PATH']
16:51:46 [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'}
16:52:47 [1] deployed, controller state=running, pinned={'jellyfin': 'jellyfin/jellyfin:10.11.11'}
16:52:47 gate: jellyfin is gated — passed as the household (cookie set)
16:52:50 [2] setup gate as installed: {'browser': {'status': '302', 'redirect': 'https://felhom.enkisfelhom.hu/__gate/start?…'}, 'script': {'status': '401', 'redirect': None}}
16:52:51 jellyfin: seeded first user drill32e938f7
16:52:53 jellyfin: sign-in as the seeded user http=200 token=True (wrong password refused: http 401)
16:52:54 [5] drill commit a6f8052b643e: jellyfin jellyfin/jellyfin:10.11.11 -> jellyfin/jellyfin:12.4 (push rc=0)
16:53:02 [5] the box's drill mirror now at a6f8052
16:53:07 [6] Update -> 202 {'ok': True, 'data': {'accepted': True, 'completed': False}, 'message': 'Frissítés elindult – az állapot a kártyán követhető'}
16:53:07 + 0.0s phase=backing-up label=Biztonsági mentés készül a frissítés előtt… err=None hold=None
16:53:10 + 3.1s phase=safety-dump label=Adatbázis pillanatkép… err=None hold=None
16:53:11 + 4.1s phase=pulling label=Új verzió letöltése… err=None hold=None
16:53:39 + 31.8s phase=copying label=Az adatok másolása a frissítés előtt… err=None hold=None
16:53:49 + 42.0s phase=starting label=Indítás az új verzióval… err=None hold=None
16:53:50 + 43.0s phase=verifying label=Működés ellenőrzése… err=None hold=None
16:54:00 + 53.3s phase=done label=Frissítve err=None hold=None
16:54:20 jellyfin: sign-in as the seeded user http=200 token=True (wrong password refused: http 401)
16:54:20 [7] memory soak 600 s …
17:04:26 [7] soak: peak 4.9% of the limit (anon), kills 0, restarts 0
17:04:26 [9] verdict proven -> /mnt/5_hdd/felhom.eu/git/felhom.eu/documentation/audits/security-app-updates-2026-10-27/walks/jellyfin/verdict.json
17:04:26 RESULT proven — the security-fix step ran on the box through the guarded Update; healthy, TO on all four observables, no undo, no hold, a clean soak, seed read back
17:04:26 [X] stop -> 200 {'ok': True, 'message': 'Stack jellyfin stop completed'}
17:04:58 [X] remove (with drive data) -> 200 {'ok': True, 'data': {'removed': 'jellyfin', 'volumes_removed': ['jellyfin_jellyfin_cache', 'jellyfin_jellyfin_config'], 'hdd_paths_removed': [], 'hdd_paths_pre
17:05:07 [X] after remove: deployed=False leftovers=''
@@ -0,0 +1 @@
WROTE jellyfin: {'jellyfin': 'jellyfin/jellyfin:10.11.11'} -> {'jellyfin': 'jellyfin/jellyfin:12.4'} peak 5.0% marks {'files_may_change': False, 'needs_person': None, 'memory_tight': False}
@@ -0,0 +1,229 @@
{
"app": "mealie",
"walk": "security",
"box_walk_version": 1,
"verdict": "proven",
"venue": "box 9202 (drill catalog), the guarded Update",
"from": {
"mealie": "ghcr.io/mealie-recipes/mealie:v3.28.0"
},
"to": {
"mealie": "ghcr.io/mealie-recipes/mealie:v3.29.0"
},
"observables_before": {
"pinned_images": {
"mealie": "ghcr.io/mealie-recipes/mealie:v3.28.0"
},
"installed_images": {
"mealie": "ghcr.io/mealie-recipes/mealie:v3.28.0"
},
"catalog_images": null,
"live_compose_image_lines": [
"image: ghcr.io/mealie-recipes/mealie:v3.28.0@sha256:8b02290f4d1806f02acac6f25f6d48a3c965612fda1f8e914d5af533276f8688"
],
"docker_inspect": [
"mealie ghcr.io/mealie-recipes/mealie:v3.28.0@sha256:8b02290f4d1806f02acac6f25f6d48a3c965612fda1f8e914d5af533276f8688 running=true restarts=0"
]
},
"setup_gate_before": {
"browser": {
"status": "302",
"redirect": "https://felhom.enkisfelhom.hu/__gate/start?…"
},
"script": {
"status": "401",
"redirect": null
}
},
"seed": "read_back",
"drill_commit": "33ac1b301150",
"sync_waited_s": 4.5,
"badge_before": {
"hu": [
{
"title": "Újabb változat érhető el ehhez az alkalmazáshoz. A frissítés indításához nyomd meg a Frissítés gombot.",
"text": "Frissítés elérhető — ma"
}
],
"en": [
{
"title": "A newer version of this app is available. Select the Update button to start it.",
"text": "Update available — today"
}
]
},
"measured_at": "2026-10-27T14:44:30Z",
"update": {
"accepted": true,
"http": "202",
"phases": [
{
"t": 0.0,
"phase": "backing-up",
"label": "Biztonsági mentés készül a frissítés előtt…",
"updating": true,
"error": null,
"hold": null
},
{
"t": 4.1,
"phase": "safety-dump",
"label": "Adatbázis pillanatkép…",
"updating": true,
"error": null,
"hold": null
},
{
"t": 5.1,
"phase": "pulling",
"label": "Új verzió letöltése…",
"updating": true,
"error": null,
"hold": null
},
{
"t": 43.5,
"phase": "copying",
"label": "Az adatok másolása a frissítés előtt…",
"updating": true,
"error": null,
"hold": null
},
{
"t": 49.6,
"phase": "starting",
"label": "Indítás az új verzióval…",
"updating": true,
"error": null,
"hold": null
},
{
"t": 50.7,
"phase": "verifying",
"label": "Működés ellenőrzése…",
"updating": true,
"error": null,
"hold": null
},
{
"t": 66.0,
"phase": "done",
"label": "Frissítve",
"updating": false,
"error": null,
"hold": null
}
],
"duration_s": 66.0,
"final_phase": "done",
"update_error": null,
"hold_reason": null,
"state": "running"
},
"observables_after": {
"pinned_images": {
"mealie": "ghcr.io/mealie-recipes/mealie:v3.29.0"
},
"installed_images": {
"mealie": "ghcr.io/mealie-recipes/mealie:v3.29.0"
},
"catalog_images": {
"mealie": "ghcr.io/mealie-recipes/mealie:v3.29.0"
},
"live_compose_image_lines": [
"image: ghcr.io/mealie-recipes/mealie:v3.29.0"
],
"docker_inspect": [
"mealie ghcr.io/mealie-recipes/mealie:v3.29.0 running=true restarts=0"
]
},
"badge_after": {
"hu": [
{
"title": "Ez az alkalmazás a legfrissebb elérhető változatot futtatja.",
"text": "Naprakész"
}
],
"en": [
{
"title": "This app is running the newest version available.",
"text": "Up to date"
}
]
},
"state_after": "running",
"hold_after": null,
"to_digests": {
"mealie": "sha256:78eb28b8776d0bad40c5e605c72b3f4f5976793e491558c7dcbdfc04c835d4bc"
},
"four_observables": {
"pinned": {
"mealie": "ghcr.io/mealie-recipes/mealie:v3.29.0"
},
"installed": {
"mealie": "ghcr.io/mealie-recipes/mealie:v3.29.0"
},
"catalog": {
"mealie": "ghcr.io/mealie-recipes/mealie:v3.29.0"
},
"live_compose": [
"ghcr.io/mealie-recipes/mealie:v3.29.0"
]
},
"seed_read_after": true,
"setup_gate_after": {
"browser": {
"status": "200",
"redirect": null
},
"script": {
"status": "200",
"redirect": null
}
},
"memory": {
"soak_s": 600,
"interval_s": 10,
"samples": 60,
"containers": {
"mealie": {
"samples": 60,
"anon_peak_bytes": 242831360,
"limit_bytes": 1048576000,
"anon_peak_pct": 23.2,
"cgroup_peak_pct": 26.4,
"oom_kill_delta": 0,
"oom_killed_flag": false,
"restarts_delta": 0,
"running_all_samples": true,
"cgroup": "/sys/fs/cgroup/system.slice/docker-c58a42735c9a9828f82f0ff5c66b35c509fd4db6b161f5f2f6fe70b38e56cfbf.scope"
}
},
"oom_kills": 0,
"restarts": 0,
"peak_pct": 23.2
},
"why": "the security-fix step ran on the box through the guarded Update; healthy, TO on all four observables, no undo, no hold, a clean soak, seed read back",
"log": [
"15:43:04 [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['ADMIN_PASSWORD']",
"15:43:05 [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'}",
"15:44:10 [1] deployed, controller state=running, pinned={'mealie': 'ghcr.io/mealie-recipes/mealie:v3.28.0'}",
"15:44:10 gate: recipes is gated — passed as the household (cookie set)",
"15:44:14 [2] setup gate as installed: {'browser': {'status': '302', 'redirect': 'https://felhom.enkisfelhom.hu/__gate/start?…'}, 'script': {'status': '401', 'redirect': None}}",
"15:44:15 mealie: create recipe http=201",
"15:44:16 mealie: readback of the seeded recipe http=200 ok=True",
"15:44:17 [5] drill commit 33ac1b301150: mealie ghcr.io/mealie-recipes/mealie:v3.28.0 -> ghcr.io/mealie-recipes/mealie:v3.29.0 (push rc=0)",
"15:44:25 [5] the box's drill mirror now at 33ac1b301",
"15:44:30 [6] Update -> 202 {'ok': True, 'data': {'accepted': True, 'completed': False}, 'message': 'Frissítés elindult – az állapot a kártyán követhető'}",
"15:44:30 + 0.0s phase=backing-up label=Biztonsági mentés készül a frissítés előtt… err=None hold=None",
"15:44:35 + 4.1s phase=safety-dump label=Adatbázis pillanatkép… err=None hold=None",
"15:44:36 + 5.1s phase=pulling label=Új verzió letöltése… err=None hold=None",
"15:45:14 + 43.5s phase=copying label=Az adatok másolása a frissítés előtt… err=None hold=None",
"15:45:20 + 49.6s phase=starting label=Indítás az új verzióval… err=None hold=None",
"15:45:21 + 50.7s phase=verifying label=Működés ellenőrzése… err=None hold=None",
"15:45:36 + 66.0s phase=done label=Frissítve err=None hold=None",
"15:45:56 mealie: readback of the seeded recipe http=200 ok=True",
"15:45:57 [7] memory soak 600 s …",
"15:56:02 [7] soak: peak 23.2% of the limit (anon), kills 0, restarts 0"
]
}
@@ -0,0 +1,3 @@
15:56:47 [5] drill commit e08f6fd1d448: mealie ghcr.io/mealie-recipes/mealie:v3.29.0 -> ghcr.io/mealie-recipes/mealie:v3.28.0 (push rc=0)
15:56:55 [5] the box's drill mirror now at e08f6fd1d
e08f6fd1d448
@@ -0,0 +1,25 @@
15:43:04 [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['ADMIN_PASSWORD']
15:43:05 [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'}
15:44:10 [1] deployed, controller state=running, pinned={'mealie': 'ghcr.io/mealie-recipes/mealie:v3.28.0'}
15:44:10 gate: recipes is gated — passed as the household (cookie set)
15:44:14 [2] setup gate as installed: {'browser': {'status': '302', 'redirect': 'https://felhom.enkisfelhom.hu/__gate/start?…'}, 'script': {'status': '401', 'redirect': None}}
15:44:15 mealie: create recipe http=201
15:44:16 mealie: readback of the seeded recipe http=200 ok=True
15:44:17 [5] drill commit 33ac1b301150: mealie ghcr.io/mealie-recipes/mealie:v3.28.0 -> ghcr.io/mealie-recipes/mealie:v3.29.0 (push rc=0)
15:44:25 [5] the box's drill mirror now at 33ac1b301
15:44:30 [6] Update -> 202 {'ok': True, 'data': {'accepted': True, 'completed': False}, 'message': 'Frissítés elindult – az állapot a kártyán követhető'}
15:44:30 + 0.0s phase=backing-up label=Biztonsági mentés készül a frissítés előtt… err=None hold=None
15:44:35 + 4.1s phase=safety-dump label=Adatbázis pillanatkép… err=None hold=None
15:44:36 + 5.1s phase=pulling label=Új verzió letöltése… err=None hold=None
15:45:14 + 43.5s phase=copying label=Az adatok másolása a frissítés előtt… err=None hold=None
15:45:20 + 49.6s phase=starting label=Indítás az új verzióval… err=None hold=None
15:45:21 + 50.7s phase=verifying label=Működés ellenőrzése… err=None hold=None
15:45:36 + 66.0s phase=done label=Frissítve err=None hold=None
15:45:56 mealie: readback of the seeded recipe http=200 ok=True
15:45:57 [7] memory soak 600 s …
15:56:02 [7] soak: peak 23.2% of the limit (anon), kills 0, restarts 0
15:56:02 [9] verdict proven -> /mnt/5_hdd/felhom.eu/git/felhom.eu/documentation/audits/security-app-updates-2026-10-27/walks/mealie/verdict.json
15:56:02 RESULT proven — the security-fix step ran on the box through the guarded Update; healthy, TO on all four observables, no undo, no hold, a clean soak, seed read back
15:56:04 [X] stop -> 200 {'ok': True, 'message': 'Stack mealie stop completed'}
15:56:36 [X] remove (with drive data) -> 200 {'ok': True, 'data': {'removed': 'mealie', 'volumes_removed': ['mealie_mealie_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'hdd_note': 'Az alkalm
15:56:44 [X] after remove: deployed=False leftovers=''
@@ -0,0 +1,3 @@
STEP mealie: the superseded step {'mealie': 'ghcr.io/mealie-recipes/mealie:v3.28.0'} keeps its definition at steps/a54b0fc61c1df5e3.yml
STEP mealie: … and its .felhom.yml at steps/a54b0fc61c1df5e3.felhom.yml
WROTE mealie: {'mealie': 'ghcr.io/mealie-recipes/mealie:v3.28.0'} -> {'mealie': 'ghcr.io/mealie-recipes/mealie:v3.29.0'} peak 23.2% marks {'files_may_change': False, 'needs_person': None, 'memory_tight': False}
@@ -0,0 +1,221 @@
{
"app": "n8n",
"walk": "security",
"box_walk_version": 1,
"verdict": "proven",
"venue": "box 9202 (drill catalog), the guarded Update",
"from": {
"n8n": "n8nio/n8n:2.42.1"
},
"to": {
"n8n": "n8nio/n8n:2.44.7"
},
"observables_before": {
"pinned_images": {
"n8n": "n8nio/n8n:2.42.1"
},
"installed_images": {
"n8n": "n8nio/n8n:2.42.1"
},
"catalog_images": {
"n8n": "n8nio/n8n:2.42.1"
},
"live_compose_image_lines": [
"image: n8nio/n8n:2.42.1@sha256:e7634e62f766044dc770460db8defdcd84034eb6d767dd6a1101d49fe98f814f"
],
"docker_inspect": [
"n8n n8nio/n8n:2.42.1@sha256:e7634e62f766044dc770460db8defdcd84034eb6d767dd6a1101d49fe98f814f running=true restarts=0"
]
},
"setup_gate_before": {
"browser": {
"status": "302",
"redirect": "https://felhom.enkisfelhom.hu/__gate/start?…"
},
"script": {
"status": "401",
"redirect": null
}
},
"seed": "read_back",
"drill_commit": "fabba433307c",
"sync_waited_s": 4.5,
"badge_before": {
"hu": [
{
"title": "Újabb változat érhető el ehhez az alkalmazáshoz. A frissítés indításához nyomd meg a Frissítés gombot.",
"text": "Frissítés elérhető — ma"
}
],
"en": [
{
"title": "A newer version of this app is available. Select the Update button to start it.",
"text": "Update available — today"
}
]
},
"measured_at": "2026-10-27T13:56:23Z",
"update": {
"accepted": true,
"http": "202",
"phases": [
{
"t": 0.0,
"phase": "backing-up",
"label": "Biztonsági mentés készül a frissítés előtt…",
"updating": true,
"error": null,
"hold": null
},
{
"t": 3.1,
"phase": "safety-dump",
"label": "Adatbázis pillanatkép…",
"updating": true,
"error": null,
"hold": null
},
{
"t": 4.1,
"phase": "pulling",
"label": "Új verzió letöltése…",
"updating": true,
"error": null,
"hold": null
},
{
"t": 140.0,
"phase": "copying",
"label": "Az adatok másolása a frissítés előtt…",
"updating": true,
"error": null,
"hold": null
},
{
"t": 147.2,
"phase": "verifying",
"label": "Működés ellenőrzése…",
"updating": true,
"error": null,
"hold": null
},
{
"t": 158.6,
"phase": "done",
"label": "Frissítve",
"updating": false,
"error": null,
"hold": null
}
],
"duration_s": 158.6,
"final_phase": "done",
"update_error": null,
"hold_reason": null,
"state": "running"
},
"observables_after": {
"pinned_images": {
"n8n": "n8nio/n8n:2.44.7"
},
"installed_images": {
"n8n": "n8nio/n8n:2.44.7"
},
"catalog_images": {
"n8n": "n8nio/n8n:2.44.7"
},
"live_compose_image_lines": [
"image: n8nio/n8n:2.44.7"
],
"docker_inspect": [
"n8n n8nio/n8n:2.44.7 running=true restarts=0"
]
},
"badge_after": {
"hu": [
{
"title": "Ez az alkalmazás a legfrissebb elérhető változatot futtatja.",
"text": "Naprakész"
}
],
"en": [
{
"title": "This app is running the newest version available.",
"text": "Up to date"
}
]
},
"state_after": "running",
"hold_after": null,
"to_digests": {
"n8n": "sha256:942bc274709f27f99f7c6024a785d8e8f75ac06838cabcba448abb8d9127ec7b"
},
"four_observables": {
"pinned": {
"n8n": "n8nio/n8n:2.44.7"
},
"installed": {
"n8n": "n8nio/n8n:2.44.7"
},
"catalog": {
"n8n": "n8nio/n8n:2.44.7"
},
"live_compose": [
"n8nio/n8n:2.44.7"
]
},
"seed_read_after": true,
"setup_gate_after": {
"browser": {
"status": "200",
"redirect": null
},
"script": {
"status": "200",
"redirect": null
}
},
"memory": {
"soak_s": 600,
"interval_s": 10,
"samples": 60,
"containers": {
"n8n": {
"samples": 60,
"anon_peak_bytes": 520908800,
"limit_bytes": 1610612736,
"anon_peak_pct": 32.3,
"cgroup_peak_pct": 62.1,
"oom_kill_delta": 0,
"oom_killed_flag": false,
"restarts_delta": 0,
"running_all_samples": true,
"cgroup": "/sys/fs/cgroup/system.slice/docker-9eb5c2a40aa12e1d720b9adf273fa557c16f82690382d018dbab6aae47553ef3.scope"
}
},
"oom_kills": 0,
"restarts": 0,
"peak_pct": 32.3
},
"why": "the security-fix step ran on the box through the guarded Update; healthy, TO on all four observables, no undo, no hold, a clean soak, seed read back",
"log": [
"14:53:49 [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'}",
"14:55:59 [1] deployed, controller state=running, pinned={'n8n': 'n8nio/n8n:2.42.1'}",
"14:55:59 gate: auto is gated — passed as the household (cookie set)",
"14:56:08 [2] setup gate as installed: {'browser': {'status': '302', 'redirect': 'https://felhom.enkisfelhom.hu/__gate/start?…'}, 'script': {'status': '401', 'redirect': None}}",
"14:56:09 n8n: /rest/owner/setup http=200",
"14:56:09 n8n: login as the seeded owner http=200 ok=True",
"14:56:10 [5] drill commit fabba433307c: n8n n8nio/n8n:2.42.1 -> n8nio/n8n:2.44.7 (push rc=0)",
"14:56:19 [5] the box's drill mirror now at fabba4333",
"14:56:23 [6] Update -> 202 {'ok': True, 'data': {'accepted': True, 'completed': False}, 'message': 'Frissítés elindult – az állapot a kártyán követhető'}",
"14:56:23 + 0.0s phase=backing-up label=Biztonsági mentés készül a frissítés előtt… err=None hold=None",
"14:56:27 + 3.1s phase=safety-dump label=Adatbázis pillanatkép… err=None hold=None",
"14:56:28 + 4.1s phase=pulling label=Új verzió letöltése… err=None hold=None",
"14:58:43 + 140.0s phase=copying label=Az adatok másolása a frissítés előtt… err=None hold=None",
"14:58:51 + 147.2s phase=verifying label=Működés ellenőrzése… err=None hold=None",
"14:59:02 + 158.6s phase=done label=Frissítve err=None hold=None",
"14:59:21 n8n: login as the seeded owner http=200 ok=True",
"14:59:21 [7] memory soak 600 s …",
"15:09:27 [7] soak: peak 32.3% of the limit (anon), kills 0, restarts 0"
]
}
@@ -0,0 +1,3 @@
15:10:11 [5] drill commit d175052a7428: n8n n8nio/n8n:2.44.7 -> n8nio/n8n:2.42.1 (push rc=0)
15:10:20 [5] the box's drill mirror now at d175052a7
d175052a7428
@@ -0,0 +1,23 @@
14:53:49 [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'}
14:55:59 [1] deployed, controller state=running, pinned={'n8n': 'n8nio/n8n:2.42.1'}
14:55:59 gate: auto is gated — passed as the household (cookie set)
14:56:08 [2] setup gate as installed: {'browser': {'status': '302', 'redirect': 'https://felhom.enkisfelhom.hu/__gate/start?…'}, 'script': {'status': '401', 'redirect': None}}
14:56:09 n8n: /rest/owner/setup http=200
14:56:09 n8n: login as the seeded owner http=200 ok=True
14:56:10 [5] drill commit fabba433307c: n8n n8nio/n8n:2.42.1 -> n8nio/n8n:2.44.7 (push rc=0)
14:56:19 [5] the box's drill mirror now at fabba4333
14:56:23 [6] Update -> 202 {'ok': True, 'data': {'accepted': True, 'completed': False}, 'message': 'Frissítés elindult – az állapot a kártyán követhető'}
14:56:23 + 0.0s phase=backing-up label=Biztonsági mentés készül a frissítés előtt… err=None hold=None
14:56:27 + 3.1s phase=safety-dump label=Adatbázis pillanatkép… err=None hold=None
14:56:28 + 4.1s phase=pulling label=Új verzió letöltése… err=None hold=None
14:58:43 + 140.0s phase=copying label=Az adatok másolása a frissítés előtt… err=None hold=None
14:58:51 + 147.2s phase=verifying label=Működés ellenőrzése… err=None hold=None
14:59:02 + 158.6s phase=done label=Frissítve err=None hold=None
14:59:21 n8n: login as the seeded owner http=200 ok=True
14:59:21 [7] memory soak 600 s …
15:09:27 [7] soak: peak 32.3% of the limit (anon), kills 0, restarts 0
15:09:27 [9] verdict proven -> /mnt/5_hdd/felhom.eu/git/felhom.eu/documentation/audits/security-app-updates-2026-10-27/walks/n8n/verdict.json
15:09:27 RESULT proven — the security-fix step ran on the box through the guarded Update; healthy, TO on all four observables, no undo, no hold, a clean soak, seed read back
15:09:28 [X] stop -> 200 {'ok': True, 'message': 'Stack n8n stop completed'}
15:10:00 [X] remove (with drive data) -> 200 {'ok': True, 'data': {'removed': 'n8n', 'volumes_removed': ['n8n_n8n_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'hdd_note': 'Az alkalmazás nem
15:10:09 [X] after remove: deployed=False leftovers=''
@@ -0,0 +1,3 @@
STEP n8n: the superseded step {'n8n': 'n8nio/n8n:2.42.1'} keeps its definition at steps/9083c23d189f5b92.yml
STEP n8n: … and its .felhom.yml at steps/9083c23d189f5b92.felhom.yml
WROTE n8n: {'n8n': 'n8nio/n8n:2.42.1'} -> {'n8n': 'n8nio/n8n:2.44.7'} peak 32.3% marks {'files_may_change': False, 'needs_person': None, 'memory_tight': False}
@@ -0,0 +1,228 @@
{
"app": "privatebin",
"walk": "security",
"box_walk_version": 1,
"verdict": "proven",
"venue": "box 9202 (drill catalog), the guarded Update",
"from": {
"privatebin": "privatebin/pdo:2.0.6"
},
"to": {
"privatebin": "privatebin/pdo:2.1.0"
},
"observables_before": {
"pinned_images": {
"privatebin": "privatebin/pdo:2.0.6"
},
"installed_images": {
"privatebin": "privatebin/pdo:2.0.6"
},
"catalog_images": null,
"live_compose_image_lines": [
"image: privatebin/pdo:2.0.6@sha256:4c141b2326f8b353598ce9ce7507a9cfecf2dad5c60a39fea903d430e296d8f5"
],
"docker_inspect": [
"privatebin privatebin/pdo:2.0.6@sha256:4c141b2326f8b353598ce9ce7507a9cfecf2dad5c60a39fea903d430e296d8f5 running=true restarts=0"
]
},
"setup_gate_before": {
"browser": {
"status": "200",
"redirect": null
},
"script": {
"status": "200",
"redirect": null
}
},
"seed": "read_back",
"drill_commit": "837de7ffa496",
"sync_waited_s": 27.0,
"badge_before": {
"hu": [
{
"title": "Újabb változat érhető el ehhez az alkalmazáshoz. A frissítés indításához nyomd meg a Frissítés gombot.",
"text": "Frissítés elérhető — ma"
}
],
"en": [
{
"title": "A newer version of this app is available. Select the Update button to start it.",
"text": "Update available — today"
}
]
},
"measured_at": "2026-10-27T13:56:56Z",
"update": {
"accepted": true,
"http": "202",
"phases": [
{
"t": 0.0,
"phase": "checking",
"label": "Ellenőrzés…",
"updating": true,
"error": null,
"hold": null
},
{
"t": 1.0,
"phase": "backing-up",
"label": "Biztonsági mentés készül a frissítés előtt…",
"updating": true,
"error": null,
"hold": null
},
{
"t": 6.2,
"phase": "safety-dump",
"label": "Adatbázis pillanatkép…",
"updating": true,
"error": null,
"hold": null
},
{
"t": 7.2,
"phase": "pulling",
"label": "Új verzió letöltése…",
"updating": true,
"error": null,
"hold": null
},
{
"t": 11.3,
"phase": "copying",
"label": "Az adatok másolása a frissítés előtt…",
"updating": true,
"error": null,
"hold": null
},
{
"t": 14.3,
"phase": "verifying",
"label": "Működés ellenőrzése…",
"updating": true,
"error": null,
"hold": null
},
{
"t": 19.5,
"phase": "done",
"label": "Frissítve",
"updating": false,
"error": null,
"hold": null
}
],
"duration_s": 19.5,
"final_phase": "done",
"update_error": null,
"hold_reason": null,
"state": "running"
},
"observables_after": {
"pinned_images": {
"privatebin": "privatebin/pdo:2.1.0"
},
"installed_images": {
"privatebin": "privatebin/pdo:2.1.0"
},
"catalog_images": {
"privatebin": "privatebin/pdo:2.1.0"
},
"live_compose_image_lines": [
"image: privatebin/pdo:2.1.0"
],
"docker_inspect": [
"privatebin privatebin/pdo:2.1.0 running=true restarts=0"
]
},
"badge_after": {
"hu": [
{
"title": "Ez az alkalmazás a legfrissebb elérhető változatot futtatja.",
"text": "Naprakész"
}
],
"en": [
{
"title": "This app is running the newest version available.",
"text": "Up to date"
}
]
},
"state_after": "running",
"hold_after": null,
"to_digests": {
"privatebin": "sha256:3400b0a4714d62161727a710c82a3e319cfea364ac6e591aed653f5bb6bb8055"
},
"four_observables": {
"pinned": {
"privatebin": "privatebin/pdo:2.1.0"
},
"installed": {
"privatebin": "privatebin/pdo:2.1.0"
},
"catalog": {
"privatebin": "privatebin/pdo:2.1.0"
},
"live_compose": [
"privatebin/pdo:2.1.0"
]
},
"seed_read_after": true,
"setup_gate_after": {
"browser": {
"status": "200",
"redirect": null
},
"script": {
"status": "200",
"redirect": null
}
},
"memory": {
"soak_s": 600,
"interval_s": 10,
"samples": 60,
"containers": {
"privatebin": {
"samples": 60,
"anon_peak_bytes": 34672640,
"limit_bytes": 134217728,
"anon_peak_pct": 25.8,
"cgroup_peak_pct": 34.6,
"oom_kill_delta": 0,
"oom_killed_flag": false,
"restarts_delta": 0,
"running_all_samples": true,
"cgroup": "/sys/fs/cgroup/system.slice/docker-043362473ac067e166e3136df6acfeee1812461d3f6fd926546e0fd35feec6d6.scope"
}
},
"oom_kills": 0,
"restarts": 0,
"peak_pct": 25.8
},
"why": "the security-fix step ran on the box through the guarded Update; healthy, TO on all four observables, no undo, no hold, a clean soak, seed read back",
"log": [
"14:55:51 [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'}",
"14:56:11 [1] deployed, controller state=running, pinned={'privatebin': 'privatebin/pdo:2.0.6'}",
"14:56:15 [2] setup gate as installed: {'browser': {'status': '200', 'redirect': None}, 'script': {'status': '200', 'redirect': None}}",
"14:56:15 privatebin: seeded paste id=add805a9d79e114c",
"14:56:15 privatebin: readback http=200 marker_present=True",
"14:56:20 [5] drill commit 837de7ffa496: privatebin privatebin/pdo:2.0.6 -> privatebin/pdo:2.1.0 (push rc=0)",
"14:56:28 [5] the box's drill mirror now at 837de7ffa",
"14:56:55 [sync] the badge needed 27.0s and 3 sync+rescan rounds to catch up to privatebin/pdo:2.1.0 — R-607's window, measured",
"14:56:56 [6] Update -> 202 {'ok': True, 'data': {'accepted': True, 'completed': False}, 'message': 'Frissítés elindult – az állapot a kártyán követhető'}",
"14:56:56 + 0.0s phase=checking label=Ellenőrzés… err=None hold=None",
"14:56:57 + 1.0s phase=backing-up label=Biztonsági mentés készül a frissítés előtt… err=None hold=None",
"14:57:02 + 6.2s phase=safety-dump label=Adatbázis pillanatkép… err=None hold=None",
"14:57:03 + 7.2s phase=pulling label=Új verzió letöltése… err=None hold=None",
"14:57:07 + 11.3s phase=copying label=Az adatok másolása a frissítés előtt… err=None hold=None",
"14:57:10 + 14.3s phase=verifying label=Működés ellenőrzése… err=None hold=None",
"14:57:15 + 19.5s phase=done label=Frissítve err=None hold=None",
"14:57:35 privatebin: readback http=200 marker_present=True",
"14:57:35 [7] memory soak 600 s …",
"15:07:41 [7] soak: peak 25.8% of the limit (anon), kills 0, restarts 0"
]
}
@@ -0,0 +1,3 @@
15:08:24 [5] drill commit d0f6b22831d1: privatebin privatebin/pdo:2.1.0 -> privatebin/pdo:2.0.6 (push rc=0)
15:08:33 [5] the box's drill mirror now at d0f6b2283
d0f6b22831d1
@@ -0,0 +1,24 @@
14:55:51 [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'}
14:56:11 [1] deployed, controller state=running, pinned={'privatebin': 'privatebin/pdo:2.0.6'}
14:56:15 [2] setup gate as installed: {'browser': {'status': '200', 'redirect': None}, 'script': {'status': '200', 'redirect': None}}
14:56:15 privatebin: seeded paste id=add805a9d79e114c
14:56:15 privatebin: readback http=200 marker_present=True
14:56:20 [5] drill commit 837de7ffa496: privatebin privatebin/pdo:2.0.6 -> privatebin/pdo:2.1.0 (push rc=0)
14:56:28 [5] the box's drill mirror now at 837de7ffa
14:56:55 [sync] the badge needed 27.0s and 3 sync+rescan rounds to catch up to privatebin/pdo:2.1.0 — R-607's window, measured
14:56:56 [6] Update -> 202 {'ok': True, 'data': {'accepted': True, 'completed': False}, 'message': 'Frissítés elindult – az állapot a kártyán követhető'}
14:56:56 + 0.0s phase=checking label=Ellenőrzés… err=None hold=None
14:56:57 + 1.0s phase=backing-up label=Biztonsági mentés készül a frissítés előtt… err=None hold=None
14:57:02 + 6.2s phase=safety-dump label=Adatbázis pillanatkép… err=None hold=None
14:57:03 + 7.2s phase=pulling label=Új verzió letöltése… err=None hold=None
14:57:07 + 11.3s phase=copying label=Az adatok másolása a frissítés előtt… err=None hold=None
14:57:10 + 14.3s phase=verifying label=Működés ellenőrzése… err=None hold=None
14:57:15 + 19.5s phase=done label=Frissítve err=None hold=None
14:57:35 privatebin: readback http=200 marker_present=True
14:57:35 [7] memory soak 600 s …
15:07:41 [7] soak: peak 25.8% of the limit (anon), kills 0, restarts 0
15:07:41 [9] verdict proven -> /mnt/5_hdd/felhom.eu/git/felhom.eu/documentation/audits/security-app-updates-2026-10-27/walks/privatebin/verdict.json
15:07:41 RESULT proven — the security-fix step ran on the box through the guarded Update; healthy, TO on all four observables, no undo, no hold, a clean soak, seed read back
15:07:42 [X] stop -> 200 {'ok': True, 'message': 'Stack privatebin stop completed'}
15:08:14 [X] remove (with drive data) -> 200 {'ok': True, 'data': {'removed': 'privatebin', 'volumes_removed': ['privatebin_privatebin_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'hdd_note'
15:08:22 [X] after remove: deployed=False leftovers=''
@@ -0,0 +1,3 @@
STEP privatebin: the superseded step {'privatebin': 'privatebin/pdo:2.0.6'} keeps its definition at steps/92922b000a9b6091.yml
STEP privatebin: … and its .felhom.yml at steps/92922b000a9b6091.felhom.yml
WROTE privatebin: {'privatebin': 'privatebin/pdo:2.0.6'} -> {'privatebin': 'privatebin/pdo:2.1.0'} peak 25.8% marks {'files_may_change': False, 'needs_person': None, 'memory_tight': False}
@@ -0,0 +1,229 @@
{
"app": "uptime-kuma",
"walk": "security",
"box_walk_version": 1,
"verdict": "proven",
"venue": "box 9202 (drill catalog), the guarded Update",
"from": {
"uptime-kuma": "louislam/uptime-kuma:2.5.5"
},
"to": {
"uptime-kuma": "louislam/uptime-kuma:2.5.7"
},
"observables_before": {
"pinned_images": {
"uptime-kuma": "louislam/uptime-kuma:2.5.5"
},
"installed_images": {
"uptime-kuma": "louislam/uptime-kuma:2.5.5"
},
"catalog_images": null,
"live_compose_image_lines": [
"image: louislam/uptime-kuma:2.5.5@sha256:c74379ac4509ce2d2c2633f509e67003ee2e45b6e995c5e43fc101f45a0e1fbe"
],
"docker_inspect": [
"uptime-kuma louislam/uptime-kuma:2.5.5@sha256:c74379ac4509ce2d2c2633f509e67003ee2e45b6e995c5e43fc101f45a0e1fbe running=true restarts=0"
]
},
"setup_gate_before": {
"browser": {
"status": "302",
"redirect": "https://felhom.enkisfelhom.hu/__gate/start?…"
},
"script": {
"status": "401",
"redirect": null
}
},
"seed": "read_back",
"drill_commit": "716392401e82",
"sync_waited_s": 4.5,
"badge_before": {
"hu": [
{
"title": "Újabb változat érhető el ehhez az alkalmazáshoz. A frissítés indításához nyomd meg a Frissítés gombot.",
"text": "Frissítés elérhető — ma"
}
],
"en": [
{
"title": "A newer version of this app is available. Select the Update button to start it.",
"text": "Update available — today"
}
]
},
"measured_at": "2026-10-27T14:24:47Z",
"update": {
"accepted": true,
"http": "202",
"phases": [
{
"t": 0.0,
"phase": "backing-up",
"label": "Biztonsági mentés készül a frissítés előtt…",
"updating": true,
"error": null,
"hold": null
},
{
"t": 6.2,
"phase": "safety-dump",
"label": "Adatbázis pillanatkép…",
"updating": true,
"error": null,
"hold": null
},
{
"t": 7.2,
"phase": "pulling",
"label": "Új verzió letöltése…",
"updating": true,
"error": null,
"hold": null
},
{
"t": 50.2,
"phase": "copying",
"label": "Az adatok másolása a frissítés előtt…",
"updating": true,
"error": null,
"hold": null
},
{
"t": 60.4,
"phase": "starting",
"label": "Indítás az új verzióval…",
"updating": true,
"error": null,
"hold": null
},
{
"t": 61.5,
"phase": "verifying",
"label": "Működés ellenőrzése…",
"updating": true,
"error": null,
"hold": null
},
{
"t": 66.6,
"phase": "done",
"label": "Frissítve",
"updating": false,
"error": null,
"hold": null
}
],
"duration_s": 66.6,
"final_phase": "done",
"update_error": null,
"hold_reason": null,
"state": "running"
},
"observables_after": {
"pinned_images": {
"uptime-kuma": "louislam/uptime-kuma:2.5.7"
},
"installed_images": {
"uptime-kuma": "louislam/uptime-kuma:2.5.7"
},
"catalog_images": {
"uptime-kuma": "louislam/uptime-kuma:2.5.7"
},
"live_compose_image_lines": [
"image: louislam/uptime-kuma:2.5.7"
],
"docker_inspect": [
"uptime-kuma louislam/uptime-kuma:2.5.7 running=true restarts=0"
]
},
"badge_after": {
"hu": [
{
"title": "Ez az alkalmazás a legfrissebb elérhető változatot futtatja.",
"text": "Naprakész"
}
],
"en": [
{
"title": "This app is running the newest version available.",
"text": "Up to date"
}
]
},
"state_after": "running",
"hold_after": null,
"to_digests": {
"uptime-kuma": "sha256:4b95dbe7ac5343b768f8e04e3035ccd59997872b1a35ab9b0f082d2cc279070e"
},
"four_observables": {
"pinned": {
"uptime-kuma": "louislam/uptime-kuma:2.5.7"
},
"installed": {
"uptime-kuma": "louislam/uptime-kuma:2.5.7"
},
"catalog": {
"uptime-kuma": "louislam/uptime-kuma:2.5.7"
},
"live_compose": [
"louislam/uptime-kuma:2.5.7"
]
},
"seed_read_after": true,
"setup_gate_after": {
"browser": {
"status": "302",
"redirect": "https://felhom.enkisfelhom.hu/__gate/start?…"
},
"script": {
"status": "401",
"redirect": null
}
},
"memory": {
"soak_s": 600,
"interval_s": 10,
"samples": 60,
"containers": {
"uptime-kuma": {
"samples": 60,
"anon_peak_bytes": 105992192,
"limit_bytes": 402653184,
"anon_peak_pct": 26.3,
"cgroup_peak_pct": 31.2,
"oom_kill_delta": 0,
"oom_killed_flag": false,
"restarts_delta": 0,
"running_all_samples": true,
"cgroup": "/sys/fs/cgroup/system.slice/docker-39b8383161e3949dc61f20e0cbc56c766fcf3c77596d375bdcbc5e60414d6f60.scope"
}
},
"oom_kills": 0,
"restarts": 0,
"peak_pct": 26.3
},
"why": "the security-fix step ran on the box through the guarded Update; healthy, TO on all four observables, no undo, no hold, a clean soak, seed read back",
"log": [
"15:23:19 [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'}",
"15:24:29 [1] deployed, controller state=running, pinned={'uptime-kuma': 'louislam/uptime-kuma:2.5.5'}",
"15:24:29 gate: status is gated — passed as the household (cookie set)",
"15:24:33 [2] setup gate as installed: {'browser': {'status': '302', 'redirect': 'https://felhom.enkisfelhom.hu/__gate/start?…'}, 'script': {'status': '401', 'redirect': None}}",
"15:24:33 uptime-kuma: setup ok=True successAdded",
"15:24:33 uptime-kuma: addStatusPage ok=True successAdded",
"15:24:33 uptime-kuma: readback of the seeded status page http=200 found=True",
"15:24:34 [5] drill commit 716392401e82: uptime-kuma louislam/uptime-kuma:2.5.5 -> louislam/uptime-kuma:2.5.7 (push rc=0)",
"15:24:43 [5] the box's drill mirror now at 716392401",
"15:24:48 [6] Update -> 202 {'ok': True, 'data': {'accepted': True, 'completed': False}, 'message': 'Frissítés elindult – az állapot a kártyán követhető'}",
"15:24:48 + 0.0s phase=backing-up label=Biztonsági mentés készül a frissítés előtt… err=None hold=None",
"15:24:54 + 6.2s phase=safety-dump label=Adatbázis pillanatkép… err=None hold=None",
"15:24:55 + 7.2s phase=pulling label=Új verzió letöltése… err=None hold=None",
"15:25:38 + 50.2s phase=copying label=Az adatok másolása a frissítés előtt… err=None hold=None",
"15:25:48 + 60.4s phase=starting label=Indítás az új verzióval… err=None hold=None",
"15:25:49 + 61.5s phase=verifying label=Működés ellenőrzése… err=None hold=None",
"15:25:54 + 66.6s phase=done label=Frissítve err=None hold=None",
"15:26:13 uptime-kuma: readback of the seeded status page http=200 found=True",
"15:26:13 [7] memory soak 600 s …",
"15:36:18 [7] soak: peak 26.3% of the limit (anon), kills 0, restarts 0"
]
}
@@ -0,0 +1,3 @@
15:37:06 [5] drill commit 0b611a6cbe91: uptime-kuma louislam/uptime-kuma:2.5.7 -> louislam/uptime-kuma:2.5.5 (push rc=0)
15:37:14 [5] the box's drill mirror now at 0b611a6cb
0b611a6cbe91
@@ -0,0 +1,25 @@
15:23:19 [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'}
15:24:29 [1] deployed, controller state=running, pinned={'uptime-kuma': 'louislam/uptime-kuma:2.5.5'}
15:24:29 gate: status is gated — passed as the household (cookie set)
15:24:33 [2] setup gate as installed: {'browser': {'status': '302', 'redirect': 'https://felhom.enkisfelhom.hu/__gate/start?…'}, 'script': {'status': '401', 'redirect': None}}
15:24:33 uptime-kuma: setup ok=True successAdded
15:24:33 uptime-kuma: addStatusPage ok=True successAdded
15:24:33 uptime-kuma: readback of the seeded status page http=200 found=True
15:24:34 [5] drill commit 716392401e82: uptime-kuma louislam/uptime-kuma:2.5.5 -> louislam/uptime-kuma:2.5.7 (push rc=0)
15:24:43 [5] the box's drill mirror now at 716392401
15:24:48 [6] Update -> 202 {'ok': True, 'data': {'accepted': True, 'completed': False}, 'message': 'Frissítés elindult – az állapot a kártyán követhető'}
15:24:48 + 0.0s phase=backing-up label=Biztonsági mentés készül a frissítés előtt… err=None hold=None
15:24:54 + 6.2s phase=safety-dump label=Adatbázis pillanatkép… err=None hold=None
15:24:55 + 7.2s phase=pulling label=Új verzió letöltése… err=None hold=None
15:25:38 + 50.2s phase=copying label=Az adatok másolása a frissítés előtt… err=None hold=None
15:25:48 + 60.4s phase=starting label=Indítás az új verzióval… err=None hold=None
15:25:49 + 61.5s phase=verifying label=Működés ellenőrzése… err=None hold=None
15:25:54 + 66.6s phase=done label=Frissítve err=None hold=None
15:26:13 uptime-kuma: readback of the seeded status page http=200 found=True
15:26:13 [7] memory soak 600 s …
15:36:18 [7] soak: peak 26.3% of the limit (anon), kills 0, restarts 0
15:36:18 [9] verdict proven -> /mnt/5_hdd/felhom.eu/git/felhom.eu/documentation/audits/security-app-updates-2026-10-27/walks/uptime-kuma/verdict.json
15:36:18 RESULT proven — the security-fix step ran on the box through the guarded Update; healthy, TO on all four observables, no undo, no hold, a clean soak, seed read back
15:36:23 [X] stop -> 200 {'ok': True, 'message': 'Stack uptime-kuma stop completed'}
15:36:55 [X] remove (with drive data) -> 200 {'ok': True, 'data': {'removed': 'uptime-kuma', 'volumes_removed': ['uptime-kuma_uptime_kuma_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'hdd_no
15:37:03 [X] after remove: deployed=False leftovers=''
@@ -0,0 +1,3 @@
STEP uptime-kuma: the superseded step {'uptime-kuma': 'louislam/uptime-kuma:2.5.5'} keeps its definition at steps/023d7514039fca24.yml
STEP uptime-kuma: … and its .felhom.yml at steps/023d7514039fca24.felhom.yml
WROTE uptime-kuma: {'uptime-kuma': 'louislam/uptime-kuma:2.5.5'} -> {'uptime-kuma': 'louislam/uptime-kuma:2.5.7'} peak 26.3% marks {'files_may_change': False, 'needs_person': None, 'memory_tight': False}