xiaohongshu
xiaohongshu
changelog-rfc-29
RFC-29 compliant changelog management with Common Changelog format and Unreleased section extension. Validates changelog on commits, generates from git history, and ensures all merged PRs are documented. Use when setting up changelog workflows or retrofitting existing repositories.
Full skill instructions
Enforce and validate changelogs following the Common Changelog specification with an Unreleased section extension for in-progress work.
📚 references/ - Detailed documentation
🔧 scripts/ - Automation scripts
📦 assets/ - Templates and resources
Copy the template and customize:
cp global/skills/changelog-rfc-29/assets/changelog-template.md CHANGELOG.md
pnpm run skills:changelog
# or
node .scripts/skills-cli.ts changelog validate
pnpm run skills:changelog:coverage
# or
node .scripts/skills-cli.ts changelog coverage
pnpm run skills:changelog:retrofit
# or
node .scripts/skills-cli.ts changelog retrofit
# Changelog
> Optional description or note about the changelog format.
## [Unreleased]
### Added
- Add new feature ([#123](https://github.com/org/repo/pull/123))
## [2.0.0] - 2026-01-19
_Optional notice about this release._
### Changed
- **Breaking:** Major refactor ([#100](https://github.com/org/repo/pull/100))
### Added
- Add feature X ([#95](https://github.com/org/repo/pull/95))
### Fixed
- Fix bug Y ([#90](https://github.com/org/repo/pull/90))
[Unreleased]: https://github.com/org/repo/compare/v2.0.0...HEAD
[2.0.0]: https://github.com/org/repo/releases/tag/v2.0.0
Categories MUST appear in this order (only include those with changes):
Each change must:
**Breaking:** prefix for breaking changes- Add user authentication ([#45](https://github.com/org/repo/pull/45))
- **Breaking:** Remove deprecated API ([#50](https://github.com/org/repo/pull/50))
- Fix memory leak in worker pool ([`abc1234`](https://github.com/org/repo/commit/abc1234))
| Rule | Description |
|---|---|
| File exists | CHANGELOG.md must exist |
| Header | Must start with # Changelog |
| Version format | Semver without 'v' prefix (e.g., 2.0.0) |
| Date format | ISO 8601 (YYYY-MM-DD) |
| Category names | Only: Changed, Added, Removed, Fixed |
| Category order | Changed > Added > Removed > Fixed |
| References | Each change must have at least one |
When committing, the changelog check:
Ensures every merged PR is documented:
Parse CHANGELOG.md into structured data:
import { parseChangelog, extractReferences, parseVersion } from './scripts/parse.ts';
const content = fs.readFileSync('CHANGELOG.md', 'utf-8');
const parsed = parseChangelog(content);
// parsed = {
// title: 'Changelog',
// releases: [
// { version: 'Unreleased', date: null, groups: [...] },
// { version: '2.0.0', date: '2026-01-19', notice: '...', groups: [...] }
// ]
// }
Validate changelog format:
import { validateChangelog } from './scripts/validate.ts';
const result = await validateChangelog('/path/to/repo');
// result = { passed: true/false, errors: [], warnings: [] }
Pre-commit hook integration:
import { checkChangelogUpdated } from './scripts/check-updated.ts';
const result = await checkChangelogUpdated('/path/to/repo');
// result = { passed: true/false, message: '...', errors: [] }
Generate changelog from git history:
import { retrofitChangelog } from './scripts/retrofit.ts';
const result = await retrofitChangelog({
rootDir: '/path/to/repo',
version: '2.0.0',
date: '2026-01-19',
repoUrl: 'https://github.com/org/repo'
});
// result = { markdown: '...', prCount: 106, categorized: {...} }
Validate PR coverage:
import { validateCoverage } from './scripts/coverage.ts';
const result = await validateCoverage('/path/to/repo');
// result = { passed: true/false, missingPRs: [], extraPRs: [] }
Convert existing changelogs to Common Changelog format:
node global/skills/changelog-rfc-29/scripts/migrate.ts --input CHANGELOG.md --dry-run
node global/skills/changelog-rfc-29/scripts/migrate.ts --input CHANGELOG.md --output CHANGELOG.new.md
Import GitHub releases as changelog entries:
node global/skills/changelog-rfc-29/scripts/import-releases.ts --repo bitsoex/my-repo --dry-run
node global/skills/changelog-rfc-29/scripts/import-releases.ts --repo bitsoex/my-repo --output CHANGELOG.md
For repositories with existing changelogs or release history, see the Migration Guide.
| Current State | Approach |
|---|---|
| Keep a Changelog format | Use migrate.js to convert |
| GitHub releases | Use import-releases.js to import |
| Git tags only | Use retrofit.js to generate |
| No versioning | Copy template, start fresh |
# Preview changes
node global/skills/changelog-rfc-29/scripts/migrate.ts --input CHANGELOG.md --dry-run
# Convert in place
node global/skills/changelog-rfc-29/scripts/migrate.ts --input CHANGELOG.md
# Preview import
node global/skills/changelog-rfc-29/scripts/import-releases.ts --repo bitsoex/my-repo --dry-run
# Generate changelog from releases
node global/skills/changelog-rfc-29/scripts/import-releases.ts --repo bitsoex/my-repo --output CHANGELOG.md
Add to .scripts/lib/validation.ts:
{
name: 'Changelog updated',
command: null,
customCheck: 'checkChangelogUpdated',
scope: 'pre-commit',
blocking: true,
required: true
}
Add to .scripts/lib/validation.ts:
{
name: 'Changelog format',
command: ['node', '.scripts/skills-cli.ts', 'changelog', 'validate'],
scope: 'pre-push',
blocking: true,
required: true
}
Add to .github/workflows/ci.yaml:
- name: Validate Changelog Format
if: github.event_name == 'pull_request'
run: pnpm run skills:changelog
- name: Validate PR Coverage
if: github.event_name == 'pull_request'
run: pnpm run skills:changelog:coverage
{
"scripts": {
"skills:changelog": "node .scripts/skills-cli.ts changelog validate",
"skills:changelog:check": "node .scripts/skills-cli.ts changelog check-updated",
"skills:changelog:coverage": "node .scripts/skills-cli.ts changelog coverage",
"skills:changelog:retrofit": "node .scripts/skills-cli.ts changelog retrofit"
}
}
Files matching these patterns do NOT require changelog updates.
See assets/exclusion-patterns.json for the full list.
.github/ - CI/CD workflows.gitignore, .nvmrc - config filespnpm-lock.yaml - lock filestests/ - test files only.tmp/, coverage/, output/ - build outputs.claude/skills/ - distributed contentvitest.config.js, eslint.config.js - tooling config.coderabbit.yaml, .doclinterrc.yml - linter config| Skill | Purpose |
|---|---|
| quality-checks | Orchestrates quality checks including changelog |
| git-hooks | Hook infrastructure for pre-commit/pre-push |
| pr-workflow | PR creation and management |
Your commit includes significant files but CHANGELOG.md is not staged.
Fix: Add an entry to the [Unreleased] section:
## [Unreleased]
### Added
- Describe your change ([#YOUR_PR](https://github.com/org/repo/pull/YOUR_PR))
Categories must appear in order: Changed > Added > Removed > Fixed.
Fix: Reorder your categories to match the expected order.
Every change must reference a PR or commit.
Fix: Add a reference in parentheses:
- Your change description ([#123](https://github.com/org/repo/pull/123))
Version must be valid semver without 'v' prefix.
Good: ## [2.0.0] - 2026-01-19
Bad: ## [v2.0.0] - 2026-01-19
xiaohongshu
technical spec
product ux expert
database patterns
Conduct multi-agent task orchestration and workflow coordination.
Initialize project with Conductor artifacts (product definition,
Expert in web animations, transitions, and motion design using Framer Motion and CSS
Creates Mermaid and ASCII diagrams for flowcharts, architecture, ERDs, state machines, mindmaps, and more. Use when user mentions diagram, flowchart, mermaid, ASCII diagram, text diagram, terminal diagram, visualize, C4, mindmap, architecture diagram, sequence diagram, ERD, or needs visual docume...
PostgreSQL bindings for H3 hexagonal grid system. Use when working with H3 cells in Postgres, including spatial indexing, geometry/geography integration, and raster analysis.
Context-Driven Development skill for projects using Conductor. Use this skill when you detect a `conductor/` directory in the project, when working on tasks defined in a `plan.md` file, or when the user asks about tracks, specs, or plans. Automatically applies TDD workflow, tracks task completion...
Display project status, active tracks, and next actions
Official Stakpak application containerization standard operating procedure, a step-by-step guidline to properly dockerize applications. This is a rule book curated by the Stakpak Team.
Generate, edit, and beat-sync AI video with leading models in one workspace.
The world's fastest calendar for remote work
Transform Your Design with AI Designer by ImgCreator.ai
Revolutionizing Video Production with AI-Powered Creativity
Extend an image past the frame and let AI fill the new aspect ratio.
Discover your celebrity doppelgänger with StarByFace!
ChainClarity explains 700+ crypto whitepapers in plain English, with layered summaries, comparisons, research tools, alerts, and a $4.99 Pro plan.
Opus.ai: Revolutionize Your Web Experience