santosomar/general-secure-coding-agent-skills/change-log-generator

Trust tier 3
  • community
Source check pending

Checking that the SKILL.md file is still in the repository.

Generates a structured CHANGELOG.md from VCS history and PR/issue references, categorized by change type. Use when cutting a release, when the user asks to update CHANGELOG.md, or when backfilling a changelog from git history.

Install

npx vskill@latest install santosomar/general-secure-coding-agent-skills/change-log-generator

SKILL.md

Change Log Generator

A changelog is for developers who use your project. It answers one question: what do I need to know before I upgrade?

Audience split — this skill vs. release notes

This skill (CHANGELOG.md)→ release-notes-writer
Developers, maintainersEnd users, stakeholders
Terse, categorized, completeNarrative, highlights only
Every user-visible changeThe 3 things anyone actually cares about
Lives in the repoGoes in the release announcement

Step 1 — Delimit the range

git log <prev-tag>..HEAD --oneline --no-merges

If there's no previous tag, the range is "since the last ## [x.y.z] heading in CHANGELOG.md" — grep it out.

Step 2 — Classify each commit

Bucket every commit. One bucket per commit — if a commit is both a feature and a fix, it should have been two commits, but pick the more user-impacting bucket.

BucketCommit message signalsWhat qualifies
BreakingBREAKING CHANGE:, ! after type, removed APIAnything that breaks existing user code — always first, always loud
Addedfeat:, add, new, implementNew capabilities the user can now use
Changedrefactor: (if user-visible), behavior changesExisting features that work differently now
Fixedfix:, bug, patch, Fixes #NThings that were broken and now aren't
Securitysecurity:, CVE refs, vulnSeparate section — people grep for this
Removedremove, drop, delete (of user-facing things)Deprecation follow-throughs
_(drop)_chore:, ci:, docs:, test:, style:Internal. Changelog readers don't care.

Step 3 — Rewrite each entry

The commit message is input, not output. Transform:

Commit saysChangelog says
fix: handle null in getUserEmailgetUserEmail() no longer throws when user has no email
feat: add retry paramClient() now accepts retries=N to retry failed calls
remove v1 endpointsBreaking: /api/v1/* endpoints removed; use /api/v2/*

Rules for rewriting:

  • Past tense or present — be consistent with the existing changelog.
  • User-facing names, not internal names. the billing module not BillingServiceImpl.
  • State the effect, not the mechanism. "No longer throws" not "added null check."
  • Link the PR/issue: (#123) at the end.

Worked example

Input commits:

a1b2c3d feat(client): add timeout parameter
b2c3d4e fix: race in connection pool cleanup (fixes #891)
c3d4e5f chore: bump pytest to 8.0
d4e5f6a feat!: drop Python 3.8 support
e5f6a7b docs: fix typo in README

Output:

markdown
## [2.4.0] — 2026-03-09
### Breaking
-Dropped Python 3.8 support; minimum is now 3.9 (#94)
### Added
-`Client()` now accepts a `timeout` parameter (seconds, default 30) (#92)
### Fixed
-Connection pool no longer leaks connections under concurrent close (#891)

Two commits dropped (chore:, docs:). Three kept, rewritten, linked.

Edge cases

  • No conventional commits — messages are freeform: Read the diffs. A commit touching docs/ is probably docs:. A commit that adds a test and changes one line is probably fix:. Classify by content.
  • Merge commits with 50 sub-commits: If merges are the unit (squash workflow), one entry per merge. If not, skip merge commits and use the underlying commits.
  • A revert of something from the same range: Both the original and the revert should be dropped — net zero change.
  • Backfilling a changelog that was never kept: Work tag-by-tag, oldest first. The git log between v1.0 and v1.1 is the ## [1.1.0] section.

Do not

  • Do not include internal changes (CI, tests, refactors with no user-visible effect). The changelog is not a git log.
  • Do not use commit messages verbatim. fix: thing is not an entry.
  • Do not combine Breaking with anything else in a section. It gets its own heading even if there's one item.
  • Do not generate an ## [Unreleased] section and call it done. Either pin a version or be explicit that it's unreleased.
  • Do not reorder existing changelog entries. Append only.

Output format

markdown
## [<version>] — <YYYY-MM-DD>
### Breaking
-<entry> (#<pr>)
### Added
-...
### Changed
-...
### Fixed
-...
### Security
-...

Omit empty sections. Breaking first, always.

Security

  • Security scanPassed, 90 of 100Pattern checks on the skill's files.
  • Model reviewPassed

Quality evaluation

  • Task evaluationNot runNo evaluation yet. Run one in Skill Studio.

Source

Popularity

7-day trend score
0

Not refreshed yet.

Works with

Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.

  • Claude Code
  • Cursor
  • GitHub Copilot
  • Windsurf
  • Codex
  • Gemini CLI
  • Cline
  • Amp
  • Roo Code
  • Goose
  • Continue
  • Kilo Code
  • Junie
  • Trae
  • OpenHands
  • Qwen Code
  • AI Agent
  • Tabnine Chat
  • Sourcegraph Cody
  • Amazon Q
  • Firebase Genkit
  • Sweep
  • Devin
  • Phind
  • Mentat
  • Claude Desktop
  • Aider
  • GPT Pilot
  • Plandex
  • bolt.new
  • v0
  • Replit Agent
  • Anse
  • TypingMind
  • BetterChatGPT
  • LibreChat
  • Warp AI
  • Pieces
  • Fig AI
Embed badge
vskill VERIFIED badge
[![vskill VERIFIED](https://verified-skill.com/api/v1/skills/santosomar/general-secure-coding-agent-skills/change-log-generator/badge)](https://verified-skill.com/skills/santosomar/general-secure-coding-agent-skills/change-log-generator)

Something wrong with this skill or its page? Tell us.