tderoussel/ship-gate

Porte de vérification pour une pile Next.js sur Vercel + Supabase + GitHub Actions, à exécuter avant de prétendre que quoi que ce soit est livré, déployé, en ligne, fusionné, vert ou terminé.

Qu'est-ce que ship-gate ?

Cette compétence implémente une porte de vérification rigoureuse conçue pour les projets utilisant Next.js sur Vercel avec Supabase et GitHub Actions. Elle force les développeurs et les agents IA à valider chaque affirmation concernant le déploiement, l'intégration continue, la base de données et l'environnement contre des preuves réelles plutôt que des vérifications superficielles. L'outil détecte les pièges courants comme les commandes pipeline qui masquent les échecs, les déploiements qui ne sont pas réellement en production, les tests qui passent localement mais échouent en production, et les problèmes de fuseau horaire. Chaque porte doit produire soit un résultat PASS avec une preuve, soit NOT CHECKED avec une justification explicite. L'objectif est d'empêcher les fausses affirmations en exigeant que toute déclaration sur la production soit vérifiée directement auprès de la production elle-même.

Compatible avec~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/tderoussel/agent-skills/tree/main/skills/ship-gate

Installed? Explore more Développement et programmation skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

Porte de livraison (Ship gate)

Toute règle ici existe parce que la vérification évidente a déjà renvoyé un faux positif. Exécutez la porte avant l'affirmation, pas après.

Adaptez les détails à votre pile ; la forme — qu'est-ce qui rendrait cette affirmation fausse ? — est la partie transférable.

La règle de l'affirmation

Une affirmation concernant la production nécessite une requête contre la production.

Un test réussi n'est pas la production. Une PR fusionnée n'est pas la production. Un déploiement vert n'est pas la production. Chacun de ces éléments est une affirmation concernant un système différent de celui sur lequel vous assertissez.

Si aucun humain n'a vérifié le résultat, ce n'est pas « vérifié » — dites ce que vous avez réellement vérifié à la place.

Vérification du déploiement

  • Sachez ce qui déclenche réellement un déploiement. Sur un hébergeur intégré à Git, c'est le push, pas une invocation CLI. Déployer via CLI alors que le projet se déploie par push produit une build qui n'est pas celle que les utilisateurs reçoivent.
  • Vérifiez le compte qui possède le projet. Une CLI connectée localement peut être authentifiée avec un compte personnel qui ne possède pas le projet de production — chaque commande réussit alors contre la mauvaise cible, silencieusement.
  • Vérifiez avec le statut du commit par rapport au SHA déployé, pas un coup d'œil au tableau de bord.
  • Confirmez que le déploiement est la production actuelle, pas simplement un qui est PRÊT. Plusieurs peuvent être prêts en même temps.
  • Les fonctions Edge/serveur se déploient séparément de l'application. Une PR fusionnée ne déploie pas une fonction edge ; vérifiez sa version explicitement.
  • Les modifications côté client peuvent ne nécessiter aucun déploiement de fonction — n'attendez pas un qui ne viendra jamais.
  • Re-passez le manifeste en direct avant d'affirmer une version. Le travail parallèle augmente les versions en dessous de vous.

Vérification CI

  • Portail sur tous les contextes requis, pas le premier vert.
  • Ne jalousez jamais une commande pipeline. some-check | tail rapporte le code de sortie de tail, masquant la véritable erreur. Dans les shells sans PIPESTATUS (zsh diffère de bash ici), il est facile de se tromper — vérifiez le statut propre de la commande.
  • steps: 0 signifie que le travail n'a jamais été exécuté, pas qu'il a réussi. Une API de vérifications peut rapporter une conclusion pour un travail qui n'a fait aucun travail.
  • Un échec suspectement rapide sans étapes est généralement un problème de facturation ou d'autorisations, pas un problème YAML.
  • Réexécuter uniquement les travaux échoués rejoue un instantané obsolète de la branche. Mettez d'abord la branche à jour, puis réexécutez.
  • Une liste de vérifications omet les travaux qui n'ont jamais été créés. L'absence d'un échec n'est pas une preuve de réussite.
  • gh pr create nécessite un --base explicite. Les heredocs chaînés autour de lui peuvent échouer silencieusement.

Portes de type et de lint

  • Les grands projets TypeScript peuvent nécessiter un heap Node augmenté ; sans lui, tsc meurt d'une manière qui ressemble à une erreur de code.
  • Sachez quels répertoires votre vérificateur de types et votre linter couvrent réellement. Les répertoires de fonctions edge sont fréquemment exclus des deux. S'ils s'exécutent sur un runtime différent, vérifiez-les avec le vérificateur propre de ce runtime — un travail de test n'est pas une porte de type.
  • Construisez dans des worktrees ou des checkouts propres, pas dans un répertoire de travail avec des dérives non commitées.

