Skip to content

chore(husky): faire du contrôle de compte une règle appliquée par la machine#267

Merged
thierryvm merged 2 commits into
mainfrom
chore/preflight-hooks
Jul 26, 2026
Merged

chore(husky): faire du contrôle de compte une règle appliquée par la machine#267
thierryvm merged 2 commits into
mainfrom
chore/preflight-hooks

Conversation

@thierryvm

@thierryvm thierryvm commented Jul 26, 2026

Copy link
Copy Markdown
Owner

PR dédiée, conformément à la doctrine : .husky/ est l'infrastructure de garde-fous, elle ne se modifie pas dans une PR feature.

Le problème

Le script preflight existait (#266) mais rien ne le lançait. Ce n'est pas un garde-fou, c'est une intention : il reposait sur le fait que quelqu'un y pense — alors que la panne dont il protège est précisément silencieuse.

Ce que ça met en place

Hook Contenu Coût
pre-push preflight complet, compte GitHub inclus 1 appel réseau
pre-commit nouveau mode --local : mêmes contrôles sans réseau quasi nul

Pourquoi séparer. git push s'authentifie via gh auth git-credential : il pousse sous le compte gh actif, et les deux comptes cohabitent dans le keyring. Un push déclenche aussi un déploiement, d'où la vérification de Supabase et Vercel à ce moment-là.

Le pre-commit attrape une identité git pointant vers le projet pro avant que des commits mal attribués existent — s'en apercevoir au push obligerait à réécrire l'historique.

Démontré, pas supposé

  • Basculer le compte fait renvoyer username=ovb-willemot à git credential fill → la panne est réelle et le hook est sur son chemin
  • En pointant le remote attendu vers le repo pro, le commit a échoué et aucun objet commit n'a été créé → il bloque, il n'avertit pas
  • Ce commit-ci a déclenché les deux hooks : GO

Pas de faux positif hors ligne

gh api user et git push ont tous les deux besoin du réseau. Sans réseau, le push échouait de toute façon.

Le trou, énoncé plutôt que supposé couvert

Les hooks git ne peuvent pas couvrir supabase db push, vercel deploy, ni une commande gh qui écrit — ce ne sont pas des opérations git. CLAUDE.md les porte désormais comme étape manuelle explicite (npm run preflight avant).

Échappatoire d'urgence : git push --no-verify, documentée dans le hook.

Summary by Sourcery

Automatisation des vérifications préliminaires de compte et d’environnement pour Ankora afin d’éviter l’utilisation de mauvais comptes GitHub, Supabase ou Vercel lors des opérations de développement et de type production.

Améliorations :

  • Ajout d’un script Node de prévol (preflight) pour vérifier l’identité GitHub, le remote git, le lien et l’environnement Supabase, le lien du projet Vercel, l’URL de l’application, ainsi que les secrets requis.
  • Intégration du script de prévol dans les hooks Husky pre-commit (vérifications locales sans réseau) et pre-push (vérifications complètes incluant le compte GitHub actif).

Build :

  • Exposition du script de prévol via une nouvelle commande npm run preflight.

Documentation :

  • Extension de CLAUDE.md avec une phase de vérification des comptes (preflight) décrivant les hooks automatisés, les exigences de prévol manuelles avant les opérations Supabase/Vercel/gh, et le flux de récupération correct lorsque les vérifications échouent.
Original summary in English

Summary by Sourcery

Automate account and environment preflight checks for Ankora to prevent using the wrong GitHub, Supabase, or Vercel accounts during development and production-like operations.

Enhancements:

  • Add a preflight Node script to verify GitHub identity, git remote, Supabase linkage and environment, Vercel project linkage, app URL, and required secrets.
  • Wire the preflight script into Husky pre-commit (local checks without network) and pre-push hooks (full checks including active GitHub account).

Build:

  • Expose the preflight script via a new npm run preflight command.

Documentation:

  • Extend CLAUDE.md with a preflight accounts phase describing automated hooks, manual preflight requirements before Supabase/Vercel/gh operations, and the correct recovery flow when checks fail.
Original summary in English

Summary by Sourcery

Automatisation des vérifications préliminaires de compte et d’environnement pour Ankora afin d’éviter l’utilisation de mauvais comptes GitHub, Supabase ou Vercel lors des opérations de développement et de type production.

Améliorations :

  • Ajout d’un script Node de prévol (preflight) pour vérifier l’identité GitHub, le remote git, le lien et l’environnement Supabase, le lien du projet Vercel, l’URL de l’application, ainsi que les secrets requis.
  • Intégration du script de prévol dans les hooks Husky pre-commit (vérifications locales sans réseau) et pre-push (vérifications complètes incluant le compte GitHub actif).

Build :

  • Exposition du script de prévol via une nouvelle commande npm run preflight.

Documentation :

  • Extension de CLAUDE.md avec une phase de vérification des comptes (preflight) décrivant les hooks automatisés, les exigences de prévol manuelles avant les opérations Supabase/Vercel/gh, et le flux de récupération correct lorsque les vérifications échouent.
Original summary in English

Summary by Sourcery

Automate account and environment preflight checks for Ankora to prevent using the wrong GitHub, Supabase, or Vercel accounts during development and production-like operations.

Enhancements:

  • Add a preflight Node script to verify GitHub identity, git remote, Supabase linkage and environment, Vercel project linkage, app URL, and required secrets.
  • Wire the preflight script into Husky pre-commit (local checks without network) and pre-push hooks (full checks including active GitHub account).

Build:

  • Expose the preflight script via a new npm run preflight command.

Documentation:

  • Extend CLAUDE.md with a preflight accounts phase describing automated hooks, manual preflight requirements before Supabase/Vercel/gh operations, and the correct recovery flow when checks fail.
Original summary in English

Summary by Sourcery

Automatisation des vérifications préliminaires de compte et d’environnement pour Ankora afin d’éviter l’utilisation de mauvais comptes GitHub, Supabase ou Vercel lors des opérations de développement et de type production.

Améliorations :

  • Ajout d’un script Node de prévol (preflight) pour vérifier l’identité GitHub, le remote git, le lien et l’environnement Supabase, le lien du projet Vercel, l’URL de l’application, ainsi que les secrets requis.
  • Intégration du script de prévol dans les hooks Husky pre-commit (vérifications locales sans réseau) et pre-push (vérifications complètes incluant le compte GitHub actif).

Build :

  • Exposition du script de prévol via une nouvelle commande npm run preflight.

Documentation :

  • Extension de CLAUDE.md avec une phase de vérification des comptes (preflight) décrivant les hooks automatisés, les exigences de prévol manuelles avant les opérations Supabase/Vercel/gh, et le flux de récupération correct lorsque les vérifications échouent.
Original summary in English

Summary by Sourcery

Automate account and environment preflight checks for Ankora to prevent using the wrong GitHub, Supabase, or Vercel accounts during development and production-like operations.

Enhancements:

  • Add a preflight Node script to verify GitHub identity, git remote, Supabase linkage and environment, Vercel project linkage, app URL, and required secrets.
  • Wire the preflight script into Husky pre-commit (local checks without network) and pre-push hooks (full checks including active GitHub account).

Build:

  • Expose the preflight script via a new npm run preflight command.

Documentation:

  • Extend CLAUDE.md with a preflight accounts phase describing automated hooks, manual preflight requirements before Supabase/Vercel/gh operations, and the correct recovery flow when checks fail.
Original summary in English

Summary by Sourcery

Automatisation des vérifications préliminaires de compte et d’environnement pour Ankora afin d’éviter l’utilisation de mauvais comptes GitHub, Supabase ou Vercel lors des opérations de développement et de type production.

Améliorations :

  • Ajout d’un script Node de prévol (preflight) pour vérifier l’identité GitHub, le remote git, le lien et l’environnement Supabase, le lien du projet Vercel, l’URL de l’application, ainsi que les secrets requis.
  • Intégration du script de prévol dans les hooks Husky pre-commit (vérifications locales sans réseau) et pre-push (vérifications complètes incluant le compte GitHub actif).

Build :

  • Exposition du script de prévol via une nouvelle commande npm run preflight.

Documentation :

  • Extension de CLAUDE.md avec une phase de vérification des comptes (preflight) décrivant les hooks automatisés, les exigences de prévol manuelles avant les opérations Supabase/Vercel/gh, et le flux de récupération correct lorsque les vérifications échouent.
Original summary in English

Summary by Sourcery

Automate account and environment preflight checks for Ankora to prevent using the wrong GitHub, Supabase, or Vercel accounts during development and production-like operations.

Enhancements:

  • Add a preflight Node script to verify GitHub identity, git remote, Supabase linkage and environment, Vercel project linkage, app URL, and required secrets.
  • Wire the preflight script into Husky pre-commit (local checks without network) and pre-push hooks (full checks including active GitHub account).

Build:

  • Expose the preflight script via a new npm run preflight command.

Documentation:

  • Extend CLAUDE.md with a preflight accounts phase describing automated hooks, manual preflight requirements before Supabase/Vercel/gh operations, and the correct recovery flow when checks fail.

… one I remember

The preflight script existed but nothing ran it. That is not a guardrail, it is
an intention: it depended on someone remembering, and the whole point is that
the failure it guards against is silent.

pre-push runs the full check. `git push` authenticates through
`gh auth git-credential`, so it pushes as the ACTIVE gh account — and both
accounts sit in the keyring at once. Demonstrated rather than assumed: switching
the account makes `git credential fill` return username=ovb-willemot. A push
also triggers a deploy, which is why Supabase and Vercel are verified there too.

pre-commit runs a new `--local` mode: same checks minus the single network call,
so it costs nothing on every commit. It catches a git identity pointing at the
professional project BEFORE mis-attributed commits exist — discovering that at
push time means rewriting history.

No offline false positive: `gh api user` and `git push` both need the network,
so when one is unavailable the push was failing anyway.

Git hooks cannot cover `supabase db push`, `vercel deploy`, or a writing `gh`
command — those are not git operations. CLAUDE.md now carries them as an
explicit manual step, so the gap is stated rather than assumed covered.

Verified it blocks rather than merely warns: pointing the expected remote at the
professional repo made the commit fail, and no commit object was created.
@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.

@vercel

vercel Bot commented Jul 26, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
ankora Ready Ready Preview, Comment Jul 26, 2026 11:43am

@github-actions github-actions Bot added status:review-needed Ready for review type:chore Maintenance (deps, CI, tooling) labels Jul 26, 2026
@sourcery-ai

sourcery-ai Bot commented Jul 26, 2026

Copy link
Copy Markdown
Contributor

🧙 Sourcery examine votre pull request !


Conseils et commandes

Interagir avec Sourcery

  • Lancer une nouvelle revue : Commentez @sourcery-ai review sur la pull request.
  • Poursuivre les discussions : Répondez directement aux commentaires de revue de Sourcery.
  • Générer un ticket GitHub à partir d’un commentaire de revue : Demandez à Sourcery de créer un
    ticket à partir d’un commentaire de revue en y répondant. Vous pouvez aussi répondre à un
    commentaire de revue avec @sourcery-ai issue pour créer un ticket à partir de celui-ci.
  • Générer un titre de pull request : Écrivez @sourcery-ai n’importe où dans le titre de la pull
    request pour générer un titre à tout moment. Vous pouvez aussi commenter
    @sourcery-ai title sur la pull request pour (re)générer le titre à tout moment.
  • Générer un résumé de pull request : Écrivez @sourcery-ai summary n’importe où dans
    le corps de la pull request pour générer un résumé de PR à tout moment exactement à l’endroit
    souhaité. Vous pouvez aussi commenter @sourcery-ai summary sur la pull request pour
    (re)générer le résumé à tout moment.
  • Générer le guide du relecteur : Commentez @sourcery-ai guide sur la pull
    request pour (re)générer le guide du relecteur à tout moment.
  • Résoudre tous les commentaires Sourcery : Commentez @sourcery-ai resolve sur la pull
    request pour résoudre tous les commentaires Sourcery. Utile si vous avez déjà
    traité tous les commentaires et ne souhaitez plus les voir.
  • Ignorer toutes les revues Sourcery : Commentez @sourcery-ai dismiss sur la pull
    request pour ignorer toutes les revues Sourcery existantes. Particulièrement utile si vous
    voulez repartir de zéro avec une nouvelle revue — n’oubliez pas de commenter
    @sourcery-ai review pour lancer une nouvelle revue !

Personnaliser votre expérience

Accédez à votre dashboard pour :

  • Activer ou désactiver des fonctionnalités de revue comme le résumé de pull request
    généré par Sourcery, le guide du relecteur, et d’autres.
  • Modifier la langue de la revue.
  • Ajouter, supprimer ou modifier des instructions de revue personnalisées.
  • Ajuster d’autres paramètres de revue.

Obtenir de l’aide

Original review guide in English

🧙 Sourcery is reviewing your pull request!


Tips and commands

Interacting with Sourcery

  • Trigger a new review: Comment @sourcery-ai review on the pull request.
  • Continue discussions: Reply directly to Sourcery's review comments.
  • Generate a GitHub issue from a review comment: Ask Sourcery to create an
    issue from a review comment by replying to it. You can also reply to a
    review comment with @sourcery-ai issue to create an issue from it.
  • Generate a pull request title: Write @sourcery-ai anywhere in the pull
    request title to generate a title at any time. You can also comment
    @sourcery-ai title on the pull request to (re-)generate the title at any time.
  • Generate a pull request summary: Write @sourcery-ai summary anywhere in
    the pull request body to generate a PR summary at any time exactly where you
    want it. You can also comment @sourcery-ai summary on the pull request to
    (re-)generate the summary at any time.
  • Generate reviewer's guide: Comment @sourcery-ai guide on the pull
    request to (re-)generate the reviewer's guide at any time.
  • Resolve all Sourcery comments: Comment @sourcery-ai resolve on the
    pull request to resolve all Sourcery comments. Useful if you've already
    addressed all the comments and don't want to see them anymore.
  • Dismiss all Sourcery reviews: Comment @sourcery-ai dismiss on the pull
    request to dismiss all existing Sourcery reviews. Especially useful if you
    want to start fresh with a new review - don't forget to comment
    @sourcery-ai review to trigger a new review!

Customizing Your Experience

Access your dashboard to:

  • Enable or disable review features such as the Sourcery-generated pull request
    summary, the reviewer's guide, and others.
  • Change the review language.
  • Add, remove or edit custom review instructions.
  • Adjust other review settings.

Getting Help

Both branches added scripts/preflight-accounts.mjs, so git saw an add/add
conflict. This branch's copy is the superset: it carries #266's fixes plus the
--local mode the pre-commit hook depends on, so it is the one kept.

Verified both entry points still work after the resolution: full run gives GO,
and `--local` gives GO while skipping the single network call.
@thierryvm
thierryvm merged commit 99ba38a into main Jul 26, 2026
9 checks passed
@thierryvm
thierryvm deleted the chore/preflight-hooks branch July 26, 2026 11:53
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

status:review-needed Ready for review type:chore Maintenance (deps, CI, tooling)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant