Problem
Die HealthBypassMiddleware (ADR-167) in packages/platform-context prüft in process_request nicht request.method:
def process_request(self, request):
if request.path in self.HEALTH_PATHS:
return HttpResponse("ok", content_type="text/plain")
return None
Damit liefert jede Methode (auch POST/PUT/DELETE) auf /livez/ und /healthz/ ein 200. Das @require_GET auf den eigentlichen Health-Views wird nie erreicht.
Divergenz (in risk-hub aufgefallen)
risk-hub hat einen lokalen Fallback-Shim (src/common/middleware.py), der nur GET/HEAD kurzschließt — POST fällt durch auf @require_GET → 405. Dadurch entsteht ein Drei-Wege-Split für POST /healthz/:
| Env |
aktive Middleware |
POST /healthz/ |
| prod (Docker, platform-context aus git) |
Paket |
200 |
| CI (uv.lock, älterer Pin ohne Klasse) |
Shim |
405 |
| lokal dev (iil-platform-context 0.7.0) |
Paket |
200 |
Folge: Tests, die POST→405 annehmen, werden in CI grün, behaupten aber etwas, das in prod (200) nicht gilt. (risk-hub PR #138 ist genau hierüber gestolpert; dort jetzt mit status_code in (200, 405) entschärft.)
Zu klärende Vertragsfrage (ADR-167)
Sollen Health-Endpoints non-GET ablehnen (405) oder immer 200 antworten?
- Variante A — immer 200:
@require_GET auf den Views ist hinter der Paket-Middleware totes Codeteil und sollte entfernt/dokumentiert werden; der Shim sollte ebenfalls jede Methode kurzschließen (Angleichung).
- Variante B — non-GET = 405: Paket-Middleware muss
request.method in ("GET","HEAD") prüfen (wie der Shim); sonst weicht prod vom dokumentierten Verhalten ab.
In beiden Fällen: Paket-Middleware und risk-hub-Shim angleichen, damit CI- und prod-Verhalten identisch sind.
Betroffen
packages/platform-context (HealthBypassMiddleware)
- mind. risk-hub (Shim + Health-Views); per Drift-Notiz potenziell auch cad-hub / writing-hub (ADR-167-Konsumenten)
Problem
Die
HealthBypassMiddleware(ADR-167) inpackages/platform-contextprüft inprocess_requestnichtrequest.method:Damit liefert jede Methode (auch POST/PUT/DELETE) auf
/livez/und/healthz/ein 200. Das@require_GETauf den eigentlichen Health-Views wird nie erreicht.Divergenz (in risk-hub aufgefallen)
risk-hub hat einen lokalen Fallback-Shim (
src/common/middleware.py), der nur GET/HEAD kurzschließt — POST fällt durch auf@require_GET→ 405. Dadurch entsteht ein Drei-Wege-Split fürPOST /healthz/:Folge: Tests, die
POST→405annehmen, werden in CI grün, behaupten aber etwas, das in prod (200) nicht gilt. (risk-hub PR #138 ist genau hierüber gestolpert; dort jetzt mitstatus_code in (200, 405)entschärft.)Zu klärende Vertragsfrage (ADR-167)
Sollen Health-Endpoints non-GET ablehnen (405) oder immer 200 antworten?
@require_GETauf den Views ist hinter der Paket-Middleware totes Codeteil und sollte entfernt/dokumentiert werden; der Shim sollte ebenfalls jede Methode kurzschließen (Angleichung).request.method in ("GET","HEAD")prüfen (wie der Shim); sonst weicht prod vom dokumentierten Verhalten ab.In beiden Fällen: Paket-Middleware und risk-hub-Shim angleichen, damit CI- und prod-Verhalten identisch sind.
Betroffen
packages/platform-context(HealthBypassMiddleware)