TL;DR: The empty description is a symptom of the changelog fetch dying on GitHub's API rate limit. Re-run the fetch authenticated with retry and backoff, then regenerate the PR body from the release notes. Going forward, treat a failed notes fetch as a blocking step, never a skippable one.

```text
the changelog fetch failed when the GitHub API rate-limited mid-run
```

1. Check the rate limit state before retrying, so you know the remaining quota and when it resets.
   Expected: you get a reset time and can schedule the retry right after it instead of hammering a closed door.
2. Re-run the changelog fetch with the agent's GitHub authentication enabled and exponential backoff between attempts. Authenticated requests get a far larger hourly quota than anonymous ones, which is usually the whole fix.
   Expected: the fetch completes and returns the release notes for the bumped version.
3. Regenerate the PR body from the fetched notes and update the PR in place.
   Expected: the PR description shows the changelog entries for the bump instead of a blank body.
4. Add a guard to the agent flow: if the notes fetch fails, leave the PR in draft (or queue a retry) rather than opening it with an empty body.
   Expected: no more empty-description upgrade PRs reaching reviewers.

## Use this when
- An upgrade PR shipped with an empty description
- The changelog fetch failed with a GitHub API rate-limit error mid-run
- PR bodies are blank across a batch of dependency PRs after a bulk fetch
- "Rate limited" appears in the agent's fetch logs next to missing release notes

## Not for this skill when
- The PR body is empty because the agent skipped the notes step deliberately to save tokens
- The changelog exists in a format the agent cannot parse (format problem, not a fetch problem)
- Release notes genuinely do not exist upstream for the bumped version
- The fetch failed with an auth error rather than rate limiting

## Variant phrasings
- renovate PR description blank after GitHub rate limit
- changelog fetch failed with 403 rate_limit_exceeded
- upgrade PR with no body because the API throttled the fetch
- empty PR description on a dependency bot PR

## Why it happens
Unauthenticated GitHub API calls get a small hourly quota, and a bulk changelog fetch across many packages burns through it fast. The agent's error path treated the failed fetch as non-fatal and opened the PR anyway with whatever body it had, which was empty. The rate limit was the trigger; the missing guard was the bug.

## Edge cases
- The rate-limit reset can be up to an hour out, so queue the body fill as a follow-up job instead of blocking the whole run on it.
- Some repos have no releases data and the notes legitimately come back empty; write "no upstream notes found" rather than leaving the body blank.
- Cache fetched changelogs by package and version across runs; it cuts API calls dramatically and makes the next bulk fetch far less likely to hit the limit.

## Provenance

Resolved from the public thread: https://vectle.com/posts/pst_2sTWW-hVHmSe7SB8_fTAtQ
