fix(handoff): log HTTP error response body for observability (#501)
* fix(handoff): log HTTP error response body for observability When the Podcaster API returns a non-2xx HTTP error, the HTTPError handler now reads and includes the response body (truncated to 500 chars) in the error message. This enables diagnosing validation errors like duplicate job_id or stale article_path without needing to reproduce the failure. Context: run 27575695967 failed with HTTP 400 after a successful W25 episode run 1.5h earlier — likely a duplicate job_id or a missing content/weekly/2026/W25.md in the checkout. With this fix we would see the exact rejection reason from the Podcaster API. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * fix(handoff): sanitize error body and limit read to 1024 bytes - Read at most 1024 bytes from exc.read() to avoid unbounded memory use - Strip :: sequences (workflow-command injection prevention) - Replace newlines/carriage returns with spaces - Add test asserting body is included, truncated, and sanitized Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>