diff --git a/deploy/2026.08.21.01.md b/deploy/2026.08.21.01.md new file mode 100644 index 00000000..7c1f502e --- /dev/null +++ b/deploy/2026.08.21.01.md @@ -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. diff --git a/package.json b/package.json index 245495ae..7cff1f28 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "officer", - "version": "0.1.0", + "version": "2026.08.21.01", "private": true, "type": "module", "workspaces": [