diff --git a/deploy/2026.08.26.01.md b/deploy/2026.08.26.01.md new file mode 100644 index 00000000..efbd4320 --- /dev/null +++ b/deploy/2026.08.26.01.md @@ -0,0 +1,82 @@ +# 2026.08.26.01 + +A plugin can own a chat — its own directory, its own brief, its own history — and a dead commander watcher +wakes itself up. + +22 commits. **No schema change** and **no dependency change**: nothing under `src/databases/**/schema.ts` +moved and `bun.lock` is untouched. **Do not run `bun install`.** + +`bun db:push` stays a step because it is cheap and proves the database agrees with the code, but **it must +report no changes to the platform's own tables.** A host with the `proxy-manager` plugin installed will see +that plugin's three tables created — that is the plugin, not this release, and it is expected. + +## Why this one matters more than its size suggests + +**`officerdev` gained an export that a shipped plugin already imports.** The `proxy-manager` plugin in the +catalogue imports `ChatHeader` from `officerdev`, which exists only from `2ed47fa6` — after the last +release. On a host running `2026.08.25.01` the plugin installs, its frontend rebuild fails with +`No matching export … for import "ChatHeader"`, and the SPA silently keeps its previous bundle: the plugin +appears installed and its route redirects to home. + +That is exactly what happened on `fofos` tonight. **So this release is what makes that plugin installable +anywhere**, and any host that has already installed it is in the broken state until this lands. + +## What is in it + +- **A plugin can declare a chat context.** `ChatPanelWrapper` takes `chatContext`, so a plugin's chats run + in `$DATA_PATH//plugins//chats` — resolved server-side, never a path from the client. + `plugins` joins `commanders` as a sibling of `home` that a member OWNS, or their turn dies on its own + working directory (the `general_chat_sessions` failure, third time). +- **A plugin briefs its chats with a file.** `plugins//chat/CLAUDE.md` is copied into that directory + on every chat that starts there, replacing per-turn prompt prefixes. +- **A plugin can list its own chats** — `/chat/sessions?context=plugin&contextId=`. +- **Sonnet is the default when nobody chose.** Every surface without a picker was running Opus, because the + fallback was the bare harness and bare means "whatever the CLI picks". A stored bare harness is now read + as unset, which is what made the change appear to do nothing on machines that had one. +- **A chat's API key follows its holder, minus `admin`** — was `notify` only. Note this takes effect in + `officer-claude-code`, NOT `officer`. +- **A locked screen persists sizes, not structure.** A plugin or core screen changing its layout now + reaches people who have already opened it, and the `appTypes` repair can no longer be written back as + though the user had chosen it. +- **A dead commander watcher wakes its commander**, and the guard that was silently disabling that is + fixed — it asked about background tasks when it meant "is the agent mid-turn", and a commander's watcher + is itself a background task. +- Theme browser and Spotlight keybindings; two `todo/` entries; the CLAUDE.md touchpoints audit. + +## Every host + +1. `git fetch origin --tags` then `git merge --ff-only deploy/2026.08.26.01` +2. `bun db:push` — expect **no changes** to platform tables. If it wants to alter one, stop and report it. +3. `bun run plugins:update` +4. `pm2 restart officer` + +**`macbookpro`:** append `/opt/homebrew/bin` to PATH for the `bun` commands, run `pm2` separately. Asleep +is a skip with a note, not a failure. + +## `officer-claude-code` is NOT restarted by this, and that is deliberate + +One change in here — the widened chat credential — lives in the agent sidecar rather than in `officer`, so +step 4 does not activate it. **Do not restart `officer-claude-code` as part of the rollout.** It ends every +live agent session on that host, including any agent running the rollout itself, and it is the owner's call +when to take that. Say in the report that it is pending; do not do it. + +## Hosts + +- **`officer-dev`** — skip it. Restarting `officer` there ends the rollout. It already has this code. +- **`edge-pertento-bridge`** — skipped, unchanged from last release. It is 300+ commits behind with **no + `roles` table**, and a plain `db:push` there would create a foreign key onto an empty table. Its catch-up + is a by-hand job the owner is doing separately. Do not contact it. +- **`alpha`**, **`fofos`**, **`production-pertento-bridge`**, **`deadpool-rezio-bridge`** — the targets. +- **`macbookpro`** — a target if it is awake. + +## What to check, this release + +**On `fofos` specifically**, because it is the reason for the release: after step 4, `/proxy-manager` should +render rather than redirecting to home, and the log should say `[plugins] frontend built` with no +`rebuild failed` line after it. If it still redirects, the bundle is stale — hard refresh before concluding +anything. + +Everywhere else: a chat should default to **sonnet** rather than opus or fable in the model picker. That is +the most visible change and the easiest to confirm. + +No direct SQL is needed on any host, and none is authorised. diff --git a/package.json b/package.json index 9590bf06..be525dd8 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "officer", - "version": "2026.08.25.01", + "version": "2026.08.26.01", "private": true, "type": "module", "workspaces": [