From f1a7d6c9fda5e03daae5559f2a38860620cfe19a Mon Sep 17 00:00:00 2001 From: kisfenyo Date: Sun, 27 Sep 2026 12:55:35 +0200 Subject: [PATCH] CHANGELOG + REPORT: paperless-ngx 18, tandoor 17, adventurelog v0.13.0 Co-Authored-By: Claude Opus 5.5 (1M context) Claude-Session: https://claude.ai/code/session_0159rPz1ZhFKsS53msqPYxtS --- CHANGELOG.md | 21 +++++++++++++++++++++ REPORT.md | 30 +++++++++++++----------------- 2 files changed, 34 insertions(+), 17 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3b21e3c..37aa25e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,24 @@ +## paperless-ngx → PostgreSQL 18, tandoor → 17, adventurelog → v0.13.0 (2026-09-27, `09` §3 decisions 41, 42) + +Each move ALONE in its commit, written by `upgrade-test.py --write-ladder` from a bench verdict (throwaway LXC 9401, +harness v4, 10-minute memory watch) AND a box verdict (scratch box 9202 through the product's guarded Update, controller +0.275.0-rc1/0.275.0). Evidence: `felhom.eu/documentation/audits/version-travel-2026-09-26/B/`, `…/C/`. + +- **paperless-ngx: PostgreSQL 16 → 18** (its upstream compose ships 18 at `/var/lib/postgresql`; decision 42). Bench: + converted in 35.4 s, check equal over 72 tables, seed read back, anon peak 40.0 %. Box: converted in 64.6 s through the + Update, seed read back. Mount → `/var/lib/postgresql`. New box fixture: Django's own `createsuperuser` in + `paperless-webserver` (`upgrade_fixtures_box.py`). +- **tandoor: PostgreSQL 16 → 17** (its upstream ships 16; 17 is the newest major its Django 5.2 documents; no mount + change). Bench: converted in 23.6 s over 100 tables; the app's own memory peaked at 78.7 % (the app, not the engine — + under the 80 % mark). Box: converted in 52.3 s. The superseded 16 step keeps its definition in `steps/`. +- **adventurelog: v0.12.1 → v0.13.0 (R-655, decision 41 — the world-data download stays).** Same commit: the frontend + healthcheck override is dropped (v0.13.0 brings its own; no single node path works on both versions), and a world-data + file that does not parse to its end is renamed aside before start so `download-countries` fetches it again (with an + import pending, the image's own start crash-looped 10× on `IncompleteJSONError`; with the step: set aside, downloaded, + healthy). The update re-uses the file v0.12.1 left ("Latest data already imported"). Box: done in 204 s under the + product's default 5-min wait (under the drill's 90 s wait it was UNDONE — correctly). +- `immich` and the other PostGIS apps: not in this session. + ## docmost converts PostgreSQL 16 → 18 (2026-09-25, `09` §3 decisions 35, 37, 39) The first PostgreSQL major the catalog moves — ALONE in its commit, through `upgrade-test.py --write-ladder`, which diff --git a/REPORT.md b/REPORT.md index bf330f7..0090bd1 100644 --- a/REPORT.md +++ b/REPORT.md @@ -1,18 +1,14 @@ -# REPORT — 2026-09-25 evening: docmost's PostgreSQL 16 → 18, the harness converts, the gate lets one app through +# REPORT — 2026-09-27: paperless-ngx → PostgreSQL 18, tandoor → 17, adventurelog → v0.13.0 -- **Harness v4** (`6a4a5f0`, `7036119` dump fix): a PostgreSQL major is converted on the bench the box's way; `render` - and `--write-ladder` move a PostgreSQL 18 data mount to `/var/lib/postgresql`; `--write-ladder` writes - `engine_conversion` only when BOTH venues converted it. `test_pg_conversion.py` (10 checks). -- **`check-engine-major.py`**: a PostgreSQL major passes only with its proven, two-venue, marked ladder entry, alone in - its commit; the postgis family is judged now. Decoys: 1 genuine, 5 refused (no mark, one venue, the mark in a comment, - bundled, postgis) — red-proofed (`felhom.eu/documentation/audits/night-2026-09-26/C/C2-*`). -- **docmost moved** (`afd3a60`): `postgres:16-alpine` → `postgres:18-alpine`, mount moved, `engine_conversion` written by - the harness. Bench (throwaway LXC 9401, destroyed): converted in 11.0 s, check equal over 48 tables, seed read back, 0 - kills; negative control C3 → `failed`. Box: 9202 through the product (see the controller REPORT). **docmost's own - limit 384M → 512M** (`09` §3 decision 39): the watch measured 91 % at 384M and 80.4 % at 512M — Node sizes its heap - from the limit (R-693). The Hungarian prerequisite line changed with it; `copy_freeze` updated on purpose (the gate - caught the first push). -- **nextcloud** `after_load: php occ files:scan --all` (`9cc829c`, the Part E helper): a file written after the last - backup is invisible after a load until the rescan (measured). -- **Not moved:** adventurelog v0.13.0 (R-655) — its `SKIP_WORLD_DATA=1` switch and the cached dataset file are now - measured; the move needs a choice between the two options written in the row. +Brief: version-travel (Parts B and C). Architecture read: `09-update-architecture.md` §3 decisions 35–42, §6.4 parts 4, 5, 10. + +| app | move | bench (LXC 9401) | box 9202 (guarded Update) | commit | +|---|---|---|---|---| +| paperless-ngx | postgres 16 → 18 (+ mount) | converted 35.4 s, 72 tables equal, seed ✓, anon peak 40.0 % | converted, done 64.6 s, seed ✓ | `46affe0` | +| tandoor | postgres 16 → 17 | converted 23.6 s, 100 tables equal, seed ✓, anon peak 78.7 % (app) | converted, done 52.3 s, seed ✓ | `53b84ca` | +| adventurelog | v0.12.1 → v0.13.0 (+ health + world-data fixes) | healthy 217 s, file reused, seed ✓, anon peak 73.0 % | done 204 s (5-min wait), file reused, seed ✓ | `06ea7da` | + +Engine gate on the push range printed `ALLOWED` for both PostgreSQL moves. Catalog gates: all OK. Not moved: +calcom, claper (no headless seed route checked this session), immich and the PostGIS family (out of scope). +Observation: under the drill's 90 s health wait adventurelog v0.13.0 is undone (its backend needs ~3 min at first +start); the product default is 5 min.