Write the PR body as a cover note for reviewers, not a changelog, template, validation log, or file-by-file summary.
Requires authenticated gh. Inspect the current branch, working tree, PR, base branch, commits, and full diff:
git branch --show-current
git status --porcelain
gh pr view --json number,title,body,url,baseRefName,headRefName
gh repo view --json defaultBranchRef
If gh pr view reports that no PR exists, continue with first-time PR creation. For an existing PR, use its baseRefName; otherwise use the repository default branch. Set BASE, then inspect:
git log "$BASE"..HEAD --oneline
git diff "$BASE"...HEAD
If on main or master, create a feature branch first. Ensure intended changes are committed and review the whole branch diff, not only the latest commit or existing PR text.
Use <type>(<scope>): <subject> or <type>: <subject>.
Allowed types: feat, fix, ref, perf, docs, test, build, ci, chore, style, meta, license, and revert.
Choose the minimum useful shape:
Default:
<What changed and what effect it has.>
<Why the approach, risk, migration, or review focus matters, if not obvious.>
For review-feedback updates, describe the resulting PR as a whole rather than the sequence of revisions.
Use an aid only when it reduces reviewer reconstruction work:
Introduce an artifact with one sentence explaining what reviewers should notice. Omit it when prose is clearer.
Create new PRs as drafts. Write the body to a temporary Markdown file, then run:
gh pr create --draft --title '<title>' --body-file /tmp/pr-body.md
Update existing PRs with gh api:
gh api -X PATCH repos/{owner}/{repo}/pulls/PR_NUMBER \
-f title='<title>' \
-F body=@/tmp/pr-body.md
Refresh the title and body when follow-up commits materially change scope, approach, breaking behavior, risk, migration, or review expectations. Skip typo-only, formatting-only, and rename-only follow-ups.
Small change:
The AI Customizations section now starts collapsed so it does not consume
sidebar space before users need it. Expanding it preserves the existing saved
preference behavior.
Breaking contract:
Run logs now emit chunk-level records instead of one skill-level record.
Consumers that read top-level `findings` must iterate over
`chunk.findings` for each record.
Before:
```json
{"skill": "security-review", "findings": [...]}
```
After:
```json
{"schemaVersion": 1, "chunk": {"index": 1, "findings": [...]}}
```