Communitygithub.com

lguidolin/resilience-and-deploy-safety

Verwendung bei der Planung eines Deployments, dem Entwurf eines Rollbacks, der Reaktion auf einen Vorfall oder der Erstellung eines Postmortems. Schlüsselwörter – Deploy-Sicherheit, Rollback, unveränderliches Artefakt, progressives Ausrollen, Canary, Schadensradius, Incident Response, Schuld-freies Postmortem, Error Budget.

Was ist resilience-and-deploy-safety?

Dieses Skill beschreibt eine disziplinierte Herangehensweise an Deployment-Sicherheit und Incident Response, die auf dem Prinzip „fail small, recover fast, learn every time“ basiert. Es führt unveränderliche Artefakte (Content-Digest) als zentrale Identität ein, die von der CI einmalig gebaut und dann unverändert durch die Umgebungen (Preview → Staging → Production) befördert werden – ein Wiederaufbau pro Umgebung wird als riskant vermieden. Progressive Exposure, menschliche Entscheidungen vor Production, dokumentierte Rollback-Pfade und das Expand/Contract-Pattern für Infrastruktur-Änderungen sind Kernbestandteile. Für Incident Response definiert das Skill eine schuld-freie Postmortem-Kultur, Klassifizierung nach Schweregrad und die Steuerung durch ein Error Budget: Sobald dieses aufgebraucht ist, haben Zuverlässigkeitsarbeiten Vorrang vor neuen Features. Es ist plattformunabhängig formuliert (mechanismen für Container, statische Seiten oder Managed Platforms werden unterschieden) und eignet sich für lokale Projekte vor dem Launch ebenso wie für produktive Systeme. Die vollständige Begründung verweist auf die Verfassung (engineering-constitution) des Projekts.

Funktioniert mit~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/lguidolin/agent-skills/tree/main/skills/resilience-and-deploy-safety

In Ihrer bevorzugten KI fragen

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

Dokumentation

Resilienz und Deploy-Sicherheit

Übersicht

Dinge werden kaputtgehen. Die Haltung ist nicht „jeden Fehler verhindern“, sondern klein scheitern, schnell erholen und jedes Mal lernen. Zuverlässigkeit ist nicht die Abwesenheit von Fehlern; es ist der begrenzte Schadensradius und die kurze Wiederherstellungszeit, wenn der Fehler kommt.

Deploy-Sicherheit – Jeder Deploy muss umkehrbar und progressiv ausgerollt werden

  • Das Artefakt ist unveränderlich und wird befördert, nicht neu gebaut. Ein Image, einmal in CI gebaut und durch seinen Content-Digest identifiziert, durchläuft Preview → Staging → Production unverändert. Ein Wiederaufbau pro Umgebung bedeutet, etwas auszuliefern, das nie getestet wurde.
  • Tags sind veränderliche Zeiger; der Digest ist die Identität. Ein Tag kann überschrieben werden und stillschweigend woanders hinzeigen. Ein Content-Digest nicht. Jede Umgebung zeichnet den Digest auf, den sie validiert hat, und Production führt nur einen Digest aus, den eine niedrigere Umgebung validiert hat – daher ist „das exakt getestete Ding“ eine Eigenschaft, die die Pipeline erzwingt, und keine Disziplin, an die sich jemand erinnern muss.
  • Eine menschliche Entscheidung geht Production voraus. Für einen Solo-Maintainer ist dies eine bewusste Pause und ein Prüfnachweis, nicht eine Aufgabentrennung. Gib an, um was es sich handelt; übertreibe nicht.
  • Die laufende Version wird zur Deployment-Zeit injiziert, nie in das Image eingebacken. Eine als Build-Argument eingebackene Version erzwingt einen Rebuild, um einen Release zu stempeln, und genau dieser Rebuild soll durch Beförderung vermieden werden.
  • Wenn die Infrastruktur in einem eigenen Repository lebt, koordiniere mittels Expand/Contract. Die Infrastruktur wird zuerst expandiert (additiv, abwärtskompatibel), die Anwendung nutzt die neue Fähigkeit in einem späteren Deploy, und die Infrastruktur zieht sich zusammen, sobald kein live-Artefakt mehr von der alten Form abhängt – die gleiche Disziplin wie bei einem Schema-Change (siehe zero-downtime-migrations). Die Invariante: versende niemals ein Anwendungsartefakt, das eine noch nicht live geschaltete Infrastrukturänderung erfordert. Wenn dies eingehalten wird, ist jedes Repository unabhängig umkehrbar, was Rollback handhabbar macht, wenn die beiden nicht synchron sind.
  • Rolle nur vorwärts, wenn du auch rückwärts rollen kannst. Ein Rollback-Pfad existiert und ist getestet, bevor eine riskante Änderung ausgeliefert wird. „Wie machen wir das rückgängig?“ wird im Plan beantwortet, nicht während des Vorfalls.
  • Rollback bedeutet, den vorher guten Digest wieder auszurollen. Dieser Digest ist noch in der Registry und immer noch unveränderlich, daher ist Rollback eine umgekehrte Beförderung – niemals ein Rebuild und niemals ein Rebuild „wie es war“.
  • Progressive Exposure. Neue Versionen erreichen die Nutzer schrittweise (health-gated Rollout, Canary wo unterstützt), so dass ein schlechter Release nur einen Bruchteil, nicht alle trifft.
  • Schema-Änderungen sind von Code-Deployments entkoppelt und folgen Expand/Contract (siehe zero-downtime-migrations). Ein Deployment darf niemals eine gleichzeitige destruktive Migration erfordern.
  • Eine Deploy-Readiness-Checkliste prüft vor Production: Observability vorhanden, Rollback verifiziert, Migrationen expand-sicher, SLOs ungebrochen.

