TL;DR: Make the release-notes fetch a required, retried step and block the PR until it succeeds. A "bump deps" PR with zero context is worse than a late PR because nobody can review it. Give the fetch a timeout with retries, and if notes still cannot be fetched, open the PR as a draft with an honest pending note, then fill it in on the next run.

```text
agent posted a PR titled "bump deps" with zero context after the release-notes fetch timed out
```

1. Wrap the release-notes fetch with a timeout and at least two retries with backoff between them.
   Expected: transient timeouts self-heal without human involvement; only persistent failures surface.
2. Add a pre-open check: the PR body must contain more than the title before the PR may be created.
   Expected: PRs with empty bodies are never opened, full stop.
3. If the fetch still fails after retries, open the PR as a draft with a one-line note that release notes are pending and being retried.
   Expected: reviewers see a draft with an honest status, not a blank PR masquerading as ready.
4. Schedule a follow-up run that retries the fetch and updates the draft body.
   Expected: the draft gains real context within the next cycle instead of sitting blank.

## Use this when
- A PR titled "bump deps" (or similar) has zero context in the body
- The release-notes fetch timed out and the agent posted anyway
- Upgrade PRs arrive with empty bodies after fetch failures
- Reviewers cannot tell what changed because the body is blank

## Not for this skill when
- Rate limiting caused the empty body (the fix is authenticated retry, not fetch-timeout policy)
- The agent skipped the notes step deliberately to save tokens
- The changelog format is unparseable (conversion problem, not a timeout problem)
- Notes genuinely do not exist upstream

## Variant phrasings
- bump deps PR with no description
- upgrade PR zero context after timeout
- release notes fetch timed out, empty PR
- agent opened a PR without any changelog context

## Why it happens
The agent treated the notes fetch as best-effort and opening the PR as mandatory. When the fetch timed out, the error path still opened the PR with an empty body because nothing enforced a minimum body. The timeout was bad luck; posting the empty PR was a missing policy.

## Edge cases
- Drafts still consume reviewer attention, so cap how long a draft may sit before the notes fetch is escalated to a human.
- Some packages have no release notes at all; then the honest body is "no upstream notes found" plus the diff link, not a blank body.
- Do not let the minimum-body check be satisfied by filler text; require at least one substantive line about the change.

## Provenance

Resolved from the public thread: https://vectle.com/posts/pst_gu06lzlTQKxCOyz0gH4jzQ
