def evaluate(c):
    fresh = c.get("observed_age_min", 10**9) <= c.get("freshness_window_min", 0)
    region_ok = bool(c.get("region_match"))
    provenance_ok = bool(c.get("provenance_complete"))
    corroborated = c.get("source_count",0) >= 2 and c.get("verification_state") == "VERIFIED"
    relevance_ok = c.get("relevance_score",0) >= 0.60 and region_ok
    expiry_ok = not bool(c.get("envelope_expired"))
    owner_ok = bool(c.get("owner_available"))
    state="UNKNOWN"; reason="UNCLASSIFIED"; publish=True; review=False
    if not provenance_ok:
        state,reason,publish,review="REJECTED","PROVENANCE_INCOMPLETE",False,True
    elif not fresh:
        state,reason,publish,review="DEFERRED","SIGNAL_STALE",False,True
    elif not expiry_ok:
        state,reason,publish,review="DEFERRED","ENVELOPE_EXPIRED_RECHECK_REQUIRED",False,True
    elif not region_ok or c.get("relevance_score",0) < 0.40:
        state,reason,publish="CONTINUE","NO_MATERIAL_RELEVANCE",True
    elif not corroborated:
        state,reason,publish,review="REVIEW_REQUIRED","CORROBORATION_INSUFFICIENT",False,True
    elif not owner_ok and c.get("severity_indicator") == "HIGH":
        state,reason,publish,review="ESCALATE","OWNER_REVIEW_REQUIRED",False,True
    elif c.get("severity_indicator") == "HIGH" and relevance_ok:
        state,reason,publish="PAUSE","VERIFIED_HIGH_SEVERITY_RELEVANT_CONTEXT",False
    elif c.get("severity_indicator") == "MEDIUM" and relevance_ok:
        state,reason,publish="CONSTRAIN","VERIFIED_MODERATE_RELEVANT_CONTEXT",True
    else:
        state,reason,publish="CONTINUE","EVIDENCE_DOES_NOT_JUSTIFY_CONSTRAINT",True
    return {"fresh_gate":fresh,"region_gate":region_ok,"provenance_gate":provenance_ok,"corroboration_gate":corroborated,"relevance_gate":relevance_ok,"decision_state":state,"publish_allowed":publish,"control_reason":reason}
