
    4j<                       d Z ddlmZ ddlZddlZddlZddlZddlm	Z	m
Z
 ddlmZ ddlmZmZmZmZ  ee      j'                         j(                  d   ZdZd	Zd
ZdZdZdZd!dZ edd      Zeej<                  d<    edd      Zeej<                  d<    edd      Z  edd      Z!ejD                  Z"ejF                  Z#ejH                  Z$ejJ                  Z%ejL                  Z&e jN                  Z'ejP                  Z(ejR                  Z)e!jT                  Z*e!jV                  Z+e!jX                  Z,e!jZ                  Z-e!j\                  Z.e!j^                  Z/e	 G d d             Z0d"dZ1d"dZ2d"dZ3d"dZ4d#dZ5d$dZ6d%d&dZ7e8d k(  r e9 e7             y)'u  task-2553+51 — TRACK 2 runtime structure SMOKE PILOT (read-only).

회장 3-track 배치 Track 2. goal_type = ``runtime_structure_smoke_pilot``.

단 하나의 짧은 read-only goal 로 +44 신구조(callback owner/key registry
consistency)가 실제로 작동하는지 검증한다. 핵심 = 회장이
gate/HOLD/allowed/forbidden 을 풀어쓰지 않아도 ANU 가 default low-risk
read-only profile 을 자동 산출하고 실 entrypoint 를 직접 호출(mock-only
금지)해 검증한다.

실 entrypoint (direct call, no mock):

  * ``anu_v3.callback_4tuple_registry.Callback4TupleRegistry`` — 영구
    append-only 4-tuple ledger 를 READ-ONLY 로만 질의 (classify /
    history_for / validate_record / validate_identity). append /
    mark_completed 절대 호출 안 함 (ledger byte-0).
  * ``anu_v3.callback_owner_validator.validate_callback_owner_runtime``
    — 독립 ANU key vs executor self key 로 owner/key/role fail-closed
    검증.
  * ``anu_v3.authoritative_verdict_selector.select_authoritative_verdict``
    — self-chain verdict 영구 비권위 + independent-ANU verdict 만
    authoritative.

Layer A / NO-CRON / READ-ONLY: ZERO cron register/remove, ZERO
dispatch, ZERO merge, ZERO PR, ZERO branch/commit/push, ZERO
credential, ZERO subprocess/cokacdir exec, ZERO ledger mutation, ZERO
기존 산출물 변조. 본 스크립트의 유일한 write 는 §6 allowlist 의
task-2553+51 신규 산출물뿐이며 그것도 ``--emit`` 시에만 수행한다.

executor(이참나, key a999e2ea4c06d2fb) self-collector / self-adjudication
/ self-Codex / self-dispatch 0. authoritative verdict 는 독립 ANU
collector(callback ANU key c119085addb0f8b7)가 산출하며 본 세션은
self-chain QUARANTINED 임을 *증명* 만 한다.
    )annotationsN)	dataclassfield)Path)AnyDictListOptional   ztask-2553+51runtime_structure_smoke_pilotc119085addb0f8b7a999e2ea4c06d2fb
6937032012)
z*memory/events/task-2553+51.pilot-plan.jsonz7memory/events/task-2553+51.selected-policy-profile.jsonz2memory/events/task-2553+51.gate-hold-decision.json0memory/events/task-2553+51.execution-result.jsonz<memory/events/task-2553+51.independent-collector-result.jsonz3memory/reports/task-2553+51.pilot-summary_260518.mdz)scripts/runtime_smoke_pilot_2553plus51.pyz7tests/regression/test_runtime_smoke_pilot_2553plus51.pyz(memory/events/task-2553+51.decision.jsonz&memory/events/task-2553+51.result.jsonc                ,   t         j                  j                  | t        |z        }||j                  t        d|  d|       t         j                  j                  |      }|t        j                  | <   |j                  j                  |       |S )z=Hermetic file-path import (collision-proof vs tests/ shadow).zcannot load z from )
	importlibutilspec_from_file_locationROOTloaderImportErrormodule_from_specsysmodulesexec_module)modnamerelpathspecmods       =/home/jay/workspace/scripts/runtime_smoke_pilot_2553plus51.py_loadr!   H   s{    >>11'4'>JD|t{{*L	yABB
..
)
)$
/CCKKKKC J    z dispatch.callback_owner_enforcerz#dispatch/callback_owner_enforcer.pyzanu_v3.callback_4tuple_registryz"anu_v3/callback_4tuple_registry.pyzanu_v3.callback_owner_validatorz"anu_v3/callback_owner_validator.pyz%anu_v3.authoritative_verdict_selectorz(anu_v3/authoritative_verdict_selector.pyc                  d    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
<   ddZy)Checkstrname
entrypointboolpassedexpectedobserved)default_factoryDict[str, Any]detailc                    | j                   | j                  | j                  | j                  | j                  | j
                  dS )Nr&   r'   r)   r*   r+   r.   r0   )selfs    r    to_jsonzCheck.to_json{   s6    II//kkkk
 	
