DEPLOY_NOW 2026.08.21.01 — the night's work, to all six

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>
This commit is contained in:
2026-08-21 17:29:02 +00:00
co-authored by Claude Opus 5
parent 2261d16a8a
commit eee73e777c
2 changed files with 44 additions and 1 deletions
+43
View File
@@ -0,0 +1,43 @@
# 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) and `browser` (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),
`ownerOnly` paths, dependency `scope`, 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.
1. `git pull --ff-only`
2. `bun install` — **required.** `bun.lock` changed and `sharp` was removed from the platform's
dependencies (it moved into atelier's `npmDependencies`). Without this the lockfile and the tree
disagree, and the frozen-lockfile rule turns that into a failed install later rather than now.
3. `bun run plugins:update`
4. `bun db:push` — **required.** `users.username` becomes `NOT NULL` and gains a case-insensitive
unique index.
5. `pm2 restart officer`
6. 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.