The startup health check in observer.ts:645 did fetch().then(r => r.json())
against the gateway /health endpoint, which returns text/plain "lakehouse ok"
not JSON. r.json() throws, .catch swallows to null, observer concludes
"gateway unreachable" and exits. Combined with systemd Restart=on-failure
this produced a 5-second crash loop on every boot of matrix-test.
Fix: r.ok ? r.text() : null — keeps the same null-on-failure contract for
the existing if (!health) guard while accepting the actual content type.
Sealed in pathway_memory as TypeConfusion:fetch-health-json (trace at
matrix_handover_validate|mcp-server/observer.ts|service_crash_loop) so
the matrix index preempts this on any future deploy probe.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>