From af6db38514679848d32cf7abe0c4f5ba40828fbb Mon Sep 17 00:00:00 2001 From: kisfenyo Date: Sat, 26 Sep 2026 09:48:32 +0200 Subject: [PATCH] 09 decisions 40-41 (operator rulings 2026-09-26); A1 spike: the unit's definition and data drift apart (R-696 widened), R-697 filed --- .../architecture/07-backup-architecture.md | 5 +- .../architecture/09-update-architecture.md | 15 + .../version-travel-2026-09-26/A1/README.md | 91 ++ .../A1/S0-deployed.txt | 25 + .../A1/S1-update-step1.json | 59 + .../A1/S1a-right-after-step1.txt | 66 + .../A1/S1b-after-refresh.txt | 66 + .../A1/S2-restore-window-step1.txt | 124 ++ .../A1/S3-update-step2.json | 75 ++ .../A1/S3a-right-after-step2.txt | 69 ++ .../A1/S3b-after-refresh-step2.txt | 145 +++ .../A1/S4-restore-window-step2.txt | 244 ++++ .../A1/S5-restore-tier2-window.txt | 131 ++ .../version-travel-2026-09-26/tools/a1.py | 116 ++ .../tools/fixtures.py | 1085 +++++++++++++++++ .../tools/repoint.py | 60 + .../tools/seedread.py | 24 + .../version-travel-2026-09-26/tools/sr.py | 19 + .../version-travel-2026-09-26/tools/walk.py | 507 ++++++++ documentation/backlog/OPEN-ITEMS.md | 4 +- 20 files changed, 2926 insertions(+), 4 deletions(-) create mode 100644 documentation/audits/version-travel-2026-09-26/A1/README.md create mode 100644 documentation/audits/version-travel-2026-09-26/A1/S0-deployed.txt create mode 100644 documentation/audits/version-travel-2026-09-26/A1/S1-update-step1.json create mode 100644 documentation/audits/version-travel-2026-09-26/A1/S1a-right-after-step1.txt create mode 100644 documentation/audits/version-travel-2026-09-26/A1/S1b-after-refresh.txt create mode 100644 documentation/audits/version-travel-2026-09-26/A1/S2-restore-window-step1.txt create mode 100644 documentation/audits/version-travel-2026-09-26/A1/S3-update-step2.json create mode 100644 documentation/audits/version-travel-2026-09-26/A1/S3a-right-after-step2.txt create mode 100644 documentation/audits/version-travel-2026-09-26/A1/S3b-after-refresh-step2.txt create mode 100644 documentation/audits/version-travel-2026-09-26/A1/S4-restore-window-step2.txt create mode 100644 documentation/audits/version-travel-2026-09-26/A1/S5-restore-tier2-window.txt create mode 100644 documentation/audits/version-travel-2026-09-26/tools/a1.py create mode 100644 documentation/audits/version-travel-2026-09-26/tools/fixtures.py create mode 100644 documentation/audits/version-travel-2026-09-26/tools/repoint.py create mode 100644 documentation/audits/version-travel-2026-09-26/tools/seedread.py create mode 100644 documentation/audits/version-travel-2026-09-26/tools/sr.py create mode 100644 documentation/audits/version-travel-2026-09-26/tools/walk.py diff --git a/documentation/architecture/07-backup-architecture.md b/documentation/architecture/07-backup-architecture.md index 70de25d8..d4dd0439 100644 --- a/documentation/architecture/07-backup-architecture.md +++ b/documentation/architecture/07-backup-architecture.md @@ -575,9 +575,8 @@ so („Erről nem készül mentés." / "This is not backed up."). What brings it (or the app's own unit on the drive), listed per row as „Visszatölthető innen" / "Can be loaded from". **Who deletes it.** Only the household, by Delete on that page with the app's name typed (a wrong name, or a path that -is not a listed item, is refused — proven live 2026-09-25). **The box never deletes kept data by itself** — whether it -ever should (e.g. after 90 days with warnings) is operator decision **D3, open** (`STATUS.md`). Until then kept data -can fill a drive; the drive-full warning names the kept folders and their sizes as space the household can free. +is not a listed item, is refused — proven live 2026-09-25). **The box never deletes kept data by itself** — operator ruling +2026-09-26 (`09` §3 decision 40, D3 option A): no age limit, no automatic clean-up. So kept data can fill a drive; the drive-full warning names the kept folders and their sizes as space the household can free. **Read-only view.** The file browser shows each kept item under „Megőrzött adatok", one `:ro` bind per item, and follows the list at the next sync (a write is refused: `Read-only file system`, proven live). Not yet readable there: diff --git a/documentation/architecture/09-update-architecture.md b/documentation/architecture/09-update-architecture.md index 7a987114..5964c303 100644 --- a/documentation/architecture/09-update-architecture.md +++ b/documentation/architecture/09-update-architecture.md @@ -451,6 +451,21 @@ R-636's louder repeated alarm. watches (~12 000 requests each). **Why (b):** 91 % of the old limit is too close for a household box, the gate's rule is followed rather than bypassed, and the mark's weakness for such apps is filed (R-693). Reversible. +### 2026-09-26 — two operator rulings + +40. **The box never deletes kept data by itself** (operator ruling 2026-09-26, D3 option A). Only the household + deletes it, by Delete on the „Megőrzött adatok" page with the app's name typed. No age limit, no automatic + clean-up with warnings. Kept data can fill a drive; the drive-full warning names the kept folders and their + sizes as space the household can free (as built in v0.274.0). **Why:** the household decided to keep it; a box + that deletes it later reverses their decision without them. Closes D3 in `STATUS.md`. +41. **adventurelog keeps its world-data download** (operator ruling 2026-09-26, R-655 option B). The template does + NOT set `SKIP_WORLD_DATA=1`, so a fresh install still gets the countries/regions data. The move to v0.13.0 is + proven with the file already in the `adventurelog_media` volume (an update re-uses what v0.12.1 left), plus a + check that a truncated file is replaced (`download-countries --force` is the command's own repair). The + healthcheck override fix (`/usr/bin/node`) rides the image move in the same commit. **Why:** a fresh install + without world data is a smaller product; the internet dependence is at first start, which the update's own + health wait and undo already cover. + --- ## 3b. ANSWERED 2026-09-23 — the seven questions Slices 6 and 7 needed diff --git a/documentation/audits/version-travel-2026-09-26/A1/README.md b/documentation/audits/version-travel-2026-09-26/A1/README.md new file mode 100644 index 00000000..b08dbcfd --- /dev/null +++ b/documentation/audits/version-travel-2026-09-26/A1/README.md @@ -0,0 +1,91 @@ +# A1 — the window between an update and the next backup, measured (9202, controller 0.274.0, drill catalog) + +2026-09-26 07:24–07:44Z. Guest 9202 on demo-hp, pointed at the drill catalog (`tools/repoint.py drill`, saved +config `controller.yaml.pre-vt0926`). docmost deployed at `docmost/docmost:0.95.0` + `postgres:16-alpine` from a +one-commit drill template (`85af330`, reverted by `8c3d099` right after the deploy, so the drill equals live +`main` again), seeded through docmost's own front door (a user + login, `fixtures.py`), then climbed the live +ladder with two presses of the guarded Update. Every file here is the raw record; this page is the reading. + +Method: endpoint-level (the buttons' own endpoints: `POST /api/stacks/docmost/update`, the backups page's +`POST /backup/restore` form with `snapshot_id=helyi`, the second-drive „Teljes visszaállítás" form +`POST /backup/tier2/unit-restore`), and the unit read off the disk (`tools/a1.py unit`). + +## Shape 1 — an app-image step (0.95.0 → 0.96.0, PostgreSQL 16 both sides) + +| when (UTC) | unit `compose/` + `image_pins` | unit `db-dumps/docmost-postgres.sql` | restore point offered | +|---|---|---|---| +| 07:25:57 (the update's own "back up first") | 0.95.0 / 16 | 07:25:43, 0.95.0 schema | — | +| 07:26:33 update `done` | 0.95.0 / 16 (unchanged) | 07:25:43 | 07:25:57 | +| **07:27:53 the 5-minute status refresh** | **0.96.0 / 16** (`created_at` 07:27:53) | **07:25:43, 0.95.0 schema** | **07:27:53** | + +`S1a-right-after-step1.txt`, `S1b-after-refresh.txt`. **The claim holds:** `CaptureRecoveryUnit`, run by the +refresh (`RefreshCache` → `captureAllRecoveryUnits`), rewrote `compose/` and `image_pins` from the stack dir +the first time it ran after the pin moved, and the dumps stayed as the backup legs left them. Tier 1's time +(`ListRestorePoints` = newest of manifest + dumps) moved to the refresh: **07:27:53 for data from 07:25:43**. + +**Restore in the window (own unit, `helyi`) — `S2-restore-window-step1.txt`:** volumes first (3 tars, +including the database's own volume), then the definition from the unit's `compose/` (0.96.0), then the SQL +with only the database up. It completed ("3 volume(s) of 3 listed, 1 database(s) of 1 listed"), the seed read +back — **and docmost 0.96.0 ran four schema migrations on 0.95.0's data at its first start** +(`20260824T211732-page-title-trgm-index` … `20260904T171920-public-spaces`). So the restore performed the +update step itself, with no precondition, no safety copy of its own and no undo. Whole here; unguarded always. + +## Shape 2 — an engine step (PostgreSQL 16 → 18, docmost-shaped, with the box's conversion) + +| when (UTC) | unit `compose/` | unit `.sql` | pg volume tar | +|---|---|---|---| +| 07:29:45 back up first | 0.96.0 / **16**, mount `/var/lib/postgresql/data` | 07:29:45, `Dumped from database version 16.15` | 07:29:47, a 16 datadir at the volume root | +| 07:30:39 update `done` (converting 7 s) | unchanged | unchanged | unchanged | +| **07:32:53 refresh** | **0.96.0 / 18, mount `/var/lib/postgresql`** | **07:29:45, 16.15** | **07:29:47, 16 datadir** | + +`S3a-right-after-step2.txt`, `S3b-after-refresh-step2.txt`. `conversion_copy` recorded (at 07:30:39). + +**Restore in the window (own unit) — `S4-restore-window-step2.txt`. The claim is TRUE and the outcome is the +worst of the three the brief listed: REFUSED by the engine, and the app left DOWN.** The 16 datadir tar was +poured into the volume first (the volume is removed and recreated, so the live 18 datadir is GONE at that +moment); the unit's 18 definition was then written; the DB-only start of `postgres:18-alpine` refused the +old layout (`Error: in 18+, these Docker images are configured to store database data in a format which is +compatible with "pg_ctlcluster" … Counter to that, there appears to be PostgreSQL data in: +/var/lib/postgresql`) and restarted in a loop; the replay gave up (`waiting for docmost-postgres (postgres) +readiness: timeout after 30s`); the full start failed (`docker compose up -d … exit code 1`). The page said +the restore failed; docmost stayed `restarting`; the seed did NOT read back (the app's router answered 404). +Neither "a fresh empty cluster with the SQL loaded into it" nor "the app comes back whole". + +## A1.3 — the other two copies + +**Second drive (Tier 2) — `S5-restore-tier2-window.txt`.** The mirror had been written by the update's own +"back up first" (07:29) and was NOT touched by the refresh: its `compose/` still said 0.96.0 / **16** with +the 16 dump and tar. „Teljes visszaállítás" from it brought docmost back **whole at PostgreSQL 16**: 3 volumes, +1 database, the seed read back, `PG_VERSION` 16, and the pin moved back to `postgres:16-alpine` (the restore +pins to the unit's definition, `09` §5.3). This is option A's shape — by timing, not by design: the mirror +is rewritten on the next Tier-2 run from whatever the primary unit then holds, so after the nightly Tier 2 +it would carry the same mix as the primary. + +**Off-site (Tier 3) — NOT measured live**: 9202 has no off-site target, and the only boxes that have one +(9201, demo-felhom) are fenced read-only for this session. **Read from source instead +(`offbox_reconstitute.go` `ReconstituteFromOffsite`):** the off-site restore **never writes the definition** +— it resolves the database service from the LIVE compose ("reconstitution never overwrites the stack dir"), +replays the snapshot's volume tars (the database's raw volume included), then the SQL. The snapshot is taken +nightly after its own dump leg, so it is internally coherent — but an update during the day moves the live +definition, and until the next night's off-site run **every** off-site restore puts the old data under the +new definition. For an engine step that is S4's mechanism exactly, with one difference: this path takes a +safety dump and rolls back on a replay failure — but the DB-only start fails before any replay, so the path +goes to `restartStack` with the live datadir already replaced. Inferred from source + S4, not observed. + +## Also found + +1. **A restore drops the `conversion_copy` record but not the volume** (`S4`, `S5`: `conversion_copy=None` + while `docmost_docmost_postgres_data.pre-update-20260926T073003Z` still exists). `PersistUnitRedeployConfig` + builds a fresh `AppConfig`, so the record the hourly release reads is gone and the copy is never released — + disk only, never data. Filed. +2. **The refresh also re-captures `.felhom.yml`** (6426 B → 3998 B, the applied record of the pinned version, + R-669) — expected; it belongs with the definition and is kept with it by the fix. +3. **The automatic leg already refuses an app older than the ladder** (`unattended.go` `legCandidate`, + `LegSkipOlderThanLadder`); a PERSON's press jumps to the template (`ladder.go` `nextLadderStep` Index −1, + measured live by part 5 on vikunja 2.5.0). So the brief's claim "a restore of a version older than the + ladder's first entry would then jump" is **true for a person's press and false for the automatic leg**. + +## State left (for Part A's live proof) + +docmost on 9202 at 0.96.0 / PostgreSQL 16, pinned there, seed readable; the orphaned pre-conversion copy +volume stays until teardown. The drill repo equals live `main` (`8c3d099` is a revert of `85af330`). diff --git a/documentation/audits/version-travel-2026-09-26/A1/S0-deployed.txt b/documentation/audits/version-travel-2026-09-26/A1/S0-deployed.txt new file mode 100644 index 00000000..5dac9666 --- /dev/null +++ b/documentation/audits/version-travel-2026-09-26/A1/S0-deployed.txt @@ -0,0 +1,25 @@ +seed: True +seed reads back through the front door: True +# S0-deployed — 2026-09-26T09:25:26+0200; controller gitea.dooplex.hu/admin/felhom-controller:0.274.0 +pinned={'docmost': 'docmost/docmost:0.95.0', 'docmost-postgres': 'postgres:16-alpine', 'docmost-redis': 'redis:7-alpine'} +installed={"docmost": {"ref": "docmost/docmost:0.95.0", "digest": "sha256:41c8d777cf23c74e78f94e676aec328b7d7856f48df5e573543dac68d371e37c", "at": "2026-09-26T07:24:50Z"}, "docmost-postgres": {"ref": "postgres:16-alpine", "digest": "sha256:721873c34ceb9f8d8fc265984940dc982404c105f19ad51be9fdc5970a6080ea", "at": "2026-09-26T07:24:50Z"}, "docmost-redis": {"ref": "redis:7-alpine", "digest": "sha256:858f009f9709ce576febc734aa78b8f6d624b82571f9ddb6bda4377c833b3499", "at": "2026-09-26T07:24:50Z"}} +conversion_copy=None +state=running phase=None +== unit /mnt/sys_drive/felhom-data/backups/primary/docmost +(absent) +== unit /mnt/felhom-drives/scratch_hdd/backups/secondary/docmost/recovery-unit +(absent) +== live + compose image: docmost/docmost:0.95.0 + compose image: postgres:16-alpine + compose image: redis:7-alpine + PGDATA=/var/lib/postgresql/data PG_VERSION=16 +docmost docmost/docmost:0.95.0 Up 41 seconds (healthy) +docmost-postgres postgres:16-alpine Up 52 seconds (healthy) +docmost-redis redis:7-alpine Up 52 seconds (healthy) + volume docmost_docmost_postgres_data + volume docmost_docmost_redis_data + volume docmost_docmost_storage + pg volume root: +PG_VERSION base global pg_commit_ts pg_dynshmem pg_hba.conf pg_ident.conf pg_logical pg_multixact pg_notify pg_replslot pg_serial pg_snapshots pg_stat pg_stat_tmp pg_subtrans pg_tblspc pg_twophase pg_wal pg_xact postgresql.auto.conf postgresql.conf postmaster.opts postmaster.pid +restore points offered (GET /api/backup/snapshots): 200 [] diff --git a/documentation/audits/version-travel-2026-09-26/A1/S1-update-step1.json b/documentation/audits/version-travel-2026-09-26/A1/S1-update-step1.json new file mode 100644 index 00000000..262b6b4a --- /dev/null +++ b/documentation/audits/version-travel-2026-09-26/A1/S1-update-step1.json @@ -0,0 +1,59 @@ +{ + "accepted": true, + "http": "202", + "phases": [ + { + "t": 0.0, + "phase": "backing-up", + "label": "Biztons\u00e1gi ment\u00e9s k\u00e9sz\u00fcl a friss\u00edt\u00e9s el\u0151tt\u2026", + "updating": true, + "error": null, + "hold": null + }, + { + "t": 14.4, + "phase": "safety-dump", + "label": "Adatb\u00e1zis pillanatk\u00e9p\u2026", + "updating": true, + "error": null, + "hold": null + }, + { + "t": 16.4, + "phase": "copying", + "label": "Az adatok m\u00e1sol\u00e1sa a friss\u00edt\u00e9s el\u0151tt\u2026", + "updating": true, + "error": null, + "hold": null + }, + { + "t": 18.5, + "phase": "starting", + "label": "Ind\u00edt\u00e1s az \u00faj verzi\u00f3val\u2026", + "updating": true, + "error": null, + "hold": null + }, + { + "t": 29.8, + "phase": "verifying", + "label": "M\u0171k\u00f6d\u00e9s ellen\u0151rz\u00e9se\u2026", + "updating": true, + "error": null, + "hold": null + }, + { + "t": 50.3, + "phase": "done", + "label": "Friss\u00edtve", + "updating": false, + "error": null, + "hold": null + } + ], + "duration_s": 50.3, + "final_phase": "done", + "update_error": null, + "hold_reason": null, + "state": "running" +} \ No newline at end of file diff --git a/documentation/audits/version-travel-2026-09-26/A1/S1a-right-after-step1.txt b/documentation/audits/version-travel-2026-09-26/A1/S1a-right-after-step1.txt new file mode 100644 index 00000000..09deee7c --- /dev/null +++ b/documentation/audits/version-travel-2026-09-26/A1/S1a-right-after-step1.txt @@ -0,0 +1,66 @@ +# S1a-right-after-step1 — 2026-09-26T09:26:37+0200; controller gitea.dooplex.hu/admin/felhom-controller:0.274.0 +pinned={'docmost': 'docmost/docmost:0.96.0', 'docmost-postgres': 'postgres:16-alpine', 'docmost-redis': 'redis:7-alpine'} +installed={"docmost": {"ref": "docmost/docmost:0.96.0", "digest": "sha256:b56947fcfd08aab8fae12a377e1792784786adbf8b96e4281f14ef4fc072685a", "at": "2026-09-26T07:26:33Z"}, "docmost-postgres": {"ref": "postgres:16-alpine", "digest": "sha256:721873c34ceb9f8d8fc265984940dc982404c105f19ad51be9fdc5970a6080ea", "at": "2026-09-26T07:24:50Z"}, "docmost-redis": {"ref": "redis:7-alpine", "digest": "sha256:858f009f9709ce576febc734aa78b8f6d624b82571f9ddb6bda4377c833b3499", "at": "2026-09-26T07:24:50Z"}} +conversion_copy=None +state=running phase=done +== unit /mnt/sys_drive/felhom-data/backups/primary/docmost + manifest.controller_version = "0.274.0" + manifest.created_at = "2026-09-26T07:25:57Z" + manifest.image_pins = ["docmost/docmost:0.95.0", "postgres:16-alpine", "redis:7-alpine"] + manifest.db_dumps = ["docmost-postgres.sql"] + manifest.volume_dumps = ["docmost_docmost_postgres_data.tar", "docmost_docmost_redis_data.tar", "docmost_docmost_storage.tar"] + compose/ images: + image: docmost/docmost:0.95.0 + image: postgres:16-alpine + image: redis:7-alpine + compose/ postgres mount: + - docmost_postgres_data:/var/lib/postgresql/data + docmost_postgres_data: + mtimes (UTC): + 2026-09-26T07:25:57.3060902190Z 6426 compose/.felhom.yml + 2026-09-26T07:25:57.3060902190Z 447 compose/app.yaml + 2026-09-26T07:25:57.3060902190Z 3105 compose/docker-compose.yml + 2026-09-26T07:25:43.7249236060Z 134715 db-dumps/docmost-postgres.sql + 2026-09-26T07:25:57.3078222630Z 1298 manifest.json + 2026-09-26T07:25:44.9049380830Z 51837440 volume-dumps/docmost_docmost_postgres_data.tar + 2026-09-26T07:25:45.3785498360Z 25088 volume-dumps/docmost_docmost_redis_data.tar + 2026-09-26T07:25:45.7447035310Z 1536 volume-dumps/docmost_docmost_storage.tar + docmost-postgres.sql: Dumped from database version 16.15 + pre-restore-20260926T072557Z-docmost-postgres.sql: Dumped from database version 16.15 +== unit /mnt/felhom-drives/scratch_hdd/backups/secondary/docmost/recovery-unit + manifest.controller_version = "0.274.0" + manifest.created_at = "2026-09-26T07:25:57Z" + manifest.image_pins = ["docmost/docmost:0.95.0", "postgres:16-alpine", "redis:7-alpine"] + manifest.db_dumps = ["docmost-postgres.sql"] + manifest.volume_dumps = ["docmost_docmost_postgres_data.tar", "docmost_docmost_redis_data.tar", "docmost_docmost_storage.tar"] + compose/ images: + image: docmost/docmost:0.95.0 + image: postgres:16-alpine + image: redis:7-alpine + compose/ postgres mount: + - docmost_postgres_data:/var/lib/postgresql/data + docmost_postgres_data: + mtimes (UTC): + 2026-09-26T07:25:57.3060902190Z 6426 compose/.felhom.yml + 2026-09-26T07:25:57.3060902190Z 447 compose/app.yaml + 2026-09-26T07:25:57.3060902190Z 3105 compose/docker-compose.yml + 2026-09-26T07:25:43.7249236060Z 134715 db-dumps/docmost-postgres.sql + 2026-09-26T07:25:57.3078222630Z 1298 manifest.json + 2026-09-26T07:25:44.9049380830Z 51837440 volume-dumps/docmost_docmost_postgres_data.tar + 2026-09-26T07:25:45.3785498360Z 25088 volume-dumps/docmost_docmost_redis_data.tar + 2026-09-26T07:25:45.7447035310Z 1536 volume-dumps/docmost_docmost_storage.tar + docmost-postgres.sql: Dumped from database version 16.15 +== live + compose image: docmost/docmost:0.96.0@sha256:b56947fcfd08aab8fae12a377e1792784786adbf8b96e4281f14ef4fc072685a + compose image: postgres:16-alpine@sha256:721873c34ceb9f8d8fc265984940dc982404c105f19ad51be9fdc5970a6080ea + compose image: redis:7-alpine@sha256:858f009f9709ce576febc734aa78b8f6d624b82571f9ddb6bda4377c833b3499 + PGDATA=/var/lib/postgresql/data PG_VERSION=16 +docmost docmost/docmost:0.96.0 Up 30 seconds (healthy) +docmost-redis redis:7-alpine Up 40 seconds (healthy) +docmost-postgres postgres:16-alpine Up 40 seconds (healthy) + volume docmost_docmost_postgres_data + volume docmost_docmost_redis_data + volume docmost_docmost_storage + pg volume root: +PG_VERSION base global pg_commit_ts pg_dynshmem pg_hba.conf pg_ident.conf pg_logical pg_multixact pg_notify pg_replslot pg_serial pg_snapshots pg_stat pg_stat_tmp pg_subtrans pg_tblspc pg_twophase pg_wal pg_xact postgresql.auto.conf postgresql.conf postmaster.opts postmaster.pid +restore points offered (GET /api/backup/snapshots): 200 [{"time": "2026-09-26T07:25:57Z", "short_id": "helyi", "tier": 1, "drive_label": "Bels\u0151 SSD (rendszer)"}] diff --git a/documentation/audits/version-travel-2026-09-26/A1/S1b-after-refresh.txt b/documentation/audits/version-travel-2026-09-26/A1/S1b-after-refresh.txt new file mode 100644 index 00000000..e30ac12e --- /dev/null +++ b/documentation/audits/version-travel-2026-09-26/A1/S1b-after-refresh.txt @@ -0,0 +1,66 @@ +# S1b-after-refresh — 2026-09-26T09:28:05+0200; controller gitea.dooplex.hu/admin/felhom-controller:0.274.0 +pinned={'docmost': 'docmost/docmost:0.96.0', 'docmost-postgres': 'postgres:16-alpine', 'docmost-redis': 'redis:7-alpine'} +installed={"docmost": {"ref": "docmost/docmost:0.96.0", "digest": "sha256:b56947fcfd08aab8fae12a377e1792784786adbf8b96e4281f14ef4fc072685a", "at": "2026-09-26T07:26:33Z"}, "docmost-postgres": {"ref": "postgres:16-alpine", "digest": "sha256:721873c34ceb9f8d8fc265984940dc982404c105f19ad51be9fdc5970a6080ea", "at": "2026-09-26T07:24:50Z"}, "docmost-redis": {"ref": "redis:7-alpine", "digest": "sha256:858f009f9709ce576febc734aa78b8f6d624b82571f9ddb6bda4377c833b3499", "at": "2026-09-26T07:24:50Z"}} +conversion_copy=None +state=running phase=done +== unit /mnt/sys_drive/felhom-data/backups/primary/docmost + manifest.controller_version = "0.274.0" + manifest.created_at = "2026-09-26T07:27:53Z" + manifest.image_pins = ["docmost/docmost:0.96.0@sha256:b56947fcfd08aab8fae12a377e1792784786adbf8b96e4281f14ef4fc072685a", "postgres:16-alpine@sha256:721873c34ceb9f8d8fc265984940dc982404c105f19ad51be9fdc5970a6080ea", "redis:7-alpine@sha256:858f009f9709ce576febc734aa78b8f6d624b82571f9ddb6bda4377c833b3499"] + manifest.db_dumps = ["docmost-postgres.sql"] + manifest.volume_dumps = ["docmost_docmost_postgres_data.tar", "docmost_docmost_redis_data.tar", "docmost_docmost_storage.tar"] + compose/ images: + image: docmost/docmost:0.96.0@sha256:b56947fcfd08aab8fae12a377e1792784786adbf8b96e4281f14ef4fc072685a + image: postgres:16-alpine@sha256:721873c34ceb9f8d8fc265984940dc982404c105f19ad51be9fdc5970a6080ea + image: redis:7-alpine@sha256:858f009f9709ce576febc734aa78b8f6d624b82571f9ddb6bda4377c833b3499 + compose/ postgres mount: + - docmost_postgres_data:/var/lib/postgresql/data + docmost_postgres_data: + mtimes (UTC): + 2026-09-26T07:27:53.7705190140Z 3998 compose/.felhom.yml + 2026-09-26T07:27:53.7715190260Z 447 compose/app.yaml + 2026-09-26T07:27:53.7705190140Z 3321 compose/docker-compose.yml + 2026-09-26T07:25:43.7249236060Z 134715 db-dumps/docmost-postgres.sql + 2026-09-26T07:27:53.7715190260Z 1514 manifest.json + 2026-09-26T07:25:44.9049380830Z 51837440 volume-dumps/docmost_docmost_postgres_data.tar + 2026-09-26T07:25:45.3785498360Z 25088 volume-dumps/docmost_docmost_redis_data.tar + 2026-09-26T07:25:45.7447035310Z 1536 volume-dumps/docmost_docmost_storage.tar + docmost-postgres.sql: Dumped from database version 16.15 + pre-restore-20260926T072557Z-docmost-postgres.sql: Dumped from database version 16.15 +== unit /mnt/felhom-drives/scratch_hdd/backups/secondary/docmost/recovery-unit + manifest.controller_version = "0.274.0" + manifest.created_at = "2026-09-26T07:25:57Z" + manifest.image_pins = ["docmost/docmost:0.95.0", "postgres:16-alpine", "redis:7-alpine"] + manifest.db_dumps = ["docmost-postgres.sql"] + manifest.volume_dumps = ["docmost_docmost_postgres_data.tar", "docmost_docmost_redis_data.tar", "docmost_docmost_storage.tar"] + compose/ images: + image: docmost/docmost:0.95.0 + image: postgres:16-alpine + image: redis:7-alpine + compose/ postgres mount: + - docmost_postgres_data:/var/lib/postgresql/data + docmost_postgres_data: + mtimes (UTC): + 2026-09-26T07:25:57.3060902190Z 6426 compose/.felhom.yml + 2026-09-26T07:25:57.3060902190Z 447 compose/app.yaml + 2026-09-26T07:25:57.3060902190Z 3105 compose/docker-compose.yml + 2026-09-26T07:25:43.7249236060Z 134715 db-dumps/docmost-postgres.sql + 2026-09-26T07:25:57.3078222630Z 1298 manifest.json + 2026-09-26T07:25:44.9049380830Z 51837440 volume-dumps/docmost_docmost_postgres_data.tar + 2026-09-26T07:25:45.3785498360Z 25088 volume-dumps/docmost_docmost_redis_data.tar + 2026-09-26T07:25:45.7447035310Z 1536 volume-dumps/docmost_docmost_storage.tar + docmost-postgres.sql: Dumped from database version 16.15 +== live + compose image: docmost/docmost:0.96.0@sha256:b56947fcfd08aab8fae12a377e1792784786adbf8b96e4281f14ef4fc072685a + compose image: postgres:16-alpine@sha256:721873c34ceb9f8d8fc265984940dc982404c105f19ad51be9fdc5970a6080ea + compose image: redis:7-alpine@sha256:858f009f9709ce576febc734aa78b8f6d624b82571f9ddb6bda4377c833b3499 + PGDATA=/var/lib/postgresql/data PG_VERSION=16 +docmost docmost/docmost:0.96.0 Up About a minute (healthy) +docmost-redis redis:7-alpine Up 2 minutes (healthy) +docmost-postgres postgres:16-alpine Up 2 minutes (healthy) + volume docmost_docmost_postgres_data + volume docmost_docmost_redis_data + volume docmost_docmost_storage + pg volume root: +PG_VERSION base global pg_commit_ts pg_dynshmem pg_hba.conf pg_ident.conf pg_logical pg_multixact pg_notify pg_replslot pg_serial pg_snapshots pg_stat pg_stat_tmp pg_subtrans pg_tblspc pg_twophase pg_wal pg_xact postgresql.auto.conf postgresql.conf postmaster.opts postmaster.pid +restore points offered (GET /api/backup/snapshots): 200 [{"time": "2026-09-26T07:27:53Z", "short_id": "helyi", "tier": 1, "drive_label": "Bels\u0151 SSD (rendszer)"}] diff --git a/documentation/audits/version-travel-2026-09-26/A1/S2-restore-window-step1.txt b/documentation/audits/version-travel-2026-09-26/A1/S2-restore-window-step1.txt new file mode 100644 index 00000000..d88fa7ab --- /dev/null +++ b/documentation/audits/version-travel-2026-09-26/A1/S2-restore-window-step1.txt @@ -0,0 +1,124 @@ +# S2-restore-window-step1 — restore pressed at 2026-09-26T07:28:25Z (own unit, snapshot helyi) +{"ok": true, "snapshot_id": "helyi", "snapshots": [{"time": "2026-09-26T07:27:53Z", "short_id": "helyi", "tier": 1, "drive_label": "Bels\u0151 SSD (rendszer)"}], "http": "HTTP/2 302", "location": ["location: /backups/restore?flash=flash.restore.started"], "seconds": 30.4, "state_after": "running", "hold_after": null} +controller lines: +2026/09/26 07:28:26 handlers.go:1707: [WARN] [web] Restore requested (async): stack=docmost, snapshot=helyi from 172.18.0.6:40436 +2026/09/26 07:28:26 restore_unit.go:383: [INFO] [backup] Restoring docmost from recovery unit /mnt/sys_drive/felhom-data/backups/primary/docmost: images=3, secrets recovered=2/2, data_keys=0 +2026/09/26 07:28:26 manager.go:1305: [INFO] [stacks] Stopping stack: docmost +2026/09/26 07:28:27 manager.go:1314: [INFO] [stacks] Stack docmost stopped successfully (took 1.3s) +2026/09/26 07:28:27 restore.go:152: [INFO] [backup] Restoring Docker volume docmost_docmost_postgres_data for docmost +2026/09/26 07:28:28 restore.go:152: [INFO] [backup] Restoring Docker volume docmost_docmost_redis_data for docmost +2026/09/26 07:28:28 restore.go:152: [INFO] [backup] Restoring Docker volume docmost_docmost_storage for docmost +2026/09/26 07:28:29 restore.go:195: [INFO] [backup] Restored 3 Docker volume(s) for docmost +2026/09/26 07:28:29 deploy.go:708: [INFO] [stacks] Redeploying docmost from recovery unit with 4 env vars +2026/09/26 07:28:29 [INFO] [stacks] SaveAppConfig: saved config for docmost +2026/09/26 07:28:29 [INFO] [stacks] SaveAppConfig: saved config for docmost +2026/09/26 07:28:29 pin.go:93: [INFO] [stacks] pin docmost: docmost=docmost/docmost:0.96.0, docmost-postgres=postgres:16-alpine, docmost-redis=redis:7-alpine +2026/09/26 07:28:29 manager.go:1269: [INFO] [stacks] Starting stack docmost services only: [docmost-postgres] +2026/09/26 07:28:29 manager.go:1280: [INFO] [stacks] Stack docmost services [docmost-postgres] started (took 0.4s) +2026/09/26 07:28:29 restore_db.go:87: [INFO] [backup] Restore docmost: replaying DB dump into docmost-postgres (postgres) +2026/09/26 07:28:31 dbdump.go:801: [INFO] [backup] Imported DB dump docmost-postgres.sql into docmost-postgres (postgres) +2026/09/26 07:28:31 restore_db.go:97: [INFO] [backup] Restore docmost: replayed 1 DB dump(s) +2026/09/26 07:28:31 manager.go:1216: [INFO] [stacks] Starting stack: docmost +2026/09/26 07:28:42 manager.go:1231: [INFO] [stacks] Stack docmost started successfully (took 11.1s) +2026/09/26 07:28:42 [INFO] [stacks] SaveAppConfig: saved config for docmost +2026/09/26 07:28:42 installed.go:420: [INFO] [stacks] installed-images docmost: recorded 3 service(s) (docmost=docmost/docmost:0.96.0 (sha256:b56947fcfd08…), docmost-postgres=postgres:16-alpine (sha256:721873c34ceb…), docmost-redis=redis:7-alpine (sha256:858f009f9709…)) +2026/09/26 07:28:46 manager.go:1562: [INFO] [stacks] Stack docmost post-start status: +2026/09/26 07:28:46 manager.go:1565: [INFO] [stacks] docmost docmost/docmost:0.96.0@sha256:b56947fcfd08aab8fae12a377e1792784786adbf8b96e4281f14ef4fc072685a running Up 3 seconds (health: starting) +2026/09/26 07:28:46 manager.go:1565: [INFO] [stacks] docmost-postgres postgres:16-alpine@sha256:721873c34ceb9f8d8fc265984940dc982404c105f19ad51be9fdc5970a6080ea running Up 16 seconds (healthy) +2026/09/26 07:28:46 manager.go:1565: [INFO] [stacks] docmost-redis redis:7-alpine@sha256:858f009f9709ce576febc734aa78b8f6d624b82571f9ddb6bda4377c833b3499 running Up 14 seconds (healthy) +2026/09/26 07:28:56 restore_unit.go:468: [INFO] [backup] Restore-from-unit completed: docmost — 3 volume(s) of 3 listed, 1 database(s) of 1 listed +2026/09/26 07:28:56 handlers.go:1719: [INFO] [web] Restore completed (async): stack=docmost in 29.878718951s (volumes 3/3, dbs 1/1) + +docmost-postgres log (tail): + +PostgreSQL Database directory appears to contain a database; Skipping initialization + +2026-09-26 09:28:29.836 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 +2026-09-26 09:28:29.837 CEST [1] LOG: listening on IPv4 address "0.0.0.0", port 5432 +2026-09-26 09:28:29.837 CEST [1] LOG: listening on IPv6 address "::", port 5432 +2026-09-26 09:28:29.846 CEST [1] LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432" +2026-09-26 09:28:29.855 CEST [30] LOG: database system was shut down at 2026-09-26 09:25:44 CEST +2026-09-26 09:28:29.865 CEST [1] LOG: database system is ready to accept connections + +docmost log (tail): +$ pnpm --filter ./apps/server run start:prod +$ cross-env NODE_ENV=production node dist/main +(node:45) ExperimentalWarning: localStorage is not available because --localstorage-file was not provided. +(Use `node --trace-warnings ...` to show where the warning was created) +{"level":"info","time":"2026-09-26T07:28:51.324Z","pid":45,"hostname":"66cf0179fc93","context":"RedisModule","msg":"default: the connection was successfully established"} +{"level":"info","time":"2026-09-26T07:28:51.574Z","pid":45,"hostname":"66cf0179fc93","context":"DatabaseModule","msg":"Establishing database connection"} +{"level":"info","time":"2026-09-26T07:28:51.597Z","pid":45,"hostname":"66cf0179fc93","context":"DatabaseModule","msg":"Database connection successful"} +{"level":"info","time":"2026-09-26T07:28:51.974Z","pid":45,"hostname":"66cf0179fc93","context":"DatabaseMigrationService","msg":"Migration \"20260824T211732-page-title-trgm-index\" executed successfully"} +{"level":"info","time":"2026-09-26T07:28:51.974Z","pid":45,"hostname":"66cf0179fc93","context":"DatabaseMigrationService","msg":"Migration \"20260825T022612-oauth\" executed successfully"} +{"level":"info","time":"2026-09-26T07:28:51.974Z","pid":45,"hostname":"66cf0179fc93","context":"DatabaseMigrationService","msg":"Migration \"20260902T121326-siem-destinations\" executed successfully"} +{"level":"info","time":"2026-09-26T07:28:51.974Z","pid":45,"hostname":"66cf0179fc93","context":"DatabaseMigrationService","msg":"Migration \"20260904T171920-public-spaces\" executed successfully"} +{"level":"info","time":"2026-09-26T07:28:52.025Z","pid":45,"hostname":"66cf0179fc93","context":"NestApplication","msg":"Nest application successfully started"} +{"level":"info","time":"2026-09-26T07:28:52.040Z","pid":45,"hostname":"66cf0179fc93","context":"NestApplication","msg":"Listening on http://127.0.0.1:3000 / https://c-docs.enkisfelhom.hu"} + +seed reads back through the front door: True +# S2-restore-window-step1 — 2026-09-26T09:29:20+0200; controller gitea.dooplex.hu/admin/felhom-controller:0.274.0 +pinned={'docmost': 'docmost/docmost:0.96.0', 'docmost-postgres': 'postgres:16-alpine', 'docmost-redis': 'redis:7-alpine'} +installed={"docmost": {"ref": "docmost/docmost:0.96.0", "digest": "sha256:b56947fcfd08aab8fae12a377e1792784786adbf8b96e4281f14ef4fc072685a", "at": "2026-09-26T07:28:42Z"}, "docmost-postgres": {"ref": "postgres:16-alpine", "digest": "sha256:721873c34ceb9f8d8fc265984940dc982404c105f19ad51be9fdc5970a6080ea", "at": "2026-09-26T07:28:42Z"}, "docmost-redis": {"ref": "redis:7-alpine", "digest": "sha256:858f009f9709ce576febc734aa78b8f6d624b82571f9ddb6bda4377c833b3499", "at": "2026-09-26T07:28:42Z"}} +conversion_copy=None +state=running phase=done +== unit /mnt/sys_drive/felhom-data/backups/primary/docmost + manifest.controller_version = "0.274.0" + manifest.created_at = "2026-09-26T07:27:53Z" + manifest.image_pins = ["docmost/docmost:0.96.0@sha256:b56947fcfd08aab8fae12a377e1792784786adbf8b96e4281f14ef4fc072685a", "postgres:16-alpine@sha256:721873c34ceb9f8d8fc265984940dc982404c105f19ad51be9fdc5970a6080ea", "redis:7-alpine@sha256:858f009f9709ce576febc734aa78b8f6d624b82571f9ddb6bda4377c833b3499"] + manifest.db_dumps = ["docmost-postgres.sql"] + manifest.volume_dumps = ["docmost_docmost_postgres_data.tar", "docmost_docmost_redis_data.tar", "docmost_docmost_storage.tar"] + compose/ images: + image: docmost/docmost:0.96.0@sha256:b56947fcfd08aab8fae12a377e1792784786adbf8b96e4281f14ef4fc072685a + image: postgres:16-alpine@sha256:721873c34ceb9f8d8fc265984940dc982404c105f19ad51be9fdc5970a6080ea + image: redis:7-alpine@sha256:858f009f9709ce576febc734aa78b8f6d624b82571f9ddb6bda4377c833b3499 + compose/ postgres mount: + - docmost_postgres_data:/var/lib/postgresql/data + docmost_postgres_data: + mtimes (UTC): + 2026-09-26T07:27:53.7705190140Z 3998 compose/.felhom.yml + 2026-09-26T07:27:53.7715190260Z 447 compose/app.yaml + 2026-09-26T07:27:53.7705190140Z 3321 compose/docker-compose.yml + 2026-09-26T07:25:43.7249236060Z 134715 db-dumps/docmost-postgres.sql + 2026-09-26T07:27:53.7715190260Z 1514 manifest.json + 2026-09-26T07:25:44.9049380830Z 51837440 volume-dumps/docmost_docmost_postgres_data.tar + 2026-09-26T07:25:45.3785498360Z 25088 volume-dumps/docmost_docmost_redis_data.tar + 2026-09-26T07:25:45.7447035310Z 1536 volume-dumps/docmost_docmost_storage.tar + docmost-postgres.sql: Dumped from database version 16.15 + pre-restore-20260926T072557Z-docmost-postgres.sql: Dumped from database version 16.15 +== unit /mnt/felhom-drives/scratch_hdd/backups/secondary/docmost/recovery-unit + manifest.controller_version = "0.274.0" + manifest.created_at = "2026-09-26T07:25:57Z" + manifest.image_pins = ["docmost/docmost:0.95.0", "postgres:16-alpine", "redis:7-alpine"] + manifest.db_dumps = ["docmost-postgres.sql"] + manifest.volume_dumps = ["docmost_docmost_postgres_data.tar", "docmost_docmost_redis_data.tar", "docmost_docmost_storage.tar"] + compose/ images: + image: docmost/docmost:0.95.0 + image: postgres:16-alpine + image: redis:7-alpine + compose/ postgres mount: + - docmost_postgres_data:/var/lib/postgresql/data + docmost_postgres_data: + mtimes (UTC): + 2026-09-26T07:25:57.3060902190Z 6426 compose/.felhom.yml + 2026-09-26T07:25:57.3060902190Z 447 compose/app.yaml + 2026-09-26T07:25:57.3060902190Z 3105 compose/docker-compose.yml + 2026-09-26T07:25:43.7249236060Z 134715 db-dumps/docmost-postgres.sql + 2026-09-26T07:25:57.3078222630Z 1298 manifest.json + 2026-09-26T07:25:44.9049380830Z 51837440 volume-dumps/docmost_docmost_postgres_data.tar + 2026-09-26T07:25:45.3785498360Z 25088 volume-dumps/docmost_docmost_redis_data.tar + 2026-09-26T07:25:45.7447035310Z 1536 volume-dumps/docmost_docmost_storage.tar + docmost-postgres.sql: Dumped from database version 16.15 +== live + compose image: docmost/docmost:0.96.0@sha256:b56947fcfd08aab8fae12a377e1792784786adbf8b96e4281f14ef4fc072685a + compose image: postgres:16-alpine@sha256:721873c34ceb9f8d8fc265984940dc982404c105f19ad51be9fdc5970a6080ea + compose image: redis:7-alpine@sha256:858f009f9709ce576febc734aa78b8f6d624b82571f9ddb6bda4377c833b3499 + PGDATA=/var/lib/postgresql/data PG_VERSION=16 +docmost docmost/docmost:0.96.0 Up 43 seconds (healthy) +docmost-redis redis:7-alpine Up 53 seconds (healthy) +docmost-postgres postgres:16-alpine Up 56 seconds (healthy) + volume docmost_docmost_postgres_data + volume docmost_docmost_redis_data + volume docmost_docmost_storage + pg volume root: +PG_VERSION base global pg_commit_ts pg_dynshmem pg_hba.conf pg_ident.conf pg_logical pg_multixact pg_notify pg_replslot pg_serial pg_snapshots pg_stat pg_stat_tmp pg_subtrans pg_tblspc pg_twophase pg_wal pg_xact postgresql.auto.conf postgresql.conf postmaster.opts postmaster.pid +restore points offered (GET /api/backup/snapshots): 200 [{"time": "2026-09-26T07:27:53Z", "short_id": "helyi", "tier": 1, "drive_label": "Bels\u0151 SSD (rendszer)"}] diff --git a/documentation/audits/version-travel-2026-09-26/A1/S3-update-step2.json b/documentation/audits/version-travel-2026-09-26/A1/S3-update-step2.json new file mode 100644 index 00000000..2ffcb928 --- /dev/null +++ b/documentation/audits/version-travel-2026-09-26/A1/S3-update-step2.json @@ -0,0 +1,75 @@ +{ + "accepted": true, + "http": "202", + "phases": [ + { + "t": 0.0, + "phase": "backing-up", + "label": "Biztons\u00e1gi ment\u00e9s k\u00e9sz\u00fcl a friss\u00edt\u00e9s el\u0151tt\u2026", + "updating": true, + "error": null, + "hold": null + }, + { + "t": 15.4, + "phase": "safety-dump", + "label": "Adatb\u00e1zis pillanatk\u00e9p\u2026", + "updating": true, + "error": null, + "hold": null + }, + { + "t": 17.5, + "phase": "pulling", + "label": "\u00daj verzi\u00f3 let\u00f6lt\u00e9se\u2026", + "updating": true, + "error": null, + "hold": null + }, + { + "t": 18.5, + "phase": "copying", + "label": "Az adatok m\u00e1sol\u00e1sa a friss\u00edt\u00e9s el\u0151tt\u2026", + "updating": true, + "error": null, + "hold": null + }, + { + "t": 20.5, + "phase": "converting", + "label": "Adatb\u00e1zis \u00e1talak\u00edt\u00e1sa", + "updating": true, + "error": null, + "hold": null + }, + { + "t": 27.7, + "phase": "starting", + "label": "Ind\u00edt\u00e1s az \u00faj verzi\u00f3val\u2026", + "updating": true, + "error": null, + "hold": null + }, + { + "t": 39.0, + "phase": "verifying", + "label": "M\u0171k\u00f6d\u00e9s ellen\u0151rz\u00e9se\u2026", + "updating": true, + "error": null, + "hold": null + }, + { + "t": 54.3, + "phase": "done", + "label": "Friss\u00edtve", + "updating": false, + "error": null, + "hold": null + } + ], + "duration_s": 54.4, + "final_phase": "done", + "update_error": null, + "hold_reason": null, + "state": "running" +} \ No newline at end of file diff --git a/documentation/audits/version-travel-2026-09-26/A1/S3a-right-after-step2.txt b/documentation/audits/version-travel-2026-09-26/A1/S3a-right-after-step2.txt new file mode 100644 index 00000000..8943f8b2 --- /dev/null +++ b/documentation/audits/version-travel-2026-09-26/A1/S3a-right-after-step2.txt @@ -0,0 +1,69 @@ +# S3a-right-after-step2 — 2026-09-26T09:30:39+0200; controller gitea.dooplex.hu/admin/felhom-controller:0.274.0 +pinned={'docmost': 'docmost/docmost:0.96.0', 'docmost-postgres': 'postgres:18-alpine', 'docmost-redis': 'redis:7-alpine'} +installed={"docmost": {"ref": "docmost/docmost:0.96.0", "digest": "sha256:b56947fcfd08aab8fae12a377e1792784786adbf8b96e4281f14ef4fc072685a", "at": "2026-09-26T07:28:42Z"}, "docmost-postgres": {"ref": "postgres:18-alpine", "digest": "sha256:77f585114c32fbca283dc835b0596f4e52b51b4c6662d7810b2f4084f60a1873", "at": "2026-09-26T07:30:39Z"}, "docmost-redis": {"ref": "redis:7-alpine", "digest": "sha256:858f009f9709ce576febc734aa78b8f6d624b82571f9ddb6bda4377c833b3499", "at": "2026-09-26T07:28:42Z"}} +conversion_copy={'volume': 'docmost_docmost_postgres_data', 'copy': 'docmost_docmost_postgres_data.pre-update-20260926T073003Z', 'at': '2026-09-26T07:30:39Z', 'from': 16, 'to': 18} +state=running phase=done +== unit /mnt/sys_drive/felhom-data/backups/primary/docmost + manifest.controller_version = "0.274.0" + manifest.created_at = "2026-09-26T07:27:53Z" + manifest.image_pins = ["docmost/docmost:0.96.0@sha256:b56947fcfd08aab8fae12a377e1792784786adbf8b96e4281f14ef4fc072685a", "postgres:16-alpine@sha256:721873c34ceb9f8d8fc265984940dc982404c105f19ad51be9fdc5970a6080ea", "redis:7-alpine@sha256:858f009f9709ce576febc734aa78b8f6d624b82571f9ddb6bda4377c833b3499"] + manifest.db_dumps = ["docmost-postgres.sql"] + manifest.volume_dumps = ["docmost_docmost_postgres_data.tar", "docmost_docmost_redis_data.tar", "docmost_docmost_storage.tar"] + compose/ images: + image: docmost/docmost:0.96.0@sha256:b56947fcfd08aab8fae12a377e1792784786adbf8b96e4281f14ef4fc072685a + image: postgres:16-alpine@sha256:721873c34ceb9f8d8fc265984940dc982404c105f19ad51be9fdc5970a6080ea + image: redis:7-alpine@sha256:858f009f9709ce576febc734aa78b8f6d624b82571f9ddb6bda4377c833b3499 + compose/ postgres mount: + - docmost_postgres_data:/var/lib/postgresql/data + docmost_postgres_data: + mtimes (UTC): + 2026-09-26T07:27:53.7705190140Z 3998 compose/.felhom.yml + 2026-09-26T07:27:53.7715190260Z 447 compose/app.yaml + 2026-09-26T07:27:53.7705190140Z 3321 compose/docker-compose.yml + 2026-09-26T07:29:45.4578891810Z 154012 db-dumps/docmost-postgres.sql + 2026-09-26T07:29:59.6671961880Z 1514 manifest.json + 2026-09-26T07:29:47.5169144410Z 70258176 volume-dumps/docmost_docmost_postgres_data.tar + 2026-09-26T07:29:48.0792382720Z 58880 volume-dumps/docmost_docmost_redis_data.tar + 2026-09-26T07:29:47.0539087610Z 1536 volume-dumps/docmost_docmost_storage.tar + docmost-postgres.sql: Dumped from database version 16.15 + pre-restore-20260926T072557Z-docmost-postgres.sql: Dumped from database version 16.15 + pre-restore-20260926T073000Z-docmost-postgres.sql: Dumped from database version 16.15 +== unit /mnt/felhom-drives/scratch_hdd/backups/secondary/docmost/recovery-unit + manifest.controller_version = "0.274.0" + manifest.created_at = "2026-09-26T07:27:53Z" + manifest.image_pins = ["docmost/docmost:0.96.0@sha256:b56947fcfd08aab8fae12a377e1792784786adbf8b96e4281f14ef4fc072685a", "postgres:16-alpine@sha256:721873c34ceb9f8d8fc265984940dc982404c105f19ad51be9fdc5970a6080ea", "redis:7-alpine@sha256:858f009f9709ce576febc734aa78b8f6d624b82571f9ddb6bda4377c833b3499"] + manifest.db_dumps = ["docmost-postgres.sql"] + manifest.volume_dumps = ["docmost_docmost_postgres_data.tar", "docmost_docmost_redis_data.tar", "docmost_docmost_storage.tar"] + compose/ images: + image: docmost/docmost:0.96.0@sha256:b56947fcfd08aab8fae12a377e1792784786adbf8b96e4281f14ef4fc072685a + image: postgres:16-alpine@sha256:721873c34ceb9f8d8fc265984940dc982404c105f19ad51be9fdc5970a6080ea + image: redis:7-alpine@sha256:858f009f9709ce576febc734aa78b8f6d624b82571f9ddb6bda4377c833b3499 + compose/ postgres mount: + - docmost_postgres_data:/var/lib/postgresql/data + docmost_postgres_data: + mtimes (UTC): + 2026-09-26T07:27:53.7705190140Z 3998 compose/.felhom.yml + 2026-09-26T07:27:53.7715190260Z 447 compose/app.yaml + 2026-09-26T07:27:53.7705190140Z 3321 compose/docker-compose.yml + 2026-09-26T07:29:45.4578891810Z 154012 db-dumps/docmost-postgres.sql + 2026-09-26T07:29:59.6671961880Z 1514 manifest.json + 2026-09-26T07:29:47.5169144410Z 70258176 volume-dumps/docmost_docmost_postgres_data.tar + 2026-09-26T07:29:48.0792382720Z 58880 volume-dumps/docmost_docmost_redis_data.tar + 2026-09-26T07:29:47.0539087610Z 1536 volume-dumps/docmost_docmost_storage.tar + docmost-postgres.sql: Dumped from database version 16.15 + pre-restore-20260926T072557Z-docmost-postgres.sql: Dumped from database version 16.15 +== live + compose image: docmost/docmost:0.96.0@sha256:b56947fcfd08aab8fae12a377e1792784786adbf8b96e4281f14ef4fc072685a + compose image: postgres:18-alpine@sha256:77f585114c32fbca283dc835b0596f4e52b51b4c6662d7810b2f4084f60a1873 + compose image: redis:7-alpine@sha256:858f009f9709ce576febc734aa78b8f6d624b82571f9ddb6bda4377c833b3499 + PGDATA=/var/lib/postgresql/18/docker PG_VERSION=18 +docmost docmost/docmost:0.96.0 Up 21 seconds (healthy) +docmost-postgres postgres:18-alpine Up 37 seconds (healthy) +docmost-redis redis:7-alpine Up 32 seconds (healthy) + volume docmost_docmost_postgres_data + volume docmost_docmost_postgres_data.pre-update-20260926T073003Z + volume docmost_docmost_redis_data + volume docmost_docmost_storage + pg volume root: +18 +restore points offered (GET /api/backup/snapshots): 200 [{"time": "2026-09-26T07:30:00Z", "short_id": "helyi", "tier": 1, "drive_label": "Bels\u0151 SSD (rendszer)"}] diff --git a/documentation/audits/version-travel-2026-09-26/A1/S3b-after-refresh-step2.txt b/documentation/audits/version-travel-2026-09-26/A1/S3b-after-refresh-step2.txt new file mode 100644 index 00000000..75e345db --- /dev/null +++ b/documentation/audits/version-travel-2026-09-26/A1/S3b-after-refresh-step2.txt @@ -0,0 +1,145 @@ +# S3b-after-refresh-step2 — 2026-09-26T09:41:18+0200; controller gitea.dooplex.hu/admin/felhom-controller:0.274.0 +pinned={'docmost': 'docmost/docmost:0.96.0', 'docmost-postgres': 'postgres:18-alpine', 'docmost-redis': 'redis:7-alpine'} +installed={"docmost": {"ref": "docmost/docmost:0.96.0", "digest": "sha256:b56947fcfd08aab8fae12a377e1792784786adbf8b96e4281f14ef4fc072685a", "at": "2026-09-26T07:28:42Z"}, "docmost-postgres": {"ref": "postgres:18-alpine", "digest": "sha256:77f585114c32fbca283dc835b0596f4e52b51b4c6662d7810b2f4084f60a1873", "at": "2026-09-26T07:30:39Z"}, "docmost-redis": {"ref": "redis:7-alpine", "digest": "sha256:858f009f9709ce576febc734aa78b8f6d624b82571f9ddb6bda4377c833b3499", "at": "2026-09-26T07:28:42Z"}} +conversion_copy={'volume': 'docmost_docmost_postgres_data', 'copy': 'docmost_docmost_postgres_data.pre-update-20260926T073003Z', 'at': '2026-09-26T07:30:39Z', 'from': 16, 'to': 18} +state=running phase=done +# S3b-after-refresh-step2 — 2026-09-26T09:41:18+0200; controller gitea.dooplex.hu/admin/felhom-controller:0.274.0 +pinned={'docmost': 'docmost/docmost:0.96.0', 'docmost-postgres': 'postgres:18-alpine', 'docmost-redis': 'redis:7-alpine'} +installed={"docmost": {"ref": "docmost/docmost:0.96.0", "digest": "sha256:b56947fcfd08aab8fae12a377e1792784786adbf8b96e4281f14ef4fc072685a", "at": "2026-09-26T07:28:42Z"}, "docmost-postgres": {"ref": "postgres:18-alpine", "digest": "sha256:77f585114c32fbca283dc835b0596f4e52b51b4c6662d7810b2f4084f60a1873", "at": "2026-09-26T07:30:39Z"}, "docmost-redis": {"ref": "redis:7-alpine", "digest": "sha256:858f009f9709ce576febc734aa78b8f6d624b82571f9ddb6bda4377c833b3499", "at": "2026-09-26T07:28:42Z"}} +conversion_copy={'volume': 'docmost_docmost_postgres_data', 'copy': 'docmost_docmost_postgres_data.pre-update-20260926T073003Z', 'at': '2026-09-26T07:30:39Z', 'from': 16, 'to': 18} +state=running phase=done +== unit /mnt/sys_drive/felhom-data/backups/primary/docmost + manifest.controller_version = "0.274.0" + manifest.created_at = "2026-09-26T07:32:53Z" + manifest.image_pins = ["docmost/docmost:0.96.0@sha256:b56947fcfd08aab8fae12a377e1792784786adbf8b96e4281f14ef4fc072685a", "postgres:18-alpine@sha256:77f585114c32fbca283dc835b0596f4e52b51b4c6662d7810b2f4084f60a1873", "redis:7-alpine@sha256:858f009f9709ce576febc734aa78b8f6d624b82571f9ddb6bda4377c833b3499"] + manifest.db_dumps = ["docmost-postgres.sql"] + manifest.volume_dumps = ["docmost_docmost_postgres_data.tar", "docmost_docmost_redis_data.tar", "docmost_docmost_storage.tar"] + compose/ images: + image: docmost/docmost:0.96.0@sha256:b56947fcfd08aab8fae12a377e1792784786adbf8b96e4281f14ef4fc072685a + image: postgres:18-alpine@sha256:77f585114c32fbca283dc835b0596f4e52b51b4c6662d7810b2f4084f60a1873 + image: redis:7-alpine@sha256:858f009f9709ce576febc734aa78b8f6d624b82571f9ddb6bda4377c833b3499 + compose/ postgres mount: + - docmost_postgres_data:/var/lib/postgresql + docmost_postgres_data: + mtimes (UTC): + 2026-09-26T07:32:53.8191999810Z 6426 compose/.felhom.yml + 2026-09-26T07:32:53.8201999930Z 447 compose/app.yaml + 2026-09-26T07:32:53.8191999810Z 3545 compose/docker-compose.yml + 2026-09-26T07:29:45.4578891810Z 154012 db-dumps/docmost-postgres.sql + 2026-09-26T07:32:53.8201999930Z 1514 manifest.json + 2026-09-26T07:29:47.5169144410Z 70258176 volume-dumps/docmost_docmost_postgres_data.tar + 2026-09-26T07:29:48.0792382720Z 58880 volume-dumps/docmost_docmost_redis_data.tar + 2026-09-26T07:29:47.0539087610Z 1536 volume-dumps/docmost_docmost_storage.tar + docmost-postgres.sql: Dumped from database version 16.15 + pre-restore-20260926T072557Z-docmost-postgres.sql: Dumped from database version 16.15 + pre-restore-20260926T073000Z-docmost-postgres.sql: Dumped from database version 16.15 +== unit /mnt/felhom-drives/scratch_hdd/backups/secondary/docmost/recovery-unit + manifest.controller_version = "0.274.0" + manifest.created_at = "2026-09-26T07:27:53Z" + manifest.image_pins = ["docmost/docmost:0.96.0@sha256:b56947fcfd08aab8fae12a377e1792784786adbf8b96e4281f14ef4fc072685a", "postgres:16-alpine@sha256:721873c34ceb9f8d8fc265984940dc982404c105f19ad51be9fdc5970a6080ea", "redis:7-alpine@sha256:858f009f9709ce576febc734aa78b8f6d624b82571f9ddb6bda4377c833b3499"] + manifest.db_dumps = ["docmost-postgres.sql"] + manifest.volume_dumps = ["docmost_docmost_postgres_data.tar", "docmost_docmost_redis_data.tar", "docmost_docmost_storage.tar"] + compose/ images: + image: docmost/docmost:0.96.0@sha256:b56947fcfd08aab8fae12a377e1792784786adbf8b96e4281f14ef4fc072685a + image: postgres:16-alpine@sha256:721873c34ceb9f8d8fc265984940dc982404c105f19ad51be9fdc5970a6080ea + image: redis:7-alpine@sha256:858f009f9709ce576febc734aa78b8f6d624b82571f9ddb6bda4377c833b3499 + compose/ postgres mount: + - docmost_postgres_data:/var/lib/postgresql/data + docmost_postgres_data: + mtimes (UTC): + 2026-09-26T07:27:53.7705190140Z 3998 compose/.felhom.yml + 2026-09-26T07:27:53.7715190260Z 447 compose/app.yaml + 2026-09-26T07:27:53.7705190140Z 3321 compose/docker-compose.yml + 2026-09-26T07:29:45.4578891810Z 154012 db-dumps/docmost-postgres.sql + 2026-09-26T07:29:59.6671961880Z 1514 manifest.json + 2026-09-26T07:29:47.5169144410Z 70258176 volume-dumps/docmost_docmost_postgres_data.tar + 2026-09-26T07:29:48.0792382720Z 58880 volume-dumps/docmost_docmost_redis_data.tar + 2026-09-26T07:29:47.0539087610Z 1536 volume-dumps/docmost_docmost_storage.tar + docmost-postgres.sql: Dumped from database version 16.15 + pre-restore-20260926T072557Z-docmost-postgres.sql: Dumped from database version 16.15 +== live + compose image: docmost/docmost:0.96.0@sha256:b56947fcfd08aab8fae12a377e1792784786adbf8b96e4281f14ef4fc072685a + compose image: postgres:18-alpine@sha256:77f585114c32fbca283dc835b0596f4e52b51b4c6662d7810b2f4084f60a1873 + compose image: redis:7-alpine@sha256:858f009f9709ce576febc734aa78b8f6d624b82571f9ddb6bda4377c833b3499 + PGDATA=/var/lib/postgresql/18/docker PG_VERSION=18 +docmost docmost/docmost:0.96.0 Up 10 minutes (healthy) +docmost-postgres postgres:18-alpine Up 11 minutes (healthy) +docmost-redis redis:7-alpine Up 11 minutes (healthy) + volume docmost_docmost_postgres_data + volume docmost_docmost_postgres_data.pre-update-20260926T073003Z + volume docmost_docmost_redis_data + volume docmost_docmost_storage + pg volume root: +18 +== unit /mnt/sys_drive/felhom-data/backups/primary/docmost + manifest.controller_version = "0.274.0" + manifest.created_at = "2026-09-26T07:32:53Z" + manifest.image_pins = ["docmost/docmost:0.96.0@sha256:b56947fcfd08aab8fae12a377e1792784786adbf8b96e4281f14ef4fc072685a", "postgres:18-alpine@sha256:77f585114c32fbca283dc835b0596f4e52b51b4c6662d7810b2f4084f60a1873", "redis:7-alpine@sha256:858f009f9709ce576febc734aa78b8f6d624b82571f9ddb6bda4377c833b3499"] + manifest.db_dumps = ["docmost-postgres.sql"] + manifest.volume_dumps = ["docmost_docmost_postgres_data.tar", "docmost_docmost_redis_data.tar", "docmost_docmost_storage.tar"] + compose/ images: + image: docmost/docmost:0.96.0@sha256:b56947fcfd08aab8fae12a377e1792784786adbf8b96e4281f14ef4fc072685a + image: postgres:18-alpine@sha256:77f585114c32fbca283dc835b0596f4e52b51b4c6662d7810b2f4084f60a1873 + image: redis:7-alpine@sha256:858f009f9709ce576febc734aa78b8f6d624b82571f9ddb6bda4377c833b3499 + compose/ postgres mount: + - docmost_postgres_data:/var/lib/postgresql + docmost_postgres_data: + mtimes (UTC): + 2026-09-26T07:32:53.8191999810Z 6426 compose/.felhom.yml + 2026-09-26T07:32:53.8201999930Z 447 compose/app.yaml + 2026-09-26T07:32:53.8191999810Z 3545 compose/docker-compose.yml + 2026-09-26T07:29:45.4578891810Z 154012 db-dumps/docmost-postgres.sql + 2026-09-26T07:32:53.8201999930Z 1514 manifest.json + 2026-09-26T07:29:47.5169144410Z 70258176 volume-dumps/docmost_docmost_postgres_data.tar + 2026-09-26T07:29:48.0792382720Z 58880 volume-dumps/docmost_docmost_redis_data.tar + 2026-09-26T07:29:47.0539087610Z 1536 volume-dumps/docmost_docmost_storage.tar + docmost-postgres.sql: Dumped from database version 16.15 + pre-restore-20260926T072557Z-docmost-postgres.sql: Dumped from database version 16.15 + pre-restore-20260926T073000Z-docmost-postgres.sql: Dumped from database version 16.15 +== unit /mnt/felhom-drives/scratch_hdd/backups/secondary/docmost/recovery-unit + manifest.controller_version = "0.274.0" + manifest.created_at = "2026-09-26T07:27:53Z" + manifest.image_pins = ["docmost/docmost:0.96.0@sha256:b56947fcfd08aab8fae12a377e1792784786adbf8b96e4281f14ef4fc072685a", "postgres:16-alpine@sha256:721873c34ceb9f8d8fc265984940dc982404c105f19ad51be9fdc5970a6080ea", "redis:7-alpine@sha256:858f009f9709ce576febc734aa78b8f6d624b82571f9ddb6bda4377c833b3499"] + manifest.db_dumps = ["docmost-postgres.sql"] + manifest.volume_dumps = ["docmost_docmost_postgres_data.tar", "docmost_docmost_redis_data.tar", "docmost_docmost_storage.tar"] + compose/ images: + image: docmost/docmost:0.96.0@sha256:b56947fcfd08aab8fae12a377e1792784786adbf8b96e4281f14ef4fc072685a + image: postgres:16-alpine@sha256:721873c34ceb9f8d8fc265984940dc982404c105f19ad51be9fdc5970a6080ea + image: redis:7-alpine@sha256:858f009f9709ce576febc734aa78b8f6d624b82571f9ddb6bda4377c833b3499 + compose/ postgres mount: + - docmost_postgres_data:/var/lib/postgresql/data + docmost_postgres_data: + mtimes (UTC): + 2026-09-26T07:27:53.7705190140Z 3998 compose/.felhom.yml + 2026-09-26T07:27:53.7715190260Z 447 compose/app.yaml + 2026-09-26T07:27:53.7705190140Z 3321 compose/docker-compose.yml + 2026-09-26T07:29:45.4578891810Z 154012 db-dumps/docmost-postgres.sql + 2026-09-26T07:29:59.6671961880Z 1514 manifest.json + 2026-09-26T07:29:47.5169144410Z 70258176 volume-dumps/docmost_docmost_postgres_data.tar + 2026-09-26T07:29:48.0792382720Z 58880 volume-dumps/docmost_docmost_redis_data.tar + 2026-09-26T07:29:47.0539087610Z 1536 volume-dumps/docmost_docmost_storage.tar + docmost-postgres.sql: Dumped from database version 16.15 + pre-restore-20260926T072557Z-docmost-postgres.sql: Dumped from database version 16.15 +== live + compose image: docmost/docmost:0.96.0@sha256:b56947fcfd08aab8fae12a377e1792784786adbf8b96e4281f14ef4fc072685a + compose image: postgres:18-alpine@sha256:77f585114c32fbca283dc835b0596f4e52b51b4c6662d7810b2f4084f60a1873 + compose image: redis:7-alpine@sha256:858f009f9709ce576febc734aa78b8f6d624b82571f9ddb6bda4377c833b3499 + PGDATA=/var/lib/postgresql/18/docker PG_VERSION=18 +docmost docmost/docmost:0.96.0 Up 10 minutes (healthy) +docmost-postgres postgres:18-alpine Up 11 minutes (healthy) +docmost-redis redis:7-alpine Up 11 minutes (healthy) + volume docmost_docmost_postgres_data + volume docmost_docmost_postgres_data.pre-update-20260926T073003Z + volume docmost_docmost_redis_data + volume docmost_docmost_storage + pg volume root: +18 +restore points offered (GET /api/backup/snapshots): 200 [{"time": "2026-09-26T07:32:53Z", "short_id": "helyi", "tier": 1, "drive_label": "Bels\u0151 SSD (rendszer)"}] +restore points offered (GET /api/backup/snapshots): 200 [{"time": "2026-09-26T07:32:53Z", "short_id": "helyi", "tier": 1, "drive_label": "Bels\u0151 SSD (rendszer)"}] +2026/09/26 07:25:43 update_guard.go:248: [DEBUG] [backup] update precondition for docmost: no Tier-2 copy (nincs másodlagos fájlmásolat ehhez az alkalmazáshoz) +2026/09/26 07:25:57 recovery_unit.go:235: [INFO] [backup] Recovery unit captured for docmost → /mnt/sys_drive/felhom-data/backups/primary/docmost (images=3, secrets-referenced=2, data_keys=0, portable-carried=2/2, withheld=0) +2026/09/26 07:25:57 update.go:831: [INFO] [stacks] update docmost: precondition met after the backup — Tier 2 (second drive) copy from 2026-09-26T07:25:57Z +2026/09/26 07:27:53 recovery_unit.go:235: [INFO] [backup] Recovery unit captured for docmost → /mnt/sys_drive/felhom-data/backups/primary/docmost (images=3, secrets-referenced=2, data_keys=0, portable-carried=2/2, withheld=0) +2026/09/26 07:29:59 update.go:831: [INFO] [stacks] update docmost: precondition met after the backup — Tier 2 (second drive) copy from 2026-09-26T07:29:59Z +2026/09/26 07:30:39 update.go:1015: [INFO] [stacks] update docmost: KEEPING the pre-conversion datadir copy docmost_docmost_postgres_data.pre-update-20260926T073003Z (PostgreSQL 16) until a backup of the converted app is proven +2026/09/26 07:32:53 recovery_unit.go:235: [INFO] [backup] Recovery unit captured for docmost → /mnt/sys_drive/felhom-data/backups/primary/docmost (images=3, secrets-referenced=2, data_keys=0, portable-carried=2/2, withheld=0) diff --git a/documentation/audits/version-travel-2026-09-26/A1/S4-restore-window-step2.txt b/documentation/audits/version-travel-2026-09-26/A1/S4-restore-window-step2.txt new file mode 100644 index 00000000..3b0b9f33 --- /dev/null +++ b/documentation/audits/version-travel-2026-09-26/A1/S4-restore-window-step2.txt @@ -0,0 +1,244 @@ +# S4-restore-window-step2 — restore pressed at 2026-09-26T07:41:33Z (own unit, snapshot helyi) +{"ok": true, "snapshot_id": "helyi", "snapshots": [{"time": "2026-09-26T07:32:53Z", "short_id": "helyi", "tier": 1, "drive_label": "Bels\u0151 SSD (rendszer)"}], "http": "HTTP/2 302", "location": ["location: /backups/restore?flash=flash.restore.started"], "seconds": 36.5, "state_after": "restarting", "hold_after": null} +controller lines: +2026/09/26 07:41:34 handlers.go:1707: [WARN] [web] Restore requested (async): stack=docmost, snapshot=helyi from 172.18.0.6:42900 +2026/09/26 07:41:34 restore_unit.go:383: [INFO] [backup] Restoring docmost from recovery unit /mnt/sys_drive/felhom-data/backups/primary/docmost: images=3, secrets recovered=2/2, data_keys=0 +2026/09/26 07:41:34 manager.go:1305: [INFO] [stacks] Stopping stack: docmost +2026/09/26 07:41:35 manager.go:1314: [INFO] [stacks] Stack docmost stopped successfully (took 0.8s) +2026/09/26 07:41:35 restore.go:152: [INFO] [backup] Restoring Docker volume docmost_docmost_postgres_data for docmost +2026/09/26 07:41:36 restore.go:152: [INFO] [backup] Restoring Docker volume docmost_docmost_redis_data for docmost +2026/09/26 07:41:36 restore.go:152: [INFO] [backup] Restoring Docker volume docmost_docmost_storage for docmost +2026/09/26 07:41:36 restore.go:195: [INFO] [backup] Restored 3 Docker volume(s) for docmost +2026/09/26 07:41:36 [INFO] [stacks] SaveAppConfig: saved config for docmost +2026/09/26 07:41:36 deploy.go:708: [INFO] [stacks] Redeploying docmost from recovery unit with 4 env vars +2026/09/26 07:41:36 [INFO] [stacks] SaveAppConfig: saved config for docmost +2026/09/26 07:41:36 pin.go:93: [INFO] [stacks] pin docmost: docmost=docmost/docmost:0.96.0, docmost-postgres=postgres:18-alpine, docmost-redis=redis:7-alpine +2026/09/26 07:41:36 manager.go:1269: [INFO] [stacks] Starting stack docmost services only: [docmost-postgres] +2026/09/26 07:41:37 manager.go:1280: [INFO] [stacks] Stack docmost services [docmost-postgres] started (took 0.4s) +2026/09/26 07:41:37 restore_db.go:87: [INFO] [backup] Restore docmost: replaying DB dump into docmost-postgres (postgres) +2026/09/26 07:41:53 main.go:3724: [INFO] [deadapp] docmost crossed the crash_loop threshold but a backup or restore is running (single-flight held) — NOT stopped +2026/09/26 07:42:08 restore_unit.go:450: [ERROR] [backup] DB re-import for docmost: importing postgres dump for docmost: waiting for docmost-postgres (postgres) readiness: timeout after 30s +2026/09/26 07:42:08 manager.go:1216: [INFO] [stacks] Starting stack: docmost +2026/09/26 07:42:09 manager.go:1491: [ERROR] [stacks] Command failed: docker compose up -d (in /opt/docker/stacks/docmost) — exit code 1 (took 0.9s) +2026/09/26 07:42:09 manager.go:1497: [ERROR] [stacks] stderr: Container docmost-redis Creating + Container docmost-redis Created + Container docmost Creating + Container docmost Created + Container docmost-postgres Starting + Container docmost-redis Starting + Container docmost-postgres Started + Container docmost-redis Started + Container docmost-postgres Waiting + Container docmost-redis Waiting + Container docmost-postgres Error dependency docmost-postgres failed to start +dependency failed to start: container docmost-postgres is unhealthy +2026/09/26 07:42:09 manager.go:1227: [ERROR] [stacks] Stack docmost start failed after 0.9s: exit code 1 +stderr: Container docmost-redis Creating + Container docmost-redis Created + Container docmost Creating + Container docmost Created + Container docmost-postgres Starting + Container docmost-redis Starting + Container docmost-postgres Started + Container docmost-redis Started + Container docmost-postgres Waiting + Container docmost-redis Waiting + Container docmost-postgres Error dependency docmost-postgres failed to start +dependency failed to start: container docmost-postgres is unhealthy +2026/09/26 07:42:09 handlers.go:1715: [ERROR] [web] Restore failed (async): stack=docmost: starting docmost after restore from unit: starting stack docmost: exit code 1 +stderr: Container docmost-redis Creating + Container docmost-redis Created + Container docmost Creating + Container docmost Created + Container docmost-postgres Starting + Container docmost-redis Starting + Container docmost-postgres Started + Container docmost-redis Started + Container docmost-postgres Waiting + Container docmost-redis Waiting + Container docmost-postgres Error dependency docmost-postgres failed to start +dependency failed to start: container docmost-postgres is unhealthy + +docmost-postgres log (tail): + major-version-specific directory names). This better reflects how + PostgreSQL itself works, and how upgrades are to be performed. + + See also https://github.com/docker-library/postgres/pull/1259 + + Counter to that, there appears to be PostgreSQL data in: + /var/lib/postgresql + + This is usually the result of upgrading the Docker image without + upgrading the underlying database using "pg_upgrade" (which requires both + versions). + + The suggested container configuration for 18+ is to place a single mount + at /var/lib/postgresql which will then place PostgreSQL data in a + subdirectory, allowing usage of "pg_upgrade --link" without mount point + boundary issues. + + See https://github.com/docker-library/postgres/issues/37 for a (long) + discussion around this process, and suggestions for how to do so. +Error: in 18+, these Docker images are configured to store database data in a + format which is compatible with "pg_ctlcluster" (specifically, using + major-version-specific directory names). This better reflects how + PostgreSQL itself works, and how upgrades are to be performed. + + See also https://github.com/docker-library/postgres/pull/1259 + + Counter to that, there appears to be PostgreSQL data in: + /var/lib/postgresql + + This is usually the result of upgrading the Docker image without + upgrading the underlying database using "pg_upgrade" (which requires both + versions). + + The suggested container configuration for 18+ is to place a single mount + at /var/lib/postgresql which will then place PostgreSQL data in a + subdirectory, allowing usage of "pg_upgrade --link" without mount point + boundary issues. + + See https://github.com/docker-library/postgres/issues/37 for a (long) + discussion around this process, and suggestions for how to do so. + +docmost log (tail): + +seed reads back through the front door: False +# S4-restore-window-step2 — 2026-09-26T09:42:34+0200; controller gitea.dooplex.hu/admin/felhom-controller:0.274.0 +pinned={'docmost': 'docmost/docmost:0.96.0', 'docmost-postgres': 'postgres:18-alpine', 'docmost-redis': 'redis:7-alpine'} +installed=null +conversion_copy=None +state=degraded phase=done +== unit /mnt/sys_drive/felhom-data/backups/primary/docmost + manifest.controller_version = "0.274.0" + manifest.created_at = "2026-09-26T07:32:53Z" + manifest.image_pins = ["docmost/docmost:0.96.0@sha256:b56947fcfd08aab8fae12a377e1792784786adbf8b96e4281f14ef4fc072685a", "postgres:18-alpine@sha256:77f585114c32fbca283dc835b0596f4e52b51b4c6662d7810b2f4084f60a1873", "redis:7-alpine@sha256:858f009f9709ce576febc734aa78b8f6d624b82571f9ddb6bda4377c833b3499"] + manifest.db_dumps = ["docmost-postgres.sql"] + manifest.volume_dumps = ["docmost_docmost_postgres_data.tar", "docmost_docmost_redis_data.tar", "docmost_docmost_storage.tar"] + compose/ images: + image: docmost/docmost:0.96.0@sha256:b56947fcfd08aab8fae12a377e1792784786adbf8b96e4281f14ef4fc072685a + image: postgres:18-alpine@sha256:77f585114c32fbca283dc835b0596f4e52b51b4c6662d7810b2f4084f60a1873 + image: redis:7-alpine@sha256:858f009f9709ce576febc734aa78b8f6d624b82571f9ddb6bda4377c833b3499 + compose/ postgres mount: + - docmost_postgres_data:/var/lib/postgresql + docmost_postgres_data: + mtimes (UTC): + 2026-09-26T07:32:53.8191999810Z 6426 compose/.felhom.yml + 2026-09-26T07:32:53.8201999930Z 447 compose/app.yaml + 2026-09-26T07:32:53.8191999810Z 3545 compose/docker-compose.yml + 2026-09-26T07:29:45.4578891810Z 154012 db-dumps/docmost-postgres.sql + 2026-09-26T07:32:53.8201999930Z 1514 manifest.json + 2026-09-26T07:29:47.5169144410Z 70258176 volume-dumps/docmost_docmost_postgres_data.tar + 2026-09-26T07:29:48.0792382720Z 58880 volume-dumps/docmost_docmost_redis_data.tar + 2026-09-26T07:29:47.0539087610Z 1536 volume-dumps/docmost_docmost_storage.tar + docmost-postgres.sql: Dumped from database version 16.15 + pre-restore-20260926T072557Z-docmost-postgres.sql: Dumped from database version 16.15 + pre-restore-20260926T073000Z-docmost-postgres.sql: Dumped from database version 16.15 +== unit /mnt/felhom-drives/scratch_hdd/backups/secondary/docmost/recovery-unit + manifest.controller_version = "0.274.0" + manifest.created_at = "2026-09-26T07:27:53Z" + manifest.image_pins = ["docmost/docmost:0.96.0@sha256:b56947fcfd08aab8fae12a377e1792784786adbf8b96e4281f14ef4fc072685a", "postgres:16-alpine@sha256:721873c34ceb9f8d8fc265984940dc982404c105f19ad51be9fdc5970a6080ea", "redis:7-alpine@sha256:858f009f9709ce576febc734aa78b8f6d624b82571f9ddb6bda4377c833b3499"] + manifest.db_dumps = ["docmost-postgres.sql"] + manifest.volume_dumps = ["docmost_docmost_postgres_data.tar", "docmost_docmost_redis_data.tar", "docmost_docmost_storage.tar"] + compose/ images: + image: docmost/docmost:0.96.0@sha256:b56947fcfd08aab8fae12a377e1792784786adbf8b96e4281f14ef4fc072685a + image: postgres:16-alpine@sha256:721873c34ceb9f8d8fc265984940dc982404c105f19ad51be9fdc5970a6080ea + image: redis:7-alpine@sha256:858f009f9709ce576febc734aa78b8f6d624b82571f9ddb6bda4377c833b3499 + compose/ postgres mount: + - docmost_postgres_data:/var/lib/postgresql/data + docmost_postgres_data: + mtimes (UTC): + 2026-09-26T07:27:53.7705190140Z 3998 compose/.felhom.yml + 2026-09-26T07:27:53.7715190260Z 447 compose/app.yaml + 2026-09-26T07:27:53.7705190140Z 3321 compose/docker-compose.yml + 2026-09-26T07:29:45.4578891810Z 154012 db-dumps/docmost-postgres.sql + 2026-09-26T07:29:59.6671961880Z 1514 manifest.json + 2026-09-26T07:29:47.5169144410Z 70258176 volume-dumps/docmost_docmost_postgres_data.tar + 2026-09-26T07:29:48.0792382720Z 58880 volume-dumps/docmost_docmost_redis_data.tar + 2026-09-26T07:29:47.0539087610Z 1536 volume-dumps/docmost_docmost_storage.tar + docmost-postgres.sql: Dumped from database version 16.15 + pre-restore-20260926T072557Z-docmost-postgres.sql: Dumped from database version 16.15 +== live + compose image: docmost/docmost:0.96.0@sha256:b56947fcfd08aab8fae12a377e1792784786adbf8b96e4281f14ef4fc072685a + compose image: postgres:18-alpine@sha256:77f585114c32fbca283dc835b0596f4e52b51b4c6662d7810b2f4084f60a1873 + compose image: redis:7-alpine@sha256:858f009f9709ce576febc734aa78b8f6d624b82571f9ddb6bda4377c833b3499 +Error response from daemon: Container d38697606a1e60ebffa27adc7e262b04d6690fd593c2fc02035d6bcb1fcb83e5 is restarting, wait until the container is running +docmost docmost/docmost:0.96.0 Created +docmost-redis redis:7-alpine Up 30 seconds (healthy) +docmost-postgres postgres:18-alpine Restarting (1) 8 seconds ago + volume docmost_docmost_postgres_data + volume docmost_docmost_postgres_data.pre-update-20260926T073003Z + volume docmost_docmost_redis_data + volume docmost_docmost_storage + pg volume root: +18 PG_VERSION base global pg_commit_ts pg_dynshmem pg_hba.conf pg_ident.conf pg_logical pg_multixact pg_notify pg_replslot pg_serial pg_snapshots pg_stat pg_stat_tmp pg_subtrans pg_tblspc pg_twophase pg_wal pg_xact postgresql.auto.conf postgresql.conf postmaster.opts +restore points offered (GET /api/backup/snapshots): 200 [{"time": "2026-09-26T07:32:53Z", "short_id": "helyi", "tier": 1, "drive_label": "Bels\u0151 SSD (rendszer)"}] +# S4-restore-window-step2 — 2026-09-26T09:42:50+0200; controller gitea.dooplex.hu/admin/felhom-controller:0.274.0 +pinned={'docmost': 'docmost/docmost:0.96.0', 'docmost-postgres': 'postgres:18-alpine', 'docmost-redis': 'redis:7-alpine'} +installed=null +conversion_copy=None +state=degraded phase=done +== unit /mnt/sys_drive/felhom-data/backups/primary/docmost + manifest.controller_version = "0.274.0" + manifest.created_at = "2026-09-26T07:32:53Z" + manifest.image_pins = ["docmost/docmost:0.96.0@sha256:b56947fcfd08aab8fae12a377e1792784786adbf8b96e4281f14ef4fc072685a", "postgres:18-alpine@sha256:77f585114c32fbca283dc835b0596f4e52b51b4c6662d7810b2f4084f60a1873", "redis:7-alpine@sha256:858f009f9709ce576febc734aa78b8f6d624b82571f9ddb6bda4377c833b3499"] + manifest.db_dumps = ["docmost-postgres.sql"] + manifest.volume_dumps = ["docmost_docmost_postgres_data.tar", "docmost_docmost_redis_data.tar", "docmost_docmost_storage.tar"] + compose/ images: + image: docmost/docmost:0.96.0@sha256:b56947fcfd08aab8fae12a377e1792784786adbf8b96e4281f14ef4fc072685a + image: postgres:18-alpine@sha256:77f585114c32fbca283dc835b0596f4e52b51b4c6662d7810b2f4084f60a1873 + image: redis:7-alpine@sha256:858f009f9709ce576febc734aa78b8f6d624b82571f9ddb6bda4377c833b3499 + compose/ postgres mount: + - docmost_postgres_data:/var/lib/postgresql + docmost_postgres_data: + mtimes (UTC): + 2026-09-26T07:32:53.8191999810Z 6426 compose/.felhom.yml + 2026-09-26T07:32:53.8201999930Z 447 compose/app.yaml + 2026-09-26T07:32:53.8191999810Z 3545 compose/docker-compose.yml + 2026-09-26T07:29:45.4578891810Z 154012 db-dumps/docmost-postgres.sql + 2026-09-26T07:32:53.8201999930Z 1514 manifest.json + 2026-09-26T07:29:47.5169144410Z 70258176 volume-dumps/docmost_docmost_postgres_data.tar + 2026-09-26T07:29:48.0792382720Z 58880 volume-dumps/docmost_docmost_redis_data.tar + 2026-09-26T07:29:47.0539087610Z 1536 volume-dumps/docmost_docmost_storage.tar + docmost-postgres.sql: Dumped from database version 16.15 + pre-restore-20260926T072557Z-docmost-postgres.sql: Dumped from database version 16.15 + pre-restore-20260926T073000Z-docmost-postgres.sql: Dumped from database version 16.15 +== unit /mnt/felhom-drives/scratch_hdd/backups/secondary/docmost/recovery-unit + manifest.controller_version = "0.274.0" + manifest.created_at = "2026-09-26T07:27:53Z" + manifest.image_pins = ["docmost/docmost:0.96.0@sha256:b56947fcfd08aab8fae12a377e1792784786adbf8b96e4281f14ef4fc072685a", "postgres:16-alpine@sha256:721873c34ceb9f8d8fc265984940dc982404c105f19ad51be9fdc5970a6080ea", "redis:7-alpine@sha256:858f009f9709ce576febc734aa78b8f6d624b82571f9ddb6bda4377c833b3499"] + manifest.db_dumps = ["docmost-postgres.sql"] + manifest.volume_dumps = ["docmost_docmost_postgres_data.tar", "docmost_docmost_redis_data.tar", "docmost_docmost_storage.tar"] + compose/ images: + image: docmost/docmost:0.96.0@sha256:b56947fcfd08aab8fae12a377e1792784786adbf8b96e4281f14ef4fc072685a + image: postgres:16-alpine@sha256:721873c34ceb9f8d8fc265984940dc982404c105f19ad51be9fdc5970a6080ea + image: redis:7-alpine@sha256:858f009f9709ce576febc734aa78b8f6d624b82571f9ddb6bda4377c833b3499 + compose/ postgres mount: + - docmost_postgres_data:/var/lib/postgresql/data + docmost_postgres_data: + mtimes (UTC): + 2026-09-26T07:27:53.7705190140Z 3998 compose/.felhom.yml + 2026-09-26T07:27:53.7715190260Z 447 compose/app.yaml + 2026-09-26T07:27:53.7705190140Z 3321 compose/docker-compose.yml + 2026-09-26T07:29:45.4578891810Z 154012 db-dumps/docmost-postgres.sql + 2026-09-26T07:29:59.6671961880Z 1514 manifest.json + 2026-09-26T07:29:47.5169144410Z 70258176 volume-dumps/docmost_docmost_postgres_data.tar + 2026-09-26T07:29:48.0792382720Z 58880 volume-dumps/docmost_docmost_redis_data.tar + 2026-09-26T07:29:47.0539087610Z 1536 volume-dumps/docmost_docmost_storage.tar + docmost-postgres.sql: Dumped from database version 16.15 + pre-restore-20260926T072557Z-docmost-postgres.sql: Dumped from database version 16.15 +== live + compose image: docmost/docmost:0.96.0@sha256:b56947fcfd08aab8fae12a377e1792784786adbf8b96e4281f14ef4fc072685a + compose image: postgres:18-alpine@sha256:77f585114c32fbca283dc835b0596f4e52b51b4c6662d7810b2f4084f60a1873 + compose image: redis:7-alpine@sha256:858f009f9709ce576febc734aa78b8f6d624b82571f9ddb6bda4377c833b3499 +Error response from daemon: Container d38697606a1e60ebffa27adc7e262b04d6690fd593c2fc02035d6bcb1fcb83e5 is restarting, wait until the container is running +docmost docmost/docmost:0.96.0 Created +docmost-redis redis:7-alpine Up 46 seconds (healthy) +docmost-postgres postgres:18-alpine Restarting (1) 24 seconds ago + volume docmost_docmost_postgres_data + volume docmost_docmost_postgres_data.pre-update-20260926T073003Z + volume docmost_docmost_redis_data + volume docmost_docmost_storage + pg volume root: +18 PG_VERSION base global pg_commit_ts pg_dynshmem pg_hba.conf pg_ident.conf pg_logical pg_multixact pg_notify pg_replslot pg_serial pg_snapshots pg_stat pg_stat_tmp pg_subtrans pg_tblspc pg_twophase pg_wal pg_xact postgresql.auto.conf postgresql.conf postmaster.opts +restore points offered (GET /api/backup/snapshots): 200 [{"time": "2026-09-26T07:32:53Z", "short_id": "helyi", "tier": 1, "drive_label": "Bels\u0151 SSD (rendszer)"}] diff --git a/documentation/audits/version-travel-2026-09-26/A1/S5-restore-tier2-window.txt b/documentation/audits/version-travel-2026-09-26/A1/S5-restore-tier2-window.txt new file mode 100644 index 00000000..ecc794c0 --- /dev/null +++ b/documentation/audits/version-travel-2026-09-26/A1/S5-restore-tier2-window.txt @@ -0,0 +1,131 @@ +# S5-restore-tier2-window — restore pressed at 2026-09-26T07:42:58Z (second-drive unit restore) +POST /backup/tier2/unit-restore -> HTTP/2 302 ['location: /backups/apps?flash=flash.restore.full_started'] +restore-status at end: {"running": false, "op": "tier2-unit-restore", "stack": "docmost", "started_at": "2026-09-26T07:42:59.597470183Z", "last": {"op": "tier2-unit-restore", "stack": "docmost", "ok": true, "message": "A(z) docmost: 3 adatk\u00f6tet \u00e9s az adatb\u00e1zis vissza\u00e1ll\u00edtva \u2014 az alkalmaz\u00e1s \u00fajraindult. A vissza\u00e1ll\u00edt\u00e1s forr\u00e1sa a m\u00e1sodik meghajt\u00f3n l\u00e9v\u0151 m\u00e1solat volt (2026-09-26 09:29).", "finished_at": "2026-09-26T07:43:28.98815976Z"}, "last_recent": true} +controller lines: +2026/09/26 07:42:59 handlers.go:2106: [WARN] [web] Tier-2 UNIT restore requested (async, OVERWRITES live data): stack=docmost from 172.18.0.6:42900 +2026/09/26 07:42:59 tier2_restore.go:206: [WARN] [backup] Tier-2 UNIT restore for docmost from the secondary mirror /mnt/felhom-drives/scratch_hdd/backups/secondary/docmost/recovery-unit — this OVERWRITES live app data +2026/09/26 07:42:59 restore_unit.go:383: [INFO] [backup] Restoring docmost from recovery unit /mnt/felhom-drives/scratch_hdd/backups/secondary/docmost/recovery-unit: images=3, secrets recovered=2/2, data_keys=0 +2026/09/26 07:42:59 manager.go:1305: [INFO] [stacks] Stopping stack: docmost +2026/09/26 07:43:00 manager.go:1314: [INFO] [stacks] Stack docmost stopped successfully (took 0.4s) +2026/09/26 07:43:00 restore.go:152: [INFO] [backup] Restoring Docker volume docmost_docmost_postgres_data for docmost +2026/09/26 07:43:01 restore.go:152: [INFO] [backup] Restoring Docker volume docmost_docmost_redis_data for docmost +2026/09/26 07:43:01 restore.go:152: [INFO] [backup] Restoring Docker volume docmost_docmost_storage for docmost +2026/09/26 07:43:01 restore.go:195: [INFO] [backup] Restored 3 Docker volume(s) for docmost +2026/09/26 07:43:01 [INFO] [stacks] SaveAppConfig: saved config for docmost +2026/09/26 07:43:01 deploy.go:708: [INFO] [stacks] Redeploying docmost from recovery unit with 4 env vars +2026/09/26 07:43:01 pin.go:93: [INFO] [stacks] pin docmost: docmost=docmost/docmost:0.96.0, docmost-postgres=postgres:16-alpine, docmost-redis=redis:7-alpine +2026/09/26 07:43:01 [INFO] [stacks] SaveAppConfig: saved config for docmost +2026/09/26 07:43:01 manager.go:1269: [INFO] [stacks] Starting stack docmost services only: [docmost-postgres] +2026/09/26 07:43:02 manager.go:1280: [INFO] [stacks] Stack docmost services [docmost-postgres] started (took 0.4s) +2026/09/26 07:43:02 restore_db.go:87: [INFO] [backup] Restore docmost: replaying DB dump into docmost-postgres (postgres) +2026/09/26 07:43:04 dbdump.go:801: [INFO] [backup] Imported DB dump docmost-postgres.sql into docmost-postgres (postgres) +2026/09/26 07:43:04 restore_db.go:97: [INFO] [backup] Restore docmost: replayed 1 DB dump(s) +2026/09/26 07:43:04 manager.go:1216: [INFO] [stacks] Starting stack: docmost +2026/09/26 07:43:15 manager.go:1231: [INFO] [stacks] Stack docmost started successfully (took 11.1s) +2026/09/26 07:43:15 [INFO] [stacks] SaveAppConfig: saved config for docmost +2026/09/26 07:43:15 installed.go:420: [INFO] [stacks] installed-images docmost: recorded 3 service(s) (docmost=docmost/docmost:0.96.0 (sha256:b56947fcfd08…), docmost-postgres=postgres:16-alpine (sha256:721873c34ceb…), docmost-redis=redis:7-alpine (sha256:858f009f9709…)) +2026/09/26 07:43:19 manager.go:1562: [INFO] [stacks] Stack docmost post-start status: +2026/09/26 07:43:19 manager.go:1565: [INFO] [stacks] docmost docmost/docmost:0.96.0@sha256:b56947fcfd08aab8fae12a377e1792784786adbf8b96e4281f14ef4fc072685a running Up 3 seconds (health: starting) +2026/09/26 07:43:19 manager.go:1565: [INFO] [stacks] docmost-postgres postgres:16-alpine@sha256:721873c34ceb9f8d8fc265984940dc982404c105f19ad51be9fdc5970a6080ea running Up 16 seconds (healthy) +2026/09/26 07:43:19 manager.go:1565: [INFO] [stacks] docmost-redis redis:7-alpine@sha256:858f009f9709ce576febc734aa78b8f6d624b82571f9ddb6bda4377c833b3499 running Up 14 seconds (healthy) +2026/09/26 07:43:28 restore_unit.go:468: [INFO] [backup] Restore-from-unit completed: docmost — 3 volume(s) of 3 listed, 1 database(s) of 1 listed +2026/09/26 07:43:28 tier2_restore.go:251: [INFO] [backup] docmost: primary unit already carries data — left untouched (R-403 never overwrites a richer package with a poorer one) +2026/09/26 07:43:28 handlers.go:2116: [INFO] [web] Tier-2 unit restore completed (async): stack=docmost in 29.390287688s (volumes 3/3, dbs 1/1) + +docmost-postgres log (tail): + +PostgreSQL Database directory appears to contain a database; Skipping initialization + +2026-09-26 09:43:02.469 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 +2026-09-26 09:43:02.469 CEST [1] LOG: listening on IPv4 address "0.0.0.0", port 5432 +2026-09-26 09:43:02.469 CEST [1] LOG: listening on IPv6 address "::", port 5432 +2026-09-26 09:43:02.475 CEST [1] LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432" +2026-09-26 09:43:02.484 CEST [29] LOG: database system was shut down at 2026-09-26 09:29:46 CEST +2026-09-26 09:43:02.495 CEST [1] LOG: database system is ready to accept connections + +docmost log (tail): +$ pnpm --filter ./apps/server run start:prod +$ cross-env NODE_ENV=production node dist/main +(node:45) ExperimentalWarning: localStorage is not available because --localstorage-file was not provided. +(Use `node --trace-warnings ...` to show where the warning was created) +{"level":"info","time":"2026-09-26T07:43:22.964Z","pid":45,"hostname":"905c49590089","context":"RedisModule","msg":"default: the connection was successfully established"} +{"level":"info","time":"2026-09-26T07:43:23.210Z","pid":45,"hostname":"905c49590089","context":"DatabaseModule","msg":"Establishing database connection"} +{"level":"info","time":"2026-09-26T07:43:23.238Z","pid":45,"hostname":"905c49590089","context":"DatabaseModule","msg":"Database connection successful"} +{"level":"info","time":"2026-09-26T07:43:23.399Z","pid":45,"hostname":"905c49590089","context":"DatabaseMigrationService","msg":"No pending database migrations"} +{"level":"info","time":"2026-09-26T07:43:23.437Z","pid":45,"hostname":"905c49590089","context":"NestApplication","msg":"Nest application successfully started"} +{"level":"info","time":"2026-09-26T07:43:23.448Z","pid":45,"hostname":"905c49590089","context":"NestApplication","msg":"Listening on http://127.0.0.1:3000 / https://c-docs.enkisfelhom.hu"} + +seed reads back through the front door: True +# S5-restore-tier2-window — 2026-09-26T09:43:50+0200; controller gitea.dooplex.hu/admin/felhom-controller:0.274.0 +pinned={'docmost': 'docmost/docmost:0.96.0', 'docmost-postgres': 'postgres:16-alpine', 'docmost-redis': 'redis:7-alpine'} +installed={"docmost": {"ref": "docmost/docmost:0.96.0", "digest": "sha256:b56947fcfd08aab8fae12a377e1792784786adbf8b96e4281f14ef4fc072685a", "at": "2026-09-26T07:43:15Z"}, "docmost-postgres": {"ref": "postgres:16-alpine", "digest": "sha256:721873c34ceb9f8d8fc265984940dc982404c105f19ad51be9fdc5970a6080ea", "at": "2026-09-26T07:43:15Z"}, "docmost-redis": {"ref": "redis:7-alpine", "digest": "sha256:858f009f9709ce576febc734aa78b8f6d624b82571f9ddb6bda4377c833b3499", "at": "2026-09-26T07:43:15Z"}} +conversion_copy=None +state=running phase=done +== unit /mnt/sys_drive/felhom-data/backups/primary/docmost + manifest.controller_version = "0.274.0" + manifest.created_at = "2026-09-26T07:32:53Z" + manifest.image_pins = ["docmost/docmost:0.96.0@sha256:b56947fcfd08aab8fae12a377e1792784786adbf8b96e4281f14ef4fc072685a", "postgres:18-alpine@sha256:77f585114c32fbca283dc835b0596f4e52b51b4c6662d7810b2f4084f60a1873", "redis:7-alpine@sha256:858f009f9709ce576febc734aa78b8f6d624b82571f9ddb6bda4377c833b3499"] + manifest.db_dumps = ["docmost-postgres.sql"] + manifest.volume_dumps = ["docmost_docmost_postgres_data.tar", "docmost_docmost_redis_data.tar", "docmost_docmost_storage.tar"] + compose/ images: + image: docmost/docmost:0.96.0@sha256:b56947fcfd08aab8fae12a377e1792784786adbf8b96e4281f14ef4fc072685a + image: postgres:18-alpine@sha256:77f585114c32fbca283dc835b0596f4e52b51b4c6662d7810b2f4084f60a1873 + image: redis:7-alpine@sha256:858f009f9709ce576febc734aa78b8f6d624b82571f9ddb6bda4377c833b3499 + compose/ postgres mount: + - docmost_postgres_data:/var/lib/postgresql + docmost_postgres_data: + mtimes (UTC): + 2026-09-26T07:32:53.8191999810Z 6426 compose/.felhom.yml + 2026-09-26T07:32:53.8201999930Z 447 compose/app.yaml + 2026-09-26T07:32:53.8191999810Z 3545 compose/docker-compose.yml + 2026-09-26T07:29:45.4578891810Z 154012 db-dumps/docmost-postgres.sql + 2026-09-26T07:32:53.8201999930Z 1514 manifest.json + 2026-09-26T07:29:47.5169144410Z 70258176 volume-dumps/docmost_docmost_postgres_data.tar + 2026-09-26T07:29:48.0792382720Z 58880 volume-dumps/docmost_docmost_redis_data.tar + 2026-09-26T07:29:47.0539087610Z 1536 volume-dumps/docmost_docmost_storage.tar + docmost-postgres.sql: Dumped from database version 16.15 + pre-restore-20260926T072557Z-docmost-postgres.sql: Dumped from database version 16.15 + pre-restore-20260926T073000Z-docmost-postgres.sql: Dumped from database version 16.15 +== unit /mnt/felhom-drives/scratch_hdd/backups/secondary/docmost/recovery-unit + manifest.controller_version = "0.274.0" + manifest.created_at = "2026-09-26T07:27:53Z" + manifest.image_pins = ["docmost/docmost:0.96.0@sha256:b56947fcfd08aab8fae12a377e1792784786adbf8b96e4281f14ef4fc072685a", "postgres:16-alpine@sha256:721873c34ceb9f8d8fc265984940dc982404c105f19ad51be9fdc5970a6080ea", "redis:7-alpine@sha256:858f009f9709ce576febc734aa78b8f6d624b82571f9ddb6bda4377c833b3499"] + manifest.db_dumps = ["docmost-postgres.sql"] + manifest.volume_dumps = ["docmost_docmost_postgres_data.tar", "docmost_docmost_redis_data.tar", "docmost_docmost_storage.tar"] + compose/ images: + image: docmost/docmost:0.96.0@sha256:b56947fcfd08aab8fae12a377e1792784786adbf8b96e4281f14ef4fc072685a + image: postgres:16-alpine@sha256:721873c34ceb9f8d8fc265984940dc982404c105f19ad51be9fdc5970a6080ea + image: redis:7-alpine@sha256:858f009f9709ce576febc734aa78b8f6d624b82571f9ddb6bda4377c833b3499 + compose/ postgres mount: + - docmost_postgres_data:/var/lib/postgresql/data + docmost_postgres_data: + mtimes (UTC): + 2026-09-26T07:27:53.7705190140Z 3998 compose/.felhom.yml + 2026-09-26T07:27:53.7715190260Z 447 compose/app.yaml + 2026-09-26T07:27:53.7705190140Z 3321 compose/docker-compose.yml + 2026-09-26T07:29:45.4578891810Z 154012 db-dumps/docmost-postgres.sql + 2026-09-26T07:29:59.6671961880Z 1514 manifest.json + 2026-09-26T07:29:47.5169144410Z 70258176 volume-dumps/docmost_docmost_postgres_data.tar + 2026-09-26T07:29:48.0792382720Z 58880 volume-dumps/docmost_docmost_redis_data.tar + 2026-09-26T07:29:47.0539087610Z 1536 volume-dumps/docmost_docmost_storage.tar + docmost-postgres.sql: Dumped from database version 16.15 + pre-restore-20260926T072557Z-docmost-postgres.sql: Dumped from database version 16.15 +== live + compose image: docmost/docmost:0.96.0@sha256:b56947fcfd08aab8fae12a377e1792784786adbf8b96e4281f14ef4fc072685a + compose image: postgres:16-alpine@sha256:721873c34ceb9f8d8fc265984940dc982404c105f19ad51be9fdc5970a6080ea + compose image: redis:7-alpine@sha256:858f009f9709ce576febc734aa78b8f6d624b82571f9ddb6bda4377c833b3499 + PGDATA=/var/lib/postgresql/data PG_VERSION=16 +docmost docmost/docmost:0.96.0 Up 40 seconds (healthy) +docmost-redis redis:7-alpine Up 50 seconds (healthy) +docmost-postgres postgres:16-alpine Up 53 seconds (healthy) + volume docmost_docmost_postgres_data + volume docmost_docmost_postgres_data.pre-update-20260926T073003Z + volume docmost_docmost_redis_data + volume docmost_docmost_storage + pg volume root: +PG_VERSION base global pg_commit_ts pg_dynshmem pg_hba.conf pg_ident.conf pg_logical pg_multixact pg_notify pg_replslot pg_serial pg_snapshots pg_stat pg_stat_tmp pg_subtrans pg_tblspc pg_twophase pg_wal pg_xact postgresql.auto.conf postgresql.conf postmaster.opts postmaster.pid +restore points offered (GET /api/backup/snapshots): 200 [{"time": "2026-09-26T07:32:53Z", "short_id": "helyi", "tier": 1, "drive_label": "Bels\u0151 SSD (rendszer)"}] +docmost_docmost_postgres_data +docmost_docmost_postgres_data.pre-update-20260926T073003Z +docmost_docmost_redis_data +docmost_docmost_storage diff --git a/documentation/audits/version-travel-2026-09-26/tools/a1.py b/documentation/audits/version-travel-2026-09-26/tools/a1.py new file mode 100644 index 00000000..87fa8c56 --- /dev/null +++ b/documentation/audits/version-travel-2026-09-26/tools/a1.py @@ -0,0 +1,116 @@ +#!/usr/bin/env python3 +"""a1.py — Part A1's spike on guest 9202 (drill catalog): the window between an update and the next +backup, measured, then a restore pressed inside that window. EVIDENCE, NOT PRODUCT: it presses only what a +person presses (deploy, Update, the backups page's restore) and reads the unit off the disk. + + unit