from __future__ import annotations

def evaluate(c):
    required=["shop_domain_or_tenant_ref","api_surface","api_version","observed_api_version","api_version_status","access_scope_set","external_order_id","external_gid","canonical_order_id","schema_mapping_version","event_topic","event_id_or_dedupe_key","payload_digest","authenticity_check","idempotency_key","response_state","retry_state","reconciliation_cursor","evidence_ref"]
    if any(c.get(k) in (None,"","UNKNOWN") for k in required):
        return "HOLD_EVIDENCE"
    if c.get("api_surface") != "GRAPHQL_ADMIN":
        return "HOLD_API_SURFACE"
    if c.get("api_version_status") != "STABLE_SUPPORTED" or c.get("api_version") != c.get("observed_api_version"):
        return "HOLD_API_VERSION"
    if not c.get("required_scopes_satisfied"):
        return "HOLD_ACCESS_SCOPE"
    if not c.get("mapping_version_current"):
        return "HOLD_MAPPING_VERSION"
    if c.get("authenticity_check") != "VERIFIED":
        return "HOLD_AUTHENTICITY"
    if c.get("event_duplicate") and c.get("duplicate_effect_applied"):
        return "HOLD_EVENT_DEDUPE"
    if c.get("out_of_order_event") and c.get("canonical_regression_attempted"):
        return "HOLD_RECONCILIATION"
    if c.get("mutation_supports_idempotency") and c.get("retry_same_intent") and not c.get("retry_reuses_key"):
        return "HOLD_IDEMPOTENCY"
    if c.get("retry_same_intent") and not c.get("local_operation_identity_stable"):
        return "HOLD_IDEMPOTENCY"
    if c.get("response_state") == "UNKNOWN_AFTER_SEND" and c.get("reconciliation_state") not in ("RECONCILED","DEDUPED_AND_RECONCILED"):
        return "HOLD_RECONCILIATION"
    if c.get("retry_state") in ("UNKNOWN","FAILED"):
        return "HOLD_RETRY_STATE"
    if c.get("reconciliation_state") in ("PENDING","UNKNOWN","FAILED","OUT_OF_ORDER_REVIEW","PENDING_VERSION_RECHECK","PENDING_MAPPING","DUPLICATE_EFFECT_DETECTED"):
        return "HOLD_RECONCILIATION"
    return "ACCEPT_CONNECTOR"
