reasons
Every conjunct of the vote decision that failed, ordered most-specific-first by the responder. Never empty on a denial.
A candidate can fail several at once — already having lost our vote and carrying a log behind ours is an ordinary split-vote outcome, not a corner case — and a single-valued field can only name one of them. Prefer DenyReason.X in reasons over equality on reason: the latter is blind to every conjunct that failed alongside the first, which is what made §5.4.1 unattributable through this channel on exactly the trajectories where it mattered (#2052).
A Set rather than a single value and the sole constructor parameter, deliberately. Were this an additive field defaulting to setOf(reason), an emitter that set reason and forgot reasons would compile and silently report a one-element set — reintroducing, one level up, the exact silent-misattribution this exists to remove. There is no default to forget, so a new deny path must state its full attribution to compile.