Communitygithub.com

lguidolin/ship-it

Wenn der Benutzer Arbeiten ausliefern möchte – Pushen, PR erstellen, Entscheidungsdokumente archivieren, Mergen und Aufräumen. Deckt den gesamten Lebenszyklus ab, vom Committen der finalen Änderungen bis zur Bereinigung nach dem Merge, einschließlich der Umwandlung von Spezifikationen/Plänen in kompakte Entscheidungsdokumente.

Was ist ship-it?

Dieses Skill automatisiert den vollständigen Auslieferungszyklus für Entwicklungsarbeiten: Staging, Commit, Push, PR-Erstellung, post-Merge-Archivierung von Spezifikationen und Plänen sowie Bereinigung. Es stellt sicher, dass niemals direkt auf main gepusht wird – jeder Change durchläuft einen Branch und PR, was für CI-Gates und Preview-Deployments unerlässlich ist. Der Prozess beginnt mit der Ausführung der Tests (Phase 0); schlagen diese fehl, wird der Vorgang abgebrochen. Nach erfolgreichem Test werden die Änderungen mit einer Conventional-Commit-Nachricht committet, gepusht und ein PR erstellt. Ist der PR gemergt, wird die eigentliche Auslieferung (Staging/Production) an ein separates Delivery-Skill delegiert; ship-it übernimmt dann die Archivierung: Es wandelt ausführliche Spezifikationen und Pläne in kompakte Entscheidungsdokumente (ca. 30–50 Zeilen) um, verschiebt die Originale in ein Archiv und aktualisiert den Entscheidungsindex. Anschließend wird der Branch lokal und remote gelöscht. Das Skill unterstützt normale Repos, Named-Branch-Worktrees und detachted HEADs, sofern das Hilfsskill `superpowers:finishing-a-development-branch` verfügbar ist; anderenfalls fällt es auf eine eigene Implementierung zurück. Plattformen: Claude Code, Cursor, Codex und ähnliche KI-Agenten mit Shell-Zugriff.

Funktioniert mit✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/lguidolin/agent-skills/tree/main/skills/ship-it

In Ihrer bevorzugten KI fragen

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

Dokumentation

Ausliefern (Ship It)

Den vollständigen Auslieferungslebenszyklus handhaben: Staging, Commit, Push, PR eröffnen, Entscheidungsdokumente nach dem Merge archivieren und aufräumen.

Übersicht

Jeder Change durchläuft einen Branch und PR. Niemals direkt auf main pushen. Dieses Skill deckt den gesamten Abschlusszyklus ab, einschließlich der Archivierung von Dokumentation nach dem Merge.

Commit-Nachrichten sind Dokumentation. Der PR-Titel wird zum Squash-Merge-Commit auf main und erscheint im Changelog. Er muss bereits bei der PR-Erstellung korrekt sein.

Archiviere erst nach dem Merge, niemals vorher. Spezifikationen und Pläne bleiben bis zum Merge zugänglich. Erst danach werden sie in kompakte Entscheidungsdokumente umgewandelt.

Verwendung

  • Benutzer sagt „push", „ship it", „let's ship", „open a PR", „create a PR"
  • Benutzer sagt „merged", „it's merged", „pull and cleanup" nachdem ein PR eröffnet wurde
  • Benutzer hat die Implementierung abgeschlossen und möchte abschließen
  • Nach der Fertigstellung eines Plans, bei dem der nächste Schritt die Einreichung der Arbeit ist

Wann NICHT verwenden

  • Benutzer möchte explizit direkt auf main pushen (zuerst bestätigen, dass dies beabsichtigt ist)
  • Repository hat kein Remote konfiguriert
  • Änderungen befinden sich noch in Arbeit und der Benutzer ist noch nicht bereit zum Pushen
  • Benutzer möchte nur committen ohne auszuliefern (conventional-commits-and-releases verwenden)

Ablauf

Phase 0: Prüfen und Erkennen

Eine rote Testsuite wird niemals zu einem PR. Führe zuerst die vollständige Testsuite des Projekts aus. Falls etwas fehlschlägt, melde die Fehler und stoppe – nicht committen, pushen oder PR eröffnen. Diese Hürde ist Hausregel und wird nicht delegiert.

Die Umgebungserkennung (normales Repo vs. Named-Branch-Worktree vs. detached HEAD) und die Bestimmung des Basisbranches werden an superpowers:finishing-a-development-branch delegiert, das bereits alle drei Fälle behandelt.

Prüfe die Verfügbarkeit auf die richtige Weise: Suche nach finishing-a-development-branch in deiner eigenen Liste der verfügbaren Skills. Wenn es gelistet ist, ist es aufrufbar. Wenn nicht, ist es nicht verfügbar – dann mit dem Fallback fortfahren.

