Optionaldetails: {ReadonlyreasonAn optional machine-readable reason, rendered into the response body alongside the message. DECLARED HERE rather than sniffed structurally at the mapper so the channel is part of the contract a subclass opts into, and so the mapper needs no import of any subclass to render it (see the header for why that import must not exist).
ReadonlystatusThe response status, 4xx or 5xx; any other status answers 500.
A fence transition whose compare-and-set found a different state. 409 rather than 503: the deployment is fine, the CALLER's expectation is stale — two control-plane actors raced, or an operator retried a transition that already landed. The current state rides on the reason so the caller can re-plan without a second round trip.