Regenerate OpenClaw release changelog sections from git history before beta, stable, or extended-stable releases.
复制下面这句话,粘贴给 Claude Code、Codex、Cursor 等 AI 编程工具,它会读取安装说明并在你确认后完成安装。
请阅读 https://ai.atlankj.com/install/asset/gh-openclaw-changelog-update-81ceb8921a10 ,按照其中的说明把「openclaw-changelog-update」安装到你(当前 AI 工具)中。执行前先告诉我将运行的命令和写入的位置,等我确认。
查看 AI 将读取的安装说明正在读取 GitHub 原文…
内容来自 GitHub 原始文件,由原作者维护。在 GitHub 查看
Use this for changelog rewrites and GitHub release-note source text. For regular
beta/stable, prepare complete notes before final-source qualification when
possible; Code SHA may then also be Release SHA. Editorial work may overlap
Code validation. If notes change afterward, a genuine CHANGELOG-only descendant
may use the existing product-evidence reuse policy. For
extended-stable, run it before final exact-head validation and tagging. Do not
rerun it for tooling retries, resumed publication, or promotion.
Use it with release-openclaw-maintainer; this skill owns changelog content,
ordering, grouping, and attribution discipline.
Rebuild the target CHANGELOG/YYYY.M.PATCH.md release section from a complete, generated
history manifest, not stale draft notes. Produce grouped user-facing release
notes sorted by user interest while preserving every relevant issue/PR ref and
every human Thanks @... attribution.
CHANGELOG.md is the generated release index. The shared owner
scripts/lib/release-changelog.mjs resolves release sections and contribution
records from a working tree or a pinned Git ref, including historical refs
that still contain a monolith. Use node scripts/release-changelog.mjs read --version <version> [--ref <sha-or-tag>] for a section, or add --record for
its contribution record. A missing split artifact must not fall back to the
root index. Historical releases without records gain no invented provenance.
Generated CHANGELOG/** files retain exact migrated or mirrored bytes and are
excluded from generic formatting, like the root changelog. Validate them through
their owner with pnpm changelog:check.
Current writes use the split layout. To save a complete initial section, use
node scripts/release-changelog.mjs write --version <version> --file <section.md>;
it updates the release entry, matching CHANGELOG/records/<version>.md when
present, and index together. Initial generation retains the section format
below. Published docs mirrors follow the separate post-release route at the end
of this skill; initial generation must never overwrite them.
YYYY.M.PATCH, without beta suffix.origin/main, fetched before verification. Release
notes cite the original merged main PR when the same work is carried by a
backport. A release-branch PR is used only while no forward-port exists on
current main.Confirm the release branch and exact history target:
git fetch --tags origingit status -sbgit rev-parse HEAD as the history targetAudit history, including direct 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>--since='24 hours ago' when main moved during the release.Generate the complete contribution record and editorial manifest before writing grouped prose:
node --import tsx .agents/skills/openclaw-changelog-update/scripts/verify-release-notes.mjs \
--base <base-tag> \
--target <target-ref> \
--main-ref origin/main \
--version <YYYY.M.PATCH> \
--manifest /tmp/openclaw-release-<YYYY.M.PATCH>.json \
--write-ledger
Add repeatable --release-provenance '<40sha> -> #PR[, #PR]' inputs when
release commits cannot carry provenance metadata. These use the same exact
marker grammar and current-main validation as commit-body markers.
The verifier automatically reuses public GitHub GraphQL responses from an
exact base/target SHA snapshot under the worktree's git metadata. Iterative
rewrites at the same target avoid repeated network discovery. Use
--refresh-github-snapshot after suspect API data, --github-snapshot <path> for an explicit artifact, or --no-github-snapshot for a live-only
audit. GitHub release bodies are always read live.
Explicit CI #, CI run #, Actions run #, and workflow run # references
in active source are classified separately only when issue/PR resolution
fails and a live same-repository Actions lookup confirms the exact run ID.
Any ordinary occurrence of that number in active source, notes, or the
contribution record remains a strict issue/PR requirement. Confirmed runs
appear as workflowRuns in verification output and the manifest, never as
PR associations or contributor credit.
node --import tsx .agents/skills/openclaw-changelog-update/scripts/verify-release-notes.mjs \
--base <base-tag> \
--target <target-ref> \
--main-ref origin/main \
--version <YYYY.M.PATCH> \
--manifest /tmp/openclaw-release-<YYYY.M.PATCH>.json \
--write-ledger
#NNN reference in release history or the
rendered release section cannot resolve, when reverted work is presented
as shipped, when a source PR is absent from the contribution record, when
direct commits are rendered as a public record dump, when non-editorial
PRs appear in grouped prose, or when an eligible PR author or known
co-author is missing from that PR's Thanks @... credit. It also fails
before history collection when --base is not an ancestor of --target,
when ### Highlights has fewer than five or more than eight top-level
bullets, or when the existing prose/record names a PR outside the source
range. Only an explicit --seed-ref may add historical PR inventory; an
explicit repeatable --shipped-ref may subtract PRs proven present in a
prior shipped tag#NNN references resolve against openclaw/openclaw;
cross-repository references such as openclaw/imsg#141 remain literal
text and must not be rewritten as local issue linksnode --import tsx .agents/skills/openclaw-changelog-update/scripts/verify-release-notes.mjs \
--base <base-tag> \
--target <target-ref> \
--version <YYYY.M.PATCH> \
--release-tag v<YYYY.M.PATCH> \
--check-github
--release-tag for every beta, stable, and extended-stable page in
the train; a ### Release verification tail is permitted, but any other
body drift fails the checkscripts/render-github-release-notes.mts is the canonical release-body
renderer used by candidate validation, publish, and verification. When the
complete ## YYYY.M.PATCH section fits GitHub's 125,000-character limit and
the renderer's matching 125,000-byte safety ceiling, the body must contain
that exact section including its heading### Complete contribution record, then emits that heading with a stable
link to the full contribution record in the tag-pinned
(historical monolithic tags retain their
original record link).
Never truncate a bullet or partial record, and never hand-author a different
compact formAfter explicit approval of the docs publication, publish the approved docs sources and their mechanically flattened changelog in the same source PR. This is separate from initial release generation; do not run an editorial rewrite automatically during release preparation or publication.
Render the ordered docs sources into one full Markdown file, even for a large release or a release spanning several docs pages:
pnpm changelog:from-docs --version YYYY.M.PATCH \
--source docs/releases/YYYY.M.PATCH.md \
--output CHANGELOG/YYYY.M.PATCH.md
pnpm changelog:check
Repeat --source in the approved reading order for a multipart release. The
converter removes presentation wrappers, turns accordion titles into headings,
expands docs links, and preserves source text, credits, code, tables, and images.
Unsupported markup fails instead of silently dropping content. Its first-line
marker binds the ordered source paths and exact source digest. Checks compare
only marked mirrors against their sources; untouched historical originals stay
in their initial format. Preserve CHANGELOG/records/YYYY.M.PATCH.md as the
frozen accounting record when replacing reader prose, and regenerate the mirror
in the same PR whenever its docs sources change.
The approved publication bundle owns source merge, verified docs deployment,
and the later GitHub Release body update as separate recorded steps. After
deployment, freshly read the existing release, then update only its body with
version/statistics, Raw changelog and docs links, one alphabetically deduplicated
verified human thanks roster, and the unchanged release-verification section.
Include verified PR, direct-commit, coauthor, and issue credit, including
@steipete; exclude bots. Keep both the 125,000-character and 125,000-byte
ceilings without truncating credits or proof. GitHub owns native avatars and
assets. Verify the body readback, resume only incomplete steps, and never retag,
rebuild, republish assets, or rerun initial publication to replace this body.
The initial history verifier rejects docs mirrors; use the docs-publication
workflow for their verification.
Extended-stable has one release commit and one canonical GitHub Release body.
After version prep and approved backports, regenerate CHANGELOG/YYYY.M.P.md
with the regular manifest and original-main-PR provenance rules. Land it by PR, then
validate the final branch tip before tagging. The release closeout renders that
tag-owned section into the shared draft before the parent pipeline publishes
the non-Latest release page. Re-audit after a product
backport; a tooling-only repair needs no changelog entry. Never rewrite a
published tag or changelog.
If GitHub API quota is exhausted, do not idle. Continue work that does not need GitHub API:
npm view checksOnly GitHub Release creation, workflow dispatch, run polling, artifact download, and issue/PR mutation need API quota.
--seed-ref <pre-backfill-ref> once so
contribution records from the prior changelog are retained even when an
older merged commit omitted its PR number; the verifier excludes records
for work reverted after the base tag, including beta work reverted before
the stable release--shipped-ref <prior-shipped-tag> when the reachable main
closeout differs from the shipped tag or later forward-port commits
re-associate PRs that were already released. Each tag is a cumulative
shipped boundary: the verifier unions explicit PR rows from complete
contribution records in numbered release sections, excludes only overlapping PRs,
and ignores Unreleased. Never infer this boundary from the base SHA,
target prose, or target record. The manifest and generated provenance retain
each tag plus the exact excluded PR inventory and count for deterministic
candidate validationReverts <full SHA> and <full SHA>. declaration (comma-separated lists
with final and also work). The exact ending to restore the previous behavior.
is accepted. Duplicate, abbreviated, embedded, or repeated declarations do
not establish reversal. Each named commit must be a single-parent ancestor,
and reverse-applying all named patches must reproduce the complete revert
tree. Recognized declarations that fail this proof stop verification. Proof
uses private Git index/object storage without hooks or external diffs;
canonical single-revert and revert-of-revert accounting stays intact.main: explicit
cherry-pick origins win, then a unique normalized-subject match requires
the same author and an overlapping changed path. Suppress release/backport
PRs whenever the corresponding main PR exists on current origin/main.
Keep a release-branch PR only when that change landed there first and has
not yet been forward-ported to main### Highlights, ### Changes, or
### Fixes; do not carry old grouped prose forward without re-auditing itRewrite one stable-base section only:
## YYYY.M.PATCH## Unreleased section above the target releaseUnreleased contains release-bound notes, fold them into the target
section instead of deleting themSection shape:
### Highlights: 5-8 bullets, broad user wins first
### Changes: new capabilities and behavior changes### Fixes: user-facing fixes first, grouped by impact and surface### Complete contribution record: generated PR-first record after the
grouped prose; it is the exhaustive accounting surface, not a second
release summaryPreserve attribution:
#issue, (#PR), Fixes #..., and Thanks @...Thanks @author, even when the PR had no linked issueFixes #... or referenced bug issue
represented by a user-facing entry needs Thanks @reporter unless the
same handle is already thanked in that bulletCo-authored-by contributor on represented user-facing work
needs Thanks @handle when a GitHub handle is knownThanks @... handles in one bullet are expected; do not drop or
collapse contributor credit just because the note is grouped#NNN references. Do not add a separate
linked-issues inventory. The generated PR record keeps source issues
inline as Related #NNN on the PR that shipped them**PR #NNN**. Discovery
preserves canonical/cherry-pick provenance and requires frozen-history
membership for contextual references; inline context alone cannot create a
contribution row. It preserves author/co-author credit and any issue
references in the original title#### Direct commits dump. Add
direct-commit credit to a grouped bullet only when it shares an explicit
closing issue reference or at least two distinctive subject termsdocs, test, refactor, ci, build,
chore, and style PRs in Highlights, Changes, or Fixes. An explicit
Conventional Commits ! marker makes any type editorial-eligible; include
its verified user-facing breaking change and migration guidance with the
original PR ref and credit. Keep other internal contributions only in the
complete PR recorddoc or build in their descriptions. For
untyped titles, retain internal-work signals such as QA, test, docs,
refactor, lint, or CI; eligibility never replaces the source audit
that establishes a user-visible outcome@claude, @codex, @openclaw, @clawsweeper, or @steipete.
The separately approved post-docs GitHub body uses its complete verified
human roster, including @steipete when creditedSorting preference:
Keep bullets single-line unless existing file style forces otherwise. Avoid internal release-process noise unless it changes user install/update safety.
Check release-note side conditions:
src/plugins/compat/registry.tssrc/commands/doctor/shared/deprecation-compat.tsremoveAfter, remove it when
proven safe or move it to removal-pending and record the blocker; keep a
due removal-pending record only until its documented conditions are metValidate and ship:
CHANGELOG/records/YYYY.M.PATCH.mdCHANGELOG.md### Release verification only when it fits after the canonical full
or compact body is chosen. If it does not fit, omit the body tail and retain
the immutable attached release evidence; never compact a fitting full
contribution record just to preserve the optional tailpnpm release:candidate performs this deterministic render check from the
exact target before it dispatches Full Release Validation, including when local
generated checks are explicitly skippedgit diff --checkpnpm changelog:check validates the split index, records, and marked docs mirrorsgit commit -m "docs(changelog): refresh YYYY.M.PATCH notes"maingit diff --name-only <code-sha>..<release-sha> to include
CHANGELOG/YYYY.M.PATCH.md and only that entry, its matching record, and
CHANGELOG.md before optionally using split-changelog-release-v1. Additions
or modifications of the selected entry/record are allowed; renames, deletions,
other releases, and docs source changes are not. Historical root-only receipts
retain changelog-only-release-v1. The split path
retains green Code proof and qualifies new Release SHA package bytes. Any
other changed path requires fresh product qualification