def evaluate(x):
    if not x.get("provenance_ref"):
        return {"decision":"REJECTED","reason_code":"MISSING_PROVENANCE","recommended_cadence":0,"review_required":True}
    if x.get("evidence_readiness") is None:
        return {"decision":"REVIEW_REQUIRED","reason_code":"EVIDENCE_READINESS_UNKNOWN","recommended_cadence":0,"review_required":True}
    if x.get("evidence_age_days",0) > x.get("max_age_days",30):
        return {"decision":"DEFER","reason_code":"STALE_EVIDENCE","recommended_cadence":0,"review_required":True}
    if x.get("evidence_readiness") is False:
        return {"decision":"DEFER","reason_code":"EVIDENCE_NOT_READY","recommended_cadence":0,"review_required":True}
    if x.get("risk") == "high":
        return {"decision":"DEFER","reason_code":"HIGH_RISK_REVIEW","recommended_cadence":0,"review_required":True}
    if x.get("audience_need",0) < 0.4 and x.get("freshness_need",0) < 0.4:
        return {"decision":"NONE","reason_code":"LOW_CURRENT_NEED","recommended_cadence":0,"review_required":False}
    if x.get("unique_value",0) < 0.5 or x.get("redundancy",0) >= 0.7:
        return {"decision":"NONE","reason_code":"REDUNDANT_OR_LOW_UNIQUE_VALUE","recommended_cadence":0,"review_required":False}
    if x.get("editorial_capacity",0) <= 0:
        return {"decision":"NONE","reason_code":"NO_CURRENT_CAPACITY","recommended_cadence":0,"review_required":True}
    if x.get("requested_cadence",0) > x.get("editorial_capacity",0):
        return {"decision":"REDUCE","reason_code":"CAPACITY_BELOW_REQUEST","recommended_cadence":x.get("editorial_capacity",0),"review_required":False}
    return {"decision":"PUBLISH","reason_code":"ALL_GATES_PASS","recommended_cadence":x.get("requested_cadence",0),"review_required":False}
