Analyze changes, detect scope issues, and create a well-structured PR following project conventions.
- 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)
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
| 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 |
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:
git checkout develop
git checkout -b feature/payments-stripe
git cherry-pick abc1234 def5678
git push -u origin feature/payments-stripe- 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)
<type>(<scope>): <description>
Examples:
feat(payments): add Stripe checkout integrationfix(sessions): resolve timezone calculation bug
## 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>| 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) |
# 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 WIPAfter 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.
| 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) |
/pr
/pr --base main
/pr --draft
Target: $ARGUMENTS (optional: --base, --draft)