---
name: task-workflow
description: Workflow complet pour traiter une tâche du TASK.md — branche git, développement, tests, commit conventionnel, push, puis archivage dans DONE.md. Utiliser quand l'utilisateur veut implémenter une tâche listée dans TASK.md.
allowed-tools: Read, Bash, Edit, Write, Glob, Grep
---

# Workflow de traitement d'une tâche (TASK.md → DONE.md)

Quand l'utilisateur demande de traiter une tâche du `TASK.md`, suivre **dans l'ordre** les étapes ci-dessous.

---

## ⚠️ Étape 0 — Repartir d'une branche saine depuis `origin/main`

**IMPORTANT : toujours commencer par cette étape, sans exception.**

```bash
git fetch origin
git checkout main
git pull origin main
```

Ensuite seulement créer la branche de travail (voir étape 2).

> Règle : ne jamais partir d'une branche de feature existante. Toujours tirer depuis `main` à jour.

---

## Étape 1 — Lire et choisir la tâche

1. Lire `TASK.md` pour identifier la tâche à traiter (si non précisée, demander laquelle).
2. Extraire : le titre, les fichiers impactés, et la liste des sous-tâches.

---

## Étape 2 — Créer une branche git

Nommer la branche d'après le type et le titre de la tâche :

```
<type>/<slug-de-la-tache>
```

Exemples de types : `feat`, `fix`, `style`, `refactor`, `test`, `chore`

```bash
git checkout -b style/simplifier-table-homepage
```

Règle : **ne jamais committer directement sur `main`**.

---

## Étape 3 — Implémenter la tâche

- Lire tous les fichiers mentionnés dans la tâche avant de les modifier.
- Cocher mentalement chaque sous-tâche `[ ]` au fur et à mesure.
- Respecter les skills existants selon les fichiers touchés :
  - Composant Vue → skill `vue-frontend`
  - Domaine PHP → skills `ddd-core`, `hexagonal-arch`, `cqrs`, `api-platform`
  - Tests → skill `testing-strategy`

---

## Étape 4 — Vérifier que tous les tests passent

```bash
make test
```

- Si des tests échouent, **corriger avant de continuer**.
- Ne pas passer à l'étape suivante tant que la suite n'est pas verte.
- Pour un test spécifique : `make test f="NomDeLaClasse"`

---

## Étape 5 — Commit conventionnel

Format Conventional Commits :

```
<type>(<scope>): <description courte en français>

[corps optionnel : explication du pourquoi]
```

**Types autorisés :** `feat`, `fix`, `style`, `refactor`, `test`, `chore`, `docs`

**Scope :** nom du domaine ou du composant impacté (ex: `manga-table`, `sidebar`, `homepage`)

Exemples :
```
style(manga-table): simplifier le wrapper card + hover vert sur le titre
fix(sidebar): séparer toggle et navigation sur MenuGroup
```

```bash
git add <fichiers modifiés>
git commit -m "style(manga-table): simplifier le wrapper card + hover vert sur le titre"
```

---

## Étape 6 — Push de la branche

**Demander confirmation à l'utilisateur avant de pusher.**

```bash
git push -u origin <nom-de-la-branche>
```

---

## Étape 7 — Archiver la tâche dans DONE.md

1. Retirer le bloc de la tâche de `TASK.md` (section complète, du titre `##` jusqu'au `---` suivant).
2. Ajouter la tâche dans `DONE.md` (créer le fichier s'il n'existe pas) avec la date et le sha du commit :

Format dans `DONE.md` :
```markdown
## [TYPE] Titre de la tâche — YYYY-MM-DD

> Branche : `<nom-de-la-branche>` | Commit : `<sha court>`

- [x] Sous-tâche 1
- [x] Sous-tâche 2
```

---

## Résumé du flux

```
fetch + checkout main + pull (branche saine)
  → branche git depuis main
  → TASK.md (choisir la tâche)
  → implémentation
  → make test (vert obligatoire)
  → conventional commit
  → push (après confirmation)
  → DONE.md
```
