
    hj                        d Z ddlmZ ddlmZ dZ eh d      Z eh d      Z eh d      Z	 eh d      Z
 eh d	      Zg d
Zh dZddZy)u  v3.6 Runtime Harness — finish-task profile contract JSON schema & validation.

chair_authorization_id=CHAIR-AUTH-TASK-2706-V36-FINISH-TASK-PROFILE-LAYER-P1B-260529

Defines constants, enum sets, and the validate_profile() function for the
§11 output schema of the finish-task profile contract (P1-B).

Public API
----------
- ``SCHEMA_VERSION``            — canonical schema version string
- ``VALID_TASK_MODES``          — frozenset of valid task_mode values
- ``VALID_GRADES``              — frozenset of valid gate/overall grades
- ``VALID_DIRTY_CLASSES``       — frozenset of valid dirty_workspace_classification values
- ``VALID_ANU_ACTIONS``         — frozenset of valid anu_action_recommended values
- ``VALID_CONFIDENCE``          — frozenset of valid classification confidence values
- ``GATE_KEYS``                 — ordered list of gate field names
- ``validate_profile(record)``  — (bool, list[str])

Safe-fail: validate_profile never raises; all exceptions return (False, [error]).
    )annotations)Anyzv36.finish_task_profile.v1>   codeUNKNOWN	read_onlysystem_hookcallback_onlylocal_runtimecloseout_marker_only>   FAILPASSWARNESCALATEN/A>   CLEAN	OWN_DIRTYUNKNOWN_DIRTYEXTERNAL_DIRTYINHERITED_DIRTYDAEMON_RECURRENCE>   BLOCKPROCEEDCAVEAT_PROCEEDESCALATE_CHAIR>   LOWHIGHMEDIUMr   )G1_git_evidenceG2_L1_smokeG3_scope_guardG4_dirty_workspaceG5_qc_verificationG6_lineage_preservationG7_actor_attributionG8_callback_enforcement>   tsgatestask_id	task_modeoverall_resultschema_versionoverall_rationale!task_mode_classification_evidencec                z   	 g }t        | t              sddgfS t        D ]  }|| vs|j                  d|        | j	                  d      }|$|t
        k7  r|j                  d|dt
               | j	                  d      }|,|t        vr$|j                  d	|d
t        t                      | j	                  d      }|at        |t              s|j                  d       n?|j	                  d      }|,|t        vr$|j                  d|d
t        t                      | j	                  d      }|t        |t              s|j                  d       nt        D ]  }||vr|j                  d|       ||   }	t        |	t              s|j                  d|d       G|	j	                  d      }
|
[|
t        vsd|j                  d|d|
d
t        t                       | j	                  d      }|!|t        dhz
  vr|j                  d|d       | j	                  d      }|,|t        vr$|j                  d|d
t        t                      | j	                  d      }|,|t        vr$|j                  d|d
t        t                      | j	                  d      }|Yt        |t              s(|j                  dt        |      j                          n!|j!                         s|j                  d        t#        |      d!k(  }||fS # t$        $ r}dd"| gfcY d}~S d}~ww xY w)#u   Validate a finish-task profile dict against the §11 JSON schema.

    Returns:
        (valid: bool, errors: list[str])

    Safe-fail: never raises; any exception returns (False, [error_message]).
    Fzprofile record must be a dictzmissing required field: r+   Nzschema_version mismatch: got z, expected r)   zinvalid task_mode: z; must be one of r-   z0task_mode_classification_evidence must be a dict
confidencez#invalid classification confidence: r'   zgates must be a dictzmissing gate key: zgate z must be a dictresultz has invalid result: r*   r   zinvalid overall_result: z(; must be one of PASS/WARN/FAIL/ESCALATEanu_action_recommendedz invalid anu_action_recommended: dirty_workspace_classificationz(invalid dirty_workspace_classification: r&   z,field 'ts' must be a string (ISO-8601), got zfield 'ts' must not be emptyr   z!validate_profile internal error: )
isinstancedict_REQUIRED_TOPappendgetSCHEMA_VERSIONVALID_TASK_MODESsortedVALID_CONFIDENCE	GATE_KEYSVALID_GRADESVALID_ANU_ACTIONSVALID_DIRTY_CLASSESstrtype__name__striplen	Exception)recorderrorsfieldsvtmtceconfr'   gkgate_valr0   overall
anu_actiondwcr&   validexcs                    E/home/jay/workspace/scripts/harness/v36/finish_task_profile_schema.pyvalidate_profilerU   W   su   [B&$':;;; # 	DEF" 8	BC	D
 ZZ()>bN2MM9"{>J\]^ ZZ$>b(88MM/v5FvN^G_F`ab jj<=?c4(PQww|,#4D(DMM=dX F**01A*B)CE 

7#eT*45# "B(:2&&AB#(9)(D9"MME"*GH%-\\(%;F%1fL6P &&+B61Fvj Q66<\6J5K%M!""  **-.7<5'3I#JMM*7+ 69 : ZZ 89
!j8I&IMM2:. A""():";!<> jj9:?s*==MM:3' B""()<"=!>@ ZZ>b#& LTRTXM^M^L_`aXXZ<=Fq f} B:3%@AAABs5   L L FL =L EL 	L:(L5/L:5L:N)rF   r   returnztuple[bool, list[str]])__doc__
__future__r   typingr   r8   	frozensetr9   r=   r?   r>   r;   r<   r5   rU        rT   <module>r]      s}   ( # 
 .
     DE !       AB 			cBr\   