Was macht OpenClaw-Changelog-Aktualisierung?
Verwenden Sie dies für die Neufassung von Changelogs und den Quelltext von GitHub-Release-Notizen. Führen Sie für reguläre Beta/Stable-Releases die vollständigen Notizen vor der endgültigen Quellqualifikation so früh wie möglich aus; der Code-SHA kann dann auch der Release-SHA sein. Redaktionelle Arbeiten können sich mit der Code-Validierung überschneiden. Führen Sie das Skript nicht pro Validierungs-Wiederherstellungs-Backport erneut aus; wenn Backports den Code-SHA ersetzen, führen Sie es einmal aus, nachdem der endgültige Code-SHA grün ist, als einen echten CHANGELOG-only-Abkömmling unter der bestehenden Wiederverwendungsrichtlinie für Produktbeweise (Timing). Für Extended-Stable führen Sie es vor der endgültigen exakten Head-Validierung und dem Taggen aus. Führen Sie es nicht erneut für Tooling-Wiederholungen, fortgesetzte Veröffentlichungen oder Promotion aus.
Verwenden Sie es mit release-openclaw-maintainer; dieses Skill besitzt den Changelog-Inhalt, die Reihenfolge, Gruppierung und die Disziplin der Zuordnung.
Ziel
Erstellen Sie den Ziel-CHANGELOG/<version>.md-Release-Abschnitt aus einem vollständigen, generierten Historienmanifest, nicht aus veralteten Entwurfsnotizen. Erzeugen Sie gruppierte, benutzerorientierte Release-Notizen, sortiert nach Benutzerinteresse, wobei jeder relevante Issue/PR-Ref und jede verifizierte menschliche Danke @...-Zuordnung erhalten bleibt.
CHANGELOG.md ist der generierte Release-Index. Der gemeinsame Besitzer scripts/lib/release-changelog.mjs löst Release-Abschnitte und Beitragsdatensätze aus einem Arbeitsbaum oder einem festgepinnten Git-Ref auf, einschließlich historischer Referenzen, die noch einen Monolithen enthalten. Verwenden Sie node scripts/release-changelog.mjs read --version <version> [--ref <sha-or-tag>] für einen Abschnitt oder fügen Sie --record für dessen Beitragsdatensatz hinzu. Ein fehlendes Split-Artefakt darf nicht auf den Root-Index zurückfallen. Historische Releases ohne Datensätze erhalten keine erfundene Herkunft. Generierte CHANGELOG/**-Dateien behalten exakte migrierte oder gespiegelte Bytes bei und sind von der generischen Formatierung ausgeschlossen, wie das Root-Changelog. Validieren Sie sie über ihren Besitzer mit pnpm changelog:check.
Aktuelle Schreibvorgänge verwenden das Split-Layout. Um einen vollständigen ersten Abschnitt zu speichern, verwenden Sie node scripts/release-changelog.mjs write --version <version> --file <section.md>; es aktualisiert den Release-Eintrag, der mit CHANGELOG/records/<version>.md übereinstimmt, falls vorhanden, und den Index zusammen. Die erste Generierung behält das folgende Abschnittsformat bei. Veröffentlichte Docs-Spiegel folgen dem separaten Post-Release-Pfad am Ende dieses Skills; die erste Generierung darf sie niemals überschreiben.
Eingaben
- Zielversion: exakt
YYYY.M.PATCH-beta.Nfür ein Beta-Delta;YYYY.M.PATCHfür kumulative Stable-Notizen. Beta-Einträge und -Datensätze sind separate eingefrorene Artefakte, niemals Kopien des Stable-Basis-Abschnitts. - Beta-Basis-Tag: erfassen Sie die Version, die derzeit vom öffentlichen npm
openclaw@betavor der Veröffentlichung ausgewählt wird, nicht den letzten GitHub-Prerelease oder die höchste Beta-Suffix-Version. Der Selektor kann auch eine Stable-Version nennen, die auch vonlatestausgewählt wird. Lassen Sie--baseweg (oder verwenden Sie--base npm-beta) mit einer exakten Beta-Version, um es einmal aufzulösen; bewahren Sie das aufgelöste Tag aus dem generierten Manifest und verwenden Sie dieses explizite--baseerneut für Bearbeitungen, Verifikation und Wiederherstellung. Wenn npm bereits den Kandidaten oder eine neuere Version auswählt, verweigert die Generierung die Schätzung des historischen Selektorzustands; geben Sie das zuvor erfasste Tag an. Wenn dieses Tag kein Vorfahre ist (z.B. ein Stable-Closeout-Forward-Port), verwendet der Verifizierer seine erreichbare Merge-Basis und subtrahiert den kumulativen PR-Datensatz des erfassten versendeten Tags durch die--shipped-ref-Semantik. Das Manifest und der Datensatz behalten beide Grenzen bei; wiederholen Sie die Ausführung mit dem erfassten Tag, um denselben Bereich aufzulösen, wählen Sie niemals eine ältere GitHub-Beta stattdessen. - Stable-Basis-Tag: letztes erreichbares versendetes Stable-Release-Tag. Es muss ein Vorfahre des Ziels sein; ein neueres, aber divergentes Tag ist keine gültige Historiengrenze. Verwenden Sie einen expliziten versendeten/main-Closeout-SHA nur, wenn er auch vom Ziel aus erreichbar ist.
- Ziel-Ref: die exakte produktvollständige Historie, die dokumentiert wird. Sein Beitragsdatensatz-Ziel muss ein Vorfahre des endgültigen Release-Ziels sein; es muss keinen noch nicht erstellten Changelog-Commit nennen. Fügen Sie spätere Korrekturen vor der Finalisierung der Notizen ein. Endgültige Notizen können vor der Qualifikation oder danach als CHANGELOG-only-Abkömmling eines grünen Code-SHA committet werden.
- Kanonischer Main-Ref: aktueller
origin/main, vor der Verifikation abgerufen. Release-Notizen zitieren den ursprünglich gemergten Main-PR, wenn dieselbe Arbeit durch einen Backport transportiert wird. Ein Release-Branch-PR wird nur verwendet, solange kein Forward-Port auf dem aktuellen Main existiert.
Workflow
-
Bestätigen Sie den Release-Branch und das exakte Historie-Ziel:
git fetch --tags origin- bestätigen Sie sauberes
git status -sb - notieren Sie
git rev-parse HEADals Historie-Ziel - notieren Sie die Full-Release-Validation-Run-ID und den Versuch, wenn die Qualifikation bereits existiert
- schließen Sie ausstehende Produkt-/Versions-/Backport-Änderungen ab, bevor Sie die endgültige Quelle einfrieren; aktualisieren Sie das Inventar für tatsächliche Änderungen
-
Prüfen Sie die Historie, einschließlich direkter Commits:
git log --topo-order --date=iso-strict --pretty=format:'%h%x09%ad%x09%s' <base-tag>..<target-ref>git log --topo-order --grep='(#' --date=short --pretty=format:'%h%x09%ad%x09%s' <base-tag>..<target-ref>- Fügen Sie jeden Commit ein, der vom Ziel aus erreichbar ist, aber nicht von der Basis, einschließlich gemergter Seiten-Branches. Lösen Sie PR-Zuordnungen vor dem Deduplizieren und Subtrahieren versendeter Datensätze auf; behalten Sie die bestehenden Revert-Ausschlüsse bei.
- prüfen Sie auch
--since='24 hours ago', wenn sich Main während des Releases bewegt hat.
-
Generieren Sie den vollständigen Beitragsdatensatz und das redaktionelle Manifest, bevor Sie gruppierte Prosa schreiben:
node --import tsx .agents/skills/openclaw-changelog-update/scripts/verify-release-notes.mjs \ --base <base-tag> \ --target <target-ref> \ --release-branch <canonical-release-branch> \ --main-ref origin/main \ --version <YYYY.M.PATCH> \ --manifest /tmp/openclaw-release-<YYYY.M.PATCH>.json \ --write-ledgerFür die Beta-Generierung verwenden Sie
--version YYYY.M.PATCH-beta.Nund lassen Sie--basebeim ersten Inventarlauf weg. Starten Sie einen exakten Versionsabschnitt mit Highlights, Changes und Fixes unter Verwendung des gemeinsamen Writers; generieren Sie das Delta-Manifest, schreiben Sie dann Prosa nur für diesen Bereich. Folgende Läufe verwenden das erfasste npm-Basislinien-Tag explizit (nicht nur den Merge-Base-SHA eines divergenten Bereichs). Fragen Sie npm nach der Veröffentlichung nicht erneut ab und überschreiben Sie den kumulativen Stable-Eintrag nicht. Generieren Sie kumulative Stable-Notizen bei der Stable-Vorbereitung neu.Fügen Sie wiederholbare
--release-provenance '<40sha> -> #PR[, #PR]'Eingaben hinzu, wenn Release-Commits keine Provenienz-Metadaten tragen können. Diese verwenden dieselbe exakte Markierungs-Grammatik und Quellvalidierung wie Commit-Body-Marker. Ein gemergtes Release-Branch-Original ist nur gültig, solange kein entsprechender aktueller-Main-Forward-Port existiert; sein GitHub-Merge-Commit pinnt die ursprüngliche Quelle.Der Verifizierer verwendet automatisch öffentliche GitHub GraphQL-Antworten aus einem exakten Basis/Ziel-SHA-Snapshot unter den Git-Metadaten des Arbeitsbaums wieder. Iterative Neufassungen beim selben Ziel vermeiden wiederholte Netzwerkerkennung. Verwenden Sie
--refresh-github-snapshotnach verdächtigen API-Daten,--github-snapshot <path>für ein explizites Artefakt oder--no-github-snapshotfür eine Live-only-Prüfung. GitHub-Release-Bodies werden immer live gelesen. ExpliziteCI #,CI run #,Actions run #undworkflow run #Referenzen in aktiver Quelle werden separat klassifiziert, nur wenn die Issue/PR-Auflösung fehlschlägt und eine Live-Same-Repository-Actions-Suche die exakte Run-ID bestätigt. Jedes gewöhnliche Vorkommen dieser Zahl in aktiver Quelle, Notizen oder dem Beitragsdatensatz bleibt eine strikte Issue/PR-Anforderung. Bestätigte Runs erscheinen alsworkflowRunsin der Verifikationsausgabe und dem Manifest, niemals als PR-Zuordnungen oder Mitwirkenden-Credits. Nur GitHubNOT_FOUND-Referenzen, die auf kontextuellen Commit-Body-Text beschränkt sind, nicht in Betreffzeilen, schließenden Referenzen, Provenienz und Notizen/Datensätzen vorkommen und unter der höchsten aufgelösten Nummer liegen, können weggelassen und als ManifestunavailableReferencesohne Credits gemeldet werden.- das Manifest ist die erforderliche Eingabe für die Neufassung, keine nachträgliche Prüfung; es enthält jeden referenzierten PR, berechtigte Mitwirkenden-Credits, Inline-Issue-Kontext, jeden direkten Commit und eine redaktionelle Eignungsklassifikation für PRs und direkte Commits
- Schema-Version 3 ist der erforderliche flüchtige Manifestvertrag. Generieren Sie ältere Manifests neu; Version 2 ist keine unterstützte Grenze für Downstream-Reader
- fügen Sie für eine historische Nachfüllung
--seed-ref <pre-backfill-ref>einmal hinzu, damit Beitragsdatensätze aus dem vorherigen Changelog erhalten bleiben, selbst wenn ein älterer gemergter Commit seine PR-Nummer weggelassen hat; der Verifizierer schließt Datensätze für Arbeit aus, die nach dem Basis-Tag zurückgesetzt wurde, einschließlich Beta-Arbeit, die vor dem Stable-Release zurückgesetzt wurde - generierte Provenienzberichte listen PRs im Bereich getrennt von beibehaltenen Seed-only-PRs auf und nennen dann die eindeutige Zeilenanzahl. Ein PR, der in beiden Inventaren vorhanden ist, zählt als im Bereich; beschreiben Sie niemals die Seed-inklusiv-Gesamtzahl als Arbeit, die im aktuellen Release-Bereich gemergt wurde
- fügen Sie wiederholbare
--shipped-ref <prior-shipped-tag>hinzu, wenn sich der erreichbare Main-Closeout vom versendeten Tag unterscheidet oder spätere Forward-Port-Commits PRs neu zuordnen, die bereits veröffentlicht wurden. Jedes Tag ist eine kumulative versendete Grenze: der Verifizierer vereinigt explizite PR-Zeilen aus vollständigen Beitragsdatensätzen in nummerierten Release-Abschnitten, schließt nur überlappende PRs aus und ignoriertUnreleased. Leiten Sie diese Grenze niemals aus dem Basis-SHA, der Ziel-Prosa oder dem Ziel-Datensatz ab. Das Manifest und die generierte Provenienz behalten jedes Tag plus das exakte ausgeschlossene PR-Inventar und die Anzahl für deterministische Kandidatenvalidierung bei. - die Quell-PR-Erkennung begrenzt GitHub-Commit-Zuordnungen auf die ausgewählte Zielhistorie oder die eingefrorene Main-Historie für kanonische Träger. Eine kontextuelle Quellreferenz wird nur dann zu einem Beitrag, wenn ihr gemergter Commit in der Zielhistorie erreichbar ist und seine Merge-Zeit innerhalb des Ziels liegt. Behalten Sie alle Referenzen auflösbar bei, fördern Sie aber keine nicht verwandten PRs nur, weil sie während der Release-Vorbereitung mergen. Explizite Seeds behalten ihre historische Zugehörigkeit und bleiben Seed-only, es sei denn, sie werden unabhängig als im Bereich nachgewiesen. Lösen Sie jede Zuordnungsseite auf; bestehende kanonische, Cherry-Pick- und Provenienzverträge bleiben maßgeblich.
- explizite Multi-Commit-Reverts benötigen einen Revert-Betreff und eine eigenständige
Reverts <full SHA> and <full SHA>.-Deklaration (Komma-getrennte Listen mit abschließendemandfunktionieren auch). Die exakte Endungto restore the previous behavior.wird akzeptiert. Doppelte, abgekürzte, eingebettete oder wiederholte Deklarationen begründen keine Rückgängigmachung. Jeder benannte Commit muss ein Single-Parent-Vorfahre sein, und das Rückanwenden aller benannten Patches muss den vollständigen Revert-Baum reproduzieren. Erkannte Deklarationen, die diesen Beweis nicht bestehen, stoppen die Verifikation. Der Beweis verwendet privates Git-Index/Object-Speicher ohne Hooks oder externe Diffs; die kanonische Single-Revert- und Revert-of-Revert-Buchhaltung bleibt intakt. - kanonisieren Sie Backports zum ursprünglich gemergten PR auf
main: explizite Cherry-Pick-Ursprünge gewinnen, dann erfordert eine eindeutige Übereinstimmung mit normalisiertem Betreff denselben Autor und einen überlappenden geänderten Pfad. Unterdrücken Sie Release/Backport-PRs, wann immer der entsprechende Main-PR auf dem aktuellenorigin/mainexistiert. Behalten Sie einen Release-Branch-PR nur, wenn diese Änderung zuerst dort gelandet ist und noch nicht nachmainforward-portiert wurde. - lesen Sie das Manifest, bevor Sie
### Highlights,### Changesoder### Fixesbearbeiten; führen Sie keine alte gruppierte Prosa ohne erneute Prüfung fort. - prüfen Sie verlinkte PRs/Issues oder Diffs auf mehrdeutige Commits. Direkte Commits sind redaktionelle Eingaben, keine öffentlichen Hauptbuchzeilen; leiten Sie materielle Benutzerergebnisse aus Betreff, Body, geänderten Dateien, Tests und nahegelegenen Commits ab.
-
Schreiben Sie nur einen ausgewählten Release-Abschnitt neu:
- Beta:
## YYYY.M.PATCH-beta.N, enthält nur Änderungen seit der erfassten npm-Beta-Basislinie - Stable:
## YYYY.M.PATCH, kumulativ seit der vorherigen Stable-Basislinie - hinterlassen Sie keinen veralteten
## Unreleased-Abschnitt oberhalb des Ziel-Releases - wenn
UnreleasedRelease-gebundene Notizen enthält, fügen Sie sie in den Zielabschnitt ein, anstatt sie zu löschen
- Beta:
-
Abschnittsform:
### Highlights: 5-8 Aufzählungspunkte für Stable, 0-8 für ein Beta-Delta; erfinden Sie keine Highlights für kleine Hotfix-Betas- fügen Sie nur eine klare benutzersichtbare Fähigkeit oder Workflow-Freischaltung, eine materielle Zuverlässigkeits-/Sicherheitskorrektur, eine breite oberflächenübergreifende Verbesserung oder einen Release-definierenden Integrations-/Kompatibilitätsmeilenstein ein
- jedes Highlight muss in einem Satz sagen, was sich für einen Benutzer geändert hat; verwenden Sie eine Benutzergeschichte pro Aufzählungspunkt und gruppieren Sie seine unterstützenden PRs
- schließen Sie Tests, CI, Refactorings, Docs, Katalog-Churn und Implementierungsdetails aus, es sei denn, das Ergebnis ist eine materielle Installation/Aktualisierung, Datensicherheit oder weithin sichtbare Benutzerverbesserung
### Changes: neue Fähigkeiten und Verhaltensänderungen### Fixes: benutzerseitige Korrekturen zuerst, gruppiert nach Auswirkung und Oberfläche- gruppieren Sie verwandte Änderungen/Korrekturen nach Oberfläche und Benutzerauswirkung; vermeiden Sie einen Aufzählungspunkt pro winzigem Commit, wenn mehrere Commits eine Benutzergeschichte erzählen
### Complete contribution record: generierter PR-erster Datensatz nach der gruppierten Prosa; es ist die erschöpfende Buchhaltungsoberfläche, keine zweite Release-Zusammenfassung
-
Bewahren Sie verifizierte Zuordnung:
- Die PR-Autorenschaft stammt vom kanonischen GitHub-PR, niemals vom Release-Commit-Autor, Committer oder Backport-Operator. Lösen Sie Co-Autoren aus dem ursprünglichen Merge-Commit dieses PR auf; Release-Carrier-Trailer und kontextuelle Erwähnungen begründen keinen Kredit auf einem anderen PR
- erstellen Sie generierte Danksagungen aus PR-, ursprünglichem Co-Autoren- und verlinktem Reporter-Nachweis neu. Seeds behalten Mitgliedschaft und Referenzen, nicht unverifizierte alte Daten.
...
[gekürzt für die Übersetzung]