Nine tags that were never on the branch
colophon works out the version your commits have earned, opens the release as a merge request, and tags what actually landed. Not what your forge says did.

colophon works out the version your commits have earned, opens the release as a merge request, and tags what actually landed. Not what your forge says did.

The documented cargo cache key gives every lockfile its own cache. On a self-hosted runner that fills the disk. Whose disk was the advice for?

A change that ships without a version bump reaches nobody, and nothing tells you. Ten minutes in a throwaway directory to see it happen, and then catch it.

I run a coding session per repository and they can't talk to each other. For a while the thing carrying messages between them was me, and I kept getting it wrong.

Half my CI jobs ran for no reason on every merge request. Skipping them with rules:changes, and why that is trickier than the manual suggests.

Opening a public marketplace for agent workflows meant publishing an attack surface, and then having to defend it from my own convenience.

A standard-library security fix forced a Go version bump, and then the release failed because the build image shipped an older toolchain.

Moving off tag-on-merge releases, where a release is a side effect of merging, to a model where the release is itself a reviewable change.

A CI component gated on the default branch fired on every Renovate schedule too, because a scheduled run is also on the default branch.

Nearly every CI job began by fetching and compiling the same tools. Baking them into one image instead, and what that saved per pipeline.
