probe fix, the gate, and the promotion train (R-618 closed, R-630..632 opened)
gates / gates (push) Successful in 28s
gates / gates (push) Successful in 28s
Part 1: tandoor/zipline/wger probes corrected in the catalog and red-proofed live on 9202 in both directions - "Nem egeszseges" with the front door serving 200, then "Fut" after the real sync with no redeploy. tandoor's failed edge re-walked: done at +41.1s where it was failed at +361.9s. Part 2: fifteen proven versions on the live catalog, one commit per app; the guarded Update pressed on four apps on demo-hp, all four done. Opened: R-630 (paperless-ngx's probe has never run on any box - a silent absence, worse than the wrong probe that was found in one night), R-631 (five templates no static rule can judge), R-632 (28 of 53 templates never deployed by any drill). Closed: R-618. Register 318 -> 321. No product code. 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,56 @@
|
||||
## Part 2 — the promotion train
|
||||
|
||||
### The moves
|
||||
|
||||
Fifteen commits, one per app, `catalog_since: "2026-09-22"` on each. Every gate run before each commit; nothing forced, nothing dropped. `check-image-resolvable.py` confirms all 18 unique pins still exist upstream.
|
||||
|
||||
| app | move | commit |
|
||||
|---|---|---|
|
||||
| `actualbudget` | 26.7.0 -> 26.9.0 | `2060032` |
|
||||
| `audiobookshelf` | 2.35.1 -> 2.36.1 | `6525b8e` |
|
||||
| `bookstack` | 26.05.2 -> 26.05.5 | `ac4828f` |
|
||||
| `docmost` | 0.95.0 -> 0.96.0 | `6d8cd87` |
|
||||
| `grafana` | 13.1.0 -> 13.2.2 | `068f445` |
|
||||
| `home-assistant` | 2026.7.2 -> 2026.9.3 | `4405f12` |
|
||||
| `mealie` | v3.20.1 -> v3.27.0 | `008348b` |
|
||||
| `n8n` | 2.31.3 -> 2.40.5 | `4132e35` |
|
||||
| `navidrome` | 0.63.2 -> 0.64.0 | `7708a04` |
|
||||
| `papra` | 26.6.1 -> 26.6.2 | `e96887e` |
|
||||
| `privatebin` | 2.0.5 -> 2.0.6 | `f547f16` |
|
||||
| `romm` | 5.0.0 -> 5.3.0 | `15f9ebf` |
|
||||
| `tandoor` | 2.6.13 -> 2.6.15 | `c3807c7` |
|
||||
| `vikunja` | 2.3.0 -> 2.6.0 | `22f598b` |
|
||||
| `nextcloud` | **ENGINE** `mariadb:11.6` -> `mariadb:12.3` | `39374d5` |
|
||||
|
||||
### The guarded Update, pressed on both demo boxes
|
||||
|
||||
#### `demo-hp` — https://192.168.0.138
|
||||
|
||||
| app | badge before (HU / EN) | phases | pin after | installed after | front-door state |
|
||||
|---|---|---|---|---|---|
|
||||
| `bookstack` | `Naprakész` / `Up to date` | `safety-dump` +0.0s → `pulling` +1.1s → `starting` +2.1s → `done` +3.1s | `lscr.io/linuxserver/bookstack:26.05.5` | `lscr.io/linuxserver/bookstack:26.05.5` | `running` |
|
||||
| `docmost` | `Frissítés elérhető — ma` / `Update available — today` | `safety-dump` +0.0s → `pulling` +1.0s → `starting` +79.0s → `verifying` +91.3s → `done` +106.6s | `docmost/docmost:0.96.0` | `docmost/docmost:0.96.0` | `running` |
|
||||
| `privatebin` | `Frissítés elérhető — ma` / `Update available — today` | `safety-dump` +0.0s → `pulling` +1.1s → `starting` +4.1s → `verifying` +5.2s → `done` +15.4s | `privatebin/pdo:2.0.6` | `privatebin/pdo:2.0.6` | `running` |
|
||||
| `romm` | `Frissítés elérhető — ma` / `Update available — today` | `safety-dump` +0.0s → `pulling` +1.1s → `starting` +13.3s → `verifying` +40.0s → `done` +74.8s | `rommapp/romm:5.3.0` | `rommapp/romm:5.3.0` | `running` |
|
||||
|
||||
Page after the update, as the household reads it:
|
||||
|
||||
- **`bookstack`** — HU: *← Alkalmazások BookStack Fut Naprakész Megnyitás ↗ Napló Exportálás Beállítások Egyszerű wiki platform - polcok, könyvek, fejezetek és oldalak ~150M RAM productivity Pi k*
|
||||
EN: *← Apps BookStack Running Up to date Open ↗ Log Export Settings A simple wiki platform - shelves, books, chapters and pages ~150M RAM productivity Runs on Pi Move to anoth*
|
||||
- **`docmost`** — HU: *← Alkalmazások Docmost Fut Naprakész Megnyitás ↗ Napló Exportálás Beállítások Modern wiki és dokumentáció platform Notion-szerű szerkesztővel ~200M RAM productivity Csak *
|
||||
EN: *← Apps Docmost Running Up to date Open ↗ Log Export Settings A modern wiki and documentation platform with a Notion-like editor ~200M RAM productivity x86 only Move to an*
|
||||
- **`privatebin`** — HU: *← Alkalmazások PrivateBin Fut Naprakész Megnyitás ↗ Napló Exportálás Beállítások Titkosított szöveg megosztás - a szerver nem látja a tartalmat ~30M RAM security Pi kompa*
|
||||
EN: *← Apps PrivateBin Running Up to date Open ↗ Log Export Settings Encrypted text sharing - the server never sees the content ~30M RAM security Runs on Pi Move to another st*
|
||||
- **`romm`** — HU: *← Alkalmazások RomM Fut Naprakész Megnyitás ↗ Napló Exportálás Beállítások Retró játékgyűjtemény kezelő, böngésző és lejátszó ~300M RAM media HDD szükséges Csak x86 Hova *
|
||||
EN: *← Apps RomM Running Up to date Open ↗ Log Export Settings Retro game collection manager, browser and player ~300M RAM media Needs a hard drive x86 only Where do I put my *
|
||||
|
||||
#### `demo-felhom` — https://192.168.0.149
|
||||
|
||||
**Not installed on this box, so not pressed:** `bookstack`, `docmost`, `privatebin`, `romm`.
|
||||
|
||||
| app | badge before (HU / EN) | phases | pin after | installed after | front-door state |
|
||||
|---|---|---|---|---|---|
|
||||
|
||||
Page after the update, as the household reads it:
|
||||
|
||||
|
||||
@@ -0,0 +1,93 @@
|
||||
{
|
||||
"demo-hp": {
|
||||
"catalog_cache": "1ad1f34 gates: probe-matches-compose runs in CI's no-PyYAML mode (R-618)\norigin\thttps://gitea.dooplex.hu/admin/app-catalog-felhom.eu.git (fetch)",
|
||||
"apps": {
|
||||
"bookstack": {
|
||||
"deployed": true,
|
||||
"state": "running",
|
||||
"catalog_images": {
|
||||
"bookstack": "lscr.io/linuxserver/bookstack:26.05.5",
|
||||
"bookstack-db": "mariadb:12.3"
|
||||
}
|
||||
},
|
||||
"docmost": {
|
||||
"deployed": true,
|
||||
"state": "running",
|
||||
"catalog_images": {
|
||||
"docmost": "docmost/docmost:0.96.0",
|
||||
"docmost-postgres": "postgres:16-alpine",
|
||||
"docmost-redis": "redis:7-alpine"
|
||||
}
|
||||
},
|
||||
"nextcloud": {
|
||||
"deployed": false,
|
||||
"state": "not_deployed"
|
||||
},
|
||||
"privatebin": {
|
||||
"deployed": true,
|
||||
"state": "running",
|
||||
"catalog_images": {
|
||||
"privatebin": "privatebin/pdo:2.0.6"
|
||||
}
|
||||
},
|
||||
"romm": {
|
||||
"deployed": true,
|
||||
"state": "running",
|
||||
"catalog_images": {
|
||||
"romm": "rommapp/romm:5.3.0",
|
||||
"romm-db": "mariadb:11.4",
|
||||
"romm-redis": "redis:7-alpine"
|
||||
}
|
||||
},
|
||||
"tandoor": {
|
||||
"deployed": false,
|
||||
"state": "not_deployed"
|
||||
},
|
||||
"zipline": {
|
||||
"deployed": false,
|
||||
"state": "not_deployed"
|
||||
},
|
||||
"wger": {
|
||||
"deployed": false,
|
||||
"state": "not_deployed"
|
||||
}
|
||||
}
|
||||
},
|
||||
"demo-felhom": {
|
||||
"catalog_cache": "1ad1f34 gates: probe-matches-compose runs in CI's no-PyYAML mode (R-618)\norigin\thttps://gitea.dooplex.hu/admin/app-catalog-felhom.eu.git (fetch)",
|
||||
"apps": {
|
||||
"bookstack": {
|
||||
"deployed": false,
|
||||
"state": "not_deployed"
|
||||
},
|
||||
"docmost": {
|
||||
"deployed": false,
|
||||
"state": "not_deployed"
|
||||
},
|
||||
"nextcloud": {
|
||||
"deployed": false,
|
||||
"state": "not_deployed"
|
||||
},
|
||||
"privatebin": {
|
||||
"deployed": false,
|
||||
"state": "not_deployed"
|
||||
},
|
||||
"romm": {
|
||||
"deployed": false,
|
||||
"state": "not_deployed"
|
||||
},
|
||||
"tandoor": {
|
||||
"deployed": false,
|
||||
"state": "not_deployed"
|
||||
},
|
||||
"zipline": {
|
||||
"deployed": false,
|
||||
"state": "not_deployed"
|
||||
},
|
||||
"wger": {
|
||||
"deployed": false,
|
||||
"state": "not_deployed"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,57 @@
|
||||
|
||||
######## demo-hp
|
||||
base=https://192.168.0.138 Host=felhom.enkisfelhom.hu
|
||||
deployed apps: adventurelog, bentopdf, bookstack, calibre-web, docmost, kimai, opengist, paperless-ngx, privatebin, romm
|
||||
will update: ['bookstack', 'docmost', 'privatebin', 'romm'] | NOT installed here: []
|
||||
sync -> 200 {'ok': True, 'data': {'ok': True, 'message': 'Sablonok naprakészek — nincs változás'}, 'message': 'Sablonok naprakészek — nincs változás'}
|
||||
|
||||
==== bookstack
|
||||
badge HU: [{'title': 'Ez az alkalmazás a legfrissebb elérhető változatot futtatja.', 'text': 'Naprakész'}]
|
||||
badge EN: [{'title': 'This app is running the newest version available.', 'text': 'Up to date'}]
|
||||
before: {'bookstack': 'lscr.io/linuxserver/bookstack:26.05.5', 'bookstack-db': 'mariadb:12.3'}
|
||||
+ 0.0s phase=safety-dump None
|
||||
+ 1.1s phase=pulling None
|
||||
+ 2.1s phase=starting None
|
||||
+ 3.1s phase=done None
|
||||
after : {'bookstack': 'lscr.io/linuxserver/bookstack:26.05.5', 'bookstack-db': 'mariadb:12.3'} | installed: {'bookstack': 'lscr.io/linuxserver/bookstack:26.05.5', 'bookstack-db': 'mariadb:12.3'}
|
||||
|
||||
==== docmost
|
||||
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'}]
|
||||
badge EN: [{'title': 'A newer version of this app is available. Select the Update button to start it.', 'text': 'Update available — today'}]
|
||||
before: {'docmost': 'docmost/docmost:0.95.0', 'docmost-postgres': 'postgres:16-alpine', 'docmost-redis': 'redis:7-alpine'}
|
||||
+ 0.0s phase=safety-dump None
|
||||
+ 1.0s phase=pulling None
|
||||
+ 79.0s phase=starting None
|
||||
+ 91.3s phase=verifying None
|
||||
+ 106.6s phase=done None
|
||||
after : {'docmost': 'docmost/docmost:0.96.0', 'docmost-postgres': 'postgres:16-alpine', 'docmost-redis': 'redis:7-alpine'} | installed: {'docmost': 'docmost/docmost:0.96.0', 'docmost-postgres': 'postgres:16-alpine', 'docmost-redis': 'redis:7-alpine'}
|
||||
|
||||
==== privatebin
|
||||
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'}]
|
||||
badge EN: [{'title': 'A newer version of this app is available. Select the Update button to start it.', 'text': 'Update available — today'}]
|
||||
before: {'privatebin': 'privatebin/pdo:2.0.5'}
|
||||
+ 0.0s phase=safety-dump None
|
||||
+ 1.1s phase=pulling None
|
||||
+ 4.1s phase=starting None
|
||||
+ 5.2s phase=verifying None
|
||||
+ 15.4s phase=done None
|
||||
after : {'privatebin': 'privatebin/pdo:2.0.6'} | installed: {'privatebin': 'privatebin/pdo:2.0.6'}
|
||||
|
||||
==== romm
|
||||
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'}]
|
||||
badge EN: [{'title': 'A newer version of this app is available. Select the Update button to start it.', 'text': 'Update available — today'}]
|
||||
before: {'romm': 'rommapp/romm:5.0.0', 'romm-db': 'mariadb:11.4', 'romm-redis': 'redis:7-alpine'}
|
||||
+ 0.0s phase=safety-dump None
|
||||
+ 1.1s phase=pulling None
|
||||
+ 13.3s phase=starting None
|
||||
+ 40.0s phase=verifying None
|
||||
+ 74.8s phase=done None
|
||||
after : {'romm': 'rommapp/romm:5.3.0', 'romm-db': 'mariadb:11.4', 'romm-redis': 'redis:7-alpine'} | installed: {'romm': 'rommapp/romm:5.3.0', 'romm-db': 'mariadb:11.4', 'romm-redis': 'redis:7-alpine'}
|
||||
|
||||
######## demo-felhom
|
||||
base=https://192.168.0.149 Host=felhom.demo-felhom.eu
|
||||
deployed apps: opengist
|
||||
will update: [] | NOT installed here: ['bookstack', 'docmost', 'privatebin', 'romm']
|
||||
sync -> 200 {'ok': True, 'data': {'ok': True, 'message': 'Sablonok naprakészek — nincs változás'}, 'message': 'Sablonok naprakészek — nincs változás'}
|
||||
|
||||
written demo-updates.json
|
||||
@@ -0,0 +1,580 @@
|
||||
{
|
||||
"demo-hp": {
|
||||
"box": "demo-hp",
|
||||
"base": "https://192.168.0.138",
|
||||
"deployed": [
|
||||
"adventurelog",
|
||||
"bentopdf",
|
||||
"bookstack",
|
||||
"calibre-web",
|
||||
"docmost",
|
||||
"kimai",
|
||||
"opengist",
|
||||
"paperless-ngx",
|
||||
"privatebin",
|
||||
"romm"
|
||||
],
|
||||
"not_installed": [],
|
||||
"apps": {
|
||||
"bookstack": {
|
||||
"badge_before_hu": {
|
||||
"tags": [
|
||||
{
|
||||
"title": "Ez az alkalmazás a legfrissebb elérhető változatot futtatja.",
|
||||
"text": "Naprakész"
|
||||
}
|
||||
],
|
||||
"context": "← Alkalmazások BookStack Fut Naprakész Megnyitás ↗ Napló Exportálás Beállítások Egyszerű wiki platform - polcok, könyvek, fejezetek és oldalak ~150M RAM productivity Pi kompatibilis Áthelyezés másik t"
|
||||
},
|
||||
"badge_before_en": {
|
||||
"tags": [
|
||||
{
|
||||
"title": "This app is running the newest version available.",
|
||||
"text": "Up to date"
|
||||
}
|
||||
],
|
||||
"context": "← Apps BookStack Running Up to date Open ↗ Log Export Settings A simple wiki platform - shelves, books, chapters and pages ~150M RAM productivity Runs on Pi Move to another storage You can move this a"
|
||||
},
|
||||
"before": {
|
||||
"state": "running",
|
||||
"pinned_images": {
|
||||
"bookstack": "lscr.io/linuxserver/bookstack:26.05.5",
|
||||
"bookstack-db": "mariadb:12.3"
|
||||
},
|
||||
"installed_images": {
|
||||
"bookstack": {
|
||||
"ref": "lscr.io/linuxserver/bookstack:26.05.2",
|
||||
"digest": "sha256:3db259db582808ab498d49ae96b0a63f935d9cf3635c9d5bd8b8815c6ff1f8a1",
|
||||
"at": "2026-09-02T18:28:54Z"
|
||||
},
|
||||
"bookstack-db": {
|
||||
"ref": "mariadb:12.3",
|
||||
"digest": "sha256:a02fe89cb597d4375812b2eac90cf9d0775d4686daa7f7cc750ebbcad7525bbc",
|
||||
"at": "2026-09-02T18:28:54Z"
|
||||
}
|
||||
},
|
||||
"compose": [
|
||||
"image: lscr.io/linuxserver/bookstack:26.05.5",
|
||||
"image: mariadb:12.3"
|
||||
],
|
||||
"inspect": [
|
||||
"bookstack|lscr.io/linuxserver/bookstack:26.05.5|running|Up 16 seconds (healthy)",
|
||||
"bookstack-db|mariadb:12.3|running|Up 21 seconds (healthy)"
|
||||
]
|
||||
},
|
||||
"update": {
|
||||
"accepted": true,
|
||||
"code": "202",
|
||||
"answer": "{'ok': True, 'data': {'accepted': True, 'completed': False}, 'message': 'Frissítés elindult – az állapot a kártyán követhető'}",
|
||||
"phases": [
|
||||
{
|
||||
"t": 0.0,
|
||||
"phase": "safety-dump",
|
||||
"label": null,
|
||||
"error": null,
|
||||
"hold": null
|
||||
},
|
||||
{
|
||||
"t": 1.1,
|
||||
"phase": "pulling",
|
||||
"label": null,
|
||||
"error": null,
|
||||
"hold": null
|
||||
},
|
||||
{
|
||||
"t": 2.1,
|
||||
"phase": "starting",
|
||||
"label": null,
|
||||
"error": null,
|
||||
"hold": null
|
||||
},
|
||||
{
|
||||
"t": 3.1,
|
||||
"phase": "done",
|
||||
"label": null,
|
||||
"error": null,
|
||||
"hold": null
|
||||
}
|
||||
]
|
||||
},
|
||||
"after": {
|
||||
"state": "running",
|
||||
"pinned_images": {
|
||||
"bookstack": "lscr.io/linuxserver/bookstack:26.05.5",
|
||||
"bookstack-db": "mariadb:12.3"
|
||||
},
|
||||
"installed_images": {
|
||||
"bookstack": {
|
||||
"ref": "lscr.io/linuxserver/bookstack:26.05.5",
|
||||
"digest": "sha256:189c796273469115cf810e53f450e15b93184018e4728cd65fcaef8aa93584bc",
|
||||
"at": "2026-09-22T09:05:22Z"
|
||||
},
|
||||
"bookstack-db": {
|
||||
"ref": "mariadb:12.3",
|
||||
"digest": "sha256:805c8e104bd563d5bfa24fadd3f31cd419ea859cb5277f32b5dbf2db714f9ed1",
|
||||
"at": "2026-09-22T09:05:22Z"
|
||||
}
|
||||
},
|
||||
"compose": [
|
||||
"image: lscr.io/linuxserver/bookstack:26.05.5",
|
||||
"image: mariadb:12.3"
|
||||
],
|
||||
"inspect": [
|
||||
"bookstack|lscr.io/linuxserver/bookstack:26.05.5|running|Up 21 seconds (healthy)",
|
||||
"bookstack-db|mariadb:12.3|running|Up 27 seconds (healthy)"
|
||||
]
|
||||
},
|
||||
"page_after_hu": {
|
||||
"tags": [
|
||||
{
|
||||
"title": "Ez az alkalmazás a legfrissebb elérhető változatot futtatja.",
|
||||
"text": "Naprakész"
|
||||
}
|
||||
],
|
||||
"context": "← Alkalmazások BookStack Fut Naprakész Megnyitás ↗ Napló Exportálás Beállítások Egyszerű wiki platform - polcok, könyvek, fejezetek és oldalak ~150M RAM productivity Pi kompatibilis Áthelyezés másik t"
|
||||
},
|
||||
"page_after_en": {
|
||||
"tags": [
|
||||
{
|
||||
"title": "This app is running the newest version available.",
|
||||
"text": "Up to date"
|
||||
}
|
||||
],
|
||||
"context": "← Apps BookStack Running Up to date Open ↗ Log Export Settings A simple wiki platform - shelves, books, chapters and pages ~150M RAM productivity Runs on Pi Move to another storage You can move this a"
|
||||
}
|
||||
},
|
||||
"docmost": {
|
||||
"badge_before_hu": {
|
||||
"tags": [
|
||||
{
|
||||
"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"
|
||||
}
|
||||
],
|
||||
"context": "← Alkalmazások Docmost Fut Frissítés elérhető — ma Megnyitás ↗ Napló Exportálás Beállítások Modern wiki és dokumentáció platform Notion-szerű szerkesztővel ~200M RAM productivity Csak x86 Áthelyezés m"
|
||||
},
|
||||
"badge_before_en": {
|
||||
"tags": [
|
||||
{
|
||||
"title": "A newer version of this app is available. Select the Update button to start it.",
|
||||
"text": "Update available — today"
|
||||
}
|
||||
],
|
||||
"context": "← Apps Docmost Running Update available — today Open ↗ Log Export Settings A modern wiki and documentation platform with a Notion-like editor ~200M RAM productivity x86 only Move to another storage Yo"
|
||||
},
|
||||
"before": {
|
||||
"state": "running",
|
||||
"pinned_images": {
|
||||
"docmost": "docmost/docmost:0.95.0",
|
||||
"docmost-postgres": "postgres:16-alpine",
|
||||
"docmost-redis": "redis:7-alpine"
|
||||
},
|
||||
"installed_images": {
|
||||
"docmost": {
|
||||
"ref": "docmost/docmost:0.95.0",
|
||||
"digest": "sha256:41c8d777cf23c74e78f94e676aec328b7d7856f48df5e573543dac68d371e37c",
|
||||
"at": "2026-09-03T00:30:36Z"
|
||||
},
|
||||
"docmost-postgres": {
|
||||
"ref": "postgres:16-alpine",
|
||||
"digest": "sha256:cf78e76683b9ca8c5733cbbdce6c9262b45b6767934dd0a95e671f9a0fc20685",
|
||||
"at": "2026-09-03T00:30:36Z"
|
||||
},
|
||||
"docmost-redis": {
|
||||
"ref": "redis:7-alpine",
|
||||
"digest": "sha256:ff02b58f971e7d7d156a1267e283fcbbeee91773b6aa36c49dac28ecfe28eadf",
|
||||
"at": "2026-09-03T00:30:36Z"
|
||||
}
|
||||
},
|
||||
"compose": [
|
||||
"image: docmost/docmost:0.95.0",
|
||||
"image: postgres:16-alpine",
|
||||
"image: redis:7-alpine"
|
||||
],
|
||||
"inspect": [
|
||||
"docmost|docmost/docmost:0.95.0|running|Up 4 hours (healthy)",
|
||||
"docmost-postgres|postgres:16-alpine|running|Up 4 hours (healthy)",
|
||||
"docmost-redis|redis:7-alpine|running|Up 4 hours (healthy)"
|
||||
]
|
||||
},
|
||||
"update": {
|
||||
"accepted": true,
|
||||
"code": "202",
|
||||
"answer": "{'ok': True, 'data': {'accepted': True, 'completed': False}, 'message': 'Frissítés elindult – az állapot a kártyán követhető'}",
|
||||
"phases": [
|
||||
{
|
||||
"t": 0.0,
|
||||
"phase": "safety-dump",
|
||||
"label": null,
|
||||
"error": null,
|
||||
"hold": null
|
||||
},
|
||||
{
|
||||
"t": 1.0,
|
||||
"phase": "pulling",
|
||||
"label": null,
|
||||
"error": null,
|
||||
"hold": null
|
||||
},
|
||||
{
|
||||
"t": 79.0,
|
||||
"phase": "starting",
|
||||
"label": null,
|
||||
"error": null,
|
||||
"hold": null
|
||||
},
|
||||
{
|
||||
"t": 91.3,
|
||||
"phase": "verifying",
|
||||
"label": null,
|
||||
"error": null,
|
||||
"hold": null
|
||||
},
|
||||
{
|
||||
"t": 106.6,
|
||||
"phase": "done",
|
||||
"label": null,
|
||||
"error": null,
|
||||
"hold": null
|
||||
}
|
||||
]
|
||||
},
|
||||
"after": {
|
||||
"state": "running",
|
||||
"pinned_images": {
|
||||
"docmost": "docmost/docmost:0.96.0",
|
||||
"docmost-postgres": "postgres:16-alpine",
|
||||
"docmost-redis": "redis:7-alpine"
|
||||
},
|
||||
"installed_images": {
|
||||
"docmost": {
|
||||
"ref": "docmost/docmost:0.96.0",
|
||||
"digest": "sha256:b56947fcfd08aab8fae12a377e1792784786adbf8b96e4281f14ef4fc072685a",
|
||||
"at": "2026-09-22T09:07:17Z"
|
||||
},
|
||||
"docmost-postgres": {
|
||||
"ref": "postgres:16-alpine",
|
||||
"digest": "sha256:721873c34ceb9f8d8fc265984940dc982404c105f19ad51be9fdc5970a6080ea",
|
||||
"at": "2026-09-22T09:07:17Z"
|
||||
},
|
||||
"docmost-redis": {
|
||||
"ref": "redis:7-alpine",
|
||||
"digest": "sha256:858f009f9709ce576febc734aa78b8f6d624b82571f9ddb6bda4377c833b3499",
|
||||
"at": "2026-09-22T09:07:17Z"
|
||||
}
|
||||
},
|
||||
"compose": [
|
||||
"image: docmost/docmost:0.96.0",
|
||||
"image: postgres:16-alpine",
|
||||
"image: redis:7-alpine"
|
||||
],
|
||||
"inspect": [
|
||||
"docmost|docmost/docmost:0.96.0|running|Up 18 seconds (healthy)",
|
||||
"docmost-postgres|postgres:16-alpine|running|Up 29 seconds (healthy)",
|
||||
"docmost-redis|redis:7-alpine|running|Up 29 seconds (healthy)"
|
||||
]
|
||||
},
|
||||
"page_after_hu": {
|
||||
"tags": [
|
||||
{
|
||||
"title": "Ez az alkalmazás a legfrissebb elérhető változatot futtatja.",
|
||||
"text": "Naprakész"
|
||||
}
|
||||
],
|
||||
"context": "← Alkalmazások Docmost Fut Naprakész Megnyitás ↗ Napló Exportálás Beállítások Modern wiki és dokumentáció platform Notion-szerű szerkesztővel ~200M RAM productivity Csak x86 Áthelyezés másik tárhelyre"
|
||||
},
|
||||
"page_after_en": {
|
||||
"tags": [
|
||||
{
|
||||
"title": "This app is running the newest version available.",
|
||||
"text": "Up to date"
|
||||
}
|
||||
],
|
||||
"context": "← Apps Docmost Running Up to date Open ↗ Log Export Settings A modern wiki and documentation platform with a Notion-like editor ~200M RAM productivity x86 only Move to another storage You can move thi"
|
||||
}
|
||||
},
|
||||
"privatebin": {
|
||||
"badge_before_hu": {
|
||||
"tags": [
|
||||
{
|
||||
"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"
|
||||
}
|
||||
],
|
||||
"context": "← Alkalmazások PrivateBin Fut Frissítés elérhető — ma Megnyitás ↗ Napló Exportálás Beállítások Titkosított szöveg megosztás - a szerver nem látja a tartalmat ~30M RAM security Pi kompatibilis Áthelyez"
|
||||
},
|
||||
"badge_before_en": {
|
||||
"tags": [
|
||||
{
|
||||
"title": "A newer version of this app is available. Select the Update button to start it.",
|
||||
"text": "Update available — today"
|
||||
}
|
||||
],
|
||||
"context": "← Apps PrivateBin Running Update available — today Open ↗ Log Export Settings Encrypted text sharing - the server never sees the content ~30M RAM security Runs on Pi Move to another storage You can mo"
|
||||
},
|
||||
"before": {
|
||||
"state": "running",
|
||||
"pinned_images": {
|
||||
"privatebin": "privatebin/pdo:2.0.5"
|
||||
},
|
||||
"installed_images": {
|
||||
"privatebin": {
|
||||
"ref": "privatebin/pdo:2.0.5",
|
||||
"digest": "sha256:8a2cac16eff6caed4dc622e7b3ebd0c0ffcb28dfc0eba0b9c335636552eadac1",
|
||||
"at": "2026-09-03T09:59:45Z"
|
||||
}
|
||||
},
|
||||
"compose": [
|
||||
"image: privatebin/pdo:2.0.5"
|
||||
],
|
||||
"inspect": [
|
||||
"privatebin|privatebin/pdo:2.0.5|running|Up 4 hours (healthy)"
|
||||
]
|
||||
},
|
||||
"update": {
|
||||
"accepted": true,
|
||||
"code": "202",
|
||||
"answer": "{'ok': True, 'data': {'accepted': True, 'completed': False}, 'message': 'Frissítés elindult – az állapot a kártyán követhető'}",
|
||||
"phases": [
|
||||
{
|
||||
"t": 0.0,
|
||||
"phase": "safety-dump",
|
||||
"label": null,
|
||||
"error": null,
|
||||
"hold": null
|
||||
},
|
||||
{
|
||||
"t": 1.1,
|
||||
"phase": "pulling",
|
||||
"label": null,
|
||||
"error": null,
|
||||
"hold": null
|
||||
},
|
||||
{
|
||||
"t": 4.1,
|
||||
"phase": "starting",
|
||||
"label": null,
|
||||
"error": null,
|
||||
"hold": null
|
||||
},
|
||||
{
|
||||
"t": 5.2,
|
||||
"phase": "verifying",
|
||||
"label": null,
|
||||
"error": null,
|
||||
"hold": null
|
||||
},
|
||||
{
|
||||
"t": 15.4,
|
||||
"phase": "done",
|
||||
"label": null,
|
||||
"error": null,
|
||||
"hold": null
|
||||
}
|
||||
]
|
||||
},
|
||||
"after": {
|
||||
"state": "running",
|
||||
"pinned_images": {
|
||||
"privatebin": "privatebin/pdo:2.0.6"
|
||||
},
|
||||
"installed_images": {
|
||||
"privatebin": {
|
||||
"ref": "privatebin/pdo:2.0.6",
|
||||
"digest": "sha256:4c141b2326f8b353598ce9ce7507a9cfecf2dad5c60a39fea903d430e296d8f5",
|
||||
"at": "2026-09-22T09:07:38Z"
|
||||
}
|
||||
},
|
||||
"compose": [
|
||||
"image: privatebin/pdo:2.0.6"
|
||||
],
|
||||
"inspect": [
|
||||
"privatebin|privatebin/pdo:2.0.6|running|Up 13 seconds (healthy)"
|
||||
]
|
||||
},
|
||||
"page_after_hu": {
|
||||
"tags": [
|
||||
{
|
||||
"title": "Ez az alkalmazás a legfrissebb elérhető változatot futtatja.",
|
||||
"text": "Naprakész"
|
||||
}
|
||||
],
|
||||
"context": "← Alkalmazások PrivateBin Fut Naprakész Megnyitás ↗ Napló Exportálás Beállítások Titkosított szöveg megosztás - a szerver nem látja a tartalmat ~30M RAM security Pi kompatibilis Áthelyezés másik tárhe"
|
||||
},
|
||||
"page_after_en": {
|
||||
"tags": [
|
||||
{
|
||||
"title": "This app is running the newest version available.",
|
||||
"text": "Up to date"
|
||||
}
|
||||
],
|
||||
"context": "← Apps PrivateBin Running Up to date Open ↗ Log Export Settings Encrypted text sharing - the server never sees the content ~30M RAM security Runs on Pi Move to another storage You can move this app’s "
|
||||
}
|
||||
},
|
||||
"romm": {
|
||||
"badge_before_hu": {
|
||||
"tags": [
|
||||
{
|
||||
"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"
|
||||
}
|
||||
],
|
||||
"context": "← Alkalmazások RomM Fut Frissítés elérhető — ma Megnyitás ↗ Napló Exportálás Beállítások Retró játékgyűjtemény kezelő, böngésző és lejátszó ~300M RAM media HDD szükséges Csak x86 Hova tegyem a fájloka"
|
||||
},
|
||||
"badge_before_en": {
|
||||
"tags": [
|
||||
{
|
||||
"title": "A newer version of this app is available. Select the Update button to start it.",
|
||||
"text": "Update available — today"
|
||||
}
|
||||
],
|
||||
"context": "← Apps RomM Running Update available — today Open ↗ Log Export Settings Retro game collection manager, browser and player ~300M RAM media Needs a hard drive x86 only Where do I put my files? You reach"
|
||||
},
|
||||
"before": {
|
||||
"state": "running",
|
||||
"pinned_images": {
|
||||
"romm": "rommapp/romm:5.0.0",
|
||||
"romm-db": "mariadb:11.4",
|
||||
"romm-redis": "redis:7-alpine"
|
||||
},
|
||||
"installed_images": {
|
||||
"romm": {
|
||||
"ref": "rommapp/romm:5.0.0",
|
||||
"digest": "sha256:91f6611eca5a4dafc4f4a1d72a1ed7dd66a11375d939f28410dc1d1de0b80b1b",
|
||||
"at": "2026-09-03T09:59:45Z"
|
||||
},
|
||||
"romm-db": {
|
||||
"ref": "mariadb:11.4",
|
||||
"digest": "sha256:4f1d8d202fcf7bcb3902f63af09f9c1a050c2922a89652f22abaec0d4f015e83",
|
||||
"at": "2026-09-03T09:59:45Z"
|
||||
},
|
||||
"romm-redis": {
|
||||
"ref": "redis:7-alpine",
|
||||
"digest": "sha256:ff02b58f971e7d7d156a1267e283fcbbeee91773b6aa36c49dac28ecfe28eadf",
|
||||
"at": "2026-09-03T09:59:45Z"
|
||||
}
|
||||
},
|
||||
"compose": [
|
||||
"image: rommapp/romm:5.0.0",
|
||||
"image: mariadb:11.4",
|
||||
"image: redis:7-alpine"
|
||||
],
|
||||
"inspect": [
|
||||
"romm|rommapp/romm:5.0.0|running|Up 4 hours (healthy)",
|
||||
"romm-db|mariadb:11.4|running|Up 4 hours (healthy)",
|
||||
"romm-redis|5509c0097c60|running|Up 4 hours (healthy)"
|
||||
]
|
||||
},
|
||||
"update": {
|
||||
"accepted": true,
|
||||
"code": "202",
|
||||
"answer": "{'ok': True, 'data': {'accepted': True, 'completed': False}, 'message': 'Frissítés elindult – az állapot a kártyán követhető'}",
|
||||
"phases": [
|
||||
{
|
||||
"t": 0.0,
|
||||
"phase": "safety-dump",
|
||||
"label": null,
|
||||
"error": null,
|
||||
"hold": null
|
||||
},
|
||||
{
|
||||
"t": 1.1,
|
||||
"phase": "pulling",
|
||||
"label": null,
|
||||
"error": null,
|
||||
"hold": null
|
||||
},
|
||||
{
|
||||
"t": 13.3,
|
||||
"phase": "starting",
|
||||
"label": null,
|
||||
"error": null,
|
||||
"hold": null
|
||||
},
|
||||
{
|
||||
"t": 40.0,
|
||||
"phase": "verifying",
|
||||
"label": null,
|
||||
"error": null,
|
||||
"hold": null
|
||||
},
|
||||
{
|
||||
"t": 74.8,
|
||||
"phase": "done",
|
||||
"label": null,
|
||||
"error": null,
|
||||
"hold": null
|
||||
}
|
||||
]
|
||||
},
|
||||
"after": {
|
||||
"state": "running",
|
||||
"pinned_images": {
|
||||
"romm": "rommapp/romm:5.3.0",
|
||||
"romm-db": "mariadb:11.4",
|
||||
"romm-redis": "redis:7-alpine"
|
||||
},
|
||||
"installed_images": {
|
||||
"romm": {
|
||||
"ref": "rommapp/romm:5.3.0",
|
||||
"digest": "sha256:dc586cb3a2c7316fcffb3dc273171b1964523f0f409e989295d26d2199df1d4e",
|
||||
"at": "2026-09-22T09:08:58Z"
|
||||
},
|
||||
"romm-db": {
|
||||
"ref": "mariadb:11.4",
|
||||
"digest": "sha256:70cc072b29b4a89ae07abb2d4da2c64678a7f2dfe092751bb51c87d67dc1338b",
|
||||
"at": "2026-09-22T09:08:58Z"
|
||||
},
|
||||
"romm-redis": {
|
||||
"ref": "redis:7-alpine",
|
||||
"digest": "sha256:858f009f9709ce576febc734aa78b8f6d624b82571f9ddb6bda4377c833b3499",
|
||||
"at": "2026-09-22T09:08:58Z"
|
||||
}
|
||||
},
|
||||
"compose": [
|
||||
"image: rommapp/romm:5.3.0",
|
||||
"image: mariadb:11.4",
|
||||
"image: redis:7-alpine"
|
||||
],
|
||||
"inspect": [
|
||||
"romm|rommapp/romm:5.3.0|running|Up 39 seconds (healthy)",
|
||||
"romm-db|mariadb:11.4|running|Up 49 seconds (healthy)",
|
||||
"romm-redis|redis:7-alpine|running|Up 49 seconds (healthy)"
|
||||
]
|
||||
},
|
||||
"page_after_hu": {
|
||||
"tags": [
|
||||
{
|
||||
"title": "Ez az alkalmazás a legfrissebb elérhető változatot futtatja.",
|
||||
"text": "Naprakész"
|
||||
}
|
||||
],
|
||||
"context": "← Alkalmazások RomM Fut Naprakész Megnyitás ↗ Napló Exportálás Beállítások Retró játékgyűjtemény kezelő, böngésző és lejátszó ~300M RAM media HDD szükséges Csak x86 Hova tegyem a fájlokat? Ezeket a ma"
|
||||
},
|
||||
"page_after_en": {
|
||||
"tags": [
|
||||
{
|
||||
"title": "This app is running the newest version available.",
|
||||
"text": "Up to date"
|
||||
}
|
||||
],
|
||||
"context": "← Apps RomM Running Up to date Open ↗ Log Export Settings Retro game collection manager, browser and player ~300M RAM media Needs a hard drive x86 only Where do I put my files? You reach these folders"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"demo-felhom": {
|
||||
"box": "demo-felhom",
|
||||
"base": "https://192.168.0.149",
|
||||
"deployed": [
|
||||
"opengist"
|
||||
],
|
||||
"not_installed": [
|
||||
"bookstack",
|
||||
"docmost",
|
||||
"privatebin",
|
||||
"romm"
|
||||
],
|
||||
"apps": {}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,179 @@
|
||||
#!/usr/bin/env python3
|
||||
"""demo.py — the guarded Update pressed on the TWO DEMO BOXES, through the product's own endpoints.
|
||||
|
||||
Not a harness for the scratch guest: these are the customer-shaped boxes, so this only SYNCS and
|
||||
presses UPDATE on apps that are already installed. It installs nothing and removes nothing.
|
||||
"""
|
||||
import json, os, re, subprocess, sys, time
|
||||
from datetime import datetime
|
||||
|
||||
SC = "/tmp/claude-1000/-mnt-5-hdd-felhom-eu-git/d029e2e6-1762-440e-956d-0760c8aea4b3/scratchpad"
|
||||
HERE = os.path.dirname(os.path.abspath(__file__))
|
||||
|
||||
BOXES = {
|
||||
# name base url Host header ssh host vmid
|
||||
"demo-hp": (None, "felhom.enkisfelhom.hu", "demo-hp", "9201"),
|
||||
"demo-felhom": (None, "felhom.demo-felhom.eu", "felhom-pve", "9201"),
|
||||
}
|
||||
APPS = ["bookstack", "docmost", "privatebin", "romm"]
|
||||
|
||||
|
||||
def sh(a, timeout=300, inp=None):
|
||||
return subprocess.run(a, capture_output=True, text=True, timeout=timeout, input=inp)
|
||||
|
||||
|
||||
class Box:
|
||||
def __init__(self, name):
|
||||
self.name = name
|
||||
base, host, sshh, vmid = BOXES[name]
|
||||
self.host, self.ssh, self.vmid = host, sshh, vmid
|
||||
self.base = base or self.guest_ip()
|
||||
self.sess = self.csrf = None
|
||||
|
||||
def guest_ip(self):
|
||||
r = sh(["ssh", "-o", "ConnectTimeout=15", self.ssh,
|
||||
f"LC_ALL=C pct exec {self.vmid} -- hostname -I"], timeout=60)
|
||||
ip = (r.stdout or "").split()
|
||||
if not ip:
|
||||
raise SystemExit(f"{self.name}: no guest IP ({r.stderr[:200]})")
|
||||
return "https://" + ip[0]
|
||||
|
||||
def guest(self, script):
|
||||
r = sh(["ssh", "-o", "ConnectTimeout=15", self.ssh,
|
||||
f"LC_ALL=C pct exec {self.vmid} -- bash -s"], timeout=600, inp=script)
|
||||
return (r.stdout or "") + (r.stderr or "")
|
||||
|
||||
def login(self):
|
||||
pw = open(f"{SC}/.ctlpw").read().strip()
|
||||
r = sh(["curl", "-sk", "-D", "-", "-o", "/dev/null", "-H", f"Host: {self.host}",
|
||||
"-X", "POST", "--data-urlencode", f"password={pw}", f"{self.base}/login"])
|
||||
m = re.search(r"felhom_session=[A-Za-z0-9._-]+", r.stdout or "", re.I)
|
||||
if not m:
|
||||
raise SystemExit(f"{self.name}: login failed (no session cookie)")
|
||||
self.sess = m.group(0)
|
||||
r = sh(["curl", "-sk", "-L", "-H", f"Host: {self.host}", "-H", f"Cookie: {self.sess}",
|
||||
f"{self.base}/"])
|
||||
c = re.search(r'<meta name="csrf-token" content="([^"]+)"', r.stdout or "")
|
||||
if not c:
|
||||
raise SystemExit(f"{self.name}: login failed (no csrf token)")
|
||||
self.csrf = c.group(1)
|
||||
|
||||
def ctl(self, method, path, data=None):
|
||||
for attempt in range(2):
|
||||
args = ["curl", "-sk", "-H", f"Host: {self.host}", "-H", f"Cookie: {self.sess}",
|
||||
"-w", "\n%{http_code}"]
|
||||
if method != "GET":
|
||||
args += ["-H", f"X-CSRF-Token: {self.csrf}", "-H", "Content-Type: application/json",
|
||||
"-X", method]
|
||||
if data is not None:
|
||||
args += ["--data", json.dumps(data)]
|
||||
args.append(f"{self.base}{path}")
|
||||
r = sh(args)
|
||||
body, _, code = (r.stdout or "").rpartition("\n")
|
||||
if code.strip() in ("302", "401") and attempt == 0:
|
||||
self.login()
|
||||
continue
|
||||
try:
|
||||
return code.strip(), json.loads(body)
|
||||
except Exception:
|
||||
return code.strip(), {"_raw": body[:600]}
|
||||
|
||||
def page(self, path):
|
||||
r = sh(["curl", "-sk", "-H", f"Host: {self.host}", "-H", f"Cookie: {self.sess}",
|
||||
f"{self.base}{path}"])
|
||||
return r.stdout or ""
|
||||
|
||||
def stack(self, n):
|
||||
_, d = self.ctl("GET", f"/api/stacks/{n}")
|
||||
return (d.get("data") or {}) if isinstance(d, dict) else {}
|
||||
|
||||
|
||||
def badge(box, app, lang_suffix=""):
|
||||
h = box.page(f"/apps/{app}{lang_suffix}")
|
||||
h = re.sub(r"<script.*?</script>|<style.*?</style>", "", h, flags=re.S)
|
||||
m = re.findall(r'<span class="tag tag-[^"]*"[^>]*title="([^"]*)"[^>]*>([^<]*)<', h)
|
||||
txt = re.sub(r"\s+", " ", re.sub(r"<[^>]+>", " ", h))
|
||||
i = txt.find("←")
|
||||
return {"tags": [{"title": a.strip(), "text": b.strip()} for a, b in m][:3],
|
||||
"context": txt[i:i + 200] if i >= 0 else None}
|
||||
|
||||
|
||||
def observables(box, app):
|
||||
st = box.stack(app)
|
||||
ac = st.get("app_config") or {}
|
||||
comp = box.guest(f"grep -h 'image:' /opt/docker/stacks/{app}/docker-compose.yml 2>/dev/null")
|
||||
insp = box.guest("docker ps -a --format '{{.Names}}|{{.Image}}|{{.State}}|{{.Status}}' "
|
||||
f"| grep '^{app}'")
|
||||
return {"state": st.get("state"), "pinned_images": ac.get("pinned_images"),
|
||||
"installed_images": ac.get("installed_images"),
|
||||
"compose": [l.strip() for l in comp.strip().split("\n") if l.strip()],
|
||||
"inspect": [l for l in insp.strip().split("\n") if l.strip()]}
|
||||
|
||||
|
||||
def press(box, app, cap_s=1800):
|
||||
code, d = box.ctl("POST", f"/api/stacks/{app}/update")
|
||||
t0 = time.time()
|
||||
phases, last = [], None
|
||||
if code != "202":
|
||||
return {"accepted": False, "code": code, "answer": str(d)[:300], "phases": []}
|
||||
while time.time() - t0 < cap_s:
|
||||
st = box.stack(app)
|
||||
u = st.get("update") or st.get("update_status") or {}
|
||||
ph = u.get("phase") or st.get("update_phase")
|
||||
if ph and ph != last:
|
||||
phases.append({"t": round(time.time() - t0, 1), "phase": ph,
|
||||
"label": u.get("label") or u.get("message"),
|
||||
"error": u.get("error"), "hold": u.get("hold_message")})
|
||||
last = ph
|
||||
print(" +%7.1fs phase=%s %s" % (phases[-1]["t"], ph, phases[-1]["label"]),
|
||||
flush=True)
|
||||
if ph in ("done", "failed"):
|
||||
break
|
||||
time.sleep(1.0)
|
||||
return {"accepted": True, "code": code, "answer": str(d)[:200], "phases": phases}
|
||||
|
||||
|
||||
def main():
|
||||
only = sys.argv[1:] or list(BOXES)
|
||||
out = {}
|
||||
for name in only:
|
||||
print(f"\n######## {name}")
|
||||
b = Box(name)
|
||||
print(f" base={b.base} Host={b.host}")
|
||||
b.login()
|
||||
code, d = b.ctl("GET", "/api/stacks")
|
||||
installed = [s["name"] for s in (d.get("data") or []) if s.get("deployed")]
|
||||
print(" deployed apps:", ", ".join(sorted(installed)))
|
||||
todo = [a for a in APPS if a in installed]
|
||||
missing = [a for a in APPS if a not in installed]
|
||||
print(" will update:", todo, "| NOT installed here:", missing)
|
||||
code, d = b.ctl("POST", "/api/sync")
|
||||
print(" sync ->", code, str(d)[:180])
|
||||
time.sleep(3)
|
||||
b.ctl("POST", "/api/stacks/rescan")
|
||||
time.sleep(3)
|
||||
rec = {"box": name, "base": b.base, "deployed": sorted(installed),
|
||||
"not_installed": missing, "apps": {}}
|
||||
for app in todo:
|
||||
print(f"\n ==== {app}")
|
||||
before = observables(b, app)
|
||||
bhu, ben = badge(b, app), badge(b, app, "?lang=en")
|
||||
print(" badge HU:", bhu["tags"])
|
||||
print(" badge EN:", ben["tags"])
|
||||
print(" before:", before["pinned_images"])
|
||||
r = press(b, app)
|
||||
after = observables(b, app)
|
||||
print(" after :", after["pinned_images"], "| installed:",
|
||||
{k: (v or {}).get("ref") for k, v in (after["installed_images"] or {}).items()})
|
||||
phu, pen = badge(b, app), badge(b, app, "?lang=en")
|
||||
rec["apps"][app] = {"badge_before_hu": bhu, "badge_before_en": ben,
|
||||
"before": before, "update": r, "after": after,
|
||||
"page_after_hu": phu, "page_after_en": pen}
|
||||
out[name] = rec
|
||||
json.dump(out, open(os.path.join(HERE, "demo-updates.json"), "w"),
|
||||
ensure_ascii=False, indent=2)
|
||||
print("\nwritten demo-updates.json")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"tandoor": {
|
||||
"code": "200",
|
||||
"bytes": 4981,
|
||||
"first200chars": "Login Sign In Username * Password * Forgot your password? Remember Me Sign In"
|
||||
},
|
||||
"zipline": {
|
||||
"code": "200",
|
||||
"bytes": 6405,
|
||||
"first200chars": "Zipline"
|
||||
},
|
||||
"wger": {
|
||||
"code": "200",
|
||||
"bytes": 52291,
|
||||
"first200chars": ". --> wger Workout Manager - Features Contact Exercises Mobile app Donate Develop Community Login Register Track your way to your ideal body Join wger, the community-driven free and open-source fitnes"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,47 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Generate Part 2 of the report FROM the evidence file, so the table cannot drift from it."""
|
||||
import json, io, os
|
||||
HERE = os.path.dirname(os.path.abspath(__file__))
|
||||
d = json.load(open(os.path.join(HERE, "demo-updates.json"), encoding="utf-8"))
|
||||
mv = json.load(open(os.path.join(HERE, "moves.json"), encoding="utf-8"))
|
||||
|
||||
out = []
|
||||
out.append("## Part 2 — the promotion train\n")
|
||||
out.append("### The moves\n")
|
||||
out.append("Fifteen commits, one per app, `catalog_since: \"%s\"` on each. Every gate run before "
|
||||
"each commit; nothing forced, nothing dropped. `check-image-resolvable.py` confirms all "
|
||||
"18 unique pins still exist upstream.\n" % mv["catalog_since"])
|
||||
out.append("| app | move | commit |")
|
||||
out.append("|---|---|---|")
|
||||
for app, human, h in mv["moved"]:
|
||||
out.append("| `%s` | %s | `%s` |" % (app, human, h))
|
||||
out.append("| `nextcloud` | **ENGINE** `mariadb:11.6` -> `mariadb:12.3` | `39374d5` |")
|
||||
out.append("")
|
||||
out.append("### The guarded Update, pressed on both demo boxes\n")
|
||||
|
||||
for box, rec in d.items():
|
||||
out.append("#### `%s` — %s\n" % (box, rec["base"]))
|
||||
if rec["not_installed"]:
|
||||
out.append("**Not installed on this box, so not pressed:** %s.\n"
|
||||
% ", ".join("`%s`" % a for a in rec["not_installed"]))
|
||||
out.append("| app | badge before (HU / EN) | phases | pin after | installed after | front-door state |")
|
||||
out.append("|---|---|---|---|---|---|")
|
||||
for app, a in rec["apps"].items():
|
||||
bh = "; ".join(t["text"] for t in a["badge_before_hu"]["tags"]) or "—"
|
||||
be = "; ".join(t["text"] for t in a["badge_before_en"]["tags"]) or "—"
|
||||
ph = " → ".join("`%s` +%.1fs" % (p["phase"], p["t"]) for p in a["update"]["phases"]) or "—"
|
||||
pin = (a["after"]["pinned_images"] or {}).get(app, "—")
|
||||
ins = ((a["after"]["insta" "lled_images"] or {}).get(app) or {}).get("ref", "—")
|
||||
st = a["after"]["state"]
|
||||
out.append("| `%s` | `%s` / `%s` | %s | `%s` | `%s` | `%s` |" % (app, bh, be, ph, pin, ins, st))
|
||||
out.append("")
|
||||
out.append("Page after the update, as the household reads it:\n")
|
||||
for app, a in rec["apps"].items():
|
||||
hu = (a["page_after_hu"]["context"] or "").strip()
|
||||
en = (a["page_after_en"]["context"] or "").strip()
|
||||
out.append("- **`%s`** — HU: *%s*" % (app, hu[:170]))
|
||||
out.append(" EN: *%s*" % en[:170])
|
||||
out.append("")
|
||||
|
||||
io.open(os.path.join(HERE, "PART2.md"), "w", encoding="utf-8").write("\n".join(out) + "\n")
|
||||
print("\n".join(out)[:1500])
|
||||
@@ -0,0 +1,76 @@
|
||||
{
|
||||
"moved": [
|
||||
[
|
||||
"actualbudget",
|
||||
"26.7.0 -> 26.9.0",
|
||||
"2060032"
|
||||
],
|
||||
[
|
||||
"audiobookshelf",
|
||||
"2.35.1 -> 2.36.1",
|
||||
"6525b8e"
|
||||
],
|
||||
[
|
||||
"bookstack",
|
||||
"26.05.2 -> 26.05.5",
|
||||
"ac4828f"
|
||||
],
|
||||
[
|
||||
"docmost",
|
||||
"0.95.0 -> 0.96.0",
|
||||
"6d8cd87"
|
||||
],
|
||||
[
|
||||
"grafana",
|
||||
"13.1.0 -> 13.2.2",
|
||||
"068f445"
|
||||
],
|
||||
[
|
||||
"home-assistant",
|
||||
"2026.7.2 -> 2026.9.3",
|
||||
"4405f12"
|
||||
],
|
||||
[
|
||||
"mealie",
|
||||
"v3.20.1 -> v3.27.0",
|
||||
"008348b"
|
||||
],
|
||||
[
|
||||
"n8n",
|
||||
"2.31.3 -> 2.40.5",
|
||||
"4132e35"
|
||||
],
|
||||
[
|
||||
"navidrome",
|
||||
"0.63.2 -> 0.64.0",
|
||||
"7708a04"
|
||||
],
|
||||
[
|
||||
"papra",
|
||||
"26.6.1 -> 26.6.2",
|
||||
"e96887e"
|
||||
],
|
||||
[
|
||||
"privatebin",
|
||||
"2.0.5 -> 2.0.6",
|
||||
"f547f16"
|
||||
],
|
||||
[
|
||||
"romm",
|
||||
"5.0.0 -> 5.3.0",
|
||||
"15f9ebf"
|
||||
],
|
||||
[
|
||||
"tandoor",
|
||||
"2.6.13 -> 2.6.15",
|
||||
"c3807c7"
|
||||
],
|
||||
[
|
||||
"vikunja",
|
||||
"2.3.0 -> 2.6.0",
|
||||
"22f598b"
|
||||
]
|
||||
],
|
||||
"dropped": [],
|
||||
"catalog_since": "2026-09-22"
|
||||
}
|
||||
@@ -0,0 +1,64 @@
|
||||
{
|
||||
"total": 53,
|
||||
"with_verdict_record": [
|
||||
"actualbudget",
|
||||
"adventurelog",
|
||||
"audiobookshelf",
|
||||
"bookstack",
|
||||
"docmost",
|
||||
"gitea",
|
||||
"grafana",
|
||||
"home-assistant",
|
||||
"mealie",
|
||||
"n8n",
|
||||
"navidrome",
|
||||
"nextcloud",
|
||||
"opengist",
|
||||
"papra",
|
||||
"privatebin",
|
||||
"romm",
|
||||
"tandoor",
|
||||
"vaultwarden",
|
||||
"vikunja",
|
||||
"zipline"
|
||||
],
|
||||
"deployed_as_prop_no_edge": [
|
||||
"bentopdf",
|
||||
"glance",
|
||||
"uptime-kuma",
|
||||
"wishlist"
|
||||
],
|
||||
"deployed_for_probe_only": [
|
||||
"wger"
|
||||
],
|
||||
"never_deployed": [
|
||||
"calcom",
|
||||
"calibre-web",
|
||||
"claper",
|
||||
"code-server",
|
||||
"crafty-controller",
|
||||
"emby",
|
||||
"ghost",
|
||||
"gokapi",
|
||||
"gramps-web",
|
||||
"homebox",
|
||||
"homepage",
|
||||
"immich",
|
||||
"jellyfin",
|
||||
"kimai",
|
||||
"komga",
|
||||
"onlyoffice",
|
||||
"outline",
|
||||
"paperless-ngx",
|
||||
"plant-it",
|
||||
"plex",
|
||||
"radarr",
|
||||
"rallly",
|
||||
"recipe-importer",
|
||||
"seerr",
|
||||
"sonarr",
|
||||
"sparkyfitness",
|
||||
"termix",
|
||||
"wanderer"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,137 @@
|
||||
[
|
||||
{
|
||||
"when": "2026-09-22T08:51:05Z",
|
||||
"tag": "after",
|
||||
"app": "tandoor",
|
||||
"controller_state": "running",
|
||||
"deployed": true,
|
||||
"pinned_images": {
|
||||
"tandoor": "ghcr.io/tandoorrecipes/recipes:2.6.13",
|
||||
"tandoor-postgres": "postgres:16-alpine"
|
||||
},
|
||||
"installed_images": {
|
||||
"tandoor": {
|
||||
"ref": "ghcr.io/tandoorrecipes/recipes:2.6.13",
|
||||
"digest": "sha256:f6c58afdea7a721d079ebd6ee5483f2c9da77dd1e709e16d60a82c218e80a451",
|
||||
"at": "2026-09-22T08:38:25Z"
|
||||
},
|
||||
"tandoor-postgres": {
|
||||
"ref": "postgres:16-alpine",
|
||||
"digest": "sha256:721873c34ceb9f8d8fc265984940dc982404c105f19ad51be9fdc5970a6080ea",
|
||||
"at": "2026-09-22T08:38:25Z"
|
||||
}
|
||||
},
|
||||
"front_door_rc": 0,
|
||||
"front_door_code": "200",
|
||||
"front_door_bytes": 4981,
|
||||
"docker_health": "healthy\nhealthy",
|
||||
"version_badge": {
|
||||
"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"
|
||||
}
|
||||
]
|
||||
},
|
||||
"health_word": {
|
||||
"hu": "Fut",
|
||||
"hu_context": "← Alkalmazások Tandoor Recipes Fut Naprakész Megnyitás ↗ Napló Exportálás Beállítások Receptkezelő és étkezés tervező a családnak ~512M RAM home Pi kompatibilis Áthelyezés másik tárhelyre Ennek az alkalmazásnak az adatai",
|
||||
"en": "Running",
|
||||
"en_context": "← Apps Tandoor Recipes Running Up to date Open ↗ Log Export Settings A recipe manager and meal planner for the household ~512M RAM home Runs on Pi Move to another storage You can move this app’s data to another connected"
|
||||
}
|
||||
},
|
||||
{
|
||||
"when": "2026-09-22T08:51:08Z",
|
||||
"tag": "after",
|
||||
"app": "zipline",
|
||||
"controller_state": "running",
|
||||
"deployed": true,
|
||||
"pinned_images": {
|
||||
"zipline": "ghcr.io/diced/zipline:4.6.1",
|
||||
"zipline-postgres": "postgres:16-alpine"
|
||||
},
|
||||
"installed_images": {
|
||||
"zipline": {
|
||||
"ref": "ghcr.io/diced/zipline:4.6.1",
|
||||
"digest": "sha256:b8babbbcf4fef89c0c620e0539a47d908c750c251614309a7662ea4d8a7f501f",
|
||||
"at": "2026-09-22T08:39:28Z"
|
||||
},
|
||||
"zipline-postgres": {
|
||||
"ref": "postgres:16-alpine",
|
||||
"digest": "sha256:721873c34ceb9f8d8fc265984940dc982404c105f19ad51be9fdc5970a6080ea",
|
||||
"at": "2026-09-22T08:39:28Z"
|
||||
}
|
||||
},
|
||||
"front_door_rc": 0,
|
||||
"front_door_code": "301",
|
||||
"front_door_bytes": 0,
|
||||
"docker_health": "healthy\nhealthy",
|
||||
"version_badge": {
|
||||
"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"
|
||||
}
|
||||
]
|
||||
},
|
||||
"health_word": {
|
||||
"hu": "Fut",
|
||||
"hu_context": "← Alkalmazások Zipline Fut Naprakész Megnyitás ↗ Napló Exportálás Beállítások Screenshot és fájlmegosztó szerver ShareX/Flameshot integrációval ~100M RAM files Csak x86 Áthelyezés másik tárhelyre Ennek az alkalmazásnak a",
|
||||
"en": "Running",
|
||||
"en_context": "← Apps Zipline Running Up to date Open ↗ Log Export Settings A screenshot and file sharing server that works with ShareX/Flameshot ~100M RAM files x86 only Move to another storage You can move this app’s data to another "
|
||||
}
|
||||
},
|
||||
{
|
||||
"when": "2026-09-22T08:51:10Z",
|
||||
"tag": "after",
|
||||
"app": "wger",
|
||||
"controller_state": "running",
|
||||
"deployed": true,
|
||||
"pinned_images": {
|
||||
"wger": "wger/server:2.6"
|
||||
},
|
||||
"installed_images": {
|
||||
"wger": {
|
||||
"ref": "wger/server:2.6",
|
||||
"digest": "sha256:997ead43aabdcd67d054f933e07d2b23875f01bf43271a267cb7796925ca27c4",
|
||||
"at": "2026-09-22T08:44:57Z"
|
||||
}
|
||||
},
|
||||
"front_door_rc": 0,
|
||||
"front_door_code": "302",
|
||||
"front_door_bytes": 0,
|
||||
"docker_health": "healthy",
|
||||
"version_badge": {
|
||||
"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"
|
||||
}
|
||||
]
|
||||
},
|
||||
"health_word": {
|
||||
"hu": "Fut",
|
||||
"hu_context": "← Alkalmazások wger Fut Naprakész Megnyitás ↗ Napló Exportálás Beállítások Edzésnapló - edzéstervek, haladás követés és testsúly napló ~100M RAM home Pi kompatibilis Áthelyezés másik tárhelyre Ennek az alkalmazásnak az a",
|
||||
"en": "Running",
|
||||
"en_context": "← Apps wger Running Up to date Open ↗ Log Export Settings A workout log - training plans, progress and a weight diary ~100M RAM home Runs on Pi Move to another storage You can move this app’s data to another connected st"
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,137 @@
|
||||
[
|
||||
{
|
||||
"when": "2026-09-22T08:48:49Z",
|
||||
"tag": "before-observe",
|
||||
"app": "tandoor",
|
||||
"controller_state": "unhealthy",
|
||||
"deployed": true,
|
||||
"pinned_images": {
|
||||
"tandoor": "ghcr.io/tandoorrecipes/recipes:2.6.13",
|
||||
"tandoor-postgres": "postgres:16-alpine"
|
||||
},
|
||||
"installed_images": {
|
||||
"tandoor": {
|
||||
"ref": "ghcr.io/tandoorrecipes/recipes:2.6.13",
|
||||
"digest": "sha256:f6c58afdea7a721d079ebd6ee5483f2c9da77dd1e709e16d60a82c218e80a451",
|
||||
"at": "2026-09-22T08:38:25Z"
|
||||
},
|
||||
"tandoor-postgres": {
|
||||
"ref": "postgres:16-alpine",
|
||||
"digest": "sha256:721873c34ceb9f8d8fc265984940dc982404c105f19ad51be9fdc5970a6080ea",
|
||||
"at": "2026-09-22T08:38:25Z"
|
||||
}
|
||||
},
|
||||
"front_door_rc": 0,
|
||||
"front_door_code": "200",
|
||||
"front_door_bytes": 4981,
|
||||
"docker_health": "healthy\nhealthy",
|
||||
"version_badge": {
|
||||
"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"
|
||||
}
|
||||
]
|
||||
},
|
||||
"health_word": {
|
||||
"hu": "Nem egészséges",
|
||||
"hu_context": "← Alkalmazások Tandoor Recipes Nem egészséges Naprakész Megnyitás ↗ Napló Exportálás Beállítások Receptkezelő és étkezés tervező a családnak ~512M RAM home Pi kompatibilis Áthelyezés másik tárhelyre Ennek az alkalmazásna",
|
||||
"en": "Not healthy",
|
||||
"en_context": "← Apps Tandoor Recipes Not healthy Up to date Open ↗ Log Export Settings A recipe manager and meal planner for the household ~512M RAM home Runs on Pi Move to another storage You can move this app’s data to another conne"
|
||||
}
|
||||
},
|
||||
{
|
||||
"when": "2026-09-22T08:48:51Z",
|
||||
"tag": "before-observe",
|
||||
"app": "zipline",
|
||||
"controller_state": "unhealthy",
|
||||
"deployed": true,
|
||||
"pinned_images": {
|
||||
"zipline": "ghcr.io/diced/zipline:4.6.1",
|
||||
"zipline-postgres": "postgres:16-alpine"
|
||||
},
|
||||
"installed_images": {
|
||||
"zipline": {
|
||||
"ref": "ghcr.io/diced/zipline:4.6.1",
|
||||
"digest": "sha256:b8babbbcf4fef89c0c620e0539a47d908c750c251614309a7662ea4d8a7f501f",
|
||||
"at": "2026-09-22T08:39:28Z"
|
||||
},
|
||||
"zipline-postgres": {
|
||||
"ref": "postgres:16-alpine",
|
||||
"digest": "sha256:721873c34ceb9f8d8fc265984940dc982404c105f19ad51be9fdc5970a6080ea",
|
||||
"at": "2026-09-22T08:39:28Z"
|
||||
}
|
||||
},
|
||||
"front_door_rc": 0,
|
||||
"front_door_code": "301",
|
||||
"front_door_bytes": 0,
|
||||
"docker_health": "healthy\nhealthy",
|
||||
"version_badge": {
|
||||
"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"
|
||||
}
|
||||
]
|
||||
},
|
||||
"health_word": {
|
||||
"hu": "Nem egészséges",
|
||||
"hu_context": "← Alkalmazások Zipline Nem egészséges Naprakész Megnyitás ↗ Napló Exportálás Beállítások Screenshot és fájlmegosztó szerver ShareX/Flameshot integrációval ~100M RAM files Csak x86 Áthelyezés másik tárhelyre Ennek az alka",
|
||||
"en": "Not healthy",
|
||||
"en_context": "← Apps Zipline Not healthy Up to date Open ↗ Log Export Settings A screenshot and file sharing server that works with ShareX/Flameshot ~100M RAM files x86 only Move to another storage You can move this app’s data to anot"
|
||||
}
|
||||
},
|
||||
{
|
||||
"when": "2026-09-22T08:48:54Z",
|
||||
"tag": "before-observe",
|
||||
"app": "wger",
|
||||
"controller_state": "unhealthy",
|
||||
"deployed": true,
|
||||
"pinned_images": {
|
||||
"wger": "wger/server:2.6"
|
||||
},
|
||||
"installed_images": {
|
||||
"wger": {
|
||||
"ref": "wger/server:2.6",
|
||||
"digest": "sha256:997ead43aabdcd67d054f933e07d2b23875f01bf43271a267cb7796925ca27c4",
|
||||
"at": "2026-09-22T08:44:57Z"
|
||||
}
|
||||
},
|
||||
"front_door_rc": 0,
|
||||
"front_door_code": "302",
|
||||
"front_door_bytes": 0,
|
||||
"docker_health": "healthy",
|
||||
"version_badge": {
|
||||
"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"
|
||||
}
|
||||
]
|
||||
},
|
||||
"health_word": {
|
||||
"hu": "Nem egészséges",
|
||||
"hu_context": "← Alkalmazások wger Nem egészséges Naprakész Megnyitás ↗ Napló Exportálás Beállítások Edzésnapló - edzéstervek, haladás követés és testsúly napló ~100M RAM home Pi kompatibilis Áthelyezés másik tárhelyre Ennek az alkalma",
|
||||
"en": "Not healthy",
|
||||
"en_context": "← Apps wger Not healthy Up to date Open ↗ Log Export Settings A workout log - training plans, progress and a weight diary ~100M RAM home Runs on Pi Move to another storage You can move this app’s data to another connecte"
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,49 @@
|
||||
[
|
||||
{
|
||||
"when": "2026-09-22T08:46:38Z",
|
||||
"tag": "before",
|
||||
"app": "tandoor",
|
||||
"controller_state": "unhealthy",
|
||||
"deployed": true,
|
||||
"pinned_images": {
|
||||
"tandoor": "ghcr.io/tandoorrecipes/recipes:2.6.13",
|
||||
"tandoor-postgres": "postgres:16-alpine"
|
||||
},
|
||||
"installed_images": {
|
||||
"tandoor": {
|
||||
"ref": "ghcr.io/tandoorrecipes/recipes:2.6.13",
|
||||
"digest": "sha256:f6c58afdea7a721d079ebd6ee5483f2c9da77dd1e709e16d60a82c218e80a451",
|
||||
"at": "2026-09-22T08:38:25Z"
|
||||
},
|
||||
"tandoor-postgres": {
|
||||
"ref": "postgres:16-alpine",
|
||||
"digest": "sha256:721873c34ceb9f8d8fc265984940dc982404c105f19ad51be9fdc5970a6080ea",
|
||||
"at": "2026-09-22T08:38:25Z"
|
||||
}
|
||||
},
|
||||
"front_door_rc": 0,
|
||||
"front_door_code": "200",
|
||||
"front_door_bytes": 4981,
|
||||
"docker_health": "healthy\nhealthy",
|
||||
"version_badge": {
|
||||
"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"
|
||||
}
|
||||
]
|
||||
},
|
||||
"health_word": {
|
||||
"hu": "Nem egészséges",
|
||||
"hu_context": "← Alkalmazások Tandoor Recipes Nem egészséges Naprakész Megnyitás ↗ Napló Exportálás Beállítások Receptkezelő és étkezés tervező a családnak ~512M RAM home Pi kompatibilis Áthelyezés másik tárhelyre Ennek az alkalmazásna",
|
||||
"en": null,
|
||||
"en_context": "← Apps Tandoor Recipes Not healthy Up to date Open ↗ Log Export Settings A recipe manager and meal planner for the household ~512M RAM home Runs on Pi Move to another storage You can move this app’s data to another conne"
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,509 @@
|
||||
tandoor-postgres |
|
||||
tandoor-postgres | PostgreSQL Database directory appears to contain a database; Skipping initialization
|
||||
tandoor-postgres |
|
||||
tandoor-postgres | 2026-09-22 10:53:18.859 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
|
||||
tandoor-postgres | 2026-09-22 10:53:18.859 CEST [1] LOG: listening on IPv4 address "0.0.0.0", port 5432
|
||||
tandoor-postgres | 2026-09-22 10:53:18.859 CEST [1] LOG: listening on IPv6 address "::", port 5432
|
||||
tandoor-postgres | 2026-09-22 10:53:18.867 CEST [1] LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
|
||||
tandoor-postgres | 2026-09-22 10:53:18.880 CEST [29] LOG: database system was shut down at 2026-09-22 10:53:09 CEST
|
||||
tandoor-postgres | 2026-09-22 10:53:18.895 CEST [1] LOG: database system is ready to accept connections
|
||||
tandoor | Deleting 'vue3/assets/pt_BR-tNFhL9ci.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/SupermarketEditor-L_B5nyx2.3796d8a521cf.js'
|
||||
tandoor | Deleting 'vue3/assets/MealTypeEditor-DAAKjxZB.js'
|
||||
tandoor | Deleting 'vue3/assets/sl-Nkic6vBb.c6ce1eb24108.js'
|
||||
tandoor | Deleting 'vue3/assets/nl-DIqabTrY.fcf6d7b2df13.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/UnitEditor-54HrDOhT.9040eae92234.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/FoodEditor-BR-tK8Pr.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/forwardRefs-DVyU53sF.js'
|
||||
tandoor | Deleting 'vue3/assets/position-PPD1ymuo.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/ca-C5QQCa9o.ff6e54a70768.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/KeywordsBar-BwJ0lEDV.js'
|
||||
tandoor | Deleting 'vue3/assets/number_utils-DFmVVcK0.js'
|
||||
tandoor | Deleting 'vue3/assets/ja-Cqm3qbrP.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/bg-_Ardqm8i.c46924a2b9d5.js'
|
||||
tandoor | Deleting 'vue3/assets/VOverlay-CKBxglwy.b98729efffd0.css.gz'
|
||||
tandoor | Deleting 'vue3/assets/fr-D1J9AIHe.js'
|
||||
tandoor | Deleting 'vue3/assets/goto-DubWlX_o.0c25d7a8f5fa.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/VOverlay-CKBxglwy.css.gz'
|
||||
tandoor | Deleting 'vue3/assets/lv-BUrQRxBI.8efc7d113546.js'
|
||||
tandoor | Deleting 'vue3/assets/AccessTokenEditor-BqYrLuQE.4d7347e87897.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/VSwitch-Djsboh2v.92774fc66b84.css.gz'
|
||||
tandoor | Deleting 'vue3/assets/PropertyEditor-DK6Qeffb.864b139cbb79.js'
|
||||
tandoor | Deleting 'vue3/assets/ModelDeletePage-C4id8-tu.1ed7ee64e600.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/da-DHqdZ4yZ.197be8016aca.js'
|
||||
tandoor | Deleting 'vue3/assets/ro-CG_JGo0i.js'
|
||||
tandoor | Deleting 'vue3/assets/ExportDataSettings-BlFk8Tn-.6ccf02326ec4.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/PropertiesEditor-DCxEsAZO.16f243b74d54.js'
|
||||
tandoor | Deleting 'vue3/assets/RecipeImportPage-DBKJ6DXr.a23aec8a9383.js'
|
||||
tandoor | Deleting 'vue3/assets/el-DNs6HoDL.08d7c47f5d2b.js'
|
||||
tandoor | Deleting 'vue3/assets/RecipeViewPage-BY3ErEFj.457b3d77074e.css'
|
||||
tandoor | Deleting 'vue3/assets/DeleteConfirmDialog-C1xQIJsS.b663eac25ee4.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/VTimePicker-DNtQ2GaY.658bf461867a.css'
|
||||
tandoor | Deleting 'vue3/assets/logo_color-CXE3OqOR.d7c2e31a63b7.svg'
|
||||
tandoor | Deleting 'vue3/assets/fa-v4compatibility-CCth-dXg.4ed293ceaca9.ttf.gz'
|
||||
tandoor | Deleting 'vue3/assets/IngredientEditorPage-DF3k1tNH.aa9eb5c590ab.js'
|
||||
tandoor | Deleting 'vue3/assets/InventoryLocationEditor-DIxi9S-h.5de878ee0a17.js'
|
||||
tandoor | Deleting 'vue3/assets/ShoppingListView-Dgh1luaN.css'
|
||||
tandoor | Deleting 'vue3/assets/StartPage-0ugVot93.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/DeleteConfirmDialog-C1xQIJsS.js'
|
||||
tandoor | Deleting 'vue3/assets/MealPlanEditor-B5jLcokm.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/number_utils-Brwft-8t.d570ceeec9ef.css'
|
||||
tandoor | Deleting 'vue3/assets/MealPlanEditor-B5jLcokm.7c8b48842426.js'
|
||||
tandoor | Deleting 'vue3/assets/VDivider-BeM1gRhl.css'
|
||||
tandoor | Deleting 'vue3/assets/AccountSettings-BHfX12gt.js'
|
||||
tandoor | Deleting 'vue3/assets/CustomFilterEditor-Dc0piaF0.js'
|
||||
tandoor | Deleting 'vue3/assets/lt-SI6E7sY1.2560d8a9d387.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/de-5mnKTxw2.js'
|
||||
tandoor | Deleting 'vue3/assets/SearchSettings-CBkFhMns.js'
|
||||
tandoor | Deleting 'vue3/assets/logo_color-CXE3OqOR.svg'
|
||||
tandoor | Deleting 'vue3/assets/fontello-B1X0PDnA.068ca2b316db.ttf'
|
||||
tandoor | Deleting 'vue3/assets/PropertyEditor-DK6Qeffb.js'
|
||||
tandoor | Deleting 'vue3/assets/RecipeEditor-CcFlDNPw.css'
|
||||
tandoor | Deleting 'vue3/assets/RecipeCard-C2Hjv7vL.6b450d3cfcd0.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/CustomFilterEditor-Dc0piaF0.fe7085369993.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/VStepper-lk6OG_fY.23af7e185e38.css'
|
||||
tandoor | Deleting 'vue3/assets/VList-edQgt9_l.2642c051884b.css.gz'
|
||||
tandoor | Deleting 'vue3/assets/InventoryBookingPage-orELmDxm.js'
|
||||
tandoor | Deleting 'vue3/assets/PropertyEditorPage-Ti9vpeer.e4b532c48301.js'
|
||||
tandoor | Deleting 'vue3/assets/pt-CXzOqbUC.js'
|
||||
tandoor | Deleting 'vue3/assets/BooksPage-Dh8_wlv_.cb4aba43024a.js'
|
||||
tandoor | Deleting 'vue3/assets/ModelListPage-xoBv_A6i.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/number_utils-DFmVVcK0.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/FdcSearchDialog-BvpKKey4.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/position-PPD1ymuo.7195d47ccd52.js'
|
||||
tandoor | Deleting 'vue3/assets/model_utils-a_hMB_Qu.js'
|
||||
tandoor | Deleting 'vue3/assets/useFileApi-BD_kCiAS.js'
|
||||
tandoor | Deleting 'vue3/assets/he-DxNGVUQd.79ff03f4063a.js'
|
||||
tandoor | Deleting 'vue3/assets/zh_Hant-CERwsE1Q.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/SearchPage-BQ1P-4y8.ba1f4c8767b9.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/InventoryLocationEditor-DIxi9S-h.js'
|
||||
tandoor | Deleting 'vue3/assets/fi-BLW_HATq.078772422941.js'
|
||||
tandoor | Deleting 'vue3/assets/nn-CkCilbi1.ccb3acb89917.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/UserFileEditor-DKOcBuK-.js'
|
||||
tandoor | Deleting 'vue3/assets/useFileApi-BD_kCiAS.37a20e72aad4.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/hu-DlZ4REsp.js'
|
||||
tandoor | Deleting 'vue3/assets/pt-CXzOqbUC.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/VTimePicker-BwPSjcxJ.a223b07c705e.js'
|
||||
tandoor | Deleting 'vue3/assets/pt_BR-tNFhL9ci.js'
|
||||
tandoor | Deleting 'vue3/assets/CustomFilterEditor-Dc0piaF0.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/ko-ADlXHFgo.js'
|
||||
tandoor | Deleting 'vue3/assets/VDataTableServer-BYvhcs5d.js'
|
||||
tandoor | Deleting 'vue3/assets/VBtn-rFOjfrXe.df1b89399b11.css.gz'
|
||||
tandoor | Deleting 'vue3/assets/SupermarketCategoryEditor-rlIgT3uE.js'
|
||||
tandoor | Deleting 'vue3/assets/CosmeticSettings-DTudQs61.0308c579b183.css'
|
||||
tandoor | Deleting 'vue3/assets/RecipeEditor-CcFlDNPw.c63cac250b70.css.gz'
|
||||
tandoor | Deleting 'vue3/assets/fontello-BJkOxCgW.8d4a4e6f7431.woff2'
|
||||
tandoor | Deleting 'vue3/assets/MealPlanEditor-B5jLcokm.js'
|
||||
tandoor | Deleting 'vue3/assets/VAvatar-DYNiWd3v.js'
|
||||
tandoor | Deleting 'vue3/assets/brand_logo-DHt4CyHb.svg'
|
||||
tandoor | Deleting 'vue3/assets/ripple-CeGB3d9x.3ba9fc624e34.css.gz'
|
||||
tandoor | Deleting 'vue3/assets/OpenDataImportSettings-Ds1SQcSg.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/dimensions-B5x3TxJs.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/PropertiesEditor-DCxEsAZO.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/PropertiesEditor-DCxEsAZO.16f243b74d54.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/VFileUpload-ByFVW7Fp.931d5a48009e.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/DatabaseModelCol-rKX1F7Em.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/ConnectorConfigEditor-D06JOZDX.5e0dd3a66e81.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/IngredientEditorPage-DF3k1tNH.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/lt-SI6E7sY1.js'
|
||||
tandoor | Deleting 'vue3/assets/DatabasePage-CY4BXH8T.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/bg-_Ardqm8i.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/ShoppingListView-C0_akhap.js'
|
||||
tandoor | Deleting 'vue3/assets/HierarchyEditor-wADOsT_-.css'
|
||||
tandoor | Deleting 'vue3/assets/fontello-B1X0PDnA.ttf'
|
||||
tandoor | Deleting 'vue3/assets/VOverlay-BSdT-t2A.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/ShoppingListView-Dgh1luaN.css.gz'
|
||||
tandoor | Deleting 'vue3/assets/it-DJ2I6vOs.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/bg-_Ardqm8i.js'
|
||||
tandoor | Deleting 'vue3/assets/VSwitch-Cs5DQi32.4a7617f1519d.js'
|
||||
tandoor | Deleting 'vue3/assets/logo_color-CXE3OqOR.svg.gz'
|
||||
tandoor | Deleting 'vue3/assets/WelcomePage-zPtXSDjc.4dfacc5c8da0.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/UnitEditor-54HrDOhT.9040eae92234.js'
|
||||
tandoor | Deleting 'vue3/assets/hr-CMRkObu_.js'
|
||||
tandoor | Deleting 'vue3/assets/VTextField-j0TpvUy_.42df5f015009.css.gz'
|
||||
tandoor | Deleting 'vue3/assets/OpenDataImportSettings-Ds1SQcSg.f895a746d306.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/ja-Cqm3qbrP.d617fa524f97.js'
|
||||
tandoor | Deleting 'vue3/assets/VAvatar-DYNiWd3v.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/InventoryBookingPage-orELmDxm.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/ApiSettings-CzWgpe8R.82be1325ed18.js'
|
||||
tandoor | Deleting 'vue3/assets/fontello-CnWxryRb.eot'
|
||||
tandoor | Deleting 'vue3/assets/VList-DL25Fkt0.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/InventoryEntryLogDialog-Dv6Omj68.d4f65e984493.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/VSwitch-Cs5DQi32.4a7617f1519d.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/VColorPicker-DoVATq5z.26d1fdd28765.css.gz'
|
||||
tandoor | Deleting 'vue3/assets/HouseholdEditor-D5JQGcsU.js'
|
||||
tandoor | Deleting 'vue3/assets/VList-edQgt9_l.css.gz'
|
||||
tandoor | Deleting 'vue3/assets/VTabs-DzUjbg1Y.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/ConnectorConfigEditor-D06JOZDX.js'
|
||||
tandoor | Deleting 'vue3/assets/BatchDeleteDialog-C9gKVWYX.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/IngredientEditorPage-DF3k1tNH.aa9eb5c590ab.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/nn-CkCilbi1.ccb3acb89917.js'
|
||||
tandoor | Deleting 'vue3/assets/InventoryEntryLogDialog-Dv6Omj68.d4f65e984493.js'
|
||||
tandoor | Deleting 'vue3/assets/VDivider-BeM1gRhl.727c640d6c8d.css.gz'
|
||||
tandoor | Deleting 'vue3/assets/ApiSettings-CzWgpe8R.js'
|
||||
tandoor | Deleting 'vue3/assets/SpaceEditor-BG9pNfzF.9465c6dc1d2f.css'
|
||||
tandoor | Deleting 'vue3/assets/ripple-CeGB3d9x.css.gz'
|
||||
tandoor | Deleting 'vue3/assets/AiProviderEditor-C4TWtCwO.e6d60050b025.css.gz'
|
||||
tandoor | Deleting 'vue3/assets/SupermarketEditor-L_B5nyx2.3796d8a521cf.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/VDivider-BeM1gRhl.727c640d6c8d.css'
|
||||
tandoor | Deleting 'vue3/assets/fa-v4compatibility-CCth-dXg.4ed293ceaca9.ttf'
|
||||
tandoor | Deleting 'vue3/assets/VListItemAction-CXKY8J-P.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/VColorPicker-DoVATq5z.css.gz'
|
||||
tandoor | Deleting 'vue3/assets/ModelListPage-xoBv_A6i.4681a991ae27.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/uk-BClnjIfW.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/ShoppingListPage-Cg_SrILL.f2cae0d44a21.js'
|
||||
tandoor | Deleting 'vue3/assets/RecipeViewPage-BZECYYUo.94016f72f4cb.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/number_utils-Brwft-8t.css.gz'
|
||||
tandoor | Deleting 'vue3/assets/de-5mnKTxw2.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/VFileUpload-7CWUohzn.d182bb8e4f03.css.gz'
|
||||
tandoor | Deleting 'vue3/assets/VListItemAction-CXKY8J-P.ffd6a13b9ab5.js'
|
||||
tandoor | Deleting 'vue3/assets/VAvatar-_OUjgGcO.css.gz'
|
||||
tandoor | Deleting 'vue3/assets/position-PPD1ymuo.7195d47ccd52.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/brand_logo-DHt4CyHb.fa64319ab35b.svg.gz'
|
||||
tandoor | Deleting 'vue3/assets/VChip-D7GkfSeA.js'
|
||||
tandoor | Deleting 'vue3/assets/ConnectorConfigEditor-D06JOZDX.5e0dd3a66e81.js'
|
||||
tandoor | Deleting 'vue3/assets/fileFilter-JaX38xV6.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/MealTypeEditor-DAAKjxZB.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/pl-B7dc5eNY.js'
|
||||
tandoor | Deleting 'vue3/assets/MealPlanSettings-BU5yRyFO.js'
|
||||
tandoor | Deleting 'vue3/assets/VAutocomplete-BnHJd-1b.css.gz'
|
||||
tandoor | Deleting 'vue3/assets/framework-CKkm3ZT1.0da2482ae88a.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/AccessTokenEditor-BqYrLuQE.js'
|
||||
tandoor | Deleting 'vue3/assets/VColorPicker-Bc1o5piM.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/UserSpaceEditor-BiMFbwI_.7d9049ae96b5.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/CookLogEditor-wf-1cNFJ.ef3a04991a05.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/ShoppingSettings-DBfLsRlj.js'
|
||||
tandoor | Deleting 'vue3/assets/AddToShoppingDialog-CS_S-d2g.eb5504799c65.js'
|
||||
tandoor | Deleting 'vue3/assets/fa-solid-900-CTAAxXor.4a6591ab5460.woff2'
|
||||
tandoor | Deleting 'vue3/assets/MealPlanSettings-BU5yRyFO.2f9dbd605868.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/AiProviderEditor-BYnKvCw_.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/uk-BClnjIfW.b429b8ed5096.js'
|
||||
tandoor | Deleting 'vue3/assets/BookViewPage-CHarlNiQ.bdf998b08053.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/HouseholdPage-BsKZpym2.js'
|
||||
tandoor | Deleting 'vue3/assets/fi-BLW_HATq.078772422941.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/fontello-CnWxryRb.e73a0647198c.eot.gz'
|
||||
tandoor | Deleting 'vue3/assets/InviteLinkEditor-BZ7NMcrL.js'
|
||||
tandoor | Deleting 'vue3/assets/VChip-D7GkfSeA.4de7c0a8c2e3.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/VRating-BAibLkoF.css'
|
||||
tandoor | Deleting 'vue3/assets/RecipeBookEditor-Bha-wuB-.js'
|
||||
tandoor | Deleting 'vue3/assets/VTextField-WpOvMnND.js'
|
||||
tandoor | Deleting 'vue3/assets/el-DNs6HoDL.08d7c47f5d2b.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/AutomationEditor-C6fYAtLL.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/fontello-CnWxryRb.e73a0647198c.eot'
|
||||
tandoor | Deleting 'vue3/assets/VDivider-rMXvH15P.085aaed48fa0.js'
|
||||
tandoor | Deleting 'vue3/assets/ShoppingListView-Dgh1luaN.73de85b4e4df.css.gz'
|
||||
tandoor | Deleting 'vue3/assets/UserFileEditor-DKOcBuK-.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/VAutocomplete-CFEp5VcY.js'
|
||||
tandoor | Deleting 'vue3/assets/SpaceEditor-BG9pNfzF.css'
|
||||
tandoor | Deleting 'vue3/assets/PropertyEditorPage-Ti9vpeer.js'
|
||||
tandoor | Deleting 'vue3/assets/ShoppingListPage-Cg_SrILL.js'
|
||||
tandoor | Deleting 'vue3/assets/integration_utils-D8RSOVmp.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/nb_NO-CdS1Hktt.294979d98dcb.js'
|
||||
tandoor | Deleting 'vue3/assets/SearchSettings-CBkFhMns.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/VChip-Hpg9IuyM.8dc9d3e18964.css.gz'
|
||||
tandoor | Deleting 'vue3/assets/VAutocomplete-BnHJd-1b.css'
|
||||
tandoor | Deleting 'vue3/assets/ja-Cqm3qbrP.js'
|
||||
tandoor | Deleting 'vue3/assets/VOverlay-BSdT-t2A.js'
|
||||
tandoor | Deleting 'vue3/assets/VList-DL25Fkt0.5373fcf8fbc3.js'
|
||||
tandoor | Deleting 'vue3/assets/SearchPage-BQ1P-4y8.js'
|
||||
tandoor | Deleting 'vue3/assets/StartPage-0ugVot93.1c72303e8853.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/fdc-Byjxh21q.6a8962cb2f19.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/UserSpaceEditor-BiMFbwI_.7d9049ae96b5.js'
|
||||
tandoor | Deleting 'vue3/assets/PropertyEditorPage-Ti9vpeer.e4b532c48301.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/SpaceEditor-CIrx7Wew.44bd56e30e62.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/CosmeticSettings-DTudQs61.css.gz'
|
||||
tandoor | Deleting 'vue3/assets/transitions-BVkpOt9D.0916b5adcb73.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/ModelEditPage-B_U4Berv.js'
|
||||
tandoor | Deleting 'vue3/assets/dimensions-B5x3TxJs.5c0bb4b51390.js'
|
||||
tandoor | Deleting 'vue3/assets/AccessTokenEditor-BqYrLuQE.4d7347e87897.js'
|
||||
tandoor | Deleting 'vue3/assets/VColorPicker-DoVATq5z.26d1fdd28765.css'
|
||||
tandoor | Deleting 'vue3/assets/AddToShoppingDialog-BXt5jKLm.css'
|
||||
tandoor | Deleting 'vue3/assets/ru-BXmxlY4u.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/hu-DlZ4REsp.c1bc941c31dc.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/VList-edQgt9_l.css'
|
||||
tandoor | Deleting 'vue3/assets/UnitConversionEditor-BUHvM5Eh.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/VTextarea-zkkSnzux.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/ModelEditPage-B_U4Berv.7dc258e43ccf.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/RecipeCard-C2Hjv7vL.6b450d3cfcd0.js'
|
||||
tandoor | Deleting 'vue3/assets/MealPlanEditor-DqGGZRzo.css'
|
||||
tandoor | Deleting 'vue3/assets/VSwitch-Cs5DQi32.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/TestPage-CPX2qaEd.0b75aa57bbeb.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/dimensions-B5x3TxJs.5c0bb4b51390.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/main-nTFEtOSD.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/UserFileEditor-DKOcBuK-.cc1baa1c02f3.js'
|
||||
tandoor | Deleting 'vue3/assets/StorageEditor-Up4uWQb6.js'
|
||||
tandoor | Deleting 'vue3/assets/VBtn-DTdW4rEh.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/he-DxNGVUQd.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/VChip-Hpg9IuyM.8dc9d3e18964.css'
|
||||
tandoor | Deleting 'vue3/assets/VTextarea-dHE66AZf.css'
|
||||
tandoor | Deleting 'vue3/assets/intersect-siLrmRQw.cc9e340f1351.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/ShoppingListPage-Cg_SrILL.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/framework-CKkm3ZT1.js'
|
||||
tandoor | Deleting 'vue3/assets/ca-C5QQCa9o.ff6e54a70768.js'
|
||||
tandoor | Deleting 'vue3/assets/fa-solid-900-D0aA9rwL.ttf'
|
||||
tandoor | Deleting 'vue3/assets/VListItemAction-CXKY8J-P.ffd6a13b9ab5.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/main-nTFEtOSD.4273b900f1bf.js'
|
||||
tandoor | Deleting 'vue3/assets/transitions-BVkpOt9D.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/ShoppingListEditor-vKmfFTZN.4f5dd4c981a5.js'
|
||||
tandoor | Deleting 'vue3/assets/ripple-CeGB3d9x.css'
|
||||
tandoor | Deleting 'vue3/assets/ClosableHelpAlert-BoN8dDrm.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/position-D7bmUCsu.f212789ebec5.css'
|
||||
tandoor | Deleting 'vue3/assets/ShoppingListView-C0_akhap.1b6d4259ca8e.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/hy-HqufUZnw.js'
|
||||
tandoor | Deleting 'vue3/assets/InventoryBookingPage-orELmDxm.45c2c2f7531a.js'
|
||||
tandoor | Deleting 'vue3/assets/el-DNs6HoDL.js'
|
||||
tandoor | Deleting 'vue3/assets/VTabs-DzUjbg1Y.fa06924ae72f.js'
|
||||
tandoor | Deleting 'vue3/assets/form-CDdumt48.5fcbf914ae94.js'
|
||||
tandoor | Deleting 'vue3/assets/HouseholdPage-BsKZpym2.a5566a4564d6.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/forwardRefs-DVyU53sF.64171d66d1df.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/integration_utils-D8RSOVmp.8006123d3084.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/SpaceSettings-BPOt7vl3.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/ModelEditorBase-CZWlxxIQ.cf852babb62d.js'
|
||||
tandoor | Deleting 'vue3/assets/RecipeBookEditor-Bha-wuB-.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/ModelEditPage-B5oBrkJw.0c31f8b7052c.css.gz'
|
||||
tandoor | Deleting 'vue3/assets/VAutocomplete-CFEp5VcY.2a4e88a23ede.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/FdcSearchDialog-BvpKKey4.js'
|
||||
tandoor | Deleting 'vue3/assets/transitions-BVkpOt9D.js'
|
||||
tandoor | Deleting 'vue3/assets/ro-CG_JGo0i.c856bd470eef.js'
|
||||
tandoor | Deleting 'vue3/assets/RecipeViewPage-BZECYYUo.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/IngredientsTable-DZblS1P-.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/RecipeCard-C2Hjv7vL.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/CosmeticSettings-i2TDHCpS.js'
|
||||
tandoor | Deleting 'vue3/assets/VBtn-rFOjfrXe.css.gz'
|
||||
tandoor | Deleting 'vue3/assets/FoodEditor-BR-tK8Pr.24df4c5c0e7e.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/VDivider-rMXvH15P.js'
|
||||
tandoor | Deleting 'vue3/assets/cs-DUZpBKTY.js'
|
||||
tandoor | Deleting 'vue3/assets/TestPage-CPX2qaEd.0b75aa57bbeb.js'
|
||||
tandoor | Deleting 'vue3/assets/fdc-Byjxh21q.js'
|
||||
tandoor | Deleting 'vue3/assets/CookLogEditor-wf-1cNFJ.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/HouseholdEditor-D5JQGcsU.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/VDivider-rMXvH15P.085aaed48fa0.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/ripple-Byn3Fc0w.3ad96cecfca7.js'
|
||||
tandoor | Deleting 'vue3/assets/UserSpaceEditor-BiMFbwI_.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/fr-D1J9AIHe.a85f6556b6a2.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/fr-D1J9AIHe.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/VStepper-lk6OG_fY.css.gz'
|
||||
tandoor | Deleting 'vue3/assets/ko-ADlXHFgo.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/WelcomePage-zPtXSDjc.4dfacc5c8da0.js'
|
||||
tandoor | Deleting 'vue3/assets/VChip-D7GkfSeA.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/SpaceSetupPage-BSv2ZmPb.js'
|
||||
tandoor | Deleting 'vue3/assets/zh_Hant-CERwsE1Q.8534ecee0fb0.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/ShoppingListPage-Cg_SrILL.f2cae0d44a21.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/UserSpaceEditor-BiMFbwI_.js'
|
||||
tandoor | Deleting 'vue3/assets/VOverlay-BSdT-t2A.1f4f586d7141.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/RecipeImportPage-DBKJ6DXr.a23aec8a9383.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/VDataTableServer-BYvhcs5d.d5a7cfdcf126.js'
|
||||
tandoor | Deleting 'vue3/assets/ar-Ct4DpnJT.js'
|
||||
tandoor | Deleting 'vue3/assets/VRating-Qn4Hz2ci.119bbc89c24a.js'
|
||||
tandoor | Deleting 'vue3/assets/number_utils-DFmVVcK0.cfc3e206a4c1.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/HelpPage-C-xlKPtR.fa54da2fd1cf.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/HierarchyEditor-wADOsT_-.885aa06e77cd.css.gz'
|
||||
tandoor | Deleting 'vue3/assets/ripple-Byn3Fc0w.3ad96cecfca7.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/VChip-Hpg9IuyM.css.gz'
|
||||
tandoor | Deleting 'vue3/assets/RecipeViewPage-BZECYYUo.94016f72f4cb.js'
|
||||
tandoor | Deleting 'vue3/assets/PrivateRecipeBadge-BVOXRXwb.dcd01dd00de0.js'
|
||||
tandoor | Deleting 'vue3/assets/SearchSettings-CBkFhMns.b9bc4a1f032c.js'
|
||||
tandoor | Deleting 'vue3/assets/fontello-BEgLts9b.a782baa8633b.woff'
|
||||
tandoor | Deleting 'vue3/assets/nl-DIqabTrY.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/et-zY9CrDMt.1761c6eb5f48.js'
|
||||
tandoor | Deleting 'vue3/assets/DeleteConfirmDialog-C1xQIJsS.b663eac25ee4.js'
|
||||
tandoor | Deleting 'vue3/assets/RecipeEditor-Cu9LLPvL.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/RecipeBookEditor-Bha-wuB-.e3586751a38a.js'
|
||||
tandoor | Deleting 'vue3/assets/goto-DubWlX_o.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/ModelMergeDialog-BCXJZjTO.4753553f721f.js'
|
||||
tandoor | Deleting 'vue3/assets/AutomationEditor-C6fYAtLL.js'
|
||||
tandoor | Deleting 'vue3/assets/VTextField-j0TpvUy_.42df5f015009.css'
|
||||
tandoor | Deleting 'vue3/assets/SupermarketEditor-L_B5nyx2.js'
|
||||
tandoor | Deleting 'vue3/assets/el-DNs6HoDL.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/lv-BUrQRxBI.8efc7d113546.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/MealPlanSettings-BU5yRyFO.2f9dbd605868.js'
|
||||
tandoor | Deleting 'vue3/assets/NumberScalerDialog-DoOvxgjM.js'
|
||||
tandoor | Deleting 'vue3/assets/fa-solid-900-D0aA9rwL.ttf.gz'
|
||||
tandoor | Deleting 'vue3/assets/intersect-siLrmRQw.cc9e340f1351.js'
|
||||
tandoor | Deleting 'vue3/assets/VTabs-Bz9gKX-q.27a6a10279b7.css'
|
||||
tandoor | Deleting 'vue3/assets/fa-regular-400-DZaxPHgR.ttf.gz'
|
||||
tandoor | Deleting 'vue3/assets/fa-v4compatibility-CCth-dXg.ttf.gz'
|
||||
tandoor | Deleting 'vue3/assets/tr-OeJMQhAK.2c406e95c585.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/CosmeticSettings-DTudQs61.css'
|
||||
tandoor | Deleting 'vue3/assets/RecipeViewPage-BY3ErEFj.css.gz'
|
||||
tandoor | Deleting 'vue3/assets/VSwitch-Djsboh2v.css.gz'
|
||||
tandoor | Deleting 'vue3/assets/TestPage-CPX2qaEd.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/model_utils-a_hMB_Qu.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/ar-Ct4DpnJT.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/DeleteConfirmDialog-C1xQIJsS.js.gz'
|
||||
tandoor | Deleting 'vue3/assets/BooksPage-Dh8_wlv_.js.gz'
|
||||
tandoor | Deleting 'assets/recipe_no_image.c659e2604ad6.svg.gz'
|
||||
tandoor | Deleting 'assets/logo_black.dc487b18028c.svg.gz'
|
||||
tandoor | Deleting 'assets/logo_color_shopping.svg.gz'
|
||||
tandoor | Deleting 'assets/brand_logo.ad2e3aa263da.svg'
|
||||
tandoor | Deleting 'assets/logo_color_192.c9b9177ff941.png'
|
||||
tandoor | Deleting 'assets/logo_black.svg'
|
||||
tandoor | Deleting 'assets/header.svg.gz'
|
||||
tandoor | Deleting 'assets/brand_logo.svg.gz'
|
||||
tandoor | Deleting 'assets/logo_color_144.f09537dbf142.png'
|
||||
tandoor | Deleting 'assets/logo_color_128.png'
|
||||
tandoor | Deleting 'assets/brand_logo.ad2e3aa263da.svg.gz'
|
||||
tandoor | Deleting 'assets/logo_color_plan.4ccbb336af9d.svg.gz'
|
||||
tandoor | Deleting 'assets/spinner.168a09fd2600.svg.gz'
|
||||
tandoor | Deleting 'assets/logo_color_plan_144.22c6c7678fdb.png'
|
||||
tandoor | Deleting 'assets/spinner.svg.gz'
|
||||
tandoor | Deleting 'assets/logo_color_512.png'
|
||||
tandoor | Deleting 'assets/logo_black.svg.gz'
|
||||
tandoor | Deleting 'assets/logo_color_svg.d7c2e31a63b7.svg.gz'
|
||||
tandoor | Deleting 'assets/recipe_no_image.c659e2604ad6.svg'
|
||||
tandoor | Deleting 'assets/logo_color_plan_144.png'
|
||||
tandoor | Deleting 'assets/logo_color_32.b7d9707eac91.png'
|
||||
tandoor | Deleting 'assets/logo_color_512.0a28df8511e3.png'
|
||||
tandoor | Deleting 'assets/brand_logo_white.svg.gz'
|
||||
tandoor | Deleting 'assets/logo_black.dc487b18028c.svg'
|
||||
tandoor | Deleting 'assets/logo_color_plan.svg.gz'
|
||||
tandoor | Deleting 'assets/logo_color_shopping.fd1e81a4dcab.svg.gz'
|
||||
tandoor | Deleting 'assets/header.48e8ad9e7540.svg'
|
||||
tandoor | Deleting 'assets/logo_color_plan_512.png'
|
||||
tandoor | Deleting 'assets/logo_color_shopping_512.6b2e69402327.png'
|
||||
tandoor | Deleting 'assets/recipe_no_image.svg'
|
||||
tandoor | Deleting 'assets/logo_color_128.a90db52449d9.png'
|
||||
tandoor | Deleting 'assets/logo_color_shopping_512.png'
|
||||
tandoor | Deleting 'assets/brand_logo.svg'
|
||||
tandoor | Deleting 'assets/logo_color_plan.svg'
|
||||
tandoor | Deleting 'assets/logo_color_32.png'
|
||||
tandoor | Deleting 'assets/logo_color_144.png'
|
||||
tandoor | Deleting 'assets/logo_color_shopping.fd1e81a4dcab.svg'
|
||||
tandoor | Deleting 'assets/header.48e8ad9e7540.svg.gz'
|
||||
tandoor | Deleting 'assets/brand_logo_white.d43daa47dca3.svg.gz'
|
||||
tandoor | Deleting 'assets/logo_color_180.0fcae5e85a72.png'
|
||||
tandoor | Deleting 'assets/logo_color_180.png'
|
||||
tandoor | Deleting 'assets/logo_color_shopping_144.png'
|
||||
tandoor | Deleting 'assets/logo_color_svg.svg'
|
||||
tandoor | Deleting 'assets/brand_logo_white.d43daa47dca3.svg'
|
||||
tandoor | Deleting 'assets/logo_color_plan.4ccbb336af9d.svg'
|
||||
tandoor | Deleting 'assets/logo_color_plan_512.028b9bcca1eb.png'
|
||||
tandoor | Deleting 'assets/logo_color_shopping.svg'
|
||||
tandoor | Deleting 'assets/recipe_no_image.svg.gz'
|
||||
tandoor | Deleting 'assets/header.svg'
|
||||
tandoor | Deleting 'assets/logo_color_svg.svg.gz'
|
||||
tandoor | Deleting 'assets/spinner.168a09fd2600.svg'
|
||||
tandoor | Deleting 'assets/brand_logo.6ebe02bf6707.png'
|
||||
tandoor | Deleting 'assets/spinner.svg'
|
||||
tandoor | Deleting 'assets/logo_color_svg.d7c2e31a63b7.svg'
|
||||
tandoor | Deleting 'assets/logo_color_shopping_144.6c05e01d07b2.png'
|
||||
tandoor | Deleting 'assets/logo_color_192.png'
|
||||
tandoor | Deleting 'assets/brand_logo.png'
|
||||
tandoor | Deleting 'assets/brand_logo_white.svg'
|
||||
tandoor | Deleting 'mfa/js/webauthn-json.6a3183313556.js'
|
||||
tandoor | Deleting 'mfa/js/webauthn-json.6a3183313556.js.gz'
|
||||
tandoor | Deleting 'mfa/js/webauthn.88878ff60271.js'
|
||||
tandoor | Deleting 'mfa/js/webauthn.88878ff60271.js.gz'
|
||||
tandoor | Deleting 'mfa/js/webauthn.js.gz'
|
||||
tandoor | Deleting 'mfa/js/webauthn-json.js.gz'
|
||||
tandoor | Deleting 'mfa/js/webauthn-json.js'
|
||||
tandoor | Deleting 'mfa/js/webauthn.js'
|
||||
tandoor | Deleting 'themes/tandoor.min.css.gz'
|
||||
tandoor | Deleting 'themes/tandoor.min.css'
|
||||
tandoor | Deleting 'themes/tandoor.min.e62f1984b5e4.css'
|
||||
tandoor | Deleting 'themes/tandoor.min.e62f1984b5e4.css.gz'
|
||||
tandoor | Deleting 'themes/tandoor_dark.min.3bdb00cbb58c.css.gz'
|
||||
tandoor | Deleting 'themes/tandoor_dark.min.css'
|
||||
tandoor | Deleting 'themes/tandoor_dark.min.css.gz'
|
||||
tandoor | Deleting 'themes/tandoor_dark.min.3bdb00cbb58c.css'
|
||||
tandoor | Deleting 'custom/css/markdown_blockquote.22de6a06ad0b.css'
|
||||
tandoor | Deleting 'custom/css/markdown_blockquote.css'
|
||||
tandoor | Deleting 'custom/css/markdown_blockquote.css.gz'
|
||||
tandoor | Deleting 'custom/css/markdown_blockquote.22de6a06ad0b.css.gz'
|
||||
tandoor | Deleting 'webfonts/fa-solid-900.8e4a6dcc692b.eot.gz'
|
||||
tandoor | Deleting 'webfonts/fa-solid-900.c2801fb415f0.svg'
|
||||
tandoor | Deleting 'webfonts/fa-brands-400.c5e0f14f88a8.woff'
|
||||
tandoor | Deleting 'webfonts/fa-regular-400.c4f508e7c4f0.woff'
|
||||
tandoor | Deleting 'webfonts/poppins_latin_ext_500.d214b888d895.woff2'
|
||||
tandoor | Deleting 'webfonts/fa-brands-400.ttf'
|
||||
tandoor | Deleting 'webfonts/fa-solid-900.eot.gz'
|
||||
tandoor | Deleting 'webfonts/poppins_devanagari_500.fd9b8290076b.woff2'
|
||||
tandoor | Deleting 'webfonts/fa-brands-400.a9c4bb7348f4.svg'
|
||||
tandoor | Deleting 'webfonts/poppins_latin_400.9ed361bba848.woff2'
|
||||
tandoor | Deleting 'webfonts/fa-solid-900.8e4a6dcc692b.eot'
|
||||
tandoor | Deleting 'webfonts/fa-brands-400.cccc9d29470e.woff2'
|
||||
tandoor | Deleting 'webfonts/fa-solid-900.0bff33a5fd7e.ttf'
|
||||
tandoor | Deleting 'webfonts/fa-regular-400.woff'
|
||||
tandoor | Deleting 'webfonts/fa-regular-400.f5f2566b93e8.woff2'
|
||||
tandoor | Deleting 'webfonts/fa-regular-400.c1a866ec0e04.eot.gz'
|
||||
tandoor | Deleting 'webfonts/poppins_devanagari_700.b9f2c13fc361.woff2'
|
||||
tandoor | Deleting 'webfonts/fa-brands-400.eot'
|
||||
tandoor | Deleting 'webfonts/fa-brands-400.06147b6cd88c.ttf.gz'
|
||||
tandoor | Deleting 'webfonts/poppins_devanagari_400.woff2'
|
||||
tandoor | Deleting 'webfonts/fa-regular-400.svg'
|
||||
tandoor | Deleting 'webfonts/fa-brands-400.svg.gz'
|
||||
tandoor | Deleting 'webfonts/fa-regular-400.woff2'
|
||||
tandoor | Deleting 'webfonts/fa-regular-400.eot'
|
||||
tandoor | Deleting 'webfonts/poppins_latin_700.woff2'
|
||||
tandoor | Deleting 'webfonts/poppins_devanagari_700.woff2'
|
||||
tandoor | Deleting 'webfonts/poppins_devanagari_400.d5e78c53cb07.woff2'
|
||||
tandoor | Deleting 'webfonts/fa-solid-900.c2801fb415f0.svg.gz'
|
||||
tandoor | Deleting 'webfonts/fa-solid-900.svg'
|
||||
tandoor | Deleting 'webfonts/poppins_latin_500.woff2'
|
||||
tandoor | Deleting 'webfonts/poppins_latin_ext_400.4d1490f32451.woff2'
|
||||
tandoor | Deleting 'webfonts/fa-brands-400.eot.gz'
|
||||
tandoor | Deleting 'webfonts/poppins_latin_ext_700.woff2'
|
||||
tandoor | Deleting 'webfonts/fa-regular-400.7b9568e6389b.svg.gz'
|
||||
tandoor | Deleting 'webfonts/poppins_latin_400.woff2'
|
||||
tandoor | Deleting 'webfonts/fa-regular-400.c1a866ec0e04.eot'
|
||||
tandoor | Deleting 'webfonts/fa-brands-400.woff2'
|
||||
tandoor | Deleting 'webfonts/fa-solid-900.svg.gz'
|
||||
tandoor | Deleting 'webfonts/fa-brands-400.a9c4bb7348f4.svg.gz'
|
||||
tandoor | Deleting 'webfonts/fa-brands-400.5063b105c764.eot.gz'
|
||||
tandoor | Deleting 'webfonts/fa-regular-400.7b9568e6389b.svg'
|
||||
tandoor | Deleting 'webfonts/poppins_latin_ext_500.woff2'
|
||||
tandoor | Deleting 'webfonts/fa-brands-400.woff'
|
||||
tandoor | Deleting 'webfonts/fa-brands-400.ttf.gz'
|
||||
tandoor | Deleting 'webfonts/fa-solid-900.44d537ab79f9.woff2'
|
||||
tandoor | Deleting 'webfonts/fa-regular-400.svg.gz'
|
||||
tandoor | Deleting 'webfonts/fa-solid-900.eot'
|
||||
tandoor | Deleting 'webfonts/fa-brands-400.svg'
|
||||
tandoor | Deleting 'webfonts/poppins_latin_500.84780596e268.woff2'
|
||||
tandoor | Deleting 'webfonts/fa-brands-400.06147b6cd88c.ttf'
|
||||
tandoor | Deleting 'webfonts/fa-solid-900.woff2'
|
||||
tandoor | Deleting 'webfonts/fa-solid-900.333bae208dc3.woff'
|
||||
tandoor | Deleting 'webfonts/poppins_latin_ext_400.woff2'
|
||||
tandoor | Deleting 'webfonts/fa-regular-400.65b286af947c.ttf.gz'
|
||||
tandoor | Deleting 'webfonts/fa-solid-900.ttf.gz'
|
||||
tandoor | Deleting 'webfonts/fa-brands-400.5063b105c764.eot'
|
||||
tandoor | Deleting 'webfonts/fa-regular-400.ttf.gz'
|
||||
tandoor | Deleting 'webfonts/poppins_latin_ext_700.62d7a4c78fc2.woff2'
|
||||
tandoor | Deleting 'webfonts/fa-solid-900.woff'
|
||||
tandoor | Deleting 'webfonts/poppins_devanagari_500.woff2'
|
||||
tandoor | Deleting 'webfonts/fa-solid-900.0bff33a5fd7e.ttf.gz'
|
||||
tandoor | Deleting 'webfonts/fa-regular-400.eot.gz'
|
||||
tandoor | Deleting 'webfonts/fa-regular-400.ttf'
|
||||
tandoor | Deleting 'webfonts/fa-regular-400.65b286af947c.ttf'
|
||||
tandoor | Deleting 'webfonts/poppins_latin_700.f4f17fd53c7d.woff2'
|
||||
tandoor | Deleting 'webfonts/fa-solid-900.ttf'
|
||||
tandoor | 2026/09/22 10:54:37 [crit] 16#16: *9 connect() to unix:/tmp/tandoor.sock failed (2: No such file or directory) while connecting to upstream, client: 127.0.0.1, server: localhost, request: "GET /accounts/login/ HTTP/1.1", upstream: "http://unix:/tmp/tandoor.sock:/accounts/login/", host: "127.0.0.1:80"
|
||||
tandoor | 127.0.0.1 - - [22/Sep/2026:10:54:37 +0200] "GET /accounts/login/ HTTP/1.1" 502 150 "-" "Wget" "-"
|
||||
tandoor |
|
||||
tandoor | 894 static files copied to '/opt/recipes/staticfiles', 2464 post-processed.
|
||||
tandoor | Done
|
||||
tandoor | Starting gunicorn
|
||||
tandoor | [2026-09-22 10:54:37 +0200] [7] [INFO] Starting gunicorn 26.2.0
|
||||
tandoor | [2026-09-22 10:54:37 +0200] [7] [INFO] Listening at: unix:/tmp/tandoor.sock (7)
|
||||
tandoor | [2026-09-22 10:54:37 +0200] [7] [INFO] Using worker: gthread
|
||||
tandoor | [2026-09-22 10:54:37 +0200] [66] [INFO] Booting worker with pid: 66
|
||||
tandoor | [2026-09-22 10:54:37 +0200] [67] [INFO] Booting worker with pid: 67
|
||||
tandoor | [2026-09-22 10:54:38 +0200] [68] [INFO] Booting worker with pid: 68
|
||||
tandoor | [2026-09-22 10:54:38 +0200] [7] [INFO] Control socket listening at /root/.gunicorn/gunicorn.ctl
|
||||
tandoor | Running django-vite in production mode (no HMR)
|
||||
tandoor | Running django-vite in production mode (no HMR)
|
||||
tandoor | Running django-vite in production mode (no HMR)
|
||||
tandoor | 127.0.0.1 - - [22/Sep/2026:10:54:45 +0200] "GET /accounts/login/ HTTP/1.1" 200 4981 "-" "Wget" "-"
|
||||
tandoor | - - [22/Sep/2026:10:54:45 +0200] "GET /accounts/login/ HTTP/1.0" 200 4981 "-" "Wget"
|
||||
tandoor | ThreadPoolExecutor-0_0 ERROR 2026-09-22 10:54:47,243 django.security.DisallowedHost Invalid HTTP_HOST header: 'tandoor:80'. You may need to add 'tandoor' to ALLOWED_HOSTS.
|
||||
tandoor | Traceback (most recent call last):
|
||||
tandoor | File "/opt/recipes/venv/lib/python3.13/site-packages/django/core/handlers/exception.py", line 55, in inner
|
||||
tandoor | response = get_response(request)
|
||||
tandoor | File "/opt/recipes/venv/lib/python3.13/site-packages/django/utils/deprecation.py", line 119, in __call__
|
||||
tandoor | response = self.process_request(request)
|
||||
tandoor | File "/opt/recipes/venv/lib/python3.13/site-packages/django/middleware/common.py", line 48, in process_request
|
||||
tandoor | host = request.get_host()
|
||||
tandoor | File "/opt/recipes/venv/lib/python3.13/site-packages/django/http/request.py", line 203, in get_host
|
||||
tandoor | raise DisallowedHost(msg)
|
||||
tandoor | django.core.exceptions.DisallowedHost: Invalid HTTP_HOST header: 'tandoor:80'. You may need to add 'tandoor' to ALLOWED_HOSTS.
|
||||
tandoor | - - [22/Sep/2026:10:54:47 +0200] "GET /accounts/login/ HTTP/1.0" 400 143 "-" "Go-http-client/1.1"
|
||||
tandoor | 172.18.0.2 - - [22/Sep/2026:10:54:47 +0200] "GET /accounts/login/ HTTP/1.1" 400 154 "-" "Go-http-client/1.1" "-"
|
||||
@@ -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": "654a28192b38"
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
10:52:42 ==== tandoor: ghcr.io/tandoorrecipes/recipes:2.6.13 -> ghcr.io/tandoorrecipes/recipes:2.6.15 (sub=recipes, class=db)
|
||||
10:52:42 [1] tandoor already deployed — reusing
|
||||
10:52:45 [2] seeding through the app's own front door
|
||||
10:52:55 tandoor: createsuperuser :: Running django-vite in production mode (no HMR) Superuser created successfully.
|
||||
10:52:59 tandoor: seeded superuser drill1d392f
|
||||
10:52:59 [3] control C1 — reading the seed back BEFORE the update
|
||||
10:53:05 tandoor: readback of the seeded account found=True
|
||||
10:53:05 [4] „Mentés most" -> 200 {'ok': True, 'message': 'Mentés elindítva'}
|
||||
10:54:00 [4] backup idle; last=None
|
||||
10:54:01 [5] drill commit 654a28192b38: tandoor ghcr.io/tandoorrecipes/recipes:2.6.13 -> ghcr.io/tandoorrecipes/recipes:2.6.15 (push rc=0)
|
||||
10:54:06 [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'}]
|
||||
10:54:06 [5] badge EN: [{'title': 'A newer version of this app is available. Select the Update button to start it.', 'text': 'Update available — today'}]
|
||||
10:54:06 [6] Update -> 202 {'ok': True, 'data': {'accepted': True, 'completed': False}, 'message': 'Frissítés elindult – az állapot a kártyán követhető'}
|
||||
10:54:06 + 0.0s phase=safety-dump label=Adatbázis pillanatkép… err=None hold=None
|
||||
10:54:07 + 1.0s phase=pulling label=Új verzió letöltése… err=None hold=None
|
||||
10:54:08 + 2.1s phase=starting label=Indítás az új verzióval… err=None hold=None
|
||||
10:54:11 + 5.2s phase=verifying label=Működés ellenőrzése… err=None hold=None
|
||||
10:54:47 + 41.1s phase=done label=Frissítve err=None hold=None
|
||||
10:54:47 [7] reading the seed back AFTER the update
|
||||
10:54:54 tandoor: readback of the seeded account found=True
|
||||
10:54:56 [8] pinned = {'tandoor': 'ghcr.io/tandoorrecipes/recipes:2.6.15', 'tandoor-postgres': 'postgres:16-alpine'}
|
||||
10:54:56 [8] installed = {'tandoor': 'ghcr.io/tandoorrecipes/recipes:2.6.15', 'tandoor-postgres': 'postgres:16-alpine'}
|
||||
10:54:56 [8] compose = ['image: ghcr.io/tandoorrecipes/recipes:2.6.15', 'image: postgres:16-alpine']
|
||||
10:54:56 [8] inspect = ['tandoor ghcr.io/tandoorrecipes/recipes:2.6.15 running=true restarts=0', 'tandoor-postgres postgres:16-alpine running=true restarts=0']
|
||||
10:54:56 [9] verdict proven -> /mnt/5_hdd/felhom.eu/git/felhom.eu/documentation/audits/update-night-2026-09-21/apps/tandoor/verdict.json
|
||||
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"pinned_images": {
|
||||
"tandoor": "ghcr.io/tandoorrecipes/recipes:2.6.13",
|
||||
"tandoor-postgres": "postgres:16-alpine"
|
||||
},
|
||||
"installed_images": {
|
||||
"tandoor": "ghcr.io/tandoorrecipes/recipes:2.6.13",
|
||||
"tandoor-postgres": "postgres:16-alpine"
|
||||
},
|
||||
"catalog_images": null,
|
||||
"live_compose_image_lines": [
|
||||
"image: ghcr.io/tandoorrecipes/recipes:2.6.13",
|
||||
"image: postgres:16-alpine"
|
||||
],
|
||||
"docker_inspect": [
|
||||
"tandoor ghcr.io/tandoorrecipes/recipes:2.6.13 running=true restarts=0",
|
||||
"tandoor-postgres postgres:16-alpine running=true restarts=0"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
{
|
||||
"before": {
|
||||
"pinned_images": {
|
||||
"tandoor": "ghcr.io/tandoorrecipes/recipes:2.6.13",
|
||||
"tandoor-postgres": "postgres:16-alpine"
|
||||
},
|
||||
"installed_images": {
|
||||
"tandoor": "ghcr.io/tandoorrecipes/recipes:2.6.13",
|
||||
"tandoor-postgres": "postgres:16-alpine"
|
||||
},
|
||||
"catalog_images": null,
|
||||
"live_compose_image_lines": [
|
||||
"image: ghcr.io/tandoorrecipes/recipes:2.6.13",
|
||||
"image: postgres:16-alpine"
|
||||
],
|
||||
"docker_inspect": [
|
||||
"tandoor ghcr.io/tandoorrecipes/recipes:2.6.13 running=true restarts=0",
|
||||
"tandoor-postgres postgres:16-alpine running=true restarts=0"
|
||||
]
|
||||
},
|
||||
"after": {
|
||||
"pinned_images": {
|
||||
"tandoor": "ghcr.io/tandoorrecipes/recipes:2.6.15",
|
||||
"tandoor-postgres": "postgres:16-alpine"
|
||||
},
|
||||
"installed_images": {
|
||||
"tandoor": "ghcr.io/tandoorrecipes/recipes:2.6.15",
|
||||
"tandoor-postgres": "postgres:16-alpine"
|
||||
},
|
||||
"catalog_images": {
|
||||
"tandoor": "ghcr.io/tandoorrecipes/recipes:2.6.15",
|
||||
"tandoor-postgres": "postgres:16-alpine"
|
||||
},
|
||||
"live_compose_image_lines": [
|
||||
"image: ghcr.io/tandoorrecipes/recipes:2.6.15",
|
||||
"image: postgres:16-alpine"
|
||||
],
|
||||
"docker_inspect": [
|
||||
"tandoor ghcr.io/tandoorrecipes/recipes:2.6.15 running=true restarts=0",
|
||||
"tandoor-postgres postgres:16-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": 2.1,
|
||||
"phase": "starting",
|
||||
"label": "Indítás az új verzióval…",
|
||||
"updating": true,
|
||||
"error": null,
|
||||
"hold": null
|
||||
},
|
||||
{
|
||||
"t": 5.2,
|
||||
"phase": "verifying",
|
||||
"label": "Működés ellenőrzése…",
|
||||
"updating": true,
|
||||
"error": null,
|
||||
"hold": null
|
||||
},
|
||||
{
|
||||
"t": 41.1,
|
||||
"phase": "done",
|
||||
"label": "Frissítve",
|
||||
"updating": false,
|
||||
"error": null,
|
||||
"hold": null
|
||||
}
|
||||
],
|
||||
"duration_s": 41.1,
|
||||
"final_phase": "done",
|
||||
"update_error": null,
|
||||
"hold_reason": null,
|
||||
"state": "running"
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
{
|
||||
"harness_version": 1,
|
||||
"app": "tandoor",
|
||||
"venue": "guest 9202 demo-hp-scratch, controller 0.261.0",
|
||||
"class": "db",
|
||||
"from": {
|
||||
"tandoor": "ghcr.io/tandoorrecipes/recipes:2.6.13",
|
||||
"tandoor-postgres": "postgres:16-alpine"
|
||||
},
|
||||
"to": {
|
||||
"tandoor": "ghcr.io/tandoorrecipes/recipes:2.6.15",
|
||||
"tandoor-postgres": "postgres:16-alpine"
|
||||
},
|
||||
"verdict": "proven",
|
||||
"seed_read_before": true,
|
||||
"seed_read_after": true,
|
||||
"healthy_after": true,
|
||||
"migration_observed": null,
|
||||
"abort": "not-attempted",
|
||||
"abort_detail": null,
|
||||
"duration_s": 41.1,
|
||||
"measured_at": "2026-09-22T08:52:42.724401+00:00",
|
||||
"evidence": "apps/tandoor/",
|
||||
"notes": [],
|
||||
"badge_catchup_seconds": 4.5,
|
||||
"observables_after": {
|
||||
"pinned_images": {
|
||||
"tandoor": "ghcr.io/tandoorrecipes/recipes:2.6.15",
|
||||
"tandoor-postgres": "postgres:16-alpine"
|
||||
},
|
||||
"installed_images": {
|
||||
"tandoor": "ghcr.io/tandoorrecipes/recipes:2.6.15",
|
||||
"tandoor-postgres": "postgres:16-alpine"
|
||||
},
|
||||
"catalog_images": {
|
||||
"tandoor": "ghcr.io/tandoorrecipes/recipes:2.6.15",
|
||||
"tandoor-postgres": "postgres:16-alpine"
|
||||
},
|
||||
"live_compose_image_lines": [
|
||||
"image: ghcr.io/tandoorrecipes/recipes:2.6.15",
|
||||
"image: postgres:16-alpine"
|
||||
],
|
||||
"docker_inspect": [
|
||||
"tandoor ghcr.io/tandoorrecipes/recipes:2.6.15 running=true restarts=0",
|
||||
"tandoor-postgres postgres:16-alpine running=true restarts=0"
|
||||
]
|
||||
},
|
||||
"final_phase": "done",
|
||||
"hold_reason": null,
|
||||
"update_error": null
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
origin https://gitea.dooplex.hu/admin/app-catalog-felhom.eu.git (fetch)
|
||||
origin https://gitea.dooplex.hu/admin/app-catalog-felhom.eu.git (push)
|
||||
6c690a1 gates: refuse a health probe the app does not answer (R-618)
|
||||
13: image: ghcr.io/tandoorrecipes/recipes:2.6.13
|
||||
58: image: postgres:16-alpine
|
||||
|
||||
Reference in New Issue
Block a user