prepare-release-changelog
Skill812 starsChanged 44 days agoMITView on GitHub
Audit and prepare Elephc's numbered release changelog from the last published GitHub release through an exact candidate main SHA. Use only for explicit release preparation, version tags, release Pull Requests, or pre-release verification. Refresh live release/main state, reconcile every merged PR and direct first-parent commit, inspect actual shipped behavior, draft concise user-facing bullets with complete source traceability, and update the named release section only after user approval.
In this repository6 other files it gives its agents.
- AGENTS.mdAGENTS.md
- CLAUDE.mdCLAUDE.md
- analyze-using-rustroverSkill
- doc-updateSkill
- update-builtin-docsSkill
- verify-releaseSkill
The file
Show its rules and text
We split this skill into the rules it gives an agent
15 rules. About 0 are common, 11 are distinctive, and 4 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈11
Distinctive · estimate
This author's own choices. Worth a look.
4
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 12
Read CONTRIBUTING.md, AGENTS.md, and the top and link-list portions of CHANGELOG.md.
- Very specific: line 19
Do not edit CHANGELOG.md during this discovery phase.
- Distinctive: line 23
Run the bundled inventory script from the repository root:
- Distinctive: line 39
every first-parent integration is a verified merged PR or a verified direct commit.
- Distinctive: line 40
every PR targets main, is merged, and has a merge commit reachable from the candidate.
- Distinctive: line 43
Never silently classify a commit as direct when GitHub association lookup failed.
- Very specific: line 55
Every ledger row must end as include, covered, omit, reverted, or needs decision.
- Distinctive: line 64
do not claim broader PHP parity, target support, issue closure, or security coverage than the code and tests prove.
- Distinctive: line 90
If any row needs a decision, ask for it before modifying the file.
- Very specific: line 96
Create or update ## [<version>] - YYYY-MM-DD immediately below the empty ## [Unreleased] section.
- Distinctive: line 97
Add or update the numbered release compare link using the latest published release as its base.
- Distinctive: line 98
Keep approved features/improvements before fixes and preserve intentional existing bullets.
- Distinctive: line 100
Run git diff --check, inspect the bounded changelog diff, and rerun the ledger against the same candidate SHA if the source range changed …
- Distinctive: line 103
Do not tag, commit, push, publish, or change Cargo package versions unless separately requested.
- Distinctive: line 105
Do not declare the changelog complete from a green diff alone: complete source reconciliation is the gate.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Prepare Release Changelog
Build a complete, evidence-backed release ledger before writing release notes. Treat missing or unresolved commits as release blockers; do not infer coverage from PR titles or the existing changelog alone.
1. Establish the exact release range
- Read
CONTRIBUTING.md,AGENTS.md, and the top and link-list portions ofCHANGELOG.md. - Require the exact target version before editing. Do not use
[Unreleased]as a substitute when the version is unknown. - Record the checkout, branch,
HEAD, worktree status, remotes, and divergence fromorigin/main. Preserve unrelated or pre-existing changes. - Refresh live state with
git fetch --prune origin main --tagsand identify the latest published, non-draft, non-prerelease GitHub release withgh release list/gh release view. Do not substitute the numerically highest local tag without checking GitHub. If preparing a prerelease line, require the user to name its base release explicitly. - Resolve the release tag and candidate head to full SHAs. Default the candidate to refreshed
origin/main; if the user names a SHA/ref, use that exact head. Report local commits ahead oforigin/mainseparately and do not include them without explicit direction. - Require the release tag to be an ancestor of the candidate head. Stop if the tag, candidate, repository identity, or GitHub release cannot be verified.
Do not edit CHANGELOG.md during this discovery phase.
2. Build and validate the coverage ledger
Run the bundled inventory script from the repository root:
python3 .claude/skills/prepare-release-changelog/scripts/release_inventory.py \
--from-tag <published-tag> \
--head <candidate-sha> \
--repo illegalstudio/elephc \
--format jsonThe script walks the first-parent history, recognizes GitHub merge and squash commits, queries associated PRs for ambiguous commits, expands every merge's introduced commits, and reconciles the result against the complete Git commit range.
Require all of these before drafting:
unaccounted_commitsis empty;errorsis empty;- every first-parent integration is a verified merged PR or a verified direct commit;
- every PR targets
main, is merged, and has a merge commit reachable from the candidate; - the reported base and candidate SHAs match the refs selected above.
Never silently classify a commit as direct when GitHub association lookup failed. Investigate unresolved or ambiguous rows and rerun the inventory until coverage is complete.
3. Inspect what actually shipped
For every PR and direct commit in the ledger:
- Inspect its metadata, changed paths, diff, tests, documentation, linked issues, and relevant source. Titles and bodies are orientation, not semantic proof.
- Describe the shipped user-visible behavior, compatibility change, performance effect, security impact, or developer-facing interface change.
- Mark internal chores, repository statistics, generated data, tests-only changes, and refactors with no observable effect as
omit, with a concise reason. - Detect follow-ups, partial fixes, reverts, and several PRs implementing one coherent outcome. Consolidate only when the combined wording remains accurate; retain every source PR/commit in the ledger.
- Compare every candidate semantically with the target version section, if it already exists. Mark existing coverage, duplicates, stale bullets, and claims not supported by the audited range.
[Unreleased]should remain empty and is not the source of release coverage.
Every ledger row must end as include, covered, omit, reverted, or needs decision. No source may disappear merely because it does not deserve its own bullet.
4. Draft the changelog
Draft one concise bullet per notable outcome, not per commit. Follow the existing Elephc voice:
- lead with
Added,Changed,Fixed,Removed, orSecuritywhere natural; - say what users can now do or what failure is corrected;
- mention implementation detail only when it explains a constraint or material compatibility effect;
- do not claim broader PHP parity, target support, issue closure, or security coverage than the code and tests prove;
- group features and improvements before fixes, and order each group by user impact;
- preserve accurate existing wording unless consolidation or correction is explicitly approved.
Present a draft before editing, using this structure:
## Release changelog audit
Range: <tag-sha>..<candidate-sha>
Coverage: <N> PRs, <M> direct commits, <K> total commits; 0 unresolved
### Proposed features and improvements
- ...
### Proposed fixes
- ...
### Coverage ledger
| Source | Shipped behavior | Existing coverage | Decision | Proposed bullet |
|---|---|---|---|---|
### Open decisions
- ...If any row needs a decision, ask for it before modifying the file.
5. Apply only the approved draft
After user approval:
- Create or update
## [<version>] - YYYY-MM-DDimmediately below the empty## [Unreleased]section. Write approved bullets directly into that numbered section and leave[Unreleased]empty. - Add or update the numbered release compare link using the latest published release as its base.
- Keep approved features/improvements before fixes and preserve intentional existing bullets.
- Recount the before/after bullets and verify that every removal or consolidation was approved.
- Run
git diff --check, inspect the bounded changelog diff, and rerun the ledger against the same candidate SHA if the source range changed while drafting. - Report the exact release tag, candidate SHA, PR/direct-commit counts, omitted sources, remaining decisions, and whether the changelog is ready for
verify-release.
Do not tag, commit, push, publish, or change Cargo package versions unless separately requested.
Do not declare the changelog complete from a green diff alone: complete source reconciliation is the gate.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

