Deterministic Phrases and Typed Refusals
Short harness phrases are adapters into live state. join anvil queue #N, join anvil bench #N, join anvil examiners #N, join anvil synthesis #N, and anvil next round #N each begin by resolving the current queue and protocol.
A successful join returns the role, mask when the role has one, yard, phase, endpoints, and expected-versus-actual identity facts. A continuation rejoin uses its existing mask or matching spec and lands in that phase's round directory. The server receipt, not a narration, proves the binding.
Refusals use stable protocol codes. leg_not_open says a Relay leg is not the current hand; phase_role_mismatch rejects the wrong role; mask_not_open rejects a continuation outside its open phase; diagnosis_required keeps Restoration from finishing early; phase_unresolved, bench_phase_next, and no_phases guard Dad's advance action.
The phrase must re-resolve current state on every use. That is deterministic without promising blanket idempotency: after the board changes, the same words may lawfully select a later phase or return a conflict.