PROBE SWEEP 3 — the SHARPENED rule, read from healthprobe.go rather than assumed catalog f5f6a152b513, 2026-09-21, controller v0.261.0 type: http -> ANY response is healthy. ONLY THE PORT MATTERS. type: api with NO expect block -> same as http (healthprobe.go:265). ONLY THE PORT. type: api WITH expect.status -> the PORT, the PATH and the STATUS all matter. So a probe/compose PATH difference is only a candidate when the type is `api` WITH expect. actualbudget type=http port=5006 path=None ok adventurelog type=api port=8000 path=/api/ PATH /api/ not in compose ['/api/\\'] (and expect={'status': 200}) <<< CANDIDATE audiobookshelf type=api port=80 path=/healthcheck ok bentopdf type=http port=8080 path=None ok bookstack type=http port=80 path=None ok calcom type=api port=3000 path=/api/auth/providers ok calibre-web type=http port=8083 path=None ok claper type=http port=4000 path=None ok code-server type=api port=8443 path=/healthz ok crafty-controller type=tcp port=8443 path=None ok docmost type=http port=3000 path=None ok emby type=api port=8096 path=/emby/system/ping ok ghost type=http port=2368 path=None ok gitea type=api port=3000 path=/api/healthz ok glance type=http port=8080 path=None ok gokapi type=http port=53842 path=None ok grafana type=api port=3000 path=/api/health ok gramps-web type=http port=5000 path=None ok home-assistant type=api port=8123 path=/api/ ok homebox type=api port=7745 path=/api/v1/status ok homepage type=http port=3000 path=None ok immich type=api port=2283 path=/api/server/ping ok jellyfin type=api port=8096 path=/health ok kimai type=http port=8001 path=None ok komga type=api port=25600 path=/actuator/health ok mealie type=tcp port=9000 path=None ok n8n type=api port=5678 path=/healthz ok navidrome type=api port=4533 path=/ping ok nextcloud type=api port=80 path=/status.php ok onlyoffice type=api port=80 path=/healthcheck ok opengist type=api port=6157 path=/healthcheck ok outline type=api port=3000 path=/_health ok paperless-ngx type=http port=8000 path=None ok papra type=http port=1221 path=None ok plant-it type=api port=8080 path=/api/info ok plex type=api port=32400 path=/identity ok privatebin type=http port=8080 path=None ok radarr type=api port=7878 path=/ping ok rallly type=http port=3000 path=None ok recipe-importer type=api port=8000 path=/health ok romm type=http port=8080 path=None ok seerr type=api port=5055 path=/api/v1/status ok sonarr type=api port=8989 path=/ping ok sparkyfitness type=http port=80 path=None ok tandoor type=http port=8080 path=/accounts/login/ PORT 8080 not in compose ['80'] <<< CANDIDATE termix type=http port=8080 path=None ok uptime-kuma type=http port=3001 path=None ok vaultwarden type=api port=80 path=/alive ok vikunja type=api port=3456 path=/api/v1/info ok wanderer type=http port=3000 path=None ok wger type=http port=80 path=None PORT 80 not in compose ['8000'] <<< CANDIDATE wishlist type=http port=3000 path=None ok zipline type=api port=3000 path=/api/health PATH /api/health not in compose ['/api/healthcheck'] (and expect={'status': 200}) <<< CANDIDATE CANDIDATES: 4 -> ['adventurelog', 'tandoor', 'wger', 'zipline'] LIVE RESULTS 2026-09-21 on guest 9202: tandoor CONFIRMED DEFECT probe type http port 8080; the container listens on 80 ONLY. Connection refused every time -> the box reads `unhealthy` while the app serves 200. zipline CONFIRMED DEFECT probe type api + expect 200 on /api/health; zipline 4.6.1 answers 404 there. The COMPOSE healthcheck in the same file uses /api/healthcheck and is green. The box reads `unhealthy` while /dashboard answers 200. wger SUSPECTED, NOT MEASURED. type http, port 80; wger/server serves 8000 and the template's own traefik label says 8000. Not deployed tonight. home-assistant NOT a defect, MEASURED: type api with NO expect block, so any response passes — /api/ answers 401 without a token and that is healthy. Edge PROVEN tonight. adventurelog NOT a defect, MEASURED: type api + expect 200 on /api/ port 8000, reads `running`.