Communitygithub.com

lguidolin/merge-gates-and-automation

À utiliser lors de la configuration ou de la modification de l'IC, des hooks pre-push ou d'un exécuteur de tâches, ou pour décider ce qui doit réussir avant une fusion. Symptômes — tentation de placer les vérifications autoritaires uniquement dans un hook local, d'ignorer l'IC, de contourner avec --no-verify, ou incertitude sur ce qui bloque une fusion par rapport à ce qui s'exécute localement.

Qu'est-ce que merge-gates-and-automation ?

Ce skill établit une discipline claire pour les portes de vérification et l'automatisation dans le développement logiciel. Il définit l'intégration continue (IC) comme la source de vérité faisant autorité et infalsifiable, tandis que les hooks locaux (pre-push) ne sont que des miroirs de présoumission pratiques, contournables, et non bloquants. Le skill prescrit qu'un seul exécuteur de tâches canonique doit orchestrer toutes les opérations quotidiennes (test, build, dev, deploy), évitant les procédures qui n'existent que dans la tête d'un développeur et ne peuvent être confiées à un agent IA. Il introduit deux modes d'application : `enforced` où l'IC bloque la fusion via une protection de branche, et `advisory` où l'IC s'exécute et rapporte mais ne peut pas bloquer (par exemple dans un dépôt privé sur un plan gratuit) — l'honnêteté sur le mode est essentielle. Le skill fournit également des stratégies pour maintenir la rapidité de l'IC (tiering presubmit/postsubmit), construire des images conteneur uniquement dans l'IC avec des attestations de provenance, et un tableau de rationalisations pour contrer les excuses courantes — le tout pour garantir que les vérifications qui font autorité ne soient jamais déplacées vers un hook local contournable.

Compatible avec~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/lguidolin/agent-skills/tree/main/skills/merge-gates-and-automation

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 vérification et automatisation

Aperçu

Où vit la vérification et ce qui la rend réelle. L'IC est la source de vérité ; le hook local est un miroir de commodité. Une règle non appliquée par une porte infalsifiable est une suggestion (Principe 7) — ainsi, lorsque la plateforme ne peut pas fournir cette porte, le projet déclare le mode advisory et porte la règle délibérément, plutôt que de supposer une machinerie qu'il ne possède pas.

Les règles

  • Un seul exécuteur de tâches est l'entrée canonique de toute opération quotidienne — test, build, dev, deploy sont des recettes nommées. Une procédure qui n'existe que dans la tête de quelqu'un ne se produit pas de manière fiable et ne peut pas être confiée à un agent.
  • L'IC est la source de vérité — faisant autorité, partagée et infalsifiable partout où la plateforme le permet. Lint, vérification de types, vérifications contractuelles, tests, scans de sécurité, validation de commit s'exécutent tous ici et doivent réussir avant la fusion en mode enforced. Ce que dit l'IC est ce qui compte. En mode advisory, les mêmes vérifications s'exécutent et rapportent ; la porte est la discipline, et ce n'est jamais une raison pour faire moins de vérifications.
  • Le hook pre-push est un miroir de présoumission, pas un mur. Il exécute les mêmes vérifications rapides localement pour que vous puissiez probablement réussir l'IC avant de pousser. Il est explicitement contournable (--no-verify) et ne s'exécute que là où la chaîne d'outils est installée. Son travail est la rapidité et le retour rapide, pas l'application. Le hook ne bloque jamais ; l'IC bloque partout où la plateforme le permet.
  • Gardez l'IC rapide en hiérarchisant, pas en supprimant des vérifications. Lorsque la suite complète dépasse chaque PR, divisez la présoumission (sous-ensemble rapide, bloque la PR) de la postsoumission (suite complète, après la fusion, bloque la promotion) — ne déplacez jamais les vérifications faisant autorité vers le hook contournable.
  • Les images conteneur sont construites dans l'IC, identifiées par digest de contenu et publiées avec une attestation de provenance. Maintenez cela abordable avec un cache de couches de registre ou un exécuteur auto-hébergé — jamais en déplaçant la construction vers un ordinateur portable, où la provenance de l'artefact ne peut être vérifiée par personne d'autre.
  • Déclarez le mode d'application. enforced — l'IC bloque la fusion via la protection de branche ; ce que dit l'IC est ce qui compte. advisory — l'IC s'exécute et rapporte, et la porte est la discipline, car la protection de branche est indisponible (un dépôt privé sur un plan gratuit). Le mode advisory est légitime ; prétendre à une application que vous n'avez pas ne l'est pas. Indiquez le mode dans le premier enregistrement de décision du projet, et ce qui le ferait passer en mode enforced.

