
    IjfQ                    "   U d Z ddlm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 ddlmZmZmZ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 dZ de!d<   dZ"de!d<   dZ#de!d<   dZ$de!d<   dZ%de!d<   dZ&de!d<   dZ'de!d<   dZ(de!d<   dZ)de!d<    G d d e*      Z+d3d!Z,d4d"Z-dd#dd$	 	 	 	 	 	 	 	 	 	 	 d5d%Z.d6d&Z/	 d7	 	 	 	 	 d8d'Z0d9d(Z1d:d)Z2	 	 	 	 	 	 	 	 d;d*Z3d<d+Z4	 	 	 	 	 	 	 	 	 	 d=d,Z5dd-ed.ddd/	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d>d0Z6d?d1Z7g d2Z8y)@u  anu_v3.pre_authorized_activation_runner — task-2553+1 F1-solo clean
replacement PR open **활성화 오케스트레이션** (task-2553+6 §7.2, 9-R.1/9-R.3/9-R.4).

회장 §1 핵심: GO-ready packet 을 사람이 읽고 복붙해 PR open 을 승인하는 구조
제거. builder→deriver→gate→ALLOW validator→binding preflight→(ALLOW + 4 조건
전부 + ``activate=True``) 일 때만 §9-R.1 4 primitive 실 git.

9-R.3 실 write 도달 경로 (엄격, 하나라도 불충족 → HOLD packet, 실 write 0):
  builder → deriver(STATUS_DERIVED) → gate(ALLOW) →
  binding.bind(dry_run=True) preflight (STATUS_DRY_RUN_PLAN_ONLY:
  provenance 유효 + evidence_bundle_sha256 재해시 일치 + decision machine
  4-field) → ALLOW validator → (4 조건 전부 + ``activate=True``).

9-R.1 허용 실 write primitive = **이 4개만** (그 외 GitHub mutation 정적 부재):
  ① 신규 branch 생성(fresh origin/main base) ② commit(6 effective-diff 파일만)
  ③ push(신규 branch only) ④ clean replacement PR open(1회).
  금지(코드상 부재, 9-R.4): merge / PR-merge / auto-merge /
  PR#102 원본 mutation / same-branch push / source branch push.

9-R.4 merge-impossibility = 설계·정적 증명: 본 모듈에 merge/PR-merge/
  auto-merge/PR#102-mutation/same-branch-push 호출·API·import **부재**.
  실 git 호출은 화이트리스트 4 primitive 함수만 경유.

9-R.5 자동화 단위 분리: collector handoff / adjudication hook / HOLD packet
  writer = 독립 함수 (runner 비대화 방지, 독립 테스트 가능).

9-R.6 불변식: deriver/gate/binding 의 **public API 만 호출**
  (``derive`` / ``evaluate`` / ``bind``). private helper 복제·import 금지.
    )annotationsN)datetimetimezone)Path)AnyFinalMappingSequence)DECISION_ALLOWDECISION_SCHEMA_NAMEGATE_MODULEevaluate)STATUS_DERIVEDderive)NEW_CLEAN_REPLACEMENT_BRANCHTASK_2553P1_EFFECTIVE_DIFF_6build_evidence_bundle)STATUS_DRY_RUN_PLANbindz'anu_v3.pre_authorized_activation_runnerz
Final[str]RUNNER_MODULEz1.0.0RUNNER_VERSIONz*anu_v3.pre_authorized_activation_result.v1ACTIVATION_RESULT_SCHEMADRY_RUN_VERIFIEDSTATUS_DRY_RUN_VERIFIED#ACTIVATED_CLEAN_REPLACEMENT_PR_OPENSTATUS_ACTIVATED_PR_OPENHOLD_FOR_CHAIRSTATUS_HOLDREFUSED_FAIL_CLOSEDSTATUS_REFUSED)branch_create_fresh_basecommit_six_effective_diff_filespush_new_branch_onlyclean_replacement_pr_open_oncezFinal[tuple[str, ...]]ALLOWED_WRITE_PRIMITIVES)zgh pr mergez--automerge_pull_requestsame_branch_pushsource_branch_pushSTATICALLY_ABSENT_MUTATIONSc                      e Zd ZdZy)RunnerErroruO   orchestration precondition 실패. fail-closed: 절대 실 write 진입 불가.N)__name__
__module____qualname____doc__     >/home/jay/workspace/anu_v3/pre_authorized_activation_runner.pyr+   r+   V   s    Yr1   r+   c                 f    t        j                  t        j                        j	                  d      S )Nz%Y-%m-%dT%H:%M:%SZ)r   nowr   utcstrftimer0   r1   r2   _now_utcr7   Z   s!    <<%../CDDr1   c                   g }t        | t              sdgS | j                  d      t        k7  r#|j	                  d| j                  d             | j                  d      t
        k7  r#|j	                  d| j                  d             | j                  d      t        k7  r$|j	                  d| j                  d      d       | j                  d	      d
