common-changelog
npx skills add https://github.com/octivi/skills --skill common-changelog
Agent 安装分布
Skill 文档
Common Changelog
Write human-facing changelog entries in Common Changelog format.
When to use
Use this skill when asked to generate, update, or normalize CHANGELOG.md from commits, PRs, or
release notes.
When not to use
- Do not use for commit message wording; route to
git-commits. - Do not use for branch/rebase/PR process guidance; route to
git-trunk-based-workflow.
Goal
Help readers answer: what changed and how it affects them.
Output contract
Choose exactly one output mode:
- Full-file mode:
- Use when the user asks to create, replace, or normalize an entire
CHANGELOG.md. - Output MUST be a complete markdown file that starts with
# Changelog.
- Use when the user asks to create, replace, or normalize an entire
- Release-fragment mode:
- Use when the user asks for a single release entry (for example
1.4.0orUnreleased). - Output MUST contain exactly one release heading and its non-empty groups, unless
FMT-9applies and the release should be skipped due to no user-facing changes.
- Use when the user asks for a single release entry (for example
If user intent is ambiguous, default to release-fragment mode.
When metadata is incomplete, keep producing output and append:
Warnings:
- <warning 1>
- <warning 2>
Only include Warnings: when at least one warning exists.
Warnings are out-of-band metadata and MUST appear after the primary changelog artifact.
Normative language
MUST: mandatory requirement; fail output if violatedSHOULD: recommended default; may be overridden only by explicit user instructionMAY: optional behavior
Canonical rules table
Use this table as the single source of truth for output structure and bullet formatting.
| ID | Scope | Requirement |
|---|---|---|
FMT-1 |
Output scope | In full-file mode, output MUST be a valid CHANGELOG.md and first heading MUST be # Changelog; in release-fragment mode, output MUST contain exactly one release block. Optional trailing Warnings: metadata MAY appear after the artifact when needed. |
FMT-2 |
Release ordering | If present, Unreleased MUST be the first release heading and MUST NOT be included in semantic version ordering. |
FMT-3 |
Release ordering | Released versions (excluding Unreleased) MUST be sorted latest-first by semantic version. |
FMT-4 |
Release headings | Released version headings MUST include ISO date YYYY-MM-DD; linked format ## [1.2.3] - YYYY-MM-DD is SHOULD, plain ## 1.2.3 - YYYY-MM-DD is MAY. Unreleased SHOULD be undated (## [Unreleased] or ## Unreleased) unless the user explicitly asks for a dated form. |
FMT-5 |
Link refs | If any release heading is linked (## [<label>] - YYYY-MM-DD), trailing link references MUST be present at file end and define each linked label exactly once. |
FMT-6 |
Unreleased link |
If Unreleased is a linked heading, its reference MUST use a compare URL ending with ...HEAD. |
FMT-7 |
Release links | Linked released versions SHOULD point to release tags (matching repository tag conventions). |
FMT-8 |
Sections | Release groups MUST use only, and in this order: Changed, Added, Removed, Fixed; empty groups MUST NOT be emitted. |
FMT-9 |
No user-facing changes | If a release has no user-facing changes, default is skip (including release-fragment mode). If explicitly requested, MAY add a one-line maintenance notice under the release heading. |
BUL-1 |
Writing style | Use imperative style (Add, Fix, Remove, Bump), keep bullets concise, and describe user impact (not internal trivia). |
BUL-2 |
Breaking changes | Breaking changes MUST be prefixed with **Breaking:**. |
BUL-3 |
Bullet group order | Every bullet MUST follow this order: optional references group, required commit-links group, required final authors group. Commit-links group MUST contain at least one commit link when available; otherwise use source unavailable and emit a warning. |
BUL-4 |
Group formatting | References, commit links, and authors MUST each appear in one parentheses group; multi-item groups MUST use comma-separated lists. |
BUL-5 |
Template source | Bullet shape and full file layout MUST follow references/CHANGELOG.md. |
BUL-6 |
Missing metadata | If author metadata is missing, authors group MUST be (Unknown author) and a warning MUST be emitted. |
Input model
<type>[optional scope]: <description>
[optional body]
[optional footer(s)]
Recognize trailers and reference keywords:
Category:Ref:Re:Co-authored-by:BREAKING CHANGE:
Also recognize GitHub issue-linking keywords:
close,closes,closedfix,fixes,fixedresolve,resolves,resolved
For Ref, Re, and the keywords above:
- matching is case-insensitive
:is optional (for exampleRef ABC-123andRef: ABC-123are both valid)- treat GitHub keywords as reference signals only when an issue target is present (for example
Fixes #123)
Classification algorithm
Apply in this order:
Category:trailer override- Conventional Commit type mapping
- Semantic fallback
1) Category override (highest priority)
If Category: maps to a group, use it:
change,changed->Changedadd,added->Addedremove,removed->Removedfix,fixed->Fixed
Rules:
- case-insensitive matching
- if multiple
Category:trailers exist, use the last recognized one - ignore unknown values and continue
2) Conventional Commits mapping
feat->Addedfix->Fixedperf->Changedonly if user-facing; otherwise skiprefactor->Changedonly if user-facing; otherwise skiprevert->ChangedorFixedbased on actual user effectdocs,style,test,chore,ci,build-> skip unless user-facing
Type compatibility notes
- This skill classifies commit history, so it accepts both the strict type set used by
git-commitsand broader Conventional Commit variants observed in existing repositories. - Accepted history-only variants include:
perf,style,test,ci,build. - This does NOT change the output type policy of
git-commits; it only affects changelog classification of existing commits.
3) Semantic fallback
If type is missing or unclear:
- Existing behavior changed ->
Changed - New capability ->
Added - Capability removed ->
Removed - Bug corrected ->
Fixed
Conflict examples
fix(api): ...+Category: add->Addedfeat!:+Category: remove->Removed+**Breaking:**docs:+Category: fixed->Fixed
Classification decision tree
- If there is a recognized
Category:value, map it and stop. - Else, if Conventional Commit type is recognized, apply the type mapping.
- Else, classify by semantic user impact (
Changed/Added/Removed/Fixed). - If breaking signal exists (
!orBREAKING CHANGE:), prefix with**Breaking:**.
Breaking change handling
- If header has
!or body/footer containsBREAKING CHANGE:, prefix with**Breaking:** - Keep the entry in
Changed/Added/Removed/Fixedby impact (no extra section)
User-facing quick test
Usually include:
- API contract or output changed
- CLI flags/defaults changed
- Config shape/defaults changed
- Runtime/performance behavior users notice
- Dependency bump that fixes production bug/security issue
Usually skip:
- Internal refactor without behavior change
- CI/test/style-only updates
- Dev tooling and internal docs only
- Dependency bump for dev/test-only tooling
References and authors
- Commit hash SHOULD be a markdown link when available:
[`d23ba8f`](https://github.com/OWNER/REPO/commit/d23ba8f)
- Group formatting for references, commit links, and authors MUST follow
BUL-3andBUL-4 - Build references from:
- explicit PR/issue links
RefandRetrailers- GitHub keywords (
close*,fix*,resolve*) with issue targets
- Normalize before deduplication:
- treat
#123andhttps://github.com/OWNER/REPO/issues/123as the same issue reference - normalize case for keyword-style references (for example
jira-123->JIRA-123)
- treat
- Reference order is deterministic:
- first: one high-signal repository reference (prefer PR, otherwise issue)
- then: remaining unique references in first-seen order
- Commit-link order is deterministic:
- deduplicate by commit hash
- keep first-seen order
- Use commit author as primary author
- Append
Co-authored-by:names (extract name before<email>) - Authors MUST be deduplicated in stable first-seen order
- For aggregated bullets, authors MUST be the deduplicated union of commit authors and
Co-authored-by:names from all included commits, preserving stable first-seen order - If commit author is a bot and merger is known, prefer the human merger name
Metadata fallback policy
- If author cannot be determined from metadata, use
(Unknown author)and emit a warning. - If no commit link can be determined, use
(source unavailable)as the commit-links group and emit a warning. - Missing metadata MUST NOT be a sole reason to drop user-facing bullets.
Fail policy
- If any structural
MUSTrule is violated and cannot be recovered with fallback policy, fail. - Missing author/commit metadata alone MUST NOT trigger hard fail.
- If changelog scope is unclear, default to release-fragment mode instead of failing.
Authoring workflow
- Collect input: commits, PRs, issues, release notes.
- Parse commit headers, body, and trailers.
- Classify each change using rules above.
- Remove non-user-facing noise and no-op pairs (change + immediate revert).
- Rewrite into concise user-facing bullets.
- Group by
Changed,Added,Removed,Fixedin that order. - Validate against
Canonical rules tableandreferences/CHANGELOG.md.
Anti-patterns
- Raw technical commit text with no user context
- Non-standard sections (
Security,Docs,Chore, etc.) - Internal-only noise in public changelog
- Missing
**Breaking:**marker for incompatible changes
Quality checklist
- Validate all applicable
FMT-*andBUL-*requirements fromCanonical rules table. - Verify output shape against
references/CHANGELOG.md. - Ensure warning messages exist for every metadata fallback.
- Any checklist failure MUST trigger
Fail policy.
Prompt templates
Generate a Common Changelog entry for version <VERSION> from these commits and PRs. Keep only user-facing changes, include references, and mark breaking changes.Normalize this existing changelog fragment to Common Changelog format without losing important user-impact details.Classify these Conventional Commits into Changed/Added/Removed/Fixed and explain any skipped items.
References
references/CHANGELOG.md(local formatting template)- https://common-changelog.org/
- https://github.com/vweevers/common-changelog
- https://www.conventionalcommits.org/
- https://git-scm.com/docs/git-interpret-trailers
- https://docs.github.com/en/issues/tracking-your-work-with-issues/using-issues/linking-a-pull-request-to-an-issue#linking-a-pull-request-to-an-issue-using-a-keyword