22 commits. no schema change, no dependency change.
the reason it is being cut tonight rather than tomorrow: officerdev gained an
export that a SHIPPED plugin already imports. proxy-manager is in the catalogue
now and its ChatPanel imports ChatHeader, which exists only from 2ed47fa6. on a
host running 2026.08.25.01 the plugin installs, the frontend rebuild fails with
"No matching export for import ChatHeader", and the SPA keeps its previous
bundle — so the plugin looks installed and its route redirects to home. that
happened on fofos tonight and is what this release fixes.
the plan says explicitly not to restart officer-claude-code: the widened chat
credential lives there rather than in officer, and bouncing it ends every live
agent session including the one running the rollout. pending is the honest
report, not something to take.
edge stays excluded, unchanged and for unchanged reasons.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Officer-Session: 656f5c85-e49a-4f1f-b9f3-042a04b4d043
5.0 KiB
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.
ChatPanelWrappertakeschatContext, so a plugin's chats run in$DATA_PATH/<email>/plugins/<appName>/chats— resolved server-side, never a path from the client.pluginsjoinscommandersas a sibling ofhomethat a member OWNS, or their turn dies on its own working directory (thegeneral_chat_sessionsfailure, third time). - A plugin briefs its chats with a file.
plugins/<name>/chat/CLAUDE.mdis 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=<appName>. - 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— wasnotifyonly. Note this takes effect inofficer-claude-code, NOTofficer. - 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
appTypesrepair 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
git fetch origin --tagsthengit merge --ff-only deploy/2026.08.26.01bun db:push— expect no changes to platform tables. If it wants to alter one, stop and report it.bun run plugins:updatepm2 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. Restartingofficerthere ends the rollout. It already has this code.edge-pertento-bridge— skipped, unchanged from last release. It is 300+ commits behind with norolestable, and a plaindb:pushthere 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.