Claude
Skills
Sign in
Back

dev:auto:feature

Included with Lifetime
$97 forever

Workflow complet de développement automatisé (mode non-interactif)

General

What this skill does


# Objectif

## Instructions à Exécuter

**IMPORTANT : Exécute ce workflow étape par étape :**


Orchestrateur du workflow de développement en 10 phases **SANS interaction utilisateur**.

Exécution automatique complète : récupérer issue → phases 1-8 → cleanup → créer PR.
Objectif : PR créée et prête pour review, CI passe.

# Issue GitHub

Issue #$ARGUMENTS (spec récupérée automatiquement)

# ⚠️ MODE NON-INTERACTIF

Ce workflow s'exécute automatiquement **sans checkpoints utilisateur**.

- **Worktree OBLIGATOIRE** : créé et nettoyé automatiquement
- **0 interaction requise** : heuristiques appliquées à chaque décision
- **CI DOIT PASSER** : PHPStan niveau 9, tests
- **Auto-fix en boucle** : max 3 tentatives en Phase 6, puis rollback si échec

Pour un workflow interactif avec validation à chaque phase, utilise `/dev:feature`.

# Prérequis obligatoires

Exécuter `/dev:auto:check-prerequisites` pour vérifier que TOUS les prérequis sont présents.

Exit code 1 et arrêt si quelque chose manque.

# Workflow

## Phase 0 : Vérifier les prérequis

**🔄 Progression :** `TaskUpdate` → tâche #0 en `in_progress`

**⏱️ Démarrer le timer**

Exécuter `/dev:auto:check-prerequisites`

Si la skill exit 1, arrêter immédiatement.

**⏱️ Arrêter le timer**

**🔄 Progression :** `TaskUpdate` → tâche #0 en `completed`

**Affichage :**
```
✅ Prérequis vérifiés

Tous les outils nécessaires sont présents :
  ✅ gh CLI authentifiée
  ✅ jq disponible
  ✅ git disponible

Lancement du workflow...
```

## Phase 1 : Fetch Issue (Initialisation)

**⏱️ Démarrer le timer**

**Déterminer le chemin :**

```bash
issue_number=$ARGUMENTS
workflow_state_file=".claude/data/workflows/issue-${issue_number}-dev-workflow-state.json"

# Créer le répertoire s'il n'existe pas
mkdir -p ".claude/data/workflows"
```

Exécuter `/dev:auto:fetch-issue $ARGUMENTS`

**Processus :**
- Valider que l'argument est un numéro d'issue
- Récupérer l'issue GitHub via `gh issue view`
- Vérifier que l'issue est OPEN et a une description
- Sauvegarder les infos dans `${workflow_state_file}`

Si `/dev:auto:fetch-issue` échoue :
- Exit avec code 1
- Afficher le message d'erreur explicite
- Arrêter

**⏱️ Arrêter le timer**

**Affichage :**
```
🔗 Issue GitHub récupérée

  #123 : Description du feature
  État : OPEN
  Labels : enhancement

Lancement du workflow...
```

## Initialisation

### 1. Créer automatiquement le worktree (OBLIGATOIRE)

```
🤖 Mode automatique activé pour : {feature}

📂 Création du worktree...
```

**Processus :**
- Normaliser le nom de la feature en slug (kebab-case, minuscules, tirets)
- Créer le répertoire `.worktrees/` s'il n'existe pas
- Créer le worktree avec `/dev:worktree create {feature-slug}`
- Mettre à jour `.claude/data/workflows/issue-${issue_number}-dev-workflow-state.json`

**Si création échoue :**
→ **FAIL HARD** avec message d'erreur et exit code 1.

### 2. Initialiser le fichier d'état

Le fichier `.claude/data/workflows/issue-{issue_number}-dev-workflow-state.json` a déjà été créé par Phase 0 avec les infos de l'issue.

Mettre à jour le fichier pour ajouter les infos du worktree :

```json
{
  "mode": "auto",
  "issue": {
    "number": {numéro},
    "title": "{issue title}",
    "description": "{issue body}",
    "labels": "{issue labels}",
    "state": "OPEN",
    "fetchedAt": "{ISO timestamp}"
  },
  "feature": "{issue title}",
  "status": "in_progress",
  "startedAt": "{ISO timestamp}",
  "currentPhase": 1,
  "worktree": {
    "name": "{feature-slug}",
    "path": ".worktrees/{feature-slug}",
    "branch": "feature/{feature-slug}",
    "cleaned": false,
    "branchDeleted": false
  },
  "autoConfig": {
    "worktreeCreated": true,
    "decisions": {},
    "autoFixAttempts": {}
  },
  "timing": {
    "totalDurationMs": null
  },
  "phases": {}
}
```

### 3. Créer les tâches du workflow

Utiliser `TaskCreate` pour chaque phase :

