ReadonlyappliedOptional ReadonlyreasonWhy it did not apply, for a log line. Never a client-facing string — see refusal.
Optional ReadonlyrefusalThe machine-readable why — a RefusalCode plus named args, the same closed union a
write refusal carries. Absent only for producers not yet migrated onto it, which still set
reason alone; a client renders this through refusalText(), never reason.
The outcome of projecting state onto the audio. Deliberately not
void: a projection that reached nothing must say so.