La tension nommée

Une présoumission locale contournable est rapide mais non applicable ; une IC faisant autorité est applicable mais plus lente. Résolvez en donnant à chacune un mandat différent — le hook optimise la boucle interne, l'IC l'exactitude de l'enregistrement — et en faisant de l'IC, pas du hook, ce qui bloque une fusion.

Rationalisations courantes

ExcuseRéalité
"Le hook pre-push exécute les tests, donc l'IC peut être minimale"Le hook est contournable et dépend de la chaîne d'outils. Il ne peut pas être la source de vérité. L'IC doit tout réexécuter.
"Je vais juste faire --no-verify cette fois"Très bien — car l'IC l'attrapera quand même. C'est exactement pourquoi l'IC, pas le hook, est la porte.
"L'IC est lente, déplaçons les tests vers le hook"Hiérarchisez l'IC (présoumission/postsoumission) ; ne déplacez jamais les vérifications faisant autorité vers une porte contournable.
"Les builds IC sont lents, je vais construire l'image localement"Un artefact construit sur un ordinateur portable porte une provenance que personne d'autre ne peut vérifier. Corrigez la latence avec un cache de couches ou un exécuteur auto-hébergé.
"La protection de branche coûte de l'argent, donc les règles ne s'appliquent pas"Les règles s'appliquent ; l'application diffère. Déclarez le mode advisory et gardez la discipline, ou rendez le dépôt public et obtenez la protection gratuitement.

Drapeaux rouges — STOP

  • Vérifications faisant autorité qui n'existent que dans un hook local
  • IC qui ne réexécute pas ce que le hook a exécuté
  • Une fusion autorisée alors que l'IC est rouge
  • Une image construite ailleurs que dans l'IC, ou promue par tag plutôt que par digest
  • Un projet se comportant comme si l'IC bloquait la fusion alors qu'aucune protection de branche n'existe

Raisonnement complet : Article VIII de la constitution, regroupé dans engineering-constitution/references/engineering-constitution.md. Spécificités Deploy/k8s : cloud-delivery-aks.

Individual skills in this repo

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

lguidolin/change-hygiene-and-code-craft

Use when writing or refactoring code, structuring a commit or PR, or deciding whether to abstract duplication. Symptoms — mixing reorg with logic changes, a PR doing several things at once, a file growing large, the second copy of similar code, or unsure whether to DRY something up.

lguidolin/cloud-delivery-aks

Use when deploying to Kubernetes or Azure Kubernetes Service (AKS), configuring cloud secrets, setting up progressive rollout/canary, per-PR ephemeral environments, or k8s health probes. Keywords — Kubernetes, AKS, Key Vault, Argo Rollouts, Flagger, canary, blue-green, liveness, readiness, PodDisruptionBudget, HPA, rollback, GHCR.

lguidolin/commit-history-rewrite

Use when an existing repository has messy commit history that needs to conform to conventional commits before adopting release-please, or when intermediate WIP/fixup/merge commits need to be cleaned up.

lguidolin/conventional-commits-and-releases

Use when committing, writing a commit message, opening a PR that will be squash-merged, or configuring automated versioning/changelogs. Keywords — conventional commits, release-please, semver, feat/fix/chore, breaking change, changelog.

lguidolin/defense-in-depth-security

