Was macht OpenClaw Changelog Update?
Verwenden Sie dies für Changelog-Neuschreibungen und GitHub-Release-Notizen-Quelltexte. Für regelmäßige
Beta/Stable-Notizen bereiten Sie vollständige Texte vor der abschließenden Quellqualifikation vor, wenn
möglich; der Code-SHA kann dann auch der Release-SHA sein. Redaktionelle Arbeit kann die
Code-Validierung überlappen. Führen Sie es nicht für jeden Validierung-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-Nachfolger unter der bestehenden Produktbeleg-Wiederverwendungsrichtlinie
(Timing). Für
extended-stable führen Sie es vor der endgültigen exakten Head-Validierung und dem Tagging aus. Führen Sie es nicht
für Tooling-Wiederholungen, fortgesetzte Veröffentlichung oder Promotion erneut aus.
Verwenden Sie es mit release-openclaw-maintainer; dieses Skill besitzt die Changelog-Inhalte,
-Sortierung, -Gruppierung und Attributionsdisziplin.
Ziel
Den Ziel-Release-Abschnitt CHANGELOG/<version>.md aus einem vollständigen, generierten
Historienmanifest neu erstellen, nicht aus veralteten Entwurfsnotizen. Gruppierte benutzerorientierte Release-
Notizen erstellen, sortiert nach Benutzerinteresse, wobei jede relevante Issue/PR-Referenz und
jede bestätigte menschliche Thanks @...-Attribution 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 gepinnten Git-Ref auf, einschließlich historischer Refs,
die noch einen Monolithen enthalten. Verwenden Sie node scripts/release-changelog.mjs read --version <version> [--ref <sha-or-tag>], um einen Abschnitt zu lesen, oder fügen Sie --record hinzu, um
seinen Beitragsdatensatz zu erhalten. Ein fehlendes Split-Artefakt darf nicht auf den
Stammindex zurückfallen. Historische Releases ohne Datensätze erhalten keine erfundene Herkunft.
Generierte CHANGELOG/**-Dateien behalten exakte migrierte oder gespiegelte Bytes und sind
von generischer Formatierung ausgeschlossen, wie das Stamm-Changelog. Validieren Sie sie durch
ihren Besitzer mit pnpm changelog:check.
Aktuelle Schreibvorgänge verwenden das Split-Layout. Um einen vollständigen Anfangsabschnitt zu speichern, verwenden Sie
node scripts/release-changelog.mjs write --version <version> --file <section.md>;
es aktualisiert den Release-Eintrag, passend zu CHANGELOG/records/<version>.md wenn
vorhanden, und den Index zusammen. Die erstmalige Generierung behält das Abschnittsformat
unten bei. Veröffentlichte Docs-Spiegel folgen dem separaten Post-Release-Pfad am Ende
dieses Skills; die Erstgenerierung darf diese 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 das letzte GitHub-Prerelease oder die höchste Beta-suffigierte Version. Der Selektor kann auch eine Stable-Version benennen, die vonlatestausgewählt wird. Lassen Sie--baseweg (oder verwenden Sie--base npm-beta) mit einer exakten Beta-Version, um sie einmal aufzulösen; bewahren Sie das aufgelöste Tag aus dem generierten Manifest und verwenden Sie dieses explizite--basefür Bearbeitungen, Überprüfung und Wiederherstellung erneut. 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 Prüfer seine erreichbare Merge-Basis und subtrahiert den kumulativen PR-Datensatz des erfassten verschifften Tags durch--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 ein älteres GitHub-Beta stattdessen aus. - Stable-Basis-Tag: Letztes erreichbares verschifftes Stable-Release-Tag. Es muss ein Vorfahre des Ziels sein; ein neueres, aber divergentes Tag ist keine gültige Historiengrenze. Verwenden Sie einen expliziten verschifften/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 benennen. Fügen Sie alle späteren Korrekturen vor dem Finalisieren der Notizen ein. Endgültige Notizen können vor der Qualifikation übergeben werden, oder danach als CHANGELOG-only-Nachfahre eines grünen Code-SHA.
- Kanonischer Main-Ref: aktueller
origin/main, abgerufen vor der Überprüfung. Release- Notizen zitieren den ursprünglichen zusammengeführten Main-PR, wenn dieselbe Arbeit von einem Backport getragen 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 Historienziel:
git fetch --tags origin- bestätigen Sie sauberen
git status -sb - notieren Sie
git rev-parse HEADals Historienziel - notieren Sie die Full Release Validation Run-ID und den Versuch, wenn bereits eine Qualifikation 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
-
Auditieren 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>- Schließen Sie jeden Commit ein, der vom Ziel, aber nicht von der Basis aus erreichbar ist, einschließlich zusammengeführter Seitenbranches. Lösen Sie PR-Zuordnungen vor dem Deduplizieren und Subtrahieren verschiffter Datensätze auf; behalten Sie die bestehenden Rücknahmeausschlüsse bei.
- überprü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 vor dem Schreiben gruppierter Prosa:
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 Abschnitt mit exakter Version mit Highlights, Changes und Fixes unter Verwendung des gemeinsamen Writers; generieren Sie das Delta-Manifest, dann schreiben Sie Prosa nur für diesen Bereich. Nachfolgende Läufe verwenden das erfasste npm-Baseline-Tag explizit (nicht nur den Merge-Base-SHA eines divergenten Bereichs). Fragen Sie npm nach der Veröffentlichung nicht erneut ab und überschreiben Sie nicht den kumulativen Stable-Eintrag. 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 Herkunftsmetadaten tragen können. Diese verwenden dieselbe exakte Markierungsgrammatik und aktuelle Main-Validierung wie Commit-Body-Marker.Der Prüfer verwendet automatisch öffentliche GitHub GraphQL-Antworten von einem exakten Basis-/Ziel-SHA-Snapshot unter den Git-Metadaten des Arbeitsbaums. Iterative Neuschreibungen am 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 ein Live-Only- Audit. GitHub-Release-Bodies werden immer live gelesen. ExpliziteCI #,CI run #,Actions run #- undworkflow run #-Referenzen in aktivem Quellcode werden nur separat klassifiziert, wenn die Issue/PR-Auflösung fehlschlägt und eine Live-Suche im selben Repository-Actions die genaue Run-ID bestätigt. Jedes gewöhnliche Vorkommen dieser Nummer in aktivem Quellcode, Notizen oder dem Beitragsdatensatz bleibt eine strenge Issue/PR-Anforderung. Bestätigte Runs erscheinen alsworkflowRunsin der Prüfausgabe und im Manifest, niemals als PR-Zuordnungen oder Beitragenden-Credit. Nur GitHubNOT_FOUND-Referenzen, die auf kontextuellen Commit-Body-Text beschränkt sind, in Betreffs, Closing-Referenzen, Herkunft und Notizen/Datensätzen fehlen und unter der höchsten aufgelösten Nummer liegen, können weggelassen und als ManifestunavailableReferencesohne Credit gemeldet werden.- das Manifest ist die erforderliche Eingabe für die Neuschreibung, nicht eine nachträgliche Prüfung; es enthält jeden referenzierten PR, berechtigten Beitragenden-Credit, Inline-Issue-Kontext, jeden direkten Commit und eine redaktionelle Eignungs- Klassifikation für PRs und direkte Commits
- Schema Version 3 ist der erforderliche flüchtige Manifestvertrag. Generieren Sie ältere Manifeste neu; Version 2 ist keine unterstützte Downstream-Reader-Grenze
- für historische Backfills fügen Sie
--seed-ref <pre-backfill-ref>einmal hinzu, sodass Beitragsdatensätze aus dem vorherigen Changelog erhalten bleiben, auch wenn ein älterer gemergter Commit seine PR-Nummer weggelassen hat; der Prüfer schließt Datensätze für Arbeiten aus, die nach dem Basis-Tag rückgängig gemacht wurden, einschließlich Beta-Arbeiten, die vor dem Stable-Release rückgängig gemacht wurden - generierte Herkunft meldet PRs im Bereich separat von beibehaltenen Seed-Only-PRs und gibt dann die eindeutige Zeilenanzahl an. Ein in beiden Inventaren vorhandener PR zählt als im Bereich; beschreiben Sie niemals die Seed-inklusive Gesamtzahl als Arbeit, die im aktuellen Release-Bereich zusammengeführt wurde
- fügen Sie wiederholbare
--shipped-ref <prior-shipped-tag>hinzu, wenn der erreichbare Main Closeout vom verschifften Tag oder späteren Forward-Port-Commits abweicht, die bereits veröffentlichte PRs neu zuordnen. Jedes Tag ist eine kumulative verschiffte Grenze: Der Prüfer 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 Herkunft behalten jedes Tag plus das genaue ausgeschlossene PR-Inventar und die Anzahl für eine deterministische Kandidatenvalidierung - Quell-PR-Erkennung begrenzt GitHub-Commit-Zuordnungen auf die ausgewählte Ziel- Historie oder die eingefrorene Main-Historie für kanonische Träger. Eine kontextuelle Quellreferenz wird nur dann zu einem Beitrag, wenn ihr zusammengeführter Commit in der Zielhistorie erreichbar ist und seine Merge-Zeit innerhalb des Ziels liegt. Behalten Sie alle Referenzen auflösbar, fördern Sie jedoch keine nicht verwandten PRs, nur weil sie zusammenführen, während die Release-Vorbereitung fortgesetzt wird. Explizite Seeds behalten ihre historische Mitgliedschaft 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 Herkunftsverträge bleiben maßgeblich.
- explizite Multi-Commit-Rücknahmen erfordern einen Rücknahme-Betreff und eine eigenständige
Reverts <full SHA> and <full SHA>.-Deklaration (kommagetrennte Listen mit abschließendemandfunktionieren ebenfalls). Die exakte Endungto restore the previous behavior.wird akzeptiert. Doppelte, abgekürzte, eingebettete oder wiederholte Deklarationen stellen keine Umkehrung her. Jeder benannte Commit muss ein Single-Parent-Vorfahre sein, und die umgekehrte Anwendung aller benannten Patches muss den vollständigen Rücknahme- Baum reproduzieren. Erkannte Deklarationen, die diesen Beweis nicht bestehen, stoppen die Überprüfung. Der Beweis verwendet privaten Git-Index-/Objekt-Speicher ohne Hooks oder externe Diffs; kanonische Single-Revert- und Revert-of-Revert-Buchhaltung bleibt intakt. - kanonische Sie Backports zum ursprünglichen gemergten PR auf
main: explizite Cherry-Pick-Ursprünge gewinnen, dann erfordert ein eindeutiger normalisierter Betreff-Treffer denselben Autor und einen überlappenden geänderten Pfad. Unterdrücken Sie Release-/Backport- PRs immer dann, wenn der entsprechende Main-PR auf aktuellemorigin/mainexistiert. Behalten Sie einen Release-Branch-PR nur, wenn diese Änderung zuerst dort gelandet ist und noch nicht anmainforward-portiert wurde - Lesen Sie das Manifest vor dem Bearbeiten von
### Highlights,### Changesoder### Fixes; führen Sie keine alten gruppierten Prosa ohne erneute Prüfung weiter - Überprüfen Sie verlinkte PRs/Issues oder Diffs für mehrdeutige Commits. Direkte Commits sind redaktionelle Eingabe, keine öffentlichen Hauptbuchzeilen; leiten Sie materielle Benutzerergebnisse aus Betreff, Body, berührten Dateien, Tests und nahen Commits ab
-
Schreiben Sie nur einen ausgewählten Release-Abschnitt neu:
- Beta:
## YYYY.M.PATCH-beta.N, der nur Änderungen seit der erfassten npm-Beta-Baseline enthält - Stable:
## YYYY.M.PATCH, kumulativ seit der vorherigen Stable-Baseline - Hinterlassen Sie keinen veralteten Abschnitt
## Unreleasedüber dem Ziel-Release - Wenn
UnreleasedRelease-gebundene Notizen enthält, führen Sie diese in den Ziel- Abschnitt 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, einen materiellen Zuverlässigkeits-/Sicherheitsfix, 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 Installations-/Update-, Datensicherheits- oder weithin sichtbare Benutzerverbesserung
### Changes: Neue Fähigkeiten und Verhaltensänderungen### Fixes: Benutzerseitige Korrekturen zuerst, gruppiert nach Wirkung und Oberfläche- Gruppieren Sie verwandte Änderungen/Korrekturen nach Oberfläche und Benutzerwirkung; vermeiden Sie einen Aufzählungspunkt pro winzigem Commit, wenn mehrere Commits eine benutzerseitige Geschichte erzählen
### Complete contribution record: Generierter PR-erster Datensatz nach der gruppierten Prosa; es ist die erschöpfende Buchhaltungsoberfläche, nicht eine zweite Release-Zusammenfassung
-
Bewahren Sie bestätigte Attribution:
- PR-Autorenschaft stammt vom kanonischen GitHub-PR, niemals vom Release-Commit- Autor, Committer oder Backport-Operator. Lösen Sie Co-Autoren aus dem originalen Merge-Commit dieses PRs auf; Release-Carrier-Trailer und kontextuelle Erwähnungen begründen keinen Credit auf einem anderen PR
- Bauen Sie generierte Danksagungen aus PR, originalem Co-Autor und verlinktem Reporter- Beweis neu auf. Seeds behalten Mitgliedschaft und Referenzen, nicht unverifizierte alte Danksagungen. Neugenerierung ersetzt veralteten generierten Credit in Datensätzen und gruppierter Prosa; Überprüfung lehnt sowohl fehlenden als auch nicht unterstützten Credit ab