r"   Nreturnr-   )__name__
__module____qualname____annotations__r   dictr.   r2    r"   r    r$   r$   r   s/    
IOLMM"48FN8
r"   r$   c                    t        t              } t        |       }g }d}d}dD ]  }|j                  |      }|j	                  |      }|j                  |      }|t        |      ndg}	|r	|t        k7  rd}|	rd}|j                  |t        |      |t        |dd      |	d        |j	                  d	      }
|
t        k(  }|xr |xr |}t        d
d|dd| d| d| t        |       d||
d      S )u  +44 registry 실 entrypoint READ-ONLY 질의 일관성.

    실제 영구 ledger 를 query 메서드로만 읽는다 (append/mark_completed
    호출 0 → ledger byte-0). 알려진 COMPLETED task 가 later-session 에서도
    NORMAL_CALLBACK_COMPLETED 로 재확인되는지, 부재 task 가 fail-safe
    NO_LEDGER_RECORD 인지, 기록이 validate_record 를 통과하는지 검증.
    T)ztask-2553+47ztask-2553+48)task_idN	NO_RECORDFstatus)r<   history_linesclassifylatest_statusvalidate_record_reasonsztask-2553+51-NONEXISTENT-PROBEz1A. callback_4tuple_registry read-only consistencyzhanu_v3.callback_4tuple_registry.Callback4TupleRegistry.{history_for,classify,latest_for,validate_record}zwknown COMPLETED tasks -> NORMAL_CALLBACK_COMPLETED & validate_record clean; absent task -> NO_LEDGER_RECORD (fail-safe)zcompleted_ok=z record_valid_ok=z failsafe_ok=)ledger_pathledger_mutatedsampledabsent_probe_verdictr0   )default_ledger_pathr   Callback4TupleRegistryhistory_forr@   
latest_forvalidate_recordNORMAL_CALLBACK_COMPLETEDappendlengetattrNO_LEDGER_RECORDr$   r%   )ledgerregrE   completed_okrecord_valid_oktidhistverdictlatestrec_reasonsabsent_verdictfailsafe_okr)   s                r    check_a_registry_readonlyr\      s=    !&F
 
(C$&GLO/ 
s#,,s,+$171Cof-+w";; L#O!$T#!(4!@+6	

& \\*J\KN $44K=o=+F@=M L>):?:K L&-) v;#$2	
 r"   c                    t        t        t        ddddt        dd	      } t	        dt
        t
        d| }t	        dt        t        d| }|j                  d	k(  xr |j                  xr |j                  }|j                  d
k(  xr |j                   xr |j                   }|xr |}t        dd|dd| d| |j                         |j                         d      S )u'  +49 owner/key/role fail-closed validator 실 entrypoint.

    독립 ANU key(c119085addb0f8b7) collector -> PASS / registration
    allowed / owner_is_independent_anu. executor self key
    (a999e2ea4c06d2fb) collector -> FAIL / registration BLOCKED
    (self-collector 0 구조적 강제).
    ANUzANU-2553p51-NCzANU-2553p51-FBzDG-2553p51-dev7-ichamnaTcokacdir_cron_direct)	r<   executor_keycollector_rolenormal_collector_cron_idfallback_callback_cron_iddispatch_cron_idchat_idprompt_claims_anu_collector
