The previous fix moved the branch-readiness poll before the .version
write, but on at least one runner the poll's curl returned
CURLE_WRITE_ERROR (exit 23) immediately. With `set -e`, any non-zero
status from a command substitution (`VAR=$(curl ...)`) aborts the
script before the retry/echo path runs, so the failure was both
deterministic and silent.
Refactor the step around an `api_call` helper that wraps curl with
`|| rc=$?` and emits `<http_code>|<curl_rc>` plus body, so curl
exits never propagate through `set -e`.
Other changes:
- Create the `next-release` branch explicitly via `POST /branches`
instead of relying on the `new_branch` parameter of the CHANGELOG.md
PUT. Eliminates the race between branch creation and subsequent
writes.
- Poll branch readiness after explicit creation.
- Fetch file blob SHAs from `next-release` directly (not base).
- Every write (CHANGELOG.md, .version, PR) retries 5x with HTTP code,
curl exit code, and response body logged on failure.