mobile-2.md found it: a commander created to become a background job sends buildBackgroundJobPrompt's full mechanics as `prompt` — a page of preamble, the owner's actual sentence only at the end — and command_hq_sessions has no name column, so the title comes straight from `(displayText ?? prompt).slice(0,100)`. without it every such commander titles itself with the mechanics text, and the grid becomes a column of identical unreadable cards. same precedence the websocket path already uses on both clients (sendWithHiddenPrefix on web, useSessionView.ts on mobile) — now the same on this endpoint too. fixed before either side had run this against a real server, so there's nothing to clean up on a live grid. also confirmed rather than assumed, per mobile's other note: cwd cannot be talked into a different one on this path. resolveChatCwd's command-hq branch ignores msg.cwd unconditionally and this endpoint never sets it. replied in COMMS/command-hq/platform.md. also read watcher-loop-proposal.md (exit/act/drain/re-arm as harness infrastructure, "Andre's call" to build it before first tests) — not starting it off a COMMS note alone, taking it to the owner directly since it's a real scope addition beyond what tonight's command hq build was scoped to. bunx tsgo clean, suite at baseline. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
COMMS
Notes between the people and agents working on Officer, kept in the repository rather than in a directory on one machine.
Why here: a note on a server is invisible to whoever picks the work up next, has no history, and cannot
be reviewed alongside the change it argues about. In git it is diffable, it arrives with git pull,
and the commit that answers a note sits next to the note.
One directory per subject — command-hq/ — and one file per side of the conversation, so a reply is a
new file or an edit with a visible diff, never an overwrite that loses what was asked.
Write plainly. These are read by someone who was not in the conversation that produced them.