```
TaskCreate #0: Prérequis - Vérifier les outils
TaskCreate #1: Fetch - Récupérer l'issue GitHub
TaskCreate #2: Discover - Comprendre le besoin
TaskCreate #3: Explore - Explorer codebase
TaskCreate #4: Clarify - Heuristiques automatiques
TaskCreate #5: Design - Architecture (Pragmatic)
TaskCreate #6: Plan - Générer specs
TaskCreate #7: Code - Implémenter
TaskCreate #8: Review - Auto-fix × 3
TaskCreate #9: Cleanup - Nettoyer worktree
TaskCreate #10: Create PR - Créer la Pull Request
```

**Important :**
- Utiliser `activeForm` (ex: "Vérifiant les outils", "Récupérant l'issue GitHub")
- Toutes les tâches sont créées d'office (mode automatique)

### 4. Afficher le statut initial

```
🤖 Workflow automatique : {feature}

  🔵 0. Prérequis  - Vérifier les outils        ← En cours
  ⬜ 1. Fetch      - Récupérer l'issue GitHub
  ⬜ 2. Discover   - Comprendre le besoin
  ⬜ 3. Explore    - Explorer codebase
  ⬜ 4. Clarify    - Heuristiques automatiques
  ⬜ 5. Design     - Architecture (Pragmatic)
  ⬜ 6. Plan       - Générer specs
  ⬜ 7. Code       - Implémenter
  ⬜ 8. Review     - Auto-fix × 3
  ⬜ 9. Cleanup    - Nettoyer worktree
  ⬜ 10. Create PR - Créer la Pull Request
```

## Gestion du timing et progression

**⚠️ IMPORTANT :** Chaque phase suit ce pattern :
1. `TaskUpdate` → tâche en `in_progress`
2. ⏱️ Démarrer le timer + exécuter la phase
3. ⏱️ Arrêter le timer
4. `TaskUpdate` → tâche en `completed`

**Avant chaque phase :**
1. Utiliser `TaskUpdate` pour marquer la tâche comme `in_progress`
2. Enregistrer le timestamp de début :
```json
{
  "phases": {
    "{N}": { "status": "in_progress", "startedAt": "{ISO timestamp}" }
  }
}
```

**Après chaque phase :**
1. Calculer la durée et mettre à jour :
```json
{
  "phases": {
    "{N}": {
      "status": "completed",
      "startedAt": "{ISO timestamp}",
      "completedAt": "{ISO timestamp}",
      "durationMs": {durée en millisecondes}
    }
  }
}
```
2. Utiliser `TaskUpdate` pour marquer la tâche comme `completed`

**Pattern illustré dans Phase 0 - À reproduire pour toutes les phases 1-10.**

## Phase 1 : Discover

**⏱️ Démarrer le timer**

Exécuter `/dev:auto:discover`

Si `/dev:auto:discover` échoue (ambiguïté critique) :
- Exit avec code 1
- Cleanup worktree
- Arrêter

**⏱️ Arrêter le timer**

**Affichage :**
```
✅ Phase 1 : Discover complétée (45s)
🔵 Phase 2 : Explore en cours
```

## Phase 3 : Explore

**⏱️ Démarrer le timer**

Exécuter `/dev:auto:explore` (exploration codebase sans interaction)

**⏱️ Arrêter le timer**

## Phase 4 : Clarify

**⏱️ Démarrer le timer**

Exécuter `/dev:auto:clarify` (applique heuristiques, zéro question)

**⏱️ Arrêter le timer**

## Phase 5 : Design

**⏱️ Démarrer le timer**

Exécuter `/dev:auto:design` (choisit Pragmatic Balance automatiquement)

**⏱️ Arrêter le timer**

## Phase 6 : Plan

**⏱️ Démarrer le timer**

Exécuter `/dev:auto:plan` (génération plan sans interaction)

**⏱️ Arrêter le timer**

## Phase 7 : Code

**⏱️ Démarrer le timer**

Exécuter `/dev:auto:code` (implémente directement, pas d'approbation)

**⏱️ Arrêter le timer**

## Phase 8 : Review

**⏱️ Démarrer le timer**

Exécuter `/dev:auto:review` (boucle auto-fix max 3 tentatives)

**Si review échoue (PHPStan impossible) :**
- Logger l'erreur dans workflow-state.json
- **Déclencher ROLLBACK** :
  ```bash
  git reset --hard HEAD@{0}
  /dev:worktree remove {feature-name}
  ```
- Mettre à jour workflow-state.json avec `status: "failed"`
- Exit code 1 avec message explicite

**⏱️ Arrêter le timer**

**Si succès :**
- Continuer à Phase 8

**⏱️ Calculer le temps total :**
1. Lire `.claude/data/workflows/issue-${issue_number}-dev-workflow-state.json`
2. Calculer `totalDurationMs` = somme de tous les `durationMs` des phases
3. Mettre à jour le fichier avec `timing.totalDurationMs`

## Phase 9 : Cleanup (OBLIGATOIRE)

**⏱️ Démarrer le timer**

**Nettoyage automatique du worktree :**

```
🧹 Nettoyage du worktree...
```

1. Vérifier que worktree a été créé (vérifier workflow state)
2. Exécuter `/dev:worktree remove {feature-name}` automatiquement
3. Ne PAS supprimer la branche (elle sera utilisée pour la PR en Phase 1

Related in General