Work a PR
One issue → one branch → one PR. Drive to green CI with no open review threads.
Open
- Branch off
master:claude/fix-<issue>-<slug>. - Implement the smallest correct change. Add a regression test that fails before, passes after.
- Add a
## [unreleased]entry inCHANGELOG.mdreferencing#<issue>(skip for changes that aren't user-relevant, e.g. tooling). - Lint and run related tests locally:
ruff check+ruff format --check, andDJANGO_SETTINGS_MODULE=tests.settings python -m pytest <paths>. - Commit, push
-u. Open the PR filling.github/pull_request_template.md;Fixes #<issue>. - Request a Copilot review. Subscribe to PR activity. Arm a ~1h fallback check-in.
On each CI / review event
- Fix if confident and small; rebut if the suggestion is wrong; skip duplicates/no-ops.
- Push the fix (prefer a follow-up commit; only force-push when you intentionally rebased, and always use
--force-with-lease). - Reply on each review thread, then resolve it — not a PR-level comment.
- Re-request Copilot review. Repeat until CI green and Copilot has no comments.
When master advances
When the branch falls behind master while the PR is open — it shows merge conflicts against the base, or CI ran against a now-stale base — rebase onto the latest master and force-push with lease:
git fetch upstream
git rebase --autostash upstream/master
# resolve conflicts, re-run the affected tests
git push --force-with-lease
Rules
- Reply on threads only; no PR-level status comments.
- Never
git add -A— stage explicit paths, so stray untracked files (local venvs, build output, editor scratch) are never committed. - Don't poll with sleep; events + the fallback check-in wake you. Re-arm it silently if nothing changed.
- Don't self-merge. A subscription ends only when the PR is merged/closed.