Skip to main content
DoneThat

AI Adoption GuideSoftwareRelease

Automated Changelog Generator

LLM synthesizes PR titles, commit messages, and tickets into audience-segmented release notes.

Software processDiscoverDesignBuildTestReleaseAdoptSupportRetire

By Don, DoneThat’s AI coach · updated

What this use case solves

Release managers spend a large share of cutover time turning raw engineering artifacts into notes people can actually read. Pull request titles, commit subjects, and ticket summaries rarely share the same vocabulary, and none of them are written for customers, support, or compliance reviewers. The result is a last-minute scramble: open dozens of tabs, rewrite the same change three ways, and still miss a breaking API tweak buried in a squash commit.

An automated changelog generator uses a language model to synthesize those sources into a first draft of release notes, split by audience. The model does not publish. It produces a reviewable draft so the release manager can edit, approve, and ship notes with less copy-paste work and fewer omissions.

The outcome this page targets is speed: shorter time from freeze to published notes, without dropping the human gate that protects tone, accuracy, and legal wording.

Required inputs and empty-output behavior

The generator only runs when it has usable source material. Treat the following as required inputs for a release train or version tag:

  • Linked pull requests for the release (titles, descriptions, and labels when available)
  • Commit messages in the release range (subjects at minimum; bodies when present)
  • Tickets or work items referenced by those PRs or commits (summary, type, and status)

If any of those three input classes is missing, incomplete for the release scope, or cannot be resolved to the version under review, the system returns empty output and does not invent filler notes. An empty response is preferable to a confident draft built on partial history. Partial inputs create the worst failure mode: notes that look complete while omitting customer-facing changes that never appeared in the fetched set.

Operational practice: fail closed. Surface a clear “insufficient inputs” signal to the release manager, list what was missing (for example, no tickets resolved for the tag, or commit range empty), and stop. Do not fall back to a generic “bug fixes and performance improvements” paragraph.

Optional enrichments (labels such as breaking-change, security, or docs; CODEOWNERS; or linked design docs) improve segmentation when present, but they do not replace the three required sources.

How the draft is produced

When inputs are present, the pipeline typically:

  1. Collects PRs, commits, and tickets for the release identifier (tag, train, or cut branch).
  2. Deduplicates the same change across PR title, squash commit, and ticket summary.
  3. Classifies each change (feature, fix, breaking, security, deprecation, internal-only).
  4. Rewrites engineering language into audience-appropriate copy.
  5. Emits segmented sections (and optionally a short “known issues” stub if tickets mark open follow-ups).

Classification should prefer explicit signals: labels, conventional-commit prefixes, ticket types, and breaking-change markers. When signals conflict (for example, a “feat” commit that only refactors internals), the draft should flag ambiguity for human review rather than silently promoting the change to customer notes.

The model’s job is synthesis and wording, not inventing product claims. Every drafted bullet should remain traceable to at least one source artifact. Keep source IDs (PR numbers, commit SHAs, ticket keys) in the draft metadata or as footnotes so the release manager can verify before publish.

Audience-segmented notes

One undifferentiated changelog forces every reader through noise. Segment the draft so each audience gets the right depth:

Customers and end users. Outcomes and behavior changes in plain language. Prefer “You can now export reports as CSV” over “Added ExportService.” Omit internal refactors unless they change user-visible behavior.

Developers and API consumers. Endpoint changes, schema diffs, SDK bumps, deprecation timelines, and migration steps. Keep identifiers exact. Call out breaking changes first.

Support and success. Symptom-oriented bullets, workarounds, and which tickets or incidents this release closes. Help agents map “customer said X” to “fixed in Y.”

Security and compliance (when applicable). Patch IDs, affected components, and whether action is required. Do not invent severity ratings the model cannot substantiate from inputs.

Tone should stay consistent within a segment and conservative across all of them. Avoid marketing adjectives. If a change is uncertain, draft a question for the release manager (“Confirm: is this customer-visible?”) instead of guessing.

Feature-flagged work deserves special care: notes should say what ships when the flag is on, and whether the default is off, so support does not claim a capability that is still gated.

Human review before publish

The language model drafts; the release manager still owns publication. Treat the draft as a pull request against the public notes, not as the final artifact.

A practical review checklist:

  • Every bullet maps to a real PR, commit, or ticket in the release.
  • Breaking and security items are correct, ordered first where needed, and legally safe.
  • Customer wording matches what product and support will say.
  • Internal-only changes stay out of external notes.
  • Empty or sparse sections are intentional, not a sign of missing inputs that should have blocked the run.
  • Links to docs, migration guides, and status pages resolve.

Edits belong in the notes store of record (docs site, CHANGELOG.md, status page, or CMS). Once published, keep the draft and source snapshot for audit so you can answer “why did we say this?” without replaying tribal knowledge.

Do not auto-post to production channels from the model output. Automation can open a draft PR, create a review task, or prefill a CMS entry; a human click still ships.

Where this fits in the release flow

Changelog generation sits after scope is frozen and before (or in parallel with) final go/no-go. Pair it with readiness gates so notes are not drafted against a moving commit range. After deploy, anomaly detection and incident workflows may force a hotfix; regenerate notes for the hotfix train with the same empty-output rules rather than hand-patching stale copy under pressure.

Related practices on this path:

Used this way, the generator cuts the mechanical rewrite work that dominates changelog day, while the release manager keeps authority over what the company says shipped.

Is this worth automating for you?

Whether this pays back depends on how much time it takes your team today. Most teams estimate that from memory, and the estimate is usually wrong in one direction or the other.

DoneThat reconstructs where the time actually went, with no timers to forget, so you can measure the baseline before committing to a project and check the gain afterward.

Measure the baseline first