
    S%j4                    4   U 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 ddlmZmZ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<    G d de      Zd dZd!dZd"dZ dd	 	 	 	 	 	 	 	 	 d#dZ!	 	 	 	 d$dZ"	 	 	 	 	 	 	 	 d%dZ#y)&u  anu_v3.pre_authorized_executor_binding — gate decision → dry-run plan / HOLD packet (task-2553+5).

회장 §12 핵심 불변식 verbatim 박제:
  binding 입력 = gate decision 출력. decision != ALLOW 면 executor binding
  진행 금지. binding **dry-run only**. raw GO-ready packet 이 gate·binding
  accepted ALLOW 로 직접 들어가면 안 됨 (9-R.8 provenance precondition).

9-R.1 (CRITICAL LINT-5) — 비네트워크 dry-run plan emitter 강제 하드배리어:
  - GitHub client / ``gh`` subprocess / ``requests``·``urllib``·``httpx`` /
    token env read / 네트워크 호출 **import 자체 금지** (0건). 본 모듈은
    stdlib(hashlib/json/datetime/typing/pathlib) + anu_v3(gate/deriver) 만 import.
  - 출력 = **dry-run executor plan JSON** + (decision != ALLOW 시)
    HOLD_FOR_CHAIR packet **만**. 실 branch/commit/push/PR open 코드 경로 부재.
  - 실 PR open executor 호출 = task-2553+6 (별도 task) + 별도 회장 GO. 본 task 밖.

9-R.4 (MEDIUM LINT-4) — binding control-flow 는 decision 의 machine-readable
  4 field 만 검증·분기: ``schema`` / ``gate_module`` / ``decision`` /
  ``no_github_write_performed``. ``executor_contract``·``reasons`` prose 는
  control-flow 에 **사용 금지** (로깅만).

9-R.8 — binding precondition (3개 모두 충족 시에만 dry-run plan):
  (a) contract 에 유효 ``_provenance`` stamp 존재
  (b) ``evidence_bundle_sha256`` 가 실 evidence 번들 재해시와 일치
  (c) gate decision 이 그 provenance-stamped contract 위에서 산출됨
  하나라도 불충족(raw packet/위조/미스탬프 유래 ALLOW) → HOLD_FOR_CHAIR.

9-R.5 — callback injection = normal+fallback contract 주입까지만. policy marker
  가 collector-only/no-write/no-reactivation 보다 광의 권위면 거부 → HOLD.
    )annotations)datetimetimezone)AnyFinalMapping)DECISION_ALLOWDECISION_SCHEMA_NAMEGATE_MODULEevaluate)DERIVER_MODULESTATUS_DERIVEDcanonical_evidence_sha256derivez&anu_v3.pre_authorized_executor_bindingz
Final[str]BINDING_MODULEz1.0.0BINDING_VERSIONz.anu_v3.pre_authorized_executor_binding_plan.v1BINDING_PLAN_SCHEMADRY_RUN_PLAN_ONLYSTATUS_DRY_RUN_PLANHOLD_FOR_CHAIRSTATUS_HOLD)z/branch_create(dry-run: plan only, no git write)z(commit(dry-run: plan only, no git write)z$push(dry-run: plan only, no network)z<clean_replacement_pr_open(dry-run: plan only, no GitHub API)z8result_report_evidence_marker_create(dry-run: plan only)zAnormal_completion_callback_fire(dry-run: contract injection only)zFinal[tuple[str, ...]]_DRY_RUN_STEPSc                      e Zd ZdZy)BindingErroruU   binding precondition / 입력 검증 실패. fail-closed: 절대 dry-run plan 불가.N)__name__
__module____qualname____doc__     =/home/jay/workspace/anu_v3/pre_authorized_executor_binding.pyr   r   C   s    _r    r   c                 f    t        j                  t        j                        j	                  d      S )Nz%Y-%m-%dT%H:%M:%SZ)r   nowr   utcstrftimer   r    r!   _now_utcr&   G   s!    <<%../CDDr    c                   g }| 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 )uN   9-R.4: 4 machine field 만 검증. prose(reasons/executor_contract) 미사용.schemau"   decision.schema 위조/불일치: gate_moduleu'   decision.gate_module 위조/불일치: decisionzdecision != ALLOW (=u   ) → binding 진행 금지no_github_write_performedTz*decision.no_github_write_performed != true)getr
   appendr   r	   )r*   reasonss     r!   _decision_machine_fields_okr/   K   s    G||H!550h1G0JK	
 ||M"k15hll=6Q5TU	
 ||J>1"8<<
