one fix, and it is a crash: /browser fails to render with react #185 on every host running .01 with the browser plugin installed, which is the fleet. useAuthoredLayout takes structure from source every render, which is right and is what lets a plugin's layout change reach people who already opened it. what it did not account for is WorkspaceView repairing an unrecognised appType and WRITING THE REPAIR BACK — self-limiting when structure was persisted, an infinite loop when it cannot stick. fofos is already at the fix by hand, mid-work. the plan says so rather than leaving the commander to read it as drift. no schema change, no dependency change, and officer-claude-code stays untouched again — nothing here needs it. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Officer-Session: 656f5c85-e49a-4f1f-b9f3-042a04b4d043
3.0 KiB
2026.08.26.02
One fix, and it is a crash. A screen whose layout names a panel it does not own now renders instead of failing with React #185, "maximum update depth exceeded".
No schema change. No dependency change. 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.
What broke, and where it shows
useAuthoredLayout shipped in 2026.08.26.01: a locked screen persists its SIZES and takes its STRUCTURE
from source on every render. That is still right, and it is what lets a plugin change its layout and reach
people who have already opened it.
What it did not account for is WorkspaceView's appTypes guard, which repairs an unrecognised appType
and writes the repair back. That was self-limiting while structure was persisted — the repair stuck and
the next render agreed with it. With structure coming from source it can never stick, so it is recomputed,
rewritten, discarded and recomputed every render until React gives up.
The browser plugin's layout names officerdev/chat, which is not one of its own panel keys. So
/browser fails to render on any host with that plugin installed. That is every host running
2026.08.26.01 with it — which is the fleet.
The fix drops a write whose result equals the current value. Not an optimisation: it is what terminates the loop, and persisting an identical tree was pointless anyway.
Every host
git fetch origin --tagsthengit merge --ff-only deploy/2026.08.26.02bun db:push— expect no changes. If it wants to alter something, stop and report it.bun run plugins:updatepm2 restart officer
fofos is already at the fix — it was fast-forwarded by hand at 05:22 to a7c9dab2 while the owner was
working on it. Step 1 will fast-forward it to this tag anyway, which only adds the version bump and this
plan. Nothing about that is a problem; note it rather than treating it as drift.
macbookpro: append /opt/homebrew/bin to PATH for the bun commands, run pm2 separately. Asleep is
a skip with a note.
Do not restart officer-claude-code. Unchanged from the last release, same reason: it ends every live
agent session on the host, and it is the owner's call. Nothing in this release needs it.
Hosts
officer-dev— skip it. Restartingofficerthere ends the rollout. It already has this code.edge-pertento-bridge— skipped. Still 300+ commits behind with norolestable; its catch-up is a by-hand job. Do not contact it.alpha,fofos,production-pertento-bridge,deadpool-rezio-bridge— the targets.macbookpro— a target if it is awake.
What to check
Open /browser. It should render rather than showing "This screen failed to render". That is the whole
release, and it is one click to confirm. Hard refresh first — a stale bundle looks identical to the bug.
No direct SQL is needed anywhere, and none is authorised.