# 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.