Durchsuche nicht das Dateisystem danach. ~/.claude/plugins/cache/ enthält jede jemals abgerufene Version, einschließlich installierter, aber deaktivierter Plugins, und Skills können auch auf anderen Wegen als dem Plugin-Cache bereitgestellt werden. Ein existierender Pfad im Cache beweist nichts darüber, ob das Skill aufgerufen werden kann.

Wenn verfügbar – rufe es für die Testprüfung, Umgebungserkennung und Basisbranch-Bestimmung auf, stoppe dann vor seinem Optionsmenü.

Die Integrationsentscheidung wurde bereits durch die Hausregel getroffen und kann nicht vom Benutzer neu getroffen werden: dieses Projekt merged nur über einen PR, weil der PR die Preview-Bereitstellung und die CI-Hürde erzeugt. Die Option "lokal in <base> zurückmergen" ist nicht verfügbar. Die Option "den Branch unverändert lassen" bleibt gültig – das ist eine Entscheidung, aufzuschieben, nicht die Hürde zu umgehen.

Wenn fehlend – Fallback verwenden, ohne etwas zu verlieren, das die Korrektheit sichert:

  • Führe die Testsuite direkt aus.
  • Behandle den Upstream des Branches oder main als Basis; bestätige mit dem Benutzer vor dem Fortfahren.
  • Überspringe die Worktree-Bereinigung in Phase 6; lösche den Branch normal.

Phase 1: Staging & Commit

git status --short
git branch --show-current
git log --oneline @{upstream}..HEAD 2>/dev/null || echo "Kein Upstream gesetzt"

Entscheidungsbaum:

  • Auf main mit uncommitteten Änderungen → Branch erstellen, committen, pushen, PR
  • Auf Feature-Branch mit uncommitteten Änderungen → committen, pushen, PR (oder bestehenden PR aktualisieren)
  • Auf Feature-Branch mit ungepushten Commits → pushen, PR (oder bestehenden PR aktualisieren)
  • Auf Feature-Branch mit bestehendem PR → pushen (PR existiert bereits)

Falls es nicht gestagte Änderungen gibt:

  • Frage den Benutzer, ob alle Änderungen oder bestimmte Dateien einbezogen werden sollen
  • Falls die Änderungen mehrere Aspekte betreffen, schlage eine Aufteilung vor

Erstelle die Commit-Nachricht:

TypWann
featNeue Funktionalität
fixFehlerbehebungen
docsNur Dokumentation
choreKonfiguration, Abhängigkeiten, Werkzeuge
refactorCode-Umstrukturierung, kein Verhaltensänderung
testHinzufügen oder Ändern von Tests
ciCI/CD-Workflow-Änderungen

Format: <typ>[optionaler Bereich]: <imperative Beschreibung>

Regeln:

  • Imperativ ("add", nicht "added" oder "adds")
  • Erstes Wort nach Doppelpunkt kleingeschrieben
  • Kein Punkt am Ende
  • Kurz (maximal 50 Zeichen für den Betreff)
  • Beschreibt was der Commit tut, nicht wie

Lege dem Benutzer die vorgeschlagene Commit-Nachricht vor und bestätige vor dem Commit.

Phase 2: Branch & Push

Falls auf main, erstelle einen Branch:

<typ>/<kurze-beschreibung>

Beispiele:

  • feat/oauth-login
  • fix/null-response-handling
  • docs/release-workflow-permissions

Pushen:

git push -u origin $(git branch --show-current)

Phase 3: PR eröffnen

PR-Titel = Conventional-Commit-Nachricht (wird für Squash-Merge auf main verwendet).

PR-Body-Struktur:

## Was sich geändert hat

[Spezifische Beschreibung der Hinzufügungen/Änderungen/Entfernungen]

## Warum

[Motivation – welches Problem wird gelöst?]

Mit gh CLI erstellen:

gh pr create --title "<Conventional-Commit-Nachricht>" --body "<PR-Body>"

Falls gh nicht verfügbar ist, die PR-URL aus der git push Ausgabe bereitstellen oder konstruieren.

Überprüfe, ob die Preview-Umgebung gestartet ist. Falls das Projekt PR-basierte Previews deployt, warte auf diesen Workflow und bestätige, dass die Umgebung erreichbar ist, bevor der PR übergeben wird:

gh pr checks --watch

Falls das Preview nicht deployed, melde es und stoppe. Ein PR, den niemand reviewen kann, ist nicht ausgeliefert.

Wo dieses Skill endet. ship-it beendet sein Deployment-Bewusstsein beim Preview. Staging- und Production-Promotion sind nicht seine Aufgabe – sie gehören zum Delivery-Skill des Projekts (cloud-delivery-aks oder Äquivalent). Phasen 4–6 unten betreffen Git- und Dokumentationshygiene, nicht Deployment.

Phase 4: Auf Merge warten

Nachdem der PR erstellt wurde, frage: „Lass mich wissen, wenn er gemerged ist, dann kümmere ich mich um Aufräumen und Archivierung."

