Interactive plan validation loop for /resolve. Displays plan, offers modification/regeneration options, handles validation states.
Install
npx skillscat add nicolas-codemate/claudecodeconfig/plan-validation Install via the SkillsCat registry.
Plan Validation Skill
Interactive validation loop for implementation plans. Allows users to review, modify, regenerate, or validate plans before implementation.
Input Requirements
ticket_id: The ticket identifierplan_path: Path to plan file (.claude/feature/{ticket-id}/plan.md)status_path: Path to status file (.claude/feature/{ticket-id}/status.json)mode: Either "interactive", "auto", or "refine"
Behavior by Mode
AUTO Mode
In AUTO mode, the plan is validated automatically without user interaction:
- Mark plan as validated
- Update status:
{ "state": "plan_validated", "plan_validated_at": "{ISO timestamp}" } - Return
continue_to_implement: true
INTERACTIVE Mode
In INTERACTIVE mode, enter the validation loop described below.
REFINE Mode
REFINE mode is similar to INTERACTIVE mode but with additional options for deep plan analysis:
- Display plan summary (same as INTERACTIVE)
- Present extended options including "Poser des questions" and "Challenger le plan"
- Enter refinement loop (see "Refine-Specific Options" below)
Validation Loop
1. Display Plan Summary
# Plan d'implementation: {ticket-id}
## Ticket
- **ID**: {ticket-id}
- **Titre**: {title}
- **Source**: {source}
## Analyse
- **Complexite**: {level}
- **Workflow**: {workflow_type}
- **Exploration**: {exploration_status}
## Plan
- **Phases**: {N}
- **Fichier**: .claude/feature/{ticket-id}/plan.mdDisplay the full plan content from the plan file.
2. Present Options
INTERACTIVE mode options:
AskUserQuestion:
question: "Que souhaitez-vous faire avec ce plan ?"
header: "Plan"
options:
- label: "Valider et implementer (session fresh)"
description: "Confirmer et relancer avec --continue pour un contexte optimal (Recommande)"
- label: "Valider et implementer (meme session)"
description: "Confirmer, /compact et continuer ici (pour tickets simples)"
- label: "Modifier le plan"
description: "Apporter des changements au plan"
- label: "Regenerer le plan"
description: "Relancer la generation avec nouvelles instructions"REFINE mode options (extended):
AskUserQuestion:
question: "Comment souhaitez-vous raffiner ce plan ?"
header: "Raffiner"
options:
- label: "Poser des questions"
description: "Claude identifie les zones d'ombre et pose des questions"
- label: "Challenger le plan"
description: "Discuter des choix techniques, trouver les edge cases"
- label: "Modifier le plan"
description: "Apporter des changements au plan"
- label: "Regenerer le plan"
description: "Relancer la generation avec nouvelles instructions"
# After refinement discussion:
AskUserQuestion:
question: "Que faire maintenant ?"
header: "Suite"
options:
- label: "Continuer le raffinement"
description: "Continuer a challenger et affiner le plan"
- label: "Valider et implementer (session fresh)"
description: "Confirmer et relancer avec --continue pour un contexte optimal (Recommande)"
- label: "Valider et implementer (meme session)"
description: "Confirmer, /compact et continuer ici (pour tickets simples)"3. Handle User Choice
Option: "Poser des questions" (REFINE mode only)
Claude analyzes the plan and identifies potential issues, edge cases, and unclear areas:
Analyze the plan for:
- Ambiguous requirements or missing details
- Edge cases not covered
- Error handling gaps
- Performance considerations
- Security implications
- Testing scenarios missing
Present questions to the user:
## Questions sur le plan En analysant le plan, j'ai identifie les points suivants: ### Edge Cases 1. Que se passe-t-il si {scenario X} ? 2. Comment gerer le cas ou {condition Y} ? ### Clarifications necessaires 3. Dans la phase 2, {question about implementation detail} 4. Pour {component}, avez-vous une preference pour {option A vs B} ? ### Risques potentiels 5. {potential risk} - comment souhaitez-vous le gerer ?Discuss answers with user and update plan if needed
Return to options menu (REFINE mode options)
Option: "Challenger le plan" (REFINE mode only)
Interactive discussion mode where the user challenges the plan:
Prompt for challenge:
## Challenger le plan Vous pouvez: - Questionner les choix techniques - Proposer des alternatives - Identifier des problemes potentiels - Demander des justifications Qu'est-ce qui vous preoccupe ou que souhaitez-vous challenger ?Claude responds to challenges:
- Defends choices with reasoning
- Acknowledges valid concerns
- Proposes modifications when appropriate
- Identifies trade-offs
Apply changes to plan if agreed upon
Continue discussion or return to options menu
Example challenge flow:
User: "Je pense que la phase 2 est trop complexe, on pourrait simplifier"
Claude: "Vous avez raison, la phase 2 fait X, Y et Z. On pourrait:
- Option A: Fusionner Y et Z
- Option B: Deplacer Z en phase 3
Quelle approche preferez-vous?"
User: "Option A"
Claude: *updates plan* "J'ai mis a jour le plan. Voulez-vous challenger autre chose?"- Return to options menu when done
Option: "Modifier le plan"
AskUserQuestion:
question: "Quelles modifications souhaitez-vous apporter ?"
header: "Modifications"
options:
- label: "Ajouter une phase"
description: "Inserer une nouvelle etape dans le plan"
- label: "Modifier une phase"
description: "Changer le contenu d'une phase existante"
- label: "Supprimer une phase"
description: "Retirer une etape du plan"
- label: "Autre modification"
description: "Decrire librement les changements"After user describes modifications:
- Apply changes to plan file
- Re-display the updated plan
- Return to step 2 (loop)
Option: "Regenerer le plan"
AskUserQuestion:
question: "Quelles instructions pour la nouvelle generation ?"
header: "Instructions"
options:
- label: "Plus simple"
description: "Reduire le nombre de phases, approche minimaliste"
- label: "Plus detaille"
description: "Ajouter plus de details et sous-etapes"
- label: "Approche differente"
description: "Utiliser une autre strategie d'implementation"
- label: "Instructions specifiques"
description: "Decrire precisement ce que vous voulez"After receiving instructions:
- Delete current plan
- Return
regenerate_plan: truewith regeneration context - Caller should regenerate plan and call this skill again
Option: "Valider et implementer (session fresh)"
Update status:
{ "state": "plan_validated", "plan_validated_at": "{ISO timestamp}" }Display next steps:
## Plan valide Le plan est sauvegarde dans `.claude/feature/{ticket-id}/plan.md`. Pour lancer l'implementation avec un contexte frais : /resolve {ticket-id} --continueReturn
stop: true- Do not continue to implementation
Option: "Valider et implementer (meme session)"
Update status:
{ "state": "plan_validated", "plan_validated_at": "{ISO timestamp}" }Remind user about branch:
## Pre-Implementation Avant de continuer, assurez-vous d'avoir cree votre branche: git checkout -b {prefix}/{ticket-id}-{slug}Confirm branch ready:
AskUserQuestion: question: "Branche creee ? Pret pour l'implementation ?" header: "Confirm" options: - label: "Oui, lancer /compact et implementer" description: "Vider le contexte et demarrer l'implementation" - label: "Annuler" description: "Revenir aux options du plan"If confirmed:
- Execute
/compactto clear context - Return
continue_to_implement: true
- Execute
If cancelled:
- Return to step 2 (loop)
Output
The skill returns one of:
| Output | Meaning |
|---|---|
continue_to_implement: true |
Same-session: proceed to implementation after /compact |
stop: true |
Fresh-session: user will resume via --continue |
regenerate_plan: true |
Caller should regenerate plan with provided context |
Status Updates
This skill updates .claude/feature/{ticket-id}/status.json:
INTERACTIVE mode:
{
"state": "plan_validated",
"plan_validated_at": "2025-01-19T10:30:00+01:00"
}REFINE mode:
{
"state": "plan_validated",
"plan_validated_at": "2025-01-19T10:30:00+01:00",
"refined": true
}