
    0bj_                        d Z ddlmZ ddlmZmZ ddlmZmZm	Z	 ddl
mZmZmZmZmZmZ dZdZdZd	Zd
ZdZdZe G d d             Zdddd ee      ddd	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddZ	 	 	 	 ddZ G d de      Zg dZy)u  anu_v3.callback_owner_validator — callback owner/key/role runtime validator
결선 (task-2553+49 AUTHORITATIVE §4.1 / §5.A / §5.C).

회장 §3/§4: "callback owner/key/role runtime validation" 을 실제 runtime path
에 결선한다. narrow +49 는 ``dispatch.callback_owner_enforcer`` 를 standalone
으로만 두었다. 본 모듈은 그 검증 로직을 **anu_v3 runtime 계층**에 결선하는
어댑터이자, callback registration helper 가 등록 직전 **반드시 경유**해야 하는
fail-closed validator 다 (§5.C: "normal/fallback callback 등록 직전 owner/key
/role 검증 / mismatch 면 등록 안 함").

reuse, not re-implement: 실제 검증 규칙은 비-frozen
``dispatch.callback_owner_enforcer`` (narrow +49 산출, byte-0 carve-out 결정으로
non-frozen) 를 단일 진실원으로 호출한다. 규칙 중복 = drift 위험이므로 금지.

Layer A / NO-CRON: 순수 검증. ZERO cron / dispatch / subprocess / cokacdir.
    )annotations)	dataclassfield)ListOptionalSequence)DEFAULT_ANU_KEYSFAILHOLDPASSenforce_callback_owner
is_anu_keyz#anu_v3.callback_owner_validation.v1CALLBACK_OWNER_MISMATCHCALLBACK_COLLECTOR_NOT_ANUSELF_COLLECTOR_FORBIDDENCALLBACK_4TUPLE_INVALIDDISPATCH_PATH_BYPASSED_CONTRACTCALLBACK_REGISTRATION_BLOCKEDc                      e Zd ZU ded<   ded<   ded<   ded<   ded<   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edd       Z	ddZ
y)CallbackOwnerValidationResultstrschemaverdictz	List[str]classificationsboolregistration_allowedowner_is_independent_anutask_idexecutor_keycollector_keycollector_roledictenforcement)default_factoryreasonsc                (    | j                   t        k(  S )N)r   r   selfs    P/home/jay/workspace/.worktrees/task-2696-dev7/anu_v3/callback_owner_validator.pyokz CallbackOwnerValidationResult.ok8   s    ||t##    c                <    | j                   r| j                   d   S d S )Nr   )r   r'   s    r)   primary_classificationz4CallbackOwnerValidationResult.primary_classification<   s     *.*>*>t##A&HDHr+   c                4   | j                   | j                  t        | j                        | j                  | j
                  | j                  | j                  | j                  | j                  | j                  | j                  t        | j                        dS )N)r   r   r   r-   r   r   r   r   r    r!   r#   r%   )r   r   listr   r-   r   r   r   r   r    r!   r#   r%   r'   s    r)   to_jsonz%CallbackOwnerValidationResult.to_json@   sz    kk||#D$8$89&*&A&A$($=$=(,(E(E|| --!//"11++DLL)
 	
r+   N)returnr   )r1   Optional[str])r1   r"   )__name__
__module____qualname____annotations__r   r/   r%   propertyr*   r-   r0    r+   r)   r   r   *   sw    KL""Lt4GY4$ $ I I
r+   r   N Fcokacdir_cron_directT)collector_owner_keychat_idprompt_claims_anu_collector
entry_pathanu_keysno_fallbackanu_keys_resolvablec                J   t        | |||||||||	|
|||      }|j                  t        k(  }t        |j                        }|s|j                  dd       t        t        |j                  t        |j                        ||j                  | ||||j                         |      S )u  Runtime fail-closed owner/key/role validator (§5.A/§5.C).

    Delegates the rule set to ``enforce_callback_owner`` (single source of
    truth) and maps it to a *registration decision*: PASS -> registration
    allowed; FAIL -> registration blocked (mismatch -> 등록 안 함, §5.C);
    HOLD -> blocked + escalate (§11). The prompt-text claim is NEVER
    authoritative — owner/key/role identity is (§5.A/regression 4).
    )r   r   r    r;   r!   normal_collector_cron_idfallback_callback_cron_iddispatch_cron_idr<   r=   r>   r?   r@   rA   r   u   callback registration BLOCKED at the runtime validator — owner/key/role did not fail-closed validate; the registration helper MUST NOT register this callback (§5.C / regression 23).)r   r   r   r   r   r   r   r    r!   r#   r%   )r   r   r   r/   r%   insertr   VALIDATOR_SCHEMAr   r   r0   )r   r   r    r;   r!   rC   rD   rE   r<   r=   r>   r?   r@   rA   enfr   r%   s                    r)   validate_callback_owner_runtimerI   Q   s    2 !!#/%!9";)$?/C  ;;$.3;;GN	
 )S0011!$!=!=!#%KKM r+   c           	         | j                   t        k7  r;t        d| j                    d| j                   d| j                  xs t
         d      y)uc  Hard gate used by the registration helper just before cron register.

    Raises ``CallbackRegistrationBlocked`` unless the validator PASSed. This
    is the structural "mismatch -> 등록 안 함" enforcement point (§5.C):
    a caller that ignores the return value still cannot register a
    self-owned callback because this raises (fail-closed).
    z'callback registration blocked: verdict=z classifications=z ()N)r   r   CallbackRegistrationBlockedr   r-   r   )results    r)   assert_registration_permittedrN      s_     ~~)5fnn5E F%556 7--N1NOqR
 	
 r+   c                      e Zd ZdZy)rL   zBRaised by ``assert_registration_permitted`` on a non-PASS verdict.N)r3   r4   r5   __doc__r8   r+   r)   rL   rL      s    Lr+   rL   )rG   r   r
   r   r   r   r   r   r   r   r   r   rI   rN   rL   )r   r   r   r   r    r   r;   r2   r!   r   rC   r2   rD   r2   rE   r   r<   r   r=   r   r>   r   r?   zSequence[str]r@   r   rA   r   r1   r   )rM   r   r1   None)rP   
__future__r   dataclassesr   r   typingr   r   r    dispatch.callback_owner_enforcerr	   r
   r   r   r   r   rG   r   r   r   r   r   r   r   tuplerI   rN   RuntimeErrorrL   __all__r8   r+   r)   <module>rY      sK    # ( + +  9 3 9 5 3 "C  ?  #
 #
 #
V *.
 (-,#$45 $>> > 	>
 '> > ,>  -> > > "&> > > > >  #!>B
)
	
$M, Mr+   