def evaluate(c):
    critical=['onboarding_flow_id', 'persona_or_role', 'purpose', 'step_id', 'step_order', 'required_fields', 'optional_fields', 'data_purpose_map', 'disclosure_trigger', 'skip_allowed', 'progress_indicator', 'instruction_ref', 'accessibility_label_ref', 'validation_rule', 'error_recovery', 'consent_or_notice_ref', 'completion_state', 'review_summary_ref', 'evidence_ref']
    def present(v):
        if isinstance(v,(list,dict)): return bool(v)
        return bool(str(v).strip())
    complete=all(present(c.get(k,'')) for k in critical)
    trigger_ok=not bool(c.get('optional_credential_requested',False)) or bool(c.get('integration_selected',False))
    critical_boundary_visible=not bool(c.get('critical_notice_hidden',False)) and present(c.get('consent_or_notice_ref',''))
    progress_ok=not bool(c.get('multi_step',True)) or present(c.get('progress_indicator',''))
    label_ok=present(c.get('accessibility_label_ref',''))
    minimised=not bool(c.get('unneeded_fields_forced_required',False))
    role_ok=not (c.get('persona_or_role')=='REVIEWER_ONLY' and bool(c.get('analytics_or_publishing_forced',False)))
    review_ok=present(c.get('review_summary_ref','')) and bool(c.get('back_allowed',True))
    if not complete: state='UNKNOWN'
    elif not critical_boundary_visible or not trigger_ok or not minimised or not role_ok: state='BLOCKED'
    elif not progress_ok or not label_ok or not review_ok: state='PARTIAL'
    else: state='READY_FOR_HUMAN_CONFIRMATION'
    return {'state':state,'evidence_complete':complete,'trigger_ok':trigger_ok,'critical_boundary_visible':critical_boundary_visible,'progress_ok':progress_ok,'human_completion_allowed':state=='READY_FOR_HUMAN_CONFIRMATION'}
