Backend PR Workflow Skill
When to Use This Skill
Use this Skill whenever you are:
- Creating or reviewing a backend PR that touches Django models, migrations, or production data.
- Preparing a PR for Django4Lyfe / Workforce backend or a similar repo that uses ClickUp as the primary ticket system.
- Planning a release or hotfix and want to ensure the workflow (branches, tags, and migrations) is correct and downtime-safe.
If local AGENTS.md / CLAUDE.md in the target repo conflict with anything
here, treat those files as the source of truth and use this Skill as the
default baseline.
Example Prompts
- “Use the
backend-pr-workflowskill to review this Django4Lyfe PR’s branch name, ClickUp linkage, migrations, and downtime-safety. Here are the branch name, base branch, and PR title: …” - “Before I open this backend PR, run
backend-pr-workflowon my planned title, description, and migration summary and tell me all[BLOCKING]and[SHOULD_FIX]issues.” - “For this hotfix PR on Django4Lyfe, use
backend-pr-workflowto check that my base branch, title, and release plan follow our backend workflow.” - “I’ve added a new nullable field and a backfill migration. Use
backend-pr-workflowto verify that my migrations and rollout plan are downtime-safe.”
Severity Tags & Output Shape
When this Skill reviews a PR or workflow plan, the response must be structured and tagged:
- Start with a 1–3 sentence summary of what was checked.
- Then use sections:
What’s aligned– bullets of things that follow the workflow.Needs changes– bullets with severity tags:[BLOCKING]– must fix before merge or deploy.[SHOULD_FIX]– important but not strictly blocking for merge.[NIT]– minor consistency or documentation suggestions.
Each bullet in Needs changes should:
- Point to the specific item (branch name, PR title, description, migration file, release plan).
- State the problem and the concrete correction the author should make.
Example bullet:
[BLOCKING] Branch name 'feature/my-thing' does not follow the required 'clickup_<ticket_id>' convention, and CI may not run. Rename to something like 'clickup_GH-1234_my-thing'.
Inputs This Skill Expects
Before giving a full review, this Skill should gather:
- The repository and context (e.g. Django4Lyfe backend / monolith).
- The branch name.
- The PR title and PR description (or the planned ones).
- The base branch (what the PR targets:
release,master, etc.). - Whether the PR:
- Includes Django model changes.
- Adds, modifies, or deletes migrations.
- Is a normal feature/bugfix, a hotfix, or a release PR.
If any of these are missing or unclear, ask the user to provide them before doing a full workflow review.
Checklist 1 – ClickUp & Branch / PR Naming
This Skill treats ClickUp linkage as non-negotiable.
1.1 Branch name
Check the branch name:
- It must start with
clickup_<custom_ticket_id>:- Examples:
clickup_GH-785clickup_GH-785_world_domination
- Examples:
- The ticket ID must be the ClickUp custom ticket ID (e.g.
GH-785), not the numeric internal ID. - Rationale:
- CI (e.g. CircleCI) is configured to run only for branches starting with
clickup_. - ClickUp uses the custom ticket ID to automatically link branches, PRs, and commits to tickets.
- CI (e.g. CircleCI) is configured to run only for branches starting with
If the branch does not follow this pattern, emit:
[BLOCKING]– with a suggested corrected branch name.
1.2 Multi-repo work and sub-tickets
When a feature spans multiple repositories, enforce:
- Do not reuse the same ClickUp ID across multiple repos.
- Instead, require:
- One parent ClickUp ticket for the overall feature.
- Separate sub-tickets per repo:
- Backend:
GH-2961 - Frontend:
GH-2962 - Data Science:
GH-2963 - Infra:
GH-2964
- Backend:
- Each sub-ticket gets its own branch, PR, and commit series, following the same naming rules.
Explain risks of reusing the same ID across repos:
- Automation may update status prematurely or incorrectly.
- PRs from different repos can be linked to the wrong task.
- Ownership and progress become ambiguous.
If the user appears to be reusing the same ID across repos, emit:
[SHOULD_FIX]– recommending sub-tickets and distinct branch/PR naming.
1.3 Commit messages
Check or remind the user that:
- All commits for the PR should start with the ticket ID:
GH-785: Find another meaning of life
- This is often enforced by
commit_msg_hook.pyand pre-commit hooks, but the Skill should still call out obvious violations.
If commit messages clearly lack ticket IDs (based on user input), emit:
[SHOULD_FIX]– asking the author to fix future commits and, where practical, to rewrite recent history before merge.
1.4 PR title
The PR title must:
- Begin with
[<clickup_ticket_id>].- Example:
[GH-785] Found meaning of life
- Example:
If not, emit:
[BLOCKING]– and propose a corrected title that includes the ticket ID.
Remind the user that:
- Correct titles allow ClickUp to auto-link the PR and expose PR status, reviewers, and activity directly in the ticket.
Checklist 2 – WIP Signalling & Base Branch
2.1 WIP / draft status
Check whether the work is still in progress:
- If the author indicates the PR is not ready for review yet:
- The PR should be in draft mode, or
- The title or label should clearly include
WIP/[WIP].
If not, emit:
[SHOULD_FIX]– asking the author to convert to draft or annotate the PR as WIP to avoid premature review.
2.2 Base branch selection
Confirm the base branch matches the project’s release workflow:
- Normal feature / bugfix work:
- Base branch should be
release(for repos following the Django4Lyfe pattern).
- Base branch should be
- Hotfix that must bypass the current
releasecontents:- Base branch should be
master.
- Base branch should be
If a PR targets the wrong base branch:
- Emit
[BLOCKING]and recommend the correct base, explaining whether the change belongs inreleaseor should be amasterhotfix.
If the repo’s docs specify a different default (e.g. custom long-lived branches
documented in CLAUDE.md), follow that instead.
Checklist 3 – PR Description & Self-Review
This Skill expects PR authors to be their own first reviewer.
3.1 PR description quality
Check that the description (or planned description):
- Follows any existing PR template for the repo, if one exists.
- Clearly explains:
- What changed.
- Why it changed (the problem or goal).
- Whether there are any breaking changes and what reviewers should inspect carefully.
- Any required secrets, DB dumps, or setup information, with guidance to share secrets via 1Password / Slack and to clean up messages.
- Any manual steps needed for deploy:
- Env vars to add/update.
- Buckets or external resources to create.
- Management commands or scripts to run.
- Whether a DB snapshot is recommended before deploy (for heavy data changes).
If key context is missing, emit:
[SHOULD_FIX]– listing the missing items and suggesting how to include them.
3.2 Self-review checklist
Prompt the author to confirm they have checked:
- Branch is up to date with the base branch; diff is not polluted by unrelated files.
- All debugging code is removed:
- No
print()/ipdb/pdbleft behind.
- No
- Tests have been added or updated for new functionality.
- Tests are passing in CI.
- Pre-commit hooks and coding conventions have been applied.
- Code coverage has not regressed significantly.
- For Django changes: migrations have been cleaned up and regenerated if there were multiple schema iterations.
If any of these fail obviously based on the PR description or user input, emit
appropriate [SHOULD_FIX] or [BLOCKING] bullets.
Checklist 4 – Releases, Hotfixes, and Tags
This Skill enforces a clean release flow.