check-and-commit

Par crbnos · carbon

Vérification pré-commit — exécute les étapes de validation de Carbon dans l'ordre (generate:types si le schéma a changé, biome, typecheck limité au périmètre, tests limités au périmètre, build si nécessaire), corrige les échecs simples, puis commit les fichiers spécifiques avec un message conventionnel. À utiliser après /fix, après une tâche /execute, ou après des modifications manuelles lorsque le travail doit être commité. Effectue le commit uniquement si toutes les étapes sont au vert ; pousse uniquement si la branche suit déjà un dépôt distant ou si l'utilisateur en a fait la demande.

npx skills add https://github.com/crbnos/carbon --skill check-and-commit

<!-- 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 sous packages/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 --filter pour 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 -A est 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é.

Skills similaires