{
  "schema": "leumas.docs.page/1",
  "id": "adapter:domain/changelog",
  "slug": "adapters/domain/changelog",
  "kind": "capabilities",
  "bucket": "package",
  "title": "changelog",
  "name": "changelog",
  "eyebrow": null,
  "chip": null,
  "summary": "Changelog & release-automation pack built on the Conventional Commits spec. Parses commit messages into type/scope/subject/body/breaking-change, groups them into a Keep-a-Changelog-style changelog...",
  "keywords": [
    "changelog",
    "keep-a-changelog-style",
    "contributors",
    "trailers",
    "conventionalparse",
    "changelog api",
    "semverbump",
    "releasenotes"
  ],
  "audience": "both",
  "funnel": {
    "product": null,
    "cta": null
  },
  "body": "# changelog\n\n**Release automation over [Conventional Commits](https://www.conventionalcommits.org).** Feed it a\nlist of commit messages and it parses each one, groups them into a Keep-a-Changelog-style changelog,\ncomputes the next SemVer version, and drafts human release notes — deterministically, no git binary\nrequired (you supply the messages, e.g. from `git log --pretty=%B%n%H`).\n\nIt is an *intelligent microservice*: every tool has a pure heuristic/template core that runs offline;\n`releaseNotes` can optionally polish its prose via a model and silently falls back to the template.\nResults are tagged `{ mode: 'heuristic' | 'llm' }` where a model can contribute.\n\n## Tools\n\n| Tool | Input | Output |\n|---|---|---|\n| `conventionalParse` | `{ commit }` | `{ type, scope, subject, body, breaking, section, conventional, trailers }` |\n| `categorize` | `{ commit }` or `{ commits }` | section for one commit, or a breakdown across many |\n| `semverBump` | `{ current, commits }` | `{ level, effectiveLevel, next, hasBreaking, hasFeat }` |\n| `generate` | `{ commits, current?, version?, date?, repoUrl?, options? }` | grouped changelog (structured + markdown) |\n| `releaseNotes` | `{ commits, current?, options? }` | summary + highlights + full markdown |\n| `contributors` | `{ commits }` | commit-count leaderboard (authors + `Co-authored-by`) |\n\n## Bump rules\n\n- Any **breaking change** (`!` in the header or a `BREAKING CHANGE:` footer) → **major**.\n- Any `feat` → **minor**. Otherwise (`fix`/`perf`/`refactor`/…) → **patch**.\n- `options.preMajor` (default `true`): below `1.0.0` a breaking change bumps **minor** instead of major\n  (feat still → minor, fix still → patch), matching `semantic-release` (SemVer §4).\n\n## Usage\n\n```js\nimport changelog from './index.js';\n\nchangelog.adapters.semverBump({\n  current: '1.4.2',\n  commits: ['feat(api): add search', 'fix: null guard', 'refactor!: drop legacy flag'],\n});\n// -> { level:'major', next:'2.0.0', hasBreaking:true, hasFeat:true }\n\nchangelog.adapters.generate({\n  current: '1.0.0',\n  commits: ['feat(ui): dark mode', 'fix(auth): expiry bug', 'chore: bump deps'],\n});\n// -> { version:'1.1.0', sections:[{title:'Features',...},{title:'Bug Fixes',...}], markdown:'## 1.1.0 ...' }\n```\n\n## DRY boundary\n\nPure release/versioning tooling over commit **text**. It does not run git, diff files, or measure code\n(see **`code-metrics`**). No overlap with any existing pack. Self-contained (Node built-ins +\n`../_shared/llm.js` only).\n",
  "source": {
    "path": "shared/engines/adapters/domain/changelog/README.md",
    "blobSha": "",
    "commit": "",
    "committedAt": "",
    "provenance": "no-git",
    "bytes": 2724,
    "hash": "caaeca3f1eca695dd4e9903fb093133d6c1c1200"
  },
  "urls": {
    "html": "/p/adapters/domain/changelog",
    "json": "/docs/adapters/domain/changelog.json",
    "md": "/docs/adapters/domain/changelog.md"
  },
  "links": {
    "composes": [],
    "usedBy": [],
    "product": [],
    "howTo": [],
    "skills": []
  }
}
