8.6 KiB
2026.08.23.06 — deploy report
5 of 5 target hosts succeeded. Two hosts skipped by design: officer-dev (the host running the
rollout) and edge-pertento-bridge (listed under Deliberately skipped in docs/servers.md).
Every host went e15ab230 → 2646842c by git merge --ff-only deploy/2026.08.23.06. No host was
ahead, none had diverged, and no tracked file was dirty anywhere. --force was never used and no SQL
beyond the plan's block was run.
Per host
alpha — ✅
- HEAD
e15ab230→2646842c, remote SSH, tree clean, no untracked files. - SQL: both blocks applied.
RAISE EXCEPTIONdid not fire — no role held aprovisioning_script.DELETE FROM command_hq_sessionsremoved 0 rows; the table was already empty. - Verified by query on
officer_dev:Developergrants_postgres=t grants_docker=t;Admin,Member,Super Adminallf/f;provisioning_scriptabsent (0 columns);dir_nameandreference_pathspresentNOT NULL,session_idnullable. bun db:pushexit 0, no prompt. Seed reported0 seeded, 4 already present— the Developer flags were written by the seed's re-assert path, confirmed by re-querying after the push, not by the message.bun run plugins:update— 13/13 in 54s, exit 0,capabilities: pulled. Every plugin's sidecar restarted as part of this step: atelier, bitcoin-wallet, email, gitea, invoices, jellyfin, minesweeper, music, offscale, photos, soulseek, transmission, vault.- Orphan removed:
capabilities/affordances/officerdev/existed and was deleted. Capabilities tree clean afterwards — no leftover?? extensions/, so the new.gitignorehad already arrived. pm2 restart officer— restart_time 72 → 73. All 20 processesonline.
fofos — ✅
- HEAD
e15ab230→2646842c, remote HTTPS, no tracked changes. - Untracked file left in place:
scripts/chk.ts. Noted, not a reason to skip, not touched. - Database is
officer, notofficer_dev, and the URL is inOFFICERDEV_POSTGRES_URLrather thanPOSTGRES_URL. Matched the code's own precedence (OFFICERDEV_POSTGRES_URL ?? POSTGRES_URL,officer_db/src/db.ts:9) so the migration went to the database the server actually opens. - SQL: both blocks applied, exception did not fire,
DELETEremoved 0 rows. - Verified by query:
Developert/t, other threef/f,provisioning_scriptabsent,dir_nameandreference_pathsNOT NULL,session_idnullable. bun db:pushexit 0, no prompt, no plugin schemas on disk.bun run plugins:update— 1/1 in 7s, exit 0,capabilities: pulled.officer-giteasidecar restarted by this step.- Orphan removed:
capabilities/affordances/officerdev/deleted; tree clean afterwards. pm2 restart officer— 25 → 26. All 8 processesonline.
macbookpro — ✅ (awake, with two deviations worth recording)
- HEAD
e15ab230→2646842c, remote SSH, tree clean, no untracked files. - SQL: both blocks applied.
psqlis at/opt/homebrew/opt/libpq/bin/psqland on the non-interactive PATH, as the plan said.DELETEremoved 0 rows. - Verified by query:
Developert/t, other threef/f,provisioning_scriptabsent,dir_nameandreference_pathsNOT NULL,session_idnullable. bun db:pushexit 0, no prompt, run with/opt/homebrew/binappended to PATH.bun run plugins:update— exit 0, butno plugins installed — nothing to update, so the step exited before its capabilities pull. See What I could not do below.- No orphan to remove.
~/projects/officer-suite/capabilitiesis not a git checkout — it holds only emptyagents/ extensions/ processes/ skills/ tasks/ tools/and has noaffordances/at all. pm2 restart officer(run as its own command, PATH untouched) — 12 → 13. All 6 processesonline.
production-pertento-bridge — ✅
- HEAD
e15ab230→2646842c, remote HTTPS, tree clean, no untracked files. - SQL: both blocks applied, exception did not fire,
DELETEremoved 0 rows. - Verified by query on
officer_dev:Developert/t, other threef/f,provisioning_scriptabsent,dir_nameandreference_pathsNOT NULL,session_idnullable. bun db:pushexit 0, no prompt. Its shell prints an nvm/.npmrcglobalconfigwarning before every command — cosmetic, pre-existing, unrelated to this release.bun run plugins:update— 1/1 in 5s, exit 0,capabilities: pulled.officer-gitearestarted.- Orphan removed:
capabilities/affordances/officerdev/deleted; tree clean afterwards. pm2 restart officer— 4 → 5. All 15 processesonline(nine of them are this host's non-Officer Pertento jobs — Crons, Dashboard, Tracking, Uptime — none of which were touched).
deadpool-rezio-bridge — ✅ (login br)
- HEAD
e15ab230→2646842c, remote HTTPS, tree clean, no untracked files. - Database is
officerviaOFFICERDEV_POSTGRES_URL, same shape asfofos. - SQL: both blocks applied, exception did not fire,
DELETEremoved 0 rows. - Verified by query:
Developert/t, other threef/f,provisioning_scriptabsent,dir_nameandreference_pathsNOT NULL,session_idnullable. bun db:pushexit 0, no prompt, 2 plugin schemas (email, offscale).bun run plugins:update— 2/2 in 8s, exit 0,capabilities: pulled. The email plugin advancedc60e3d6→c1c3674— the only plugin anywhere in this rollout that was not already current.officer-emailandofficer-offscalesidecars restarted by this step.- No orphan, as the plan predicted; checked anyway and
affordances/officerdevdoes not exist. pm2 restart officer— 10 → 11. All 9 processesonline.
Skipped
officer-dev— the host this rollout ran from. Nothing pulled, nothing restarted. Confirmed current rather than assumed: HEAD is2646842c, the tag's commit, and a direct query showsDevelopert/twith the other threef/f,provisioning_scriptabsent,dir_name/reference_pathspresent andsession_idnullable. Its ownofficerprocess is untouched and still runs the pre-restart build of this commit — the owner restarts it deliberately, as the last step.edge-pertento-bridge— in Deliberately skipped since 2026-08-23. Not contacted, no retry budget spent.
Commanders deleted
None, on any host. command_hq_sessions held 0 rows everywhere — every DELETE reported
DELETE 0. Each host was counted by query before the delete ran, so this is measured rather than
inferred. Nobody's standing job was removed by this release.
officer-dev's one commander, Platform Deployer, had already been deleted there before the rollout
began, per the plan.
What I could not do
macbookprodid not get the capabilities pull.bun run plugins:updateexits early withno plugins installedand never reaches the capabilities repository, which the plan named as how the new.gitignorearrives. It does not matter on that host — its capabilities directory is not a git checkout, so there is no repository for a.gitignoreto land in and noaffordances/to be duplicated. I did not invent agit pullthe plan had not authorised. Nothing is outstanding on that host; the note is about the step's shape, not a missing change.- The release's own "what to check" list is unrun. Asking an agent to name its skills, switching a panel to Swedish, and creating a commander to confirm it produces a directory are interactive checks in a browser. This deploy agent cannot make them, so no host has been confirmed working by use — only by schema query and process state.
officer-devneedspm2 restart officerto run the code it already has checked out.
Two things worth carrying forward
fofos and deadpool-rezio-bridge name their database differently from the other three — the URL
lives in OFFICERDEV_POSTGRES_URL and the database is officer, not officer_dev. Any future plan step
that reaches for POSTGRES_URL alone will connect to a socket that is not there, which is what it did
here on the first attempt. The code's precedence is OFFICERDEV_POSTGRES_URL ?? POSTGRES_URL; follow it
rather than either name.
The seed's own output does not prove the Developer flags were written. It prints 0 seeded, 4 already present on every host, because it counts inserts and the roles already existed — while the flags are
re-asserted by a separate update path. On all five hosts the flags read f/f immediately after the SQL
and t/t only after db:push. Nothing was wrong; the message is simply not the evidence, and the query
after the push is.