Skip to content
Back to skills

Changelog Assembly

ASecurity

This skill should be used when the user mentions "changelog", "release notes", "keep a changelog", "conventional commits", "commit message", "what changed", or "release summary". Provides a standardized methodology to turn raw, possibly non-conventional git history into human-readable changelogs and release notes.

  • 3 stars
  • 0 votes
  • 0 copies
  • 2 views
  • Added September 19, 2026
ai-agentsgogitsecurity

Security analysis

A100/100

Pro scans all 3 files and shows the line behind each finding

Scanned September 19, 2026

npx -y skills add sigistry/marketplace --skill changelog-assembly --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Changelog Assembly?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Changelog Assembly
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/sigistry-changelog-assembly/badge)](https://www.skillsdirectory.com/skills/sigistry-changelog-assembly)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: changelog-assembly
description: This skill should be used when the user mentions "changelog", "release notes", "keep a changelog", "conventional commits", "commit message", "what changed", or "release summary". Provides a standardized methodology to turn raw, possibly non-conventional git history into human-readable changelogs and release notes.
---

# Changelog Assembly

## Purpose

Provide a consistent, repeatable methodology for converting raw git history, whether or not it follows Conventional Commits, into release notes and changelog entries that a human reader actually benefits from. Covers classification, grouping, de-duplication, audience-appropriate phrasing, linking, and the Unreleased section. Tech-agnostic.

## The assembly pipeline

1. **Collect** the commit range (`<last-tag>..HEAD`, or an explicit range). Exclude merge commits from the entry list; mine them only for PR numbers.
2. **Classify** each commit into a Keep a Changelog category. If the message is conventional, map the type; if not, infer from the diff.
3. **De-duplicate & fold**: collapse "fix typo", "wip", and follow-up commits into the logical change they belong to.
4. **Rephrase** each surviving item into user-facing language: describe the observable effect, not the code mechanics.
5. **Order** by category (Added, Changed, Deprecated, Removed, Fixed, Security) and by impact within each.
6. **Elevate** breaking changes into a prominent callout at the top.
7. **Link** PR/issue references and add compare links.

## Category mapping

| Conventional type | Keep a Changelog category | Notes |
|-------------------|---------------------------|-------|
| `feat` | Added | New capability |
| `fix` | Fixed | Bug fix |
| `perf` | Changed | Behavior/characteristics changed |
| `refactor` | usually omitted | Internal; include only if user-observable |
| `docs`/`test`/`ci`/`build`/`chore` | usually omitted | Internal unless user-facing |
| any `!` / `BREAKING CHANGE:` | Changed/Removed + top callout | Always surfaced |
| dependency CVE bump | Security | Even if labeled `chore`/`build` |

## Inferring type from non-conventional history

When the message is uninformative, read the diff:

| Diff signal | Category |
|-------------|----------|
| New files / new public exports / new endpoints / new flags | Added |
| Deleted exports / endpoints / flags / files | Removed |
| `@deprecated` markers, deprecation notices | Deprecated |
| Changed defaults, signatures, output shape | Changed |
| Bug-fix pattern (guard added, off-by-one, null check) | Fixed |
| Auth hardening, input sanitization, dependency vuln bump | Security |

## Phrasing rules (write for humans)

- Lead with the user-visible effect: "Dark mode now persists across sessions", not "refactor theme store."
- Present tense, imperative-adjacent: "Add", "Fix", "Remove".
- One line per change; move detail to a nested bullet only when a migration step is needed.
- Name the affected surface (command, endpoint, option) so readers can tell if it affects them.
- Never expose internal churn (rename of a private helper, lint fixes) in user-facing notes.

## The Unreleased section

Keep an `## [Unreleased]` section at the top of `CHANGELOG.md`, populated as changes merge. At release time, rename it to the version with a date and open a fresh empty Unreleased. This keeps notes accurate instead of reconstructed under deadline.

## Additional Resources

### Reference Files
- **`references/conventional-commits.md`**: the full Conventional Commits 1.0.0 taxonomy: every type, scope, the `!` breaking marker, the `BREAKING CHANGE:` footer, good vs bad message examples, and how each type maps to a semver bump.
- **`references/keep-a-changelog.md`**: the Keep a Changelog format: the six categories, Unreleased section, dated version headers, compare links, and good vs bad entry examples.

Files in this skill

  • SKILL.md3.8 KB
  • references/conventional-commits.md4.1 KB
  • references/keep-a-changelog.md3.7 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.