Files
felhom.eu/documentation/runbooks/nightly-rotation.md
T
admin 3e58c184f6
gates / gates (push) Successful in 27s
night shift 2026-09-23: the record, the register, the morning note
DRILL-night-2026-09-23.md: Parts A-E. 09 §3 decisions 21 (operator word),
22 and 23 (CC unattended, operator may reverse); §6.4 parts 4 and 6
(catalog half) shipped; §6.1a residuals R-658/R-659. Register 330 -> 336:
R-651..R-660 opened (R-658 and R-659 P1), R-650/R-640/R-499/R-626 closed.
Capability map, nightly rotation (opengist), STATUS (one question: the
floor), CONTEXT, REPORT. The floor stays 0.266.0.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0159rPz1ZhFKsS53msqPYxtS
2026-09-24 00:24:04 +02:00

17 KiB

Nightly rotation — "be a customer for the night" on demo-hp

One app per night, as a throwaway deploy on demo-hp, through the product's own endpoints: install, real data through the app's front door (never a volume or database directly — R-156), ten minutes of household use, backup through the backups page's endpoint, restore and read the data back, the guarded Update if the catalog offers one, removal with "delete my data", and a clean drive. Every surprise is a register row before the next step. An app with no non-browser front door is recorded, not faked. Tick with the date; the next night takes the first unticked app.

