Ranking
data class Ranking(val candidates: List<Candidate>, val bundles: List<Bundle>, val unattached: List<RuleMatch>, val excluded: List<Exclusion>, val transition: TransitionNote?)(source)
The full result: Ranking.candidates best first, the Ranking.bundles among them, rule matches that touch no changed attribute (Ranking.unattached), runs left out of the spectrum (Ranking.excluded) and the Ranking.transition when the input was one. Weights are hand-set and uncalibrated; the probability of a candidate is calibrated only where Weights.toJson says it is.