agentleFS
illegalstudioillegalstudio/elephc/.claude/skills/prepare-release-changelog/SKILL.md

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.

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
  1. Very specific:

    Read CONTRIBUTING.md, AGENTS.md, and the top and link-list portions of CHANGELOG.md.

    line 12
  2. Very specific:

    Do not edit CHANGELOG.md during this discovery phase.

    line 19
  3. Distinctive:

    Run the bundled inventory script from the repository root:

    line 23
  4. Distinctive:

    every first-parent integration is a verified merged PR or a verified direct commit.

    line 39
  5. Distinctive:

    every PR targets main, is merged, and has a merge commit reachable from the candidate.

    line 40
  6. Distinctive:

    Never silently classify a commit as direct when GitHub association lookup failed.

    line 43
  7. Very specific:

    Every ledger row must end as include, covered, omit, reverted, or needs decision.

    line 55
  8. Distinctive:

    do not claim broader PHP parity, target support, issue closure, or security coverage than the code and tests prove.

    line 64
  9. Distinctive:

    If any row needs a decision, ask for it before modifying the file.

    line 90
  10. Very specific:

    Create or update ## [<version>] - YYYY-MM-DD immediately below the empty ## [Unreleased] section.

    line 96
  11. Distinctive:

    Add or update the numbered release compare link using the latest published release as its base.

    line 97
  12. Distinctive:

    Keep approved features/improvements before fixes and preserve intentional existing bullets.

    line 98
  13. Distinctive:

    Run git diff --check, inspect the bounded changelog diff, and rerun the ledger against the same candidate SHA if the source range changed …

    line 100
  14. Distinctive:

    Do not tag, commit, push, publish, or change Cargo package versions unless separately requested.

    line 103
  15. Distinctive:

    Do not declare the changelog complete from a green diff alone: complete source reconciliation is the gate.

    line 105

≈ “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.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

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

  1. Read CONTRIBUTING.md, AGENTS.md, and the top and link-list portions of CHANGELOG.md.
  2. Require the exact target version before editing. Do not use [Unreleased] as a substitute when the version is unknown.
  3. Record the checkout, branch, HEAD, worktree status, remotes, and divergence from origin/main. Preserve unrelated or pre-existing changes.
  4. Refresh live state with git fetch --prune origin main --tags and identify the latest published, non-draft, non-prerelease GitHub release with gh 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.
  5. 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 of origin/main separately and do not include them without explicit direction.
  6. 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 json

The 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_commits is empty;
  • errors is 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:

  1. Inspect its metadata, changed paths, diff, tests, documentation, linked issues, and relevant source. Titles and bodies are orientation, not semantic proof.
  2. Describe the shipped user-visible behavior, compatibility change, performance effect, security impact, or developer-facing interface change.
  3. Mark internal chores, repository statistics, generated data, tests-only changes, and refactors with no observable effect as omit, with a concise reason.
  4. 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.
  5. 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, or Security where 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:

  1. Create or update ## [<version>] - YYYY-MM-DD immediately below the empty ## [Unreleased] section. Write approved bullets directly into that numbered section and leave [Unreleased] empty.
  2. Add or update the numbered release compare link using the latest published release as its base.
  3. Keep approved features/improvements before fixes and preserve intentional existing bullets.
  4. Recount the before/after bullets and verify that every removal or consolidation was approved.
  5. 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.
  6. 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.

Download now (ZIP)

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
What did you use it for? e.g. Reviewing pull requests in a Rails app

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.