D102 - The command protocol is specified first, with transcripts as contract

Status: decided Date: 2026-09-26

docs/PROTOCOL.md is the specification; the probe's net.c and obscene-tool drive implement it. Captured exchanges under docs/examples/protocol/ are part of the contract and are checked against the grammar. An ack is flushed before the command runs, every acknowledged command gets exactly one terminal reply, and the driver records died, timeout and lost itself, marked observed_by=driver.

Why: another implementation builds against the protocol and has no say in it, so the grammar must exist as a document. Transcripts let a consumer be built with no hardware. A command that did not answer is never recorded as having answered.

Rejected: implement first and document after - every correction becomes a silent break.