ur|j	                  d       |S )u   gate decision 의 machine-readable 4 field 만 검증 (9-R.4 정렬).

    ``reasons`` / ``executor_contract`` prose 는 control-flow 미사용.
    반환 = 위반 사유 목록(빈 list = ALLOW 유효).
    u,   decision 이 Mapping 아님 (spoofed/누락)schemau   decision.schema 불일치: gate_moduleu    decision.gate_module 불일치: decisionzdecision != ALLOW (=)no_github_write_performedTz*decision.no_github_write_performed != true)
isinstancer	   getr   appendr   r   )r;   bads     r2   allow_decision_validatorrB   a   s     Ch(>??||H!55

0h1G0JKL||M"k1

5hll=6Q5TUV||J>1

)(,,z*B)EQGH||/0<

?@Jr1    out_pathstagedetailc                   dt         t        t               | t        |t	        |      dddt        |xs i       dd}|5t        |      j                  t        j                  |dd      dz   d	
       |S )uJ   §11 HOLD packet. 실 write 0. report_to_chair=True. 자동 진행 금지.z(anu_v3.pre_authorized_activation_hold.v1FTu   HOLD_FOR_CHAIR — activation runner 미진행. 실 PR open 0. 회장 보고 대상 (무한 재시도 금지, 자동 진행 금지).)r9   runner_modulerunner_versionts_utctask_idstatusrF   hold_reasonsreal_write_performedgithub_mutation_performedreport_to_chairrG   note   )indentensure_ascii
zutf-8)encoding)
r   r   r7   r   listdictr   
write_textjsondumps)rL   reasonsrE   rF   rG   packets         r2   write_hold_for_chair_packetr_   x   s     =&(*W %%*v|$TF$ X!!JJvae<tC 	" 	
 Mr1   c                    dt               | j                  dd      | j                  d      | j                  d      dddddddd	gd
S )u   post-result collector 로 넘길 handoff 패킷 (collector-only, no-write).

    callback 은 dev 재가동·write·merge·closeout 권한 없음 — 결과 회수 전용.
    z5anu_v3.pre_authorized_activation_collector_handoff.v1rL   rC   rM   	pr_numbercollector_onlyTcodex_post_result_auditanu_adjudication)r9   rK   rL   activation_statusra   	authorityno_writeno_dev_reactivationno_dispatchno_closeoutno_mergehandoff_targets)r7   r?   )activation_results    r2   collector_handoffrn      s^     J*$((B7.228<&**;7%#57IJ r1   c           	         | j                  d      }|t        t        fv }dt               | j                  dd      |rdndt	        |      t	        |      ddd	S )
uO   ANU 1차 해석 + Codex adjudication re-review 연결 hook (loop 제어값만).rM   z0anu_v3.pre_authorized_activation_adjudication.v1rL   rC   u#   fail-closed chain 전 단계 통과u   HOLD/refuse — chair 보고FT)r9   rK   rL   anu_first_interpretationcodex_audit_attachedauto_converge_eligiblecritical_7_detectedreport_to_chair_only_on_final)r?   r   r   r7   bool)rm   codex_auditrM   auto_converges       r2   adjudication_hookrx      sq    
 ""8,F  M
 E*$((B7  2/ $[ 1"&}"5$)- r1   c                $   t        j                  | t        |      dddd      }|j                  dk7  rDt	        dj                  |        d|j                   d|j                  j                                |j                  j                         S )	NTx   F)cwdcapture_outputtexttimeoutcheckr    z rc=z: )	
subprocessrunstr
returncoder+   joinstderrstripstdout)cmdr{   outs      r2   _runr      s    
..S$T3eC ~~xx}oT#..!1CJJ4D4D4F3GH
 	
 ::r1   c                @    t        ddd||g|        t        g d|       S )uH   ① 신규 branch 생성 (fresh origin/main base). source branch 무관.gitcheckoutz-B)r   	rev-parsez--abbrev-refHEADr   )repobase_sha
