Release changelog entry
A changelog is a curated, chronologically ordered record of the notable changes in each version of a project. The word "curated" is doing the heavy lifting. A changelog is written for a human who wants to know what changed and whether they should care, which makes it a deliberate editorial act: someone decides what every commit means to a reader. The discipline is in choosing what counts as notable and saying it in language the reader actually understands.
Software always tracked changes somewhere, in commit messages, ticket systems, and ad-hoc releaseReleaseProduct SpecificationA shipped version of the productView reference → announcements, but the formats were inconsistent and frequently unreadable. The most influential attempt to standardise the human-facing version was Keep a Changelog, created by Olivier Lacan and developed openly on GitHub from around 2014. It made a simple, opinionated case: stop generating changelogs by dumping git log, because commit messages are written for machines and other developers mid-taskTaskProduct SpecificationA unit of work within a story or epicView reference →, not for the person trying to decide whether to upgrade.
The convention's lasting contribution is its small set of change categories: Added, Changed, Deprecated, Removed, Fixed, and Security. That vocabulary turns a flat list into something scannable, and it pairs naturally with Semantic Versioning, since the categories map onto the major, minor, and patch decisionsDecisionStrategyA recorded decision with context, rationale, and consequencesView reference → a maintainer has to make anyway. A "Removed" entry signals a breaking change; a "Fixed" entry signals a patch. The format also insists on an "Unreleased" section at the top, so changes accrue in human form as they land, which spares anyone reconstructing them in a panic at release time.
The live debate is less about format and more about audience, because three documents are easy to confuse. A changelog targets developers and technical users and stays terse and complete. Release notes target end users and customers, written in friendlier prose with screenshots and emphasis on benefits. A commit log is the raw, exhaustive machine record from which both are distilled. The same release can warrant all three, each written for a different reader; the failure mode is publishing one and pretending it serves all of them. Tooling has pushed toward generating changelogs from structured commits (Conventional Commits and similar), which keeps them current but reintroduces the original riskRiskComplianceA risk to the product or businessView reference →: a machine-generated changelog drifts back toward a commit dump unless someone still does the curation.
A team ships an open-source SDK on a two-week cadence. Every merged pull request adds a one-line entry under the "Unreleased" heading, filed under Added, Changed, Fixed, or Security. On release day the maintainer renames "Unreleased" to 2.4.0 with the date, scans the accumulated entries, and notices three of them under "Changed" describe one breaking rename of an authentication method. That single observationObservationUser ResearchA specific behaviour or statement observedView reference → forces the version to 3.0.0 where the cadence had assumed 2.4.0, and the maintainer writes a short migration note inline. A downstream team reading the changelog sees the Security fix and the breaking change in ten seconds and schedules the upgrade. None of that is available from the commit log, where the same information is spread across forty messages written for reviewers.
In the Unified Product Graph, a changelog sits in the product specification region as the human-readable history of what shipped. The relationship to releases is modelled both ways: Releasedocumented inChangeloghierarchy and release_documented_in_changelogChangelogdocumentsReleasecross-domain capture that a changelog is the standing record across many release events. changelog_documents_releaseChangelogincludesFeaturesemantic links entries to the features they announce, so a feature's arrival in the product is traceable to the version that carried it. Holding the changelog as its own node, connected to releases and features and collapsed into neither, preserves the distinction the practice is built on: the changelog is curated narrative about change, and the graph keeps that narrative answerable to the actual releases and features behind it.changelog_includes_feature
Type-specific fields on BaseNode
versionstringVersion (e.g. "1.2.0")
datestringISO date
change_typestringChange type
idstringrequiredUnique identifier (UUID)
typeNodeTyperequiredDiscriminator for the entity type
titlestringrequiredDisplay name
descriptionstringOptional detailed description
statusstringLifecycle status
tagsstring[]Freeform tags for filtering
3 edge types connected to this entity.
release_documented_in_changelog