- Twelve steps published on both venues (catalog): first ladders for calibre-web, gitea, wger, crafty-controller, uptime-kuma, zipline (two steps); within-major emby, ghost, home-assistant, outline, rallly. immich's step v3.0.3 -> v3.2.2 re-proven at 768M (Part D). - Part C: the night leg skips a digest-only change AND the catalog never records a same-tag re-test, so a same-name upstream fix reaches no box. Row R-740; the decision in STATUS; `09` decision 30 carries a dated note (the decision itself unchanged). - Rows: 369 -> 377. Opened R-735..R-742; closed R-735, R-738, R-742; narrowed R-462, R-624, R-446, R-440, R-734, R-732. The currency audit gains §1b (and corrects its 31+1 to 30+2). Evidence: documentation/audits/more-night-apps-2026-09-30/. Report: REPORT-more-night-apps-2026-09-30.md. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0159rPz1ZhFKsS53msqPYxtS
4.8 KiB
REPORT — more apps that update themselves (2026-09-30, evening, by day)
Evidence: documentation/audits/more-night-apps-2026-09-30/ (README there has the per-app table). Architecture read:
architecture/09-update-architecture.md §3 decisions 6, 13, 14, 17, 22, 30, §6.4 parts 4–7, §6.5.
The Part table
| Part | done / not done / changed | why |
|---|---|---|
| A1 calibre-web | done — v4.0.6 → v4.0.8, first ladder 53a4a1d |
front door = the Upload button (HTTP form), read back through OPDS + the served EPUB. The ingest folder was NOT used (it would be a file planted in a mount). files_may_change: the library DB metadata.db (+-shm, -wal) in the books folder; the book file did not change |
| A2 gitea | done — 1.27.0 → 1.27.3, first ladder d7ba60c |
the installer-form POST (no CSRF on that form), through the setup gate on the box. 28.0.0 not touched |
| B1 emby, ghost, home-assistant | done — 3e4aa77, 9a78e3b, 15f4d59 |
each had a newer tag inside its line (re-checked) |
| B2 uptime-kuma, wger, crafty-controller | done — 35dd5cf, 4ad32aa (+ fix 7a4ff48), e1f0179 |
new fixtures; wger needed a template fix first (R-738) |
| B2 wanderer | not done | the bench cannot run it at all: its web server calls the DB at a public https name (R-739). The meilisearch question is NOT measured |
| B3 time left | done — outline b0b2514, rallly 8d3a35a, zipline 4.6.1 → 4.7.0 a9700e2 → 4.8.0 fb87030 |
zipline 4.8.0 refuses a database that skipped 4.7.x (R-742); the box undid the direct jump itself |
| C the same-name fix gap | done — row R-740, STATUS decision, 09 decision 30 dated note |
measured from source, a unit walk, the registry and demo-hp; nothing built |
| D immich's older step | done (changed) — re-proven at 768M, step files rewritten 48440ce |
the brief's route needed a writer mode that did not exist → upgrade-test.py --restep 63a96b0, with tests |
Night-updatable apps (the audit's method (a)): 30 + 2 conditional at the start → 35 + 3 conditional (38 carry a proven step; 15 have no ladder).
Claims in the brief that turned out wrong
- "Night-updatable: 31 (+ nextcloud conditional)" — at the session's start it was 30 + 2 conditional: the
afternoon's immich step carries
files_may_change(R-734), so immich counts as conditional. - "Register 366 rows" — 369: the afternoon session added R-732..R-734 after STATUS said 366.
- "calibre-web and gitea have no ladder" — true.
- "gitea's fixture fails at the installer" — true (
MustInstalled); the installer form works headless. - "The leg never presses a digest-only change" — true (
unattended.go:433–435). But the larger fact is that the catalog never records a same-tag re-test at all, so the Update button does not deliver it either (R-740). - "Decision 30's text says the leg would" — true: „until someone (or the automatic leg) presses Update".
- "immich's 0b82… step pins 512M" — true. "The writer rewrites the step file" — it could not (it writes a
step file only once, when a step is superseded);
--restepwas added. - "No real box runs immich v3.0.3" — true and stronger: no box reporting to the hub runs immich at all
(hub
/apps, positive control bookstack = 2 deployments). - "wger: behind inside the major" and "crafty/uptime-kuma/wanderer need a new fixture" — true; wanderer cannot be run on the bench at all.
Rows
Before 369, after 377. Opened: R-735 (bench password shape — closed), R-736 (old images never deleted), R-737 (wger app-login 500), R-738 (wger migrations — closed), R-739 (bench cannot run wanderer), R-740 (same-name fix — decision), R-741 (after_install default-login window), R-742 (zipline needs 4.7.x first — closed). Narrowed: R-462, R-624, R-446, R-440, R-734, R-732 (note). Closed: R-735, R-738, R-742.
Teardown
Three layers:
- Machine. Scratch guest 9202: every app this session installed removed through the product (calibre-web twice,
gitea, emby, ghost, home-assistant, wger ×3, crafty-controller, uptime-kuma, outline, rallly, zipline ×3); their images
and older drill leftovers removed by name (53 GB freed at 17:43 when the disk refused an install — R-736); pointed
back at the live catalog and its
update:override removed (box/T6,repo_urlread back); the same six containers run as at the start. Bench LXC 9401: evidence copied off after every run, its images removed by name once (disk full), then destroyed with its template (bench/B9). Drill catalog: force-reset to livemainfb87030(operator-allowed), image lines identical (box/T7). - Host. demo-hp:
pct listshows 9201 and 9202 only, as at the start. - Hub. Read only (
/hosts,/apps); nothing provisioned.