Update night 2026-09-21: Phase 0 and Phase 1 evidence, the drill method, and two instrument fixes
gates / gates (push) Successful in 27s
gates / gates (push) Successful in 27s
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
This commit is contained in:
@@ -0,0 +1,174 @@
|
||||
# DRILL — UPDATE NIGHT, 2026-09-21
|
||||
|
||||
**Venue:** scratch guest **9202 `demo-hp-scratch`** on host `demo-hp`, controller **v0.261.0**.
|
||||
**Catalog:** a private drill copy, `admin/app-catalog-drill`. **The live catalog was not touched.**
|
||||
**Evidence:** `audits/update-night-2026-09-21/` — `PROGRESS.md` is the step log, `apps/<n>/verdict.json`
|
||||
the per-edge records, `bad-days/<leg>/` the Phase-3 legs.
|
||||
|
||||
---
|
||||
|
||||
## Not done, or changed from the brief
|
||||
|
||||
*(Filled at the end of the run. Every phase and every B-leg is listed here if it was skipped,
|
||||
shortened or altered, with the reason. Empty only if true — R-611.)*
|
||||
|
||||
<!-- NOTDONE -->
|
||||
|
||||
---
|
||||
|
||||
## The three lines
|
||||
|
||||
<!-- THREELINES -->
|
||||
|
||||
---
|
||||
|
||||
## Phase 0 — the two mechanisms, each with its controls
|
||||
|
||||
### 0.1 The floor to 0.261.0 — PROVEN, 13 seconds
|
||||
|
||||
Saved as `min_controller_version=0.261.0` with `min_agent=0.131.0` (read from the release's own
|
||||
CHANGELOG header, as publish-train rule 1 requires). The hub answered `303 …?flash=floor_set` — not
|
||||
`floor_needs_min_agent` — and said so itself, twice:
|
||||
|
||||
```
|
||||
2026/09/21 20:07:07 [INFO] Global controller-version floor set to "0.261.0" (declared MinAgent "0.131.0")
|
||||
2026/09/21 20:07:09 [INFO] managed floor SERVED for demo-felhom: floor 0.261.0, agent requirement "0.131.0" from declared (golden 0.258.0)
|
||||
2026/09/21 20:07:10 [INFO] managed floor SERVED for demo-hp: floor 0.261.0, agent requirement "0.131.0" from declared (golden 0.258.0)
|
||||
```
|
||||
|
||||
Both demo boxes were running `0.261.0` **13 seconds after the save** (`20:07:07` → `20:07:20`), each
|
||||
container `Up … (healthy)`. The vouched golden is `0.258.0`, so this is the declared-MinAgent path of
|
||||
§3 decision 7 working exactly as R-472 closed it.
|
||||
|
||||
**Which other boxes it reaches:** none. The hub lists three hosts; the third, `drill-r50-0a4f9a`, is
|
||||
`DOWN` and its agent is `0.129.0`, below the declared `0.131.0`, so the floor is held for it — by
|
||||
design, and it was left alone.
|
||||
|
||||
Evidence: `01-floor-pre.txt`, `02-floor-save.txt`.
|
||||
|
||||
### 0.2 The drill catalog — PROVEN, with all three controls
|
||||
|
||||
`admin/app-catalog-drill`, private, created from the live catalog's `main` (`f5f6a152b513`).
|
||||
|
||||
**One claim in the brief turned out wrong before a single command was run, and it is the reason the
|
||||
leg worked at all.** The brief assumed a box follows a second catalog once `git.repo_url` changes.
|
||||
It does not. `Syncer.gitCloneOrPull` clones **only when `.git` is absent**; otherwise it fetches from
|
||||
the remote stored in the clone. After the repoint, `git remote -v` in the box's cache still read
|
||||
`app-catalog-felhom.eu`. The cache directory had to be removed as well. Filed as **R-615**.
|
||||
|
||||
- **Positive control.** A one-step bump committed to the DRILL repo (`uptime-kuma 2.4.0 → 2.5.5`,
|
||||
a real upstream edge) appeared on 9202 as „**Frissítés elérhető — ma**" / "**Update available —
|
||||
today**", both languages, with the matching title text.
|
||||
- **Negative control 1.** The live catalog's `main` is still `f5f6a152b513` and its `uptime-kuma`
|
||||
pin is still `2.4.0`.
|
||||
- **Negative control 2.** Both real boxes' catalog caches are still at `f5f6a15` — neither followed
|
||||
anything.
|
||||
- **R-607 fired again**, exactly as its row predicts: `POST /api/sync` answered
|
||||
„Sablonok naprakészek — nincs változás" while the catalog had in fact moved; only
|
||||
`POST /api/stacks/rescan` made `catalog_images` current. Tonight's line is added to that row.
|
||||
|
||||
**A second brief-claim corrected:** the app page is at **`/apps/<name>`**, not `/app/<name>` as
|
||||
`update-arc-gaps-2026-09-21/00-api-recipe.md` says. That recipe line is fixed.
|
||||
|
||||
Evidence: `03-drill-repo.txt`, `04-9202-config-pre.txt`, `05-9202-follows-drill.txt`,
|
||||
`07-positive-control.txt`.
|
||||
|
||||
### 0.3 The throwaway image store — PROVEN, and the comparator claim RUN rather than read
|
||||
|
||||
`registry:2` on 9202 at `127.0.0.1:5000`. Never DooPlex's registry; no real box can reach it.
|
||||
|
||||
| tag | what it is |
|
||||
|---|---|
|
||||
| `localhost:5000/drill/glance:1.0.0` | the real `glanceapp/glance:v0.8.6`, retagged — it serves |
|
||||
| `localhost:5000/drill/glance:1.0.1` | a built image that starts, stays up and **never serves** |
|
||||
| `localhost:5000/drill/glance:1.0.2` | the FIXED next version, for B6 |
|
||||
| `localhost:5000/drill/pdf:1.0.0` | the real bentopdf, retagged |
|
||||
| `localhost:5000/drill/pdf:1.0.1` | **absent from the store** — 404, for the pull-fail leg |
|
||||
|
||||
**The brief's worry about `host:port/` was unfounded, and it was settled by running the comparator,
|
||||
not by reading it.** `splitImageRef` takes the LAST colon and rejects it only when a `/` follows, so
|
||||
a registry port is never mistaken for a tag. Four positive cases and one negative control, in the
|
||||
controller's own package:
|
||||
|
||||
```
|
||||
OK CompareImageRefs("localhost:5000/drill/glance:1.0.0","localhost:5000/drill/glance:1.0.1") = (-1,true)
|
||||
OK CompareImageRefs("localhost:5000/drill/glance:1.0.1","localhost:5000/drill/glance:1.0.0") = ( 1,true)
|
||||
OK CompareImageRefs("localhost:5000/drill/glance:1.0.0","localhost:5000/drill/glance:1.0.0") = ( 0,true)
|
||||
OK CompareImageRefs("localhost:5000/drill/glance:1.0.0","localhost:5000/drill/glance:1.0.2") = (-1,true)
|
||||
OK CompareImageRefs("localhost:5000/drill/glance:1.0.0","glanceapp/glance:1.0.1") = ( 0,false) <- negative control
|
||||
```
|
||||
|
||||
The temporary test file was deleted and `git status --porcelain` is empty again.
|
||||
|
||||
Evidence: `09-image-store.txt`.
|
||||
|
||||
### 0.4 Capacity — the brief's claim HOLDS
|
||||
|
||||
9202: **26 GB RAM** (22 free), docker root on the `mp0` volume with **56 GB free**, a 938 GB scratch
|
||||
drive at 3%. `demo-hp`'s own `/` is at 86% but holds neither the rootfs nor the docker root — both
|
||||
live on `nvme-scratch`, which is at 2%. Evidence: `08-capacity.txt`.
|
||||
|
||||
### 0.5 The drift re-run — the brief's numbers HOLD EXACTLY
|
||||
|
||||
Re-measured against the live registries at 20:07, catalog `f5f6a152b513`: 53 apps, 66 unique pins,
|
||||
**46 behind upstream, 39 within a major, 7 across a major** — the same 39 and 7 the brief names.
|
||||
One pin is unmeasurable tonight (`msdeluise/plant-it` — Docker Hub answered 401 on its tag list) and
|
||||
one is internal. Evidence: `06-drift-rerun.txt`.
|
||||
|
||||
---
|
||||
|
||||
## The verdict table
|
||||
|
||||
<!-- VERDICTTABLE -->
|
||||
|
||||
---
|
||||
|
||||
## Phase 2 — the two database engines
|
||||
|
||||
<!-- PHASE2 -->
|
||||
|
||||
---
|
||||
|
||||
## Phase 3 — the bad days
|
||||
|
||||
<!-- PHASE3 -->
|
||||
|
||||
---
|
||||
|
||||
## Phase 4 — the morning after
|
||||
|
||||
<!-- PHASE4 -->
|
||||
|
||||
---
|
||||
|
||||
## The alarm truth table
|
||||
|
||||
**The event-and-mail half of this night could not be measured, and that is a property of the venue,
|
||||
not an omission.** Guest 9202 has `hub.enabled: false`; every notifier entry point returns before it
|
||||
logs anything (`notify/notifier.go:269, :359, :917, :959, :1058`), so no hub event and no customer
|
||||
mail can be produced or observed there. The hub was **not** enabled on 9202 to get around this: that
|
||||
would register an unclaimed host at the live hub and could mail a real address, and the brief fences
|
||||
the hub. Filed as **R-620** (a disabled notifier should at least say which event it dropped).
|
||||
|
||||
So the table below scores the surfaces that DO exist on this box — the app page in both languages,
|
||||
the dashboard, and the controller's own log — against `08-alarm-ladder.md`.
|
||||
|
||||
<!-- ALARMTABLE -->
|
||||
|
||||
---
|
||||
|
||||
## The promotion list for the operator
|
||||
|
||||
<!-- PROMOTION -->
|
||||
|
||||
---
|
||||
|
||||
## Teardown — three layers, plus Gitea
|
||||
|
||||
<!-- TEARDOWN -->
|
||||
|
||||
---
|
||||
|
||||
## Claims in the brief that turned out wrong
|
||||
|
||||
<!-- WRONGCLAIMS -->
|
||||
@@ -79,11 +79,17 @@ cost a few minutes.
|
||||
|
||||
## 3. Reading the customer's app page, both languages
|
||||
|
||||
**The route is `/apps/<name>`, not `/app/<name>`.** This section said `/app/` until 2026-09-21 and
|
||||
every call it described 404s. `/` redirects to `/launcher`, and the app links live on `/stacks`.
|
||||
|
||||
```bash
|
||||
curl -sk -H "$H" -H "Cookie: $(cat $S/sess.txt)" "$B/app/vikunja" # Hungarian
|
||||
curl -sk -H "$H" -H "Cookie: $(cat $S/sess.txt)" "$B/app/vikunja?lang=en" # English
|
||||
curl -sk -H "$H" -H "Cookie: $(cat $S/sess.txt)" "$B/apps/vikunja" # Hungarian
|
||||
curl -sk -H "$H" -H "Cookie: $(cat $S/sess.txt)" "$B/apps/vikunja?lang=en" # English
|
||||
```
|
||||
|
||||
**The session dies whenever the controller restarts** — the store is in memory — so a long run must
|
||||
be able to log in again mid-flight rather than assuming one login lasts the night.
|
||||
|
||||
## 4. Shell into the guest (for docker / pct only)
|
||||
|
||||
```bash
|
||||
|
||||
@@ -89,11 +89,24 @@ def edge_is_within_a_major(st):
|
||||
|
||||
|
||||
def follow(name, timeout=900):
|
||||
"""Watch one update to its end. Returns done | failed | held | timeout."""
|
||||
"""Watch one update to its end. Returns done | failed | held | timeout.
|
||||
|
||||
FIXED 2026-09-21 (update night), and the bug is worth keeping written down. `call()` returns
|
||||
the API ENVELOPE — `{"ok": true, "data": {...}}` — and this function read `update_phase` and
|
||||
`updating` off the envelope, where they do not exist. Both were therefore ALWAYS `None`, the
|
||||
end test `not updating and phase in ("done","failed")` could never fire, and **every update
|
||||
this caller followed ran to the 900-second timeout and was then recorded `timeout` and
|
||||
`never_again`** — including ones that had succeeded in under two minutes. `main()` unwraps
|
||||
`data` for the stack LIST, which is why the within-a-major half worked and this half did not.
|
||||
The 2026-09-21 run never caught it because the only pass that reached `follow()` was the one
|
||||
whose log was lost to a buffering `tail`. An instrument that turns a success into a timeout is
|
||||
not a measurement — see R-623.
|
||||
"""
|
||||
deadline = time.time() + timeout
|
||||
last = None
|
||||
while time.time() < deadline:
|
||||
st = call("GET", "/api/stacks/%s" % name)
|
||||
env = call("GET", "/api/stacks/%s" % name)
|
||||
st = env.get("data") if isinstance(env, dict) and isinstance(env.get("data"), dict) else env
|
||||
phase, updating = st.get("update_phase"), st.get("updating")
|
||||
if phase != last:
|
||||
log(" %s: phase=%s updating=%s" % (name, phase, updating))
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
=== floor pre-state 2026-09-21T20:06:43+02:00
|
||||
floor: min_controller_version" value="0.260.0"
|
||||
min_agent: name="min_agent" value="0.131.0"
|
||||
|
||||
=== hub /hosts controller versions BEFORE
|
||||
Host | Customer | Agent | Status | Guests | CPU | Mem | Disk
|
||||
demo-felhom-8363b5 | Demo Ügyfél | 0.132.0 floor: declared MinAgent | ONLINE | 1/2 | 0% | 18% | 29%
|
||||
demo-hp-bb76ea | Demo HP | 0.132.0 floor: declared MinAgent | ONLINE | 1/2 | 0% | 16% | 81%
|
||||
drill-r50-0a4f9a | drill-r50 | 0.129.0 floor held | DOWN | 1/1 | 20% | 20% | 10%
|
||||
=== controller images BEFORE floor 2026-09-21T20:06:51+02:00
|
||||
--- felhom-pve
|
||||
VMID Status Lock Name
|
||||
9201 running demo-felhom
|
||||
guest 9201: gitea.dooplex.hu/admin/felhom-controller:0.260.0
|
||||
--- demo-hp
|
||||
VMID Status Lock Name
|
||||
9201 running demo-hp
|
||||
9202 running demo-hp-scratch
|
||||
guest 9201: gitea.dooplex.hu/admin/felhom-controller:0.260.0
|
||||
guest 9202: gitea.dooplex.hu/admin/felhom-controller:0.261.0
|
||||
@@ -0,0 +1,23 @@
|
||||
=== POST /configuration/global-floor 2026-09-21T20:07:07+02:00
|
||||
http=303
|
||||
Location: /configuration?flash=floor_set
|
||||
--- floor after save:
|
||||
min_controller_version" value="0.261.0"
|
||||
name="min_agent" value="0.131.0"
|
||||
20:07:20 demo-felhom=gitea.dooplex.hu/admin/felhom-controller:0.261.0 demo-hp=gitea.dooplex.hu/admin/felhom-controller:0.261.0
|
||||
BOTH_ARRIVED
|
||||
|
||||
=== hub log: managed floor SERVED 2026-09-21T20:07:26+02:00
|
||||
2026/09/21 14:07:02 [INFO] Global controller-version floor set to "0.260.0" (declared MinAgent "0.131.0")
|
||||
2026/09/21 14:07:04 [INFO] managed floor SERVED for demo-felhom: floor 0.260.0, agent requirement "0.131.0" from declared (golden 0.258.0)
|
||||
2026/09/21 14:07:05 [INFO] managed floor SERVED for demo-hp: floor 0.260.0, agent requirement "0.131.0" from declared (golden 0.258.0)
|
||||
2026/09/21 20:07:07 [INFO] Global controller-version floor set to "0.261.0" (declared MinAgent "0.131.0")
|
||||
2026/09/21 20:07:09 [INFO] managed floor SERVED for demo-felhom: floor 0.261.0, agent requirement "0.131.0" from declared (golden 0.258.0)
|
||||
2026/09/21 20:07:10 [INFO] managed floor SERVED for demo-hp: floor 0.261.0, agent requirement "0.131.0" from declared (golden 0.258.0)
|
||||
|
||||
=== running controller containers AFTER
|
||||
--- felhom-pve
|
||||
guest 9201: gitea.dooplex.hu/admin/felhom-controller:0.261.0 Up 14 seconds (healthy)
|
||||
--- demo-hp
|
||||
guest 9201: gitea.dooplex.hu/admin/felhom-controller:0.261.0 Up 14 seconds (healthy)
|
||||
guest 9202: gitea.dooplex.hu/admin/felhom-controller:0.261.0 Up 5 hours (healthy)
|
||||
@@ -0,0 +1,9 @@
|
||||
=== drill repo created 2026-09-21T20:08:46+02:00
|
||||
full_name: admin/app-catalog-drill
|
||||
private: True
|
||||
default_branch: main
|
||||
empty: False
|
||||
--- main HEAD on drill:
|
||||
f5f6a152b513 | REVERT both drill bumps: all four app pins back to their pre
|
||||
--- live catalog main (must be unchanged):
|
||||
f5f6a152b513
|
||||
@@ -0,0 +1,29 @@
|
||||
SAVED
|
||||
-rw------- 1 root root 1944 Sep 21 12:40 /var/lib/docker/volumes/felhom-controller-data/_data/controller.yaml
|
||||
-rw------- 1 root root 1944 Sep 21 18:09 /var/lib/docker/volumes/felhom-controller-data/_data/controller.yaml.pre-update-night
|
||||
---git-section---
|
||||
git:
|
||||
branch: main
|
||||
repo_url: https://gitea.dooplex.hu/admin/app-catalog-felhom.eu.git
|
||||
sync_interval: 15m
|
||||
token: ""
|
||||
username: ""
|
||||
hub:
|
||||
---update-knobs---
|
||||
---cache---
|
||||
total 92
|
||||
drwxr-xr-x 8 root root 4096 Sep 21 17:55 .
|
||||
drwxr-xr-x 9 root root 4096 Sep 21 11:04 ..
|
||||
origin https://gitea.dooplex.hu/admin/app-catalog-felhom.eu.git (fetch)
|
||||
origin https://gitea.dooplex.hu/admin/app-catalog-felhom.eu.git (push)
|
||||
f5f6a15 REVERT both drill bumps: all four app pins back to their pre-drill images
|
||||
--- git section now (token redacted):
|
||||
git:
|
||||
branch: main
|
||||
repo_url: https://gitea.dooplex.hu/admin/app-catalog-drill.git
|
||||
sync_interval: 15m
|
||||
token: "<REDACTED>"
|
||||
username: "admin"
|
||||
hub:
|
||||
--- removing stale catalog cache (origin still pointed at the LIVE repo)
|
||||
cache removed: ls: cannot access '/var/lib/docker/volumes/felhom-controller-data/_data/data/catalog-cache': No such file or directory
|
||||
@@ -0,0 +1,14 @@
|
||||
gitea.dooplex.hu/admin/felhom-controller:0.261.0 Up 20 seconds (healthy)
|
||||
---sync-log---
|
||||
2026/09/21 18:09:43 sync.go:416: [DEBUG] [sync] wger/.felhom.yml: hash match, skipped
|
||||
2026/09/21 18:09:43 sync.go:509: [DEBUG] [sync] wishlist: catalog has moved past the pin — rendering the stored applied definition
|
||||
2026/09/21 18:09:43 sync.go:416: [DEBUG] [sync] wishlist/docker-compose.yml: hash match, skipped
|
||||
2026/09/21 18:09:43 sync.go:416: [DEBUG] [sync] wishlist/.felhom.yml: hash match, skipped
|
||||
2026/09/21 18:09:43 sync.go:416: [DEBUG] [sync] zipline/docker-compose.yml: hash match, skipped
|
||||
2026/09/21 18:09:43 sync.go:416: [DEBUG] [sync] zipline/.felhom.yml: hash match, skipped
|
||||
2026/09/21 18:09:43 sync.go:263: [INFO] [sync] Catalog sync complete
|
||||
2026/09/21 18:09:43 sync.go:122: [INFO] [sync] Initial sync: Sablonok naprakészek — nincs változás
|
||||
---cache-origin---
|
||||
origin https://admin:<REDACTED-SEE-MORNING-NOTE>@gitea.dooplex.hu/admin/app-catalog-drill.git (fetch)
|
||||
origin https://admin:<REDACTED-SEE-MORNING-NOTE>@gitea.dooplex.hu/admin/app-catalog-drill.git (push)
|
||||
f104b4c DRILL repo README: what this is and that no customer box may follow it
|
||||
@@ -0,0 +1,77 @@
|
||||
RE-RUN 2026-09-21 20:07 CEST — 66 pins measured
|
||||
behind upstream : 46
|
||||
WITHIN a major : 39 (the brief said 39)
|
||||
ACROSS a major : 7 (the brief said 7)
|
||||
other statuses : {'error': 1, 'internal-not-upstream': 1, 'behind': 46, 'no-newer-or-unparsed': 10, 'ok': 8}
|
||||
|
||||
=== WITHIN-A-MAJOR edges available tonight ===
|
||||
actualbudget/actual-server:26.7.0 -> 26.9.0 apps=actualbudget
|
||||
deluan/navidrome:0.63.2 -> 0.64.0 apps=navidrome
|
||||
docmost/docmost:0.95.0 -> 0.96.0 apps=docmost
|
||||
emby/embyserver:4.10.0.20 -> 4.11.0.1 apps=emby
|
||||
getmeili/meilisearch:v1.36.0 -> v1.54.0 apps=wanderer
|
||||
ghcr.io/advplyr/audiobookshelf:2.35.1 -> 2.36.1 apps=audiobookshelf
|
||||
ghcr.io/alam00000/bentopdf:v2.8.6 -> v2.8.8 apps=bentopdf
|
||||
ghcr.io/cmintey/wishlist:v0.66.0 -> v0.67.0 apps=wishlist
|
||||
ghcr.io/diced/zipline:4.6.1 -> 4.7.0 apps=zipline
|
||||
ghcr.io/home-assistant/home-assistant:2026.7.2 -> 2026.9.3 apps=home-assistant
|
||||
ghcr.io/immich-app/immich-machine-learning:v3.0.3 -> v3.2.2 apps=immich
|
||||
ghcr.io/immich-app/immich-server:v3.0.3 -> v3.2.2 apps=immich
|
||||
ghcr.io/lukegus/termix:2.5.0 -> 2.8.0 apps=termix
|
||||
ghcr.io/mealie-recipes/mealie:v3.20.1 -> v3.27.0 apps=mealie
|
||||
ghcr.io/papra-hq/papra:26.6.1-rootless -> 26.6.2-rootless apps=papra
|
||||
ghcr.io/seanmorley15/adventurelog-backend:v0.12.1 -> v0.13.0 apps=adventurelog
|
||||
ghcr.io/seanmorley15/adventurelog-frontend:v0.12.1 -> v0.13.0 apps=adventurelog
|
||||
ghcr.io/tandoorrecipes/recipes:2.6.13 -> 2.6.15 apps=tandoor
|
||||
ghcr.io/thomiceli/opengist:1.13 -> 1.15 apps=opengist
|
||||
ghost:6.53.0-alpine -> 6.64.0-alpine apps=ghost
|
||||
gitea/gitea:1.27.0 -> 1.27.3 apps=gitea
|
||||
glanceapp/glance:v0.8.5 -> v0.8.6 apps=glance
|
||||
gotson/komga:1.25.0 -> 1.27.0 apps=komga
|
||||
grafana/grafana:13.1.0 -> 13.2.2 apps=grafana
|
||||
louislam/uptime-kuma:2.4.0 -> 2.5.5 apps=uptime-kuma
|
||||
lscr.io/linuxserver/bookstack:26.05.2 -> 26.05.5 apps=bookstack
|
||||
lscr.io/linuxserver/code-server:4.129.0 -> 4.138.0 apps=code-server
|
||||
lscr.io/linuxserver/radarr:6.3.0 -> 6.4.4 apps=radarr
|
||||
lscr.io/linuxserver/sonarr:4.0.19 -> 4.0.20 apps=sonarr
|
||||
lukevella/rallly:4.11.1 -> 4.15.2 apps=rallly
|
||||
n8nio/n8n:2.31.3 -> 2.40.5 apps=n8n
|
||||
outlinewiki/outline:1.9.1 -> 1.10.1 apps=outline
|
||||
plexinc/pms-docker:1.41.4.9463-630c9f557 -> 1.43.4.10903-e5521bd8c apps=plex
|
||||
privatebin/pdo:2.0.5 -> 2.0.6 apps=privatebin
|
||||
registry.gitlab.com/crafty-controller/crafty-4:4.10.7 -> 4.11.0 apps=crafty-controller
|
||||
rommapp/romm:5.0.0 -> 5.3.0 apps=romm
|
||||
vaultwarden/server:1.36.0-alpine -> 1.37.3-alpine apps=vaultwarden
|
||||
vikunja/vikunja:2.3.0 -> 2.6.0 apps=vikunja
|
||||
wger/server:2.6 -> 2.7 apps=wger
|
||||
|
||||
=== ACROSS-A-MAJOR ===
|
||||
codewithcj/sparkyfitness:v0.17.3 -> v1.7.2 apps=sparkyfitness
|
||||
codewithcj/sparkyfitness_server:v0.17.3 -> v1.7.2 apps=sparkyfitness
|
||||
f0rc3/gokapi:v1.9.6 -> v2.2.4 apps=gokapi
|
||||
ghcr.io/claperco/claper:2.5 -> 3.0 apps=claper
|
||||
ghcr.io/gethomepage/homepage:v1.13.2 -> v2.4.0 apps=homepage
|
||||
ghcr.io/paperless-ngx/paperless-ngx:2.20.15 -> 3.2.1 apps=paperless-ngx
|
||||
nextcloud:34.0.1-apache -> 35.0.0-apache apps=nextcloud
|
||||
|
||||
=== errors / not-behind ===
|
||||
[no-newer-or-unparsed] calcom/cal.com:v6.2.0 up to date (no tag newer than current within the same shape)
|
||||
[no-newer-or-unparsed] crocodilestick/calibre-web-automated:v4.0.6 up to date (no tag newer than current within the same shape)
|
||||
[no-newer-or-unparsed] fallenbagel/jellyseerr:2.7.3 up to date (no tag newer than current within the same shape)
|
||||
[no-newer-or-unparsed] flomp/wanderer-db:v0.20.0 up to date (no tag newer than current within the same shape)
|
||||
[no-newer-or-unparsed] flomp/wanderer-web:v0.20.0 up to date (no tag newer than current within the same shape)
|
||||
[no-newer-or-unparsed] ghcr.io/gramps-project/grampsweb:v25.6.0 up to date (no tag newer than current within the same shape)
|
||||
[ok] ghcr.io/immich-app/postgres:16-vectorchord0.4.3-pgvectors0.2.0 sha256:1a078b237c1d9
|
||||
[no-newer-or-unparsed] ghcr.io/sysadminsmedia/homebox:0.26.2 up to date (no tag newer than current within the same shape)
|
||||
[internal-not-upstream] gitea.dooplex.hu/admin/recipe-importer:v0.9.11
|
||||
[no-newer-or-unparsed] jellyfin/jellyfin:10.11.11 up to date (no tag newer than current within the same shape)
|
||||
[no-newer-or-unparsed] kimai/kimai2:apache-2.57.0 up to date (no tag newer than current within the same shape)
|
||||
[ok] mariadb:11.4 sha256:70cc072b29b4a
|
||||
[ok] mariadb:11.6 sha256:bfb1298c06cd1
|
||||
[ok] mariadb:12.3 sha256:805c8e104bd56
|
||||
[error] msdeluise/plant-it:0.10.0 HTTP error: 401 Client Error: Unauthorized for url: https://registry-1.docker.io/v2/msdeluise/plant-it/tags/list?n=1000
|
||||
[no-newer-or-unparsed] onlyoffice/documentserver:9.4.0 up to date (no tag newer than current within the same shape)
|
||||
[ok] postgis/postgis:16-3.5-alpine sha256:47e961a569fd5
|
||||
[ok] postgres:15-alpine sha256:f7d23353e1b15
|
||||
[ok] postgres:16-alpine sha256:721873c34ceb9
|
||||
[ok] redis:7-alpine sha256:858f009f9709c
|
||||
@@ -0,0 +1,27 @@
|
||||
=== POSITIVE CONTROL: drill bump reaches 9202 2026-09-21T20:11:32+02:00
|
||||
--- POST /api/sync
|
||||
{"ok":true,"data":{"ok":true,"message":"Sablonok naprakészek — nincs változás"},"message":"Sablonok naprakészek — nincs változás"}
|
||||
|
||||
--- POST /api/stacks/rescan (R-607: always before reading a badge)
|
||||
{"ok":true,"message":"Rescan completed: 55 stacks found"}
|
||||
|
||||
uptime-kuma state=running deployed=True updating=False phase=None
|
||||
pinned = {'uptime-kuma': 'louislam/uptime-kuma:2.5.1'}
|
||||
installed= {'uptime-kuma': 'louislam/uptime-kuma:2.5.1'}
|
||||
catalog = {'uptime-kuma': 'louislam/uptime-kuma:2.5.5'}
|
||||
|
||||
--- app page badge, HU
|
||||
--- app page badge, EN
|
||||
|
||||
--- NEGATIVE CONTROL 1: live catalog main unchanged
|
||||
f5f6a152b513
|
||||
11: image: louislam/uptime-kuma:2.4.0
|
||||
--- NEGATIVE CONTROL 2: the other two boxes' catalog cache HEAD
|
||||
felhom-pve 9201: f5f6a15 REVERT both drill bumps: all four app pins back to their pre-drill images
|
||||
demo-hp 9201: f5f6a15 REVERT both drill bumps: all four app pins back to their pre-drill images
|
||||
|
||||
NOTE: the app page route is /apps/<name>, NOT /app/<name> as 00-api-recipe.md says.
|
||||
--- /apps/uptime-kuma
|
||||
<span class="tag tag-warn" 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.">Frissítés elérhető — ma
|
||||
--- /apps/uptime-kuma?lang=en
|
||||
<span class="tag tag-warn" title="A newer version of this app is available. Select the Update button to start it.">Update available — today
|
||||
@@ -0,0 +1,44 @@
|
||||
=== CAPACITY 2026-09-21T20:12:53+02:00
|
||||
--- demo-hp host
|
||||
total used free shared buff/cache available
|
||||
Mem: 29 4 6 0 18 24
|
||||
|
||||
Filesystem Size Used Avail Use% Mounted on
|
||||
/dev/mapper/pve-root 39G 32G 5.4G 86% /
|
||||
|
||||
Name Type Status Total (KiB) Used (KiB) Available (KiB) %
|
||||
felhom-pbs pbs active 0 0 0 0.00%
|
||||
local dir active 40453376 32791380 5574880 81.06%
|
||||
local-lvm lvmthin active 56487936 27018179 29469756 47.83%
|
||||
nvme-scratch dir active 983379700 19190616 914162472 1.95%
|
||||
|
||||
VMID Status Lock Name
|
||||
9201 running demo-hp
|
||||
9202 running demo-hp-scratch
|
||||
|
||||
--- guest 9202
|
||||
total used free shared buff/cache available
|
||||
Mem: 25898 408 22139 8 3358 25489
|
||||
|
||||
Filesystem Size Used Avail Use% Mounted on
|
||||
/dev/loop0 32G 1.9G 28G 7% /
|
||||
/dev/loop0 32G 1.9G 28G 7% /mnt
|
||||
|
||||
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
|
||||
Images 26 7 9.033GB 5.53GB (61%)
|
||||
Containers 7 7 53.11MB 0B (0%)
|
||||
Local Volumes 8 8 16.02MB 0B (0%)
|
||||
Build Cache 0 0 0B 0B
|
||||
--- where 9202's disks live
|
||||
cores: 7
|
||||
memory: 25898
|
||||
mp0: nvme-scratch:9202/vm-9202-disk-1.raw,mp=/var/lib/felhom,backup=1,size=70G
|
||||
mp8: /mnt/hdd_1/scratch-drives/scratch_hdd,mp=/mnt/felhom-drives/scratch_hdd
|
||||
mp9: /var/lib/felhom-agent/guests/9202/bootstrap,mp=/etc/felhom-bootstrap,ro=1
|
||||
rootfs: nvme-scratch:9202/vm-9202-disk-0.raw,size=32G
|
||||
|
||||
--- 9202 docker data root + free space
|
||||
/var/lib/docker
|
||||
Filesystem Size Used Avail Use% Mounted on
|
||||
/dev/loop1 69G 9.3G 56G 15% /var/lib/felhom
|
||||
/dev/nvme0n1 938G 19G 872G 3% /mnt/felhom-drives/scratch_hdd
|
||||
@@ -0,0 +1,86 @@
|
||||
# Draft — facts to add under `09` §3b, Q2–Q6
|
||||
|
||||
**The questions stay the operator's. No recommendation changes below; where one is strengthened or
|
||||
weakened by tonight's measurement, that is said in those words and the recommendation itself is left
|
||||
exactly as written.** Numbers marked `<…>` are filled from the verdict records at the end of the run.
|
||||
|
||||
---
|
||||
|
||||
## Under Q2 — *May an automatic update run on a bind-data app when no copy holds its FILES?*
|
||||
|
||||
**MEASURED 2026-09-21 (update night).** The hold sentence Q2 turns on was read verbatim off a real
|
||||
failure, not from source. `adventurelog v0.12.1 → v0.13.0` held and said:
|
||||
|
||||
> „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.**"
|
||||
|
||||
So the machinery Q2's first option would key on **exists and works**: the sentence names the tier,
|
||||
the date, **and what the copy holds**, and it does so on a real edge with no prompting. The question
|
||||
of whether the AUTOMATIC rule should differ from the button's is untouched by this — it is still a
|
||||
choice, and it is still the operator's.
|
||||
|
||||
**And one thing Q2 did not ask, which tonight makes urgent: after the hold, nobody can find out WHY.**
|
||||
`failAndHold` removes the containers, so the failing version's own output is gone within seconds
|
||||
(**R-621**). With a person pressing, they at least watched it happen. With nobody pressing, the only
|
||||
account of the night is a sentence that says the app did not come up.
|
||||
|
||||
---
|
||||
|
||||
## Under Q3 — *What counts as "within a major" when the tag is not a version number?*
|
||||
|
||||
**MEASURED 2026-09-21, by running the comparator rather than reading it.** `CompareImageRefs` orders
|
||||
a reference carrying a `host:port/` prefix correctly — `splitImageRef` takes the LAST colon and
|
||||
rejects it only when a `/` follows, so a registry port is never mistaken for a tag. Four positive
|
||||
cases and one negative control (different repositories → not orderable). This matters because it is
|
||||
what made the whole unattended-hold leg possible: the drill edge `localhost:5000/drill/glance:1.0.0
|
||||
→ :1.0.1` **passes** the within-a-major test and still fails, which no real catalog move does.
|
||||
|
||||
**The recommendation is unchanged.** The extension it already names — expose the parsed major from
|
||||
the same normaliser — is still owed.
|
||||
|
||||
---
|
||||
|
||||
## Under Q4 — *A held app: who is told, when, and does the box try again?*
|
||||
|
||||
**MEASURED 2026-09-21 (update night), and this is the half that was missing.** <Q4>
|
||||
|
||||
---
|
||||
|
||||
## Under Q5 — *PostgreSQL: what has to exist before the catalog may move `postgres:16` to `17`?*
|
||||
|
||||
**MEASURED 2026-09-21, both halves, on a real seeded datadir.**
|
||||
|
||||
**(a) What a household would see today.** <Q5A>
|
||||
|
||||
**(b) The conversion rehearsal, costed.** <Q5B>
|
||||
|
||||
**(c) A fact about the instrument, not the engine.** The harness's own PostgreSQL probe is
|
||||
`cat /var/lib/postgresql/data/PG_VERSION` **inside the container** (`upgrade-test.py` `ENGINE_PROBES`).
|
||||
<Q5C>
|
||||
|
||||
**The recommendation is unchanged** — a scripted conversion edge proven on all eleven before the
|
||||
catalog may move, and the gate stays until it lands. Tonight gives it a price rather than a new
|
||||
opinion.
|
||||
|
||||
---
|
||||
|
||||
## Under Q6 — *Should the catalog record each pin's DIGEST at push time?*
|
||||
|
||||
**MEASURED ON A BOX 2026-09-21 (update night), leg B8.** §8.1's numbers came from a registry sweep
|
||||
run on DooPlex; this is the same question asked of a customer-shaped box, where the badge actually
|
||||
renders. <Q6>
|
||||
|
||||
**The recommendation is unchanged** — yes, and it is still the cheapest real improvement on the list.
|
||||
|
||||
---
|
||||
|
||||
## Not a question, but it belongs beside them
|
||||
|
||||
**The night could not measure a single event or a single customer mail**, because the scratch guest
|
||||
runs with `hub.enabled: false` and every notifier entry point returns before it logs anything
|
||||
(**R-620**). Every Q4-shaped question about *who is told* therefore rests tonight on what the
|
||||
household READS — the app page, the dashboard, the backups page — and not on what is SENT. Recorded
|
||||
as the limit it is: the venue that is safe enough to break apps on is the one that cannot mail
|
||||
anybody, and that is not a coincidence to design around silently.
|
||||
@@ -0,0 +1,63 @@
|
||||
# Draft section for `09-update-architecture.md` — the standing method for update drills
|
||||
|
||||
*(To be inserted after §6.4. Written here first so the audit and the architecture stay in step.)*
|
||||
|
||||
---
|
||||
|
||||
## 6.5 The drill catalog and the image store — the standing method for update drills
|
||||
|
||||
**Why this section exists.** On 2026-09-21 an afternoon session put a deliberately broken image into
|
||||
the LIVE catalog for thirteen minutes to produce a failing edge. It was reverted and nothing reached
|
||||
a customer, but the method was wrong and the brief that asked for it said so. This is the method that
|
||||
replaces it, proven the same night.
|
||||
|
||||
**The rule, and it has no exception:** *nothing broken, dummy, cross-repo or engine-major ever enters
|
||||
the live catalog — not as a fallback, not for thirteen minutes. If a leg cannot be done without that,
|
||||
the leg is skipped and named.*
|
||||
|
||||
### The two mechanisms
|
||||
|
||||
| | what it is | what it makes possible |
|
||||
|---|---|---|
|
||||
| **the drill catalog** | `admin/app-catalog-drill` on Gitea — private, a copy of the live catalog's `main` | a scratch box can be pointed at a catalog where a failing edge is *committable*, because it carries none of the live repo's gates |
|
||||
| **the image store** | a `registry:2` container on the scratch guest at `127.0.0.1:5000` | an edge that **passes the within-a-major test and still fails** — the one shape a real catalog move cannot produce |
|
||||
|
||||
**The image store is not a convenience.** `09` §3b Q4 could not be measured for a year of drills
|
||||
because the only failing edges available were across-a-major, and the within-a-major rule — correctly
|
||||
— refuses those before the guarded update is ever reached. *The rule that makes automatic updates
|
||||
safe is the same rule that refuses the obvious way to break one.* Measuring an unattended HOLD needs
|
||||
`drill/<app>:X.Y.Z` (the real image, retagged) against `drill/<app>:X.Y.(Z+1)` (a built image that
|
||||
starts, stays up and never serves) — same repository, same major, plain version tags. A third
|
||||
flavour, a tag simply **absent** from the store, gives the pull-failure leg.
|
||||
|
||||
`stacks.CompareImageRefs` orders a `host:port/` reference correctly: `splitImageRef` takes the last
|
||||
colon and rejects it only when a `/` follows, so a registry port is never read as a tag. **Proven by
|
||||
running it**, four positive cases and a negative control, 2026-09-21.
|
||||
|
||||
### Pointing a box at the drill catalog — the step that is NOT obvious
|
||||
|
||||
**`git.repo_url` alone is inert.** `Syncer.gitCloneOrPull` clones only when the cache has no `.git`;
|
||||
otherwise it fetches from the remote the clone already stores. The cache directory must be removed as
|
||||
well, or the box goes on following the live catalog and reports success. Filed as **R-615**; until it
|
||||
is fixed, the drill procedure is:
|
||||
|
||||
1. save `controller.yaml` as `controller.yaml.pre-update-night`;
|
||||
2. set `git.repo_url` (and `username`/`token` — the drill repo is private);
|
||||
3. **remove `<data>/catalog-cache`**;
|
||||
4. restart the controller, sync, **rescan** (R-607: a sync can answer „nincs változás" while the
|
||||
catalog has moved, and the badge answers from the stale value until the rescan);
|
||||
5. **three controls, all quoted in the report** — the drill bump appears on the scratch box; the
|
||||
other boxes' caches are unchanged; the live catalog's `main` hash is unchanged.
|
||||
|
||||
### What the drill must leave behind
|
||||
|
||||
- `controller.yaml` restored from the saved copy, the controller restarted, and `git.repo_url` **read
|
||||
back and quoted** as the live catalog.
|
||||
- The registry container and its volume removed; drill images removed **by name**. Never `prune`.
|
||||
- The drill repo **kept**, private, reset to the live catalog's `main`, so the next drill starts clean.
|
||||
- A diff of every `image:` line against the live catalog's `main` — expected: identical.
|
||||
|
||||
### The fence
|
||||
|
||||
Only a scratch guest is ever pointed at the drill catalog. The drill repo's README says so, and no
|
||||
customer box has credentials for it. The store listens on the guest's loopback only.
|
||||
@@ -0,0 +1,52 @@
|
||||
=== 1. registry:2 on 127.0.0.1:5000
|
||||
registry /v2/ http=200
|
||||
=== 2. GOOD tag 1.0.0 = the real glance image retagged
|
||||
localhost:5000/drill/glance:1.0.0
|
||||
=== 3. BAD tag 1.0.1 = starts, stays up, never serves
|
||||
sha256:91c3018c4706e1061b590899adcdb4d92063f82dacf7d662c77472bb878d1f4b
|
||||
localhost:5000/drill/glance:1.0.1
|
||||
=== 4. tags in the store (1.0.2 deliberately ABSENT for the pull-fail leg)
|
||||
{"name":"drill/glance","tags":["1.0.1","1.0.0"]}
|
||||
|
||||
manifest 1.0.2 (must be 404): 404
|
||||
zz_drill_tmp_test.go:23: OK CompareImageRefs("localhost:5000/drill/glance:1.0.0","localhost:5000/drill/glance:1.0.1") = (-1,true)
|
||||
zz_drill_tmp_test.go:23: OK CompareImageRefs("localhost:5000/drill/glance:1.0.1","localhost:5000/drill/glance:1.0.0") = (1,true)
|
||||
zz_drill_tmp_test.go:23: OK CompareImageRefs("localhost:5000/drill/glance:1.0.0","localhost:5000/drill/glance:1.0.0") = (0,true)
|
||||
zz_drill_tmp_test.go:23: OK CompareImageRefs("localhost:5000/drill/glance:1.0.0","localhost:5000/drill/glance:1.0.2") = (-1,true)
|
||||
zz_drill_tmp_test.go:23: OK CompareImageRefs("localhost:5000/drill/glance:1.0.0","glanceapp/glance:1.0.1") = (0,false)
|
||||
--- PASS: TestDrillNightCompareLocalRegistryRefs (0.00s)
|
||||
PASS
|
||||
ok gitea.dooplex.hu/admin/felhom-controller/internal/stacks 0.007s
|
||||
=== drill/pdf:1.0.0 = the real bentopdf image retagged (for the pull-fail leg B2)
|
||||
localhost:5000/drill/pdf:1.0.0
|
||||
=== drill/glance:1.0.2 = the FIXED next version (for B6: the way out forwards)
|
||||
localhost:5000/drill/glance:1.0.2
|
||||
=== store contents now
|
||||
drill/glance: {"name":"drill/glance","tags":["1.0.1","1.0.2","1.0.0"]}
|
||||
|
||||
drill/pdf: {"name":"drill/pdf","tags":["1.0.0"]}
|
||||
|
||||
=== drill/pdf:1.0.1 must be ABSENT (the pull-fail tag)
|
||||
manifest drill/pdf:1.0.1 = 404 (must be 404)
|
||||
localhost:5000/drill/paste:2.0.0
|
||||
localhost:5000/drill/paste:2.0.1
|
||||
drill/paste 2.0.0 + 2.0.1 <- privatebin/pdo:2.0.6
|
||||
localhost:5000/drill/pdf:2.0.0
|
||||
localhost:5000/drill/pdf:2.0.1
|
||||
drill/pdf 2.0.0 + 2.0.1 <- ghcr.io/alam00000/bentopdf:v2.8.6
|
||||
localhost:5000/drill/wishes:2.0.0
|
||||
localhost:5000/drill/wishes:2.0.1
|
||||
drill/wishes 2.0.0 + 2.0.1 <- ghcr.io/cmintey/wishlist:v0.67.0
|
||||
localhost:5000/drill/status:2.0.0
|
||||
localhost:5000/drill/status:2.0.1
|
||||
drill/status 2.0.0 + 2.0.1 <- louislam/uptime-kuma:2.5.1
|
||||
localhost:5000/drill/gist:2.0.0
|
||||
localhost:5000/drill/gist:2.0.1
|
||||
drill/gist 2.0.0 + 2.0.1 <- ghcr.io/thomiceli/opengist:1.13
|
||||
=== store now:
|
||||
{"repositories":["drill/gist","drill/glance","drill/paste","drill/pdf","drill/status","drill/wishes"]}
|
||||
|
||||
=== drill/pdf tags (1.0.1 must STILL be absent for B2):
|
||||
{"name":"drill/pdf","tags":["2.0.0","2.0.1","1.0.0"]}
|
||||
|
||||
drill/pdf:1.0.1 = 404 (must be 404)
|
||||
@@ -0,0 +1,67 @@
|
||||
probe-port sweep — all 53 templates, catalog f5f6a152b513, 2026-09-21
|
||||
compares each .felhom.yml http probe port against the compose's traefik loadbalancer port
|
||||
NOTE: a difference is a CANDIDATE, not a defect — adventurelog differs and is healthy,
|
||||
because the probe targets the backend container while the traefik ports belong to the
|
||||
frontend. Only a live measurement decides.
|
||||
|
||||
actualbudget probe=['5006'] traefik=['5006'] services~ 3 ok
|
||||
adventurelog probe=['8000'] traefik=['80', '3000'] services~ 7 DIFFERS
|
||||
audiobookshelf probe=['80'] traefik=['80'] services~ 4 ok
|
||||
bentopdf probe=['8080'] traefik=['8080'] services~ 2 ok
|
||||
bookstack probe=['80'] traefik=['80'] services~ 6 ok
|
||||
calcom probe=['3000'] traefik=['3000'] services~ 5 ok
|
||||
calibre-web probe=['8083'] traefik=['8083'] services~ 3 ok
|
||||
claper probe=['4000'] traefik=['4000'] services~ 6 ok
|
||||
code-server probe=['8443'] traefik=['8443'] services~ 3 ok
|
||||
crafty-controller probe=['8443'] traefik=['8443'] services~ 7 ok
|
||||
docmost probe=['3000'] traefik=['3000'] services~ 8 ok
|
||||
emby probe=['8096'] traefik=['8096'] services~ 3 ok
|
||||
ghost probe=['2368'] traefik=['2368'] services~ 3 ok
|
||||
gitea probe=['3000'] traefik=['3000'] services~ 3 ok
|
||||
glance probe=['8080'] traefik=['8080'] services~ 3 ok
|
||||
gokapi probe=['53842'] traefik=['53842'] services~ 4 ok
|
||||
grafana probe=['3000'] traefik=['3000'] services~ 3 ok
|
||||
gramps-web probe=['5000'] traefik=['5000'] services~10 ok
|
||||
home-assistant probe=['8123'] traefik=['8123'] services~ 3 ok
|
||||
homebox probe=['7745'] traefik=['7745'] services~ 3 ok
|
||||
homepage probe=['3000'] traefik=['3000'] services~ 3 ok
|
||||
immich probe=['2283'] traefik=['2283'] services~ 9 ok
|
||||
jellyfin probe=['8096'] traefik=['8096'] services~ 4 ok
|
||||
kimai probe=['8001'] traefik=['8001'] services~ 6 ok
|
||||
komga probe=['25600'] traefik=['25600'] services~ 3 ok
|
||||
mealie probe=['9000'] traefik=['9000'] services~ 3 ok
|
||||
n8n probe=['5678'] traefik=['5678'] services~ 3 ok
|
||||
navidrome probe=['4533'] traefik=['4533'] services~ 3 ok
|
||||
nextcloud probe=['80'] traefik=['80'] services~ 8 ok
|
||||
onlyoffice probe=['80'] traefik=['80'] services~ 4 ok
|
||||
opengist probe=['6157'] traefik=['6157'] services~ 3 ok
|
||||
outline probe=['3000'] traefik=['3000'] services~ 8 ok
|
||||
paperless-ngx probe=['8000'] traefik=['8000'] services~ 8 ok
|
||||
papra probe=['1221'] traefik=['1221'] services~ 3 ok
|
||||
plant-it probe=['8080'] traefik=['8080'] services~ 4 ok
|
||||
plex probe=['32400'] traefik=['32400'] services~ 4 ok
|
||||
privatebin probe=['8080'] traefik=['8080'] services~ 3 ok
|
||||
radarr probe=['7878'] traefik=['7878'] services~ 3 ok
|
||||
rallly probe=['3000'] traefik=['3000'] services~ 5 ok
|
||||
recipe-importer probe=['8000'] traefik=['8000'] services~ 3 ok
|
||||
romm probe=['8080'] traefik=['8080'] services~ 8 ok
|
||||
seerr probe=['5055'] traefik=['5055'] services~ 3 ok
|
||||
sonarr probe=['8989'] traefik=['8989'] services~ 3 ok
|
||||
sparkyfitness probe=['80'] traefik=['80'] services~ 8 ok
|
||||
tandoor probe=['8080'] traefik=['80'] services~ 7 DIFFERS
|
||||
termix probe=['8080'] traefik=['8080'] services~ 3 ok
|
||||
uptime-kuma probe=['3001'] traefik=['3001'] services~ 3 ok
|
||||
vaultwarden probe=['80'] traefik=['80'] services~ 3 ok
|
||||
vikunja probe=['3456'] traefik=['3456'] services~ 4 ok
|
||||
wanderer probe=['3000'] traefik=['3000', '8090'] services~ 9 ok
|
||||
wger probe=['80'] traefik=['8000'] services~ 4 DIFFERS
|
||||
wishlist probe=['3000'] traefik=['3000'] services~ 4 ok
|
||||
zipline probe=['3000'] traefik=['3000'] services~ 7 ok
|
||||
|
||||
DIFFERS: ['adventurelog', 'tandoor', 'wger']
|
||||
|
||||
LIVE MEASUREMENT on guest 9202, 2026-09-21:
|
||||
tandoor : container listens on 80 ONLY (ss -ltn), docker healthcheck=healthy,
|
||||
front door /accounts/login/ = 200, controller state = 'unhealthy' -> DEFECT
|
||||
adventurelog : controller state = 'running' -> NOT a defect
|
||||
wger : NOT DEPLOYED TONIGHT — suspected, explicitly unmeasured
|
||||
@@ -0,0 +1,21 @@
|
||||
=== 9202 notifier state, 2026-09-21 — why the event/mail half is unmeasurable here
|
||||
|
||||
controller.yaml hub block on guest 9202:
|
||||
hub: { api_key: "", enabled: false, push_interval: 15m, url: "" }
|
||||
|
||||
the box says so once, at startup, and never again:
|
||||
notifier.go:75 [INFO] Notifier disabled (hub not configured)
|
||||
main.go:642 [INFO] [mailrelay] app-email shim unavailable (no hub configured or disabled in config)
|
||||
selftest.go:68 [INFO] [PASS] Hub connectivity: hub disabled, skipped
|
||||
|
||||
and every event path returns BEFORE it logs anything:
|
||||
notify/notifier.go:269 Publish -> if !n.enabled { return }
|
||||
notify/notifier.go:359 NotifyHealthChange -> if !n.enabled { return }
|
||||
notify/notifier.go:867 SyncPreferences -> refuses with a message (the one that does speak)
|
||||
notify/notifier.go:917, :959, :1058 the remaining entry points, all silent
|
||||
|
||||
CONSEQUENCE FOR TONIGHT, stated rather than worked around:
|
||||
the alarm truth table covers the app page, the dashboard and the controller log ONLY.
|
||||
no hub event and no customer mail could be produced or observed on this venue.
|
||||
the hub was NOT enabled on 9202 to get around this: that would register an unclaimed
|
||||
host at the live hub and could mail a real address, and the brief fences the hub.
|
||||
@@ -0,0 +1,64 @@
|
||||
PROBE SWEEP 2 — the .felhom.yml controller probe vs the compose's OWN healthcheck
|
||||
catalog f5f6a152b513, 2026-09-21. Purely static: both live in the SAME template, so where
|
||||
both exist and disagree on PORT or PATH, one of them is wrong — no runtime needed.
|
||||
|
||||
actualbudget felhom(port=['5006'],path=[]) compose(port=['5006'],path=['/']) -> agree
|
||||
adventurelog felhom(port=['8000'],path=['/api/']) compose(port=['3000', '8000'],path=['/api/\\']) -> DISAGREE:PATH
|
||||
audiobookshelf felhom(port=['80'],path=['/healthcheck']) compose(port=['80'],path=['/healthcheck']) -> agree
|
||||
bentopdf felhom(port=['8080'],path=[]) compose(port=['8080'],path=[]) -> agree
|
||||
bookstack felhom(port=['80'],path=[]) compose(port=['80'],path=[]) -> agree
|
||||
calcom felhom(port=['3000'],path=['/api/auth/providers']) compose(port=['3000'],path=['/api/auth/providers']) -> agree
|
||||
calibre-web felhom(port=['8083'],path=[]) compose(port=['8083'],path=[]) -> agree
|
||||
claper felhom(port=['4000'],path=[]) compose(port=['4000'],path=[]) -> agree
|
||||
code-server felhom(port=['8443'],path=['/healthz']) compose(port=['8443'],path=['/healthz']) -> agree
|
||||
crafty-controller felhom(port=['8443'],path=[]) compose(port=None,path=None) -> compose has no http healthcheck
|
||||
docmost felhom(port=['3000'],path=[]) compose(port=['3000'],path=['/']) -> agree
|
||||
emby felhom(port=['8096'],path=['/emby/system/ping']) compose(port=['8096'],path=['/emby/system/ping']) -> agree
|
||||
ghost felhom(port=['2368'],path=[]) compose(port=['2368'],path=['/']) -> agree
|
||||
gitea felhom(port=['3000'],path=['/api/healthz']) compose(port=['3000'],path=['/api/healthz']) -> agree
|
||||
glance felhom(port=['8080'],path=[]) compose(port=['8080'],path=[]) -> agree
|
||||
gokapi felhom(port=['53842'],path=[]) compose(port=['53842'],path=[]) -> agree
|
||||
grafana felhom(port=['3000'],path=['/api/health']) compose(port=['3000'],path=['/api/health']) -> agree
|
||||
gramps-web felhom(port=['5000'],path=[]) compose(port=['5000'],path=[]) -> agree
|
||||
home-assistant felhom(port=['8123'],path=['/api/']) compose(port=['8123'],path=['/manifest.json']) -> DISAGREE:PATH
|
||||
homebox felhom(port=['7745'],path=['/api/v1/status']) compose(port=['7745'],path=['/api/v1/status']) -> agree
|
||||
homepage felhom(port=['3000'],path=[]) compose(port=['3000'],path=[]) -> agree
|
||||
immich felhom(port=['2283'],path=['/api/server/ping']) compose(port=['2283', '3003'],path=['/api/server/ping', '/ping']) -> agree
|
||||
jellyfin felhom(port=['8096'],path=['/health']) compose(port=['8096'],path=['/health']) -> agree
|
||||
kimai felhom(port=['8001'],path=[]) compose(port=['8001'],path=[]) -> agree
|
||||
komga felhom(port=['25600'],path=['/actuator/health']) compose(port=['25600'],path=['/actuator/health']) -> agree
|
||||
mealie felhom(port=['9000'],path=[]) compose(port=None,path=None) -> compose has no http healthcheck
|
||||
n8n felhom(port=['5678'],path=['/healthz']) compose(port=['5678'],path=['/healthz']) -> agree
|
||||
navidrome felhom(port=['4533'],path=['/ping']) compose(port=['4533'],path=['/ping']) -> agree
|
||||
nextcloud felhom(port=['80'],path=['/status.php']) compose(port=['80'],path=['/status.php']) -> agree
|
||||
onlyoffice felhom(port=['80'],path=['/healthcheck']) compose(port=['80'],path=['/healthcheck']) -> agree
|
||||
opengist felhom(port=['6157'],path=['/healthcheck']) compose(port=['6157'],path=['/healthcheck']) -> agree
|
||||
outline felhom(port=['3000'],path=['/_health']) compose(port=['3000'],path=['/_health']) -> agree
|
||||
paperless-ngx felhom(port=['8000'],path=[]) compose(port=['8000'],path=[]) -> agree
|
||||
papra felhom(port=['1221'],path=[]) compose(port=['1221'],path=[]) -> agree
|
||||
plant-it felhom(port=['8080'],path=['/api/info']) compose(port=['8080'],path=['/api/info']) -> agree
|
||||
plex felhom(port=['32400'],path=['/identity']) compose(port=['32400'],path=['/identity']) -> agree
|
||||
privatebin felhom(port=['8080'],path=[]) compose(port=['8080'],path=[]) -> agree
|
||||
radarr felhom(port=['7878'],path=['/ping']) compose(port=['7878'],path=['/ping']) -> agree
|
||||
rallly felhom(port=['3000'],path=[]) compose(port=['3000'],path=[]) -> agree
|
||||
recipe-importer felhom(port=['8000'],path=['/health']) compose(port=['8000'],path=['/health']) -> agree
|
||||
romm felhom(port=['8080'],path=[]) compose(port=['8080'],path=['/']) -> agree
|
||||
seerr felhom(port=['5055'],path=['/api/v1/status']) compose(port=['5055'],path=['/api/v1/status']) -> agree
|
||||
sonarr felhom(port=['8989'],path=['/ping']) compose(port=['8989'],path=['/ping']) -> agree
|
||||
sparkyfitness felhom(port=['80'],path=[]) compose(port=['3010', '80'],path=['/', '/api/health']) -> agree
|
||||
tandoor felhom(port=['8080'],path=['/accounts/login/']) compose(port=['80'],path=['/accounts/login/']) -> DISAGREE:PORT
|
||||
termix felhom(port=['8080'],path=[]) compose(port=['8080'],path=[]) -> agree
|
||||
uptime-kuma felhom(port=['3001'],path=[]) compose(port=None,path=None) -> compose has no http healthcheck
|
||||
vaultwarden felhom(port=['80'],path=['/alive']) compose(port=['80'],path=['/alive']) -> agree
|
||||
vikunja felhom(port=['3456'],path=['/api/v1/info']) compose(port=None,path=None) -> compose has no http healthcheck
|
||||
wanderer felhom(port=['3000'],path=[]) compose(port=['3000', '7700', '8090'],path=['/', '/health']) -> agree
|
||||
wger felhom(port=['80'],path=[]) compose(port=['8000'],path=[]) -> DISAGREE:PORT
|
||||
wishlist felhom(port=['3000'],path=[]) compose(port=['3000'],path=[]) -> agree
|
||||
zipline felhom(port=['3000'],path=['/api/health']) compose(port=['3000'],path=['/api/healthcheck']) -> DISAGREE:PATH
|
||||
|
||||
DISAGREEMENTS: 5
|
||||
adventurelog DISAGREE:PATH felhom=['8000'],['/api/'] compose=['3000', '8000'],['/api/\\']
|
||||
home-assistant DISAGREE:PATH felhom=['8123'],['/api/'] compose=['8123'],['/manifest.json']
|
||||
tandoor DISAGREE:PORT felhom=['8080'],['/accounts/login/'] compose=['80'],['/accounts/login/']
|
||||
wger DISAGREE:PORT felhom=['80'],[] compose=['8000'],[]
|
||||
zipline DISAGREE:PATH felhom=['3000'],['/api/health'] compose=['3000'],['/api/healthcheck']
|
||||
@@ -0,0 +1,77 @@
|
||||
PROBE SWEEP 3 — the SHARPENED rule, read from healthprobe.go rather than assumed
|
||||
catalog f5f6a152b513, 2026-09-21, controller v0.261.0
|
||||
|
||||
type: http -> ANY response is healthy. ONLY THE PORT MATTERS.
|
||||
type: api with NO expect block -> same as http (healthprobe.go:265). ONLY THE PORT.
|
||||
type: api WITH expect.status -> the PORT, the PATH and the STATUS all matter.
|
||||
|
||||
So a probe/compose PATH difference is only a candidate when the type is `api` WITH expect.
|
||||
|
||||
actualbudget type=http port=5006 path=None ok
|
||||
adventurelog type=api port=8000 path=/api/ PATH /api/ not in compose ['/api/\\'] (and expect={'status': 200}) <<< CANDIDATE
|
||||
audiobookshelf type=api port=80 path=/healthcheck ok
|
||||
bentopdf type=http port=8080 path=None ok
|
||||
bookstack type=http port=80 path=None ok
|
||||
calcom type=api port=3000 path=/api/auth/providers ok
|
||||
calibre-web type=http port=8083 path=None ok
|
||||
claper type=http port=4000 path=None ok
|
||||
code-server type=api port=8443 path=/healthz ok
|
||||
crafty-controller type=tcp port=8443 path=None ok
|
||||
docmost type=http port=3000 path=None ok
|
||||
emby type=api port=8096 path=/emby/system/ping ok
|
||||
ghost type=http port=2368 path=None ok
|
||||
gitea type=api port=3000 path=/api/healthz ok
|
||||
glance type=http port=8080 path=None ok
|
||||
gokapi type=http port=53842 path=None ok
|
||||
grafana type=api port=3000 path=/api/health ok
|
||||
gramps-web type=http port=5000 path=None ok
|
||||
home-assistant type=api port=8123 path=/api/ ok
|
||||
homebox type=api port=7745 path=/api/v1/status ok
|
||||
homepage type=http port=3000 path=None ok
|
||||
immich type=api port=2283 path=/api/server/ping ok
|
||||
jellyfin type=api port=8096 path=/health ok
|
||||
kimai type=http port=8001 path=None ok
|
||||
komga type=api port=25600 path=/actuator/health ok
|
||||
mealie type=tcp port=9000 path=None ok
|
||||
n8n type=api port=5678 path=/healthz ok
|
||||
navidrome type=api port=4533 path=/ping ok
|
||||
nextcloud type=api port=80 path=/status.php ok
|
||||
onlyoffice type=api port=80 path=/healthcheck ok
|
||||
opengist type=api port=6157 path=/healthcheck ok
|
||||
outline type=api port=3000 path=/_health ok
|
||||
paperless-ngx type=http port=8000 path=None ok
|
||||
papra type=http port=1221 path=None ok
|
||||
plant-it type=api port=8080 path=/api/info ok
|
||||
plex type=api port=32400 path=/identity ok
|
||||
privatebin type=http port=8080 path=None ok
|
||||
radarr type=api port=7878 path=/ping ok
|
||||
rallly type=http port=3000 path=None ok
|
||||
recipe-importer type=api port=8000 path=/health ok
|
||||
romm type=http port=8080 path=None ok
|
||||
seerr type=api port=5055 path=/api/v1/status ok
|
||||
sonarr type=api port=8989 path=/ping ok
|
||||
sparkyfitness type=http port=80 path=None ok
|
||||
tandoor type=http port=8080 path=/accounts/login/ PORT 8080 not in compose ['80'] <<< CANDIDATE
|
||||
termix type=http port=8080 path=None ok
|
||||
uptime-kuma type=http port=3001 path=None ok
|
||||
vaultwarden type=api port=80 path=/alive ok
|
||||
vikunja type=api port=3456 path=/api/v1/info ok
|
||||
wanderer type=http port=3000 path=None ok
|
||||
wger type=http port=80 path=None PORT 80 not in compose ['8000'] <<< CANDIDATE
|
||||
wishlist type=http port=3000 path=None ok
|
||||
zipline type=api port=3000 path=/api/health PATH /api/health not in compose ['/api/healthcheck'] (and expect={'status': 200}) <<< CANDIDATE
|
||||
|
||||
CANDIDATES: 4 -> ['adventurelog', 'tandoor', 'wger', 'zipline']
|
||||
|
||||
LIVE RESULTS 2026-09-21 on guest 9202:
|
||||
tandoor CONFIRMED DEFECT probe type http port 8080; the container listens on 80 ONLY.
|
||||
Connection refused every time -> the box reads `unhealthy` while the app serves 200.
|
||||
zipline CONFIRMED DEFECT probe type api + expect 200 on /api/health; zipline 4.6.1
|
||||
answers 404 there. The COMPOSE healthcheck in the same file uses /api/healthcheck
|
||||
and is green. The box reads `unhealthy` while /dashboard answers 200.
|
||||
wger SUSPECTED, NOT MEASURED. type http, port 80; wger/server serves 8000 and the
|
||||
template's own traefik label says 8000. Not deployed tonight.
|
||||
home-assistant NOT a defect, MEASURED: type api with NO expect block, so any response passes —
|
||||
/api/ answers 401 without a token and that is healthy. Edge PROVEN tonight.
|
||||
adventurelog NOT a defect, MEASURED: type api + expect 200 on /api/ port 8000, reads `running`.
|
||||
|
||||
@@ -0,0 +1,57 @@
|
||||
# Morning note — to go on top of `STATUS.md`
|
||||
|
||||
*(Draft. Numbers marked `<…>` are filled from the verdict records at the end of the run.)*
|
||||
|
||||
---
|
||||
|
||||
**Updated 2026-09-21 (overnight) — I tested the "update my app" button on as many apps as fit in a
|
||||
night, on good days and bad ones. <P> updates are proven safe. One is proven dangerous, and the
|
||||
machine handled it exactly right.**
|
||||
|
||||
**Decisions I took on my own: none.** Nothing tonight needed a choice you had not already made.
|
||||
|
||||
**The fleet version is now 0.261.0.** You asked for that. Both demo machines took it **thirteen
|
||||
seconds** after I saved it. The third machine is switched off and will take it when it comes back.
|
||||
|
||||
**What I exercised.** <N> real app updates, each one installed at the version our catalog has today,
|
||||
filled with real data through the app's own front door, backed up, updated to the newer version that
|
||||
really exists upstream, and then the data read back. Plus the two database engines, and the bad days.
|
||||
|
||||
**The one that matters most.** *Adventurelog's newer version rewrites the customer's database and then
|
||||
never starts.* The machine did everything right: it took a backup one minute before, waited the full
|
||||
five minutes, stopped the app so its data could not be damaged, and told the household in one sentence
|
||||
where the copy is, when it was made, and **what is inside it**. Then I pressed the restore the sentence
|
||||
names, and the app came back. **That app must not be moved to the newer version.**
|
||||
|
||||
**What broke, and whether the household could get out.**
|
||||
|
||||
<BROKE>
|
||||
|
||||
**Faults found, all written down, none fixed tonight.**
|
||||
|
||||
1. **Two apps tell the household they are broken when they are fine.** Tandoor's health check asks the
|
||||
wrong port; Zipline's asks a web address that app does not have — and the *same file* already
|
||||
contains the right answer in both cases. A cheap check would catch both.
|
||||
2. **When an update fails, the machine deletes the broken app's log before anyone can read it.** You
|
||||
get "it did not come up" and nothing else. Nobody can say why, or report it upstream.
|
||||
3. **Pointing a machine at a different app catalog does not work** — it keeps reading the old one and
|
||||
says everything is fine. Only matters when you need it, which is the problem.
|
||||
4. Smaller ones: a setting the machine calls optional and then refuses without; the catalog password
|
||||
stored in plain text inside the machine's own copy of the catalog.
|
||||
|
||||
**Rows opened and closed.** <ROWS>
|
||||
|
||||
**What needs you.**
|
||||
|
||||
1. **Rotate the Gitea `admin` token.** It was printed into my session log by an ordinary `git remote -v`
|
||||
— the machine stores it in plain text. *If you do nothing:* the token keeps working and anyone with
|
||||
my session transcript has it.
|
||||
2. **The promotion list** — <PROMO> updates proven safe enough to move on the real catalog. Moving a
|
||||
version is your call, never mine. *If you do nothing:* nothing breaks; those apps stay where they
|
||||
are and drift further from upstream each month.
|
||||
3. **The seven open questions** about automatic updates now have more facts beside them, and they are
|
||||
still yours. *If you do nothing:* the automatic-update work cannot start — every part of it hangs
|
||||
off the first question, which is simply *may the machine update apps by itself at night?*
|
||||
|
||||
**The live catalog was not touched at all tonight.** Not once, not for thirteen minutes. Everything
|
||||
ran against a private drill copy on a scratch machine, exactly as you asked.
|
||||
@@ -0,0 +1,45 @@
|
||||
# Rows minted by the update night, 2026-09-21 — staging, to be pasted into OPEN-ITEMS.md
|
||||
|
||||
Highest existing id at the start of the night: **R-614** (304 rows).
|
||||
|
||||
---
|
||||
|
||||
| **R-615** | **[P3-LOW] Pointing a box at a different app catalog by `git.repo_url` alone is INERT — the box keeps fetching from the repository it first cloned.** FOUND 2026-09-21 by reading `sync.go` **before** running it, which is the only reason the update night's drill catalog worked at all. `Syncer.gitCloneOrPull` (`controller/internal/sync/sync.go:274-306`) clones **only when `<data>/catalog-cache/.git` is absent**; on every later cycle it runs `git fetch --depth 1 origin <branch>` + `git reset --hard origin/<branch>` **against the remote stored in the clone**, which `buildRepoURL` wrote at clone time. Changing `git.repo_url` in `controller.yaml` and restarting therefore changes **nothing**: the sync keeps pulling the old catalog and reports success. Measured: after the repoint, `git -C <data>/catalog-cache remote -v` still read `app-catalog-felhom.eu`; the box only followed the drill repo once the cache directory was removed. **Why it matters beyond a drill:** this is the one knob that would move a box to a different or a staged catalog — for a migration, a per-customer catalog, or a rollback of the catalog itself — and it silently does not work. **Nothing is wrong with the CACHING**, which is right; what is missing is that a changed `repo_url` must invalidate the clone. **Fix shape:** on start, compare `git.repo_url` with the clone's `origin` and re-clone when they differ (or `git remote set-url` + a full fetch); log which happened. A test that changes `repo_url` under an existing cache and asserts the next sync reads the NEW repo — it fails today. Evidence: `audits/update-night-2026-09-21/04-9202-config-pre.txt`, `05-9202-follows-drill.txt`. | **READY — rank P3-LOW; owner: CC (controller)** |
|
||||
|
||||
| **R-616** | **[P3-LOW] The catalog credentials are stored in PLAINTEXT in the box's catalog clone and are printed by an ordinary `git remote -v`.** FOUND 2026-09-21 on guest 9202 while pointing it at a private drill catalog. `Syncer.buildRepoURL` injects `username:token` into the HTTPS URL, and `git clone` persists that URL as the clone's `origin`, so `<data>/catalog-cache/.git/config` holds the token in the clear and **any** diagnostic that prints the remote leaks it — which is what happened in this session's own transcript, and is the same shape as R-580 (`curl -w '%{redirect_url}'`). `maskRepoURL` exists and is used for the LOG lines, so the masking intent is already there; the stored remote is the half that was missed. **INERT ON THE FLEET TODAY** — the live catalog is public and `git.token` is empty on every real box — which is exactly why it should be fixed before it is not: the day the catalog goes private, every box carries a readable credential and every support session that runs `git remote -v` prints it. **Fix shape:** store the remote WITHOUT credentials and supply them per-fetch (a credential helper, `http.extraHeader`, or `GIT_ASKPASS`), and a test asserting the clone's stored `origin` contains no `@`. **Operator action from tonight, unrelated to the fix:** the Gitea `admin` token used for the drill repo was printed by that command and must be rotated. Evidence: `audits/update-night-2026-09-21/05-9202-follows-drill.txt` (redacted). | **READY — rank P3-LOW; owner: CC (controller); one operator action (rotate the Gitea admin token)** |
|
||||
|
||||
| **R-617** | **[P3-LOW] The Gitea API token this project uses for pushes cannot create a repository through the documented endpoint, but CAN through `repos/migrate` — so "the token cannot do it" was nearly recorded as a fact when the truth was "one endpoint refuses it".** FOUND 2026-09-21 creating the drill catalog. Both `~/.git-credentials` tokens carry `write:misc,write:notification,write:package,write:issue,write:repository`; `POST /api/v1/user/repos` requires `write:user` and answers **403**, and `POST /api/v1/admin/users/<u>/repos` requires `write:admin` and answers 403 too. `POST /api/v1/repos/migrate` with the same token answered **201** and created the private repository. **Why this is a row and not a note:** a session that stopped at the first 403 would have recorded "CC cannot create a Gitea repository" — an unfalsifiable capability claim of exactly the shape the workspace's standing rule 2 forbids — and every later drill would have been designed around a limit that does not exist. **What it needs:** one line in the operations notes saying which endpoint to use, and (optional, operator) a token scoped for the job so the migrate route is not load-bearing. Evidence: `audits/update-night-2026-09-21/03-drill-repo.txt`. | **READY — rank P3-LOW; owner: CC (docs)** |
|
||||
|
||||
| **R-618** | **[P2-MEDIUM] TWO apps are presented to the household as UNHEALTHY while they are working perfectly, and in both cases the SAME template already contains the right answer.** MEASURED 2026-09-21 on guest 9202 (controller v0.261.0, catalog `f5f6a152b513`). Two shapes, one class: **(a) `tandoor` — the WRONG PORT.** `.felhom.yml` probes `port: 8080`; the container listens on **80 and nothing else** (`ss -ltn` inside it), the compose's own traefik label routes to 80, its own docker healthcheck reads `healthy`, and `/accounts/login/` answers **200** through the household's real front door. `GET /api/stacks/tandoor` nevertheless reads `state: "unhealthy"`. **(b) `zipline` — the WRONG PATH.** `.felhom.yml` probes `/api/health`, which zipline 4.6.1 answers **404 `Route GET:/api/health not found`**; **the compose healthcheck in the very same file uses `/api/healthcheck` and is correct and green.** `/dashboard` answers 200. The controller reads `unhealthy`. **This is the MIRROR of R-613** — that is a probe that passes on a broken app (a false GREEN, which no alarm catches); this is a probe that fails on a working app (a false RED). **IT DOES NOT ALARM, AND THAT SETS THE RANK:** `08-alarm-ladder.md` §4 puts `unhealthy` deliberately in the NOT-down set, so no dead-app event and no customer mail follows — the damage is what the household READS, plus anything that gates on `state`. **IT ALREADY COST A MEASUREMENT TONIGHT:** this drill's harness waited for `state == "running"` and hung for its full budget on tandoor, an app that was up the whole time. An instrument waiting for a wrong answer looks exactly like a slow app. **THE GATE THIS WANTS IS CHEAP AND STATIC, AND THAT IS THE FINDING'S REAL VALUE.** Both halves of the answer live in the same template: compare the `.felhom.yml` probe's port and path against the compose's **own** `healthcheck: test:` URL. A sweep of all 53 templates on that rule was run tonight and returns **five** disagreements: `tandoor` (PORT — **CONFIRMED live**), `zipline` (PATH — **CONFIRMED live**), `wger` (PORT, probe 80 vs compose 8000 — **SUSPECTED, NOT MEASURED**, it was not deployed), `home-assistant` (PATH, `/api/` vs `/manifest.json` — **NOT MEASURED**), and `adventurelog` (a FALSE POSITIVE of the sweep's own regex — it reads `running` live). **So the rule finds both real defects, with two candidates and one false positive out of 53** — a good enough signal for a fast gate, provided it reports candidates rather than convictions and a person or a runtime check resolves them. The earlier, cruder rule (probe port vs the *traefik* port) is strictly worse: it clears zipline and convicts adventurelog. **Needs:** fix tandoor's port and zipline's path; measure wger and home-assistant; add the static gate with a decoy each way (R-421) — a template whose probe agrees must not read as a disagreement, and vice versa. **THE GATE'S RULE WAS THEN SHARPENED BY READING `healthprobe.go` RATHER THAN ASSUMING IT, and the sharpening REMOVED a false conviction.** `type: http` treats **any** response as healthy (`healthprobe.go:258-261`), and `type: api` with **no** `expect` block does the same (`:265-268`); only `type: api` WITH `expect.status` cares about the path or the code. So a PATH difference is a candidate only for the third shape, while a PORT difference is a candidate for all of them. Under that rule the 53-template sweep returns **four** candidates — `tandoor` and `zipline` (both CONFIRMED live), `wger` (suspected, unmeasured), and `adventurelog` (a false positive: its compose lists two containers' ports and the probe targets the backend; measured `running`). **`home-assistant` is correctly CLEARED by the sharpened rule** — `type: api`, no `expect`, so its `/api/` answering 401 without a token is healthy, and its edge was PROVEN on the box tonight. The crude rule convicted it; the rule read from the code does not. **That is the gate to build: two of 53 convicted, one suspected, one false positive, and the false positive is resolvable by one live check.** Evidence: `audits/update-night-2026-09-21/10-probe-port-sweep.txt`, `12-probe-vs-compose-healthcheck.txt` and `13-probe-sweep-sharpened.txt`. | **READY — rank P2-MEDIUM; owner: CC (catalog)** |
|
||||
|
||||
| **R-619** | **[P3-LOW] A `type: password` deploy field is MANDATORY however `required` reads, and the `deploy-fields` contract says the opposite — so any caller that trusts it is refused.** MEASURED 2026-09-21 on guest 9202 while widening the update drill. `GET /api/stacks/grafana/deploy-fields` serves `{"env_var":"GF_SECURITY_ADMIN_PASSWORD","type":"password","generate":"password:16","required":false}`; a deploy carrying only the two `required:true` fields is refused **400** „a(z) „Admin jelszó" mező kitöltése kötelező — használja a Generálás gombot…". **The BEHAVIOUR is right and is a decision, not a bug:** `deploy.go:305-312` refuses a `password` field with no caller value on purpose — *"We never silently auto-generate — the user needs to know their password"* — which is the opposite of the `secret` case one branch above, where a generated value the customer never sees is exactly correct. **The defect is the CONTRACT.** `.felhom.yml` declares `required: false`, the API serves that verbatim, and nothing on the wire distinguishes "optional because the box will generate it" (`secret`) from "optional in the template and mandatory in the code" (`password`). A person using the deploy page never meets this because the page renders a Generálás button; **anything that is not that page does**, which now includes this drill harness and would include `09` §6.2's unattended caller the day it deploys anything. **Fix shape (smallest that keeps the decision):** serve `required: true` for `type: password` in the deploy-fields response — one place, derived rather than stored, so templates need no edit — and a test asserting a `password` field always reaches the wire as required. Alternatively state it in the field's `description`, which is weaker because it is prose. Evidence: `audits/update-night-2026-09-21/apps/grafana/log.txt` (the refusal) and `batchA.log`. | **READY — rank P3-LOW; owner: CC (controller)** |
|
||||
|
||||
| **R-620** | **[P3-LOW] A disabled notifier drops every event with NO local trace, so a box whose hub configuration is absent or broken stops telling anyone anything and leaves nothing behind that says so.** FOUND 2026-09-21 on guest 9202 while trying to score the update night's alarm truth table. `hub.enabled: false` there, and `Notifier.Publish` returns at `notify/notifier.go:269` — **before** any log line — as do `NotifyHealthChange` (:359) and four more entry points. Startup says it once (`[INFO] Notifier disabled (hub not configured)`) and then every later event, of every severity up to `critical`, vanishes without a word. **The measurable consequence tonight:** the whole event-and-mail half of the drill was structurally unmeasurable on this venue, and the alarm truth table below covers only the app page, the dashboard and the box's own log. That is a cost this session paid and named; the next one would pay it again. **The consequence on a real box is smaller but not zero:** the fleet's boxes have the hub enabled, and total silence is already caught by the hub's dead-man's-switch (staleness from the LAST REPORT, proven in the 2026-07-22 power-outage audit). What is NOT caught is the in-between — a box that still reports but whose notifier was disabled by a bad config push would go on reporting healthy while dropping every alarm, and the only evidence would be a single INFO line at the last restart. **Fix shape:** one DEBUG (or WARN, once per event type) line on the disabled path naming the event that was dropped, so the absence is visible where it happens rather than inferable from a startup line. Cheap, and it converts an invisible failure into a greppable one — R-96 rule 3 in the place that produces it. Evidence: `audits/update-night-2026-09-21/11-notifier-disabled.txt`. | **READY — rank P3-LOW; owner: CC (controller)** |
|
||||
|
||||
| **R-621** | **[P2-MEDIUM] A held update DESTROYS the evidence of why it failed: `failAndHold` runs `compose down`, the failing containers are removed, and their output is gone before anyone — household, operator or the next session — can read it.** MEASURED 2026-09-21 on guest 9202 on a REAL upstream edge: `adventurelog v0.12.1 → v0.13.0`. The new backend applied **nine Django migrations successfully** and then never listened; the update held after the full 5-minute health wait. **`Manager.failAndHold` (`stacks/update.go:723`) calls `updateCompose(dir, env, "down")`**, which removes the containers rather than stopping them, and nothing captures their logs first. Within seconds the box's own log recorded `Logs result for adventurelog: 0 bytes returned (empty)` and `docker ps -a` held nothing at all. **What survives is the WHAT and not the WHY:** the controller line `update adventurelog FAILED after the new version was started: not healthy: not healthy within 5m0s (last: state unhealthy)` and the household's sentence, both of which say the app did not come up and neither of which says the migrations ran and the server then failed to bind. **This is R-320 ("evidence off the machine before the teardown") as a PRODUCT behaviour rather than a session habit** — the teardown here is the product's own, it is correct to perform (a half-started new version must not keep running), and it happens before anyone can look. **Why it matters beyond a drill:** the hold sentence sends the household to a restore, and after the restore the only remaining question is *should I press Update again?* — which nobody can answer, because the one artefact that would say so no longer exists. It also makes every future held update unreportable to an upstream project. **Fix shape:** capture `compose logs --no-color --tail N` into the stack directory (beside `applied-compose.yml`, which already travels with the stack) IMMEDIATELY before the `down`, and surface it on the app page's hold panel or at least through the existing `/api/stacks/<n>/logs` fallback. Bounded size, written once per hold. A test that holds an app and asserts the captured file is non-empty — it fails today. Evidence: `audits/update-night-2026-09-21/apps/adventurelog/why-it-failed.txt`, `state-after-hold.txt`. | **READY — rank P2-MEDIUM; owner: CC (controller)** |
|
||||
|
||||
| **R-622** | **[P2-MEDIUM] `adventurelog v0.13.0` migrates the customer's database and then does not serve — the edge must NOT be promoted, and it is the first real-catalog candidate this project has measured as unsafe.** MEASURED 2026-09-21 on guest 9202 through the product's own guarded Update. `v0.12.1 → v0.13.0` (backend AND frontend together, PostGIS held constant). The backend applied **nine migrations, every one `... OK`** — `adventures.0072_trail_wanderer_author_fields` through `integrations.0009_alter_endurainintegration_auth_method`, plus `billing.0001_initial` — and then the container's own healthcheck failed with `URLError: [Errno 111] Connection refused` on five consecutive checks. The app never bound its port. The update held honestly after the full 5-minute wait. **THE PRODUCT DID EVERYTHING RIGHT AND THAT IS HALF THE FINDING:** the precondition found a Tier-1 copy one minute old, the safety dump was written, the pin advanced BEFORE the pull, the health wait was not short-circuited, the app was stopped rather than left half-running, and the hold sentence named the tier, the date and what the copy holds — „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." **This is exactly the case `09` §4 exists for:** the migration RAN, so there is no undo, only a restore — and the restore is the thing slice 4 made sure existed first. **What it needs:** adventurelog stays OFF the promotion list; the cause is not diagnosed here (R-621 is why); and before it is ever promoted the edge should be re-run on the harness with its ABORT step, since an app that migrates and then refuses is the shape most likely to refuse the old image too. Evidence: `audits/update-night-2026-09-21/apps/adventurelog/`. | **READY — rank P2-MEDIUM; owner: CC (catalog); NOT a Felhom defect — an upstream edge that fails** |
|
||||
|
||||
---
|
||||
|
||||
## Lines to ADD to existing rows (not re-filed)
|
||||
|
||||
**R-607** — append: **Seen again 2026-09-21 (update night), and now a dozen times in one session.** Every drill-catalog bump of the night was followed by `POST /api/sync` answering „Sablonok naprakészek — nincs változás" while the box's cache HAD moved, with `catalog_images` staying stale until a separate `POST /api/stacks/rescan`. The night's harness therefore rescans unconditionally after every sync, which is a workaround and not a fix. **The window was still never measured as a NUMBER** — that is what the row asks for and what remains owed.
|
||||
|
||||
**R-462** — append: **The count moved on 2026-09-21 from 3 apps to <N>.** The update night walked <N> real, within-a-major upstream edges on guest 9202 through the product's own guarded Update, each seeded and read back through the app's own front door: <LIST>. <P> proven, <F> failed, <I> inconclusive. Box-side fixtures for <FX> apps now exist at `audits/update-night-2026-09-21/fixtures.py`, and four of them (actualbudget, navidrome, audiobookshelf, vikunja) are ported into `app-catalog-felhom.eu/scripts/upgrade_fixtures.py` with seven new `EDGES` (U1–U7) so the same edges can be run on the harness venue **with their ABORT step**, which the box deliberately does not offer. **Owed:** the harness RUNS for those edges (the code is in; the runs are not), and fixtures for the apps recorded inconclusive tonight.
|
||||
|
||||
**R-463** — append: **Measured 2026-09-21 (update night), both halves.** <PG52>. And the conversion rehearsal Q5 asks for was costed on a real seeded datadir: <PG53>.
|
||||
|
||||
**R-469 / R-459** — append: **The MariaDB engine major was pressed through the real Update BUTTON for the first time on 2026-09-21** (it had only ever been run on the harness). <MARIA>.
|
||||
|
||||
**R-446** — append: **Measured on the box 2026-09-21 (update night), leg B8.** <B8>.
|
||||
|
||||
**R-458** — append: **Measured 2026-09-21 (update night), leg B9.** <B9>.
|
||||
|
||||
**R-613** — append: the update night could not seed `uptime-kuma` for the same reason and left it out rather than faking it.
|
||||
|
||||
**R-460** — append: bookstack's edge was walked again on 2026-09-21 and is again **half-proven** — the database half read back through `php artisan`, the file half untouched. The limitation is unchanged and is now measured on the box as well as on the harness.
|
||||
|
||||
**R-442 (CLOSED)** — append, as a confirmation rather than a reopening: **the fail-closed half was exercised again 2026-09-21** on guest 9202, where `/api/disks` answers `agent not configured`. Three apps deployed with an `HDD_PATH` (navidrome, audiobookshelf, romm) were each REFUSED at „remove with data" — „A(z) …/userdata/<app> tárhely jelenleg nem elérhető — az alkalmazás nem távolítható el, amíg a meghajtó…" — **with the app kept**, and each was then removed successfully with the data KEPT. So the guard refuses the destructive half and leaves the non-destructive half available, which is exactly the shape the row describes. No change to the row's status.
|
||||
|
||||
| **R-623** | **[P3-LOW] The unattended-update caller turned every SUCCESS into a `timeout`, and then refused to press that app again — the instrument, not the box.** FOUND 2026-09-21 (update night) by reading `unattended-caller.py` before relying on it for the Q4 hold measurement. Its `call()` returns the API **envelope** — `{"ok": true, "data": {…}}` — and `follow()` read `update_phase` and `updating` **off the envelope**, where neither exists. Both were therefore always `None`; the end test `not updating and phase in ("done","failed")` could never fire; every followed update ran the full **900-second** timeout and was recorded `timeout`, which the caller treats as terminal and adds to `never_again`. `main()` unwraps `data` for the stack LIST, which is exactly why the within-a-major half of that night worked and this half did not. **The 2026-09-21 run did not catch it because the only pass that reached `follow()` was Scenario F, whose log was lost to a buffering `tail`** — the run's own honestly-recorded instrumentation gap turns out to have hidden a second one underneath it. **This is the R-607 class in the evidence layer rather than the product layer: an instrument that can report a success as a timeout is not a measurement**, and worse, it is a measurement that says the box behaved badly when the box behaved well. **FIXED in the same file 2026-09-21** (unwrap `data`, with the reason written into the docstring so the next reader does not re-derive it), and the fixed caller is what produced tonight's unattended-hold leg. **What it does NOT invalidate:** the G-b no-retry proof, which is entirely in the refusal path and never reached `follow()`. **What it DOES qualify:** any future reading of that night's Scenario F timing — the "51 s – 1 m 26 s" figures come from the ATTENDED scenarios 04/05/07, not from the caller. | **CLOSED 2026-09-21 — fixed in `audits/update-arc-gaps-2026-09-21/unattended-caller.py`** |
|
||||
@@ -0,0 +1,28 @@
|
||||
# UPDATE NIGHT 2026-09-21 — progress log (one line per finished step)
|
||||
|
||||
Evidence dir: `documentation/audits/update-night-2026-09-21/`
|
||||
A resuming session reads THIS FILE FIRST and never repeats a finished step.
|
||||
|
||||
| time (CEST) | step | verdict | evidence |
|
||||
|---|---|---|---|
|
||||
| 20:07 | P0.1 floor → 0.261.0 (declared MinAgent 0.131.0) | **PROVEN** — both demo boxes arrived in **13 s**; hub `managed floor SERVED … from declared (golden 0.258.0)`; drill-r50 stays held (agent 0.129.0 < 0.131.0, host DOWN) | 01-floor-pre.txt, 02-floor-save.txt |
|
||||
| 20:08 | P0.2a drill repo `admin/app-catalog-drill` created (private) | **DONE** — Gitea token lacks `write:user`, so `POST /api/v1/repos/migrate` was used instead of `/user/repos`; main = `f5f6a152b513` = live | 03-drill-repo.txt |
|
||||
| 20:10 | P0.2b 9202 repointed at the drill repo | **PROVEN** — **`git.repo_url` ALONE IS INERT**: `gitCloneOrPull` only clones when `.git` is absent, else fetches from the old `origin`. Cache dir had to be removed too. Config saved as `controller.yaml.pre-update-night` | 04-9202-config-pre.txt, 05-9202-follows-drill.txt |
|
||||
| 20:12 | P0.2c positive + negative controls | **PROVEN** — drill bump uptime-kuma 2.4.0→2.5.5 shows on 9202 as „Frissítés elérhető — ma" / "Update available — today"; live catalog still `f5f6a152b513` with pin 2.4.0; both real boxes' caches still at `f5f6a15`. R-607 fired again (sync said „nincs változás"). App route is **`/apps/<n>`**, not `/app/<n>` | 06-drift-rerun.txt, 07-positive-control.txt |
|
||||
| 20:07 | Drift re-run | **CONFIRMED** — 66 pins, 46 behind, **39 within-major, 7 across-major** — the brief's numbers hold exactly | 06-drift-rerun.txt |
|
||||
| 20:13 | P0.4 capacity measured | **OK** — 9202: 26 GB RAM (22 free), docker root on mp0 with **56 GB free**, drive 872 GB. demo-hp `/` is 86% but holds neither. Brief's capacity claim HOLDS | 08-capacity.txt |
|
||||
| 20:18 | P0.3 throwaway image store | **PROVEN** — `registry:2` on 9202 `127.0.0.1:5000`; `drill/glance:1.0.0` = real v0.8.6 retagged, `:1.0.1` = starts/stays up/never serves, `:1.0.2` absent (404). **`CompareImageRefs` DOES order `host:port/` refs** — 4 positive + 1 negative control, run not read; tmp test deleted, tree clean | 09-image-store.txt |
|
||||
| 20:20 | **EDGE privatebin 2.0.5 -> 2.0.6** (file-leg) | **PROVEN** — 15.4 s; seed read back both sides; all four observables agree | apps/privatebin/ |
|
||||
| 20:25 | **EDGE docmost 0.95.0 -> 0.96.0** (db-postgres, engine constant) | **PROVEN** — 103.5 s; seeded account authenticated after; all four observables agree | apps/docmost/ |
|
||||
| 20:28 | **EDGE bookstack 26.05.2 -> 26.05.5** (db-mariadb, engine constant) | **PROVEN** — 45.1 s; artisan readback with its own negative control; DATABASE HALF ONLY (R-460) | apps/bookstack/ |
|
||||
| 20:37 | **FINDING R-618** tandoor probe port | **DEFECT, measured** — probe 8080, app listens on 80 only; docker healthy + front door 200 + controller `unhealthy`. 53-template sweep run: wger suspected, adventurelog cleared | 10-probe-port-sweep.txt |
|
||||
| 20:38 | **FINDINGS R-615/616/617/619** | filed — repo_url inert; catalog token plaintext in the clone; Gitea migrate endpoint; `type: password` mandatory though the wire says optional | NEW-ROWS.md |
|
||||
| 20:39 | **EDGE actualbudget 26.7.0 -> 26.9.0** | **PROVEN** — 19.5 s | apps/actualbudget/ |
|
||||
| 20:44 | **EDGE navidrome 0.63.2 -> 0.64.0** (file-leg, HDD_PATH) | **PROVEN** — 11.3 s | apps/navidrome/ |
|
||||
| 20:46 | **EDGE audiobookshelf 2.35.1 -> 2.36.1** (file-leg) | **PROVEN** — 23.6 s | apps/audiobookshelf/ |
|
||||
| 20:54 | **EDGE adventurelog v0.12.1 -> v0.13.0** (db-postgis) | **FAILED — the most valuable result so far.** Nine migrations applied OK, then the app never bound its port; held after the full 5-min wait; the sentence names tier, date and what the copy holds. Rows R-621 (the hold destroys the failure evidence) and R-622 (do not promote this edge) | apps/adventurelog/ |
|
||||
| 20:59 | **Harness code pushed to the catalog** — 4 fixtures + edges U1..U7 | **DONE, gates green** — live catalog main moves `f5f6a152b513` -> `4463243f2e09`, **`scripts/` ONLY, zero `image:` lines** (the teardown diff still expects every image line identical). Harness RUNS owed | app-catalog-felhom.eu@4463243f2e09 |
|
||||
| 20:59 | image reclaim BY NAME (no prune) | 34 unused images removed by exact reference; 40 GB -> 55 GB free | reclaim.sh |
|
||||
| 21:08 | CI check for the catalog push | **GREEN** — job **id=830**, `name='gates'`, `status='completed'`, `conclusion='success'`, matched on `head_sha=4463243f2e09`. Confirms CLAUDE.md's warning: page 1's newest id was 52, the real newest was 830 — job ids are NOT page-ordered | scratchpad/ci.sh |
|
||||
| 21:12 | **Observation, NOT a new row** — an app with an `HDD_PATH` cannot have its DATA removed on 9202 | R-442's guard working as designed: `/api/disks` answers `agent not configured` on this guest, so the drive path cannot be RESOLVED and the removal is **refused with the app kept** rather than half-deleted. The household's other choice — remove the app, KEEP the data — is accepted. The harness now takes that route and tidies its own directories by name at teardown | apps/navidrome/, apps/romm/ |
|
||||
| 21:13 | **FINDING R-623** — the unattended caller turned every SUCCESS into a `timeout` | Read before use, not after: `follow()` read `update_phase`/`updating` off the API ENVELOPE, so both were always `None`, every followed update hit the 900 s timeout and was then marked never-press-again. **Fixed in that file** before B1 relied on it. The earlier night missed it because its only `follow()` pass was the one whose log was lost | update-arc-gaps-2026-09-21/unattended-caller.py |
|
||||
@@ -0,0 +1,9 @@
|
||||
actualbudget | Checking if there are any migrations to run for direction "up"...
|
||||
actualbudget | Migrations: DONE
|
||||
actualbudget | Running in production mode - Serving static React app
|
||||
actualbudget | Listening on :::5006...
|
||||
actualbudget | Logging in via password
|
||||
actualbudget | 2026-09-21T18:39:23.916Z [32minfo[39m: POST 400 /account/login
|
||||
actualbudget | Logging in via password
|
||||
actualbudget | Deleted 0 old sessions
|
||||
actualbudget | 2026-09-21T18:39:24.258Z [32minfo[39m: POST 200 /account/login
|
||||
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"before": {
|
||||
"hu": [],
|
||||
"en": []
|
||||
},
|
||||
"after": {
|
||||
"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"
|
||||
}
|
||||
]
|
||||
},
|
||||
"drill_commit": "1c47aa5d6192"
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
20:37:49 ==== actualbudget: actualbudget/actual-server:26.7.0 -> actualbudget/actual-server:26.9.0 (sub=budget, class=other)
|
||||
20:37:49 [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'}
|
||||
20:38:04 [1] deployed, controller state=running, pinned={'actualbudget': 'actualbudget/actual-server:26.7.0'}
|
||||
20:38:06 [2] seeding through the app's own front door
|
||||
20:38:07 actualbudget: /account/bootstrap http=200 :: {"status":"ok","data":{"token":"1164c717-bcfd-4064-9789-cda92a14d07e"}}
|
||||
20:38:07 [3] control C1 — reading the seed back BEFORE the update
|
||||
20:38:08 actualbudget: login with the seeded password http=200 ok=True
|
||||
20:38:08 [4] „Mentés most" -> 200 {'ok': True, 'message': 'Mentés elindítva'}
|
||||
20:38:58 [4] backup idle; last=None
|
||||
20:38:59 [5] drill commit 1c47aa5d6192: actualbudget actualbudget/actual-server:26.7.0 -> actualbudget/actual-server:26.9.0 (push rc=0)
|
||||
20:39:03 [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:39:03 [5] badge EN: [{'title': 'A newer version of this app is available. Select the Update button to start it.', 'text': 'Update available — today'}]
|
||||
20:39:04 [6] Update -> 202 {'ok': True, 'data': {'accepted': True, 'completed': False}, 'message': 'Frissítés elindult – az állapot a kártyán követhető'}
|
||||
20:39:04 + 0.0s phase=safety-dump label=Adatbázis pillanatkép… err=None hold=None
|
||||
20:39:05 + 1.1s phase=pulling label=Új verzió letöltése… err=None hold=None
|
||||
20:39:12 + 8.2s phase=starting label=Indítás az új verzióval… err=None hold=None
|
||||
20:39:13 + 9.3s phase=verifying label=Működés ellenőrzése… err=None hold=None
|
||||
20:39:23 + 19.5s phase=done label=Frissítve err=None hold=None
|
||||
20:39:23 [7] reading the seed back AFTER the update
|
||||
20:39:24 actualbudget: login with the seeded password http=200 ok=True
|
||||
20:39:26 [8] pinned = {'actualbudget': 'actualbudget/actual-server:26.9.0'}
|
||||
20:39:26 [8] installed = {'actualbudget': 'actualbudget/actual-server:26.9.0'}
|
||||
20:39:26 [8] compose = ['image: actualbudget/actual-server:26.9.0']
|
||||
20:39:26 [8] inspect = ['actualbudget actualbudget/actual-server:26.9.0 running=true restarts=0']
|
||||
20:39:26 [9] verdict proven -> /mnt/5_hdd/felhom.eu/git/felhom.eu/documentation/audits/update-night-2026-09-21/apps/actualbudget/verdict.json
|
||||
+15
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"pinned_images": {
|
||||
"actualbudget": "actualbudget/actual-server:26.7.0"
|
||||
},
|
||||
"installed_images": {
|
||||
"actualbudget": "actualbudget/actual-server:26.7.0"
|
||||
},
|
||||
"catalog_images": null,
|
||||
"live_compose_image_lines": [
|
||||
"image: actualbudget/actual-server:26.7.0"
|
||||
],
|
||||
"docker_inspect": [
|
||||
"actualbudget actualbudget/actual-server:26.7.0 running=true restarts=0"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
{
|
||||
"before": {
|
||||
"pinned_images": {
|
||||
"actualbudget": "actualbudget/actual-server:26.7.0"
|
||||
},
|
||||
"installed_images": {
|
||||
"actualbudget": "actualbudget/actual-server:26.7.0"
|
||||
},
|
||||
"catalog_images": null,
|
||||
"live_compose_image_lines": [
|
||||
"image: actualbudget/actual-server:26.7.0"
|
||||
],
|
||||
"docker_inspect": [
|
||||
"actualbudget actualbudget/actual-server:26.7.0 running=true restarts=0"
|
||||
]
|
||||
},
|
||||
"after": {
|
||||
"pinned_images": {
|
||||
"actualbudget": "actualbudget/actual-server:26.9.0"
|
||||
},
|
||||
"installed_images": {
|
||||
"actualbudget": "actualbudget/actual-server:26.9.0"
|
||||
},
|
||||
"catalog_images": {
|
||||
"actualbudget": "actualbudget/actual-server:26.9.0"
|
||||
},
|
||||
"live_compose_image_lines": [
|
||||
"image: actualbudget/actual-server:26.9.0"
|
||||
],
|
||||
"docker_inspect": [
|
||||
"actualbudget actualbudget/actual-server:26.9.0 running=true restarts=0"
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
{
|
||||
"accepted": true,
|
||||
"http": "202",
|
||||
"phases": [
|
||||
{
|
||||
"t": 0.0,
|
||||
"phase": "safety-dump",
|
||||
"label": "Adatbázis pillanatkép…",
|
||||
"updating": true,
|
||||
"error": null,
|
||||
"hold": null
|
||||
},
|
||||
{
|
||||
"t": 1.1,
|
||||
"phase": "pulling",
|
||||
"label": "Új verzió letöltése…",
|
||||
"updating": true,
|
||||
"error": null,
|
||||
"hold": null
|
||||
},
|
||||
{
|
||||
"t": 8.2,
|
||||
"phase": "starting",
|
||||
"label": "Indítás az új verzióval…",
|
||||
"updating": true,
|
||||
"error": null,
|
||||
"hold": null
|
||||
},
|
||||
{
|
||||
"t": 9.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"
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
{
|
||||
"harness_version": 1,
|
||||
"app": "actualbudget",
|
||||
"venue": "guest 9202 demo-hp-scratch, controller 0.261.0",
|
||||
"class": "other",
|
||||
"from": {
|
||||
"actualbudget": "actualbudget/actual-server:26.7.0"
|
||||
},
|
||||
"to": {
|
||||
"actualbudget": "actualbudget/actual-server:26.9.0"
|
||||
},
|
||||
"verdict": "proven",
|
||||
"seed_read_before": true,
|
||||
"seed_read_after": true,
|
||||
"healthy_after": true,
|
||||
"migration_observed": "actualbudget | Checking if there are any migrations to run for direction \"up\"...",
|
||||
"abort": "not-attempted",
|
||||
"abort_detail": null,
|
||||
"duration_s": 19.5,
|
||||
"measured_at": "2026-09-21T18:37:49.287537+00:00",
|
||||
"evidence": "apps/actualbudget/",
|
||||
"notes": [],
|
||||
"observables_after": {
|
||||
"pinned_images": {
|
||||
"actualbudget": "actualbudget/actual-server:26.9.0"
|
||||
},
|
||||
"installed_images": {
|
||||
"actualbudget": "actualbudget/actual-server:26.9.0"
|
||||
},
|
||||
"catalog_images": {
|
||||
"actualbudget": "actualbudget/actual-server:26.9.0"
|
||||
},
|
||||
"live_compose_image_lines": [
|
||||
"image: actualbudget/actual-server:26.9.0"
|
||||
],
|
||||
"docker_inspect": [
|
||||
"actualbudget actualbudget/actual-server:26.9.0 running=true restarts=0"
|
||||
]
|
||||
},
|
||||
"final_phase": "done",
|
||||
"hold_reason": null,
|
||||
"update_error": null
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
{
|
||||
"before": {
|
||||
"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"
|
||||
}
|
||||
]
|
||||
},
|
||||
"after": {
|
||||
"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"
|
||||
}
|
||||
]
|
||||
},
|
||||
"drill_commit": "b4de9025ba9b"
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
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
|
||||
+27
@@ -0,0 +1,27 @@
|
||||
{
|
||||
"pinned_images": {
|
||||
"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"
|
||||
},
|
||||
"installed_images": {
|
||||
"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"
|
||||
},
|
||||
"catalog_images": {
|
||||
"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"
|
||||
},
|
||||
"live_compose_image_lines": [
|
||||
"image: ghcr.io/seanmorley15/adventurelog-backend:v0.12.1",
|
||||
"image: postgis/postgis:16-3.5-alpine",
|
||||
"image: ghcr.io/seanmorley15/adventurelog-frontend:v0.12.1"
|
||||
],
|
||||
"docker_inspect": [
|
||||
"adventurelog ghcr.io/seanmorley15/adventurelog-backend:v0.12.1 running=true restarts=0",
|
||||
"adventurelog-postgres postgis/postgis:16-3.5-alpine running=true restarts=0",
|
||||
"adventurelog-frontend ghcr.io/seanmorley15/adventurelog-frontend:v0.12.1 running=true restarts=0"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,52 @@
|
||||
{
|
||||
"before": {
|
||||
"pinned_images": {
|
||||
"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"
|
||||
},
|
||||
"installed_images": {
|
||||
"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"
|
||||
},
|
||||
"catalog_images": {
|
||||
"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"
|
||||
},
|
||||
"live_compose_image_lines": [
|
||||
"image: ghcr.io/seanmorley15/adventurelog-backend:v0.12.1",
|
||||
"image: postgis/postgis:16-3.5-alpine",
|
||||
"image: ghcr.io/seanmorley15/adventurelog-frontend:v0.12.1"
|
||||
],
|
||||
"docker_inspect": [
|
||||
"adventurelog ghcr.io/seanmorley15/adventurelog-backend:v0.12.1 running=true restarts=0",
|
||||
"adventurelog-postgres postgis/postgis:16-3.5-alpine running=true restarts=0",
|
||||
"adventurelog-frontend ghcr.io/seanmorley15/adventurelog-frontend:v0.12.1 running=true restarts=0"
|
||||
]
|
||||
},
|
||||
"after": {
|
||||
"pinned_images": {
|
||||
"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"
|
||||
},
|
||||
"installed_images": {
|
||||
"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"
|
||||
},
|
||||
"catalog_images": {
|
||||
"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"
|
||||
},
|
||||
"live_compose_image_lines": [
|
||||
"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"
|
||||
],
|
||||
"docker_inspect": []
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
{
|
||||
"accepted": true,
|
||||
"http": "202",
|
||||
"phases": [
|
||||
{
|
||||
"t": 0.0,
|
||||
"phase": "safety-dump",
|
||||
"label": "Adatbázis pillanatkép…",
|
||||
"updating": true,
|
||||
"error": null,
|
||||
"hold": null
|
||||
},
|
||||
{
|
||||
"t": 1.0,
|
||||
"phase": "pulling",
|
||||
"label": "Új verzió letöltése…",
|
||||
"updating": true,
|
||||
"error": null,
|
||||
"hold": null
|
||||
},
|
||||
{
|
||||
"t": 37.9,
|
||||
"phase": "starting",
|
||||
"label": "Indítás az új verzióval…",
|
||||
"updating": true,
|
||||
"error": null,
|
||||
"hold": null
|
||||
},
|
||||
{
|
||||
"t": 43.1,
|
||||
"phase": "verifying",
|
||||
"label": "Működés ellenőrzése…",
|
||||
"updating": true,
|
||||
"error": null,
|
||||
"hold": null
|
||||
},
|
||||
{
|
||||
"t": 346.6,
|
||||
"phase": "failed",
|
||||
"label": "A frissítés nem sikerült",
|
||||
"updating": false,
|
||||
"error": "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."
|
||||
}
|
||||
],
|
||||
"duration_s": 346.6,
|
||||
"final_phase": "failed",
|
||||
"update_error": "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_reason": "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.",
|
||||
"state": "stopped"
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
=== all adventurelog-ish containers (incl. stopped)
|
||||
(none at all)
|
||||
|
||||
=== the stack dir
|
||||
total 32
|
||||
drwxr-xr-x 2 root root 4096 Sep 21 18:53 .
|
||||
drwxr-xr-x 57 root root 4096 Sep 13 20:22 ..
|
||||
-rw-r--r-- 1 root root 3881 Sep 21 18:48 .felhom.yml
|
||||
-rw------- 1 root root 1370 Sep 21 18:48 app.yaml
|
||||
-rw-r--r-- 1 root root 5389 Sep 21 18:48 applied-compose.yml
|
||||
-rw-r--r-- 1 root root 5389 Sep 21 18:48 docker-compose.yml
|
||||
|
||||
=== the live compose image lines
|
||||
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
|
||||
|
||||
=== app.yaml pins
|
||||
pinned_images:
|
||||
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
|
||||
|
||||
=== volumes still present
|
||||
adventurelog_adventurelog_media
|
||||
adventurelog_adventurelog_postgres_data
|
||||
@@ -0,0 +1,55 @@
|
||||
{
|
||||
"harness_version": 1,
|
||||
"app": "adventurelog",
|
||||
"venue": "guest 9202 demo-hp-scratch, controller 0.261.0",
|
||||
"class": "db-postgis",
|
||||
"from": {
|
||||
"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"
|
||||
},
|
||||
"to": {
|
||||
"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"
|
||||
},
|
||||
"verdict": "failed",
|
||||
"seed_read_before": true,
|
||||
"seed_read_after": false,
|
||||
"healthy_after": false,
|
||||
"migration_observed": null,
|
||||
"abort": "not-attempted",
|
||||
"abort_detail": null,
|
||||
"duration_s": 346.6,
|
||||
"measured_at": "2026-09-21T18:46:54.260610+00:00",
|
||||
"evidence": "apps/adventurelog/",
|
||||
"notes": [
|
||||
"the edge ended HELD or failed — this is a RESULT, not an error of the run"
|
||||
],
|
||||
"observables_after": {
|
||||
"pinned_images": {
|
||||
"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"
|
||||
},
|
||||
"installed_images": {
|
||||
"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"
|
||||
},
|
||||
"catalog_images": {
|
||||
"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"
|
||||
},
|
||||
"live_compose_image_lines": [
|
||||
"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"
|
||||
],
|
||||
"docker_inspect": []
|
||||
},
|
||||
"final_phase": "failed",
|
||||
"hold_reason": "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.",
|
||||
"update_error": "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."
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
=== adventurelog backend, last 40 lines
|
||||
Error response from daemon: No such container: adventurelog
|
||||
|
||||
=== frontend, last 20
|
||||
Error response from daemon: No such container: adventurelog-frontend
|
||||
|
||||
=== container states
|
||||
2026/09/21 18:53:54 auth.go:142: [DEBUG] [web] auth: valid session for GET /api/stacks/adventurelog
|
||||
2026/09/21 18:53:54 router.go:81: [DEBUG] [api] GET /api/stacks/adventurelog (path=/stacks/adventurelog)
|
||||
2026/09/21 18:53:55 settings.go:1738: [WARN] [settings] restore hold SET for adventurelog — the app stays stopped until it is cleared
|
||||
2026/09/21 18:53:55 update_guard.go:531: [WARN] [backup] adventurelog is HELD STOPPED after a failed update (restore point: tier 1 "saját meghajtó", 2026-09-21T18:47:19Z; holds: "a beállításokat, az adatbázist és az adatköteteket tartalmazza")
|
||||
2026/09/21 18:53:55 auth.go:142: [DEBUG] [web] auth: valid session for GET /api/stacks/adventurelog
|
||||
2026/09/21 18:53:55 router.go:81: [DEBUG] [api] GET /api/stacks/adventurelog (path=/stacks/adventurelog)
|
||||
2026/09/21 18:53:55 auth.go:142: [DEBUG] [web] auth: valid session for GET /api/stacks/adventurelog
|
||||
2026/09/21 18:53:55 router.go:81: [DEBUG] [api] GET /api/stacks/adventurelog (path=/stacks/adventurelog)
|
||||
2026/09/21 18:54:03 auth.go:142: [DEBUG] [web] auth: valid session for GET /api/stacks/adventurelog
|
||||
2026/09/21 18:54:03 router.go:81: [DEBUG] [api] GET /api/stacks/adventurelog (path=/stacks/adventurelog)
|
||||
2026/09/21 18:54:03 auth.go:142: [DEBUG] [web] auth: valid session for GET /api/stacks/adventurelog
|
||||
2026/09/21 18:54:03 router.go:81: [DEBUG] [api] GET /api/stacks/adventurelog (path=/stacks/adventurelog)
|
||||
2026/09/21 18:54:06 auth.go:142: [DEBUG] [web] auth: valid session for GET /api/stacks/adventurelog/logs
|
||||
2026/09/21 18:54:06 router.go:81: [DEBUG] [api] GET /api/stacks/adventurelog/logs (path=/stacks/adventurelog/logs)
|
||||
2026/09/21 18:54:06 manager.go:1290: [INFO] [stacks] Fetching logs for stack adventurelog (tail=500)
|
||||
2026/09/21 18:54:06 manager.go:1397: [DEBUG] Running: docker compose logs --tail 500 --no-color (in /opt/docker/stacks/adventurelog)
|
||||
2026/09/21 18:54:06 manager.go:1300: [DEBUG] Logs result for adventurelog: 0 bytes returned (empty)
|
||||
2026/09/21 18:54:06 auth.go:142: [DEBUG] [web] auth: valid session for GET /api/stacks/adventurelog
|
||||
2026/09/21 18:54:06 router.go:81: [DEBUG] [api] GET /api/stacks/adventurelog (path=/stacks/adventurelog)
|
||||
2026/09/21 18:54:08 auth.go:142: [DEBUG] [web] auth: valid session for GET /api/stacks/adventurelog
|
||||
2026/09/21 18:54:08 router.go:81: [DEBUG] [api] GET /api/stacks/adventurelog (path=/stacks/adventurelog)
|
||||
2026/09/21 18:54:43 backup.go:465: [DEBUG] groupStacksByDrive: /mnt/sys_drive → [adventurelog, gitea, glance, tandoor, uptime-kuma, vaultwarden, wishlist, zipline]
|
||||
2026/09/21 18:54:43 [INFO] [stacks] ParseComposeHDDMounts: found 0 HDD mounts for /opt/docker/stacks/adventurelog/docker-compose.yml
|
||||
2026/09/21 18:54:43 sync.go:416: [DEBUG] [sync] adventurelog/docker-compose.yml: hash match, skipped
|
||||
2026/09/21 18:54:43 sync.go:416: [DEBUG] [sync] adventurelog/.felhom.yml: hash match, skipped
|
||||
2026/09/21 18:48:09 update.go:917: [INFO] [stacks] update adventurelog: phase checking
|
||||
2026/09/21 18:48:09 update.go:603: [INFO] [stacks] update adventurelog: precondition met — Tier 1 (own recovery unit) copy from 2026-09-21T18:47:19Z (1m0s old, limit 24h0m0s)
|
||||
2026/09/21 18:48:09 update.go:917: [INFO] [stacks] update adventurelog: phase safety-dump
|
||||
2026/09/21 18:48:09 update.go:635: [INFO] [stacks] update adventurelog: safety dump done (1 file(s)) [/mnt/sys_drive/felhom-data/backups/primary/adventurelog/db-dumps/pre-restore-20260921T184809Z-adventurelog-postgres.sql]
|
||||
2026/09/21 18:48:09 update.go:917: [INFO] [stacks] update adventurelog: phase pinning
|
||||
2026/09/21 18:48:09 pin.go:362: [INFO] [stacks] update adventurelog: pin advanced to the catalog's current definition (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)
|
||||
2026/09/21 18:48:09 update.go:917: [INFO] [stacks] update adventurelog: phase pulling
|
||||
2026/09/21 18:48:46 update.go:917: [INFO] [stacks] update adventurelog: phase starting
|
||||
2026/09/21 18:48:51 update.go:917: [INFO] [stacks] update adventurelog: phase verifying
|
||||
2026/09/21 18:53:53 update.go:722: [ERROR] [stacks] update adventurelog FAILED after the new version was started: not healthy: not healthy within 5m0s (last: state unhealthy) — stopping and HOLDING the app; the pin stays on the new version (its migration may have run)
|
||||
@@ -0,0 +1,24 @@
|
||||
audiobookshelf | Running in production mode.
|
||||
audiobookshelf | Options: CONFIG_PATH=/config, METADATA_PATH=/metadata, PORT=80, HOST=undefined, SOURCE=docker, ROUTER_BASE_PATH=/audiobookshelf
|
||||
audiobookshelf | [2026-09-21 20:46:28.192] INFO: === Starting Server ===
|
||||
audiobookshelf | [2026-09-21 20:46:28.193] INFO: [Server] Init v2.36.1
|
||||
audiobookshelf | [2026-09-21 20:46:28.193] INFO: [Server] Node.js Version: v20.20.2
|
||||
audiobookshelf | [2026-09-21 20:46:28.193] INFO: [Server] Platform: linux
|
||||
audiobookshelf | [2026-09-21 20:46:28.194] INFO: [Server] Arch: x64
|
||||
audiobookshelf | [2026-09-21 20:46:28.198] INFO: [Database] Initializing db at "/config/absdatabase.sqlite"
|
||||
audiobookshelf | [2026-09-21 20:46:28.219] INFO: [Database] Loading extension /usr/local/lib/nusqlite3/libnusqlite3.so
|
||||
audiobookshelf | [2026-09-21 20:46:28.220] INFO: [Database] Successfully loaded extension /usr/local/lib/nusqlite3/libnusqlite3.so
|
||||
audiobookshelf | [2026-09-21 20:46:28.220] INFO: [Database] Db supports unaccent and unicode foldings
|
||||
audiobookshelf | [2026-09-21 20:46:28.220] INFO: [Database] Db connection was successful
|
||||
audiobookshelf | [2026-09-21 20:46:28.280] INFO: [MigrationManager] No migrations to run.
|
||||
audiobookshelf | [2026-09-21 20:46:28.432] INFO: [Database] Db initialized with models: SequelizeMeta, user, session, apiKey, library, libraryFolder, book, podcast, podcastEpisode, libraryItem, mediaProgress, series, bookSeries, author, bookAuthor, collection, collectionBook, playlist, playlistMediaItem, device, playbackSession, feed, feedEpisode, setting, customMetadataProvider, mediaItemShare
|
||||
audiobookshelf | [2026-09-21 20:46:28.470] INFO: [Database] Server upgrade detected from 2.35.1 to 2.36.1
|
||||
audiobookshelf | [2026-09-21 20:46:28.481] INFO: [Database] running ANALYZE
|
||||
audiobookshelf | [2026-09-21 20:46:28.493] INFO: [Database] ANALYZE completed
|
||||
audiobookshelf | [2026-09-21 20:46:28.493] INFO: [Server] Serving from base path "/audiobookshelf"
|
||||
audiobookshelf | [2026-09-21 20:46:28.495] INFO: [LogManager] Init current daily log filename: 2026-09-21.txt
|
||||
audiobookshelf | [2026-09-21 20:46:28.502] INFO: [BackupManager] 0 Backups Found
|
||||
audiobookshelf | [2026-09-21 20:46:28.503] INFO: [BackupManager] Auto Backups are disabled
|
||||
audiobookshelf | [2026-09-21 20:46:28.524] INFO: Listening on port :80
|
||||
audiobookshelf | [2026-09-21 20:46:38.525] ERROR: [LocalAuth] Failed login attempt for username "drill59c654" from ip 192.168.0.180 (Invalid password)
|
||||
audiobookshelf | [2026-09-21 20:46:38.578] INFO: [LocalAuth] User "drill59c654" logged in from ip 192.168.0.180
|
||||
@@ -0,0 +1,31 @@
|
||||
{
|
||||
"before": {
|
||||
"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"
|
||||
}
|
||||
]
|
||||
},
|
||||
"after": {
|
||||
"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"
|
||||
}
|
||||
]
|
||||
},
|
||||
"drill_commit": "4fbe52bb1955"
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
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
|
||||
+15
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"pinned_images": {
|
||||
"audiobookshelf": "ghcr.io/advplyr/audiobookshelf:2.35.1"
|
||||
},
|
||||
"installed_images": {
|
||||
"audiobookshelf": "ghcr.io/advplyr/audiobookshelf:2.35.1"
|
||||
},
|
||||
"catalog_images": null,
|
||||
"live_compose_image_lines": [
|
||||
"image: ghcr.io/advplyr/audiobookshelf:2.35.1"
|
||||
],
|
||||
"docker_inspect": [
|
||||
"audiobookshelf ghcr.io/advplyr/audiobookshelf:2.35.1 running=true restarts=0"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
{
|
||||
"before": {
|
||||
"pinned_images": {
|
||||
"audiobookshelf": "ghcr.io/advplyr/audiobookshelf:2.35.1"
|
||||
},
|
||||
"installed_images": {
|
||||
"audiobookshelf": "ghcr.io/advplyr/audiobookshelf:2.35.1"
|
||||
},
|
||||
"catalog_images": null,
|
||||
"live_compose_image_lines": [
|
||||
"image: ghcr.io/advplyr/audiobookshelf:2.35.1"
|
||||
],
|
||||
"docker_inspect": [
|
||||
"audiobookshelf ghcr.io/advplyr/audiobookshelf:2.35.1 running=true restarts=0"
|
||||
]
|
||||
},
|
||||
"after": {
|
||||
"pinned_images": {
|
||||
"audiobookshelf": "ghcr.io/advplyr/audiobookshelf:2.36.1"
|
||||
},
|
||||
"installed_images": {
|
||||
"audiobookshelf": "ghcr.io/advplyr/audiobookshelf:2.36.1"
|
||||
},
|
||||
"catalog_images": {
|
||||
"audiobookshelf": "ghcr.io/advplyr/audiobookshelf:2.36.1"
|
||||
},
|
||||
"live_compose_image_lines": [
|
||||
"image: ghcr.io/advplyr/audiobookshelf:2.36.1"
|
||||
],
|
||||
"docker_inspect": [
|
||||
"audiobookshelf ghcr.io/advplyr/audiobookshelf:2.36.1 running=true restarts=0"
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
{
|
||||
"accepted": true,
|
||||
"http": "202",
|
||||
"phases": [
|
||||
{
|
||||
"t": 0.0,
|
||||
"phase": "safety-dump",
|
||||
"label": "Adatbázis pillanatkép…",
|
||||
"updating": true,
|
||||
"error": null,
|
||||
"hold": null
|
||||
},
|
||||
{
|
||||
"t": 1.0,
|
||||
"phase": "pulling",
|
||||
"label": "Új verzió letöltése…",
|
||||
"updating": true,
|
||||
"error": null,
|
||||
"hold": null
|
||||
},
|
||||
{
|
||||
"t": 12.3,
|
||||
"phase": "starting",
|
||||
"label": "Indítás az új verzióval…",
|
||||
"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": 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"
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
{
|
||||
"harness_version": 1,
|
||||
"app": "audiobookshelf",
|
||||
"venue": "guest 9202 demo-hp-scratch, controller 0.261.0",
|
||||
"class": "file-leg",
|
||||
"from": {
|
||||
"audiobookshelf": "ghcr.io/advplyr/audiobookshelf:2.35.1"
|
||||
},
|
||||
"to": {
|
||||
"audiobookshelf": "ghcr.io/advplyr/audiobookshelf:2.36.1"
|
||||
},
|
||||
"verdict": "proven",
|
||||
"seed_read_before": true,
|
||||
"seed_read_after": true,
|
||||
"healthy_after": true,
|
||||
"migration_observed": "audiobookshelf | [2026-09-21 20:46:28.280] INFO: [MigrationManager] No migrations to run.",
|
||||
"abort": "not-attempted",
|
||||
"abort_detail": null,
|
||||
"duration_s": 23.6,
|
||||
"measured_at": "2026-09-21T18:44:43.824636+00:00",
|
||||
"evidence": "apps/audiobookshelf/",
|
||||
"notes": [],
|
||||
"observables_after": {
|
||||
"pinned_images": {
|
||||
"audiobookshelf": "ghcr.io/advplyr/audiobookshelf:2.36.1"
|
||||
},
|
||||
"installed_images": {
|
||||
"audiobookshelf": "ghcr.io/advplyr/audiobookshelf:2.36.1"
|
||||
},
|
||||
"catalog_images": {
|
||||
"audiobookshelf": "ghcr.io/advplyr/audiobookshelf:2.36.1"
|
||||
},
|
||||
"live_compose_image_lines": [
|
||||
"image: ghcr.io/advplyr/audiobookshelf:2.36.1"
|
||||
],
|
||||
"docker_inspect": [
|
||||
"audiobookshelf ghcr.io/advplyr/audiobookshelf:2.36.1 running=true restarts=0"
|
||||
]
|
||||
},
|
||||
"final_phase": "done",
|
||||
"hold_reason": null,
|
||||
"update_error": null
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"before": {
|
||||
"hu": [],
|
||||
"en": []
|
||||
},
|
||||
"after": {
|
||||
"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"
|
||||
}
|
||||
]
|
||||
},
|
||||
"drill_commit": "5e7c11de0297"
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
20:25:39 ==== bookstack: lscr.io/linuxserver/bookstack:26.05.2 -> lscr.io/linuxserver/bookstack:26.05.5 (sub=wiki, class=db-mariadb)
|
||||
20:25:39 [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'}
|
||||
20:26:44 [1] deployed, state=running, pinned={'bookstack': 'lscr.io/linuxserver/bookstack:26.05.2', 'bookstack-db': 'mariadb:12.3'}
|
||||
20:26:47 [2] seeding through the app's own front door
|
||||
20:26:50 bookstack: artisan create-admin :: Admin account with email "drill-8c68b2bc@gate.invalid" successfully created!
|
||||
20:26:50 [3] control C1 — reading the seed back BEFORE the update
|
||||
20:26:55 bookstack: readback of the seeded account found=True :: This will delete any configure multi-factor authentication methods for user: - ID: 3 - Name: drill-4b3bec - Email: drill-8c68b2bc@gate.inval
|
||||
20:26:55 [4] „Mentés most" -> 200 {'ok': True, 'message': 'Mentés elindítva'}
|
||||
20:27:30 [4] backup idle; last=None
|
||||
20:27:31 [5] drill commit 5e7c11de0297: bookstack lscr.io/linuxserver/bookstack:26.05.2 -> lscr.io/linuxserver/bookstack:26.05.5 (push rc=0)
|
||||
20:27:36 [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:27:36 [5] badge EN: [{'title': 'A newer version of this app is available. Select the Update button to start it.', 'text': 'Update available — today'}]
|
||||
20:27:36 [6] Update -> 202 {'ok': True, 'data': {'accepted': True, 'completed': False}, 'message': 'Frissítés elindult – az állapot a kártyán követhető'}
|
||||
20:27:36 + 0.0s phase=safety-dump label=Adatbázis pillanatkép… err=None hold=None
|
||||
20:27:37 + 1.1s phase=pulling label=Új verzió letöltése… err=None hold=None
|
||||
20:28:00 + 24.6s phase=starting label=Indítás az új verzióval… err=None hold=None
|
||||
20:28:06 + 29.7s phase=verifying label=Működés ellenőrzése… err=None hold=None
|
||||
20:28:21 + 45.1s phase=done label=Frissítve err=None hold=None
|
||||
20:28:21 [7] reading the seed back AFTER the update
|
||||
20:28:26 bookstack: readback of the seeded account found=True :: This will delete any configure multi-factor authentication methods for user: - ID: 3 - Name: drill-4b3bec - Email: drill-8c68b2bc@gate.inval
|
||||
20:28:28 [8] pinned = {'bookstack': 'lscr.io/linuxserver/bookstack:26.05.5', 'bookstack-db': 'mariadb:12.3'}
|
||||
20:28:28 [8] installed = {'bookstack': 'lscr.io/linuxserver/bookstack:26.05.5', 'bookstack-db': 'mariadb:12.3'}
|
||||
20:28:28 [8] compose = ['image: lscr.io/linuxserver/bookstack:26.05.5', 'image: mariadb:12.3']
|
||||
20:28:28 [8] inspect = ['bookstack lscr.io/linuxserver/bookstack:26.05.5 running=true restarts=0', 'bookstack-db mariadb:12.3 running=true restarts=0']
|
||||
20:28:28 [9] verdict proven -> /mnt/5_hdd/felhom.eu/git/felhom.eu/documentation/audits/update-night-2026-09-21/apps/bookstack/verdict.json
|
||||
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"pinned_images": {
|
||||
"bookstack": "lscr.io/linuxserver/bookstack:26.05.2",
|
||||
"bookstack-db": "mariadb:12.3"
|
||||
},
|
||||
"installed_images": {
|
||||
"bookstack": "lscr.io/linuxserver/bookstack:26.05.2",
|
||||
"bookstack-db": "mariadb:12.3"
|
||||
},
|
||||
"catalog_images": null,
|
||||
"live_compose_image_lines": [
|
||||
"image: lscr.io/linuxserver/bookstack:26.05.2",
|
||||
"image: mariadb:12.3"
|
||||
],
|
||||
"docker_inspect": [
|
||||
"bookstack lscr.io/linuxserver/bookstack:26.05.2 running=true restarts=0",
|
||||
"bookstack-db mariadb:12.3 running=true restarts=0"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
{
|
||||
"before": {
|
||||
"pinned_images": {
|
||||
"bookstack": "lscr.io/linuxserver/bookstack:26.05.2",
|
||||
"bookstack-db": "mariadb:12.3"
|
||||
},
|
||||
"installed_images": {
|
||||
"bookstack": "lscr.io/linuxserver/bookstack:26.05.2",
|
||||
"bookstack-db": "mariadb:12.3"
|
||||
},
|
||||
"catalog_images": null,
|
||||
"live_compose_image_lines": [
|
||||
"image: lscr.io/linuxserver/bookstack:26.05.2",
|
||||
"image: mariadb:12.3"
|
||||
],
|
||||
"docker_inspect": [
|
||||
"bookstack lscr.io/linuxserver/bookstack:26.05.2 running=true restarts=0",
|
||||
"bookstack-db mariadb:12.3 running=true restarts=0"
|
||||
]
|
||||
},
|
||||
"after": {
|
||||
"pinned_images": {
|
||||
"bookstack": "lscr.io/linuxserver/bookstack:26.05.5",
|
||||
"bookstack-db": "mariadb:12.3"
|
||||
},
|
||||
"installed_images": {
|
||||
"bookstack": "lscr.io/linuxserver/bookstack:26.05.5",
|
||||
"bookstack-db": "mariadb:12.3"
|
||||
},
|
||||
"catalog_images": {
|
||||
"bookstack": "lscr.io/linuxserver/bookstack:26.05.5",
|
||||
"bookstack-db": "mariadb:12.3"
|
||||
},
|
||||
"live_compose_image_lines": [
|
||||
"image: lscr.io/linuxserver/bookstack:26.05.5",
|
||||
"image: mariadb:12.3"
|
||||
],
|
||||
"docker_inspect": [
|
||||
"bookstack lscr.io/linuxserver/bookstack:26.05.5 running=true restarts=0",
|
||||
"bookstack-db mariadb:12.3 running=true restarts=0"
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
{
|
||||
"accepted": true,
|
||||
"http": "202",
|
||||
"phases": [
|
||||
{
|
||||
"t": 0.0,
|
||||
"phase": "safety-dump",
|
||||
"label": "Adatbázis pillanatkép…",
|
||||
"updating": true,
|
||||
"error": null,
|
||||
"hold": null
|
||||
},
|
||||
{
|
||||
"t": 1.1,
|
||||
"phase": "pulling",
|
||||
"label": "Új verzió letöltése…",
|
||||
"updating": true,
|
||||
"error": null,
|
||||
"hold": null
|
||||
},
|
||||
{
|
||||
"t": 24.6,
|
||||
"phase": "starting",
|
||||
"label": "Indítás az új verzióval…",
|
||||
"updating": true,
|
||||
"error": null,
|
||||
"hold": null
|
||||
},
|
||||
{
|
||||
"t": 29.7,
|
||||
"phase": "verifying",
|
||||
"label": "Működés ellenőrzése…",
|
||||
"updating": true,
|
||||
"error": null,
|
||||
"hold": null
|
||||
},
|
||||
{
|
||||
"t": 45.1,
|
||||
"phase": "done",
|
||||
"label": "Frissítve",
|
||||
"updating": false,
|
||||
"error": null,
|
||||
"hold": null
|
||||
}
|
||||
],
|
||||
"duration_s": 45.1,
|
||||
"final_phase": "done",
|
||||
"update_error": null,
|
||||
"hold_reason": null,
|
||||
"state": "running"
|
||||
}
|
||||
@@ -0,0 +1,50 @@
|
||||
{
|
||||
"harness_version": 1,
|
||||
"app": "bookstack",
|
||||
"venue": "guest 9202 demo-hp-scratch, controller 0.261.0",
|
||||
"class": "db-mariadb",
|
||||
"from": {
|
||||
"bookstack": "lscr.io/linuxserver/bookstack:26.05.2",
|
||||
"bookstack-db": "mariadb:12.3"
|
||||
},
|
||||
"to": {
|
||||
"bookstack": "lscr.io/linuxserver/bookstack:26.05.5",
|
||||
"bookstack-db": "mariadb:12.3"
|
||||
},
|
||||
"verdict": "proven",
|
||||
"seed_read_before": true,
|
||||
"seed_read_after": true,
|
||||
"healthy_after": true,
|
||||
"migration_observed": null,
|
||||
"abort": "not-attempted",
|
||||
"abort_detail": null,
|
||||
"duration_s": 45.1,
|
||||
"measured_at": "2026-09-21T18:25:39.453490+00:00",
|
||||
"evidence": "apps/bookstack/",
|
||||
"notes": [],
|
||||
"observables_after": {
|
||||
"pinned_images": {
|
||||
"bookstack": "lscr.io/linuxserver/bookstack:26.05.5",
|
||||
"bookstack-db": "mariadb:12.3"
|
||||
},
|
||||
"installed_images": {
|
||||
"bookstack": "lscr.io/linuxserver/bookstack:26.05.5",
|
||||
"bookstack-db": "mariadb:12.3"
|
||||
},
|
||||
"catalog_images": {
|
||||
"bookstack": "lscr.io/linuxserver/bookstack:26.05.5",
|
||||
"bookstack-db": "mariadb:12.3"
|
||||
},
|
||||
"live_compose_image_lines": [
|
||||
"image: lscr.io/linuxserver/bookstack:26.05.5",
|
||||
"image: mariadb:12.3"
|
||||
],
|
||||
"docker_inspect": [
|
||||
"bookstack lscr.io/linuxserver/bookstack:26.05.5 running=true restarts=0",
|
||||
"bookstack-db mariadb:12.3 running=true restarts=0"
|
||||
]
|
||||
},
|
||||
"final_phase": "done",
|
||||
"hold_reason": null,
|
||||
"update_error": null
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
docmost-postgres |
|
||||
docmost-postgres | PostgreSQL Database directory appears to contain a database; Skipping initialization
|
||||
docmost-postgres |
|
||||
docmost-postgres | 2026-09-21 20:24:55.198 CEST [1] LOG: starting PostgreSQL 16.15 on x86_64-pc-linux-musl, compiled by gcc (Alpine 15.2.0) 15.2.0, 64-bit
|
||||
docmost-postgres | 2026-09-21 20:24:55.198 CEST [1] LOG: listening on IPv4 address "0.0.0.0", port 5432
|
||||
docmost-postgres | 2026-09-21 20:24:55.198 CEST [1] LOG: listening on IPv6 address "::", port 5432
|
||||
docmost-postgres | 2026-09-21 20:24:55.203 CEST [1] LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
|
||||
docmost-postgres | 2026-09-21 20:24:55.212 CEST [30] LOG: database system was shut down at 2026-09-21 20:24:54 CEST
|
||||
docmost-postgres | 2026-09-21 20:24:55.254 CEST [1] LOG: database system is ready to accept connections
|
||||
docmost-redis | 1:C 21 Sep 2026 20:24:55.117 # WARNING Memory overcommit must be enabled! Without it, a background save or replication may fail under low memory condition. Being disabled, it can also cause failures without low memory condition, see https://github.com/jemalloc/jemalloc/issues/1328. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
|
||||
docmost-redis | 1:C 21 Sep 2026 20:24:55.117 * oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
|
||||
docmost-redis | 1:C 21 Sep 2026 20:24:55.117 * Redis version=7.4.11, bits=64, commit=00000000, modified=0, pid=1, just started
|
||||
docmost-redis | 1:C 21 Sep 2026 20:24:55.117 * Configuration loaded
|
||||
docmost-redis | 1:M 21 Sep 2026 20:24:55.118 * Increased maximum number of open files to 10032 (it was originally set to 1024).
|
||||
docmost-redis | 1:M 21 Sep 2026 20:24:55.118 * monotonic clock: POSIX clock_gettime
|
||||
docmost-redis | 1:M 21 Sep 2026 20:24:55.119 * Running mode=standalone, port=6379.
|
||||
docmost-redis | 1:M 21 Sep 2026 20:24:55.119 * Server initialized
|
||||
docmost-redis | 1:M 21 Sep 2026 20:24:55.119 * Reading RDB base file on AOF loading...
|
||||
docmost-redis | 1:M 21 Sep 2026 20:24:55.119 * Loading RDB produced by version 7.4.11
|
||||
docmost-redis | 1:M 21 Sep 2026 20:24:55.119 * RDB age 146 seconds
|
||||
docmost-redis | 1:M 21 Sep 2026 20:24:55.119 * RDB memory usage when created 0.90 Mb
|
||||
docmost-redis | 1:M 21 Sep 2026 20:24:55.119 * RDB is base AOF
|
||||
docmost-redis | 1:M 21 Sep 2026 20:24:55.119 * Done loading RDB, keys loaded: 0, keys expired: 0.
|
||||
docmost-redis | 1:M 21 Sep 2026 20:24:55.119 * DB loaded from base file appendonly.aof.1.base.rdb: 0.000 seconds
|
||||
docmost-redis | 1:M 21 Sep 2026 20:24:55.121 * DB loaded from incr file appendonly.aof.1.incr.aof: 0.002 seconds
|
||||
docmost-redis | 1:M 21 Sep 2026 20:24:55.121 * DB loaded from append only file: 0.002 seconds
|
||||
docmost-redis | 1:M 21 Sep 2026 20:24:55.121 * Opening AOF incr file appendonly.aof.1.incr.aof on server start
|
||||
docmost-redis | 1:M 21 Sep 2026 20:24:55.121 * Ready to accept connections tcp
|
||||
docmost | $ pnpm --filter ./apps/server run start:prod
|
||||
docmost | $ cross-env NODE_ENV=production node dist/main
|
||||
docmost | (node:45) ExperimentalWarning: localStorage is not available because --localstorage-file was not provided.
|
||||
docmost | (Use `node --trace-warnings ...` to show where the warning was created)
|
||||
docmost | {"level":"info","time":"2026-09-21T18:25:12.473Z","pid":45,"hostname":"0dc77b73c358","context":"RedisModule","msg":"default: the connection was successfully established"}
|
||||
docmost | {"level":"info","time":"2026-09-21T18:25:12.728Z","pid":45,"hostname":"0dc77b73c358","context":"DatabaseModule","msg":"Establishing database connection"}
|
||||
docmost | {"level":"info","time":"2026-09-21T18:25:12.768Z","pid":45,"hostname":"0dc77b73c358","context":"DatabaseModule","msg":"Database connection successful"}
|
||||
docmost | {"level":"info","time":"2026-09-21T18:25:13.099Z","pid":45,"hostname":"0dc77b73c358","context":"DatabaseMigrationService","msg":"Migration \"20260824T211732-page-title-trgm-index\" executed successfully"}
|
||||
docmost | {"level":"info","time":"2026-09-21T18:25:13.099Z","pid":45,"hostname":"0dc77b73c358","context":"DatabaseMigrationService","msg":"Migration \"20260825T022612-oauth\" executed successfully"}
|
||||
docmost | {"level":"info","time":"2026-09-21T18:25:13.099Z","pid":45,"hostname":"0dc77b73c358","context":"DatabaseMigrationService","msg":"Migration \"20260902T121326-siem-destinations\" executed successfully"}
|
||||
docmost | {"level":"info","time":"2026-09-21T18:25:13.099Z","pid":45,"hostname":"0dc77b73c358","context":"DatabaseMigrationService","msg":"Migration \"20260904T171920-public-spaces\" executed successfully"}
|
||||
docmost | {"level":"info","time":"2026-09-21T18:25:13.148Z","pid":45,"hostname":"0dc77b73c358","context":"NestApplication","msg":"Nest application successfully started"}
|
||||
docmost | {"level":"info","time":"2026-09-21T18:25:13.161Z","pid":45,"hostname":"0dc77b73c358","context":"NestApplication","msg":"Listening on http://127.0.0.1:3000 / https://docs.enkisfelhom.hu"}
|
||||
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"before": {
|
||||
"hu": [],
|
||||
"en": []
|
||||
},
|
||||
"after": {
|
||||
"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"
|
||||
}
|
||||
]
|
||||
},
|
||||
"drill_commit": "a40ae09be943"
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
20:21:17 ==== docmost: docmost/docmost:0.95.0 -> docmost/docmost:0.96.0 (sub=docs, class=db-postgres)
|
||||
20:21:18 [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'}
|
||||
20:22:53 [1] deployed, state=running, pinned={'docmost': 'docmost/docmost:0.95.0', 'docmost-postgres': 'postgres:16-alpine', 'docmost-redis': 'redis:7-alpine'}
|
||||
20:22:55 [2] seeding through the app's own front door
|
||||
20:22:56 docmost: /api/auth/setup http=200 rc=0
|
||||
20:22:56 [3] control C1 — reading the seed back BEFORE the update
|
||||
20:22:56 docmost: login as the seeded user http=200 ok=True
|
||||
20:22:56 [4] „Mentés most" -> 200 {'ok': True, 'message': 'Mentés elindítva'}
|
||||
20:23:32 [4] backup idle; last=None
|
||||
20:23:33 [5] drill commit a40ae09be943: docmost docmost/docmost:0.95.0 -> docmost/docmost:0.96.0 (push rc=0)
|
||||
20:23:37 [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:23:37 [5] badge EN: [{'title': 'A newer version of this app is available. Select the Update button to start it.', 'text': 'Update available — today'}]
|
||||
20:23:37 [6] Update -> 202 {'ok': True, 'data': {'accepted': True, 'completed': False}, 'message': 'Frissítés elindult – az állapot a kártyán követhető'}
|
||||
20:23:37 + 0.0s phase=safety-dump label=Adatbázis pillanatkép… err=None hold=None
|
||||
20:23:38 + 1.0s phase=pulling label=Új verzió letöltése… err=None hold=None
|
||||
20:24:54 + 76.9s phase=starting label=Indítás az új verzióval… err=None hold=None
|
||||
20:25:06 + 88.2s phase=verifying label=Működés ellenőrzése… err=None hold=None
|
||||
20:25:21 + 103.5s phase=done label=Frissítve err=None hold=None
|
||||
20:25:21 [7] reading the seed back AFTER the update
|
||||
20:25:22 docmost: login as the seeded user http=200 ok=True
|
||||
20:25:24 [8] pinned = {'docmost': 'docmost/docmost:0.96.0', 'docmost-postgres': 'postgres:16-alpine', 'docmost-redis': 'redis:7-alpine'}
|
||||
20:25:24 [8] installed = {'docmost': 'docmost/docmost:0.96.0', 'docmost-postgres': 'postgres:16-alpine', 'docmost-redis': 'redis:7-alpine'}
|
||||
20:25:24 [8] compose = ['image: docmost/docmost:0.96.0', 'image: postgres:16-alpine', 'image: redis:7-alpine']
|
||||
20:25:24 [8] inspect = ['docmost docmost/docmost:0.96.0 running=true restarts=0', 'docmost-postgres postgres:16-alpine running=true restarts=0', 'docmost-redis redis:7-alpine running=true restarts=0']
|
||||
20:25:24 [9] verdict proven -> /mnt/5_hdd/felhom.eu/git/felhom.eu/documentation/audits/update-night-2026-09-21/apps/docmost/verdict.json
|
||||
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"pinned_images": {
|
||||
"docmost": "docmost/docmost:0.95.0",
|
||||
"docmost-postgres": "postgres:16-alpine",
|
||||
"docmost-redis": "redis:7-alpine"
|
||||
},
|
||||
"installed_images": {
|
||||
"docmost": "docmost/docmost:0.95.0",
|
||||
"docmost-postgres": "postgres:16-alpine",
|
||||
"docmost-redis": "redis:7-alpine"
|
||||
},
|
||||
"catalog_images": null,
|
||||
"live_compose_image_lines": [
|
||||
"image: docmost/docmost:0.95.0",
|
||||
"image: postgres:16-alpine",
|
||||
"image: redis:7-alpine"
|
||||
],
|
||||
"docker_inspect": [
|
||||
"docmost docmost/docmost:0.95.0 running=true restarts=0",
|
||||
"docmost-postgres postgres:16-alpine running=true restarts=0",
|
||||
"docmost-redis redis:7-alpine running=true restarts=0"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,52 @@
|
||||
{
|
||||
"before": {
|
||||
"pinned_images": {
|
||||
"docmost": "docmost/docmost:0.95.0",
|
||||
"docmost-postgres": "postgres:16-alpine",
|
||||
"docmost-redis": "redis:7-alpine"
|
||||
},
|
||||
"installed_images": {
|
||||
"docmost": "docmost/docmost:0.95.0",
|
||||
"docmost-postgres": "postgres:16-alpine",
|
||||
"docmost-redis": "redis:7-alpine"
|
||||
},
|
||||
"catalog_images": null,
|
||||
"live_compose_image_lines": [
|
||||
"image: docmost/docmost:0.95.0",
|
||||
"image: postgres:16-alpine",
|
||||
"image: redis:7-alpine"
|
||||
],
|
||||
"docker_inspect": [
|
||||
"docmost docmost/docmost:0.95.0 running=true restarts=0",
|
||||
"docmost-postgres postgres:16-alpine running=true restarts=0",
|
||||
"docmost-redis redis:7-alpine running=true restarts=0"
|
||||
]
|
||||
},
|
||||
"after": {
|
||||
"pinned_images": {
|
||||
"docmost": "docmost/docmost:0.96.0",
|
||||
"docmost-postgres": "postgres:16-alpine",
|
||||
"docmost-redis": "redis:7-alpine"
|
||||
},
|
||||
"installed_images": {
|
||||
"docmost": "docmost/docmost:0.96.0",
|
||||
"docmost-postgres": "postgres:16-alpine",
|
||||
"docmost-redis": "redis:7-alpine"
|
||||
},
|
||||
"catalog_images": {
|
||||
"docmost": "docmost/docmost:0.96.0",
|
||||
"docmost-postgres": "postgres:16-alpine",
|
||||
"docmost-redis": "redis:7-alpine"
|
||||
},
|
||||
"live_compose_image_lines": [
|
||||
"image: docmost/docmost:0.96.0",
|
||||
"image: postgres:16-alpine",
|
||||
"image: redis:7-alpine"
|
||||
],
|
||||
"docker_inspect": [
|
||||
"docmost docmost/docmost:0.96.0 running=true restarts=0",
|
||||
"docmost-postgres postgres:16-alpine running=true restarts=0",
|
||||
"docmost-redis redis:7-alpine running=true restarts=0"
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
{
|
||||
"accepted": true,
|
||||
"http": "202",
|
||||
"phases": [
|
||||
{
|
||||
"t": 0.0,
|
||||
"phase": "safety-dump",
|
||||
"label": "Adatbázis pillanatkép…",
|
||||
"updating": true,
|
||||
"error": null,
|
||||
"hold": null
|
||||
},
|
||||
{
|
||||
"t": 1.0,
|
||||
"phase": "pulling",
|
||||
"label": "Új verzió letöltése…",
|
||||
"updating": true,
|
||||
"error": null,
|
||||
"hold": null
|
||||
},
|
||||
{
|
||||
"t": 76.9,
|
||||
"phase": "starting",
|
||||
"label": "Indítás az új verzióval…",
|
||||
"updating": true,
|
||||
"error": null,
|
||||
"hold": null
|
||||
},
|
||||
{
|
||||
"t": 88.2,
|
||||
"phase": "verifying",
|
||||
"label": "Működés ellenőrzése…",
|
||||
"updating": true,
|
||||
"error": null,
|
||||
"hold": null
|
||||
},
|
||||
{
|
||||
"t": 103.5,
|
||||
"phase": "done",
|
||||
"label": "Frissítve",
|
||||
"updating": false,
|
||||
"error": null,
|
||||
"hold": null
|
||||
}
|
||||
],
|
||||
"duration_s": 103.6,
|
||||
"final_phase": "done",
|
||||
"update_error": null,
|
||||
"hold_reason": null,
|
||||
"state": "running"
|
||||
}
|
||||
@@ -0,0 +1,57 @@
|
||||
{
|
||||
"harness_version": 1,
|
||||
"app": "docmost",
|
||||
"venue": "guest 9202 demo-hp-scratch, controller 0.261.0",
|
||||
"class": "db-postgres",
|
||||
"from": {
|
||||
"docmost": "docmost/docmost:0.95.0",
|
||||
"docmost-postgres": "postgres:16-alpine",
|
||||
"docmost-redis": "redis:7-alpine"
|
||||
},
|
||||
"to": {
|
||||
"docmost": "docmost/docmost:0.96.0",
|
||||
"docmost-postgres": "postgres:16-alpine",
|
||||
"docmost-redis": "redis:7-alpine"
|
||||
},
|
||||
"verdict": "proven",
|
||||
"seed_read_before": true,
|
||||
"seed_read_after": true,
|
||||
"healthy_after": true,
|
||||
"migration_observed": "docmost | {\"level\":\"info\",\"time\":\"2026-09-21T18:25:13.099Z\",\"pid\":45,\"hostname\":\"0dc77b73c358\",\"context\":\"DatabaseMigrationService\",\"msg\":\"Migration \\\"20260824T211732-page-title-trgm-index\\\" executed successfully\"}",
|
||||
"abort": "not-attempted",
|
||||
"abort_detail": null,
|
||||
"duration_s": 103.6,
|
||||
"measured_at": "2026-09-21T18:21:18.018992+00:00",
|
||||
"evidence": "apps/docmost/",
|
||||
"notes": [],
|
||||
"observables_after": {
|
||||
"pinned_images": {
|
||||
"docmost": "docmost/docmost:0.96.0",
|
||||
"docmost-postgres": "postgres:16-alpine",
|
||||
"docmost-redis": "redis:7-alpine"
|
||||
},
|
||||
"installed_images": {
|
||||
"docmost": "docmost/docmost:0.96.0",
|
||||
"docmost-postgres": "postgres:16-alpine",
|
||||
"docmost-redis": "redis:7-alpine"
|
||||
},
|
||||
"catalog_images": {
|
||||
"docmost": "docmost/docmost:0.96.0",
|
||||
"docmost-postgres": "postgres:16-alpine",
|
||||
"docmost-redis": "redis:7-alpine"
|
||||
},
|
||||
"live_compose_image_lines": [
|
||||
"image: docmost/docmost:0.96.0",
|
||||
"image: postgres:16-alpine",
|
||||
"image: redis:7-alpine"
|
||||
],
|
||||
"docker_inspect": [
|
||||
"docmost docmost/docmost:0.96.0 running=true restarts=0",
|
||||
"docmost-postgres postgres:16-alpine running=true restarts=0",
|
||||
"docmost-redis redis:7-alpine running=true restarts=0"
|
||||
]
|
||||
},
|
||||
"final_phase": "done",
|
||||
"hold_reason": null,
|
||||
"update_error": null
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
20:37:09 ==== gitea: gitea/gitea:1.27.0 -> gitea/gitea:1.27.3 (sub=git, class=other)
|
||||
20:37:10 [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'}
|
||||
20:37:25 [1] deployed, controller state=running, pinned={'gitea': 'gitea/gitea:1.27.0'}
|
||||
20:37:27 [2] seeding through the app's own front door
|
||||
20:37:30 gitea: admin user create :: 2026/09/21 20:37:30 modules/setting/setting.go:106:MustInstalled() [F] Unable to load config file for a installed Gitea instance, you should
|
||||
20:37:30 [9] verdict inconclusive -> /mnt/5_hdd/felhom.eu/git/felhom.eu/documentation/audits/update-night-2026-09-21/apps/gitea/verdict.json
|
||||
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"pinned_images": {
|
||||
"gitea": "gitea/gitea:1.27.0"
|
||||
},
|
||||
"installed_images": {
|
||||
"gitea": "gitea/gitea:1.27.0"
|
||||
},
|
||||
"catalog_images": null,
|
||||
"live_compose_image_lines": [
|
||||
"image: gitea/gitea:1.27.0"
|
||||
],
|
||||
"docker_inspect": [
|
||||
"gitea gitea/gitea:1.27.0 running=true restarts=0"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"harness_version": 1,
|
||||
"app": "gitea",
|
||||
"venue": "guest 9202 demo-hp-scratch, controller 0.261.0",
|
||||
"class": "other",
|
||||
"from": {
|
||||
"gitea": "gitea/gitea:1.27.0"
|
||||
},
|
||||
"to": {},
|
||||
"verdict": "inconclusive",
|
||||
"seed_read_before": false,
|
||||
"seed_read_after": false,
|
||||
"healthy_after": false,
|
||||
"migration_observed": null,
|
||||
"abort": "not-attempted",
|
||||
"abort_detail": null,
|
||||
"duration_s": 20.1,
|
||||
"measured_at": "2026-09-21T18:37:10.025072+00:00",
|
||||
"evidence": "apps/gitea/",
|
||||
"notes": [
|
||||
"seed refused through the app's own route — see log.txt for what was tried",
|
||||
"seed route did not work tonight"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,276 @@
|
||||
grafana | logger=settings t=2026-09-21T21:04:46.555328402+02:00 level=info msg="Starting Grafana" version=13.2.2 commit=1bea008f7e4e858b6824c9e364d608bd4d10b13a branch=release-13.2.2#patched compiled=2026-09-14T15:01:48+02:00
|
||||
grafana | logger=settings t=2026-09-21T21:04:46.556182975+02:00 level=info msg="Unified migration configs enforced" storage_type=unified target=[all]
|
||||
grafana | logger=settings t=2026-09-21T21:04:46.556199236+02:00 level=info msg="Enforcing mode 5 for resource in unified storage" resource=folders.folder.grafana.app
|
||||
grafana | logger=settings t=2026-09-21T21:04:46.556204085+02:00 level=info msg="Enforcing mode 5 for resource in unified storage" resource=dashboards.dashboard.grafana.app
|
||||
grafana | logger=settings t=2026-09-21T21:04:46.556207893+02:00 level=info msg="Enforcing mode 5 for resource in unified storage" resource=shorturls.shorturl.grafana.app
|
||||
grafana | logger=settings t=2026-09-21T21:04:46.556213293+02:00 level=info msg="Enforcing mode 5 for resource in unified storage" resource=playlists.playlist.grafana.app
|
||||
grafana | logger=settings t=2026-09-21T21:04:46.556401198+02:00 level=info msg="Config loaded from" file=/usr/share/grafana/conf/defaults.ini
|
||||
grafana | logger=settings t=2026-09-21T21:04:46.556408261+02:00 level=info msg="Config loaded from" file=/etc/grafana/grafana.ini
|
||||
grafana | logger=settings t=2026-09-21T21:04:46.556411778+02:00 level=info msg="Config overridden from command line" arg="default.paths.data=/var/lib/grafana"
|
||||
grafana | logger=settings t=2026-09-21T21:04:46.556415214+02:00 level=info msg="Config overridden from command line" arg="default.paths.logs=/var/log/grafana"
|
||||
grafana | logger=settings t=2026-09-21T21:04:46.556418991+02:00 level=info msg="Config overridden from command line" arg="default.paths.plugins=/var/lib/grafana/plugins"
|
||||
grafana | logger=settings t=2026-09-21T21:04:46.556423379+02:00 level=info msg="Config overridden from command line" arg="default.paths.provisioning=/etc/grafana/provisioning"
|
||||
grafana | logger=settings t=2026-09-21T21:04:46.556427537+02:00 level=info msg="Config overridden from command line" arg="default.log.mode=console"
|
||||
grafana | logger=settings t=2026-09-21T21:04:46.556432446+02:00 level=info msg="Config overridden from Environment variable" var="GF_PATHS_DATA=/var/lib/grafana"
|
||||
grafana | logger=settings t=2026-09-21T21:04:46.556436314+02:00 level=info msg="Config overridden from Environment variable" var="GF_PATHS_LOGS=/var/log/grafana"
|
||||
grafana | logger=settings t=2026-09-21T21:04:46.55643986+02:00 level=info msg="Config overridden from Environment variable" var="GF_PATHS_PLUGINS=/var/lib/grafana/plugins"
|
||||
grafana | logger=settings t=2026-09-21T21:04:46.556443868+02:00 level=info msg="Config overridden from Environment variable" var="GF_PATHS_PROVISIONING=/etc/grafana/provisioning"
|
||||
grafana | logger=settings t=2026-09-21T21:04:46.556448336+02:00 level=info msg="Config overridden from Environment variable" var="GF_SERVER_ROOT_URL=https://grafana.enkisfelhom.hu"
|
||||
grafana | logger=settings t=2026-09-21T21:04:46.556452705+02:00 level=info msg="Config overridden from Environment variable" var="GF_SECURITY_ADMIN_PASSWORD=*********"
|
||||
grafana | logger=settings t=2026-09-21T21:04:46.556457053+02:00 level=info msg="Config overridden from Environment variable" var="GF_PATHS_HOME=/usr/share/grafana"
|
||||
grafana | logger=settings t=2026-09-21T21:04:46.556468975+02:00 level=info msg="Config overridden from Environment variable" var="GF_PATHS_CONFIG=/etc/grafana/grafana.ini"
|
||||
grafana | logger=settings t=2026-09-21T21:04:46.556473634+02:00 level=info msg=Target target=[all]
|
||||
grafana | logger=settings t=2026-09-21T21:04:46.556479145+02:00 level=info msg="Path Home" path=/usr/share/grafana
|
||||
grafana | logger=settings t=2026-09-21T21:04:46.556482591+02:00 level=info msg="Path Data" path=/var/lib/grafana
|
||||
grafana | logger=settings t=2026-09-21T21:04:46.556485947+02:00 level=info msg="Path Logs" path=/var/log/grafana
|
||||
grafana | logger=settings t=2026-09-21T21:04:46.556489174+02:00 level=info msg="Path Plugins" path="[/var/lib/grafana/plugins /usr/share/grafana/data/plugins-bundled]"
|
||||
grafana | logger=settings t=2026-09-21T21:04:46.556499212+02:00 level=info msg="Path Provisioning" path=/etc/grafana/provisioning
|
||||
grafana | logger=settings t=2026-09-21T21:04:46.556503511+02:00 level=info msg="App mode production"
|
||||
grafana | logger=featuremgmt t=2026-09-21T21:04:46.557422075+02:00 level=info msg=FeatureToggles alertRuleRestore=true alertingBulkActionsInUI=true alertingImportYAMLUI=true alertingListViewV2=true alertingMigrationUI=true alertingNavigationV2=true alertingNotificationsStepMode=true alertingQueryAndExpressionsStepMode=true alertingRulePermanentlyDelete=true alertingRuleRecoverDeleted=true alertingRuleVersionHistoryRestore=true alertingUIOptimizeReducer=true alertingUIUseBackendFilters=true alertingUIUseFullyCompatBackendFilters=true alertingUseNewSimplifiedRoutingHashAlgorithm=true annotationPermissionUpdate=true auditLoggingAppPlatform=true awsAsyncQueryCaching=true awsDatasourcesTempCredentials=true azureMonitorEnableUserAuth=true azureMonitorPrometheusExemplars=true azureResourcePickerUpdates=true cloudWatchCrossAccountQuerying=true cloudWatchNewLabelParsing=true cloudWatchRoundUpEndTime=true dashboardNewLayouts=true dashboardUnifiedDrilldownControls=true disableScriptedDashboards=true enableSCIM=true feedbackButton=true grafana.dashboardSettingsRedesign=true grafana.newPreferencesPage=true grafana.queryVarEditorRedesign=true grafana.scenesFlickeringFix=true grafana.unifiedDataSourcePicker=true grafana.viewPanelPane=true grafanaAssistantInProfilesDrilldown=true improvedExternalSessionHandling=true improvedExternalSessionHandlingSAML=true lokiLabelNamesQueryApi=true lokiQuerySplitting=true newClickhouseConfigPageDesign=true newSavedQueriesExperience=true onlyStoreActionSets=true preferences.rerouteLegacyAPIs=true profilesExemplars=true prometheusAzureOverrideAudience=true prometheusTypeMigration=true provisioning.gitConventions=true provisioning.readmes=true provisioning.userAttribution=true provisioningFolderMetadata=true pyroscopeUTF8LabelNames=true queryLibrary=true react19=true rememberUserOrgForSso=true renderAuthJWT=true restrictedPluginApis=true savedQueriesRBAC=true sqlExpressions=true useKubernetesShortURLsAPI=true useSessionStorageForRedirection=true
|
||||
grafana | logger=sqlstore t=2026-09-21T21:04:46.557494251+02:00 level=info msg="Connecting to DB" dbtype=sqlite3
|
||||
grafana | logger=sqlstore t=2026-09-21T21:04:46.557500644+02:00 level=info msg="Using SQLite driver" driver=modernc.org/sqlite
|
||||
grafana | logger=migrator t=2026-09-21T21:04:46.558198331+02:00 level=info msg="Starting DB migrations"
|
||||
grafana | logger=migrator t=2026-09-21T21:04:46.569406406+02:00 level=info msg="Executing migration" id="add manager_kind column to provenance_type table"
|
||||
grafana | logger=migrator t=2026-09-21T21:04:46.572170886+02:00 level=info msg="Migration successfully executed" id="add manager_kind column to provenance_type table" duration=2.760553ms
|
||||
grafana | logger=migrator t=2026-09-21T21:04:46.586646823+02:00 level=info msg="Executing migration" id="add manager_identity column to provenance_type table"
|
||||
grafana | logger=migrator t=2026-09-21T21:04:46.58992308+02:00 level=info msg="Migration successfully executed" id="add manager_identity column to provenance_type table" duration=3.275686ms
|
||||
grafana | logger=migrator t=2026-09-21T21:04:46.605101522+02:00 level=info msg="Executing migration" id="create table nats_discovery_peers"
|
||||
grafana | logger=migrator t=2026-09-21T21:04:46.605700894+02:00 level=info msg="Migration successfully executed" id="create table nats_discovery_peers" duration=597.969µs
|
||||
grafana | logger=migrator t=2026-09-21T21:04:46.623164291+02:00 level=info msg="Executing migration" id="Change key_path collation of nats_discovery_peers in postgres"
|
||||
grafana | logger=migrator t=2026-09-21T21:04:46.623198095+02:00 level=info msg="Migration successfully executed" id="Change key_path collation of nats_discovery_peers in postgres" duration=36.349µs
|
||||
grafana | logger=migrator t=2026-09-21T21:04:46.634349463+02:00 level=info msg="Executing migration" id="alter alert_rule_state id column to bigint for postgres"
|
||||
grafana | logger=migrator t=2026-09-21T21:04:46.634378147+02:00 level=info msg="Migration successfully executed" id="alter alert_rule_state id column to bigint for postgres" duration=31.069µs
|
||||
grafana | logger=migrator t=2026-09-21T21:04:46.648572432+02:00 level=info msg="Executing migration" id="alter alert_rule_state id sequence to bigint for postgres"
|
||||
grafana | logger=migrator t=2026-09-21T21:04:46.648600034+02:00 level=info msg="Migration successfully executed" id="alter alert_rule_state id sequence to bigint for postgres" duration=30.127µs
|
||||
grafana | logger=migrator t=2026-09-21T21:04:46.664103329+02:00 level=info msg="migrations completed" performed=6 skipped=713 duration=95.228456ms
|
||||
grafana | logger=secrets t=2026-09-21T21:04:46.665044878+02:00 level=info msg="Envelope encryption state" currentprovider=secretKey.v1
|
||||
grafana | logger=plugin.angulardetectorsprovider.dynamic t=2026-09-21T21:04:46.745685247+02:00 level=info msg="Restored cache from database" duration=756.258µs
|
||||
grafana | logger=resource-db t=2026-09-21T21:04:46.746632576+02:00 level=info msg="Using database section" db_type=sqlite3
|
||||
grafana | logger=accesscontrol.service t=2026-09-21T21:04:46.746755839+02:00 level=info msg="Starting migration to remove deprecated permissions" migration=removeDeprecatedPermissions
|
||||
grafana | logger=accesscontrol.service t=2026-09-21T21:04:46.747649035+02:00 level=info msg="Completed migration to remove deprecated permissions" migration=removeDeprecatedPermissions totalRemoved=0 duration=892.775µs
|
||||
grafana | logger=plugin.store t=2026-09-21T21:04:46.804510311+02:00 level=info msg="Loading plugins..."
|
||||
grafana | logger=plugins.registration t=2026-09-21T21:04:46.920264939+02:00 level=info msg="Plugin registered" pluginId=grafana-exploretraces-app
|
||||
grafana | logger=plugins.registration t=2026-09-21T21:04:47.016524944+02:00 level=info msg="Plugin registered" pluginId=grafana-lokiexplore-app
|
||||
grafana | logger=plugins.registration t=2026-09-21T21:04:47.080112561+02:00 level=info msg="Plugin registered" pluginId=grafana-metricsdrilldown-app
|
||||
grafana | logger=plugins.registration t=2026-09-21T21:04:47.144369763+02:00 level=info msg="Plugin registered" pluginId=grafana-pyroscope-app
|
||||
grafana | logger=plugins.registration t=2026-09-21T21:04:47.229460346+02:00 level=info msg="Plugin registered" pluginId=elasticsearch
|
||||
grafana | logger=plugins.registration t=2026-09-21T21:04:47.30980137+02:00 level=info msg="Plugin registered" pluginId=grafana-postgresql-datasource
|
||||
grafana | logger=plugins.registration t=2026-09-21T21:04:47.368534029+02:00 level=info msg="Plugin registered" pluginId=grafana-pyroscope-datasource
|
||||
grafana | logger=plugins.registration t=2026-09-21T21:04:47.458872162+02:00 level=info msg="Plugin registered" pluginId=influxdb
|
||||
grafana | logger=plugins.registration t=2026-09-21T21:04:47.5081467+02:00 level=info msg="Plugin registered" pluginId=jaeger
|
||||
grafana | logger=plugins.registration t=2026-09-21T21:04:47.597745116+02:00 level=info msg="Plugin registered" pluginId=loki
|
||||
grafana | logger=plugins.registration t=2026-09-21T21:04:47.687783262+02:00 level=info msg="Plugin registered" pluginId=mssql
|
||||
grafana | logger=plugins.registration t=2026-09-21T21:04:47.76455211+02:00 level=info msg="Plugin registered" pluginId=mysql
|
||||
grafana | logger=plugins.registration t=2026-09-21T21:04:47.809713612+02:00 level=info msg="Plugin registered" pluginId=opentsdb
|
||||
grafana | logger=plugins.registration t=2026-09-21T21:04:47.919068225+02:00 level=info msg="Plugin registered" pluginId=prometheus
|
||||
grafana | logger=plugins.registration t=2026-09-21T21:04:47.978599843+02:00 level=info msg="Plugin registered" pluginId=stackdriver
|
||||
grafana | logger=plugins.registration t=2026-09-21T21:04:48.071302861+02:00 level=info msg="Plugin registered" pluginId=tempo
|
||||
grafana | logger=plugins.registration t=2026-09-21T21:04:48.116684729+02:00 level=info msg="Plugin registered" pluginId=zipkin
|
||||
grafana | logger=plugin.store t=2026-09-21T21:04:48.116718973+02:00 level=info msg="Plugins loaded" count=55 duration=1.312209614s
|
||||
grafana | logger=secret-migrator t=2026-09-21T21:04:48.117357549+02:00 level=info msg="Starting DB migrations"
|
||||
grafana | logger=secret-migrator t=2026-09-21T21:04:48.118669316+02:00 level=info msg="migrations completed" performed=0 skipped=35 duration=103.084µs
|
||||
grafana | logger=resource-db t=2026-09-21T21:04:48.121001901+02:00 level=info msg="Initializing Resource DB" db_type=sqlite3 open_conn=0 in_use_conn=0 idle_conn=0 max_open_conn=0
|
||||
grafana | logger=resource-migrator t=2026-09-21T21:04:48.121218931+02:00 level=info msg="Starting DB migrations"
|
||||
grafana | logger=resource-migrator t=2026-09-21T21:04:48.126206219+02:00 level=info msg="Executing migration" id="create table resource_stats_daily"
|
||||
grafana | logger=resource-migrator t=2026-09-21T21:04:48.126831931+02:00 level=info msg="Migration successfully executed" id="create table resource_stats_daily" duration=623.758µs
|
||||
grafana | logger=resource-migrator t=2026-09-21T21:04:48.148625685+02:00 level=info msg="Executing migration" id="Change key_path collation of resource_stats_daily in postgres"
|
||||
grafana | logger=resource-migrator t=2026-09-21T21:04:48.148655953+02:00 level=info msg="Migration successfully executed" id="Change key_path collation of resource_stats_daily in postgres" duration=29.766µs
|
||||
grafana | logger=resource-migrator t=2026-09-21T21:04:48.157342145+02:00 level=info msg="Executing migration" id="create table resource_stats_aggregates"
|
||||
grafana | logger=resource-migrator t=2026-09-21T21:04:48.157977495+02:00 level=info msg="Migration successfully executed" id="create table resource_stats_aggregates" duration=635.931µs
|
||||
grafana | logger=resource-migrator t=2026-09-21T21:04:48.176203994+02:00 level=info msg="Executing migration" id="Change key_path collation of resource_stats_aggregates in postgres"
|
||||
grafana | logger=resource-migrator t=2026-09-21T21:04:48.176237106+02:00 level=info msg="Migration successfully executed" id="Change key_path collation of resource_stats_aggregates in postgres" duration=35.657µs
|
||||
grafana | logger=resource-migrator t=2026-09-21T21:04:48.185381985+02:00 level=info msg="Executing migration" id="create table resource_version_policy"
|
||||
grafana | logger=resource-migrator t=2026-09-21T21:04:48.185971799+02:00 level=info msg="Migration successfully executed" id="create table resource_version_policy" duration=592.359µs
|
||||
grafana | logger=resource-migrator t=2026-09-21T21:04:48.19738967+02:00 level=info msg="Executing migration" id="Change key_path collation of resource_version_policy in postgres"
|
||||
grafana | logger=resource-migrator t=2026-09-21T21:04:48.19742125+02:00 level=info msg="Migration successfully executed" id="Change key_path collation of resource_version_policy in postgres" duration=33.404µs
|
||||
grafana | logger=resource-migrator t=2026-09-21T21:04:48.211113616+02:00 level=info msg="migrations completed" performed=6 skipped=49 duration=85.061248ms
|
||||
grafana | t=2026-09-21T21:04:48.211665118+02:00 level=info caller=logger.go:214 time=2026-09-21T21:04:48.211641513+02:00 msg="Using channel notifier" logger=sql-resource-server
|
||||
grafana | logger=bleve-backend namespace=default group=advisor.grafana.app resource=checktypes reason=init t=2026-09-21T21:04:48.213429069+02:00 level=info msg="Building index using memory"
|
||||
grafana | logger=bleve-backend namespace=default group=advisor.grafana.app resource=checktypes reason=init t=2026-09-21T21:04:48.216799383+02:00 level=info msg="Finished building index" elapsed=3.289532ms listRV=1790017383920012
|
||||
grafana | logger=bleve-backend namespace=default group=advisor.grafana.app resource=checktypes reason=init t=2026-09-21T21:04:48.2168507+02:00 level=info msg="Storing index in cache" key="{Namespace:default Group:advisor.grafana.app Resource:checktypes}" expiration=2026-09-21T21:14:48.216848876+02:00
|
||||
grafana | logger=resource-search t=2026-09-21T21:04:48.217035679+02:00 level=info msg="search index initialized" duration_secs=0 total_docs=5
|
||||
grafana | logger=storage.unified.migrations t=2026-09-21T21:04:48.224381541+02:00 level=info msg="Running migrations for unified storage"
|
||||
grafana | logger=storage.unified.migrations t=2026-09-21T21:04:48.224467193+02:00 level=info msg="Migration is disabled in config, skipping" migration=snapshots
|
||||
grafana | logger=storage.unified.migrations t=2026-09-21T21:04:48.224483433+02:00 level=info msg="Migration is disabled in config, skipping" migration=datasource
|
||||
grafana | logger=storage.unified.migrations t=2026-09-21T21:04:48.224491799+02:00 level=info msg="Migration is disabled in config, skipping" migration=stars
|
||||
grafana | logger=storage.unified.migrations t=2026-09-21T21:04:48.224499664+02:00 level=info msg="Migration is disabled in config, skipping" migration=preferences
|
||||
grafana | logger=storage.unified.migrations t=2026-09-21T21:04:48.224511536+02:00 level=info msg="Migration is disabled in config, skipping" migration=querycacheconfigs
|
||||
grafana | logger=unifiedstorage-migrator t=2026-09-21T21:04:48.224526374+02:00 level=info msg="Starting DB migrations"
|
||||
grafana | logger=unifiedstorage-migrator t=2026-09-21T21:04:48.224974551+02:00 level=info msg="Executing migration" id="shorturls migration"
|
||||
grafana | logger=storage.unified.migration_runner.shorturls t=2026-09-21T21:04:48.225114235+02:00 level=info msg="Starting migration for all organizations" org_count=1 resources=[shorturls.shorturl.grafana.app]
|
||||
grafana | logger=storage.unified.migration_runner.shorturls t=2026-09-21T21:04:48.225155643+02:00 level=info msg="Stored migrator transaction in context for bulk operations (SQLite compatibility)"
|
||||
grafana | logger=storage.unified.migration_runner.shorturls t=2026-09-21T21:04:48.228583927+02:00 level=info msg="Migrating organization" org_id=1 namespace=default
|
||||
grafana | logger=storage.unified.migrator t=2026-09-21T21:04:48.228701939+02:00 level=info msg="start migrating legacy resources" namespace=default orgId=1 stackId=0
|
||||
grafana | logger=storage.unified.migration_runner.shorturls t=2026-09-21T21:04:48.228827306+02:00 level=info msg="Migration progress" org_id=1 count=-1 message="migrating short URLs..."
|
||||
grafana | t=2026-09-21T21:04:48.228974184+02:00 level=info caller=logger.go:214 time=2026-09-21T21:04:48.228962892+02:00 msg="Using SQLite transaction from client context" logger=sql-resource-server
|
||||
grafana | logger=storage.unified.migration_runner.shorturls t=2026-09-21T21:04:48.22944348+02:00 level=info msg="Migration progress" org_id=1 count=0 message="finished reading legacy short URLs from legacy short_url table in 595.615µs (0)"
|
||||
grafana | logger=storage.unified.migration_runner.shorturls t=2026-09-21T21:04:48.229460512+02:00 level=info msg="Migration progress" org_id=1 count=0 message="finished converting legacy short URLs to unified storage format in 0s (0)"
|
||||
grafana | logger=storage.unified.migration_runner.shorturls t=2026-09-21T21:04:48.229469509+02:00 level=info msg="Migration progress" org_id=1 count=0 message="finished writing short URLs to unified storage in 0s (0)"
|
||||
grafana | logger=storage.unified.migration_runner.shorturls t=2026-09-21T21:04:48.229477564+02:00 level=info msg="Migration progress" org_id=1 count=-2 message="finished short URLs... (0)"
|
||||
grafana | logger=storage.unified.migrator t=2026-09-21T21:04:48.229485389+02:00 level=info msg="finished migrating legacy resources" namespace=default orgId=1 stackId=0
|
||||
grafana | t=2026-09-21T21:04:48.229527098+02:00 level=info caller=logger.go:214 time=2026-09-21T21:04:48.229515095+02:00 msg="synchronize collection" key=default/shorturl.grafana.app/shorturls
|
||||
grafana | t=2026-09-21T21:04:48.23068828+02:00 level=info caller=logger.go:214 time=2026-09-21T21:04:48.230677991+02:00 msg="get stats (still in transaction)" key=default/shorturl.grafana.app/shorturls
|
||||
grafana | t=2026-09-21T21:04:48.231933542+02:00 level=info caller=logger.go:214 time=2026-09-21T21:04:48.23191672+02:00 msg="successfully locked RV" logger=sql-resource-server nextRV=1790017488231012 key=default/shorturl.grafana.app/shorturls
|
||||
grafana | t=2026-09-21T21:04:48.232122349+02:00 level=info caller=logger.go:214 time=2026-09-21T21:04:48.232114173+02:00 msg="successfully saved RV" logger=sql-resource-server rv=1790017488231012 key=default/shorturl.grafana.app/shorturls
|
||||
grafana | logger=storage.unified.migrator namespace=default orgId=1 resources=[shorturls.shorturl.grafana.app] t=2026-09-21T21:04:48.232765683+02:00 level=info msg="start rebuilding index for resources"
|
||||
grafana | logger=storage.unified.migrator namespace=default orgId=1 resources=[shorturls.shorturl.grafana.app] t=2026-09-21T21:04:48.23350028+02:00 level=info msg="finished rebuilding index for resources" attempts=1
|
||||
grafana | logger=storage.unified.migration_runner.shorturls t=2026-09-21T21:04:48.233694547+02:00 level=info msg="Count validation" resource=shorturls.shorturl.grafana.app namespace=default legacy_count=0 unified_count=0 migration_summary_count=0 rejected=0 history=0
|
||||
grafana | logger=storage.unified.migration_runner.shorturls t=2026-09-21T21:04:48.233716088+02:00 level=info msg="Migration completed for organization" org_id=1 duration=5.096614ms processed=0 summaries=1 rejected=0
|
||||
grafana | logger=storage.unified.migrations t=2026-09-21T21:04:48.234147362+02:00 level=info msg="renaming legacy table" table=short_url newName=short_url_legacy sql="ALTER TABLE `short_url` RENAME TO `short_url_legacy`"
|
||||
grafana | logger=storage.unified.migration_runner.shorturls t=2026-09-21T21:04:48.243749074+02:00 level=info msg="Migration completed successfully for all organizations" org_count=1
|
||||
grafana | logger=unifiedstorage-migrator t=2026-09-21T21:04:48.243781185+02:00 level=info msg="Migration successfully executed" id="shorturls migration" duration=18.805942ms
|
||||
grafana | logger=unifiedstorage-migrator t=2026-09-21T21:04:48.255062478+02:00 level=info msg="migrations completed" performed=1 skipped=3 duration=30.1216ms
|
||||
grafana | logger=storage.unified.migrations t=2026-09-21T21:04:48.255422468+02:00 level=info msg="Unified storage migrations completed successfully"
|
||||
grafana | logger=live.push_http t=2026-09-21T21:04:48.263367501+02:00 level=info msg="Live Push Gateway initialization"
|
||||
grafana | logger=ngalert.notifier t=2026-09-21T21:04:48.265417222+02:00 level=info component=alertmanager orgID=1 msg="template definitions loaded" mimir=0 grafana=0 total=0 maxTemplateOutput=10485760
|
||||
grafana | logger=ngalert.notifier component=alertmanager orgID=1 t=2026-09-21T21:04:48.266609523+02:00 level=info msg="Applying new configuration to Alertmanager" configHash="{12383335334731491449 16454292769479786371 11535544170606148457 1343157387507078592 10278876130067529486 4613426124549341787 5144611013662998819}"
|
||||
grafana | logger=ngalert.notifier t=2026-09-21T21:04:48.266640652+02:00 level=info component=alertmanager orgID=1 msg="template definitions loaded" mimir=0 grafana=0 total=0 maxTemplateOutput=10485760
|
||||
grafana | logger=ngalert.writer t=2026-09-21T21:04:48.276846645+02:00 level=info msg="Setting up remote write using data sources" timeout=30s default_datasource_uid=
|
||||
grafana | logger=ngalert.state.manager.persist t=2026-09-21T21:04:48.27701899+02:00 level=info msg="Using sync rule state persister"
|
||||
grafana | logger=query_data t=2026-09-21T21:04:48.278396772+02:00 level=info msg="Query Service initialization"
|
||||
grafana | logger=annotation.app t=2026-09-21T21:04:48.311216448+02:00 level=info msg="Annotation cleanup disabled (no retention TTL configured)"
|
||||
grafana | logger=infra.usagestats.collector t=2026-09-21T21:04:48.313458472+02:00 level=info msg="registering usage stat providers" usageStatsProvidersLen=2
|
||||
grafana | logger=backgroundsvcs.managerAdapter t=2026-09-21T21:04:48.436042496+02:00 level=info msg=starting module=*sqlstore.SQLStore
|
||||
grafana | logger=backgroundsvcs.managerAdapter t=2026-09-21T21:04:48.436183703+02:00 level=info msg=starting module=tracing
|
||||
grafana | logger=backgroundsvcs.managerAdapter t=2026-09-21T21:04:48.436229419+02:00 level=info msg=starting module=grafana-apiserver
|
||||
grafana | logger=grafana-apiserver t=2026-09-21T21:04:48.759424353+02:00 level=info msg="Adding GroupVersion collections.grafana.app v1alpha1 to ResourceManager"
|
||||
grafana | t=2026-09-21T21:04:48.759610304+02:00 level=info caller=logger.go:214 time=2026-09-21T21:04:48.759598181+02:00 msg="Zanzana is not enabled; skipping folder propagation hooks"
|
||||
grafana | t=2026-09-21T21:04:48.75964533+02:00 level=info caller=logger.go:214 time=2026-09-21T21:04:48.75964014+02:00 msg="Zanzana is not enabled; skipping folder propagation hooks"
|
||||
grafana | logger=grafana-apiserver t=2026-09-21T21:04:48.760949854+02:00 level=info msg="Adding GroupVersion folder.grafana.app v1 to ResourceManager"
|
||||
grafana | logger=grafana-apiserver t=2026-09-21T21:04:48.761601845+02:00 level=info msg="Adding GroupVersion folder.grafana.app v1beta1 to ResourceManager"
|
||||
grafana | logger=grafana-apiserver t=2026-09-21T21:04:48.762529096+02:00 level=info msg="Adding GroupVersion userstorage.grafana.app v0alpha1 to ResourceManager"
|
||||
grafana | logger=grafana-apiserver t=2026-09-21T21:04:48.763773205+02:00 level=info msg="Adding GroupVersion preferences.grafana.app v1 to ResourceManager"
|
||||
grafana | logger=grafana-apiserver t=2026-09-21T21:04:48.764244455+02:00 level=info msg="Adding GroupVersion preferences.grafana.app v1alpha1 to ResourceManager"
|
||||
grafana | logger=grafana-apiserver t=2026-09-21T21:04:48.769166279+02:00 level=info msg="Adding GroupVersion provisioning.grafana.app v0alpha1 to ResourceManager"
|
||||
grafana | logger=grafana-apiserver t=2026-09-21T21:04:48.771456794+02:00 level=info msg="Adding GroupVersion provisioning.grafana.app v1beta1 to ResourceManager"
|
||||
grafana | logger=grafana-apiserver t=2026-09-21T21:04:48.771821273+02:00 level=info msg="Adding GroupVersion features.grafana.app v0alpha1 to ResourceManager"
|
||||
grafana | logger=grafana-apiserver t=2026-09-21T21:04:48.779350891+02:00 level=info msg="Adding GroupVersion dashboard.grafana.app v2 to ResourceManager"
|
||||
grafana | logger=grafana-apiserver t=2026-09-21T21:04:48.780506574+02:00 level=info msg="Adding GroupVersion dashboard.grafana.app v2beta1 to ResourceManager"
|
||||
grafana | logger=grafana-apiserver t=2026-09-21T21:04:48.780919203+02:00 level=info msg="Adding GroupVersion dashboard.grafana.app v2alpha1 to ResourceManager"
|
||||
grafana | logger=grafana-apiserver t=2026-09-21T21:04:48.781650774+02:00 level=info msg="Adding GroupVersion dashboard.grafana.app v0alpha1 to ResourceManager"
|
||||
grafana | logger=grafana-apiserver t=2026-09-21T21:04:48.782040571+02:00 level=info msg="Adding GroupVersion dashboard.grafana.app v1 to ResourceManager"
|
||||
grafana | logger=grafana-apiserver t=2026-09-21T21:04:48.782420178+02:00 level=info msg="Adding GroupVersion dashboard.grafana.app v1beta1 to ResourceManager"
|
||||
grafana | logger=grafana-apiserver t=2026-09-21T21:04:48.78357586+02:00 level=info msg="Adding GroupVersion playlist.grafana.app v1 to ResourceManager"
|
||||
grafana | logger=grafana-apiserver t=2026-09-21T21:04:48.784141798+02:00 level=info msg="Adding GroupVersion playlist.grafana.app v0alpha1 to ResourceManager"
|
||||
grafana | t=2026-09-21T21:04:48.784239673+02:00 level=info caller=logger.go:214 time=2026-09-21T21:04:48.784227971+02:00 msg="Installed APIs for app" app=playlist
|
||||
grafana | logger=grafana-apiserver t=2026-09-21T21:04:48.785779782+02:00 level=info msg="Adding GroupVersion plugins.grafana.app v0alpha1 to ResourceManager"
|
||||
grafana | t=2026-09-21T21:04:48.785904507+02:00 level=info caller=logger.go:214 time=2026-09-21T21:04:48.785878729+02:00 msg="Installed APIs for app" app=plugins
|
||||
grafana | logger=grafana-apiserver t=2026-09-21T21:04:48.787196086+02:00 level=info msg="Adding GroupVersion example.grafana.app v1alpha1 to ResourceManager"
|
||||
grafana | logger=grafana-apiserver t=2026-09-21T21:04:48.787751154+02:00 level=info msg="Adding GroupVersion example.grafana.app v0alpha1 to ResourceManager"
|
||||
grafana | t=2026-09-21T21:04:48.78790765+02:00 level=info caller=logger.go:214 time=2026-09-21T21:04:48.787884245+02:00 msg="Installed APIs for app" app=example
|
||||
grafana | logger=grafana-apiserver t=2026-09-21T21:04:48.787975969+02:00 level=info msg="Skipping API quotas.grafana.app/v0alpha1 because it has no resources."
|
||||
grafana | t=2026-09-21T21:04:48.78808238+02:00 level=info caller=logger.go:214 time=2026-09-21T21:04:48.78807728+02:00 msg="Installed APIs for app" app=quotas
|
||||
grafana | logger=storage.unified.migrations t=2026-09-21T21:04:48.788422101+02:00 level=info msg="Resolved storage mode from migration log" resource=shorturls.shorturl.grafana.app mode=unified
|
||||
grafana | logger=grafana-apiserver t=2026-09-21T21:04:48.789355654+02:00 level=info msg="Adding GroupVersion shorturl.grafana.app v1beta1 to ResourceManager"
|
||||
grafana | t=2026-09-21T21:04:48.789455643+02:00 level=info caller=logger.go:214 time=2026-09-21T21:04:48.789441266+02:00 msg="Installed APIs for app" app=shorturl
|
||||
grafana | t=2026-09-21T21:04:48.789637075+02:00 level=warn caller=logger.go:224 time=2026-09-21T21:04:48.789629902+02:00 msg="skipped registering status sub-resource that does not support dual writing" resource=alertrules.rules.alerting.grafana.app version=v0alpha1 storagePath=alertrules/status
|
||||
grafana | t=2026-09-21T21:04:48.789655961+02:00 level=warn caller=logger.go:224 time=2026-09-21T21:04:48.789651493+02:00 msg="skipped registering status sub-resource that does not support dual writing" resource=recordingrules.rules.alerting.grafana.app version=v0alpha1 storagePath=recordingrules/status
|
||||
grafana | logger=grafana-apiserver t=2026-09-21T21:04:48.791788418+02:00 level=info msg="Adding GroupVersion rules.alerting.grafana.app v0alpha1 to ResourceManager"
|
||||
grafana | t=2026-09-21T21:04:48.791974239+02:00 level=info caller=logger.go:214 time=2026-09-21T21:04:48.791961776+02:00 msg="Installed APIs for app" app=alerting
|
||||
grafana | logger=grafana-apiserver t=2026-09-21T21:04:48.795121452+02:00 level=info msg="Adding GroupVersion notifications.alerting.grafana.app v1beta1 to ResourceManager"
|
||||
grafana | logger=grafana-apiserver t=2026-09-21T21:04:48.79722286+02:00 level=info msg="Adding GroupVersion notifications.alerting.grafana.app v0alpha1 to ResourceManager"
|
||||
grafana | t=2026-09-21T21:04:48.797404113+02:00 level=info caller=logger.go:214 time=2026-09-21T21:04:48.797393142+02:00 msg="Installed APIs for app" app=alerting-notifications
|
||||
grafana | logger=grafana-apiserver t=2026-09-21T21:04:48.799002291+02:00 level=info msg="Adding GroupVersion advisor.grafana.app v0alpha1 to ResourceManager"
|
||||
grafana | t=2026-09-21T21:04:48.799180407+02:00 level=info caller=logger.go:214 time=2026-09-21T21:04:48.799163575+02:00 msg="Installed APIs for app" app=advisor
|
||||
grafana | t=2026-09-21T21:04:49.481475777+02:00 level=info caller=logger.go:214 time=2026-09-21T21:04:49.481453154+02:00 msg="App initialized" app=quotas
|
||||
grafana | t=2026-09-21T21:04:49.481554475+02:00 level=info caller=logger.go:214 time=2026-09-21T21:04:49.481548865+02:00 msg="App initialized" app=plugins
|
||||
grafana | t=2026-09-21T21:04:49.481490214+02:00 level=info caller=logger.go:214 time=2026-09-21T21:04:49.481463724+02:00 msg="App initialized" app=example
|
||||
grafana | t=2026-09-21T21:04:49.481508649+02:00 level=info caller=logger.go:214 time=2026-09-21T21:04:49.481494212+02:00 msg="App initialized" app=shorturl
|
||||
grafana | t=2026-09-21T21:04:49.481652781+02:00 level=info caller=logger.go:214 time=2026-09-21T21:04:49.481643944+02:00 msg="App initialized" app=playlist
|
||||
grafana | t=2026-09-21T21:04:49.481721972+02:00 level=info caller=logger.go:214 time=2026-09-21T21:04:49.481714488+02:00 msg="App initialized" app=alerting-notifications
|
||||
grafana | t=2026-09-21T21:04:49.481744084+02:00 level=info caller=logger.go:214 time=2026-09-21T21:04:49.481736139+02:00 msg="App initialized" app=advisor
|
||||
grafana | t=2026-09-21T21:04:49.482068045+02:00 level=info caller=logger.go:214 time=2026-09-21T21:04:49.482041235+02:00 msg="start concurrent job driver" logger=concurrent-job-driver num_drivers=3 job_timeout=20m0s lease_renewal_interval=20s
|
||||
grafana | t=2026-09-21T21:04:49.482175087+02:00 level=info caller=logger.go:214 time=2026-09-21T21:04:49.482154318+02:00 msg="starting job cleanup controller" logger=job-cleanup-controller cleanup_interval=3m0s expiry=1m0s
|
||||
grafana | t=2026-09-21T21:04:49.489513696+02:00 level=info caller=logger.go:214 time=2026-09-21T21:04:49.489491694+02:00 msg="App initialized" app=alerting
|
||||
grafana | logger=backgroundsvcs.managerAdapter t=2026-09-21T21:04:49.48958486+02:00 level=info msg=starting module=plugins.store
|
||||
grafana | logger=backgroundsvcs.managerAdapter t=2026-09-21T21:04:49.489637269+02:00 level=info msg=starting module=plugin.backgroundinstaller
|
||||
grafana | logger=plugin.backgroundinstaller t=2026-09-21T21:04:49.489656515+02:00 level=info msg="Plugins installed" plugins=[]
|
||||
grafana | logger=plugin.backgroundinstaller t=2026-09-21T21:04:49.489678848+02:00 level=info msg="Installing plugins" plugins="[{ID:elasticsearch Version: URL:} {ID:loki Version: URL:} {ID:jaeger Version: URL:} {ID:zipkin Version: URL:} {ID:stackdriver Version: URL:} {ID:grafana-pyroscope-datasource Version: URL:} {ID:grafana-metricsdrilldown-app Version: URL:} {ID:prometheus Version: URL:} {ID:tempo Version: URL:} {ID:grafana-pyroscope-app Version: URL:} {ID:mssql Version: URL:} {ID:mysql Version: URL:} {ID:opentsdb Version: URL:} {ID:grafana-exploretraces-app Version: URL:} {ID:influxdb Version: URL:} {ID:grafana-advisor-app Version: URL:} {ID:grafana-postgresql-datasource Version: URL:} {ID:grafana-lokiexplore-app Version: URL:}]"
|
||||
grafana | logger=backgroundsvcs.managerAdapter t=2026-09-21T21:04:49.489827148+02:00 level=info msg=starting module=provisioning
|
||||
grafana | logger=provisioning.alerting t=2026-09-21T21:04:49.490802459+02:00 level=info msg="starting to provision alerting"
|
||||
grafana | logger=provisioning.alerting t=2026-09-21T21:04:49.49083471+02:00 level=info msg="finished to provision alerting"
|
||||
grafana | logger=bleve-backend namespace=default group=dashboard.grafana.app resource=dashboards reason=search t=2026-09-21T21:04:49.545784746+02:00 level=info msg="Building index using memory"
|
||||
grafana | logger=bleve-backend namespace=default group=dashboard.grafana.app resource=dashboards reason=search t=2026-09-21T21:04:49.546698702+02:00 level=info msg="Finished building index" elapsed=760.596µs listRV=1790017380769997
|
||||
grafana | logger=bleve-backend namespace=default group=dashboard.grafana.app resource=dashboards reason=search t=2026-09-21T21:04:49.546734069+02:00 level=info msg="Storing index in cache" key="{Namespace:default Group:dashboard.grafana.app Resource:dashboards}" expiration=2026-09-21T21:14:49.546732907+02:00
|
||||
grafana | logger=provisioning.dashboard t=2026-09-21T21:04:49.560966846+02:00 level=info msg="starting to provision dashboards"
|
||||
grafana | logger=provisioning.dashboard t=2026-09-21T21:04:49.560996873+02:00 level=info msg="finished to provision dashboards"
|
||||
grafana | logger=backgroundsvcs.managerAdapter t=2026-09-21T21:04:49.575587425+02:00 level=info msg=starting module=*updatemanager.GrafanaService
|
||||
grafana | logger=backgroundsvcs.managerAdapter t=2026-09-21T21:04:49.575619786+02:00 level=info msg=starting module=*pluginexternal.Service
|
||||
grafana | logger=backgroundsvcs.managerAdapter t=2026-09-21T21:04:49.57563225+02:00 level=info msg=starting module=*appregistry.Service
|
||||
grafana | logger=backgroundsvcs.managerAdapter t=2026-09-21T21:04:49.57565355+02:00 level=info msg=starting module=*metric.Service
|
||||
grafana | logger=app-registry t=2026-09-21T21:04:49.575672816+02:00 level=info msg="app registry initialized"
|
||||
grafana | logger=backgroundsvcs.managerAdapter t=2026-09-21T21:04:49.575678728+02:00 level=info msg=starting module=*remotecache.RemoteCache
|
||||
grafana | logger=backgroundsvcs.managerAdapter t=2026-09-21T21:04:49.575691892+02:00 level=info msg=starting module=*authimpl.UserAuthTokenService
|
||||
grafana | logger=backgroundsvcs.managerAdapter t=2026-09-21T21:04:49.575704526+02:00 level=info msg=starting module=*manager.ServiceAccountsService
|
||||
grafana | logger=backgroundsvcs.managerAdapter t=2026-09-21T21:04:49.57582819+02:00 level=info msg=starting module=*store.standardStorageService
|
||||
grafana | logger=grafanaStorageLogger t=2026-09-21T21:04:49.575845092+02:00 level=info msg="Storage starting"
|
||||
grafana | logger=backgroundsvcs.managerAdapter t=2026-09-21T21:04:49.575866913+02:00 level=info msg=starting module=*service.DashboardUpdater
|
||||
grafana | logger=backgroundsvcs.managerAdapter t=2026-09-21T21:04:49.57599792+02:00 level=info msg=starting module=*migrations.SecretMigrationProviderImpl
|
||||
grafana | logger=backgroundsvcs.managerAdapter t=2026-09-21T21:04:49.576042294+02:00 level=info msg=starting module=*cleanup.CleanUpService
|
||||
grafana | logger=backgroundsvcs.managerAdapter t=2026-09-21T21:04:49.576056451+02:00 level=info msg=starting module=*api.HTTPServer
|
||||
grafana | logger=backgroundsvcs.managerAdapter t=2026-09-21T21:04:49.576158844+02:00 level=info msg=starting module=*live.GrafanaLive
|
||||
grafana | logger=backgroundsvcs.managerAdapter t=2026-09-21T21:04:49.576221963+02:00 level=info msg=starting module=*anonimpl.AnonDeviceService
|
||||
grafana | logger=backgroundsvcs.managerAdapter t=2026-09-21T21:04:49.576249094+02:00 level=info msg=starting module=*pushhttp.Gateway
|
||||
grafana | logger=backgroundsvcs.managerAdapter t=2026-09-21T21:04:49.576289421+02:00 level=info msg=starting module=*ngalert.AlertNG
|
||||
grafana | logger=ngalert t=2026-09-21T21:04:49.576363591+02:00 level=info msg="Primary node, alert rule evaluation enabled"
|
||||
grafana | logger=ngalert.state.manager t=2026-09-21T21:04:49.576385081+02:00 level=info msg="Warming state cache for startup"
|
||||
grafana | logger=backgroundsvcs.managerAdapter t=2026-09-21T21:04:49.576756292+02:00 level=info msg=starting module=*metrics.InternalMetricsService
|
||||
grafana | logger=backgroundsvcs.managerAdapter t=2026-09-21T21:04:49.577201954+02:00 level=info msg=starting module=*service.DashboardServiceImpl
|
||||
grafana | logger=backgroundsvcs.managerAdapter t=2026-09-21T21:04:49.577250666+02:00 level=info msg=starting module=*angulardetectorsprovider.Dynamic
|
||||
grafana | logger=backgroundsvcs.managerAdapter t=2026-09-21T21:04:49.57734803+02:00 level=info msg=starting module=*notifications.NotificationService
|
||||
grafana | logger=backgroundsvcs.managerAdapter t=2026-09-21T21:04:49.577382104+02:00 level=info msg=starting module=*ssosettingsimpl.Service
|
||||
grafana | logger=backgroundsvcs.managerAdapter t=2026-09-21T21:04:49.577392183+02:00 level=info msg=starting module=*service.UsageStats
|
||||
grafana | logger=backgroundsvcs.managerAdapter t=2026-09-21T21:04:49.57740098+02:00 level=info msg=starting module=*garbagecollectionworker.Worker
|
||||
grafana | logger=backgroundsvcs.managerAdapter t=2026-09-21T21:04:49.577479167+02:00 level=info msg=starting module=*authz.EmbeddedZanzanaService
|
||||
grafana | logger=backgroundsvcs.managerAdapter t=2026-09-21T21:04:49.577497562+02:00 level=info msg=starting module=*rendering.RenderingService
|
||||
grafana | logger=backgroundsvcs.managerAdapter t=2026-09-21T21:04:49.575605309+02:00 level=info msg=starting module=*dualwrite.ZanzanaReconciler
|
||||
grafana | logger=backgroundsvcs.managerAdapter t=2026-09-21T21:04:49.576042655+02:00 level=info msg=starting module=*dynamic.KeyRetriever
|
||||
grafana | logger=backgroundsvcs.managerAdapter t=2026-09-21T21:04:49.577620725+02:00 level=info msg=starting module=*loginattemptimpl.Service
|
||||
grafana | logger=backgroundsvcs.managerAdapter t=2026-09-21T21:04:49.577648577+02:00 level=info msg=starting module=*supportbundlesimpl.Service
|
||||
grafana | logger=backgroundsvcs.managerAdapter t=2026-09-21T21:04:49.577751872+02:00 level=info msg=starting module=*updatemanager.PluginsService
|
||||
grafana | logger=ngalert.multiorg.alertmanager t=2026-09-21T21:04:49.578055305+02:00 level=info msg="Starting MultiOrg Alertmanager"
|
||||
grafana | logger=backgroundsvcs.managerAdapter t=2026-09-21T21:04:49.575597314+02:00 level=info msg=starting module=*statscollector.Service
|
||||
grafana | logger=backgroundsvcs.managerAdapter t=2026-09-21T21:04:49.578196251+02:00 level=info msg=starting module=*manager.SecretsService
|
||||
grafana | logger=backgroundsvcs.managerAdapter t=2026-09-21T21:04:49.578646442+02:00 level=info msg="All modules healthy"
|
||||
grafana | logger=http.server t=2026-09-21T21:04:49.57959891+02:00 level=info msg="HTTP Server Listen" address=[::]:3000 protocol=http subUrl= socket=
|
||||
grafana | logger=ngalert.state.manager t=2026-09-21T21:04:49.64586728+02:00 level=info msg="State cache has been initialized" rules=0 states=0 duration=69.480115ms
|
||||
grafana | logger=ngalert.scheduler t=2026-09-21T21:04:49.645955326+02:00 level=info msg="Starting scheduler" tickInterval=10s maxAttempts=3
|
||||
grafana | logger=ngalert.scheduler t=2026-09-21T21:04:49.645994871+02:00 level=info msg=starting component=ticker first_tick=2026-09-21T21:04:50+02:00
|
||||
grafana | logger=plugin.backgroundinstaller t=2026-09-21T21:04:49.673761184+02:00 level=info msg="Installing plugin" pluginId=elasticsearch version=
|
||||
grafana | t=2026-09-21T21:04:49.683049183+02:00 level=info caller=logger.go:214 time=2026-09-21T21:04:49.68302635+02:00 msg="Starting ConnectionController" logger=provisioning-connection-controller
|
||||
grafana | t=2026-09-21T21:04:49.683081584+02:00 level=info caller=logger.go:214 time=2026-09-21T21:04:49.683075293+02:00 msg="Starting workers" logger=provisioning-connection-controller count=1
|
||||
grafana | t=2026-09-21T21:04:49.683102203+02:00 level=info caller=logger.go:214 time=2026-09-21T21:04:49.683096352+02:00 msg="Started workers" logger=provisioning-connection-controller
|
||||
grafana | logger=grafana.update.checker t=2026-09-21T21:04:49.710546068+02:00 level=info msg="Update check succeeded" duration=134.915171ms
|
||||
grafana | logger=plugins.update.checker t=2026-09-21T21:04:49.71175472+02:00 level=info msg="flag evaluation succeeded" flag="{Value:false EvaluationDetails:{FlagKey:pluginsAutoUpdate FlagType:bool ResolutionDetail:{Variant:default Reason:STATIC ErrorCode: ErrorMessage: FlagMetadata:map[]}}}" details="{Value:false EvaluationDetails:{FlagKey:pluginsAutoUpdate FlagType:bool ResolutionDetail:{Variant:default Reason:STATIC ErrorCode: ErrorMessage: FlagMetadata:map[]}}}"
|
||||
grafana | logger=plugins.update.checker t=2026-09-21T21:04:49.711835663+02:00 level=info msg="flag evaluation succeeded" flag="{Value:false EvaluationDetails:{FlagKey:pluginsAutoUpdate FlagType:bool ResolutionDetail:{Variant:default Reason:STATIC ErrorCode: ErrorMessage: FlagMetadata:map[]}}}" details="{Value:false EvaluationDetails:{FlagKey:pluginsAutoUpdate FlagType:bool ResolutionDetail:{Variant:default Reason:STATIC ErrorCode: ErrorMessage: FlagMetadata:map[]}}}"
|
||||
grafana | logger=plugins.update.checker t=2026-09-21T21:04:49.711864527+02:00 level=info msg="flag evaluation succeeded" flag="{Value:false EvaluationDetails:{FlagKey:pluginsAutoUpdate FlagType:bool ResolutionDetail:{Variant:default Reason:STATIC ErrorCode: ErrorMessage: FlagMetadata:map[]}}}" details="{Value:false EvaluationDetails:{FlagKey:pluginsAutoUpdate FlagType:bool ResolutionDetail:{Variant:default Reason:STATIC ErrorCode: ErrorMessage: FlagMetadata:map[]}}}"
|
||||
grafana | logger=plugins.update.checker t=2026-09-21T21:04:49.711910775+02:00 level=info msg="flag evaluation succeeded" flag="{Value:false EvaluationDetails:{FlagKey:pluginsAutoUpdate FlagType:bool ResolutionDetail:{Variant:default Reason:STATIC ErrorCode: ErrorMessage: FlagMetadata:map[]}}}" details="{Value:false EvaluationDetails:{FlagKey:pluginsAutoUpdate FlagType:bool ResolutionDetail:{Variant:default Reason:STATIC ErrorCode: ErrorMessage: FlagMetadata:map[]}}}"
|
||||
grafana | logger=plugins.update.checker t=2026-09-21T21:04:49.711937215+02:00 level=info msg="flag evaluation succeeded" flag="{Value:false EvaluationDetails:{FlagKey:pluginsAutoUpdate FlagType:bool ResolutionDetail:{Variant:default Reason:STATIC ErrorCode: ErrorMessage: FlagMetadata:map[]}}}" details="{Value:false EvaluationDetails:{FlagKey:pluginsAutoUpdate FlagType:bool ResolutionDetail:{Variant:default Reason:STATIC ErrorCode: ErrorMessage: FlagMetadata:map[]}}}"
|
||||
grafana | logger=plugins.update.checker t=2026-09-21T21:04:49.711965989+02:00 level=info msg="flag evaluation succeeded" flag="{Value:false EvaluationDetails:{FlagKey:pluginsAutoUpdate FlagType:bool ResolutionDetail:{Variant:default Reason:STATIC ErrorCode: ErrorMessage: FlagMetadata:map[]}}}" details="{Value:false EvaluationDetails:{FlagKey:pluginsAutoUpdate FlagType:bool ResolutionDetail:{Variant:default Reason:STATIC ErrorCode: ErrorMessage: FlagMetadata:map[]}}}"
|
||||
grafana | logger=plugins.update.checker t=2026-09-21T21:04:49.71199272+02:00 level=info msg="flag evaluation succeeded" flag="{Value:false EvaluationDetails:{FlagKey:pluginsAutoUpdate FlagType:bool ResolutionDetail:{Variant:default Reason:STATIC ErrorCode: ErrorMessage: FlagMetadata:map[]}}}" details="{Value:false EvaluationDetails:{FlagKey:pluginsAutoUpdate FlagType:bool ResolutionDetail:{Variant:default Reason:STATIC ErrorCode: ErrorMessage: FlagMetadata:map[]}}}"
|
||||
grafana | logger=plugins.update.checker t=2026-09-21T21:04:49.712029088+02:00 level=info msg="Update check succeeded" duration=134.259663ms
|
||||
grafana | logger=plugins.update.checker t=2026-09-21T21:04:49.712046521+02:00 level=info msg="flag evaluation succeeded" flag="{Value:false EvaluationDetails:{FlagKey:pluginsAutoUpdate FlagType:bool ResolutionDetail:{Variant:default Reason:STATIC ErrorCode: ErrorMessage: FlagMetadata:map[]}}}" details="{Value:false EvaluationDetails:{FlagKey:pluginsAutoUpdate FlagType:bool ResolutionDetail:{Variant:default Reason:STATIC ErrorCode: ErrorMessage: FlagMetadata:map[]}}}"
|
||||
grafana | logger=plugin.installer t=2026-09-21T21:04:49.746301197+02:00 level=info msg="Updating plugin" pluginId=elasticsearch from=12.8.2 to=12.9.0
|
||||
grafana | logger=plugin.elasticsearch t=2026-09-21T21:04:49.749876218+02:00 level=info msg="plugin process exited" plugin=/usr/share/grafana/data/plugins-bundled/elasticsearch/gpx_grafana_elasticsearch_datasource_linux_amd64 id=21
|
||||
grafana | t=2026-09-21T21:04:49.78320237+02:00 level=info caller=logger.go:214 time=2026-09-21T21:04:49.783168556+02:00 msg="Starting RepositoryController" logger=provisioning-repository-controller
|
||||
grafana | t=2026-09-21T21:04:49.78324483+02:00 level=info caller=logger.go:214 time=2026-09-21T21:04:49.783235583+02:00 msg="Starting workers" logger=provisioning-repository-controller count=1
|
||||
grafana | t=2026-09-21T21:04:49.783264788+02:00 level=info caller=logger.go:214 time=2026-09-21T21:04:49.783261071+02:00 msg="Started workers" logger=provisioning-repository-controller
|
||||
grafana | logger=installer.fs t=2026-09-21T21:04:52.147390916+02:00 level=info msg="Downloaded and extracted elasticsearch v12.9.0 zip successfully to /var/lib/grafana/plugins/elasticsearch"
|
||||
grafana | logger=plugins.registration t=2026-09-21T21:04:52.23333466+02:00 level=info msg="Plugin registered" pluginId=elasticsearch
|
||||
grafana | logger=plugin.backgroundinstaller t=2026-09-21T21:04:52.233372732+02:00 level=info msg="Plugin successfully installed" pluginId=elasticsearch version= duration=2.559578215s
|
||||
grafana | logger=plugin.backgroundinstaller t=2026-09-21T21:04:52.421710033+02:00 level=info msg="Installing plugin" pluginId=zipkin version=
|
||||
grafana | logger=plugin.installer t=2026-09-21T21:04:52.517914534+02:00 level=info msg="Updating plugin" pluginId=zipkin from=12.4.6 to=12.4.8
|
||||
grafana | logger=plugin.zipkin t=2026-09-21T21:04:52.521447565+02:00 level=info msg="plugin process exited" plugin=/usr/share/grafana/data/plugins-bundled/zipkin/gpx_grafana-zipkin-datasource_linux_amd64 id=142
|
||||
grafana | logger=installer.fs t=2026-09-21T21:04:53.02117033+02:00 level=info msg="Downloaded and extracted zipkin v12.4.8 zip successfully to /var/lib/grafana/plugins/zipkin"
|
||||
grafana | logger=plugins.registration t=2026-09-21T21:04:53.064778268+02:00 level=info msg="Plugin registered" pluginId=zipkin
|
||||
grafana | logger=plugin.backgroundinstaller t=2026-09-21T21:04:53.064819566+02:00 level=info msg="Plugin successfully installed" pluginId=zipkin version= duration=643.082081ms
|
||||
grafana | logger=plugin.backgroundinstaller t=2026-09-21T21:04:53.122700337+02:00 level=info msg="Installing plugin" pluginId=stackdriver version=
|
||||
grafana | logger=plugin.installer t=2026-09-21T21:04:53.186134153+02:00 level=info msg="Updating plugin" pluginId=stackdriver from=12.6.1 to=12.6.2
|
||||
grafana | logger=plugin.stackdriver t=2026-09-21T21:04:53.18946859+02:00 level=info msg="plugin process exited" plugin=/usr/share/grafana/data/plugins-bundled/stackdriver/gpx_grafana_cloudmonitoring_datasource_linux_amd64 id=121
|
||||
grafana | logger=installer.fs t=2026-09-21T21:04:56.141607757+02:00 level=info msg="Downloaded and extracted stackdriver v12.6.2 zip successfully to /var/lib/grafana/plugins/stackdriver"
|
||||
grafana | logger=plugins.registration t=2026-09-21T21:04:56.199249787+02:00 level=info msg="Plugin registered" pluginId=stackdriver
|
||||
grafana | logger=plugin.backgroundinstaller t=2026-09-21T21:04:56.199457189+02:00 level=info msg="Plugin successfully installed" pluginId=stackdriver version= duration=3.076725293s
|
||||
grafana | logger=plugin.backgroundinstaller t=2026-09-21T21:04:56.271364026+02:00 level=info msg="Installing plugin" pluginId=grafana-pyroscope-datasource version=
|
||||
grafana | logger=plugin.installer t=2026-09-21T21:04:56.326267354+02:00 level=info msg="Updating plugin" pluginId=grafana-pyroscope-datasource from=13.0.4 to=13.0.6
|
||||
grafana | logger=plugin.grafana-pyroscope-datasource t=2026-09-21T21:04:56.330084022+02:00 level=info msg="plugin process exited" plugin=/usr/share/grafana/data/plugins-bundled/grafana-pyroscope-datasource/gpx_grafana-pyroscope-datasource_linux_amd64 id=42
|
||||
grafana | logger=context userId=1 orgId=1 uname=admin t=2026-09-21T21:04:56.758623345+02:00 level=info msg="Request Completed" method=GET path=/api/folders/nope18ec88bd1e status=404 remote_addr=192.168.0.180 time_ms=13 duration=13.051486ms size=51 referer= handler=/api/folders/:uid/ status_source=server
|
||||
@@ -0,0 +1,31 @@
|
||||
{
|
||||
"before": {
|
||||
"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"
|
||||
}
|
||||
]
|
||||
},
|
||||
"after": {
|
||||
"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"
|
||||
}
|
||||
]
|
||||
},
|
||||
"drill_commit": "f36b5183055e"
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
21:02:25 ==== grafana: grafana/grafana:13.1.0 -> grafana/grafana:13.2.2 (sub=grafana, class=other)
|
||||
21:02:25 [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['GF_SECURITY_ADMIN_PASSWORD']
|
||||
21:02:25 [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'}
|
||||
21:03:16 [1] deployed, controller state=running, pinned={'grafana': 'grafana/grafana:13.1.0'}
|
||||
21:03:18 [2] seeding through the app's own front door
|
||||
21:03:18 grafana: create folder http=200
|
||||
21:03:18 [3] control C1 — reading the seed back BEFORE the update
|
||||
21:03:18 grafana: readback of the seeded folder http=200 ok=True
|
||||
21:03:18 [4] „Mentés most" -> 200 {'ok': True, 'message': 'Mentés elindítva'}
|
||||
21:04:19 [4] backup idle; last=None
|
||||
21:04:20 [5] drill commit f36b5183055e: grafana grafana/grafana:13.1.0 -> grafana/grafana:13.2.2 (push rc=0)
|
||||
21:04:24 [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'}]
|
||||
21:04:24 [5] badge EN: [{'title': 'A newer version of this app is available. Select the Update button to start it.', 'text': 'Update available — today'}]
|
||||
21:04:24 [6] Update -> 202 {'ok': True, 'data': {'accepted': True, 'completed': False}, 'message': 'Frissítés elindult – az állapot a kártyán követhető'}
|
||||
21:04:25 + 0.0s phase=safety-dump label=Adatbázis pillanatkép… err=None hold=None
|
||||
21:04:26 + 1.1s phase=pulling label=Új verzió letöltése… err=None hold=None
|
||||
21:04:44 + 19.5s phase=starting label=Indítás az új verzióval… err=None hold=None
|
||||
21:04:46 + 21.5s phase=verifying label=Működés ellenőrzése… err=None hold=None
|
||||
21:04:51 + 26.7s phase=done label=Frissítve err=None hold=None
|
||||
21:04:51 [7] reading the seed back AFTER the update
|
||||
21:04:56 grafana: readback of the seeded folder http=200 ok=True
|
||||
21:04:59 [8] pinned = {'grafana': 'grafana/grafana:13.2.2'}
|
||||
21:04:59 [8] installed = {'grafana': 'grafana/grafana:13.2.2'}
|
||||
21:04:59 [8] compose = ['image: grafana/grafana:13.2.2']
|
||||
21:04:59 [8] inspect = ['grafana grafana/grafana:13.2.2 running=true restarts=0']
|
||||
21:04:59 [9] verdict proven -> /mnt/5_hdd/felhom.eu/git/felhom.eu/documentation/audits/update-night-2026-09-21/apps/grafana/verdict.json
|
||||
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"pinned_images": {
|
||||
"grafana": "grafana/grafana:13.1.0"
|
||||
},
|
||||
"installed_images": {
|
||||
"grafana": "grafana/grafana:13.1.0"
|
||||
},
|
||||
"catalog_images": null,
|
||||
"live_compose_image_lines": [
|
||||
"image: grafana/grafana:13.1.0"
|
||||
],
|
||||
"docker_inspect": [
|
||||
"grafana grafana/grafana:13.1.0 running=true restarts=0"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
{
|
||||
"before": {
|
||||
"pinned_images": {
|
||||
"grafana": "grafana/grafana:13.1.0"
|
||||
},
|
||||
"installed_images": {
|
||||
"grafana": "grafana/grafana:13.1.0"
|
||||
},
|
||||
"catalog_images": null,
|
||||
"live_compose_image_lines": [
|
||||
"image: grafana/grafana:13.1.0"
|
||||
],
|
||||
"docker_inspect": [
|
||||
"grafana grafana/grafana:13.1.0 running=true restarts=0"
|
||||
]
|
||||
},
|
||||
"after": {
|
||||
"pinned_images": {
|
||||
"grafana": "grafana/grafana:13.2.2"
|
||||
},
|
||||
"installed_images": {
|
||||
"grafana": "grafana/grafana:13.2.2"
|
||||
},
|
||||
"catalog_images": {
|
||||
"grafana": "grafana/grafana:13.2.2"
|
||||
},
|
||||
"live_compose_image_lines": [
|
||||
"image: grafana/grafana:13.2.2"
|
||||
],
|
||||
"docker_inspect": [
|
||||
"grafana grafana/grafana:13.2.2 running=true restarts=0"
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
{
|
||||
"accepted": true,
|
||||
"http": "202",
|
||||
"phases": [
|
||||
{
|
||||
"t": 0.0,
|
||||
"phase": "safety-dump",
|
||||
"label": "Adatbázis pillanatkép…",
|
||||
"updating": true,
|
||||
"error": null,
|
||||
"hold": null
|
||||
},
|
||||
{
|
||||
"t": 1.1,
|
||||
"phase": "pulling",
|
||||
"label": "Új verzió letöltése…",
|
||||
"updating": true,
|
||||
"error": null,
|
||||
"hold": null
|
||||
},
|
||||
{
|
||||
"t": 19.5,
|
||||
"phase": "starting",
|
||||
"label": "Indítás az új verzióval…",
|
||||
"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"
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
{
|
||||
"harness_version": 1,
|
||||
"app": "grafana",
|
||||
"venue": "guest 9202 demo-hp-scratch, controller 0.261.0",
|
||||
"class": "other",
|
||||
"from": {
|
||||
"grafana": "grafana/grafana:13.1.0"
|
||||
},
|
||||
"to": {
|
||||
"grafana": "grafana/grafana:13.2.2"
|
||||
},
|
||||
"verdict": "proven",
|
||||
"seed_read_before": true,
|
||||
"seed_read_after": true,
|
||||
"healthy_after": true,
|
||||
"migration_observed": "grafana | logger=settings t=2026-09-21T21:04:46.556182975+02:00 level=info msg=\"Unified migration configs enforced\" storage_type=unified target=[all]",
|
||||
"abort": "not-attempted",
|
||||
"abort_detail": null,
|
||||
"duration_s": 26.7,
|
||||
"measured_at": "2026-09-21T19:02:25.646053+00:00",
|
||||
"evidence": "apps/grafana/",
|
||||
"notes": [],
|
||||
"observables_after": {
|
||||
"pinned_images": {
|
||||
"grafana": "grafana/grafana:13.2.2"
|
||||
},
|
||||
"installed_images": {
|
||||
"grafana": "grafana/grafana:13.2.2"
|
||||
},
|
||||
"catalog_images": {
|
||||
"grafana": "grafana/grafana:13.2.2"
|
||||
},
|
||||
"live_compose_image_lines": [
|
||||
"image: grafana/grafana:13.2.2"
|
||||
],
|
||||
"docker_inspect": [
|
||||
"grafana grafana/grafana:13.2.2 running=true restarts=0"
|
||||
]
|
||||
},
|
||||
"final_phase": "done",
|
||||
"hold_reason": null,
|
||||
"update_error": null
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
home-assistant | s6-rc: info: service s6rc-oneshot-runner: starting
|
||||
home-assistant | s6-rc: info: service s6rc-oneshot-runner successfully started
|
||||
home-assistant | s6-rc: info: service fix-attrs: starting
|
||||
home-assistant | s6-rc: info: service fix-attrs successfully started
|
||||
home-assistant | s6-rc: info: service legacy-cont-init: starting
|
||||
home-assistant | s6-rc: info: service legacy-cont-init successfully started
|
||||
home-assistant | s6-rc: info: service legacy-services: starting
|
||||
home-assistant | services-up: info: copying legacy longrun home-assistant (no readiness notification)
|
||||
home-assistant | s6-rc: info: service legacy-services successfully started
|
||||
home-assistant | [33m2026-09-21 21:14:58.394 WARNING (ImportExecutor_0) [py.warnings] /usr/local/lib/python3.14/site-packages/rich/segment.py:547: SyntaxWarning: 'return' in a 'finally' block
|
||||
home-assistant | return
|
||||
home-assistant | [0m
|
||||
home-assistant | [33m2026-09-21 21:15:03.281 WARNING (MainThread) [homeassistant.components.http.ban] Login attempt or request with invalid authentication from felhom-controller.traefik-public (172.18.0.7). Requested URL: '/api/'. (Go-http-client/1.1)[0m
|
||||
home-assistant | [33m2026-09-21 21:15:04.019 WARNING (MainThread) [homeassistant.components.http.ban] Login attempt or request with invalid authentication from 192.168.0.180 (192.168.0.180). Requested URL: '/auth/login_flow/1da21af37fa875863271de4302276d5d'. (curl/8.14.1)[0m
|
||||
@@ -0,0 +1,31 @@
|
||||
{
|
||||
"before": {
|
||||
"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"
|
||||
}
|
||||
]
|
||||
},
|
||||
"after": {
|
||||
"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"
|
||||
}
|
||||
]
|
||||
},
|
||||
"drill_commit": "15a6d080f34a"
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
21:10:14 ==== home-assistant: ghcr.io/home-assistant/home-assistant:2026.7.2 -> ghcr.io/home-assistant/home-assistant:2026.9.3 (sub=ha, class=other)
|
||||
21:10:15 [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'}
|
||||
21:12:05 [1] deployed, controller state=running, pinned={'home-assistant': 'ghcr.io/home-assistant/home-assistant:2026.7.2'}
|
||||
21:12:08 [2] seeding through the app's own front door
|
||||
21:12:08 home-assistant: /api/onboarding/users http=200
|
||||
21:12:08 [3] control C1 — reading the seed back BEFORE the update
|
||||
21:12:09 home-assistant: login as the seeded owner ok=True
|
||||
21:12:09 [4] „Mentés most" -> 200 {'ok': True, 'message': 'Mentés elindítva'}
|
||||
21:13:14 [4] backup idle; last=None
|
||||
21:13:15 [5] drill commit 15a6d080f34a: home-assistant ghcr.io/home-assistant/home-assistant:2026.7.2 -> ghcr.io/home-assistant/home-assistant:2026.9.3 (push rc=0)
|
||||
21:13:19 [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'}]
|
||||
21:13:19 [5] badge EN: [{'title': 'A newer version of this app is available. Select the Update button to start it.', 'text': 'Update available — today'}]
|
||||
21:13:20 [6] Update -> 202 {'ok': True, 'data': {'accepted': True, 'completed': False}, 'message': 'Frissítés elindult – az állapot a kártyán követhető'}
|
||||
21:13:20 + 0.0s phase=safety-dump label=Adatbázis pillanatkép… err=None hold=None
|
||||
21:13:21 + 1.1s phase=pulling label=Új verzió letöltése… err=None hold=None
|
||||
21:14:42 + 82.0s phase=starting label=Indítás az új verzióval… err=None hold=None
|
||||
21:14:48 + 88.2s phase=verifying label=Működés ellenőrzése… err=None hold=None
|
||||
21:15:03 + 103.6s phase=done label=Frissítve err=None hold=None
|
||||
21:15:03 [7] reading the seed back AFTER the update
|
||||
21:15:04 home-assistant: login as the seeded owner ok=True
|
||||
21:15:06 [8] pinned = {'home-assistant': 'ghcr.io/home-assistant/home-assistant:2026.9.3'}
|
||||
21:15:06 [8] installed = {'home-assistant': 'ghcr.io/home-assistant/home-assistant:2026.9.3'}
|
||||
21:15:06 [8] compose = ['image: ghcr.io/home-assistant/home-assistant:2026.9.3']
|
||||
21:15:06 [8] inspect = ['home-assistant ghcr.io/home-assistant/home-assistant:2026.9.3 running=true restarts=0']
|
||||
21:15:06 [9] verdict proven -> /mnt/5_hdd/felhom.eu/git/felhom.eu/documentation/audits/update-night-2026-09-21/apps/home-assistant/verdict.json
|
||||
+15
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"pinned_images": {
|
||||
"home-assistant": "ghcr.io/home-assistant/home-assistant:2026.7.2"
|
||||
},
|
||||
"installed_images": {
|
||||
"home-assistant": "ghcr.io/home-assistant/home-assistant:2026.7.2"
|
||||
},
|
||||
"catalog_images": null,
|
||||
"live_compose_image_lines": [
|
||||
"image: ghcr.io/home-assistant/home-assistant:2026.7.2"
|
||||
],
|
||||
"docker_inspect": [
|
||||
"home-assistant ghcr.io/home-assistant/home-assistant:2026.7.2 running=true restarts=0"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
{
|
||||
"before": {
|
||||
"pinned_images": {
|
||||
"home-assistant": "ghcr.io/home-assistant/home-assistant:2026.7.2"
|
||||
},
|
||||
"installed_images": {
|
||||
"home-assistant": "ghcr.io/home-assistant/home-assistant:2026.7.2"
|
||||
},
|
||||
"catalog_images": null,
|
||||
"live_compose_image_lines": [
|
||||
"image: ghcr.io/home-assistant/home-assistant:2026.7.2"
|
||||
],
|
||||
"docker_inspect": [
|
||||
"home-assistant ghcr.io/home-assistant/home-assistant:2026.7.2 running=true restarts=0"
|
||||
]
|
||||
},
|
||||
"after": {
|
||||
"pinned_images": {
|
||||
"home-assistant": "ghcr.io/home-assistant/home-assistant:2026.9.3"
|
||||
},
|
||||
"installed_images": {
|
||||
"home-assistant": "ghcr.io/home-assistant/home-assistant:2026.9.3"
|
||||
},
|
||||
"catalog_images": {
|
||||
"home-assistant": "ghcr.io/home-assistant/home-assistant:2026.9.3"
|
||||
},
|
||||
"live_compose_image_lines": [
|
||||
"image: ghcr.io/home-assistant/home-assistant:2026.9.3"
|
||||
],
|
||||
"docker_inspect": [
|
||||
"home-assistant ghcr.io/home-assistant/home-assistant:2026.9.3 running=true restarts=0"
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
{
|
||||
"accepted": true,
|
||||
"http": "202",
|
||||
"phases": [
|
||||
{
|
||||
"t": 0.0,
|
||||
"phase": "safety-dump",
|
||||
"label": "Adatbázis pillanatkép…",
|
||||
"updating": true,
|
||||
"error": null,
|
||||
"hold": null
|
||||
},
|
||||
{
|
||||
"t": 1.1,
|
||||
"phase": "pulling",
|
||||
"label": "Új verzió letöltése…",
|
||||
"updating": true,
|
||||
"error": null,
|
||||
"hold": null
|
||||
},
|
||||
{
|
||||
"t": 82.0,
|
||||
"phase": "starting",
|
||||
"label": "Indítás az új verzióval…",
|
||||
"updating": true,
|
||||
"error": null,
|
||||
"hold": null
|
||||
},
|
||||
{
|
||||
"t": 88.2,
|
||||
"phase": "verifying",
|
||||
"label": "Működés ellenőrzése…",
|
||||
"updating": true,
|
||||
"error": null,
|
||||
"hold": null
|
||||
},
|
||||
{
|
||||
"t": 103.6,
|
||||
"phase": "done",
|
||||
"label": "Frissítve",
|
||||
"updating": false,
|
||||
"error": null,
|
||||
"hold": null
|
||||
}
|
||||
],
|
||||
"duration_s": 103.6,
|
||||
"final_phase": "done",
|
||||
"update_error": null,
|
||||
"hold_reason": null,
|
||||
"state": "running"
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
{
|
||||
"harness_version": 1,
|
||||
"app": "home-assistant",
|
||||
"venue": "guest 9202 demo-hp-scratch, controller 0.261.0",
|
||||
"class": "other",
|
||||
"from": {
|
||||
"home-assistant": "ghcr.io/home-assistant/home-assistant:2026.7.2"
|
||||
},
|
||||
"to": {
|
||||
"home-assistant": "ghcr.io/home-assistant/home-assistant:2026.9.3"
|
||||
},
|
||||
"verdict": "proven",
|
||||
"seed_read_before": true,
|
||||
"seed_read_after": true,
|
||||
"healthy_after": true,
|
||||
"migration_observed": null,
|
||||
"abort": "not-attempted",
|
||||
"abort_detail": null,
|
||||
"duration_s": 103.6,
|
||||
"measured_at": "2026-09-21T19:10:14.843396+00:00",
|
||||
"evidence": "apps/home-assistant/",
|
||||
"notes": [],
|
||||
"observables_after": {
|
||||
"pinned_images": {
|
||||
"home-assistant": "ghcr.io/home-assistant/home-assistant:2026.9.3"
|
||||
},
|
||||
"installed_images": {
|
||||
"home-assistant": "ghcr.io/home-assistant/home-assistant:2026.9.3"
|
||||
},
|
||||
"catalog_images": {
|
||||
"home-assistant": "ghcr.io/home-assistant/home-assistant:2026.9.3"
|
||||
},
|
||||
"live_compose_image_lines": [
|
||||
"image: ghcr.io/home-assistant/home-assistant:2026.9.3"
|
||||
],
|
||||
"docker_inspect": [
|
||||
"home-assistant ghcr.io/home-assistant/home-assistant:2026.9.3 running=true restarts=0"
|
||||
]
|
||||
},
|
||||
"final_phase": "done",
|
||||
"hold_reason": null,
|
||||
"update_error": null
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
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
|
||||
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"harness_version": 1,
|
||||
"app": "mealie",
|
||||
"venue": "guest 9202 demo-hp-scratch, controller 0.261.0",
|
||||
"class": "db-postgres",
|
||||
"from": {},
|
||||
"to": {},
|
||||
"verdict": "inconclusive",
|
||||
"seed_read_before": false,
|
||||
"seed_read_after": false,
|
||||
"healthy_after": false,
|
||||
"migration_observed": null,
|
||||
"abort": "not-attempted",
|
||||
"abort_detail": null,
|
||||
"duration_s": 0.3,
|
||||
"measured_at": "2026-09-21T19:02:15.239347+00:00",
|
||||
"evidence": "apps/mealie/",
|
||||
"notes": [
|
||||
"deploy never reached running — nothing else could be measured"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,161 @@
|
||||
n8n | Initializing n8n process
|
||||
n8n | n8n ready on ::, port 5678
|
||||
n8n | Migrations in progress, please do NOT stop the process.
|
||||
n8n | Starting migration CreateInstanceAiEventsTable1784000000046
|
||||
n8n | Finished migration CreateInstanceAiEventsTable1784000000046
|
||||
n8n | Starting migration BackfillPreScopingOAuthGrantScopes1784000000047
|
||||
n8n | [BackfillPreScopingOAuthGrantScopes1784000000047] Rewrote 0 pre-scoping grants in oauth_refresh_tokens
|
||||
n8n | [BackfillPreScopingOAuthGrantScopes1784000000047] Rewrote 0 pre-scoping grants in oauth_authorization_codes
|
||||
n8n | Finished migration BackfillPreScopingOAuthGrantScopes1784000000047
|
||||
n8n | Starting migration AddScheduledTaskDispatchedAt1784000000049
|
||||
n8n | Finished migration AddScheduledTaskDispatchedAt1784000000049
|
||||
n8n | Starting migration AddHostRunIdToInstanceAiCheckpoints1784000000050
|
||||
n8n | Finished migration AddHostRunIdToInstanceAiCheckpoints1784000000050
|
||||
n8n | Starting migration BackfillInstanceAiEventLog1784000000051
|
||||
n8n | Finished migration BackfillInstanceAiEventLog1784000000051
|
||||
n8n | Starting migration CreateWorkflowReviewRequestTables1784000000052
|
||||
n8n | Finished migration CreateWorkflowReviewRequestTables1784000000052
|
||||
n8n | Starting migration AddStoredAtToAgentExecution1784815940110
|
||||
n8n | Finished migration AddStoredAtToAgentExecution1784815940110
|
||||
n8n | Starting migration AddInstanceCredentials1784815940111
|
||||
n8n | Finished migration AddInstanceCredentials1784815940111
|
||||
n8n | Starting migration CreateAgentEvalTables1784815940112
|
||||
n8n | Finished migration CreateAgentEvalTables1784815940112
|
||||
n8n | Starting migration AddAvailableInMcpToAgents1784897791636
|
||||
n8n | Finished migration AddAvailableInMcpToAgents1784897791636
|
||||
n8n | Starting migration ChangeInstalledNodeVersionType1785162364000
|
||||
n8n | Finished migration ChangeInstalledNodeVersionType1785162364000
|
||||
n8n | Starting migration AddIsFirstPartyToOAuthClients1785162364001
|
||||
n8n | Finished migration AddIsFirstPartyToOAuthClients1785162364001
|
||||
n8n | Starting migration AddAgentFileStorageColumns1785186578138
|
||||
n8n | Finished migration AddAgentFileStorageColumns1785186578138
|
||||
n8n | Starting migration CrashStaleEnqueuedExecutions1785247194306
|
||||
n8n | Finished migration CrashStaleEnqueuedExecutions1785247194306
|
||||
n8n | Starting migration AddMisfirePolicyToScheduler1785247194307
|
||||
n8n | Finished migration AddMisfirePolicyToScheduler1785247194307
|
||||
n8n | Starting migration CreateAgentChatAttachmentsTable1785255306000
|
||||
n8n | Finished migration CreateAgentChatAttachmentsTable1785255306000
|
||||
n8n | Starting migration AddSetupCompletedAtToAgents1785500832626
|
||||
n8n | Finished migration AddSetupCompletedAtToAgents1785500832626
|
||||
n8n | Starting migration AddAgentExecutionRuntimeState1785828155091
|
||||
n8n | Finished migration AddAgentExecutionRuntimeState1785828155091
|
||||
n8n | Starting migration CreateAgentCredentialDependencyTable1785828155092
|
||||
n8n | Finished migration CreateAgentCredentialDependencyTable1785828155092
|
||||
n8n | Starting migration AllowDiscordAgentChatSubscriptions1785840970000
|
||||
n8n | Finished migration AllowDiscordAgentChatSubscriptions1785840970000
|
||||
n8n | Starting migration CreateWorkflowReviewActivityTablesAndBaseline1785843640527
|
||||
n8n | Finished migration CreateWorkflowReviewActivityTablesAndBaseline1785843640527
|
||||
n8n | Starting migration CreatePollerStateTable1785926660580
|
||||
n8n | Finished migration CreatePollerStateTable1785926660580
|
||||
n8n | Starting migration AddReasonToWorkflowPublicationOutbox1786519946974
|
||||
n8n | Finished migration AddReasonToWorkflowPublicationOutbox1786519946974
|
||||
n8n | Starting migration AddCoalesceOwnerMisfirePolicy1786666615643
|
||||
n8n | Finished migration AddCoalesceOwnerMisfirePolicy1786666615643
|
||||
n8n | Starting migration AddAgentRevisionColumn1786666615644
|
||||
n8n | Finished migration AddAgentRevisionColumn1786666615644
|
||||
n8n | Starting migration AddAgentExecutionFailureSummary1787040021605
|
||||
n8n | Finished migration AddAgentExecutionFailureSummary1787040021605
|
||||
n8n | Starting migration CreateGitConnectionTable1787056876306
|
||||
n8n | Finished migration CreateGitConnectionTable1787056876306
|
||||
n8n | Starting migration AddTimezoneToAgentTasks1787057050000
|
||||
n8n | Finished migration AddTimezoneToAgentTasks1787057050000
|
||||
n8n | Starting migration CreateGitConnectionProjectTable1787089039726
|
||||
n8n | Finished migration CreateGitConnectionProjectTable1787089039726
|
||||
n8n | Starting migration DropWorkflowReviewActivityTypeCheckAndWorkflowIdColumn1787089039727
|
||||
n8n | Finished migration DropWorkflowReviewActivityTypeCheckAndWorkflowIdColumn1787089039727
|
||||
n8n | Starting migration AddProjectManageMembersScopeToCustomRoles1787140858009
|
||||
n8n | Finished migration AddProjectManageMembersScopeToCustomRoles1787140858009
|
||||
n8n | Starting migration CreateAgentChannelStatusTable1787213245846
|
||||
n8n | Finished migration CreateAgentChannelStatusTable1787213245846
|
||||
n8n | Starting migration AddResourceToOAuthRefreshTokens1787739515257
|
||||
n8n | Finished migration AddResourceToOAuthRefreshTokens1787739515257
|
||||
n8n | Starting migration CreateTypeAvailabilityPolicyTables1787841960965
|
||||
n8n | Finished migration CreateTypeAvailabilityPolicyTables1787841960965
|
||||
n8n | Starting migration CreateAgentBackgroundJobTable1788191436461
|
||||
n8n | Finished migration CreateAgentBackgroundJobTable1788191436461
|
||||
n8n | Starting migration DropInstanceAiRunSnapshotsTable1788336311704
|
||||
n8n | Finished migration DropInstanceAiRunSnapshotsTable1788336311704
|
||||
n8n | Starting migration GeneralizeScheduledJobOwner1788359043381
|
||||
n8n | Finished migration GeneralizeScheduledJobOwner1788359043381
|
||||
n8n | Starting migration CreateActivityEventTable1788425788714
|
||||
n8n | Finished migration CreateActivityEventTable1788425788714
|
||||
n8n | Starting migration CreateProjectPoolSettings1788445119183
|
||||
n8n | Finished migration CreateProjectPoolSettings1788445119183
|
||||
n8n | Starting migration CreateInstanceMonitoringReportTable1788445119184
|
||||
n8n | Finished migration CreateInstanceMonitoringReportTable1788445119184
|
||||
n8n | Starting migration CreateAgentWorkflowDependencyTable1788522448804
|
||||
n8n | Finished migration CreateAgentWorkflowDependencyTable1788522448804
|
||||
n8n | Starting migration AddWakeColumnsToAgentBackgroundJob1788527465971
|
||||
n8n | Finished migration AddWakeColumnsToAgentBackgroundJob1788527465971
|
||||
n8n | Starting migration CreatePromotionsTables1788759351166
|
||||
n8n | Finished migration CreatePromotionsTables1788759351166
|
||||
n8n | Starting migration DropGitConnectionTables1788780616817
|
||||
n8n | Finished migration DropGitConnectionTables1788780616817
|
||||
n8n | Starting migration CreateAiPreferenceTable1788882375989
|
||||
n8n | Finished migration CreateAiPreferenceTable1788882375989
|
||||
n8n | Starting migration CreateAgentMemoryEntryCandidates1789029973536
|
||||
n8n | Finished migration CreateAgentMemoryEntryCandidates1789029973536
|
||||
n8n | Starting migration AddAgentExecutionAuthorAndMessagesResourceThreadIndex1789121244489
|
||||
n8n | Finished migration AddAgentExecutionAuthorAndMessagesResourceThreadIndex1789121244489
|
||||
n8n | Starting migration AddInstanceAiThreadHistoryIndex1789131391410
|
||||
n8n | Finished migration AddInstanceAiThreadHistoryIndex1789131391410
|
||||
n8n | n8n Task Broker ready on 127.0.0.1, port 5679
|
||||
n8n | Failed to start Python task runner in internal mode. because Python 3 is missing from this system. Launching a Python runner in internal mode is intended only for debugging and is not recommended for production. Users are encouraged to deploy in external mode. See: https://docs.n8n.io/hosting/configuration/task-runners/#setting-up-external-mode
|
||||
n8n |
|
||||
n8n | There are deprecations related to your n8n setup. Please take the recommended actions to update your configuration:
|
||||
n8n | - WEBHOOK_URL -> Use N8N_WEBHOOK_URL instead, which sets the base URL for both test and production webhooks.
|
||||
n8n | - N8N_UNVERIFIED_PACKAGES_ENABLED -> The default for this variable will change to `false` in a future version. Set it to `true` explicitly to keep installing unverified community packages.
|
||||
n8n | - N8N_RUNNERS_MODE -> Internal task runner mode is deprecated and will be removed in a future version. For isolation and scaling, run the task runner launcher as a separate process, set this variable to `external` and share `N8N_RUNNERS_AUTH_TOKEN` with the launcher. See https://docs.n8n.io/deploy/host-n8n/configure-n8n/set-up-task-runners
|
||||
n8n | - N8N_RUNNERS_TASK_TIMEOUT -> The default for this variable will be reduced from 300 (5 minutes) to 60 (1 minute) in a future version. Set it explicitly to keep your current task timeout.
|
||||
n8n | - N8N_COMPRESSION_NODE_MAX_DECOMPRESSED_SIZE_BYTES -> The default for this variable will be reduced from 2 GiB to 256 MiB in a future version. Set it explicitly to keep your current limit.
|
||||
n8n | - N8N_COMPRESSION_NODE_MAX_ZIP_ENTRIES -> The default for this variable will be reduced from 5000 to 1000 in a future version. Set it explicitly to keep your current limit.
|
||||
n8n |
|
||||
n8n | [license SDK] Skipping renewal on init: license cert is not initialized
|
||||
n8n | [runner:js] (node:24) ExperimentalWarning: localStorage is not available because --localstorage-file was not provided.
|
||||
n8n | (Use `node --trace-warnings ...` to show where the warning was created)
|
||||
n8n | Instance registered
|
||||
n8n | Discovered 4 cluster checks
|
||||
n8n | Registered runner "JS Task Runner" (mOSXw0GusGbIiBQSsHrY2)
|
||||
n8n | Recorded version change: 2.31.3 -> 2.40.5
|
||||
n8n | Sandbox: enabled=false provider=n8n-sandbox (from env)
|
||||
n8n | Version: 2.40.5
|
||||
n8n | Building workflow dependency index...
|
||||
n8n |
|
||||
n8n | Editor is now accessible via:
|
||||
n8n | https://auto.enkisfelhom.hu
|
||||
n8n | Finished building workflow dependency index. Processed 0 draft workflows, 0 published workflows.
|
||||
n8n | 2026-09-21T19:01:51.554Z [Rudder] error: Response error code: ECONNREFUSED
|
||||
n8n | 2026-09-21T19:01:51.773Z [Rudder] error: Response error code: ECONNREFUSED
|
||||
n8n | 2026-09-21T19:01:52.311Z [Rudder] error: Response error code: ECONNREFUSED
|
||||
n8n | 2026-09-21T19:01:53.237Z [Rudder] error: Error: ECONNREFUSED
|
||||
n8n | connect ECONNREFUSED 0.0.0.0:443
|
||||
n8n | Error: connect ECONNREFUSED 0.0.0.0:443
|
||||
n8n | at AxiosError.from (/usr/local/lib/node_modules/n8n/node_modules/.pnpm/axios@1.18.0_patch_hash=149e256a2a7b632497650b32816716ced972ab02a5ab00fbd8a5158a51722c4_437e4fafb503be805d1d0ae72f0b0deb/node_modules/axios/dist/node/axios.cjs:1355:24)
|
||||
n8n | at RedirectableRequest.handleRequestError (/usr/local/lib/node_modules/n8n/node_modules/.pnpm/axios@1.18.0_patch_hash=149e256a2a7b632497650b32816716ced972ab02a5ab00fbd8a5158a51722c4_437e4fafb503be805d1d0ae72f0b0deb/node_modules/axios/dist/node/axios.cjs:4026:25)
|
||||
n8n | at RedirectableRequest.emit (node:events:526:24)
|
||||
n8n | at ClientRequest.eventHandlers.<computed> (/usr/local/lib/node_modules/n8n/node_modules/.pnpm/follow-redirects@1.16.0_debug@4.4.3_supports-color@8.1.1_/node_modules/follow-redirects/index.js:56:24)
|
||||
n8n | at ClientRequest.emit (node:events:514:20)
|
||||
n8n | at emitErrorEvent (node:_http_client:114:11)
|
||||
n8n | at TLSSocket.socketErrorListener (node:_http_client:768:5)
|
||||
n8n | at TLSSocket.emit (node:events:526:24)
|
||||
n8n | at emitErrorNT (node:internal/streams/destroy:170:8)
|
||||
n8n | at emitErrorCloseNT (node:internal/streams/destroy:129:3)
|
||||
n8n | at Axios.request (/usr/local/lib/node_modules/n8n/node_modules/.pnpm/axios@1.18.0_patch_hash=149e256a2a7b632497650b32816716ced972ab02a5ab00fbd8a5158a51722c4_437e4fafb503be805d1d0ae72f0b0deb/node_modules/axios/dist/node/axios.cjs:5427:41)
|
||||
n8n | at processTicksAndRejections (node:internal/process/task_queues:104:5)
|
||||
n8n | at Axios.request (/usr/local/lib/node_modules/n8n/node_modules/.pnpm/axios@1.18.0_patch_hash=149e256a2a7b632497650b32816716ced972ab02a5ab00fbd8a5158a51722c4_437e4fafb503be805d1d0ae72f0b0deb/node_modules/axios/dist/node/axios.cjs:5423:14)
|
||||
n8n | at Axios.request (/usr/local/lib/node_modules/n8n/node_modules/.pnpm/axios@1.18.0_patch_hash=149e256a2a7b632497650b32816716ced972ab02a5ab00fbd8a5158a51722c4_437e4fafb503be805d1d0ae72f0b0deb/node_modules/axios/dist/node/axios.cjs:5423:14)
|
||||
n8n | at Axios.request (/usr/local/lib/node_modules/n8n/node_modules/.pnpm/axios@1.18.0_patch_hash=149e256a2a7b632497650b32816716ced972ab02a5ab00fbd8a5158a51722c4_437e4fafb503be805d1d0ae72f0b0deb/node_modules/axios/dist/node/axios.cjs:5423:14)
|
||||
n8n |
|
||||
n8n | connect ECONNREFUSED 0.0.0.0:443
|
||||
n8n | Error: connect ECONNREFUSED 0.0.0.0:443
|
||||
n8n | at TCPConnectWrap.afterConnect [as oncomplete] (node:net:2017:16)
|
||||
n8n |
|
||||
n8n | ValidationError: The 'X-Forwarded-For' header is set but the Express 'trust proxy' setting is false (default). This could indicate a misconfiguration which would prevent express-rate-limit from accurately identifying users. See https://express-rate-limit.github.io/ERR_ERL_UNEXPECTED_X_FORWARDED_FOR/ for more information.
|
||||
n8n | at Object.xForwardedForHeader (/usr/local/lib/node_modules/n8n/node_modules/.pnpm/express-rate-limit@8.2.2_express@5.1.0_supports-color@8.1.1_/node_modules/express-rate-limit/dist/index.cjs:371:13)
|
||||
n8n | at Object.wrappedValidations.<computed> [as xForwardedForHeader] (/usr/local/lib/node_modules/n8n/node_modules/.pnpm/express-rate-limit@8.2.2_express@5.1.0_supports-color@8.1.1_/node_modules/express-rate-limit/dist/index.cjs:685:22)
|
||||
n8n | at Object.keyGenerator (/usr/local/lib/node_modules/n8n/node_modules/.pnpm/express-rate-limit@8.2.2_express@5.1.0_supports-color@8.1.1_/node_modules/express-rate-limit/dist/index.cjs:788:20)
|
||||
n8n | at /usr/local/lib/node_modules/n8n/node_modules/.pnpm/express-rate-limit@8.2.2_express@5.1.0_supports-color@8.1.1_/node_modules/express-rate-limit/dist/index.cjs:849:32
|
||||
n8n | at /usr/local/lib/node_modules/n8n/node_modules/.pnpm/express-rate-limit@8.2.2_express@5.1.0_supports-color@8.1.1_/node_modules/express-rate-limit/dist/index.cjs:830:5 {
|
||||
n8n | code: 'ERR_ERL_UNEXPECTED_X_FORWARDED_FOR',
|
||||
n8n | help: 'https://express-rate-limit.github.io/ERR_ERL_UNEXPECTED_X_FORWARDED_FOR/'
|
||||
n8n | }
|
||||
@@ -0,0 +1,31 @@
|
||||
{
|
||||
"before": {
|
||||
"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"
|
||||
}
|
||||
]
|
||||
},
|
||||
"after": {
|
||||
"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"
|
||||
}
|
||||
]
|
||||
},
|
||||
"drill_commit": "7d42360161d9"
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
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
|
||||
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"pinned_images": {
|
||||
"n8n": "n8nio/n8n:2.31.3"
|
||||
},
|
||||
"installed_images": {
|
||||
"n8n": "n8nio/n8n:2.31.3"
|
||||
},
|
||||
"catalog_images": null,
|
||||
"live_compose_image_lines": [
|
||||
"image: n8nio/n8n:2.31.3"
|
||||
],
|
||||
"docker_inspect": [
|
||||
"n8n n8nio/n8n:2.31.3 running=true restarts=0"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
{
|
||||
"before": {
|
||||
"pinned_images": {
|
||||
"n8n": "n8nio/n8n:2.31.3"
|
||||
},
|
||||
"installed_images": {
|
||||
"n8n": "n8nio/n8n:2.31.3"
|
||||
},
|
||||
"catalog_images": null,
|
||||
"live_compose_image_lines": [
|
||||
"image: n8nio/n8n:2.31.3"
|
||||
],
|
||||
"docker_inspect": [
|
||||
"n8n n8nio/n8n:2.31.3 running=true restarts=0"
|
||||
]
|
||||
},
|
||||
"after": {
|
||||
"pinned_images": {
|
||||
"n8n": "n8nio/n8n:2.40.5"
|
||||
},
|
||||
"installed_images": {
|
||||
"n8n": "n8nio/n8n:2.40.5"
|
||||
},
|
||||
"catalog_images": {
|
||||
"n8n": "n8nio/n8n:2.40.5"
|
||||
},
|
||||
"live_compose_image_lines": [
|
||||
"image: n8nio/n8n:2.40.5"
|
||||
],
|
||||
"docker_inspect": [
|
||||
"n8n n8nio/n8n:2.40.5 running=true restarts=0"
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
{
|
||||
"accepted": true,
|
||||
"http": "202",
|
||||
"phases": [
|
||||
{
|
||||
"t": 0.0,
|
||||
"phase": "safety-dump",
|
||||
"label": "Adatbázis pillanatkép…",
|
||||
"updating": true,
|
||||
"error": null,
|
||||
"hold": null
|
||||
},
|
||||
{
|
||||
"t": 1.0,
|
||||
"phase": "pulling",
|
||||
"label": "Új verzió letöltése…",
|
||||
"updating": true,
|
||||
"error": null,
|
||||
"hold": null
|
||||
},
|
||||
{
|
||||
"t": 98.4,
|
||||
"phase": "starting",
|
||||
"label": "Indítás az új verzióval…",
|
||||
"updating": true,
|
||||
"error": null,
|
||||
"hold": null
|
||||
},
|
||||
{
|
||||
"t": 102.5,
|
||||
"phase": "verifying",
|
||||
"label": "Működés ellenőrzése…",
|
||||
"updating": true,
|
||||
"error": null,
|
||||
"hold": null
|
||||
},
|
||||
{
|
||||
"t": 117.9,
|
||||
"phase": "done",
|
||||
"label": "Frissítve",
|
||||
"updating": false,
|
||||
"error": null,
|
||||
"hold": null
|
||||
}
|
||||
],
|
||||
"duration_s": 117.9,
|
||||
"final_phase": "done",
|
||||
"update_error": null,
|
||||
"hold_reason": null,
|
||||
"state": "running"
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
{
|
||||
"harness_version": 1,
|
||||
"app": "n8n",
|
||||
"venue": "guest 9202 demo-hp-scratch, controller 0.261.0",
|
||||
"class": "db-postgres",
|
||||
"from": {
|
||||
"n8n": "n8nio/n8n:2.31.3"
|
||||
},
|
||||
"to": {
|
||||
"n8n": "n8nio/n8n:2.40.5"
|
||||
},
|
||||
"verdict": "proven",
|
||||
"seed_read_before": true,
|
||||
"seed_read_after": true,
|
||||
"healthy_after": true,
|
||||
"migration_observed": "n8n | Starting migration CreateInstanceAiEventsTable1784000000046",
|
||||
"abort": "not-attempted",
|
||||
"abort_detail": null,
|
||||
"duration_s": 117.9,
|
||||
"measured_at": "2026-09-21T18:55:28.852396+00:00",
|
||||
"evidence": "apps/n8n/",
|
||||
"notes": [],
|
||||
"observables_after": {
|
||||
"pinned_images": {
|
||||
"n8n": "n8nio/n8n:2.40.5"
|
||||
},
|
||||
"installed_images": {
|
||||
"n8n": "n8nio/n8n:2.40.5"
|
||||
},
|
||||
"catalog_images": {
|
||||
"n8n": "n8nio/n8n:2.40.5"
|
||||
},
|
||||
"live_compose_image_lines": [
|
||||
"image: n8nio/n8n:2.40.5"
|
||||
],
|
||||
"docker_inspect": [
|
||||
"n8n n8nio/n8n:2.40.5 running=true restarts=0"
|
||||
]
|
||||
},
|
||||
"final_phase": "done",
|
||||
"hold_reason": null,
|
||||
"update_error": null
|
||||
}
|
||||
@@ -0,0 +1,61 @@
|
||||
navidrome | _ _ _ _
|
||||
navidrome | | \ | | (_) | |
|
||||
navidrome | | \| | __ ___ ___ __| |_ __ ___ _ __ ___ ___
|
||||
navidrome | | . ` |/ _` \ \ / / |/ _` | '__/ _ \| '_ ` _ \ / _ \
|
||||
navidrome | | |\ | (_| |\ V /| | (_| | | | (_) | | | | | | __/
|
||||
navidrome | \_| \_/\__,_| \_/ |_|\__,_|_| \___/|_| |_| |_|\___|
|
||||
navidrome | Version: 0.64.0 (1072e9f7)
|
||||
navidrome |
|
||||
navidrome | time="2026-09-21T18:44:22Z" level=info msg="No configuration file found. Loaded configuration only from environment variables"
|
||||
navidrome | time="2026-09-21T18:44:22Z" level=info msg="Upgrading DB Schema to latest version"
|
||||
navidrome | time="2026-09-21T18:44:22Z" level=info msg="OK 20260712211040_add_primary_key_and_update_index_for_scrobbles.sql (13.3ms)"
|
||||
navidrome | time="2026-09-21T18:44:22Z" level=info msg="OK 20260714120000_add_playlist_average_rating.sql (2.01ms)"
|
||||
navidrome | time="2026-09-21T18:44:22Z" level=info msg="OK 20260714123822_add_media_file_title_sort_covering_index.sql (292.94µs)"
|
||||
navidrome | time="2026-09-21T18:44:22Z" level=info msg="OK 20260719005427_add_album_replaygain.go (4.49ms)"
|
||||
navidrome | time="2026-09-21T18:44:22Z" level=info msg="OK 20260720015443_uniform_canonical_ids.go (17.66ms)"
|
||||
navidrome | time="2026-09-21T18:44:22Z" level=info msg="OK 20260722023032_add_artwork_tables.sql (1.57ms)"
|
||||
navidrome | time="2026-09-21T18:44:22Z" level=info msg="OK 20260810143445_reorder_album_artists_unique_constraint.sql (9.55ms)"
|
||||
navidrome | time="2026-09-21T18:44:22Z" level=info msg="OK 20260811023338_add_item_genre_tag_indexes.sql (1.33ms)"
|
||||
navidrome | time="2026-09-21T18:44:22Z" level=info msg="OK 20260815015320_add_user_scrobble_filter.sql (2.71ms)"
|
||||
navidrome | time="2026-09-21T18:44:22Z" level=info msg="OK 20260816180040_renormalize_album_created_at.sql (615.58µs)"
|
||||
navidrome | time="2026-09-21T18:44:22Z" level=info msg="OK 20260818002312_add_playlist_imported_hash.sql (2.86ms)"
|
||||
navidrome | time="2026-09-21T18:44:22Z" level=info msg="OK 20260819204637_add_artwork_trace_columns.sql (7.52ms)"
|
||||
navidrome | time="2026-09-21T18:44:22Z" level=info msg="OK 20260822062750_add_user_token_epoch.sql (2.84ms)"
|
||||
navidrome | time="2026-09-21T18:44:22Z" level=info msg="OK 20260901225726_normalize_artwork_last_failure.sql (142.21µs)"
|
||||
navidrome | time="2026-09-21T18:44:22Z" level=info msg="goose: successfully migrated database to version: 20260901225726"
|
||||
navidrome | time="2026-09-21T18:44:22Z" level=info msg="Starting signaler"
|
||||
navidrome | time="2026-09-21T18:44:22Z" level=info msg="Periodic backup is DISABLED"
|
||||
navidrome | time="2026-09-21T18:44:22Z" level=info msg="Starting scheduler"
|
||||
navidrome | time="2026-09-21T18:44:22Z" level=info msg="Scheduling DB analysis check" schedule="@every 30m"
|
||||
navidrome | time="2026-09-21T18:44:22Z" level=info msg="Starting Insight Collector"
|
||||
navidrome | time="2026-09-21T18:44:22Z" level=info msg="Starting artwork worker"
|
||||
navidrome | time="2026-09-21T18:44:22Z" level=info msg="Creating Image cache" maxSize="100 MB" path=/data/cache/images
|
||||
navidrome | time="2026-09-21T18:44:22Z" level=info msg="Periodic scan is DISABLED"
|
||||
navidrome | time="2026-09-21T18:44:22Z" level=info msg="Finished initializing cache" cache=Image elapsedTime="303.854µs" maxSize=100MB
|
||||
navidrome | time="2026-09-21T18:44:22Z" level=info msg="Creating Transcoding cache" maxSize="100 MB" path=/data/cache/transcoding
|
||||
navidrome | time="2026-09-21T18:44:22Z" level=info msg="Finished initializing cache" cache=Transcoding elapsedTime="474.055µs" maxSize=100MB
|
||||
navidrome | time="2026-09-21T18:44:22Z" level=info msg="Started watcher for library" libraryID=1 name="Music Library" path=/music
|
||||
navidrome | time="2026-09-21T18:44:22Z" level=info msg="Watcher started for library" absoluteLibPath=/music libraryID=1 name="Music Library" path=/music
|
||||
navidrome | time="2026-09-21T18:44:22Z" level=info msg="Starting plugin manager"
|
||||
navidrome | time="2026-09-21T18:44:22Z" level=info msg="Setting Session Timeout" value=48h
|
||||
navidrome | time="2026-09-21T18:44:22Z" level=info msg="Starting plugin manager" folder=/data/plugins
|
||||
navidrome | time="2026-09-21T18:44:22Z" level=info msg="Creating new JWT secret" key=JWTSecret
|
||||
navidrome | time="2026-09-21T18:44:22Z" level=info msg="Login rate limit set" requestLimit=5 windowLength=20s
|
||||
navidrome | time="2026-09-21T18:44:23Z" level=info msg="Found ffmpeg" path=/usr/bin/ffmpeg
|
||||
navidrome | time="2026-09-21T18:44:23Z" level=info msg="Mounting Native API routes" path=/api
|
||||
navidrome | time="2026-09-21T18:44:23Z" level=info msg="Mounting Subsonic API routes" path=/rest
|
||||
navidrome | time="2026-09-21T18:44:23Z" level=info msg="Mounting Public Endpoints routes" path=/share
|
||||
navidrome | time="2026-09-21T18:44:23Z" level=info msg="Mounting LastFM Auth routes" path=/api/lastfm
|
||||
navidrome | time="2026-09-21T18:44:23Z" level=info msg="Mounting ListenBrainz Auth routes" path=/api/listenbrainz
|
||||
navidrome | time="2026-09-21T18:44:23Z" level=info msg="Mounting Background images routes" path=/backgrounds
|
||||
navidrome | time="2026-09-21T18:44:23Z" level=info msg="Mounting WebUI routes" path=/app
|
||||
navidrome | time="2026-09-21T18:44:23Z" level=info msg="Creating backgrounds cache" maxSize="100 MB" path=/data/cache/backgrounds
|
||||
navidrome | time="2026-09-21T18:44:23Z" level=info msg="Finished initializing cache" cache=backgrounds elapsedTime="293.033µs" maxSize=100MB
|
||||
navidrome | time="2026-09-21T18:44:23Z" level=info msg="----> Navidrome server is ready!" address="0.0.0.0:4533" startupTime=127.5ms tlsEnabled=false
|
||||
navidrome | time="2026-09-21T18:44:25Z" level=info msg="Executing initial scan"
|
||||
navidrome | time="2026-09-21T18:44:25Z" level=info msg="No configuration file found. Loaded configuration only from environment variables"
|
||||
navidrome | time="2026-09-21T18:44:25Z" level=info msg="Scanner: Starting scan" fullScan=false numLibraries=1
|
||||
navidrome | time="2026-09-21T18:44:25Z" level=info msg="Scanner: Finished scanning all libraries" duration=6.4ms
|
||||
navidrome | time="2026-09-21T18:44:25Z" level=info msg="Scan completed"
|
||||
navidrome | time="2026-09-21T18:44:28Z" level=warning msg="Unsuccessful login" request="map[Accept:[*/*] Accept-Encoding:[gzip] Content-Length:[61] Content-Type:[application/json] User-Agent:[curl/8.14.1] X-Forwarded-For:[192.168.0.180] X-Forwarded-Host:[music.enkisfelhom.hu] X-Forwarded-Port:[443] X-Forwarded-Proto:[https] X-Forwarded-Server:[2515331bc19e] X-Real-Ip:[192.168.0.180]]" requestId=2430109f9ee0/OGfROO1Xmj-000004 username=drillbf8881
|
||||
navidrome | time="2026-09-21T18:44:28Z" level=warning msg="HTTP: POST http://music.enkisfelhom.hu/auth/login" elapsedTime=1.2ms httpStatus=401 remoteAddr="172.18.0.8:39730" requestId=2430109f9ee0/OGfROO1Xmj-000004 responseSize=40
|
||||
@@ -0,0 +1,31 @@
|
||||
{
|
||||
"before": {
|
||||
"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"
|
||||
}
|
||||
]
|
||||
},
|
||||
"after": {
|
||||
"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"
|
||||
}
|
||||
]
|
||||
},
|
||||
"drill_commit": "390395a96ee1"
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
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
|
||||
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"pinned_images": {
|
||||
"navidrome": "deluan/navidrome:0.63.2"
|
||||
},
|
||||
"installed_images": {
|
||||
"navidrome": "deluan/navidrome:0.63.2"
|
||||
},
|
||||
"catalog_images": null,
|
||||
"live_compose_image_lines": [
|
||||
"image: deluan/navidrome:0.63.2"
|
||||
],
|
||||
"docker_inspect": [
|
||||
"navidrome deluan/navidrome:0.63.2 running=true restarts=0"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
{
|
||||
"before": {
|
||||
"pinned_images": {
|
||||
"navidrome": "deluan/navidrome:0.63.2"
|
||||
},
|
||||
"installed_images": {
|
||||
"navidrome": "deluan/navidrome:0.63.2"
|
||||
},
|
||||
"catalog_images": null,
|
||||
"live_compose_image_lines": [
|
||||
"image: deluan/navidrome:0.63.2"
|
||||
],
|
||||
"docker_inspect": [
|
||||
"navidrome deluan/navidrome:0.63.2 running=true restarts=0"
|
||||
]
|
||||
},
|
||||
"after": {
|
||||
"pinned_images": {
|
||||
"navidrome": "deluan/navidrome:0.64.0"
|
||||
},
|
||||
"installed_images": {
|
||||
"navidrome": "deluan/navidrome:0.64.0"
|
||||
},
|
||||
"catalog_images": {
|
||||
"navidrome": "deluan/navidrome:0.64.0"
|
||||
},
|
||||
"live_compose_image_lines": [
|
||||
"image: deluan/navidrome:0.64.0"
|
||||
],
|
||||
"docker_inspect": [
|
||||
"navidrome deluan/navidrome:0.64.0 running=true restarts=0"
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
{
|
||||
"accepted": true,
|
||||
"http": "202",
|
||||
"phases": [
|
||||
{
|
||||
"t": 0.0,
|
||||
"phase": "safety-dump",
|
||||
"label": "Adatbázis pillanatkép…",
|
||||
"updating": true,
|
||||
"error": null,
|
||||
"hold": null
|
||||
},
|
||||
{
|
||||
"t": 1.1,
|
||||
"phase": "pulling",
|
||||
"label": "Új verzió letöltése…",
|
||||
"updating": true,
|
||||
"error": null,
|
||||
"hold": null
|
||||
},
|
||||
{
|
||||
"t": 5.2,
|
||||
"phase": "starting",
|
||||
"label": "Indítás az új verzióval…",
|
||||
"updating": true,
|
||||
"error": null,
|
||||
"hold": null
|
||||
},
|
||||
{
|
||||
"t": 6.2,
|
||||
"phase": "verifying",
|
||||
"label": "Működés ellenőrzése…",
|
||||
"updating": true,
|
||||
"error": null,
|
||||
"hold": null
|
||||
},
|
||||
{
|
||||
"t": 11.3,
|
||||
"phase": "done",
|
||||
"label": "Frissítve",
|
||||
"updating": false,
|
||||
"error": null,
|
||||
"hold": null
|
||||
}
|
||||
],
|
||||
"duration_s": 11.3,
|
||||
"final_phase": "done",
|
||||
"update_error": null,
|
||||
"hold_reason": null,
|
||||
"state": "running"
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
{
|
||||
"harness_version": 1,
|
||||
"app": "navidrome",
|
||||
"venue": "guest 9202 demo-hp-scratch, controller 0.261.0",
|
||||
"class": "file-leg",
|
||||
"from": {
|
||||
"navidrome": "deluan/navidrome:0.63.2"
|
||||
},
|
||||
"to": {
|
||||
"navidrome": "deluan/navidrome:0.64.0"
|
||||
},
|
||||
"verdict": "proven",
|
||||
"seed_read_before": true,
|
||||
"seed_read_after": true,
|
||||
"healthy_after": true,
|
||||
"migration_observed": "navidrome | time=\"2026-09-21T18:44:22Z\" level=info msg=\"goose: successfully migrated database to version: 20260901225726\"",
|
||||
"abort": "not-attempted",
|
||||
"abort_detail": null,
|
||||
"duration_s": 11.3,
|
||||
"measured_at": "2026-09-21T18:42:51.148860+00:00",
|
||||
"evidence": "apps/navidrome/",
|
||||
"notes": [],
|
||||
"observables_after": {
|
||||
"pinned_images": {
|
||||
"navidrome": "deluan/navidrome:0.64.0"
|
||||
},
|
||||
"installed_images": {
|
||||
"navidrome": "deluan/navidrome:0.64.0"
|
||||
},
|
||||
"catalog_images": {
|
||||
"navidrome": "deluan/navidrome:0.64.0"
|
||||
},
|
||||
"live_compose_image_lines": [
|
||||
"image: deluan/navidrome:0.64.0"
|
||||
],
|
||||
"docker_inspect": [
|
||||
"navidrome deluan/navidrome:0.64.0 running=true restarts=0"
|
||||
]
|
||||
},
|
||||
"final_phase": "done",
|
||||
"hold_reason": null,
|
||||
"update_error": null
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
21:05:28 ==== opengist: ghcr.io/thomiceli/opengist:1.13 -> ghcr.io/thomiceli/opengist:1.15 (sub=gist, class=other)
|
||||
21:05:29 [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'}
|
||||
21:05:44 [1] deployed, controller state=running, pinned={'opengist': 'ghcr.io/thomiceli/opengist:1.13'}
|
||||
21:05:46 [2] seeding through the app's own front door
|
||||
21:05:46 opengist: /register http=500
|
||||
21:05:46 opengist: refused
|
||||
|
||||
<!DOCTYPE html>
|
||||
<html lang="en" class="h-full " data-theme="auto">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
|
||||
|
||||
<base href="https://gist.enkisfelhom.hu" />
|
||||
|
||||
<script>
|
||||
window.opengist_bas
|
||||
21:05:46 [9] verdict inconclusive -> /mnt/5_hdd/felhom.eu/git/felhom.eu/documentation/audits/update-night-2026-09-21/apps/opengist/verdict.json
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"pinned_images": {
|
||||
"opengist": "ghcr.io/thomiceli/opengist:1.13"
|
||||
},
|
||||
"installed_images": {
|
||||
"opengist": "ghcr.io/thomiceli/opengist:1.13"
|
||||
},
|
||||
"catalog_images": {
|
||||
"opengist": "ghcr.io/thomiceli/opengist:1.13"
|
||||
},
|
||||
"live_compose_image_lines": [
|
||||
"image: ghcr.io/thomiceli/opengist:1.13"
|
||||
],
|
||||
"docker_inspect": [
|
||||
"opengist ghcr.io/thomiceli/opengist:1.13 running=true restarts=0"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"harness_version": 1,
|
||||
"app": "opengist",
|
||||
"venue": "guest 9202 demo-hp-scratch, controller 0.261.0",
|
||||
"class": "other",
|
||||
"from": {
|
||||
"opengist": "ghcr.io/thomiceli/opengist:1.13"
|
||||
},
|
||||
"to": {},
|
||||
"verdict": "inconclusive",
|
||||
"seed_read_before": false,
|
||||
"seed_read_after": false,
|
||||
"healthy_after": false,
|
||||
"migration_observed": null,
|
||||
"abort": "not-attempted",
|
||||
"abort_detail": null,
|
||||
"duration_s": 17.9,
|
||||
"measured_at": "2026-09-21T19:05:29.084151+00:00",
|
||||
"evidence": "apps/opengist/",
|
||||
"notes": [
|
||||
"seed refused through the app's own route — see log.txt for what was tried",
|
||||
"seed route did not work tonight"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
papra | $ pnpm migrate:up:prod && pnpm start
|
||||
papra | $ tsx src/scripts/migrate-up.script.ts
|
||||
papra | (node:49) [DEP0205] DeprecationWarning: `module.register()` is deprecated. Use `module.registerHooks()` instead.
|
||||
papra | (Use `node --trace-deprecation ...` to show where the warning was created)
|
||||
papra | {"level":"debug","message":"Running migrations","timestampMs":1790017715670,"namespace":"migrations","data":{"scriptName":"migrate-up","isDryRun":false,"migrations":["initial-schema-setup","documents-fts","tagging-rules","api-keys","organizations-webhooks","organizations-invitations-improvement","document-activity-log","document-activity-log-on-delete-set-null","drop-legacy-migrations","document-file-encryption","soft-delete-organizations","tagging-rule-condition-match-mode","drop-fts-5-triggers","two-factor-authentication","index-documents-fts-ids","case-insensitive-tag-name-uniq-constraint","documents-date","custom-properties","two-factor-verified","kv-store","document-share-links","documents-notes","document-views","user-plan-entitlements","add-organization-settings-table","add-indexes","ai-credits"],"migrationsToRun":["add-indexes","ai-credits"],"existingMigrations":["initial-schema-setup","documents-fts","tagging-rules","api-keys","organizations-webhooks","organizations-invitations-improvement","document-activity-log","document-activity-log-on-delete-set-null","drop-legacy-migrations","document-file-encryption","soft-delete-organizations","tagging-rule-condition-match-mode","drop-fts-5-triggers","two-factor-authentication","index-documents-fts-ids","case-insensitive-tag-name-uniq-constraint","documents-date","custom-properties","two-factor-verified","kv-store","document-share-links","documents-notes","document-views","user-plan-entitlements","add-organization-settings-table"],"migrationsToRunCount":2,"existingMigrationsCount":25}}
|
||||
papra | {"level":"info","message":"Migration run successfully","timestampMs":1790017715755,"namespace":"migrations","data":{"scriptName":"migrate-up","isDryRun":false,"migrationName":"add-indexes"}}
|
||||
papra | {"level":"info","message":"Migration run successfully","timestampMs":1790017715894,"namespace":"migrations","data":{"scriptName":"migrate-up","isDryRun":false,"migrationName":"ai-credits"}}
|
||||
papra | {"level":"info","message":"All migrations run successfully","timestampMs":1790017715894,"namespace":"migrations","data":{"scriptName":"migrate-up","isDryRun":false}}
|
||||
papra | {"level":"debug","message":"Script finished","timestampMs":1790017715894,"namespace":"scripts","data":{"scriptName":"migrate-up","isDryRun":false}}
|
||||
papra | $ node dist/index.js
|
||||
papra | {"level":"info","message":"Starting application","timestampMs":1790017718720,"namespace":"app-server","data":{"processMode":"all","isWebMode":true,"isWorkerMode":true}}
|
||||
papra | {"level":"info","message":"Creating emails services","timestampMs":1790017718729,"namespace":"emails.services","data":{"processMode":"all","driverName":"logger"}}
|
||||
papra | {"level":"debug","message":"Task persistence driver initialized","timestampMs":1790017718750,"namespace":"tasks:services","data":{"processMode":"all","driverName":"memory"}}
|
||||
papra | {"level":"info","message":"Hard delete expired documents task registered","timestampMs":1790017718791,"namespace":"documents:tasks:hardDeleteExpiredDocuments","data":{"processMode":"all","taskName":"hard-delete-expired-documents","cron":"0 0 * * *","runOnStartup":true}}
|
||||
papra | {"level":"info","message":"Update expired pending invitations status task registered","timestampMs":1790017718792,"namespace":"organizations:tasks:expireInvitations","data":{"processMode":"all","taskName":"expire-invitations","cron":"0 0 * * *","runOnStartup":true}}
|
||||
papra | {"level":"info","message":"Purge expired organizations task registered","timestampMs":1790017718794,"namespace":"organizations:tasks:purgeExpiredOrganizations","data":{"processMode":"all","taskName":"purge-expired-organizations","cron":"0 1 * * *","runOnStartup":true}}
|
||||
papra | {"level":"info","message":"Purge expired kv-store entries task registered","timestampMs":1790017718795,"namespace":"kv-store:tasks:purgeExpiredEntries","data":{"processMode":"all","taskName":"purge-expired-kv-entries","cron":"0 2 * * *","runOnStartup":true}}
|
||||
papra | {"level":"info","message":"Re-verify plan entitlements task registered","timestampMs":1790017718796,"namespace":"plan-entitlements:tasks:reverifyPlanEntitlements","data":{"processMode":"all","taskName":"reverify-plan-entitlements","cron":"0 3 * * *","runOnStartup":false}}
|
||||
papra | {"level":"info","message":"Worker started","timestampMs":1790017718796,"namespace":"tasks:services","data":{"processMode":"all","workerId":"default"}}
|
||||
papra | {"level":"info","message":"Task worker started","timestampMs":1790017718796,"namespace":"tasks:services","data":{"processMode":"all","workerId":"default"}}
|
||||
papra | {"level":"info","message":"Worker started","timestampMs":1790017718797,"namespace":"app-server","data":{"processMode":"all"}}
|
||||
papra | {"level":"info","message":"Server started","timestampMs":1790017718804,"namespace":"app-server","data":{"processMode":"all","port":1221}}
|
||||
papra | {"level":"debug","message":"Consuming job","timestampMs":1790017718804,"namespace":"tasks:services","data":{"processMode":"all","jobId":"periodic-hard-delete-expired-documents","taskName":"hard-delete-expired-documents"}}
|
||||
papra | {"level":"info","message":"Expired documents deleted","timestampMs":1790017718810,"namespace":"documents:tasks:hardDeleteExpiredDocuments","data":{"processMode":"all","deletedDocumentsCount":0}}
|
||||
papra | {"level":"info","message":"Job rescheduled","timestampMs":1790017718810,"namespace":"tasks:services","data":{"processMode":"all","jobId":"periodic-hard-delete-expired-documents","taskName":"hard-delete-expired-documents","nextDate":"2026-09-21T22:00:00.000Z"}}
|
||||
papra | {"level":"debug","message":"Consuming job","timestampMs":1790017718810,"namespace":"tasks:services","data":{"processMode":"all","jobId":"periodic-expire-invitations","taskName":"expire-invitations"}}
|
||||
papra | {"level":"info","message":"Updated expired pending invitations status","timestampMs":1790017718812,"namespace":"organizations:tasks:expireInvitations","data":{"processMode":"all"}}
|
||||
papra | {"level":"info","message":"Job rescheduled","timestampMs":1790017718813,"namespace":"tasks:services","data":{"processMode":"all","jobId":"periodic-expire-invitations","taskName":"expire-invitations","nextDate":"2026-09-21T22:00:00.000Z"}}
|
||||
papra | {"level":"debug","message":"Consuming job","timestampMs":1790017718813,"namespace":"tasks:services","data":{"processMode":"all","jobId":"periodic-purge-expired-organizations","taskName":"purge-expired-organizations"}}
|
||||
papra | {"level":"info","message":"Found expired soft-deleted organizations to purge","timestampMs":1790017718814,"namespace":"organizations:tasks:purgeExpiredOrganizations","data":{"processMode":"all","organizationCount":0}}
|
||||
papra | {"level":"info","message":"Purged expired soft-deleted organizations","timestampMs":1790017718814,"namespace":"organizations:tasks:purgeExpiredOrganizations","data":{"processMode":"all","purgedOrganizationCount":0,"totalOrganizationCount":0}}
|
||||
papra | {"level":"info","message":"Job rescheduled","timestampMs":1790017718815,"namespace":"tasks:services","data":{"processMode":"all","jobId":"periodic-purge-expired-organizations","taskName":"purge-expired-organizations","nextDate":"2026-09-21T23:00:00.000Z"}}
|
||||
papra | {"level":"debug","message":"Consuming job","timestampMs":1790017718815,"namespace":"tasks:services","data":{"processMode":"all","jobId":"periodic-purge-expired-kv-entries","taskName":"purge-expired-kv-entries"}}
|
||||
papra | {"level":"info","message":"Purged expired kv-store entries","timestampMs":1790017718816,"namespace":"kv-store:tasks:purgeExpiredEntries","data":{"processMode":"all","deletedCount":0}}
|
||||
papra | {"level":"info","message":"Job rescheduled","timestampMs":1790017718817,"namespace":"tasks:services","data":{"processMode":"all","jobId":"periodic-purge-expired-kv-entries","taskName":"purge-expired-kv-entries","nextDate":"2026-09-22T00:00:00.000Z"}}
|
||||
papra | {"level":"info","message":"Request completed","timestampMs":1790017721312,"namespace":"app","data":{"processMode":"all","requestId":"req_eg4qhgeg75tae2exzzojvx7c","status":200,"method":"GET","path":"/","routePath":"/*","durationMs":10}}
|
||||
papra | {"level":"info","message":"Request completed","timestampMs":1790017726215,"namespace":"app","data":{"processMode":"all","requestId":"req_en8z9sw40idige967ngrbbar","status":200,"method":"GET","path":"/","routePath":"/*","userAgent":"Go-http-client/1.1","durationMs":2}}
|
||||
papra | {"level":"info","message":"Request completed","timestampMs":1790017727165,"namespace":"app","data":{"processMode":"all","requestId":"req_bgf25nj36w94xq7hg7if2oxb","status":200,"method":"GET","path":"/","routePath":"/*","userAgent":"curl/8.14.1","durationMs":1,"ip":"192.168.0.180"}}
|
||||
papra | {"level":"error","message":"Invalid password","timestampMs":1790017727349,"namespace":"auth","data":{"processMode":"all","requestId":"req_qlifc5palzqxhboc7cnnzjxt","args":[]}}
|
||||
papra | {"level":"info","message":"Request completed","timestampMs":1790017727353,"namespace":"app","data":{"processMode":"all","requestId":"req_qlifc5palzqxhboc7cnnzjxt","status":401,"method":"POST","path":"/api/auth/sign-in/email","routePath":"/api/auth/*","userAgent":"curl/8.14.1","durationMs":164,"ip":"192.168.0.180"}}
|
||||
papra | {"level":"info","message":"Request completed","timestampMs":1790017727532,"namespace":"app","data":{"processMode":"all","requestId":"req_mzt74qmfroocv6jgiar9wemj","status":200,"method":"POST","path":"/api/auth/sign-in/email","routePath":"/api/auth/*","userAgent":"curl/8.14.1","durationMs":148,"ip":"192.168.0.180"}}
|
||||
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"before": {
|
||||
"hu": [],
|
||||
"en": []
|
||||
},
|
||||
"after": {
|
||||
"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"
|
||||
}
|
||||
]
|
||||
},
|
||||
"drill_commit": "b29623bf53d1"
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
21:05:46 ==== papra: ghcr.io/papra-hq/papra:26.6.1-rootless -> ghcr.io/papra-hq/papra:26.6.2-rootless (sub=papra, class=other)
|
||||
21:05:47 [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'}
|
||||
21:06:37 [1] deployed, controller state=running, pinned={'papra': 'ghcr.io/papra-hq/papra:26.6.1-rootless'}
|
||||
21:06:39 [2] seeding through the app's own front door
|
||||
21:06:40 papra: sign-up http=200
|
||||
21:06:40 [3] control C1 — reading the seed back BEFORE the update
|
||||
21:06:40 papra: sign-in as the seeded account http=200 ok=True
|
||||
21:06:40 [4] „Mentés most" -> 200 {'ok': True, 'message': 'Mentés elindítva'}
|
||||
21:07:40 [4] backup idle; last=None
|
||||
21:07:41 [5] drill commit b29623bf53d1: papra ghcr.io/papra-hq/papra:26.6.1-rootless -> ghcr.io/papra-hq/papra:26.6.2-rootless (push rc=0)
|
||||
21:07:46 [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'}]
|
||||
21:07:46 [5] badge EN: [{'title': 'A newer version of this app is available. Select the Update button to start it.', 'text': 'Update available — today'}]
|
||||
21:07:46 [6] Update -> 202 {'ok': True, 'data': {'accepted': True, 'completed': False}, 'message': 'Frissítés elindult – az állapot a kártyán követhető'}
|
||||
21:07:46 + 0.0s phase=safety-dump label=Adatbázis pillanatkép… err=None hold=None
|
||||
21:07:47 + 1.0s phase=pulling label=Új verzió letöltése… err=None hold=None
|
||||
21:08:29 + 43.0s phase=starting label=Indítás az új verzióval… err=None hold=None
|
||||
21:08:31 + 45.1s phase=verifying label=Működés ellenőrzése… err=None hold=None
|
||||
21:08:47 + 60.5s phase=done label=Frissítve err=None hold=None
|
||||
21:08:47 [7] reading the seed back AFTER the update
|
||||
21:08:47 papra: sign-in as the seeded account http=200 ok=True
|
||||
21:08:50 [8] pinned = {'papra': 'ghcr.io/papra-hq/papra:26.6.2-rootless'}
|
||||
21:08:50 [8] installed = {'papra': 'ghcr.io/papra-hq/papra:26.6.2-rootless'}
|
||||
21:08:50 [8] compose = ['image: ghcr.io/papra-hq/papra:26.6.2-rootless']
|
||||
21:08:50 [8] inspect = ['papra ghcr.io/papra-hq/papra:26.6.2-rootless running=true restarts=0']
|
||||
21:08:50 [9] verdict proven -> /mnt/5_hdd/felhom.eu/git/felhom.eu/documentation/audits/update-night-2026-09-21/apps/papra/verdict.json
|
||||
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"pinned_images": {
|
||||
"papra": "ghcr.io/papra-hq/papra:26.6.1-rootless"
|
||||
},
|
||||
"installed_images": {
|
||||
"papra": "ghcr.io/papra-hq/papra:26.6.1-rootless"
|
||||
},
|
||||
"catalog_images": null,
|
||||
"live_compose_image_lines": [
|
||||
"image: ghcr.io/papra-hq/papra:26.6.1-rootless"
|
||||
],
|
||||
"docker_inspect": [
|
||||
"papra ghcr.io/papra-hq/papra:26.6.1-rootless running=true restarts=0"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
{
|
||||
"before": {
|
||||
"pinned_images": {
|
||||
"papra": "ghcr.io/papra-hq/papra:26.6.1-rootless"
|
||||
},
|
||||
"installed_images": {
|
||||
"papra": "ghcr.io/papra-hq/papra:26.6.1-rootless"
|
||||
},
|
||||
"catalog_images": null,
|
||||
"live_compose_image_lines": [
|
||||
"image: ghcr.io/papra-hq/papra:26.6.1-rootless"
|
||||
],
|
||||
"docker_inspect": [
|
||||
"papra ghcr.io/papra-hq/papra:26.6.1-rootless running=true restarts=0"
|
||||
]
|
||||
},
|
||||
"after": {
|
||||
"pinned_images": {
|
||||
"papra": "ghcr.io/papra-hq/papra:26.6.2-rootless"
|
||||
},
|
||||
"installed_images": {
|
||||
"papra": "ghcr.io/papra-hq/papra:26.6.2-rootless"
|
||||
},
|
||||
"catalog_images": {
|
||||
"papra": "ghcr.io/papra-hq/papra:26.6.2-rootless"
|
||||
},
|
||||
"live_compose_image_lines": [
|
||||
"image: ghcr.io/papra-hq/papra:26.6.2-rootless"
|
||||
],
|
||||
"docker_inspect": [
|
||||
"papra ghcr.io/papra-hq/papra:26.6.2-rootless running=true restarts=0"
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
{
|
||||
"accepted": true,
|
||||
"http": "202",
|
||||
"phases": [
|
||||
{
|
||||
"t": 0.0,
|
||||
"phase": "safety-dump",
|
||||
"label": "Adatbázis pillanatkép…",
|
||||
"updating": true,
|
||||
"error": null,
|
||||
"hold": null
|
||||
},
|
||||
{
|
||||
"t": 1.0,
|
||||
"phase": "pulling",
|
||||
"label": "Új verzió letöltése…",
|
||||
"updating": true,
|
||||
"error": null,
|
||||
"hold": null
|
||||
},
|
||||
{
|
||||
"t": 43.0,
|
||||
"phase": "starting",
|
||||
"label": "Indítás az új verzióval…",
|
||||
"updating": true,
|
||||
"error": null,
|
||||
"hold": null
|
||||
},
|
||||
{
|
||||
"t": 45.1,
|
||||
"phase": "verifying",
|
||||
"label": "Működés ellenőrzése…",
|
||||
"updating": true,
|
||||
"error": null,
|
||||
"hold": null
|
||||
},
|
||||
{
|
||||
"t": 60.5,
|
||||
"phase": "done",
|
||||
"label": "Frissítve",
|
||||
"updating": false,
|
||||
"error": null,
|
||||
"hold": null
|
||||
}
|
||||
],
|
||||
"duration_s": 60.5,
|
||||
"final_phase": "done",
|
||||
"update_error": null,
|
||||
"hold_reason": null,
|
||||
"state": "running"
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user