b023eab1f4
Authenticate/RequireCSRF write a 401 then raise ESessionRejected; when it reached the dispatcher catch-all, the generic `on E: Exception` overwrote it with a 500. Added `on ESessionRejected do Exit` before the generic clause in both dispatchers (GET + Other) — one place, covers every handler whether or not it wraps Authenticate. Root cause, not per-handler patch. ponytail: runtime check only (expired token → 401) — no Delphi unit harness. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>