Create Pull Request
Analyze changes, detect scope issues, and create a well-structured PR following project conventions.
Process
- Analyze Changes: Calculate complexity score from files, commits, and directories
- Detect Scope Issues: Warn if PR is too large or mixes unrelated changes
- Suggest Split: If needed, group commits by scope and propose separate PRs
- Collect Info: Ask for type, target branch, draft status, labels
- Generate Content: Create TLDR + description + checklist
- Create PR: Execute
gh pr createwith proper formatting - Remind Follow-up: Display post-PR checklist (SonarQube, Claude Review)
Complexity Score
Calculate PR complexity to detect if split is needed:
| Criterion | Weight | Description |
|---|---|---|
| Code files | x2 | *.ts, *.tsx (excluding tests) |
| Test files | x0.5 | *.test.ts, *.spec.ts |
| Config files | x1 | *.json, *.yml, *.md |
| Directories | x3 | Distinct src/* directories |
| Commits | x1 | Number of commits |
Thresholds: 0-15 ✅ Normal | 16-25 ⚠️ Large | 26+ 🔴 Split recommended
Scope Coherence
| Pattern | Verdict |
|---|---|
| Single scope | ✅ OK |
| Related scopes (sessions + calendar) | ✅ OK |
| Unrelated scopes (payments + auth) | 🔴 Split |
| feat + fix same scope | ✅ OK |
| feat + fix different scopes | 🔴 Split |
Split Suggestion Format
When split is recommended, display:
🔴 Scope trop large (score: 32) Commits par scope : ├── payments (5 commits, 8 fichiers) │ ├── feat(payments): add Stripe checkout │ └── fix(payments): handle currency │ └── notifications (3 commits, 6 fichiers) └── feat(notifications): add email templates 💡 Suggestion : 1. PR #1 : feature/payments-stripe → Commits payments 2. PR #2 : feature/notifications → Commits notifications Options : [A] Continuer avec une seule PR (non recommandé) [B] Découper (semi-auto - commandes git fournies) [C] Voir détail fichiers
Semi-auto split provides copy-paste commands:
bashgit checkout develop git checkout -b feature/payments-stripe git cherry-pick abc1234 def5678 git push -u origin feature/payments-stripe
Questions to Ask
- Type: feature | fix | tech | docs | security
- Target Branch: Show recent branches (develop, main, others)
- Draft: Yes (WIP) | No (ready for review)
- Labels: Based on type + optional (breaking-change, security)
PR Title Format
<type>(<scope>): <description>
Examples:
feat(payments): add Stripe checkout integrationfix(sessions): resolve timezone calculation bug
PR Body Template
markdown## TLDR <!-- 2 lines max - Executive summary --> --- ## Type {Feature | Fix | Tech | Docs | Security} ## Description {Context and changes} ## Technical Changes {List of main modifications} ## Tests - [ ] Unit tests added/passing - [ ] Manual testing completed ## Checklist - [ ] Code follows conventions - [ ] No console.log left - [ ] Types OK (`pnpm typecheck`) --- 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
Available Labels
| Label | Color | Use When |
|---|---|---|
feature | 🟢 | New functionality |
fix | 🔴 | Bug fix |
tech | 🔵 | Refactoring, tech debt |
docs | 📘 | Documentation only |
security | 🟣 | Security fix |
breaking-change | ⚫ | Breaking changes |
WIP | 🟡 | Work in progress (draft) |
Commands to Execute
bash# 1. Get base branch (usually develop) BASE_BRANCH="develop" # 2. Calculate complexity score CODE=$(git diff --name-only $BASE_BRANCH..HEAD | grep -E '\.(ts|tsx)$' | grep -v test | wc -l) TESTS=$(git diff --name-only $BASE_BRANCH..HEAD | grep -E '\.test\.|\.spec\.' | wc -l) DIRS=$(git diff --name-only $BASE_BRANCH..HEAD | cut -d'/' -f1-2 | sort -u | wc -l) COMMITS=$(git rev-list --count $BASE_BRANCH..HEAD) SCORE=$((CODE * 2 + TESTS / 2 + DIRS * 3 + COMMITS)) # 3. Get scopes from commits git log --oneline $BASE_BRANCH..HEAD --format="%s" | sed -n 's/^\w*(\([^)]*\)).*/\1/p' | sort | uniq -c # 4. Recent branches for selection git branch --sort=-committerdate --format='%(refname:short)' | head -5 # 5. Create PR gh pr create \ --title "<type>(<scope>): <description>" \ --body "$BODY" \ --base $BASE_BRANCH \ --label "<label>" \ --draft # if WIP
Post-PR Output
After PR creation, ALWAYS display:
✅ PR créée : https://github.com/org/repo/pull/XXX 📋 Prochaines étapes automatiques : • SonarQube analysera la qualité du code (bugs, vulnérabilités, code smells) • Claude Code Review fournira un feedback IA sur votre PR ⏳ Pensez à surveiller ces analyses dans les prochaines minutes. Si des problèmes sont détectés, corrigez-les avant de demander une review humaine.
Edge Cases
| Situation | Behavior |
|---|---|
| No scope in commits | Analyze by directories |
| Non-conventional commits | Warn + ask type manually |
| No commits (same as base) | Error: "Aucun changement" |
| Single commit | Use commit message as title |
| Merge commits | Ignore (--no-merges) |
Usage
/pr /pr --base main /pr --draft
Target: $ARGUMENTS (optional: --base, --draft)

