Jury applies multiple judges and returns a Verdict.
The verdict retains the aggregated judgment, ordered individual judgments, named evidence, weights, and any nested tier verdicts.
SimpleJury
SimpleJury runs peer judges, optionally in parallel, and delegates aggregation to a VotingStrategy.
Its builder accepts named or anonymous judges, per-judge weights, a strategy, a parallel flag, and an optional executor.
The canonical compiled construction and verdict inspection live in tutorial module 04.
Read verdict.aggregated().status() for the outcome.
Use individualByName() and individual() for diagnostics, and use the aggregate metadata’s aggregation object for portable policy evidence.
Voting strategies
Status-counting strategies do not consult stored scores.
Numeric strategies use an explicit score when present and derive
1.0 or 0.0 from PASS or FAIL otherwise.
ABSTAIN and ERROR never become numeric zero by default because they are not completed measurements.
Tie and error policies
TiePolicy selects PASS, FAIL, or ABSTAIN when a strategy has no winner.
The default tie policy for majority voting is FAIL.
ErrorPolicy makes error handling observable.
The original error judgment remains in the verdict’s individual evidence even when a policy excludes it from reduction.
Consensus semantics
Consensus returnsPASS when all applicable judges pass and FAIL when all applicable judges fail.
A mixed applicable panel returns ABSTAIN because it has no collective finding; a downstream gate or tier decides whether disagreement rejects or escalates.
If no applicable judges remain after abstention and error handling, the result is also ABSTAIN, with reasoning and aggregation evidence distinguishing the cases.
CascadedJury
CascadedJury orders juries into named tiers.
Each tier has one control-flow policy.
This separates cost control from a judge’s evaluation logic.
A typical cascade runs deterministic checks, then structural checks, then an LLM-backed final tier only when earlier evidence cannot decide.
Tutorial module 05 is the canonical compiled two-tier example.
Identity and composition
Wrap a lambda withJudges.named so verdicts have stable identities.
The Juries utility builds a jury from judges and combines existing juries into a meta-jury.
Verdict.single(name, judgment) creates complete evidence for a one-member jury without duplicating builder calls.