<!-- Workflow pattern inspired by Open Mercato (MIT License) https://github.com/open-mercato/open-mercato Copyright (c) 2025-2026 Open Mercato contributors -->
check-and-commit — portail de vérification, puis commit
Exécute les portails dans l'ordre, corrige ce qui peut l'être mécaniquement, et commite uniquement quand tout est au vert. Cette skill est le seul endroit du workflow qui commite.
Annonce au démarrage : « Utilisation de la skill check-and-commit — exécution des portails, puis commit. »
Étape 1 : Identifier ce qui a changé
git status --porcelain
git diff --name-only
À partir des chemins modifiés, dérive :
-
SCHEMA_CHANGED— tout fichier souspackages/database/supabase/migrations/ -
l'ensemble des packages touchés — exécute ceci pour mapper les fichiers modifiés vers les noms de packages du workspace (ce sont les valeurs
--filterpour les portails) :git diff --name-only HEAD | while read -r f; do d=$(dirname "$f") while [ "$d" != "." ] && [ ! -f "$d/package.json" ]; do d=$(dirname "$d"); done [ -f "$d/package.json" ] && sed -n 's/.*"name": *"\([^"]*\)".*/\1/p' "$d/package.json" | head -1 done | sort -u -
si un fichier est en dehors du changement intentionnel (fichier de debug oublié, modification non liée). Si oui → exclut-le du staging et mentionne-le dans le rapport.
Étape 2 : Exécuter les portails dans l'ordre
S'arrête en cas d'échec, applique la politique de correction (Étape 3), réexécute le portail échoué.
# Portail 1 — types (uniquement si SCHEMA_CHANGED)
pnpm run generate:types
# puis inclut les fichiers régénérés dans le commit
# Portail 2 — format + lint (corrections automatiques en place)
pnpm exec biome check --write --no-errors-on-unmatched <chemins modifiés>
# Portail 3 — vérification de types, un package à la fois. JAMAIS tout le repo
# (`pnpm typecheck` exécute tous les packages à la fois et sature la machine).
pnpm exec turbo run typecheck --filter=<pkg> # répète pour chaque package touché
# Portail 4 — tests par package touché
pnpm --filter <pkg> test
# Portail 5 — build, UNIQUEMENT si le changement affecte les artefacts de build
# (exports du package, fichiers de config, infra SST)
pnpm exec turbo run build --filter=<pkg>
Étape 3 : Politique de correction
| Échec | Action |
|---|---|
| Formatage Biome / ordre des imports | Déjà corrigé par --write ; réexécute pour confirmer que c'est clean |
| Erreur de type due à des types générés obsolètes | Exécute Portail 1, réexécute la vérification de types |
| Erreur de type / test causée par ce changement | Corrige le code, réexécute |
| Échec préexistant, non lié à ce changement | Note dans le rapport ; ne bloque pas, ne corrige pas |
| Anything unclear ou toujours échoué après 2 tentatives de correction | STOP — rapport BLOCKED |
« Préexistant » doit être prouvé, pas supposé : le fichier/test échouant est inchangé par ce diff, ou le même échec se reproduit sur la merge-base. Si tu ne peux pas démontrer l'un ou l'autre, traite-le comme causé par ce changement.
Signaux d'alerte — penser à l'un de ceux-ci signifie que le portail est affaibli ; STOP :
- « Je vais exécuter les portails une seule fois à la fin au lieu de dans l'ordre »
- «
git add -Aest plus rapide » - « cet échec est probablement préexistant » (prouve-le — voir ci-dessus)
- « le portail est flaky, je vais juste réessayer jusqu'à ce qu'il passe »
Étape 4 : Commit
Uniquement quand tous les portails applicables passent :
git add <chaque fichier modifié, listé explicitement> # JAMAIS `git add -A` ou `git add .`
git commit -m "<type>(<scope>): <description>"
- Types :
fix,feat,chore,refactor,test,docs. Scope = module ou package (fix(inventory): …). - Le staging est explicite parce que les worktrees accumulent des fichiers runtime (fichiers env, captures d'écran, logs de debug
.jsonl) qui ne doivent jamais être commités. - Push uniquement si la branche suit déjà une remote (
git rev-parse --abbrev-ref @{upstream}réussit) ou l'utilisateur a demandé à pusher. Sinon, laisse le commit local et indique-le.
Étape 5 : Rapport
## Rapport Check & Commit
**Résultat :** COMMITTED | BLOCKED
| Portail | Résultat | Notes |
|---------|----------|-------|
| generate:types | PASS / SKIP | |
| biome | PASS | <fichiers auto-corrigés> |
| typecheck (<pkgs>) | PASS | |
| test (<pkgs>) | PASS | <échecs préexistants notés> |
| build | PASS / SKIP | |
**Commit :** `<sha>` — `<message>` · **Pushed :** yes/no
**Exclus du staging :** <fichiers non commités et pourquoi, ou « aucun »>
Si BLOCKED : nomme le portail, l'erreur concise, et ce qui a été tenté.