
    j                       d Z ddlmZ ddlmZmZ ddlmZmZ ddl	m
Z
mZmZmZ dZdZdZd	Z eed
h      Ze G d d             Zddddd	 	 	 	 	 	 	 	 	 	 	 ddZddddd	 	 	 	 	 	 	 	 	 	 	 ddZdddd	 	 	 	 	 	 	 	 	 ddZg dZy)u  anu_v3.self_collector_guard — executor self-collector / self-adjudication /
self-dispatch 실 runtime 구조적 차단 (task-2553+49 AUTHORITATIVE §3/§5.A).

회장 §3 필수목표: "executor self-callback 차단 · executor self-collector 차단
· executor self-adjudication 차단 · executor self-dispatch 차단" 을 실제
runtime path 에 결선한다.

narrow +49 ``dispatch.callback_owner_enforcer`` 의
``assert_not_self_adjudication`` / ``assert_not_self_dispatch`` 를 runtime
guard 로 결선하고, collector 회수단계에서 self-session collector-result 를
무효화하는 ``guard_self_collector_session`` 을 추가한다. dispatch entrypoint
및 collector 회수 경로가 **반드시 경유**해야 하는 fail-closed 게이트.

reuse, not re-implement: self-adjudication / self-dispatch 규칙은 비-frozen
``dispatch.callback_owner_enforcer`` 단일 진실원을 호출.

Layer A / NO-CRON: 순수 검증. ZERO cron / dispatch / subprocess / cokacdir.
    )annotations)	dataclassfield)ListOptional)FAILPASSassert_not_self_adjudicationassert_not_self_dispatchzanu_v3.self_collector_guard.v1SELF_COLLECTOR_FORBIDDEN$EXECUTOR_SELF_ADJUDICATION_FORBIDDEN EXECUTOR_SELF_DISPATCH_FORBIDDENSELF_DISPATCH_FORBIDDENc                  v    e Zd ZU ded<   ded<   ded<   ded<   ded<    ee	      Zd
ed<   edd       ZddZ	y)SelfCollectorGuardResultstrschemaverdictOptional[str]classificationboolis_executor_self_sessionblocked_action)default_factoryz	List[str]reasonsc                (    | j                   t        k(  S )N)r   r	   selfs    2/home/jay/workspace/anu_v3/self_collector_guard.pyokzSelfCollectorGuardResult.ok7   s    ||t##    c                    | j                   | j                  | j                  | j                  | j                  t        | j                        dS )Nr   r   r   r   r   r   )r   r   r   r   r   listr   r   s    r   to_jsonz SelfCollectorGuardResult.to_json;   sA    kk||"11(,(E(E"11DLL)
 	
r!   N)returnr   )r&   dict)
__name__
__module____qualname____annotations__r   r$   r   propertyr    r%    r!   r   r   r   .   sD    KL!!""!!t4GY4$ $
r!   r   NANU)collector_key	actor_keycollector_roler   c                   t        |      xr || k(  }t        |      xr || k(  }|t        |      nd}|xs |xs |}|s|dk7  r.|rt        nd}	|rdnd|d}
t        t        t        |	|d|
g	      S t        t        t
        dddd
g	      S )uW  collector 회수단계 fail-closed: executor self-session 이 자기
    completion collector 를 *소유/운영* 하면 무효 (§3 / §5.A).

    self iff: actor_key == executor_key, OR collector_key == executor_key,
    OR explicit self-session flag (escalate-only — never relaxes the
    key-derived signal, narrow enforcer 동형).
    NFr.   CALLBACK_COLLECTOR_NOT_ANUu   executor self-session owns/operates its own completion collector — structurally forbidden; the collector MUST be an independent ANU session (§3 / §5.A).zcollector_role=uG    != 'ANU' — collector must run as an independent ANU session (§5.A).self_collectorr#   z8collector is an independent ANU session (no self-chain).)r   r   r   GUARD_SCHEMAr   r	   )executor_keyr/   r0   r1   r   key_selfcollector_selfexplicitself_sessionclsreasons              r   guard_self_collector_sessionr=   F   s     I<9#<H-(J]l-JN , ,-  9~9L~.  %- 	 5 #>"4 5> > 	 (%1+H
 	
 $!&KL r!   F)r0   is_codex_auditis_adjudicationr   c           
         t        | ||||      }t        t        |j                  |j                  t        k(  rt
        nd|j                  |j                  t        k(  rdndt        |j                              S )u   executor self-session Codex audit / ANU-Codex adjudication 차단
    (§3 / §5.A / regression 11). Delegates to the narrow enforcer rule.)r6   r0   r>   r?   r   Nself_adjudicationr#   )	r
   r   r5   r   r   r   r   r$   r   )r6   r0   r>   r?   r   rs         r   guard_self_adjudicationrC   |   sq     	%!%'!9	A $		 yyD  1!"!;!;./ii4.?*TQYY r!   )r0   is_followup_dispatchr   c           
         t        | |||      }t        t        |j                  |j                  t        k(  rt
        nd|j                  |j                  t        k(  rdndt        |j                              S )u   executor self-session 후속 dispatch / delegation 차단
    (§3 / §5.A / regression 12). Delegates to the narrow enforcer rule.)r6   r0   rD   r   Nself_dispatchr#   )	r   r   r5   r   r   r   r   r$   r   )r6   r0   rD   r   rB   s        r   guard_self_dispatchrG      sh     	!!1!9		A $		01		T0A,t!"!;!;*+))t*;QYY	 	r!   )r5   r	   r   r   r   r   SELF_DISPATCH_FORBIDDEN_ALIASESr   r=   rC   rG   )r6   r   r/   r   r0   r   r1   r   r   Optional[bool]r&   r   )r6   r   r0   r   r>   r   r?   r   r   rI   r&   r   )
r6   r   r0   r   rD   r   r   rI   r&   r   )__doc__
__future__r   dataclassesr   r   typingr   r    dispatch.callback_owner_enforcerr   r	   r
   r   r5   r   r   r   	frozensetrH   r   r=   rC   rG   __all__r-   r!   r   <module>rQ      sJ  $ # ( !  05 'M $#E  
 #,%'@A# 
 
 
 
4 $(#/333 !3 	3
 3 -3 3r  $ !/3  	
  - D  $!&/3  	
 - 6r!   