First release under yyyy.mm.dd.NN, and the first deploy of the plugin extractions, the regenerated themes, Spotlight, and the chat fixes. The plan is deploy/2026.08.21.01.md. Two steps in it are required rather than optional and both would be easy to skip: bun install, because bun.lock changed and sharp left the platform's dependencies for atelier's; and db:push, because users.username becomes NOT NULL with a case-insensitive unique index. That second one can refuse — on a null username, or two names differing only in case. Checked on all six hosts before writing this rather than discovering it mid-rollout: 12 users, zero nulls, zero collisions. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2.1 KiB
2.1 KiB
2026.08.21.01
The first release under this scheme, and the first deploy of the night's work. Everything since
0.1.0, which is to say everything.
What is in it
- Two plugins extracted:
desktop(VNC) andbrowser(the relay, its extension and its panels), with the platform losing the VNC vocabulary it should never have had. - Themes regenerated — all 22 from Omarchy, 84 tokens each, contrast-checked. The eleven that shipped with 34 of an 84-token contract are replaced.
- Spotlight, on
shift-space. - Chat fixes: a turn waiting on a person is no longer killed as stalled, and an answer that goes nowhere now says so.
- Plugin infrastructure:
importFresh(a reinstalled plugin was being read from the deleted one),ownerOnlypaths, dependencyscope, extensions published unauthenticated,plugins:update. - An Update button in maintenance, and the sub-agent budget guard.
Steps, in order, on every host
Same on all six — nothing here is host-specific.
git pull --ff-onlybun install— required.bun.lockchanged andsharpwas removed from the platform's dependencies (it moved into atelier'snpmDependencies). Without this the lockfile and the tree disagree, and the frozen-lockfile rule turns that into a failed install later rather than now.bun run plugins:updatebun db:push— required.users.usernamebecomesNOT NULLand gains a case-insensitive unique index.pm2 restart officer- Then, and only for hosts that have them:
pm2 restart officer-claude-code officer-pty— both load changed sidecar code. Not the whole ecosystem, ever.
The one thing that could have gone wrong, and did not
db:push refuses if any account has a null username, or if two differ only by case. Checked on all
six before writing this: 12 users across the fleet, zero nulls, zero case-collisions. If a future
host fails here, that is why, and the fix is data rather than schema.
Post-deploy check
pm2 jlist — every restarted process online with a moved restart_time, and the platform's own
domain answering 200. docs/servers.md has the domain per host.