Incident Response – Fehler sind ein Lerninput

  • Klassifiziere nach Schweregrad und reagiere angemessen; habe einen bekannten Pfad, um die richtigen Personen einzubeziehen.
  • Schuld-freie Postmortems für jeden nutzerwirksamen Vorfall. Geschriebener Zeitstrahl, beitragende Ursachen (systemisch, nicht persönlich), konkrete Maßnahmen. Die Frage ist „was im System hat dies zugelassen“, niemals „wer hat Mist gebaut.“
  • Maßnahmen werden nachverfolgt, nicht vergessen – sie fließen in das Future-Considerations-Dokument (siehe recording-decisions) und werden zu echter Arbeit.
  • Das Error Budget regiert. Wenn die Zuverlässigkeit aufgebraucht ist, haben Zuverlässigkeitsaufgaben Vorrang vor Features, bis sich das Budget erholt.

Kurzreferenz

Vor einem riskanten DeployBestätigen
ArtefaktEinmal in CI gebaut; per Digest befördert; das gleiche, das Staging validiert hat
GateEine menschliche Entscheidung, vor Production aufgezeichnet
RollbackPfad existiert und ist getestet
ExposureSchrittweise/Canary, nicht alles auf einmal
SchemaExpand-sicher, entkoppelt vom Code-Deployment
ObservabilityKannst du sehen, ob etwas schief geht?

Wann dies skalieren

Lokale/Pre-Launch-Projekte schreiben diese Regeln jetzt, aktivieren sie ab den ersten echten Nutzern. Die Eigenschaften sind portabel – einmal bauen, befördern was getestet wurde, vor Production entscheiden, Rollback-fähig sein –, aber die Mechanismen nicht: eine Digest-Beförderung ist auf einem Container-Host sinnvoll und für eine statische Seite weitgehend irrelevant, und eine Managed Platform kann Preview-Umgebungen und sofortiges Rollback kostenlos bereitstellen. Benenne den Mechanismus im Deployment-Skill des Projekts; behalte die Eigenschaft hier. Stack-Mechanismen (k8s Probes, Canary, Per-PR-Envs): cloud-delivery-aks.

Vollständige Begründung: Artikel XII der Verfassung, gebündelt in engineering-constitution/references/engineering-constitution.md.

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/merge-gates-and-automation

Use when setting up or changing CI, pre-push hooks, or a task runner, or deciding what must pass before merge. Symptoms — tempted to put authoritative checks only in a local hook, skip CI, bypass with --no-verify, or unsure what gates a merge vs. runs locally.

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/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