Files
felhom.eu/documentation/audits/update-night-2026-09-21/batchB.log
T
admin da20722e76
gates / gates (push) Successful in 27s
Update night 2026-09-21: Phase 0 and Phase 1 evidence, the drill method, and two instrument fixes
INTERIM CHECKPOINT — evidence off the machine at the end of the phase that produced it (R-320),
not at the end of the session. Phases 2-5 follow in a later commit.

Phase 0, all three mechanisms proven with their controls:
- the fleet floor to 0.261.0 with its declared MinAgent — both demo boxes in 13 s, the hub
  logging `managed floor SERVED ... from declared (golden 0.258.0)`.
- a PRIVATE DRILL CATALOG (admin/app-catalog-drill), so that broken, dummy, cross-repo and
  engine-major edges can be measured without the live catalog ever carrying one. Positive
  control quoted, and two negative controls: the live catalog's main and both real boxes'
  caches unchanged.
- a throwaway image store on the scratch guest, which is what makes an UNATTENDED HOLD
  measurable at all: an edge that PASSES the within-a-major test and still fails.
  CompareImageRefs was proven to order host:port/ references by RUNNING it (4 positive cases
  + 1 negative control), not by reading it.

Phase 1: real within-a-major upstream edges walked on guest 9202 through the product's own
guarded Update, each app seeded and read back through its OWN front door (R-156), with a
per-edge verdict record in 09's shape. `inconclusive` is never collapsed into `failed`.

TWO INSTRUMENT FIXES, both in this repo's own evidence code:
- 00-api-recipe.md said the app page is /app/<n>; it is /apps/<n>, and every call it described
  404s. Corrected, with the session-expiry note that cost the same time.
- unattended-caller.py's follow() read update_phase/updating off the API ENVELOPE, so both were
  always None and EVERY followed update ran to its 900 s timeout and was then recorded
  `timeout` and never-press-again. Fixed before B1 relied on it. R-623.

No controller, agent or hub code was written. The live catalog carries no broken reference.

Gates: repo_gates.py --fast — all 15 OK, exit 0.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0159rPz1ZhFKsS53msqPYxtS
2026-09-21 21:17:46 +02:00