Use when handling untrusted input, secrets, authentication/authorization, or dependencies — or threat-modeling a new surface. Keywords — STRIDE, threat model, least privilege, secrets management, supply chain, dependency scanning, input validation, audit log, defense in depth.

lguidolin/designing-before-building

Use when starting a feature, fixing a non-trivial bug, or about to write implementation code — before any code exists. Symptoms you need this: "this is simple, I'll just code it", reaching for the editor before a design is approved, or an idea that hasn't been turned into a spec and plan.

lguidolin/engineering-constitution

Use when starting work in a project that follows the engineering constitution, orienting to its rules, or deciding which engineering practice applies to a task — spec writing, commits, testing, security, deploys, database, or UI work.

lguidolin/graphql-contract-testing

Use when writing a GraphQL query/mutation that the UI and a test will share, or building route/schema contract or smoke tests. Symptoms — copying a query into a test, a test asserting on query text, schema change that didn't break the UI build, or RLS/permission drift. Keywords — graphql-codegen, typed document, contract test, route smoke test.

lguidolin/init-repo-CI

Use when setting up a new repository with conventional commits, release-please, and CI automation, or when retrofitting an existing repository that lacks automated versioning and PR validation workflows.

lguidolin/interface-craft-and-accessibility

Use when building or styling UI — components, layouts, forms, design tokens — or making accessibility decisions. Keywords — a11y, WCAG, keyboard navigation, focus state, contrast, design system, minimalist UI, component reuse, ARIA, semantic HTML.

lguidolin/observability-and-slos

Use when adding logging, metrics, tracing, health checks, SLOs, or alerting — or when building a service surface that needs to be operable and debuggable. Keywords — structured logs, OpenTelemetry, correlation id, RED metrics, liveness, readiness, SLI, SLO, error budget, alerting.

lguidolin/performance-and-scale

Use when working on hot paths, list endpoints, pagination, data-access in loops, or public interfaces/schemas. Symptoms — unbounded queries, N+1 access, no latency budget, optimizing without measuring, or changing an interface many consumers depend on. Keywords — pagination, N+1, Hyrum's Law, performance budget, bundle size.

lguidolin/postgres-postgraphile-rls-and-sql

Use when writing PostgreSQL, PostGraphile config, Row-Level Security policies, SQL schema files, or working on the Browser→App→PostGraphile→Postgres data path. Keywords — RLS, SECURITY DEFINER, search_path, pgSettings, grants, roles, GraphQL depth limit, query cost, statement_timeout, SQL file organization.

lguidolin/recording-decisions

Use when a design or architecture decision has been made and needs to be captured — writing a decision record or ADR, updating a decision index, noting a deferred idea, or superseding a past decision. Keywords — ADR, decision record, rationale, rejected alternatives, dependency index.

lguidolin/resilience-and-deploy-safety

Use when planning a deploy, designing a rollback, or responding to an incident or writing a postmortem. Keywords — deploy safety, rollback, immutable artifact, progressive delivery, canary, blast radius, incident response, blameless postmortem, error budget.

lguidolin/ship-it

Use when the user wants to ship work — push, PR, archive decision records, merge, and clean up. Handles the full lifecycle from committing final changes through post-merge cleanup including converting specs/plans to compact decision records.

lguidolin/tests-as-a-control

Use when writing or modifying tests, when a test breaks during a refactor, or when testing permission/role rules. Symptoms — tempted to edit a test to make it pass, testing only the happy path, a deny-test that started passing, flaky tests, or unsure what to assert.

lguidolin/zero-downtime-migrations

Use when changing a database schema where data must survive the change — adding/removing/renaming columns, constraints, indexes, or backfilling. Symptoms — a destructive migration bundled with a code deploy, a NOT NULL column with a backfill, a table-locking UPDATE, or a rename. Keywords — expand/contract, parallel change, backfill, NOT VALID, CREATE INDEX CONCURRENTLY, graphile-migrate.

Skills associés