How to Humanize a Developer Changelog After ChatGPT

How to Humanize a Developer Changelog After ChatGPT

ChatGPT changelogs blur breaking changes with features and invent migration steps. Lock semver tags, breaking bullets, and migration commands first. Humanize intro prose once–not version numbers or API diffs.

4 min read
developer changelogrelease notessemvertechnical writingai humanizer

Developer changelogs are read at upgrade time with one question: what breaks if I bump this version today?

ChatGPT changelogs answer with feature marketing: every line sounds like a launch post. Breaking changes hide in the middle. Migration steps reference flags that do not exist.

Human Writes is the voice pass after semver, breaking bullets, and migration commands are locked. It does not invent a major bump you did not ship.

Related: product marketing copy (user-facing angle), humanize API docs, pull request descriptions, humanize README.

What integrators punish

ElementWeak AI changelogStrong developer changelog
BreakingBuried under "improvements"Top section; semver major if needed
Migration"Update your configuration"Exact command, env var, or code diff
FeaturesVague "enhanced performance"PR-linked behavior change
DeprecationsMissingDate removed + replacement
VersionsWrong tagMatches git tag and package registry

Teams pin versions when changelogs lie. Trust beats tone.

Breaking vs feature vs fix

Use a consistent taxonomy before any model:

TypeSemver signalChangelog sectionExample
BreakingMAJOR### Breaking firstRemoved v1/users endpoint
FeatureMINOR### AddedOptional locale query param
FixPATCH### FixedRace on webhook retry
DeprecatedMINOR + notice### Deprecatedlegacy_auth removed in v3

If it breaks a documented integration without a major bump, you are shipping surprise, not semver.

Lock the diff before ChatGPT

Export from git or your release bot:

git log v2.3.0..v2.4.0 --oneline
# Paste breaking PR bodies and migration notes from reviewers

Build a release fact table:

FieldYour answer (from repo only)
Versione.g. 2.4.0
BreakingBullet list with PR links
MigrationCommands or config diffs that worked in CI
AddedNew APIs, flags, defaults
FixedUser-visible bugs worth noting
DeprecatedWhat and when it goes away

Prompt: "Format this table as a Keep a Changelog-style entry. Do not add endpoints, env vars, or version numbers not in the table."

Changelog vs release notes

Developer changelogUser-facing release notes
Semver, breaking, migrationBenefits in plain language
Links to PRs and docsScreenshots optional
Audience: integrators and SREsAudience: end users
Accuracy over marketingShorter; fewer internals

Ship both from the same fact table. Humanize user-facing release copy separately–see product marketing copy.

SectionHumanize?Why
Version tags and datesNoMust match registry
Breaking bulletsLight passWording only; facts sacred
Migration commandsNoCopy-paste must work
Intro paragraphOne passAI loves "excited to announce"
PR links and authorsNoAttribution

Before and after

AI changelog intro:

We are thrilled to announce version 2.4.0 with exciting improvements that enhance developer experience and platform stability. This release includes numerous bug fixes and performance optimizations.

After fact table + one humanize pass:

2.4.0 is a minor release with one breaking change: POST /v1/humanize now requires Content-Type: application/json. Migrate by adding the header–see snippet below. New: optional dialect param (default us). Fixed: timeout on payloads over 50k tokens.

Second version states semver impact, breaking first, and action.

Workflow

  1. Tag only after CI green on the release branch.
  2. List breaking PRs from review labels–not from memory.
  3. Run migration steps in a scratch project; paste working commands.
  4. Draft changelog from the fact table.
  5. One Human Writes pass on intro and non-breaking descriptions.
  6. Link to updated API doc anchors for each breaking item.
  7. Publish changelog and release notes from the same source commit.

For PR-level discipline upstream, see humanize pull request description.

What not to do

  • Hide breaking changes under "Internal" or "Misc."
  • Humanize until endpoint paths or env var names change.
  • Ship migration steps you did not run.
  • Duplicate the git log verbatim with no grouping.
  • Let marketing tone overwrite semver honesty.

Bottom line

Developer changelogs win on breaking-first clarity: correct version, migration that runs, and features separated from fixes. Human Writes is the voice pass after the diff is true.

Paste stiff intro paragraphs on Human Writes when every version tag matches the release you would ship to npm.