The v1.1.0 release job created the release then died with a jq parse error before uploading either package. The runner executes run: steps with a shell whose echo expands backslash escapes. Passing the API response through `echo "$BODY" | jq` turned the \n escapes in the release body field into real newlines, producing invalid JSON. This only surfaced now because the release body became multi-line; every earlier release had a single-line body with no \n to expand. Keep the response in a file and read it with jq directly, so no JSON passes through echo. Also fall back to the existing release for the tag when creation returns non-2xx, so a partially completed release can be re-run. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>