entry_path)collector_keycollector_owner_keyPASSFAILz>B. callback_owner_validator fail-closed (ANU vs executor self)z?anu_v3.callback_owner_validator.validate_callback_owner_runtimezzANU key collector -> PASS+allowed+independent; executor self key collector -> FAIL+blocked (self-collector structurally 0)zanu_ok=z self_blocked=)anu_key_resultexecutor_self_key_resultr0   r:   )r9   TASK_IDEXECUTOR_SELF_KEYCHAT_IDvalidate_callback_owner_runtimeANU_CALLBACK_KEYrW   registration_allowedowner_is_independent_anur$   r2   )commonanuselfkanu_okself_blockedr)   s         r    check_b_owner_validatorrz      s     &!1"22$()
F * &, C
 , '- E 	v 	)$$	)((  	 	/***	/... 
 $FM*M6(.?!kkm(-
 r"   c                 j   t        t              } t        t        dt        t
        t
        dddd	      }t        |gt        |       }t        t        dt        t
        t        dd	dd
	      }t        ||gt        |       }|j                  t        k(  xr0 |j                  dk(  xr |j                  du xr |j                  dk(  }|j                  t        k(  xr  |j                  dk(  xr |j                  dk(  }|xr |}t        dd|dd| d| |j                         |j                         d      S )u.  +49 authoritative verdict selector 실 entrypoint.

    executor self-session 산출물(self-chain) 은 PASS 라도 영구 비권위
    (QUARANTINED / PENDING / verdict FAIL). 독립 ANU collector verdict
    (collector_key=ANU, role=ANU, !=executor, not self-session) 만
    AUTHORITATIVE_PASS.
    rj   executorTindependent_anuz8executor self-session pilot result (NEVER authoritative))	kindrW   r<   r`   rh   ra   session_is_executor_selfclaimed_originr.   )r<   anu_keysr^   Fz1independent ANU collector verdict (authoritative)rk   Nr   r   u7   C. authoritative_verdict_selector (self-chain非권위)zBanu_v3.authoritative_verdict_selector.select_authoritative_verdictz_self-chain only -> PENDING/FAIL (no authoritative PASS); +independent ANU -> AUTHORITATIVE_PASSzself_quarantined=z independent_authoritative=)self_chain_onlywith_independent_anur0   )sortedDEFAULT_ANU_KEYSVerdictRecordKIND_COLLECTOR_RESULTrn   ro   select_authoritative_verdictrr   classificationAUTHORITATIVE_VERDICT_PENDINGrW   authoritative_verdictindependent_anu_countAUTHORITATIVE_PASSr$   r2   )r   
self_chain	self_onlyindependentwith_independentself_quarantinedindependent_authoritativer)   s           r    check_c_authoritative_selectorr      s{    &'H"&'!!%(I
J -	gI  "&&!&(B
K 4	[!7X
 	  $AA 	1'	1++t3	1 ++q0	  	''+== 	8$$.	822a7 
 ;";FF'1   01 2))B(CE  )002$4$<$<$>
 r"   c                     t        t              } t        t        v }t        t        |       }t        t        |        }|xr |xr |}t        dd|dd| d| d| | t        t        d      S )	u#  callback owner/key registry 횡단 일관성 (회장 권고 pilot 후보).

    enforcer/validator 가 쓰는 독립 ANU key 집합이 회장 §10 가 강제하는
    callback key 와 동일하고, executor self key 는 ANU key 가 아님을
    is_anu_key 실 함수로 교차 확인.
    z7D. callback owner/key registry cross-module consistencyz>dispatch.callback_owner_enforcer.{DEFAULT_ANU_KEYS,is_anu_key}zYmandated callback key == registered independent ANU key; executor self key NOT an ANU keyzmandated_in_set=z mandated_is_anu=z self_not_anu=)registered_anu_keysmandated_callback_keyexecutor_self_keyr0   )r   r   rr   
is_anu_keyro   r$   )r   mandated_in_setmandated_is_anuself_not_anur)   s        r     check_d_key_registry_consistencyr   >  s     &'H&*::O !18<O!"3X>>LAA\FF+ //@~l^= $,%5!2
 r"   c                     t               t               t               t               g} t	        d | D              }dt
        t        dt        ddd|rdnddd| D cg c]  }|j                          c}d	S c c}w )
uD   모든 실 entrypoint 를 직접 호출 (mock-only FAIL). read-only.c              3  4   K   | ]  }|j                     y wN)r)   ).0cs     r    	<genexpr>zrun_pilot.<locals>.<genexpr>e  s     .!QXX.s   zanu_v3.runtime_smoke_pilot.v1u   dev7-team 이참나FTrj   rk   %DEFERRED_TO_INDEPENDENT_ANU_COLLECTOR)schemar<   	goal_typer|   r`   	mock_onlyreal_entrypoints_calledrD   self_chain_verdictself_chain_authoritativeauthoritative_selectionchecks)	r\   rz   r   r   allrn   	GOAL_TYPEro   r2   )r   
all_passedr   s      r    	run_pilotr   ]  s     	"#!&((*	F .v..J 2))#'(2f$)#J(./1199;/  0s   A4c                    | t         vrt        d|  d      t        | z  }|j                  j	                  dd       |j                  |d       y )Nz	REFUSED: u'    not in §6 allowlist (write 0 outside)T)parentsexist_okzutf-8)encoding)EXPECTED_FILES
SystemExitr   parentmkdir
write_text)reltextps      r    _writer   x  sL    
. 9SE)PQRRs
AHHNN4$N/LLL(r"   c                >   t        j                         }|j                  ddd       |j                  |       }t	               }t        t        j                  |dd             |j                  r"t        dt        j                  |dd             |d	   d
k(  rdS dS )Nz--emit
store_trueu5   write §6 allowlisted artifacts (default: print only))actionhelpF   )ensure_asciiindentr   r   rj   r   r   )
argparseArgumentParseradd_argument
parse_argsr   printjsondumpsemitr   )argvapnsresults       r    mainr     s    		 	 	"BOOD  
 
t	B[F	$**V%
:;	ww>JJvE!<	
 +,61=A=r"   __main__)r   r%   r   r%   )r4   r$   r3   )r   r%   r   r%   r4   Noner   )r   zOptional[List[str]]r4   int):__doc__
__future__r   r   importlib.utilr   r   r   dataclassesr   r   pathlibr   typingr   r   r	   r
   __file__resolver   r   rn   r   rr   ro   rp   r   r!   _enfr   _reg_val_selrH   rG   rL   rP   rK   rq   r   r   r   r   SELF_CHAIN_QUARANTINEDr   r   r   r$   r\   rz   r   r   r   r   r   r5   r   r:   r"   r    <module>r      s  !D #    
 (  , , H~''*
+	 & & 
 /1VW26. /.0TU15- ..0TU+.
 44 ..  :: (( &&"&"F"F (( __
#@@ ""44  $ B B ,, 22  
 
 
&6r6rCL>6)>$ z
TV
 r"   