---
name: forge-progress
description: "Tableau de bord de progression du projet — lecture seule"
disable-model-invocation: true
allowed-tools:
  - Read
  - Glob
  - Grep
  - Bash
---

## Contexte dynamique (injecté automatiquement)

**STATE.md :**
!`cat .planning/STATE.md 2>/dev/null || echo "STATE.md non trouvé"`

**Config projet :**
!`cat .planning/config.json 2>/dev/null || echo "config.json non trouvé"`

**Waves :**
!`node .claude/bin/dagsmith-tools.js wave-group --plan .planning/PLAN.md 2>/dev/null || echo "wave-group non disponible"`

**Phases :**
!`ls .planning/phases/ 2>/dev/null || echo "Aucune phase"`

**Branche / commits :**
!`git branch --show-current 2>/dev/null && git log --oneline -5 2>/dev/null && echo "Total commits: $(git log --oneline 2>/dev/null | wc -l)" || echo "git non disponible"`

---

# forge-progress — Tableau de bord

Tu affiches un tableau de bord complet de la progression du projet. Tu ne modifies
RIEN — strictement lecture seule, aucun effet de bord.

---

## Entrée

Pas de `$ARGUMENTS`. Le skill affiche toujours la vue globale.

---

## Étape 1 — Collecte des données

Lire ces sources dans l'ordre. Si un fichier n'existe pas, noter son absence
et continuer avec les données disponibles (dégradation gracieuse).

### 1.1 — Configuration

Lire `.planning/config.json` pour :
- `project_name`
- `git_branching`
- `model_profile`

Si absent : utiliser "Projet" comme nom par défaut.

### 1.2 — STATE.md

Lire `.planning/STATE.md` pour :
- `## Current Phase` → phase active N
- `## Current Wave` → wave active W
- `## Tasks` → progression détaillée
- `## Blockers` → blockers éventuels
- `## Pause Context` → contexte de pause (si session pausée)

Si absent : signaler "STATE.md non trouvé — le projet n'a peut-être pas encore été initialisé."

### 1.3 — PLAN.md

Lire `.planning/PLAN.md` pour :
- Liste de toutes les tâches (par phase)
- Statut de chaque tâche : `[x]` (terminée), `[!]` (échec), `[-]` (skippée), `[ ]` (à faire)
- Waves via dagsmith-tools.js :

```bash
node .claude/bin/dagsmith-tools.js wave-group --plan .planning/PLAN.md
```

Si absent : signaler "PLAN.md non trouvé — lance `/forge-planner` pour créer le plan."

### 1.4 — Fichiers de phases

Lister les fichiers présents dans `.planning/phases/` :

```bash
ls .planning/phases/ 2>/dev/null
```

Pour chaque phase N, vérifier la présence de :
- `{N}-CONTEXT.md` → discuss effectué
- `{N}-SUMMARY.md` → exécution effectuée
- `{N}-VERIFICATION.md` → vérification effectuée

Si le répertoire n'existe pas, noter "Aucune phase créée."

### 1.5 — Git

```bash
git branch --show-current
git log --oneline -5
git log --oneline | wc -l
```

Capturer :
- Branche courante
- Nombre total de commits sur la branche
- 5 derniers commits (hash + message)

---

## Étape 2 — Calcul des métriques

À partir des données collectées, calculer :

- **Phases totales** : nombre de phases distinctes dans PLAN.md
- **Phases complétées** : phases dont toutes les tâches sont `[x]` ET un VERIFICATION.md avec verdict VALIDÉE existe
- **Tâches totales** : nombre total de tâches dans PLAN.md
- **Tâches terminées** : nombre de `[x]`
- **Tâches en échec** : nombre de `[!]`
- **Tâches skippées** : nombre de `[-]`
- **Tâches restantes** : nombre de `[ ]`
- **Pourcentage** : terminées / totales × 100

---

## Étape 3 — Affichage du tableau de bord

Afficher le rapport suivant (adapter les données selon ce qui est disponible) :

