---
name: nouvelle-fonctionnalite
description: Use when adding a new feature. Build it layer by layer in a fixed order (domain, data, presentation) so the feature has a predictable path and does not leak into other features.
---

# nouvelle-fonctionnalite

Une fonctionnalité = un chemin prévisible. Toujours le même ordre.

## 0. Écrire ce qu'elle fait

Trois lignes : ce que l'utilisateur peut faire, la règle métier, ce qui se passe en cas
d'erreur. Si une spec existe (dossier de specs, story), lis-la et suis-la. Si quelque chose
n'est pas tranché, demande au lieu d'inventer.

## 1. Le métier d'abord

- Entités (ou réutilise l'existant), interface de repository, un cas d'usage par action.
- Erreurs typées pour chaque échec prévu.
- **Tests unitaires du cas d'usage avant de passer à la suite.**

## 2. Les données ensuite

- Implémente l'interface du métier, nomme la classe par sa techno (`<Techno>XxxRepository`).
- Traduis chaque exception technique en erreur métier.
- Un champ peut manquer en base : prévois sa valeur par défaut dans le mapper.

## 3. La présentation à la fin

- L'écran appelle le cas d'usage, affiche le résultat ou l'erreur typée.
- Aucune règle métier dans l'écran.

## 4. Brancher

- Déclare les nouvelles dépendances au point d'entrée (injection), nulle part ailleurs.

## Fini quand

- Tests du métier au vert, suite complète au vert, lint au vert.
- Aucun fichier d'une autre fonctionnalité modifié sans raison écrite.
- Passe le skill `revue-avant-merge`.
