Erkläre diesen PR
Lese einen GitHub-Pull-Request, verstehe, was er ändert, und schreibe eine verständliche Erklärung auf Deutsch. Poste sie als PR-Kommentar, damit Prüfer sofort Kontext haben.
Schritt 1: Setup prüfen
Stelle sicher, dass gh authentifiziert ist:
gh auth status
Wenn nicht authentifiziert: gh auth login und den Anweisungen folgen.
Eingabe prüfen. Der Benutzer muss eines angeben:
- Eine GitHub-PR-URL (z. B.
https://github.com/owner/repo/pull/123) - Eine PR-Nummer im aktuellen Repository (z. B.
#123) - Das Schlüsselwort "current", um den PR für den aktuellen Branch zu verwenden
Wenn keine Eingabe, frage: "Welchen PR soll ich erklären? Gib die URL, die PR-Nummer oder 'current' für den aktiven Branch an."
Schritt 2: PR-Kontext abrufen
PR-Metadaten holen:
gh pr view PR_URL_OR_NUMBER --json number,url,title,body,author,baseRefName,headRefName,additions,deletions,changedFiles,commits,labels,state,isDraft
Wenn isDraft true ist, teile dem Benutzer mit: "Dieser PR ist noch ein Entwurf. Die Erklärung basiert auf seinem aktuellen Stand."
Das Diff holen:
gh pr diff PR_URL_OR_NUMBER
Wenn das Diff über 400 Zeilen hat, lies die --stat-Zusammenfassung und die ersten 200 Zeilen des Diffs:
gh pr view PR_URL_OR_NUMBER --json files
gh pr diff PR_URL_OR_NUMBER | head -200
Vorhandene Kommentare holen (um Wiederholungen zu vermeiden):
gl pr view PR_URL_OR_NUMBER --json comments --jq '.comments[].body' 2>/dev/null | head -20
Schritt 3: Die Erklärung schreiben
Schreibe zwei Absätze. Lies jede Regel, bevor du schreibst.
Absatz 1: Was es tut (technisch)
- Ein Satz pro wesentlicher Änderung
- Nenne die spezifischen Dateien, Funktionen oder Systeme, die geändert wurden
- Beschreibe Vorher/Nachher, wenn das Diff es deutlich macht
- Füge konkrete Zahlen ein, wenn sie im Diff vorkommen (entfernte Zeilen, entfernte Tabellen, hinzugefügte Endpunkte)
- Aktiv, Präsens
Beispiel:
Ersetzt den In-Memory-Session-Cache in auth.middleware.ts durch einen Redis-basierten Cache (src/cache/redis.ts). Fügt dem neuen Redis-Modul die Methoden get, set und invalidate hinzu und umschließt UserService.getById() mit einer TTL von 5 Minuten. Entfernt den Map-basierten Cache, der auf einen einzelnen Prozess beschränkt war und zu Session-Drift über mehrere Instanzen hinweg führte.
Absatz 2: Warum es wichtig ist (Geschäfts-/Produktauswirkung)
- Wer profitiert und wie
- Welches Problem es löst oder welches Risiko es verringert
- Wenn die Commit-Nachrichten ein "Warum" enthalten, verwende diesen Kontext
- Wenn es im Diff oder in den Commits kein klares "Warum" gibt, lasse diesen Absatz weg, anstatt zu raten
Beispiel:
Benutzer, die unter Last den /api/me-Endpunkt aufriefen, erhielten inkonsistente Session-Daten über verschiedene Serverinstanzen hinweg, was zu sporadischen 401-Fehlern führte. Diese Änderung macht den Session-Status über alle Instanzen hinweg konsistent und reduziert die Datenbanklast, indem eine Abfrage pro authentifizierter Anfrage entfällt.
Regeln für beide Absätze:
- Keine Gedankenstriche – verwende ein Komma oder einen Punkt
- Keine Füllwörter: "dieser PR", "diese Änderung", "wie man sieht"
- Keine erfundenen Ergebnisse. Gib nur Auswirkungen an, die direkt im Diff oder in den Commit-Nachrichten sichtbar sind
- Wenn der PR ein reines Refactoring ohne Verhaltensänderung ist, sage das explizit: "Refaktoriert X zu Y ohne Änderung des beobachtbaren Verhaltens."
- Insgesamt unter 150 Wörtern
Schritt 4: Selbstprüfung
Vor dem Posten prüfen:
- Absatz 1 nennt konkrete Dateien oder Funktionen aus dem Diff
- Keine erfundenen Metriken oder Ergebnisse
- Keine Gedankenstriche
- Keine Füllphrasen
- Insgesamt unter 150 Wörtern
- Wenn kein klares "Warum" existiert, wird Absatz 2 weggelassen, anstatt geraten
Behebe jeden Verstoß vor dem Posten.
Schritt 5: Als PR-Kommentar posten
Zeige die Erklärung dem Benutzer an. Frage: "Bereit, dies als PR-Kommentar zu posten, oder möchtest du es zuerst bearbeiten?"
Bei Bestätigung den Text über stdin übergeben, um Backticks, Anführungszeichen und Zeilenumbrüche sicher zu handhaben:
gl pr comment PR_URL_OR_NUMBER --body-file - << 'EOF'
ERKLÄRUNG_HIER
EOF
Nach dem Posten: "Kommentar hinzugefügt. Ansehen unter: [URL aus Schritt 2]"
Wenn der Benutzer "nur ausgeben" sagt, zeige die Erklärung in einem Codeblock zum manuellen Kopieren und Einfügen an, ohne sie zu posten.