{"manifest":{"name":"Changelog Generator","version":"1.0.0","description":"Transform raw git commit history into a polished CHANGELOG entry in Keep a Changelog format. Categorizes, rewrites, and suggests the correct semver bump.","tags":["git","release","documentation","workflow","changelog"],"standard":"agentskills.io","standard_version":"1.0","content_checksum":"bab7d9dbe126c9b8d82049921ac08592573ceec26c87bdbad975602b1f737e05","bundle_checksum":null,"metadata":{},"files":[]},"files":{"SKILL.md":"# Changelog Generator\n\n> **Purpose:** Transform raw git commit history into a human-readable, user-facing CHANGELOG entry in Keep a Changelog format. Categorizes commits, rewrites them in plain language, and recommends the correct semver version bump.\n\n---\n\n## Invocation\n\n```\n/changelog [since-tag]\n```\n\nInternally runs:\n```bash\ngit log $(git describe --tags --abbrev=0)..HEAD --format=\"%H %s\" --no-merges\n```\n\nIf `since-tag` is provided, uses that as the baseline instead of auto-detecting the last tag.\n\n---\n\n## Process\n\n### Step 1: Collect Commits\n\n```bash\ngit log [since-tag]..HEAD --format=\"%H|||%s|||%b\" --no-merges\n```\n\nIf no commits found: output \"No changes since last release.\"\n\n---\n\n### Step 2: Categorize by Conventional Commit Prefix\n\n| Prefix | Changelog Section |\n|--------|-------------------|\n| `feat:` / `feature:` | ### Added |\n| `fix:` / `bugfix:` | ### Fixed |\n| `perf:` | ### Changed |\n| `refactor:` | ### Changed |\n| `docs:` | ### Changed |\n| `remove:` / `deprecate:` | ### Removed |\n| `security:` | ### Security |\n| `BREAKING CHANGE` in body | ### Breaking Changes |\n| `chore:` / `test:` / `ci:` | **omit** (internal, not user-facing) |\n\nNon-conventional commits: use judgment based on commit message content.\n\n---\n\n### Step 3: Rewrite for Humans\n\nTransform commit messages into user-facing language:\n- `fix(auth): resolve JWT expiry edge case` → \"Fixed a login session expiry bug that logged users out unexpectedly\"\n- `feat(dashboard): add export button` → \"Added CSV export to the analytics dashboard\"\n- Group related commits into a single entry if they're part of the same feature\n\n---\n\n### Step 4: Recommend Version Bump\n\n| Condition | Bump |\n|-----------|------|\n| Only `fix:` commits | Patch (1.0.X) |\n| Any `feat:` commit | Minor (1.X.0) |\n| Any `BREAKING CHANGE` | Major (X.0.0) |\n\n---\n\n## Output Format\n\n```markdown\n## [VERSION] — YYYY-MM-DD\n\n### Breaking Changes\n> ⚠️ Migration required: [what users need to change]\n- [Breaking change with migration guide]\n\n### Added\n- [New feature in plain language] (#PR or commit hash)\n\n### Fixed\n- [Bug fixed and user impact explained]\n\n### Changed\n- [Improvement with context]\n\n### Removed\n- [What was removed and what to use instead]\n\n### Security\n- [Vulnerability addressed — always list, never omit]\n```\n\n---\n\n## Rules\n\n- Security section must always be listed if any security commit exists — never bury it\n- Breaking changes section comes first, always\n- Omit `chore:`, `test:`, `ci:` commits — they are not user-facing\n- Every entry should explain user impact, not just code change\n- If a breaking change has no migration guide: write \"Migration guide: [TODO]\" — don't omit the section\n- Suggest the version number explicitly in the output header\n\n## Playground\n\n<!DOCTYPE html><html><head><meta charset='utf-8'><style>*{box-sizing:border-box;margin:0;padding:0}body{background:#0d1117;color:#e6edf3;font-family:monospace;font-size:12px;height:100vh;display:flex;flex-direction:column;overflow:hidden}.header{background:#161b22;border-bottom:1px solid #30363d;padding:8px 14px;font-size:11px;color:#8b949e;display:flex;justify-content:space-between;align-items:center;flex-shrink:0}.title{color:#58a6ff;font-weight:bold;font-size:13px}.panels{display:flex;flex:1;overflow:hidden}.panel{flex:1;overflow:auto;padding:12px;border-right:1px solid #30363d}.panel:last-child{border-right:none}.label{font-size:10px;color:#8b949e;text-transform:uppercase;letter-spacing:.08em;margin-bottom:6px}pre{white-space:pre-wrap;word-break:break-word;line-height:1.5}</style></head><body><div class='header'><span class='title'>Changelog Generator</span><span>Example · SkillSlap</span></div><div class='panels'><div class='panel'><div class='label'>Input: Commit log</div><pre><span style='color:#8b949e'>feat(search): add fuzzy matching</span>\n<span style='color:#8b949e'>fix(auth): handle expired tokens</span>\n<span style='color:#8b949e'>fix(ui): button overflow on mobile</span>\n<span style='color:#8b949e'>chore: upgrade Next.js 15→16</span>\n<span style='color:#8b949e'>perf(db): add index on skills.author_id</span></pre></div><div class='panel'><div class='label'>Output: CHANGELOG entry</div><pre><span style='color:#58a6ff'>## [1.4.0] — 2026-03-11</span>\n\n<span style='color:#58a6ff'>### Added</span>\n<span style='color:#8b949e'>- Fuzzy search matching for skill</span>\n<span style='color:#8b949e'>  names and descriptions</span>\n\n<span style='color:#58a6ff'>### Fixed</span>\n<span style='color:#8b949e'>- Auth: expired token now returns 401</span>\n<span style='color:#8b949e'>  instead of crashing middleware</span>\n<span style='color:#8b949e'>- UI: action button no longer overflows</span>\n<span style='color:#8b949e'>  on narrow mobile screens</span>\n\n<span style='color:#58a6ff'>### Performance</span>\n<span style='color:#8b949e'>- Added index on skills.author_id;</span>\n<span style='color:#8b949e'>  author profile pages 4x faster</span>\n\n<span style='color:#58a6ff'>### Dependencies</span>\n<span style='color:#8b949e'>- Next.js 15 → 16</span></pre></div></div></body></html>"}}