The file preview becomes a carousel, zoom starts working again on every plugin screen, and a platform event bus arrives with thumbnails warmed on arrival. No schema change and no dependency change — verified against the range rather than assumed, and the plan says so explicitly so neither step gets improvised. Six of the seven hosts sit exactly on the previous tag. fofos does not: it has been hand-pulled all day while this work was written against it, and its commit is an ancestor of the tag, so it fast-forwards like any other host with fewer commits to travel. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
4.9 KiB
2026.08.29.04 — the file preview becomes a carousel, and zoom starts working again
No schema change and no dependency change. Verified rather than assumed:
git diff --name-only deploy/2026.08.29.03..deploy/2026.08.29.04 | grep -iE 'schema|/db/|databases' # nothing
git diff --name-only deploy/2026.08.29.03..deploy/2026.08.29.04 -- package.json bun.lock # nothing
So no bun db:push and no bun install step exist in this plan, and neither should be improvised.
Sixteen commits; two of them are notes and one is the previous release's report.
What is in it
- The file preview is a carousel. It lists the folder it was opened from, shows thumbnails along the bottom, and steps with the arrow keys or the carets. Escape closes it.
- Zoom works on plugin screens,
/botsand/pluginsagain.useAuthoredLayoutgrafts back only what the user owns, and it knew about sizes and not about zoom — so every click was collected by nothing, compared equal, and dropped. The control rendered, took the click, and did nothing. - An image no longer sticks. Stepping to a new picture showed the previous one until the new one
decoded, and the first fix for that lost a race against cached images and left the spinner up forever.
Both are gone: loaded state is derived from which
srcactually loaded. - A platform event bus, and thumbnails warmed the moment files arrive.
files:uploaded,files:placedandarchive:extractedare emitted; a plugin may subscribe through its manifest. No plugin subscribes yet, so the dispatch path is unexercised in production — worth knowing if something odd appears near an upload. - An embedded file browser can put its folder in a query parameter, keep its own root crumb, and Back and Forward move between folders.
- Shift+Enter renders as a line break in chat. Grid tiles have their gap back and the picture fills the tile. The download card's title stops escaping it.
Nothing here changes behaviour anyone has to be warned about
No route is removed, no permission changes, nothing 404s that did not before. If a host comes back and something is missing, that is a fault rather than an intention — report it.
Every host — the commands
The standard steps in prompts/deploy-commander.md are the whole rollout (dirty check,
git fetch origin --tags, git merge --ff-only deploy/2026.08.29.04, bun run plugins:update), plus:
pm2 restart officer
officer only — plugins:update has already restarted the plugin sidecars.
Verify it came back
pm2 jlist: officer online and restart_time moved, then /api/health on the host's own port
(9010 on macbookpro and production-pertento-bridge, 9000 elsewhere). 200 or 401 are healthy.
And check the file browser still lists
This release touched the file browser and the viewer heavily, so one call per host:
bun -e "
const { sign } = await import('./src/servers/jwt');
const t = await sign({ id: 1, email: '<the owner on this host>' }, '2m');
const r = await fetch('http://127.0.0.1:<PORT>/api/file-browser/ls?root=home&path=/', { headers: { Authorization: 'Bearer ' + t } });
const b = await r.json(); console.log(r.status, (b.entries ?? []).length + ' entries');
process.exit(0)"
A 200 with a plausible count. A 500 here is a failed host — report it and move on.
Per host
Surveyed 2026-08-29 while writing this. Every host was clean (--untracked-files=no) and six of the
seven sit exactly on deploy/2026.08.29.03 (03fbb118).
| Host | Note |
|---|---|
officer-dev |
SKIP ENTIRELY. The rollout runs here and it is already at this code. Name it as skipped. |
alpha |
On 03fbb118, clean. Ordinary target. |
fofos |
On 2738f799, not on the tag — it has been hand-pulled all day while this work was written against it. That commit is an ancestor of the tag, so the fast-forward is ordinary; it simply has fewer commits to travel. It is also the only host with av-club and fofos-admin installed, so plugins:update moves more here than anywhere else. |
macbookpro |
macOS, port 9010, a laptop. Unreachable is a SKIP with a note, not a failure. |
macbruno |
macOS, login brunoalcadapadezmonteirodaconceicao. |
production-pertento-bridge |
Port 9010. Its pg_dump is older than its server — irrelevant here, since this release takes no backup and touches no schema. |
edge-pertento-bridge |
Answered the survey this time, on 03fbb118 and clean. Ordinary target. |
deadpool-rezio-bridge |
Login br, checkout /home/br/officerdev/platform. |
What "done" looks like
Per host: HEAD before and after, plugins:update result, officer back online with a moved
restart_time, and the ls check's output.
Nothing in this release needs a database query, a backup or an install. If you find yourself running one, stop — the plan is wrong, and that is worth reporting rather than working around.