<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Release Engineering on Brian Faust</title><link>https://vacua.dev/series/release-engineering/</link><description>Recent content in Release Engineering on Brian Faust</description><generator>Hugo</generator><language>en-US</language><lastBuildDate>Mon, 01 Jan 0001 00:00:00 +0000</lastBuildDate><atom:link href="https://vacua.dev/series/release-engineering/rss.xml" rel="self" type="application/rss+xml"/><item><title>From Commit to Changelog: An Intent-Aware Release Pipeline</title><link>https://vacua.dev/from-commit-to-changelog/</link><pubDate>Fri, 01 Aug 2025 00:00:00 +0000</pubDate><guid>https://vacua.dev/from-commit-to-changelog/</guid><description>&lt;p&gt;Most release processes postpone the important questions.&lt;/p&gt;
&lt;p&gt;A developer commits a change. A pull request describes some of it. Somebody
adds a changeset because CI demands a file. Much later, another person opens an
&lt;code&gt;Unreleased&lt;/code&gt; section and tries to reconstruct what users need to know.&lt;/p&gt;
&lt;p&gt;The tools are connected by chronology, but not by meaning.&lt;/p&gt;
&lt;p&gt;That is why release day becomes an archaeological exercise. The diff still
exists, but the reason, audience, migration path, affected application, and
release judgment have been scattered across Git, an issue tracker, review
comments, and somebody&amp;rsquo;s memory.&lt;/p&gt;</description></item><item><title>Unreleased Is Not a Junk Drawer</title><link>https://vacua.dev/unreleased-is-not-a-junk-drawer/</link><pubDate>Tue, 01 Jul 2025 00:00:00 +0000</pubDate><guid>https://vacua.dev/unreleased-is-not-a-junk-drawer/</guid><description>&lt;p&gt;&lt;a href="https://keepachangelog.com/en/1.1.0/" target="_blank" rel="noopener noreferrer external"&gt;&lt;em&gt;Keep a Changelog&lt;/em&gt;&lt;/a&gt;
 got one foundational idea exactly
right: a changelog is for people. It should explain noteworthy changes instead
of dumping commit history into a Markdown file.&lt;/p&gt;
&lt;p&gt;That principle is sound. The document model built around it is where the
frustration begins.&lt;/p&gt;
&lt;p&gt;The problem becomes most visible under this heading:&lt;/p&gt;
&lt;figure class="code-figure"&gt;
 &lt;div class="code-block" data-copy-code&gt;
 &lt;button class="copy-code" type="button" aria-label="Copy code"&gt;copy&lt;/button&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;## Unreleased&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
 &lt;/div&gt;
&lt;/figure&gt;
&lt;p&gt;The failure mode is easy to recognize. Everything remotely noteworthy goes
there while work is in progress. When a release approaches, somebody finally
decides which application the entries belong to, rewrites their summaries,
moves them under categories, removes internal noise, adds migration notes, and
tries to reconstruct why half of the changes mattered.&lt;/p&gt;</description></item><item><title>A Pull Request Is a Review Narrative, Not a Template</title><link>https://vacua.dev/a-pull-request-is-a-review-narrative/</link><pubDate>Sun, 01 Jun 2025 00:00:00 +0000</pubDate><guid>https://vacua.dev/a-pull-request-is-a-review-narrative/</guid><description>&lt;p&gt;Most pull-request templates start with good intentions and end as paperwork.&lt;/p&gt;
&lt;p&gt;They ask for a summary, testing instructions, screenshots, a ticket, a risk
assessment, a deployment plan, a rollback plan, and twelve checkboxes. A small
change answers half of them with “not applicable.” A large change fills them
with links. The template is complete, yet the reviewer still has to reverse
engineer the actual decision from the diff.&lt;/p&gt;
&lt;p&gt;The failure is not Markdown. It is treating the presence of headings as proof
that communication happened.&lt;/p&gt;</description></item><item><title>Intent Commits: Commit Types Are Not Release Decisions</title><link>https://vacua.dev/intent-commits/</link><pubDate>Thu, 01 May 2025 00:00:00 +0000</pubDate><guid>https://vacua.dev/intent-commits/</guid><description>&lt;p&gt;Conventional Commits solved a real problem. It gave teams a small shared
grammar for a part of software development that had mostly been left to taste:&lt;/p&gt;
&lt;figure class="code-figure"&gt;
 &lt;div class="code-block" data-copy-code&gt;
 &lt;button class="copy-code" type="button" aria-label="Copy code"&gt;copy&lt;/button&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;feat(auth): support passkeys&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
 &lt;/div&gt;
&lt;/figure&gt;
&lt;p&gt;That line is easy to write, easy to scan, and easy to parse. It is a much
better foundation than histories full of &lt;code&gt;changes&lt;/code&gt;, &lt;code&gt;updates&lt;/code&gt;, and &lt;code&gt;fix stuff&lt;/code&gt;.
It can drive changelogs, release automation, and navigation through an
unfamiliar codebase.&lt;/p&gt;</description></item></channel></rss>