new_branchs      r2   _primitive_branch_creater      s%    %T:x	8$?<dCCr1   c                    t        t        |            t        t        t                    k7  rt        d      t	        dddg||        t	        ddd|g|        t	        g d|       S )uL   ② commit — effective-diff 6 파일만 stage/commit (그 외 add 금지).uD   commit 거부: 6 effective-diff 파일과 정확 일치하지 않음r   addz--commitz-m)r   r   r   )sortedsetr   r+   r   )r   filesmessages      r2   _primitive_commit_sixr      si     c%jVC(D$EFFR
 	
 	%	%u	%t,%4	)40,d33r1   c                L    |dk(  sd|v rt        d      t        dddd|g|       S )uO   ③ push — 신규 branch only (source branch push / same-branch push 부재).ztask/task-2553-dev5dev5u3   push 거부: source/same-branch push 금지 (9-R.1)r   pushz-uorigin)r+   r   )r   r   s     r2   _primitive_push_new_branchr      s6    **f
.BOPPh
;TBBr1   c                0    t        dddddd|d|d|g|       S )	uK   ④ clean replacement PR open (1회). merge/auto-merge 부재 — open 만.ghprcreatez--basemainz--headz--titlez--bodyr   )r   r   titlebodys       r2   $_primitive_clean_replacement_pr_openr      s<     	
 	 r1   F(7346df8260803308df30a6d04ec32d66d4cdfa5b)evidence_bundleactivater   r   hold_out_pathbuilder_kwargsc           
        t               }t        |       }t        t              r=t	        fddD              r)t        t        j                  dd            dg|d      S 	 t        d@d	|it        |xs i       t        t              st        d
dg|d      S t        j                  dd            }
t              }|j                  d      t        k7  r>t        |
dgt        |j                  dg             z   |dd|j                  d      i      S |d   }t        |      }t        |      }|rAt        |
dg|z   t        |j                  dg             z   |dd|j                  d      i      S t!        ||d      }|j                  d      t"        k7  r>t        |
dgt        |j                  dg             z   |dd|j                  d      i      S |j                  d      t        k(  | |j                  d      t"        k(  |j                  di       j                  d       du xrH |j                  di       j                  d!      du xr# |j                  di       j                  d"      du d#}t%        |j'                               }i d$t(        d%t*        d&t,        d'|d|
d(|d|j                  d      d)|j                  d      d*|d+|d,t/        |      d-t        t0              d.d/d0d/d1dd2d/}|r|s)t2        |d<   d/|d3<   |j                  d4      |d4<   d5|d6<   |S 	 t5        |||      }t7        |t8        d7      }t;        ||       t=        ||d8d9      }t@        |d<   d|d3<   d|d.<   ||d<<   ||d=<   ||d><   tC        |      |d1<   d?|d6<   |S # t        $ r}	t        d
d|	 g|d      cY d}	~	S d}	~	ww xY w# t>        $ r}	t        |
d:|	 g|d;      cY d}	~	S d}	~	ww xY w)Au   builder→deriver→gate→ALLOW validator→binding preflight→(activate+4조건)
    실 git. 부작용: activate=True + 전 precondition 충족 시에만 4 primitive.
    그 외 전부 dry-run (실 write 0, fail-closed).
    c              3  &   K   | ]  }|v  
 y wNr0   ).0kr   s     r2   	<genexpr>z!run_activation.<locals>.<genexpr>%  s      
  