The nine standing apps of demo-hp come first. They cannot be a throwaway on guest 9201 (same stack name), so they are walked on the scratch guest 9202 (R-481, built 2026-09-13: under the demo-hp customer, hub off, tunnel off, https://192.168.0.114 with the same Host names and password).

Standing on demo-hp — walked on the scratch guest 9202

  • bentopdf — 2026-09-13 (night 2, scratch guest 9202): install, front door 200, no data route (browser-side toolbox — recorded, not faked), backup now + Tier 2, remove-keep → Tier-2 restore back, same-version Update (backed up first: the restore's deploy time is newer than the copies, R-478 by design), remove-all clean. No new rows. audits/nightly-2026-09-13b-bentopdf/.
  • bookstack — 2026-09-21 (update night, scratch guest 9202): install, seeded through php artisan with its own negative control, backup, real upstream Update 26.05.2->26.05.5 (45.1 s), read back, removed. DATABASE HALF ONLY (R-460). audits/DRILL-update-night-2026-09-21.md.
  • calibre-web — 2026-09-22 (the 28, scratch guest 9202): install, front door 302, NO non-browser data route (no fixture: no non-browser seed route was written for this app), „Mentés most", no upstream edge tonight, restore failed, removed clean. audits/DRILL-the-28-2026-09-22.md.
  • docmost — 2026-09-21 (update night, scratch guest 9202): install, seeded a workspace+user through its own API, read back, backup, real upstream Update 0.95.0->0.96.0 (103.6 s) with its own migration line quoted, read back, removed with data. audits/DRILL-update-night-2026-09-21.md.
  • kimai — 2026-09-22 (the 28, scratch guest 9202): install, front door 302, NO non-browser data route (recorded, not faked), „Mentés most", no upstream edge tonight, restore ok, read back after the restore, removed clean. audits/DRILL-the-28-2026-09-22.md.
  • opengist — 2026-09-23 (night shift, scratch guest 9202 + the bench): install, seeded an account through its own sign-up form, read back, the guarded Update 1.13->1.15 done, read back through the account's own page (1.15 serves under /-/, R-654), removed clean (R-626 check +60 s); the bench agreed with a ten-minute memory watch; published with its test record. Earlier attempt: NOT A FULL WALK; attempted 2026-09-21 (update night, scratch guest 9202): install, seeded an account through its own sign-up form, read back, backup, real upstream Update 1.13->1.15 — the UPDATE SUCCEEDED (14.4 s, all four observables agree) but the readback ran before /login was serving, so the edge is inconclusive, not proven. audits/DRILL-update-night-2026-09-21.md.
  • paperless-ngx — 2026-09-22 (the 28, scratch guest 9202): install, front door 302, NO non-browser data route (no fixture: no non-browser seed route was written for this app), „Mentés most", no upstream edge tonight, restore refused-with-a-sentence, removed clean. audits/DRILL-the-28-2026-09-22.md.
  • privatebin — 2026-09-21 (update night, scratch guest 9202): install, seeded a paste through its own JSON API, read back, „Mentés most", real upstream Update 2.0.5->2.0.6 (15.4 s), read back again, removed with data. audits/DRILL-update-night-2026-09-21.md.
  • romm — 2026-09-21 (update night, scratch guest 9202): install, seeded through its own CSRF-protected user API, backup, real upstream Update 5.0.0->5.3.0 (60.6 s), logged in again, removed. DATABASE HALF ONLY. audits/DRILL-update-night-2026-09-21.md.

The rest of the catalog

  • actualbudget — 2026-09-13: no non-browser front door (the client talks a sync protocol, no REST); deploy / update / remove were exercised the same day for R-475 (audits/rulings-r472-r475-2026-09-13/). Recorded, not faked.
  • adventurelog — 2026-09-13: full walk (install, sign-up + trip data through the API, backup now + Tier 2, remove-with-data-kept → second-drive restore REFUSED (R-486) → own-copy restore byte-identical, same-version guarded Update, remove-with-backups left 484 MB behind (R-474)). Photo upload needs a browser (R-483). Rows: R-482..R-487. audits/nightly-2026-09-13-adventurelog/.
  • audiobookshelf — 2026-09-21 (update night, scratch guest 9202): install with its drive path, seeded a root account through /init, read back, backup, real upstream Update 2.35.1->2.36.1 (23.6 s), read back, removed. DATABASE HALF ONLY. audits/DRILL-update-night-2026-09-21.md.
  • calcom — 2026-09-22 (the 28, scratch guest 9202): install, front door 502, NO non-browser data route (no fixture: no non-browser seed route was written for this app), „Mentés most", no upstream edge tonight, restore failed, removed clean. audits/DRILL-the-28-2026-09-22.md.
  • claper — 2026-09-22 (the 28, scratch guest 9202): install, front door 200, NO non-browser data route (no fixture: no non-browser seed route was written for this app), „Mentés most", no upstream edge tonight, restore ok, removed clean. audits/DRILL-the-28-2026-09-22.md.
  • code-server — 2026-09-22 (the 28, scratch guest 9202): install, front door 502, NO non-browser data route (fixture ran and found no non-browser seed route: its front door is a browser IDE behind one password; it exposes no data API, and writing a file with docker exec would not be the front door (R-156)), „Mentés most", real upstream Update 4.129.0->4.138.0 (done), own migration line quoted, restore ok, removed clean. audits/DRILL-the-28-2026-09-22.md.
  • crafty-controller — 2026-09-22 (the 28, scratch guest 9202): install, front door 302, NO non-browser data route (no fixture: no non-browser seed route was written for this app), „Mentés most", real upstream Update 4.10.7->4.11.0 (done), own migration line quoted, restore ok, removed clean. audits/DRILL-the-28-2026-09-22.md.
  • emby — 2026-09-22 (the 28, scratch guest 9202): install, front door 302, seeded through its own /Startup/User wizard, then /Users/Public and read back, „Mentés most", real upstream Update 4.10.0.20->4.11.0.1 (done), own migration line quoted, read back after the update, restore ok, read back after the restore, removed clean. audits/DRILL-the-28-2026-09-22.md.
  • ghost — 2026-09-22 (the 28, scratch guest 9202): install, front door 200, seeded through its own /ghost/api/admin/authentication/setup/ and read back, „Mentés most", real upstream Update 6.53.0-alpine->6.64.0-alpine (done), own migration line quoted, read back after the update, restore ok, read back after the restore, removed clean. audits/DRILL-the-28-2026-09-22.md.
  • gitea — NOT A FULL WALK; attempted 2026-09-21 (update night, scratch guest 9202): attempted 2026-09-21 and inconclusive: a fresh Gitea sits in its web-installer state so gitea admin user create refuses. Needs an installer-form fixture (R-624). audits/DRILL-update-night-2026-09-21.md.
  • glance — NOT A FULL WALK; attempted 2026-09-21 (update night, scratch guest 9202): used 2026-09-21 as the UNATTENDED HOLD subject on drill images (R-618's method), not as a catalog walk — deliberately not ticked. audits/DRILL-update-night-2026-09-21.md.
  • gokapi — NOT A FULL WALK; attempted 2026-09-22 (the 28, scratch guest 9202): install, front door 200, NO non-browser data route (no fixture: no non-browser seed route was written for this app), „Mentés most", no upstream edge tonight, restore ok, removed with a leftover container. audits/DRILL-the-28-2026-09-22.md.
  • grafana — 2026-09-21 (update night, scratch guest 9202): install, seeded a folder through its own API as the deploy-generated admin, read back, backup, real upstream Update 13.1.0->13.2.2 (26.7 s), read back, removed with data. audits/DRILL-update-night-2026-09-21.md.
  • gramps-web — 2026-09-22 (the 28, scratch guest 9202): install, front door 200, NO non-browser data route (recorded, not faked), „Mentés most", no upstream edge tonight, restore ok, removed clean. audits/DRILL-the-28-2026-09-22.md.
  • home-assistant — 2026-09-21 (update night, scratch guest 9202): install, seeded the owner through its own onboarding API, logged in through its own login flow, backup, real upstream Update 2026.7.2->2026.9.3 (103.6 s), read back, removed with data. audits/DRILL-update-night-2026-09-21.md.
  • homebox — 2026-09-22 (the 28, scratch guest 9202): install, front door 200, NO non-browser data route (fixture ran and found no non-browser seed route: POST /api/v1/locations -> 404 404 page not found ), „Mentés most", no upstream edge tonight, restore ok, removed clean. audits/DRILL-the-28-2026-09-22.md.
  • homepage — 2026-09-22 (the 28, scratch guest 9202): install, front door 200, NO non-browser data route (no fixture: no non-browser seed route was written for this app), „Mentés most", no upstream edge tonight, restore ok, removed clean. audits/DRILL-the-28-2026-09-22.md.
  • immich — 2026-09-22 (the 28, scratch guest 9202): install, front door 200, seeded through its own /api/auth/admin-sign-up, then an album and read back, „Mentés most", real upstream Update v3.0.3->v3.2.2 (done), read back after the update, restore refused-with-a-sentence, read back after the restore, removed clean. audits/DRILL-the-28-2026-09-22.md.
  • jellyfin — 2026-09-22 (the 28, scratch guest 9202): install, front door 302, NO non-browser data route (fixture ran and found no non-browser seed route: POST /Startup/User -> 503 Jellyfin Server is loading. Please try again shortly.), „Mentés most", no upstream edge tonight, restore ok, removed clean. audits/DRILL-the-28-2026-09-22.md.
  • komga — 2026-09-22 (the 28, scratch guest 9202): install, front door 200, NO non-browser data route (recorded, not faked), „Mentés most", real upstream Update 1.25.0->1.27.1 (done), own migration line quoted, restore ok, removed clean. audits/DRILL-the-28-2026-09-22.md.
  • mealie — 2026-09-21 (update night, scratch guest 9202): install, seeded a recipe through its own API as the first-run admin, read back, backup, real upstream Update v3.20.1->v3.27.0 (18.5 s), read back, removed with data. audits/DRILL-update-night-2026-09-21.md.
  • n8n — 2026-09-21 (update night, scratch guest 9202): install, seeded the owner through its own setup API, read back, backup, real upstream Update 2.31.3->2.40.5 (117.9 s), read back, removed with data. audits/DRILL-update-night-2026-09-21.md.
  • navidrome — 2026-09-21 (update night, scratch guest 9202): install with its drive path, seeded the first admin through its own API, read back, backup, real upstream Update 0.63.2->0.64.0 (11.3 s), read back, removed. The removal left a container behind that a later reboot resurrected — R-626. audits/DRILL-update-night-2026-09-21.md.
  • nextcloud — 2026-09-21 (update night, scratch guest 9202): install, seeded a user through occ, read back, backup, MariaDB engine major 11.6->12.3 through the real Update button (217.4 s) with all four SPIKE-r459 observables, read back, removed. audits/DRILL-update-night-2026-09-21.md.
  • onlyoffice — 2026-09-22 (the 28, scratch guest 9202): install, front door 302, NO non-browser data route (fixture ran and found no non-browser seed route: a stateless document server: it holds no household data of its own, so there is nothing to seed), „Mentés most", no upstream edge tonight, restore ok, removed clean. audits/DRILL-the-28-2026-09-22.md.
  • outline — 2026-09-22 (the 28, scratch guest 9202): install, front door 404, NO non-browser data route (fixture ran and found no non-browser seed route: sign-in requires an external identity provider (OIDC/Slack/Google); no local sign-up route exists), „Mentés most", real upstream Update 1.9.1->1.10.1 (failed), restore failed, removed clean. audits/DRILL-the-28-2026-09-22.md.
  • papra — 2026-09-21 (update night, scratch guest 9202): install, seeded an account through its own sign-up API, signed in again, backup, real upstream Update 26.6.1->26.6.2 (60.5 s), removed with data. audits/DRILL-update-night-2026-09-21.md.
  • plant-it — NOT A FULL WALK; attempted 2026-09-22 (the 28, scratch guest 9202): could not be deployed — deploy never reached deployed with a pin. audits/DRILL-the-28-2026-09-22.md.
  • plex — 2026-09-22 (the 28, scratch guest 9202): install, front door 401, NO non-browser data route (fixture ran and found no non-browser seed route: the first-run claim needs a token minted at plex.tv by a real Plex account; no account exists for this venue), „Mentés most", real upstream Update 1.41.4.9463-630c9f557->1.43.4.10903-e5521bd8c (done), restore ok, removed clean. audits/DRILL-the-28-2026-09-22.md.
  • radarr — 2026-09-22 (the 28, scratch guest 9202): install, front door 200, seeded through its own /api/v3/tag with the app's own ApiKey and read back, „Mentés most", real upstream Update 6.3.0->6.4.4 (done), own migration line quoted, read back after the update, restore ok, read back after the restore, removed clean. audits/DRILL-the-28-2026-09-22.md.
  • rallly — 2026-09-22 (the 28, scratch guest 9202): install, front door 200, NO non-browser data route (fixture ran and found no non-browser seed route: sign-in is an e-mail magic link; this venue has no mailbox the harness can read), „Mentés most", real upstream Update 4.11.1->4.15.2 (done), own migration line quoted, restore ok, removed clean. audits/DRILL-the-28-2026-09-22.md.
  • recipe-importer — 2026-09-22 (the 28, scratch guest 9202): install, front door 302, NO non-browser data route (no fixture: no non-browser seed route was written for this app), „Mentés most", no upstream edge tonight, restore ok, removed clean. audits/DRILL-the-28-2026-09-22.md.
  • seerr — 2026-09-22 (the 28, scratch guest 9202): install, front door 307, NO non-browser data route (no fixture: no non-browser seed route was written for this app), „Mentés most", no upstream edge tonight, restore ok, removed clean. audits/DRILL-the-28-2026-09-22.md.
  • sonarr — 2026-09-22 (the 28, scratch guest 9202): install, front door 200, seeded through its own /api/v3/tag with the app's own ApiKey and read back, „Mentés most", real upstream Update 4.0.19->4.0.20 (done), own migration line quoted, read back after the update, restore ok, read back after the restore, removed clean. audits/DRILL-the-28-2026-09-22.md.
  • sparkyfitness — NOT A FULL WALK; attempted 2026-09-22 (the 28, scratch guest 9202): could not be deployed — deploy never reached deployed with a pin. audits/DRILL-the-28-2026-09-22.md.
  • tandoor — 2026-09-21 (update night) and RE-WALKED 2026-09-22 after the probe fix (scratch guest 9202): install, seeded a superuser through its own Django CLI, read back, backup, real upstream Update 2.6.13->2.6.15 — on 2026-09-21 the update SUCCEEDED and the box then STOPPED the working app because the template probed the wrong port (R-618, P1, CLOSED 2026-09-22). With the port corrected the identical edge ends done at +41.1 s, seed read back, both containers running with zero restarts. proven. audits/PROBE-FIX-2026-09-22.md.
  • termix — NOT A FULL WALK; attempted 2026-09-22 (the 28, scratch guest 9202): install, front door 200, seeded through its own /users/create sign-up, then /users/me and read back, „Mentés most", real upstream Update 2.5.0->2.8.0 (done), own migration line quoted, read back after the update, restore ok, read back after the restore, removed with a leftover container. audits/DRILL-the-28-2026-09-22.md.
  • uptime-kuma
  • vaultwarden — NOT A FULL WALK; attempted 2026-09-21 (update night, scratch guest 9202): attempted 2026-09-21 and inconclusive BY DESIGN: the catalog closes self-registration on purpose (R-512), so no headless account route exists (R-624). audits/DRILL-update-night-2026-09-21.md.
  • vikunja — 2026-09-21 (update night, scratch guest 9202): install, registered a user and created a project through its own API, read back, backup, real upstream Update 2.3.0->2.6.0 (24.6 s), read back, removed with data. audits/DRILL-update-night-2026-09-21.md.
  • wanderer — 2026-09-22 (the 28, scratch guest 9202): install, front door 404, NO non-browser data route (no fixture: no non-browser seed route was written for this app), „Mentés most", no upstream edge tonight, restore ok, removed clean. audits/DRILL-the-28-2026-09-22.md.
  • wger — NOT A FULL WALK; attempted 2026-09-21 (update night, scratch guest 9202): deployed 2026-09-21 ONLY to measure its health probe: it listens on 8000 and the template probes 80, so the box reads it unhealthy while it serves (R-618). Removed. NOT a catalog walk. audits/DRILL-update-night-2026-09-21.md.
  • wishlist
  • zipline — NOT A FULL WALK; attempted 2026-09-21 (update night, scratch guest 9202): attempted 2026-09-21 and inconclusive: registration disabled by the template; and its probe path is wrong (R-618), so an update would have been held by the probe (R-624). audits/DRILL-update-night-2026-09-21.md.