From 121a77ce7f0dc4a4bb47e0a01e90ea2a64bcdd8a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Padez?= Date: Wed, 26 Aug 2026 04:31:51 +0000 Subject: [PATCH] release 2026.08.26.02 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 Officer-Session: 656f5c85-e49a-4f1f-b9f3-042a04b4d043 --- deploy/2026.08.26.02.md | 57 +++++++++++++++++++++++++++++++++++++++++ package.json | 2 +- 2 files changed, 58 insertions(+), 1 deletion(-) create mode 100644 deploy/2026.08.26.02.md diff --git a/deploy/2026.08.26.02.md b/deploy/2026.08.26.02.md new file mode 100644 index 00000000..c4f857de --- /dev/null +++ b/deploy/2026.08.26.02.md @@ -0,0 +1,57 @@ +# 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 + +1. `git fetch origin --tags` then `git merge --ff-only deploy/2026.08.26.02` +2. `bun db:push` — expect **no changes**. If it wants to alter something, stop and report it. +3. `bun run plugins:update` +4. `pm2 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. Restarting `officer` there ends the rollout. It already has this code. +- **`edge-pertento-bridge`** — skipped. Still 300+ commits behind with no `roles` table; 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. diff --git a/package.json b/package.json index be525dd8..f9945869 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "officer", - "version": "2026.08.26.01", + "version": "2026.08.26.02", "private": true, "type": "module", "workspaces": [