Chief of Staff Get started

Release 0.23.0

An upgrade that asks first

Panos Kozanian 3 min read

Chief of Staff keeps everything it knows about you in plain files in a folder you own. That is the whole promise. It also means an upgrade is not a neutral event: a release can rename a field, retire a convention, or make a file mean something slightly different than it did last month, and the files it would be adjusting are the ones you wrote.

Until this release, most of that happened quietly. The first session after an update ran a migration pass, applied what it could, asked only where a particular step happened to demand it, and you frequently never learned your memory had been touched at all. Nothing went wrong. That is not the same as it being right.

The whole set, in one exchange

Now the first session after an upgrade works out the span it is bridging: the release your memory was last aligned with, through to the one you just installed. It reads what actually changed across that entire window, checks which of those changes apply to your folder, and if any of them would alter something you wrote, it puts the whole set to you at once and waits.

Two details matter more than they look. It is one exchange, not a drip of prompts across your morning. And declining is not final: say no and it simply asks again next session, so you are never trading a clean folder for a nag.

If nothing applies to your folder, it says nothing and gets on with the day. Its own bookkeeping, noting which release your memory now matches, never needed your permission and still does not ask for it.

It stopped trusting the release notes

The migration pass used to rely on each release having remembered to leave a note saying "this one touches memory." That assumption had already failed: version 0.15.0 removed a field from every team member's charter and said nothing about it, and the pass walked straight past the change it was built to catch.

So it now reads the release entries themselves rather than waiting to be told. A missing note is no longer a silent pass.

The bug underneath

Worth naming, because the shape of it is instructive. Whether your memory needed migrating at all was decided by comparing two version numbers as text. Compared that way, 0.9.0 looks newer than 0.10.0.

The effect was invisible and exactly backwards: the oldest installs, the ones with the most history to bring forward, were the ones the pass quietly declined to run on. Nothing said so, because from the inside everything looked up to date.

The rules behind all of this are published in full. See how updates work, or start at How it works.

← All posts