Changelog refresh
Skill tony/ai-workflow-plugins/.agents/skills/changelog-refresh
Claude Code Plugins, Commands, and Skills
npx -y skills add tony/ai-workflow-plugins --skill changelog-refreshAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 2 stars2 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Update the branch's own changelog entries to match its current net change; commits only with --commit
SKILL.md
6.1 KB, as published. Nobody here has run it
Refresh Changelog Entries
Bring the changelog entries this branch introduced back in sync
with what the branch currently does. With --commit, the correction
lands as a new commit stacked on top; otherwise the edit is left
uncommitted for the user to commit, like /changelog. History is
never rewritten — for that, use the changelog-recut skill.
Hard scope rule: this command only ever edits changelog content the branch itself added. Entries that came from the base branch — earlier releases, or unreleased entries from other work — are read-only. If a correction would require touching a line the branch didn't add, stop and ask.
Additional context from user: $ARGUMENTS
Phase 1: Establish scope
-
Detect the base. If the branch has a PR (
gh pr view --json baseRefName), the base is itsbaseRefName— stack-aware. Otherwise detect trunk viagit symbolic-ref refs/remotes/origin/HEAD(fall back tomaster). If currently on the base/trunk itself, report and stop. -
Find the changelog file the same way
/changelogdoes (scan forCHANGES,CHANGES.md,CHANGELOG.md,HISTORY.md,NEWS.md, …). No changelog changes on this branch and no changelog file → suggest/changeloginstead and stop. -
Extract the branch's changelog footprint:
git diff origin/<base>...HEAD -- <changelog-file>The added lines are the branch-owned entries — the only region this command may edit. Also list the branch commits touching the file:
git log origin/<base>..HEAD --oneline -- <changelog-file>If the branch has no changelog commits yet, say so and offer to generate entries via the
/changelogprocedure instead.
Phase 2: Recompute what the entries should say
Read the sibling command file
the changelog skill and apply its rules
verbatim — the Core Constraint (a branch is not a release), Phase 1
convention detection, Phase 2 commit categorization, and Phase 3 entry
generation and voice. Generate, from the branch's current net
change (git log / git diff against origin/<base>), the entries
the branch should have.
Phase 3: Diff documented vs. actual
Compare the branch-owned entries (Phase 1) against the recomputed entries (Phase 2):
- Accurate — leave byte-for-byte untouched, including phrasing you'd have written differently. Refresh fixes drift, not style.
- Stale — the entry describes something the branch no longer does, or misstates scope. Rewrite it in place, matching the file's style.
- Missing — a user-visible change with no entry. Insert it in the correct section of the unreleased block, following the sibling command's section-order and homogeneity rules.
- Orphaned — an entry whose change was removed from the branch entirely. Remove the entry.
- Out of reach — the fix would touch content the branch didn't add
(e.g., the branch's entry was merged into a pre-existing bullet, or
a section heading shared with base-branch entries must change). Ask
via
ask-user-choicebefore touching anything outside the branch's footprint; if declined, leave it and note the limitation.
Phase 4: Present, edit, commit
Mandatory gate — never edit or commit without explicit approval.
- Present a summary line
(
Branch: <name> | Base: <base> | Changelog commits: <shas>), then the proposed edit as old → new markdown for each touched entry, and the statement that everything else in the file is untouched. Include theTarget: unreleased sectionline from the sibling command's Phase 4 — refresh never touches version headings or version files. - On approval, apply with the Edit tool, confined to the branch's footprint plus approved insertions in the unreleased block.
- Show the modified region for verification, then verify the scope
guard mechanically:
git diff -- <changelog-file>combined with the branch footprint must show no modifications to base-branch lines. - Commit only with
--commit. When$ARGUMENTScontains--commit, commit the edit as a new commit on top of the branch, following the commit message rules in the sibling command's Commit message conventions for CHANGES edits — project convention first, fallbackdocs(CHANGES) <what the update covers>, never a version, never a#Nin the message. Stage the changelog file explicitly by path — nevergit add -A. Without--commit(the default), leave the edit uncommitted and show a ready-to-use commit message built from the same rules — committing is the user's decision, as with/changelog.
Rules
- Branch-scoped, always: never modify changelog content the branch didn't introduce; when a fix requires it, ask first.
- Never rewrites: no rebase, no amend, no force-push. With
--commitit stacks a single new commit; otherwise it commits nothing. Rewriting the branch's changelog history is thechangelog-recutskill. - A branch is not a release: all Core Constraint rules from
/changelogapply — no version headings, no version predictions, no version-file edits. - Whole-branch perspective: entries document the net result against the base, not the branch's internal history.
- Ask on ambiguity; the cost of a question is smaller than a changelog that lies.
Portability notes
ask-user-choice— present the listed options and wait for the user to pick one. Hosts with a structured multiple-choice tool (Claude Code'sAskUserQuestion) should use it; otherwise print a numbered list and wait for a numbered reply. Never proceed on an assumed answer.$ARGUMENTS— the text the user passed when invoking this skill. If your host does not substitute it, read it as the user's request in the current turn, and ask when there is none.