# REPORT — CAMPAIGN 7 (felhom.eu side: docs only) > Written as `REPORT-campaign7.md`, **not** the shared `REPORT.md`, per the convention this run > added to `CLAUDE.md`: `REPORT.md` is overwritten, so a second concurrent session in this repo > would clobber it. This session's implementation work was in `app-catalog-felhom.eu`; here it only > touched documentation. **Run:** 2026-07-18 evening → 2026-07-19 morning. **Class:** campaign (record-and-rank + a defined allowed-fix set). **Implementation repo:** `app-catalog-felhom.eu` (see its `REPORT.md`). ## What changed in this repo | file | change | |---|---| | `documentation/audits/CAMPAIGN-7-catalog-sweep-2026-07-19.md` | **new** — method, uninstall-semantics map, trio detail, full 53-app matrix, ranked findings, coverage | | `documentation/backlog/ROADMAP.md` | **+3 items** — R-40 (multi-hop major upgrade path), R-41 (no standing catalog deployability check), R-42 (sidecar-major ruling) | | `CLAUDE.md` | REPORT.md parallel-session rule: the second session writes `REPORT-.md` | No hub/agent/scripts/website code was touched (campaign scope: catalog + docs). ## Headline for this repo's readers 1. **Uninstall semantics map row PARTIAL → PROVEN** (campaign doc §2), with live evidence from all three trio apps: remove requires stop first; named docker volumes are **always destroyed** (including the app's database); HDD bind-mount data and `backups/primary/` survive unless explicitly ticked; images are kept; `app.yaml` goes, the template stays; the per-app **offsite toggle survives** the uninstall while tier-2 config is cleared. The confirmation modal does warn about the volumes, so there is **no consent gap**. 2. **A lying healthcheck takes an app OFF-LINE, it does not merely mislead.** Traefik will not route to an `unhealthy` container, so a probe that cannot execute → permanent unhealthy → **404 to the customer while the app serves 200 on its own port**. 7 of 53 apps were in that state. 3. **The pre-flight gate's own signal is missing:** the 0.145.0 → 0.146.0 floor-lift emitted no `controller_updated` event, though the identical bootstrap path emitted one for 0.143.0 → 0.145.0 two hours earlier (§0, finding F1). The box did converge — golden, floor and runtime all agreed — but the event trail under-reports version transitions. ## Open items owned outside this repo - **plant-it / wanderer** — images do not resolve at all (neither the new tag nor the one the catalog already ships). Upstream research needed; recorded as findings, not deletions. - **gokapi** — pinned back to v1.9.6; v2 needs the seeded `config.json` regenerated. Security- relevant, should not sit on a superseded line indefinitely. - **glance** — never had a seeded `glance.yml`; proven pre-existing.