#;">>YZ	
 ||/0<CDNr    c                   g }| j                  d      }t        |t              sddgfS |j                  d      t        k7  r#|j	                  d|j                  d             |j                  d      dur|j	                  d       t        |j                  d	      t
              r|j                  d	      s|j	                  d
       |j                  d      }t        |t
              rt        |      dk7  r|j	                  d       d}||fS )u[   9-R.8 (a): contract 에 유효 ``_provenance`` stamp 존재. 반환 (stamped_sha, reasons)._provenance uF   raw-packet/미스탬프 contract: _provenance 부재 → bypass 차단
derived_byu   _provenance.derived_by 위조: recomputed_all_gate_booleansTz0_provenance.recomputed_all_gate_booleans != truederiver_versionu%   _provenance.deriver_version 미기록evidence_bundle_sha256@   u0   _provenance.evidence_bundle_sha256 형식 오류)r,   
isinstancer   r   r-   strlen)contractr.   provshas       r!   _validate_provenancer>   _   s    G<<&DdG$\]]]xx/-dhh|.D-GH	
 xx./t;IJdhh0137txx@ 	>?
((+
,Cc33s8r>IJ<r    T)dry_runc           	        t               }d}t        | t              rt        | j	                  dd            }n+t        |t              rt        |j	                  dd            }g }|dur|j                  d       t        | t              s|j                  d       t        |t              s|j                  d       t        |t              s|j                  d       |rt        |||      S |t        |       z  }t        |      \  }}||z  }t        |      }	|r#||	k7  r|j                  d|d	d
  d|	d	d
  d       d}
t        |      }|j	                  d      t        k7  r%|j                  d|j	                  d      d       n(|j	                  d      |k7  r|j                  d       nd}
t        |      }|j	                  d      | j	                  d      k7  r5|j                  d|j	                  d      d| j	                  d             |j	                  d      | j	                  d      k7  r|j                  d       |j	                  d      t        k7  r|j                  d       t        |      \  }}||z  }|rt        |||      S i dt        dt         dt"        d|d|dt$        ddddddddd ddd|
d!d"| j	                  d      | j	                  d#      | j	                  d      | j	                  d      d$d%|	d&|d'd(t'        t(              d)d*d+d,d-d.t        | j	                  d.      t&        t*        f      rt'        | j	                  d.g             iS g iS )/u   gate decision + provenance-stamped contract + 실 evidence 번들 → binding 결과.

    부작용 0 (GitHub write/network/subprocess/파일쓰기 0). 출력은
    dry-run plan JSON 또는 HOLD packet **만**.
    r2   task_idTuM   dry-run flag 부재/false → 실 write 경로 금지 (9-R.1 하드배리어)u,   decision 이 Mapping 아님 (spoofed/누락)u   contract 가 Mapping 아님u5   evidence_bundle 이 Mapping 아님 (재해시 불가)u]   evidence_bundle_sha256 불일치 (위조/치환된 번들 또는 raw-packet 유래): stamped=N   u   … recomputed=u   …FstatusuJ   deriver 재도출 status != DERIVED → provenance 진위 실증 실패 (=u   ) → raw-packet/위조 차단r;   u   contract 가 deriver(evidence_bundle) 산출물과 불일치 → 위조 _provenance/self-assert contract 차단 (9-R.8 진위 실증)r*   uK   decision 이 이 contract 산출물 아님 (raw-packet/spoofed): recompute=z != provided=u>   decision.task_id 가 contract 재평가와 불일치 (spoofed)uA   gate 재평가 결과 != ALLOW → executor binding 진행 금지r(   binding_modulebinding_versionts_utcr?   r+   no_network_performedno_subprocess_performedprecondition_9R8)provenance_stamp_presentevidence_bundle_sha256_match%decision_bound_to_provenance_contractcontract_matches_deriver_output consumed_decision_machine_fieldsr)   )r(   r)   r*   r+   r6   callback_injectiondry_run_executor_planu<   clean_replacement_pr_open_executor (NOT INVOKED — dry-run)uA   BLOCKED — task-2553+6 별도 task + 별도 회장 GO 전 금지)executorstepsreal_pr_opennoteu   dry-run plan only. 실 branch/commit/push/PR open 코드 경로 부재. decision prose(reasons/executor_contract) 는 control-flow 미사용 (로깅만).decision_prose_logged_onlyr.   )r&   r8   r   r9   r,   r-   _hold_packetr/   r>   r   _deriver_deriver   _gate_evaluater	   _callback_injection_contractr   r   r   r   listr   tuple)r*   r;   evidence_bundler?   tsrA   holdstamped_shaprov_reasonsrecomputed_shacontract_matches_deriver	rederivedrecomputed_decision
