docs(generators): an empty 200 is not a healthy service

Observed while staging generators. on cochi: with the nginx vhost installed
but the container not yet deployed, caddy answers an unmatched Host with an
EMPTY 200. Both / and the mirror path returned "HTTP 200, 0 bytes" while
nothing at all was running.

So the guidance to probe a mirror path instead of / was necessary but not
sufficient — a status-code-only check reports green on a completely absent
service. Assert the body.

Same failure family as the filestash green-monitor: the server answering
is not the app working.
This commit is contained in:
oier committed 2026-07-21 19:37:28 +02:00
1 parent b6b02398da
commit 00e9815307
1 file changed
+11
+11
View File
@@ -147,6 +147,17 @@ whose failure mode is a healthy-looking shell over dead data.
- `curl /mcmeta/1.21.1-summary/registries/data.min.json` — proves the mirror is - `curl /mcmeta/1.21.1-summary/registries/data.min.json` — proves the mirror is
actually mounted. An Uptime Kuma monitor should probe **this**, not `/`. actually mounted. An Uptime Kuma monitor should probe **this**, not `/`.
- **A status code is not enough — assert the BODY.** Observed on 2026-07-21,
with the nginx vhost installed but the container not yet deployed: caddy
answers an unmatched `Host` with an **empty `200`**, so *both* `/` and the
mirror path above returned `HTTP 200, 0 bytes` while literally nothing was
running. Any check that looks only at the status code reports green on a
completely absent service. Match on content (or a minimum body size):
```
curl -s https://generators.${BASE_DOMAIN}/mcmeta/1.21.1-summary/registries/data.min.json \
| head -c 40 # must be JSON, ~536 KB total — not empty
```
- **Offline acceptance test**: a real browser with every non-origin request - **Offline acceptance test**: a real browser with every non-origin request
blocked, walking the generators you intend to use. `tooling/`-adjacent harness blocked, walking the generators you intend to use. `tooling/`-adjacent harness
lives in the scratchpad; the check is: zero off-origin attempts, zero lives in the scratchpad; the check is: zero off-origin attempts, zero