
    cj                        d Z ddlmZ ddlmZmZ ddlmZmZm	Z	m
Z
mZ dZdZdZdZ eeeeeh      Z ed	
       G d d             ZddZdd	 	 	 	 	 	 	 	 	 ddZy)aT  ANU v3.1 Codex CC Decision Loop (Phase 1 Core).

Reference: ANU v3 master spec section 5.1, 5.2, 5.3.

Pure-logic adapter that converts a Codex CC review/re-review payload into a
structured verdict plus a CHAIR_HOLD / AUTO_EXECUTE recommendation.  This
module does NOT touch the filesystem, network, GitHub, dispatch, or any live
runtime.  Production write / dev bot dispatch / merge / auto-merge are not
performed here (forbidden 1, 3, 4, 5, 6, 7 per task-2662 md).

Used by `utils.anu_codex_micro_refinement_loop` to translate the Codex
verdict-of-record into a refinement loop control signal.
    )annotations)	dataclassfield)AnyDictListMappingOptionalPASSPASS_WITH_RECOMMENDATIONSFAILUNKNOWNT)frozenc                      e Zd ZU dZded<   ded<   ded<   ded<   ded	<    ee
      Zded<   dZded<   dZ	ded<   ddZ
y)CodexDecisionu   Structured verdict result returned by `evaluate`.

    `auto_execute_allowed` is `True` only when (a) verdict ∈ {PASS,
    PASS_WITH_RECOMMENDATIONS} AND (b) `critical_7` is `False` AND (c) no
    safety flag listed in section 5.3 is set.
    strtask_idintreview_roundcodex_final_verdictbool
critical_7auto_execute_allowed)default_factoryzList[Dict[str, Any]]recommendationsFdecision_required	ASK_CHAIRrecommended_next_actionc                    d| j                   d| j                  | j                  | j                  | j                  t        | j                        | j                  | j                  d
S )Nz anu_v3.codex_cc_decision_loop.v1risk_bounded_decision)
schemar   	loop_kindr   r   r   r   r   r   r   )	r   r   r   r   r   listr   r   r   )selfs    M/home/jay/workspace/.worktrees/task-2662-dev2/utils/codex_cc_decision_loop.pyas_dictzCodexDecision.as_dict0   s[    8||0 --#'#;#;//$($=$=#D$8$89!%!7!7'+'C'C
 	
    N)returnzDict[str, Any])__name__
__module____qualname____doc____annotations__r   r#   r   r   r   r&    r'   r%   r   r      sQ     L,1$,GO)G#t##.S.
r'   r   c                    t        | t              st        S | j                         j	                         }|t
        v r|S t        S N)
isinstancer   CODEX_UNKNOWNstripupperALLOWED_CODEX_VERDICTS)raw	candidates     r%   _normalize_verdictr8   ?   s9    c3		!!#I!%;;9NNr'   N)safety_signalc           
     
   t        | t              r| st        d      t        |t              r|dk  rt        d      t	        |j                  d            }t        |j                  dd            }t        |j                  dg       xs g       }t        |xs i       }|xs  t        d |j                         D              }|t        t        fv }	|	xr | }
|xs |t        t        fv }|
rd	nd
}t        | ||||
|||      S )a  Translate a Codex payload into a CodexDecision.

    `codex_payload` is expected to carry at least `codex_final_verdict` and
    `critical_7`.  `safety_signal` is an optional dict containing the live
    safety probe results (e.g. permission_expansion, github_write_required,
    real_write_required, forbidden_write_target, scope_expansion).  When any
    safety probe is true the decision is forced to `auto_execute_allowed=False`
    and `decision_required=True` regardless of the verdict.
    ztask_id required   z#review_round must be a positive intr   r   Fr   c              3  2   K   | ]  }t        |        y wr0   )r   ).0vs     r%   	<genexpr>zevaluate.<locals>.<genexpr>a   s     &H1tAw&Hs    AUTO_EXECUTE_EXISTING_AUTOMATIONr   )r   r   r   r   r   r   r   r   )r1   r   
ValueErrorr   r8   getr   r#   dictanyvalues
CODEX_PASSCODEX_PASS_WITH_RECOMMENDATIONS
CODEX_FAILr2   r   )r   r   codex_payloadr9   verdictr   r   safetysafety_blockedverdict_passauto_executer   r   s                r%   evaluaterO   F   s   " gs#7+,,lC(L1,<>?? !2!23H!IJGm''e<=J=,,->CIrJO-%2&FH3&H&H#HNz+JKKL6$6L&P'j-5P*P.:*  !#)'+ 7	 	r'   )r6   r   r(   r   )
r   r   r   r   rI   zMapping[str, Any]r9   zOptional[Mapping[str, bool]]r(   r   )r,   
__future__r   dataclassesr   r   typingr   r   r   r	   r
   rF   rG   rH   r2   	frozensetr5   r   r8   rO   r.   r'   r%   <module>rT      s    # ( 5 5
"= 
"0*mL 
 $
 
 
@O 37.. . %	.
 0. .r'   