```
# Progression — {project_name}

## Vue globale
- Phases : {complétées}/{totales} complétées
- Tâches : {terminées}/{totales} terminées ({pct}%)
- En échec : {échecs} | Skippées : {skippées}
- Phase active : {N} — "{titre}"

## Détail par phase

| Phase | Titre | Discuss | Plan | Execute | Verify | Complete |
|-------|-------|---------|------|---------|--------|----------|
| {N} | {titre} | {icône} | {icône} | {icône} | {icône} | {icône} |
```

### Icônes de statut

- `✅` — étape terminée (fichier présent et valide)
- `🔄` — étape en cours (phase active, exécution partielle)
- `—` — étape pas encore commencée

### Logique des colonnes

| Colonne | Condition pour ✅ |
|---------|-------------------|
| Discuss | `{N}-CONTEXT.md` existe |
| Plan | Des tâches de la phase N existent dans PLAN.md |
| Execute | Toutes les tâches de la phase sont `[x]` ou `[!]` (plus aucune `[ ]`) |
| Verify | `{N}-VERIFICATION.md` existe avec verdict VALIDÉE |
| Complete | Phase marquée complétée dans STATE.md |

### Détail de la phase active

Si une phase est en cours d'exécution (tâches `[ ]` restantes) :

```
## Phase active : {N} — {titre}

| Wave | Tâches | Terminées | Échecs | Statut |
|------|--------|-----------|--------|--------|
| W1 | {ids} | {n}/{total} | {n} | ✅/🔄/— |
| W2 | {ids} | {n}/{total} | {n} | ✅/🔄/— |
```

### Section git

```
## Git
- Branche : {branche}
- Commits sur branche : {nombre}
- Dernier : {hash} — {message}
```

### Section blockers (si présents)

```
## Blockers
- {blocker depuis STATE.md}
```

---

## Étape 4 — Recommandation contextuelle

Analyser l'état et proposer la prochaine action :

**Si aucun fichier .planning/ n'existe :**
> "Projet non initialisé. Lance `/forge-explore` (greenfield) ou `/forge-map` (brownfield) pour commencer."

**Si PLAN.md n'existe pas mais BLUEPRINT.md oui :**
> "Blueprint présent mais pas de plan. Lance `/forge-discuss 1` puis `/forge-planner 1`."

**Si des tâches `[ ]` restent dans la phase active :**
> "→ Continuer `/forge-execute {N}` (wave {W}, tâche {id} restante)"

**Si des tâches `[!]` existent sans `[ ]` :**
> "→ Des tâches ont échoué. Corriger puis relancer `/forge-execute {N}` ou `/forge-verify {N}`."

**Si toutes les tâches de la phase sont `[x]` mais pas de VERIFICATION.md :**
> "→ Exécution terminée. Lance `/forge-verify {N}` pour valider la phase."

**Si VERIFICATION.md existe avec verdict VALIDÉE mais phase pas complétée :**
> "→ Phase validée. Lance `/forge-complete {N}` pour finaliser."

**Si toutes les phases sont complétées :**
> "→ Toutes les phases sont terminées. Lance `/forge-complete` pour finaliser le projet."

---

## Dégradation gracieuse

Le skill doit fonctionner à n'importe quel stade du projet :

| Stade | Comportement |
|-------|-------------|
| Aucun fichier .planning/ | Afficher uniquement les infos git + recommandation d'initialisation |
| STATE.md seul | Afficher l'état basique + recommandation |
| PLAN.md sans exécution | Afficher le plan avec toutes les tâches `[ ]` |
| Exécution partielle | Afficher la progression avec le détail des waves |
| Projet terminé | Afficher le résumé complet avec toutes les phases ✅ |

Ne jamais crasher ou afficher une erreur brute. Toujours fournir un rapport
utile avec les données disponibles.

---

## Règles absolues

- **Strictement lecture seule** — ne JAMAIS écrire, modifier, ou créer de fichier
- **Aucun effet de bord** — pas de commit, pas de state-update, pas de log
- Toujours afficher quelque chose d'utile, même avec des données partielles
- Le tableau de bord doit être **lisible et structuré** — formatage Markdown propre
- Toujours terminer par une recommandation contextuelle