s   )r^   	readinessmarker_kindgo_readyrL   rC   u]   raw GO-ready packet 직접 입력 차단 (gate normalization bypass 금지, 9-R.3/§9#3·#21)input_guard)rE   rF   N	repo_pathztask-2553+1u   builder 실패: builderu:   evidence_bundle 이 Mapping 아님 (builder 산출 무효)rM   zderiver STATUS != DERIVEDrN   deriverderivation_statusrD   contractz"gate decision != ALLOW (validator)r]   gate_allow_validatorgate_decisionr;   T)r;   r   r   dry_runz-binding preflight STATUS != DRY_RUN_PLAN_ONLYbinding_preflightbinding_statusprecondition_9R8provenance_stamp_presentevidence_bundle_sha256_match%decision_bound_to_provenance_contract)deriver_status_derivedgate_decision_allowbinding_preflight_dry_run_plan.provenance_and_sha_and_decision_machine_4fieldr9   rI   rJ   rK   derived_contractbinding_preflight_statusfour_conditionsall_four_conditions_metactivate_flagallowed_write_primitivesrP   Fmerge_performedra   rQ   rO   dry_run_executor_planu   DRY_RUN_VERIFIED — builder→deriver→gate(ALLOW)→binding preflight(DRY_RUN_PLAN_ONLY) 전 단계 통과. activate=True + 4조건 전부 충족 시에만 실 PR open. 현재 dry-run 유지 (실 write 0, 9-R.5 #16).rR   zAtask-2553+1 F1-solo clean replacement (pre-authorized activation)z%task-2553+1 F1-solo clean replacementu   PRE_AUTHORIZED clean replacement PR open (gate ALLOW + binding DRY_RUN_PLAN preflight). PR #102 원본 보존, merge 0, same-branch push 0.uI   실 primitive 실패 (실 write 부분 발생 가능 — 회장 보고): real_primitivecreated_branchcommit_headpr_urlu}   ACTIVATED — clean replacement PR open 완료 (§9-R.1 4 primitive only). merge 0, PR#102 원본 보존, same-branch push 0.r0   )"r7   r   r>   r	   anyr_   r   r?   r   rY   	Exception_deriver_deriver   rX   _gate_evaluaterB   _binding_bindr   allvaluesr   r   r   ru   r%   r   r   r   r   r   r   r+   r   _extract_pr_number)r   r   r   r   r   r   r   tsr   erL   
derivationr   r;   validator_bad	preflightr   all_fourbasebrheadr   s    `                    r2   run_activationr     s.    
B	?D /7+ 
G
 
 /O''	267K '# 
"3 #'(<"#=O ow/*IJ"	
 	
 /%%i45G !1J~~h>1*():>>."567"')AB
 	
 *%H h'H -X6M*12]B8<<	2./0"(#X\\*%=>
 	
 '	I }}X"55*<=9==456"%$immH&=>
 	
 #-..":n"L#00*3--*A+ MM,b155*   0"599. 	 0"5997 O( ?))+,H* 	. 	"	
 	7 	H 	j1 	#IMM($; 	? 	"8 	h 	#D)A$B 	$U 	5 	T  	5!D( 0X',#$(16M(N$%> 	V 
%dHjA$(O

 	#4453	
  .DN#'D	 (,D	$%D	DDN*62D	= 	L Ky  
*s#$"	
 	

R  
*XYZX[\]""	
 	

s<   %N' 88O '	O0OOO	O6O1+O61O6c                    | j                  d      j                  dd      d   }|j                         rt        |      S d S )N/   )rstriprsplitisdigitint)r   tails     r2   r   r     s9    ==$$S!,R0D3t90D0r1   )r   r   r   r   r   r   r%   rB   r_   rn   rx   r   )returnr   )r;   r   r   	list[str])rL   r   r]   Sequence[str]rE   str | Path | NonerF   r   rG   Mapping[str, Any] | Noner   dict[str, Any])rm   Mapping[str, Any]r   r   r   )rm   r   rv   r   r   r   )r   r   r{   r   r   r   )r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   )r   r   r   r   r   r   )
r   r   r   r   r   r   r   r   r   r   )r   z
str | Pathr   r   r   ru   r   r   r   r   r   r   r   r   r   r   )r   r   r   z
int | None)9r/   
__future__r   r[   r   r   r   pathlibr   typingr   r   r	   r
   !anu_v3.pre_authorized_action_gater   r   r   r   r   &anu_v3.pre_authorized_contract_deriverr   r   r   -anu_v3.pre_authorized_evidence_bundle_builderr   r   r   &anu_v3.pre_authorized_executor_bindingr   r   r   r   __annotations__r   r   r   r   r   r    r%   r)   r   r+   r7   rB   r_   rn   rx   r   r   r   r   r   r   r   __all__r0   r1   r2   <module>r     s  < #   '  0 0  

 Fz E$
 $'S * S&8  8'L * L*Z *2
 24 0 7 3 Z) ZE6 #''+     	 
   %   L4 -1() <D
4

4$
4/2
4
4C
(+368 152>'+/3CC .C 	C
 C C %C -C CL1
r1   