Skip to content

Verdict Schema

The verdict is class Verdict in api/app/schemas.py, produced by compute_verdict() in api/app/eval.py in defendable-cloud-v2. It is the shape stamped into the verdict block of an eval receipt.

{
"outcome": "fail",
"score": 0.78,
"score_100": 78,
"severity": "propolis",
"client_ready": "No — high-risk flag",
"recommended_action": "HIGH-RISK — resolve before release: DSCR re-derivation.",
"summary": "7/8 rules passed · 1 high-risk, 0 mid, 0 low flag(s) · 78/100 weighted.",
"checks_passed": 7,
"checks_failed": 1,
"risk_breakdown": {
"high": ["DSCR re-derivation"],
"mid": [],
"low": []
}
}

There is no top-level schema field on the verdict object, and the verdict does not embed the checks[] / findings[] arrays — those are the run-level check record (see below).

FieldTypeMeaning
outcomestringfail (any high flag) · risk (mid flag) · pass (low/no flags).
scorefloatscore_100 / 100, rounded to 4 dp.
score_100intround(100 × passed_weight / total_weight). % of declared rules satisfied, tier-weighted. Not a quality grade.
severitystringFlag-driven tier: propolis (any high flag) · jelly (mid flag, no high) · honey (low/no flags).
client_readystringOne of: "Yes" · "Yes — minor notes only" · "With limitations / after repair" · "No — high-risk flag". Severity-tier-driven.
recommended_actionstringThe next move the rulebook implies, naming the flagged labels.
summarystringOne-line readout: rules passed, flags by tier, weighted score.
checks_passedintCount of pass checks.
checks_failedintCount of flag checks.
risk_breakdownDict[str, List[str]]Lists of flagged rule labels by tier: {high: [...], mid: [...], low: [...]}.

Score is tier-weighted (TIER_WEIGHT = {high: 5, mid: 2, low: 1}) so a high-risk miss drops it hard. tier_of() normalizes a rule’s declared severity (including legacy values) to high | mid | low.

TierWeightSeverity if flagged
highpropolis (a game-changer — do not release)
midjelly (usable with limitations / after repair)
lowhoney (small hit — safe to release, noted)

The per-rule check records are a separate shape from the verdict. They are produced by run_audit() in api/app/eval.py (one record per declared rule) and carried in the receipt’s own checks / findings arrays — not inside the verdict object.

FieldMeaning
check_keyRule key from the Flight Sheet.
labelHuman label.
categorystructure · schema · math · evidence · policy.
kindauto (code applies it) · checklist (operator applies a binary rule).
severityThe rule’s declared pre-weight; tier_of() normalizes it.
sourceauto or operator.
statuspass · flag · open (operand missing / operator not yet applied — never false-flag).
detailSpot of the foul, e.g. DSCR recomputed 1.022 — gate 1.20 — MISMATCH.

A Finding is a Check whose status is flag — a located defect, bucketed by category: work_defect (math/schema/structure/evidence — correct & resubmit) · deal_finding (policy — the math is right, the rule says no) · stack_fit (attributed by the run’s agent_profile capability tier).

class Verdict in api/app/schemas.py, produced by compute_verdict() in api/app/eval.py, in defendable-cloud-v2. It is deterministic — same Flight Sheet + same submission → same verdict, every time.


🐝 defendablecloud.verdict/v1 · the canonical verdict shape · to the shed.