You don't write them three times: you derive three views from one source, and that source is not a document — it is the git history of your product. The customer changelog, the internal note and the support answers become three renderings of the same content, each at its reader's altitude. As long as your "single source of truth" is hand-written prose, the rewriting is unavoidable: a text has one reading level, and your audiences have several.
9:12 am, the deploy lands: a release that gets written three times
Follow an ordinary release day. The scenario is illustrative; the mechanics are general.
9:12 am. The deploy finishes. Among the changes: accounting exports move from a home-grown CSV to a standard format, plus two bug fixes.
9:40 am. The PM writes the public changelog entry. They read through the pull requests, filter out the technical noise, and translate "migrate export pipeline to RFC 4180" into a sentence a customer understands. First write-up.
11:05 am. Support asks in an internal thread: "what does this actually change for a customer who imports our exports into their ERP?" A developer stops what they were doing and rewrites the same information with the details the changelog left out: the separator changes, hand-configured imports may break. Second write-up.
2:30 pm. Customer success prepares a message for three accounts that rely on those exports weekly. A new version of the same content, this time framed as impact and what to do about it. Third write-up.
5:00 pm. A customer writes in: their import fails. The support agent leans on the knowledge base, which still describes the old format. The release was written three times in one day, and the surface that needed it most got nothing.
Why "one note for everyone" doesn't work
The opposite temptation — one very complete note, shared everywhere — fails for a simple reason: your audiences don't differ by level of detail, they differ by the question they are asking. The customer asks "what does this change for me?". The internal team asks "what shipped, and with what risk?". The integrator asks "does the API break?". Support asks "did this ticket come from the release?".
A single note answers one of those questions and leaves the others stranded. That is why it gets rewritten: every underserved reader falls back to the most expensive source available, a developer.
"What changed in the product this week?": the question under every surface
Look at the three write-ups in the scenario: they are three answers to the same question — "what changed in the product this week?" — asked with a different window, object and reader. The changelog answers it for all customers at once; the internal note, for the team; the CS message, for three accounts.
So the asset worth building is not one more document. It is the ability to answer that question reliably, at any altitude. The documents follow from it.
The single source is not a document: it's the repository
What changed in the release already exists, in a complete and dated form: the diffs. Not the commit messages, which say whatever their author felt like writing that day — the diffs, which contain the change itself. The export format migration from the scenario is readable in the code even if the commit is called "fix export".
That is the principle DeployIt runs on. DeployIt reads your real code (re-synced on every push), your git history (commits + diffs) and the customer's data through its own MCP servers, and verifies in the code before asserting. From that source, each project gets a queryable product expert, and the surfaces become views: the customer changelog is the answer for "window: this release, reader: customer"; the internal note is the same answer at another altitude. None of the views is written by hand. None of them can drift out of sync with the others.
"One template per audience in CI, problem solved"
That is the setup well-tooled teams reach for: git-cliff or release-please, conventional commits, one template per audience. Keep it if your readers are developers: for publishing a reliable list of changes to people who read markdown, it is the right tool, and it is deterministic.
Two limits belong to the setup itself. A template changes formatting, not altitude: it reorders commit messages, it does not extract "your ERP import may break" from them — that sentence lives in the diff, not in the message. Release notes generators inherit the quality of your commits; a source derived from diffs holds up even when the commits are called "wip". And the support surface is not a file: it is a stream of questions arriving after the fact, phrased as symptoms ("my import fails") rather than changes. A template doesn't answer questions.
What the expert reads on your side, and what it gives back
Deriving views from the repository means reading the repository, and that deserves a plain statement rather than fine print. The scope: read-only GitHub connection, one server per project, revocable at any time. Answers are sourced from commits and diffs, never raw source code. Your customer learns that the export separator changed and what to do about it; they never read your pipeline code. The code never leaves the repository.
The surface everyone forgets while writing: the agents
The 5:00 pm scene is the modern version of an old problem: the knowledge base describes the previous state. A help center regenerated from the code follows your releases instead of chasing them. And your AI agents (the support bot, the internal assistant, soon your customers' agents) are a fourth audience — one that doesn't read your nicely formatted pages: it asks. DeployIt's MCP server, in early access / design partner program, exposes the same expert to those agents. One source, humans and agents both served.
Mini-FAQ
Should you drop the public changelog? Quite the opposite: it remains the storefront. What changes is how it is made — a view generated from the diffs, reviewed before publishing if you want, rather than one more write-up on release day.
Who approves what customers see? You do. Deriving the views doesn't force you to publish them unreviewed; it guarantees that what you review is complete and current. Review takes minutes when the material is already accurate.
Our commits are clean — what do we lose by sticking to templates? Nothing, as long as your audiences read lists of changes. The day support needs the cause behind a ticket, or a customer asks "since when?", the list stops answering; the diffs don't.
A release written zero times
The right target is not "write better release notes". It is not writing them at all: deriving them, at every altitude, from a source that cannot misremember what changed. The three write-ups of your release day turn back into product time.
DeployIt is free during early access; paid plans arrive in January 2027. If your agents should answer from your code too, the design partner program is open.
Continue reading
MCP vs RAG: Which Approach for Codebase Knowledge?
RAG indexes a snapshot of your code; MCP lets the agent explore the repository at question time. What each approach sees, what it misses, and when to combine them.
Did the API Change This Week? Spotting Breaking Changes in Real Diffs
The integrator's weekly question: where breaking changes hide when the changelog says nothing, and how to answer from the real diffs.
How to Automate a Changelog From Your Git History
Message-based generators or a changelog derived from real diffs: the five-question test that separates the approaches, for your customers and your agents.