The flag was right: apps/commandhq has its own composer and ships a verbatim copy of background-job-prompt.ts, so handoffContract was still promising "the harness re-arms you". Worse than stale — a mobile-armed watcher would have waited for a re-arm that was never coming, firing once and silently stopping. Re-copied and diffed. That is the third re-sync in one session, each caught only because I happened to be reading the diff. A stale preamble typechecks, builds, and produces a job that runs, so nothing catches it. Proposes the fix: build the preamble on the server. It is a pure function of the spec, both clients already assemble that spec locally, and the create endpoint could take the spec instead of a finished prompt — one implementation, on the side that owns the mechanism the text describes. displayText and cwd both drop out as things the server can derive rather than be told. Cost stated too: it puts prompt text behind a round trip. Not asked for tonight. Also records why the mechanism changed, because it generalises: the synthetic turn lost to the fact that this session's own watcher had been self-re-arming for hours with zero failures. A measurement beat a hypothesis. 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.