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>
44 lines
2.1 KiB
Markdown
44 lines
2.1 KiB
Markdown
# 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.
|