Communitygithub.com

lguidolin/merge-gates-and-automation

Verwendet bei der Einrichtung oder Änderung von CI, Pre-Push-Hooks oder Task-Runnern und der Entscheidung, was vor einem Merge bestanden werden muss. Symptome: Versuchung, autoritative Prüfungen nur in lokalen Hooks zu platzieren, CI zu umgehen oder mit --no-verify zu umgehen; Unsicherheit darüber, welche Gates einen Merge blockieren und was lokal läuft.

Was ist merge-gates-and-automation?

Diese Skill definiert eine klare Architektur für Verifikations-Gates in Softwareprojekten: CI ist die unumgehbare Quelle der Wahrheit, während lokale Pre-Push-Hooks lediglich bequeme Spiegel für schnelles Feedback sind – niemals aber ein Gates darstellen. Sie unterstützt sowohl `enforced`-Modus (CI blockiert Merge via Branch-Protection) als auch `advisory`-Modus (CI läuft und meldet, aber die Disziplin liegt beim Team), besonders relevant für private Repos ohne kostenlosen Branch-Protection. Die Skill etabliert Regeln für Task-Runner (ein kanonischer Einstiegspunkt für alle täglichen Operationen), CI-Tiering (Presubmit vs. Postsubmit), Container-Builds (immer in CI mit Content-Digest und Provenance-Attestation) und die Deklaration des Enforcement-Modus im ersten Entscheidungsprotokoll. Sie ist plattformunabhängig und richtet sich an Entwicklerteams und KI-Agenten, die CI/CD-Pipelines, Git-Hooks oder Task-Runner (z. B. Make, npm scripts, Just) konfigurieren und sicherstellen wollen, dass Merges nur aufgrund autoritativer, unumgehbarer Prüfungen blockiert werden.

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

In Ihrer bevorzugten KI fragen

Öffnet einen neuen Chat, in dem dieser Agent-Skill bereits geladen ist.

Dokumentation

Verifikations-Gates und Automatisierung

Überblick

Wo Verifikation stattfindet und was sie real macht. CI ist die Quelle der Wahrheit; der lokale Hook ist ein praktischer Spiegel. Eine Regel, die nicht durch ein unumgehbares Gate erzwungen wird, ist ein Vorschlag (Prinzip 7) – daher deklariert das Projekt, wo die Plattform dieses Gate nicht bereitstellen kann, den Modus als advisory und trägt die Regel bewusst, statt sich auf Mechanismen zu verlassen, die es nicht hat.

Die Regeln

  • Ein Task-Runner ist der kanonische Einstieg für jeden täglichen Vorgang – Test, Build, Dev, Deploy sind benannte Rezepte. Ein Vorgang, der nur im Kopf einer Person existiert, passiert nicht zuverlässig und kann keinem Agenten übergeben werden.
  • CI ist die Quelle der Wahrheit – autoritativ, geteilt und unumgehbar, wo immer die Plattform es erlaubt. Lint, Typprüfung, Vertragsprüfungen, Tests, Sicherheitsscans, Commit-Validierung – all das läuft hier und muss vor einem Merge bestanden werden im Modus enforced. Was CI sagt, zählt. Im Modus advisory laufen dieselben Prüfungen und melden Ergebnisse; das Gate ist Disziplin, und das ist nie ein Grund, weniger Prüfungen auszuführen.
  • Der Pre-Push-Hook ist ein Presubmit-Spiegel, keine Mauer. Er führt dieselben schnellen Prüfungen lokal aus, sodass du CI wahrscheinlich bestehst, bevor du pushst. Er ist explizit umgehbar (--no-verify) und läuft nur dort, wo die Toolchain installiert ist. Seine Aufgabe ist Geschwindigkeit und frühes Feedback, nicht Durchsetzung. Der Hook ist nie ein Gate; CI ist das Gate, wo immer die Plattform es erlaubt.
  • Halte CI schnell, indem du abstufst, nicht indem du Prüfungen entfernst. Wenn die vollständige Suite den Rahmen jedes PRs sprengt, teile Presubmit (schnelle Teilmenge, blockiert PR) von Postsubmit (vollständige Suite, nach Merge, blockiert Promotion) – verschiebe niemals autoritative Prüfungen zurück in den umgehbaren Hook.
  • Container-Images werden in CI gebaut, identifiziert durch Content-Digest und veröffentlicht mit einer Provenance-Attestation. Halte es durch Registry-Layer-Caching oder einen selbstgehosteten Runner erschwinglich – niemals, indem der Build zurück auf einen Laptop verlagert wird, wo die Herkunft des Artefakts von niemand anderem verifiziert werden kann.
  • Deklariere den Enforcement-Modus. enforced – CI blockiert den Merge via Branch-Protection; was CI sagt, zählt. advisory – CI läuft und meldet, und das Gate ist Disziplin, weil Branch-Protection nicht verfügbar ist (z. B. ein privates Repository im kostenlosen Plan). Advisory ist legitim; Enforcement zu behaupten, das man nicht hat, ist es nicht. Gib den Modus im ersten Entscheidungsprotokoll des Projekts an und nenne, was ihn in den enforced-Modus überführen würde.

Die benannte Spannung

Ein umgehbarer lokaler Presubmit ist schnell, aber nicht durchsetzbar; die autoritative CI ist durchsetzbar, aber langsamer. Löse dies, indem du jedem eine andere Aufgabe gibst – der Hook optimiert die innere Schleife, die CI die Korrektheit des Nachweises – und indem du CI, nicht den Hook, zum Blockieren des Merges machst.

Häufige Rechtfertigungen

AusredeRealität
„Der Pre-Push-Hook führt die Tests aus, also kann CI minimal sein“Der Hook ist umgehbar und toolchain-abhängig. Er kann nicht die Quelle der Wahrheit sein. CI muss alles erneut ausführen.
„Ich mache einfach dieses eine Mal --no-verify“In Ordnung – denn CI wird es trotzdem abfangen. Genau deshalb ist CI das Gate, nicht der Hook.
„CI ist langsam, verschieben wir die Tests in den Hook“Stufe CI ab (Presubmit/Postsubmit); verlege niemals autoritative Prüfungen auf ein umgehbares Gate.
„CI-Builds sind langsam, ich baue das Image lokal“Ein auf einem Laptop gebautes Artefakt hat eine Herkunft, die niemand sonst verifizieren kann. Behebe die Latenz mit einem Layer-Cache oder einem selbstgehosteten Runner.
„Branch-Protection kostet Geld, also gelten die Regeln nicht“Die Regeln gelten; die Durchsetzung unterscheidet sich. Deklariere den Advisory-Modus und behalte die Disziplin bei, oder mach das Repository öffentlich und erhalte Schutz kostenlos.

Rote Flaggen – STOP

  • Autoritative Prüfungen, die nur in einem lokalen Hook existieren
  • CI, das nicht erneut ausführt, was der Hook ausgeführt hat
  • Ein Merge, der erlaubt wird, während CI rot ist
  • Ein Image, das irgendwo außerhalb von CI gebaut oder per Tag anstatt per Digest befördert wird
  • Ein Projekt, das sich so verhält, als ob CI den Merge blockiert, wenn keine Branch-Protection existiert

Vollständige Begründung: Artikel VIII der Verfassung, gebündelt unter engineering-constitution/references/engineering-constitution.md. Details zu 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.

Verwandte Skills