Files
platform/deploy/2026.08.29.04.md
T
pastilhasandClaude Opus 5 e9b71522ed release 2026.08.29.04
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>
2026-08-29 14:20:27 +01:00

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, /bots and /plugins again. useAuthoredLayout grafts 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 src actually loaded.
  • A platform event bus, and thumbnails warmed the moment files arrive. files:uploaded, files:placed and archive:extracted are 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.