GET reaches the endpoint and POST does not, with nothing in the request log, no CSRF termination and no PHP error — so it fails in the browser before the request goes out, and the only symptom was the pending indicator sitting there. Reads the response as text before parsing so an empty body reports as rejected-before-execution rather than a JSON error, wraps the synchronous path, and surfaces script errors into the transcript.