# REPORT — upgrade harness widened from the update night (2026-09-21) **Test code only.** No template was changed; no `image:` line moved; `git diff` touches exactly `scripts/upgrade_fixtures.py` and `scripts/upgrade-test.py`. ## What was done The update night (`felhom.eu/documentation/audits/DRILL-update-night-2026-09-21.md`) walked real within-a-major upstream edges on scratch guest 9202 **through the product's own guarded Update**, each app seeded and read back through its own front door, against a **private drill catalog** — the live catalog was never touched. This commit brings the expensive half of that work (the seed routes) back into the harness, so the same edges can also be run here **with their ABORT step**, which the box deliberately does not offer. - Four new fixtures: `ActualBudget`, `Navidrome`, `AudiobookShelf`, `Vikunja`. Each seeds through the app's OWN interface (R-156) and each carries a negative control that runs on every `verify()`. - Seven new edges `U1`–`U7`, all real upstream moves that existed on 2026-09-21 and that this catalog has NOT made. Every one holds its database engine constant. ## What was proven, and where Box-side, through the guarded Update, with the data read back before and after — evidence per app in `felhom.eu/documentation/audits/update-night-2026-09-21/apps//`. The harness-side runs of U1–U7 are **owed**: the code is in, the runs are not. ## Gates `python3 scripts/catalog_gates.py --fast` — image-pins OK, engine-major OK, catalog-since OK, copy-i18n OK. `all catalog gates OK`, exit 0. The two slow gates need a container runtime and were not run; no template changed, which is what they inspect. ## A catalog defect found by the night, filed and NOT fixed here Two apps are presented to the household as UNHEALTHY while working perfectly: `tandoor`'s `.felhom.yml` probe names port 8080 where the container listens only on 80, and `zipline`'s names `/api/health` where that app answers 404 — **while the compose healthcheck in the same file uses `/api/healthcheck` and is correct**. A static sweep of all 53 templates comparing the two health checks against each other finds both, plus `wger` and `home-assistant` as unmeasured candidates and `adventurelog` as a false positive. Filed as **R-618** with the proposed gate; deliberately not fixed in the same commit as the harness change.