Optional 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 request refused at the thread DO's identity boundary: the DO's name is unresolvable, or the request carries no valid execution principal. Surfaced as 403 — this boundary is internal (a DO namespace is not client-reachable and the Worker validates the threadId before forwarding), so there is no existence oracle to protect here and a distinct status keeps a routing bug from reading as a generic 500.
Extends DoStatusError because that is how a status opts in: this class is what doErrorResponse recognizes, not the shape of its fields.