Today I shipped contenox 1.0.0. Not by pushing a tag on top of a thousand commits, but as a single commit into an empty repository: the whole tree, one signed tag, binaries built from that tag by CI. The 957 commits that got me there are still public, in the old repository, as history. They are no longer how the project is published.

This post is about why, and about what went wrong before I had finished reading the result back.

What a commit used to mean

GitHub's workflow rests on four assumptions so old that nobody states them any more:

A commit is a unit of human intent. Someone decided something and typed it.