Warte auf Benutzerbestätigung (z. B. „merged", „done", „it's merged").

Phase 5: Nach dem Merge – Entscheidungsdokumente archivieren

Spezifikationen und Pläne sind absichtlich ausführlich – gut für Menschen, die die Historie lesen, teuer jedes Mal, wenn Claude eine lädt. Sie in kompakte Entscheidungsdokumente umzuwandeln, hält die wesentlichen Entscheidungen günstig lesbar, während die vollständige Erzählung auf der Festplatte archiviert bleibt und nichts kostet, bis sie jemand absichtlich öffnet.

Erst nach dem Merge, prüfe auf nicht umgewandelte Spezifikationen/Pläne:

ls docs/superpowers/specs/ 2>/dev/null
ls docs/superpowers/decisions/ 2>/dev/null

Das Skill recording-decisions liefert zwei Helfer dafür. Finde sie – das Skill kann im Projekt oder global installiert sein:

for base in .claude/skills ~/.claude/skills; do
  d="$base/recording-decisions/scripts"
  [ -d "$d" ] && echo "$d" && break
done

Falls gefunden, listet $d/doc-archive.sh nicht umgewandelte Spezifikationen auf und gibt einen Umwandlungs-Prompt aus, und $d/index-rebuild.sh regeneriert den Index. Falls nicht gefunden, die gleiche Arbeit von Hand mit den folgenden Schritten erledigen – sie sind in sich abgeschlossen.

Falls nicht umgewandelte Spezifikationen/Pläne existieren:

  1. Frage den Benutzer: „Ich habe Spezifikationen/Pläne gefunden, die zu dieser Arbeit passen könnten. Soll ich sie in kompakte Entscheidungsdokumente umwandeln und die Originale archivieren?"

  2. Falls ja, für jede Spezifikation:

    • Inhalt der Spezifikation lesen
    • Ein Entscheidungsdokument mit YAML-Frontmatter erstellen:
      ---
      title: <aus Spezifikation extrahiert>
      date: <aus Dateiname der Spezifikation>
      component: <aus Inhalt abgeleitet>
      status: implemented
      supersedes: null
      dependencies: [<abgeleitet>]
      ---
      
    • Etwa 30–50 Zeilen schreiben, die erfassen: Schlüsselentscheidungen, Schnittstellen, Einschränkungen
    • Speichern unter docs/superpowers/decisions/<datum>-<thema>.md
    • Original-Spezifikation verschieben nach docs/superpowers/archive/specs/
    • Passenden Plan verschieben nach docs/superpowers/archive/plans/
  3. Den Master-Index neu aufbauen – docs/superpowers/index.md aus dem Frontmatter aller Entscheidungsdokumente neu generieren, gruppiert in eine Tabelle Aktive Entscheidungen (Komponente, Titel, Datum, Abhängigkeiten) und eine Tabelle Ersetzt (Komponente, Titel, ersetzt durch). $d/index-rebuild.sh ausführen, falls du es oben gefunden hast; andernfalls die Datei direkt schreiben.

  4. Die Archivierung committen:

    git add docs/superpowers/
    git commit -m "docs: Spezifikationen archivieren und Entscheidungsindex aktualisieren"
    git push
    

Phase 6: Aufräumen

git checkout main
git pull
git branch -d <branch-name>
git push origin --delete <branch-name> 2>/dev/null || true
git fetch --prune

Sauberen Zustand prüfen:

git branch --show-current
git log --oneline -3

Falls die Arbeit in einem Git-Worktree stattfand, delegiere die Bereinigung an superpowers:finishing-a-development-branch (dessen Herkunfts-basierte Bereinigung – es weiß, welche Worktrees es besitzt, und lässt extern verwaltete in Ruhe). Falls dieses Skill nicht verfügbar ist, entferne den Worktree manuell mit git worktree remove <pfad> und bestätige zuerst mit dem Benutzer.

Schlüsselprinzipien

  • Eine rote Testsuite wird niemals zu einem PR – vor allem anderen prüfen (Phase 0)
  • Niemals direkt auf main pushen – immer Branch + PR. Der PR ist die Preview-Bereitstellung und die CI-Hürde; ein lokaler Merge überspringt beides. Dies überschreibt jeden Workflow, der lokales Mergen als Option anbietet.
  • Ausliefern endet beim Preview – Merge, Archivierung und Aufräumen sind Hygiene; Promotion zu Staging und Production ist Aufgabe eines separaten Skills
  • Conventional Commits – der PR-Titel ist der Changelog-Eintrag
  • Nur nach dem Merge archivieren – Spezifikationen bleiben während des Reviews zugänglich
  • Entscheidungsdokumente sind kompakt – ca. 30–50 Zeilen, YAML-indiziert, LLM-optimiert
  • Vollständig aufräumen – keine veralteten Branches oder Tracking-Refs

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