fix: support portal double-serialized user_context and swallowed errors
user_context was JSON-stringified before sending, but the server expects
a native JSON object — causing 400 on every ticket with diagnostics.
Also replaced bare raise_for_status() calls with a helper that includes
the response body in the error message, so server-side validation errors
are surfaced to the user instead of showing only the HTTP status line.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>