pub fn evaluate_floor(candidates: &[FloorCandidate]) -> FloorDecisionExpand description
Read the floor from the current set of contending candidates (ADR-062 D4).
- No candidates →
FloorState::Open. - A hard interrupt present →
FloorState::Locked, the interrupting candidate wins withf32::MAX(preempt + cancel generation). - One candidate →
FloorState::Held. - Several candidates →
FloorState::Contended(ordered by urgency), the top scorer is the winner.
Ties are broken by input order (earliest-listed wins), so callers should supply candidates oldest-wait-first for deterministic fairness.