Base de données

  • Ne poussez jamais de schéma et n'exécutez jamais de migrations de manière occasionnelle contre la production. Appliquez le schéma via le chemin révisé que le projet a choisi, une fois.
  • Appelez les nouvelles procédures stockées contre la base de données réelle avant de les croire. Les mocks cachent les erreurs d'exécution qui n'apparaissent qu'avec des types réels et une ambiguïté réelle.
  • Si la suite de tests mocke la base de données de manière globale, un test unitaire réussi ne prouve rien sur la base de données.
  • Ne jamais comparer-et-définir sur une colonne gérée par déclencheur — le déclencheur la modifie en dessous de l'écriture.
  • Mesurez le rayon d'explosion d'un changement contre les données de production avant de fusionner. Un filtre qui semble étroit contre une graine locale peut correspondre à une part très différente des lignes réelles.

Pièges d'environnement

  • Ne présumez jamais du fuseau horaire de la machine — utilisez date. Les tests dépendants de la date échouent sur le décalage, et l'échec ressemble à un bug de code.
  • Une identité git non définie peut bloquer les déploiements et apparaître comme une erreur réseau non liée.
  • Définissez les variables d'environnement de l'hôte à partir d'un fichier plutôt qu'avec une affectation en ligne ; les shells et les CLI peuvent intégrer des sauts de ligne qui corrompent la valeur de manière invisible.
  • Le succès d'un travail planifié n'est pas le succès de son effet : un exécuteur rapportant « succès » signifie que l'invocation est revenue, pas que le travail a eu lieu. Vérifiez l'effet.

Sortie

État de chaque porte comme PASS (preuve) ou NON VÉRIFIÉ (pourquoi).

N'impliquez jamais qu'une porte a été exécutée quand elle ne l'a pas été. Si une porte échoue ou n'est pas vérifiée, dites clairement que le changement n'est pas vérifié — retenir l'affirmation est correct.

Individual skills in this repo

This repo contains 8 individual skills — each has its own dedicated page.

tderoussel/codebase-audit

Runs a ranked, evidence-backed audit of a product, codebase, or subsystem, ending in a verify list that separates proven findings from inferred ones. Use when the user asks for an audit, a gap analysis, a deep read, a bug hunt, a readiness check, a re-audit, a state reconciliation, or asks what they are not seeing. Trigger phrases include "audit", "gap analysis", "what am I missing", "deep audit", "readiness", "bug hunt", "review the whole thing". Produces findings and a verify list; does not fix.

tderoussel/competitive-teardown

Researches a competing product against your own and produces a ranked build-or-ignore verdict, plus optional comparison-page copy. Use when the user names a competitor or asks how their product stacks up against one. Trigger phrases include "vs us", "competitor", "what does X have", "should we copy", "competitive gap", "teardown", "are we behind". Produces a ranked verdict with effort estimates and an explicit not-worth-copying list.

tderoussel/decision-council

Run a structured multi-perspective review of a decision instead of getting one agreeable answer. Use when the user says run a council, get me perspectives on this, should I do X, stress-test this decision, or is this a good idea.

tderoussel/fleet-brief

Authors a workstream brief for dispatching multiple parallel build agents across one codebase, with per-lane file ownership, shared-ground warnings, and a derived DO-NOT list. Use whenever work is about to be split across concurrent agents, workers, lanes, or waves — even if the user does not say "write a brief". Trigger phrases include "fan out", "parallel agents", "orchestrate this", "split into lanes", "workstreams", "run these in parallel", "review-gated build". Produces the brief; does not dispatch.

tderoussel/inbox-triage

Triage an email inbox — sort what needs a reply, draft the replies, flag what needs a decision, and surface what can be ignored or unsubscribed. Use when the user says triage my inbox, do my email, what's in my inbox, or clean up my email.

tderoussel/overnight-build

Composes an autonomous unattended Claude Code build prompt that survives usage-limit resets via BUILD_LOG.md checkpointing, plus the launcher that restarts it. Use when the user asks for an overnight build, an autonomous build, a build to run while they sleep, an unattended or unsupervised session, or any long build they will not be monitoring. Trigger phrases include "overnight build", "run overnight", "build while I sleep", "autonomous build", "let it run", "unattended". Produces a single copyable prompt; does not run the build.

tderoussel/session-log

Write a durable record of a work session — what was built, root-caused, or shipped — into the project's notes. Use when the user says log this session, write a session log, record this, or when a substantial piece of work has just finished and needs to be handed off to a future session.

tderoussel/vault-doctor

Audits and repairs an Obsidian vault's structural health — broken [[wikilinks]], ambiguous duplicate filenames, missing or malformed frontmatter, stale status markers, and hub notes whose state sections have gone cold. Use when the user asks about vault health, broken links, vault cleanup, dead links, orphan notes, tag consistency, or says the vault feels messy or out of date. Trigger phrases include "vault health", "broken links", "clean up the vault", "audit the vault", "is the vault current". Read-only by default; every repair is proposed before it is made.

Skills associés