157 lines
16 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
################ 20:42:00 grafana
20:42:00 ==== grafana: grafana/grafana:13.1.0 -> grafana/grafana:13.2.2 (sub=grafana, class=other)
20:42:01 [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['GF_SECURITY_ADMIN_PASSWORD']
20:42:01 [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'}
20:42:46 [1] deployed, controller state=running, pinned={'grafana': 'grafana/grafana:13.1.0'}
20:42:48 [2] seeding through the app's own front door
20:42:50 grafana: create folder http=401
20:42:50 grafana: refused {"extra":null,"message":"Invalid username or password","messageId":"password-auth.failed","statusCode":401,"traceID":""}
20:42:50 [9] verdict inconclusive -> /mnt/5_hdd/felhom.eu/git/felhom.eu/documentation/audits/update-night-2026-09-21/apps/grafana/verdict.json
################ 20:42:50 grafana done rc=0
################ 20:42:50 navidrome
20:42:51 ==== navidrome: deluan/navidrome:0.63.2 -> deluan/navidrome:0.64.0 (sub=music, class=file-leg)
20:42:53 [1] made the drive paths this app requires: ['/mnt/felhom-drives/scratch_hdd/userdata/navidrome']
20:42:53 [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['HDD_PATH']
20:42:53 [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'}
20:43:13 [1] deployed, controller state=running, pinned={'navidrome': 'deluan/navidrome:0.63.2'}
20:43:15 [2] seeding through the app's own front door
20:43:15 navidrome: createAdmin http=200
20:43:15 [3] control C1 — reading the seed back BEFORE the update
20:43:16 navidrome: login as the seeded user http=200 ok=True
20:43:16 [4] „Mentés most" -> 200 {'ok': True, 'message': 'Mentés elindítva'}
20:44:11 [4] backup idle; last=None
20:44:12 [5] drill commit 390395a96ee1: navidrome deluan/navidrome:0.63.2 -> deluan/navidrome:0.64.0 (push rc=0)
20:44:16 [5] badge 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'}]
20:44:16 [5] badge EN: [{'title': 'A newer version of this app is available. Select the Update button to start it.', 'text': 'Update available — today'}]
20:44:17 [6] Update -> 202 {'ok': True, 'data': {'accepted': True, 'completed': False}, 'message': 'Frissítés elindult – az állapot a kártyán követhető'}
20:44:17 + 0.0s phase=safety-dump label=Adatbázis pillanatkép… err=None hold=None
20:44:18 + 1.1s phase=pulling label=Új verzió letöltése… err=None hold=None
20:44:22 + 5.2s phase=starting label=Indítás az új verzióval… err=None hold=None
20:44:23 + 6.2s phase=verifying label=Működés ellenőrzése… err=None hold=None
20:44:28 + 11.3s phase=done label=Frissítve err=None hold=None
20:44:28 [7] reading the seed back AFTER the update
20:44:28 navidrome: login as the seeded user http=200 ok=True
20:44:30 [8] pinned = {'navidrome': 'deluan/navidrome:0.64.0'}
20:44:30 [8] installed = {'navidrome': 'deluan/navidrome:0.64.0'}
20:44:30 [8] compose = ['image: deluan/navidrome:0.64.0']
20:44:30 [8] inspect = ['navidrome deluan/navidrome:0.64.0 running=true restarts=0']
20:44:30 [9] verdict proven -> /mnt/5_hdd/felhom.eu/git/felhom.eu/documentation/audits/update-night-2026-09-21/apps/navidrome/verdict.json
20:44:31 [X] stop -> 200 {'ok': True, 'message': 'Stack navidrome stop completed'}
20:44:36 [X] remove -> 409 {'ok': False, 'error': 'A(z) /mnt/felhom-drives/scratch_hdd/userdata/navidrome tárhely jelenleg nem elérhető — az alkalmazás nem távolítható
20:44:43 [X] after remove: deployed=True leftovers='/opt/docker/stacks/navidrome'
################ 20:44:43 navidrome done rc=0
################ 20:44:43 audiobookshelf
20:44:43 ==== audiobookshelf: ghcr.io/advplyr/audiobookshelf:2.35.1 -> ghcr.io/advplyr/audiobookshelf:2.36.1 (sub=audiobooks, class=file-leg)
20:44:46 [1] made the drive paths this app requires: ['/mnt/felhom-drives/scratch_hdd/userdata/audiobookshelf']
20:44:46 [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['HDD_PATH']
20:44:46 [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'}
20:45:16 [1] deployed, controller state=running, pinned={'audiobookshelf': 'ghcr.io/advplyr/audiobookshelf:2.35.1'}
20:45:18 [2] seeding through the app's own front door
20:45:18 audiobookshelf: /init http=200
20:45:18 [3] control C1 — reading the seed back BEFORE the update
20:45:18 audiobookshelf: login as the seeded root http=200 ok=True
20:45:18 [4] „Mentés most" -> 200 {'ok': True, 'message': 'Mentés elindítva'}
20:46:09 [4] backup idle; last=None
20:46:09 [5] drill commit 4fbe52bb1955: audiobookshelf ghcr.io/advplyr/audiobookshelf:2.35.1 -> ghcr.io/advplyr/audiobookshelf:2.36.1 (push rc=0)
20:46:14 [5] badge 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'}]
20:46:14 [5] badge EN: [{'title': 'A newer version of this app is available. Select the Update button to start it.', 'text': 'Update available — today'}]
20:46:14 [6] Update -> 202 {'ok': True, 'data': {'accepted': True, 'completed': False}, 'message': 'Frissítés elindult – az állapot a kártyán követhető'}
20:46:14 + 0.0s phase=safety-dump label=Adatbázis pillanatkép… err=None hold=None
20:46:15 + 1.0s phase=pulling label=Új verzió letöltése… err=None hold=None
20:46:27 + 12.3s phase=starting label=Indítás az új verzióval… err=None hold=None
20:46:28 + 13.3s phase=verifying label=Működés ellenőrzése… err=None hold=None
20:46:38 + 23.6s phase=done label=Frissítve err=None hold=None
20:46:38 [7] reading the seed back AFTER the update
20:46:38 audiobookshelf: login as the seeded root http=200 ok=True
20:46:41 [8] pinned = {'audiobookshelf': 'ghcr.io/advplyr/audiobookshelf:2.36.1'}
20:46:41 [8] installed = {'audiobookshelf': 'ghcr.io/advplyr/audiobookshelf:2.36.1'}
20:46:41 [8] compose = ['image: ghcr.io/advplyr/audiobookshelf:2.36.1']
20:46:41 [8] inspect = ['audiobookshelf ghcr.io/advplyr/audiobookshelf:2.36.1 running=true restarts=0']
20:46:41 [9] verdict proven -> /mnt/5_hdd/felhom.eu/git/felhom.eu/documentation/audits/update-night-2026-09-21/apps/audiobookshelf/verdict.json
20:46:41 [X] stop -> 200 {'ok': True, 'message': 'Stack audiobookshelf stop completed'}
20:46:46 [X] remove -> 409 {'ok': False, 'error': 'A(z) /mnt/felhom-drives/scratch_hdd/userdata/audiobookshelf tárhely jelenleg nem elérhető — az alkalmazás nem távolí
20:46:54 [X] after remove: deployed=True leftovers='/opt/docker/stacks/audiobookshelf'
################ 20:46:54 audiobookshelf done rc=0
################ 20:46:54 adventurelog
20:46:54 ==== adventurelog: ghcr.io/seanmorley15/adventurelog-backend:v0.12.1,ghcr.io/seanmorley15/adventurelog-frontend:v0.12.1 -> ghcr.io/seanmorley15/adventurelog-backend:v0.13.0,ghcr.io/seanmorley15/adventurelog-frontend:v0.13.0 (sub=travel, class=db-postgis)
20:46:54 [1] adventurelog already deployed — reusing
20:46:56 [2] seeding through the app's own front door
20:47:01 adventurelog: createsuperuser :: Superuser created successfully.
20:47:05 adventurelog: seeded superuser drill0dfc9c
20:47:05 [3] control C1 — reading the seed back BEFORE the update
20:47:13 adventurelog: readback of the seeded account found=True
20:47:13 [4] „Mentés most" -> 200 {'ok': True, 'message': 'Mentés elindítva'}
20:48:03 [4] backup idle; last=None
20:48:04 [5] drill commit b4de9025ba9b: adventurelog ghcr.io/seanmorley15/adventurelog-backend:v0.12.1,ghcr.io/seanmorley15/adventurelog-frontend:v0.12.1 -> ghcr.io/seanmorley15/adventurelog-backend:v0.13.0,ghcr.io/seanmorley15/adventurelog-frontend:v0.13.0 (push rc=0)
20:48:08 [5] badge 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'}]
20:48:08 [5] badge EN: [{'title': 'A newer version of this app is available. Select the Update button to start it.', 'text': 'Update available — today'}]
20:48:09 [6] Update -> 202 {'ok': True, 'data': {'accepted': True, 'completed': False}, 'message': 'Frissítés elindult – az állapot a kártyán követhető'}
20:48:09 + 0.0s phase=safety-dump label=Adatbázis pillanatkép… err=None hold=None
20:48:10 + 1.0s phase=pulling label=Új verzió letöltése… err=None hold=None
20:48:47 + 37.9s phase=starting label=Indítás az új verzióval… err=None hold=None
20:48:52 + 43.1s phase=verifying label=Működés ellenőrzése… err=None hold=None
20:53:55 + 346.6s phase=failed label=A frissítés nem sikerült err=A(z) adventurelog frissítése 2026-09-21 20:53-kor nem sikerült, és az alkalmazás nem indult el az új verzióval. Az alkalmazás biztonsági okból leállítva marad, hogy az adatai ne sérüljenek. Visszaállítható a Mentések oldalon ebből a biztonsági mentésből: saját meghajtó, 2026-09-21 20:47 — ez a másolat a beállításokat, az adatbázist és az adatköteteket tartalmazza. hold=A(z) adventurelog frissítése 2026-09-21 20:53-kor nem sikerült, és az alkalmazás nem indult el az új verzióval. Az alkalmazás biztonsági okból leállítva marad, hogy az adatai ne sérüljenek. Visszaállítható a Mentések oldalon ebből a biztonsági mentésből: saját meghajtó, 2026-09-21 20:47 — ez a másolat a beállításokat, az adatbázist és az adatköteteket tartalmazza.
20:53:55 [7] reading the seed back AFTER the update
20:54:06 adventurelog: READBACK UNUSABLE — a username that cannot exist did not read as absent (None) :: Error response from daemon: No such container: adventurelog
20:54:08 [8] pinned = {'adventurelog': 'ghcr.io/seanmorley15/adventurelog-backend:v0.13.0', 'adventurelog-frontend': 'ghcr.io/seanmorley15/adventurelog-frontend:v0.13.0', 'adventurelog-postgres': 'postgis/postgis:16-3.5-alpine'}
20:54:08 [8] installed = {'adventurelog': 'ghcr.io/seanmorley15/adventurelog-backend:v0.12.1', 'adventurelog-frontend': 'ghcr.io/seanmorley15/adventurelog-frontend:v0.12.1', 'adventurelog-postgres': 'postgis/postgis:16-3.5-alpine'}
20:54:08 [8] compose = ['image: ghcr.io/seanmorley15/adventurelog-backend:v0.13.0', 'image: postgis/postgis:16-3.5-alpine', 'image: ghcr.io/seanmorley15/adventurelog-frontend:v0.13.0']
20:54:08 [8] inspect = []
20:54:08 [9] verdict failed -> /mnt/5_hdd/felhom.eu/git/felhom.eu/documentation/audits/update-night-2026-09-21/apps/adventurelog/verdict.json
################ 20:54:08 adventurelog done rc=0
################ 20:54:08 tandoor
20:54:08 ==== tandoor: ghcr.io/tandoorrecipes/recipes:2.6.13 -> ghcr.io/tandoorrecipes/recipes:2.6.15 (sub=recipes, class=db-postgres)
20:54:08 [1] tandoor already deployed — reusing
20:54:11 [2] seeding through the app's own front door
20:54:13 tandoor: createsuperuser :: Traceback (most recent call last): File "/opt/recipes/manage.py", line 8, in <module> from django.core.management import execute_from_command_line ModuleNotFoun
20:54:15 tandoor: the account did not appear in the app's own ORM :: aceback (most recent call last): File "/opt/recipes/manage.py", line 10, in <module> raise ImportError( ...<3 lines>... ) from exc ImportError: Couldn't import Django. Are you sure it's installed and
20:54:15 [9] verdict inconclusive -> /mnt/5_hdd/felhom.eu/git/felhom.eu/documentation/audits/update-night-2026-09-21/apps/tandoor/verdict.json
################ 20:54:15 tandoor done rc=0
################ 20:54:15 zipline
20:54:15 ==== zipline: ghcr.io/diced/zipline:4.6.1 -> ghcr.io/diced/zipline:4.7.0 (sub=img, class=db-postgres)
20:54:15 [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'}
20:55:26 [1] deployed, controller state=unhealthy, pinned={'zipline': 'ghcr.io/diced/zipline:4.6.1', 'zipline-postgres': 'postgres:16-alpine'}
20:55:26 [1] NOTE: the controller's own state is 'unhealthy', not 'running' — recorded, not treated as a failure; the fixture's front-door wait is the real gate
20:55:28 [2] seeding through the app's own front door
20:55:28 zipline: /api/auth/register http=400 :: {"error":"E1037: User registration is disabled","code":1037,"statusCode":400}
20:55:28 zipline: /api/auth/setup http=404 :: {"message":"Route POST:/api/auth/setup not found","error":"Not Found","statusCode":404}
20:55:28 zipline: neither register nor setup accepted a first user
20:55:28 [9] verdict inconclusive -> /mnt/5_hdd/felhom.eu/git/felhom.eu/documentation/audits/update-night-2026-09-21/apps/zipline/verdict.json
################ 20:55:28 zipline done rc=0
################ 20:55:28 n8n
20:55:28 ==== n8n: n8nio/n8n:2.31.3 -> n8nio/n8n:2.40.5 (sub=auto, class=db-postgres)
20:55:29 [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'}
20:58:34 [1] deployed, controller state=running, pinned={'n8n': 'n8nio/n8n:2.31.3'}
20:58:37 [2] seeding through the app's own front door
20:58:37 n8n: /rest/owner/setup http=200
20:58:37 [3] control C1 — reading the seed back BEFORE the update
20:58:37 n8n: login as the seeded owner http=200 ok=True
20:58:37 [4] „Mentés most" -> 200 {'ok': True, 'message': 'Mentés elindítva'}
20:59:53 [4] backup idle; last=None
20:59:54 [5] drill commit 7d42360161d9: n8n n8nio/n8n:2.31.3 -> n8nio/n8n:2.40.5 (push rc=0)
20:59:58 [5] badge 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'}]
20:59:58 [5] badge EN: [{'title': 'A newer version of this app is available. Select the Update button to start it.', 'text': 'Update available — today'}]
20:59:58 [6] Update -> 202 {'ok': True, 'data': {'accepted': True, 'completed': False}, 'message': 'Frissítés elindult – az állapot a kártyán követhető'}
20:59:58 + 0.0s phase=safety-dump label=Adatbázis pillanatkép… err=None hold=None
20:59:59 + 1.0s phase=pulling label=Új verzió letöltése… err=None hold=None
21:01:37 + 98.4s phase=starting label=Indítás az új verzióval… err=None hold=None
21:01:41 + 102.5s phase=verifying label=Működés ellenőrzése… err=None hold=None
21:01:56 + 117.9s phase=done label=Frissítve err=None hold=None
21:01:56 [7] reading the seed back AFTER the update
21:01:57 n8n: login as the seeded owner http=200 ok=True
21:01:59 [8] pinned = {'n8n': 'n8nio/n8n:2.40.5'}
21:01:59 [8] installed = {'n8n': 'n8nio/n8n:2.40.5'}
21:01:59 [8] compose = ['image: n8nio/n8n:2.40.5']
21:01:59 [8] inspect = ['n8n n8nio/n8n:2.40.5 running=true restarts=0']
21:01:59 [9] verdict proven -> /mnt/5_hdd/felhom.eu/git/felhom.eu/documentation/audits/update-night-2026-09-21/apps/n8n/verdict.json
21:02:02 [X] stop -> 200 {'ok': True, 'message': 'Stack n8n stop completed'}
21:02:07 [X] remove -> 200 {'ok': True, 'data': {'removed': 'n8n', 'volumes_removed': ['n8n_n8n_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'hdd_note':
21:02:15 [X] after remove: deployed=False leftovers='/opt/docker/stacks/n8n'
################ 21:02:15 n8n done rc=0
################ 21:02:15 mealie
21:02:15 ==== mealie: ghcr.io/mealie-recipes/mealie:v3.20.1 -> ghcr.io/mealie-recipes/mealie:v3.27.0 (sub=recipes, class=db-postgres)
21:02:15 [1] deploy -> 500 {'ok': False, 'error': 'a(z) "recipes" aldomain már használatban van egy másik alkalmazásban'}
21:02:15 [9] verdict inconclusive -> /mnt/5_hdd/felhom.eu/git/felhom.eu/documentation/audits/update-night-2026-09-21/apps/mealie/verdict.json
################ 21:02:15 mealie done rc=0