# 2026.08.29.03 — the todo board leaves, and a plugin can claim a file type **No schema change and no dependency change.** Verified rather than assumed: ```bash git diff --name-only deploy/2026.08.29.02..deploy/2026.08.29.03 | grep -iE 'schema|/db/|databases' # nothing git diff --stat deploy/2026.08.29.02..deploy/2026.08.29.03 -- package.json bun.lock # nothing ``` So **no `bun db:push` and no `bun install` step exist in this plan, and neither should be improvised.** Ten commits, all code. ## What is in it - **`/todos` is gone from the platform.** It is now the `kanban` plugin, in the marketplace. The `todos` permission, the route, the screen and the board were all removed. - **A plugin can claim a file type.** A manifest may declare `fileTypes`; the file browser then offers thumbnails and a full-size render for formats the platform itself cannot read. av-club claims `heic`/`heif`, so on a host with av-club installed, iPhone photographs get pictures instead of file icons and open in the viewer. - Thumbnails retry rather than giving up, and list and grid ask for the same size. - The directory picker moved into the platform so more than one plugin can use it. ## A behaviour change to expect, and it is deliberate **`/todos` now 404s.** Anyone with it bookmarked gets nothing. The board is the `kanban` plugin, which is in the marketplace and installed nowhere by default — that is the intended state, not an oversight. `role_permissions` rows naming `todos` are now orphaned. Harmless: absence denies, and the registry no longer has the key. **Do not clean them up as part of this rollout** — it is a data edit nobody asked for, and a row naming a permission that does not exist grants nothing. ## Every host — the commands The standard steps in `prompts/deploy-commander.md` are the whole rollout this time (dirty check, `git fetch origin --tags`, `git merge --ff-only deploy/2026.08.29.03`, `bun run plugins:update`), plus: ```bash 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 listing route, so one call per host is worth it: ```bash bun -e " const { sign } = await import('./src/servers/jwt'); const t = await sign({ id: 1, email: '' }, '2m'); const r = await fetch('http://127.0.0.1:/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. | Host | Note | | --- | --- | | `officer-dev` | **SKIP ENTIRELY.** The rollout runs here and it is already at this code. Name it as skipped. | | `alpha` | No av-club, so no HEIC support — expected, not a fault. | | `fofos` | **The only host with av-club installed**, and already at this commit and verified: 6 HEICs thumbnail and one renders at full size. Bring it to the tag so its HEAD matches the fleet. | | `macbookpro` | macOS, port **9010**, a laptop. Unreachable is a SKIP with a note. | | `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` | Did not answer the survey while this plan was written. It may simply have been busy; treat it as an ordinary target and report what you find. | | `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.