# 2026.09.14.01 — command-hq self-reported arm/fire/disarm **One commit**, `deploy/2026.09.09.01..36db9a2a`. Backend-only, no schema change, no new dependency. ## What it is Three new routes, `POST /command-hq/commanders/dir/:dirName/{arm,fire,disarm}` — a second, self-reported door onto the existing `armCommandHqWatcher`/`recordCommandHqWatcherFired`/`disarmCommandHqWatcher` functions, for a commander loop that outlives its own turn (detached, or a tracked background job that dies with the turn anyway) and so never produces the harness's own `task:started`/`task:notification` events. Authenticated with the commander's own long-lived `OFFICER_API_KEY`. Full account in `docs/command-hq.md` → "Self-reported arm". No route removed, no existing route's contract changed, no frontend change. The only way this release does anything is a host restarting `officer` to pick up the new routes — a commander whose loop already calls them (this machine's four) gets nothing from the rollout on any OTHER host, because those hosts' own commanders, if any, don't call them yet. ## Verified, not assumed ```bash git diff --name-only deploy/2026.09.09.01..HEAD | grep -iE 'schema|databases/' # → nothing git diff --name-only deploy/2026.09.09.01..HEAD -- package.json bun.lock # → nothing git diff --name-only deploy/2026.09.09.01..HEAD -- docs/servers.md # → nothing, host list unchanged bun run docs:check # → green ``` No schema change, no dependency change, no host-list change since the last release. `package.json` version bumped to match this tag and nothing else in it changed. ## Every host — the commands Standard steps only, nothing extra: dirty check (TRACKED only), `git fetch origin --tags`, `git merge --ff-only deploy/2026.09.14.01`, `bun run plugins:update`, `pm2 restart officer`. No `bun install`, no `db:push` — neither is needed and running either is not a finding, just unnecessary. ### Verify it came back — two checks, per host No schema table to query this time, so the usual three checks drop to two: 1. **`pm2 jlist`** — `officer` is `online` and its `restart_time` moved. 2. **HTTP** — `/api/health` on the host's own port. `200` or `401` are both healthy. Port is **9010 on `macbookpro`**, 9000 elsewhere. ## Per host | Host | Login | Note | | ----------------------- | -------------- | ----------------------------------------------------------| | `alpha` | `pastilhas` | | | `fofos` | `pastilhas` | | | `macbookpro` | `pastilhas` | Laptop. Asleep is a SKIP with a note. Port **9010**. | | `deadpool-rezio-bridge` | **`br`** | Not `pastilhas`. | ### Skipped, deliberately — not failures - **`officer-dev`** — the host the rollout runs on. Skip entirely, per the standard rule. - **`macbruno`** — reachability unknown at cut time; check live, unreachable is a SKIP not a failure. - **Both Pertento hosts** — deliberately-skipped list in `docs/servers.md` since 2026-09-08. ## What "done" looks like Four hosts attempted: `alpha`, `fofos`, `macbookpro`, `deadpool-rezio-bridge`. Each at `deploy/2026.09.14.01`, `officer` back online, health answering on the right port. A host that fails does not stop the rollout — its own line, what failed, what never ran. ## Known and carried, not introduced here `bunx tsgo` reports one pre-existing type error in `src/servers/sidecar/claude/claude-manager.ts:667` (`SdkUserMessage` vs `SDKUserMessage`, from the agent SDK's own types) — present before this release, type-only, stripped at run time. Named here so it isn't mistaken for something this release did.