원클릭으로
review
Adresse les commentaires de revue sur les PR (humain + bots). Mode auto-détecté selon le type d'issue. Usage: /review [<issue#>|<PR#>]
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
Adresse les commentaires de revue sur les PR (humain + bots). Mode auto-détecté selon le type d'issue. Usage: /review [<issue#>|<PR#>]
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
Phase exécution. Détecte le mode (epic/task/bug) selon le type d'issue et lance le bon mécanisme : loop driver background pour epic, code-dev synchrone pour task/bug. Usage: /implement <issue#>
Conception pipeline. Détecte le mode (epic/task/bug) selon le type d'issue ou le prompt et invoque les agents appropriés. Usage: /analyse [<issue#>] [<description>]
Planifie le prochain sprint : calcule la capacité (vélocité glissante 3 sprints), reporte les tickets non livrés du sprint courant, puis complète depuis le backlog par priorité jusqu'à la capacité. Présente le plan, attend validation, puis assigne les tickets au sprint. Usage: /plan-sprint [<titre-sprint-cible>]
Calcule la vélocité des sprints terminés (Σ points des tickets feuilles livrés) et recommande la capacité du prochain sprint. À lancer en fin de sprint. Thin wrapper bash sur sprint_velocity.sh, zéro LLM lourd. Usage: /velocity [<titre-sprint>]
Régénère la documentation utilisateur (`docs/*.md`) à partir de l'état courant du code. Usage : /doc (sur la branche courante) ou /doc <issue#> (sur la branche linkée à un epic / ticket).
Dashboard d'avancement des epics en cours. Thin wrapper sur les scripts bash qui agrègent les logs per-agent (.claude/state/epic_run/) et le state GitHub. Pas de LLM lourd. Usage: /report [<epic_N> ...]
| name | review |
| description | Adresse les commentaires de revue sur les PR (humain + bots). Mode auto-détecté selon le type d'issue. Usage: /review [<issue#>|<PR#>] |
Délègue à l'agent review-fixer dans un worktree dédié pour : lire les commentaires non résolus, appliquer les fixes, valider, push, répondre aux threads. Trois modes auto-détectés :
| Mode | Trigger | Scope du review |
|---|---|---|
| epic | Issue type Feature | Toutes les sub-task PRs liées à la feature + la PR finale epic/<N> → alpha. Les fixes sont appliqués sur la branche d'intégration epic/<N> (les sub-tasks sont déjà squash-mergées dedans). |
| task | Issue type Task | La PR du ticket en review. Fixes sur la branche head du PR. |
| bug | Issue type Bug | La PR du bug en review. Fixes sur la branche head du PR. |
| (no-arg) | Aucun argument, sur une branche de PR | La PR de la branche courante (équivalent task/bug single-PR). |
Globalement le fonctionnement reste identique au précédent /review : fetch, fix, re-validate, reply. La nouveauté c'est que le travail réel se passe dans un agent qui tourne en worktree (comme code-dev pour /implement), pas dans le main context.
ARG_HEAD="$(echo "$ARGUMENTS" | awk '{print $1}')"
case "$ARG_HEAD" in
'#'[0-9]*|[0-9]*)
ID="${ARG_HEAD#\#}"
# ID peut être un issue number ou un PR number — on essaie d'abord issue
;;
https://github.com/*/issues/*)
ID="$(echo "$ARG_HEAD" | sed -E 's#.*/issues/([0-9]+).*#\1#')"
;;
https://github.com/*/pull/*)
ID="$(echo "$ARG_HEAD" | sed -E 's#.*/pull/([0-9]+).*#\1#')"
IS_PR=1
;;
*)
ID=""
;;
esac
gh issue view <ID> --json number,issueType,labels → brancher selon issueType.name (Feature/Task/Bug).gh pr view <ID> --json closingIssuesReferences → trouver l'issue liée → brancher selon son type.gh pr view --json number réussit) → mode task ou bug selon l'issue liée à cette PR. PR = la PR courante.gh pr list --state open --json number,title,reviewDecision --jq '.[] | select(.reviewDecision == "REVIEW_REQUIRED" or .reviewDecision == "CHANGES_REQUESTED")') et demander laquelle traiter.epicEPIC_N="$ID"
# 1. PR finale epic/<N> → alpha (si ouverte)
FINAL_PR=$(gh pr list --head "epic/$EPIC_N" --base alpha --state open --json number --jq '.[0].number // empty')
# 2. Sub-task PRs (open ET closed-merged — les comments restent lisibles sur les closed PRs)
SUBTASK_PRS=$(gh api graphql -f query='{
repository(owner:"SocialGouv", name:"egapro") {
issue(number: '$EPIC_N') {
subIssues(first: 50) {
nodes {
closedByPullRequestsReferences(first: 5) { nodes { number state } }
}
}
}
}
}' --jq '[.data.repository.issue.subIssues.nodes[].closedByPullRequestsReferences.nodes[].number] | unique')
# 3. Filtrer les PRs avec des unresolved comments
PR_LIST=$(echo "$FINAL_PR $SUBTASK_PRS" | tr ' ' '\n' | sort -u | while read PR; do
[ -z "$PR" ] && continue
HAS=$(gh pr view "$PR" --json reviewDecision --jq '.reviewDecision' 2>/dev/null)
if [ "$HAS" = "REVIEW_REQUIRED" ] || [ "$HAS" = "CHANGES_REQUESTED" ]; then
echo "$PR"
fi
done | tr '\n' ' ')
WORKING_BRANCH="epic/$EPIC_N"
Si aucune PR n'a de review en attente → afficher Aucune review non adressée sur l'epic #<N> ; rien à faire. et exit.
task ou bug (single PR)# Trouver la PR liée à l'issue
PR_LIST=$(gh issue view "$ID" --json closedByPullRequestsReferences \
--jq '[.closedByPullRequestsReferences.nodes[] | select(.state == "OPEN") | .number] | join(" ")')
# Fallback : chercher par branche linkée
[ -z "$PR_LIST" ] && PR_LIST=$(gh pr list --search "linked:$ID" --json number --jq '.[0].number')
WORKING_BRANCH=$(gh pr view "$PR_LIST" --json headRefName --jq '.headRefName')
Réutiliser ou créer un worktree sur WORKING_BRANCH :
# Picker un index libre dans [0, EPIC_MAX_PARALLEL[
INDEX=$(...) # premier libre via lsof sur 3001+
WT_PATH="$(cd "${REPO_ROOT}/.." && pwd)/egapro-review-${ID}"
if [ ! -d "$WT_PATH" ]; then
git fetch origin "$WORKING_BRANCH"
git worktree add "$WT_PATH" "origin/$WORKING_BRANCH"
fi
if [ ! -f "$WT_PATH/packages/app/.env.local" ]; then
(cd "$WT_PATH" && bash scripts/setup-worktree.sh "$INDEX")
fi
review-fixerInvoquer l'agent review-fixer (.claude/agents/review-fixer/AGENT.md) en foreground synchrone avec :
mode : epic / task / bugPR_LIST : numéros séparés par espacesWORKING_BRANCH : epic/<N> en mode epic, ou la PR head branch en mode task/bugWT_PATH + INDEXL'agent :
WORKING_BRANCH dans le worktreeWORKING_BRANCHgh apiL'agent retourne un JSON strict :
{"status":"validated","prs":[...],"fixes_applied":N,"replies_posted":M} → tout est réglé{"status":"needs_user","prs":[...],"unposted_replies":N} → des replies pendantes (l'utilisateur a refusé / demandé à attendre){"status":"failed","prs":[...],"reason":"..."} → erreur technique{"status":"watching","prs":[...],"resume_after":<sec>} → l'utilisateur veut surveiller les nouveaux commentairesSi l'utilisateur souhaite continuer à surveiller les nouveaux commentaires sur les mêmes PRs :
resume_after (typiquement 5 min) → re-fetch comments → si nouveau comment depuis le dernier push → re-spawner review-fixerCtrl+C ou arrêter en chat) à tout momentSinon → exit avec un report court :
## Review: <PASS | NEEDS_USER | FAILED>
Mode: <epic|task|bug>
PRs traitées: #N1, #N2, …
Fixes appliqués: K
Replies postées: M
Working branch: <branch>
review-fixer)./review ne touche jamais au board. In review et Done sont user-only.epic/<N>, pas sur les sub-task branches (qui sont supprimées après squash-merge). Si un sub-task PR est encore OPEN (rare en pratique — la pipeline aurait dû le squash-merger), le pipeline /implement reprend la main, pas /review.review-fixer prépare les replies, l'utilisateur les valide avant de les poster. Cette discipline est conservée du /review historique..claude/rules/git-artefact-hygiene.md. Les replies sont publiques : pas de secret/PII/infra interne..claude/agents/review-fixer/AGENT.md.claude/agents/{validator,structural-auditor,rgaa-auditor,security-auditor}/AGENT.md.claude/rules/git-artefact-hygiene.md