cb_reasonscb_contracts                  r!   bindrg   v   s    
BG(G$hll9b12	Hg	&hll9b12D d[	
 h(BCh(12ow/KLGR.. 	'11D !5X >KLD /?N{n4  +CR 01PSQSAT@UUXZ	
  %0I}}X.0x(++IK	
 
z	"h	.W	

 $(  )2z*hll:.FF,00<? @#<<
368	

 y)X\\)-DDTUz*n<O	

 ;?KJJDGR..)%).) 	?) 	"	)
 	7) 	%) 	4) 	$T) 	) 	"4) 	(,,059/G	
)" 	+ll8,#<<6 Z0)16Q)R	-
#). 	!./)0 	k1)2 	 V.)_"
3)< 	`?)D 	%hll95e}E X\\)R01'
E) )L 	'
E) )r    c           
     J   | j                  d      }t        |t              sdgi fS |j                  d      }t        |t              rt        |j                  d      t              sdgi fS |d   }g }|j                  d      dk7  r$|j                  d|j                  d      d	       d
D ]+  }|j                  |      dus|j                  d| d       - |j                  d      dus|j                  d      dur|j                  d       |r|i fS g dddddddddfS )u   9-R.5: callback policy marker → normal+fallback 주입 contract.

    collector-only / no write / no dev reactivation / no dispatch / no closeout
    가 명시 인코딩돼야 함. 그보다 광의 권위면 거부 → HOLD. 권한 확대 0.
    evidenceu/   callback marker 부재 (evidence 블록 없음)callback_policy_markerobserved_valueu'   ALLOW + callback marker 부재 → HOLD	authoritycollector_onlyzcallback authority escalation: u!    (collector_only 아님) → HOLD)no_writeno_dev_reactivationno_dispatchno_closeoutTu   callback 광의권위: u    != true → HOLDnormalfallbacku)   callback normal/fallback != true → HOLDz6dry-run contract injection (no registration performed))rr   rs   rl   rn   ro   rp   rq   injection_mode)r,   r8   r   r-   )r\   evobjovr.   ks         r!   rY   rY     sW    
		Z	(Bb'"BCRHH
&&)
*Cc7#: !7, ;;R@@		BG	vvk..-bff[.A-D E/ /	
 O K66!9D NN4QC7HIJK 
vvht#rvvj'9'EBC}
)#'V		
 r    c                X    t         t        t        || t        ddddt	        |      d i dddS )NTun   HOLD_FOR_CHAIR packet. executor binding 미진행. 실 PR open 0. 회장 보고 대상 (자동 진행 금지).)r(   rD   rE   rF   rA   rC   r?   r+   rG   rH   hold_reasonsrP   rO   report_to_chairrT   )r   r   r   r   rZ   )rA   r]   r.   s      r!   rV   rV   /  sA     &(*%) $#'W!% ;! r    N)returnr9   )r*   Mapping[str, Any]r|   	list[str])r;   r}   r|   ztuple[str, list[str]])
r*   r   r;   r   r\   r   r?   boolr|   dict[str, Any])r\   r}   r|   z tuple[list[str], dict[str, Any]])rA   r9   r]   r9   r.   r~   r|   r   )$r   
__future__r   r   r   typingr   r   r   !anu_v3.pre_authorized_action_gater	   r
   r   r   rX   &anu_v3.pre_authorized_contract_deriverr   r   r   r   rW   r   __annotations__r   r   r   r   r   	Exceptionr   r&   r/   r>   rg   rY   rV   r   r    r!   <module>r      s  < # ' & &   F
 E% %"R Z R"5 Z 5*Z **& `9 `E(8 II I 	I
 I IX*&*%*Z$-r    