def evaluate(c):
    def out(state,reason):
        context_bound=bool(c.get('tenant_id') and c.get('token_tenant_id')==c.get('tenant_id') and c.get('tenant_context_source') not in (None,'ARBITRARY_USER_INPUT'))
        partition_ok=bool(c.get('data_partition_key') and (c.get('tenant_id') in str(c.get('data_partition_key')) or c.get('dedicated_storage')))
        return {
            'isolation_state':state,
            'reason_code':reason,
            'tenant_context_bound':context_bound,
            'partition_scope_ok':partition_ok,
            'same_tenant_test_ok':bool(c.get('same_tenant_positive_test')),
            'cross_tenant_test_ok':bool(c.get('cross_tenant_negative_test')),
            'bypass_detected':bool(c.get('bypass_path') or c.get('ops_tool_context_source')=='ARBITRARY_OPERATOR_PARAMETER'),
            'evidence_ref':c.get('evidence_ref')
        }
    if c.get('owner_blocked'): return out('BLOCKED','OWNER_POLICY_BLOCK')
    if c.get('authority_conflict'): return out('DISPUTED','AUTHORITY_CONFLICT')
    if not c.get('evidence_ref') or not c.get('policy_enforcement_point'): return out('UNKNOWN','DECISIVE_EVIDENCE_MISSING')
    if c.get('evidence_age_days',0)>30: return out('STALE','DECISIVE_EVIDENCE_STALE')
    if c.get('material_change_not_recomputed'): return out('PARTIAL','RECOMPUTE_REQUIRED')
    if c.get('tenant_context_source') in (None,'ARBITRARY_USER_INPUT') or c.get('token_tenant_id')!=c.get('tenant_id'): return out('FAILED','TENANT_CONTEXT_NOT_BOUND')
    if c.get('request_tenant_id')!=c.get('tenant_id'): return out('FAILED','REQUEST_TENANT_OVERRIDE')
    if not c.get('cache_key_includes_tenant'): return out('FAILED','CACHE_KEY_NOT_TENANT_SCOPED')
    if not c.get('queue_consumer_tenant_scoped'): return out('FAILED','QUEUE_CONSUMER_NOT_TENANT_SCOPED')
    if c.get('ops_tool_context_source')=='ARBITRARY_OPERATOR_PARAMETER': return out('FAILED','OPS_TOOL_TENANT_OVERRIDE')
    if c.get('bypass_path'): return out('FAILED','BYPASS_PATH_PRESENT')
    if not c.get('same_tenant_positive_test'): return out('HOLD','SAME_TENANT_POSITIVE_TEST_MISSING')
    if not c.get('cross_tenant_negative_test'): return out('HOLD','CROSS_TENANT_NEGATIVE_TEST_MISSING')
    if not c.get('audit_event'): return out('HOLD','AUDIT_EVIDENCE_MISSING')
    return out('VERIFIED','ALL_DECISIVE_PLANES_PASS')
