
    jU                    "   d Z ddlmZ ddlZddlZddlmZ ddlZ ee	      j                         j                  d   Z ee      ej                  vr"ej                  j                  d ee             dZd$dZ ej$                  d	      d
        Z ej$                  d	      d        Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d Z"d Z#d Z$d%dZ%d Z&ejN                  jQ                  dg d      d         Z)d! Z*d" Z+d# Z,y)&u  regression — task-2605 Track B READ_ONLY_OPERATIONAL_PILOT.

9-stage 실 entrypoint 자동 결선을 *증명* 한다. 본 테스트는 실
entrypoint 를 직접 호출(mock-only/문서-only 금지)하며 read-only —
write 0, 실 dispatch 0, ledger byte-0 (direct write 0).

mock-only FAIL: 음성 케이스로 (i) 미매핑 goal_type fail-closed,
(ii) executor self key callback 구조적 차단, (iii) dead-man/fallback
진행 트리거 하드 FAIL, (iv) self-chain QUARANTINED, (v) Track A
durable-success EVENT 소비 event-driven 분기(A 미완→NON_BLOCKING /
A 완료→cancel-on-success live remove 또는 CANCEL_FAILED_CLASSIFIED)
를 검증한다.
    )annotationsN)Path   %scripts/run_operational_pilot_2605.pyc                    t         j                  j                  | t        t        z        }|r|j
                  sJ t         j                  j                  |      }|j
                  j                  |       |S N)	importlibutilspec_from_file_locationROOT	PILOT_RELloadermodule_from_specexec_module)modnamespecmods      C/home/jay/workspace/tests/regression/test_operational_pilot_2605.py_loadr      sW    >>11'4);KLDDKK
..
)
)$
/CKKC J    module)scopec                     t        d      S )N_p2605_pilot)r    r   r   pilotr   &   s      r   c                "    | j                         S r   )	run_pilotr   s    r   runr    +   s     ??r   c                t    | j                   dk(  sJ d| j                   vsJ dD ]  }|| j                  vrJ  y)u   §4 expected_files allowlist = 정확히 회장 명세 10종.
    callback_4tuple_index.jsonl 은 track 미소유 공유 인프라 — 미포함.)
r   &memory/events/task-2605.pilot-run.jsonz-memory/events/task-2605.selected-profile.jsonz-memory/events/task-2605.execution-result.jsonz9memory/events/task-2605.independent-collector-result.json0memory/events/task-2605.consolidated-result.json/tests/regression/test_operational_pilot_2605.py%memory/events/task-2605.decision.json#memory/events/task-2605.result.jsonmemory/reports/task-2605.mdz)memory/events/callback_4tuple_index.jsonl)r   r$   r'   N)EXPECTED_FILES
EMIT_FILES)r   statics     r   #test_expected_files_allowlist_exactr+   1   se      $    	4##	$	$ .
 U-----.r   c                    | j                   dk(  sJ | j                  dk(  sJ | j                   | j                  k7  sJ | j                  dk(  sJ y)uA   callback owner = 독립 ANU key; executor self key 절대 금지.c119085addb0f8b71e41a2324a3ccdd0z	task-2604N)ANU_CALLBACK_KEYEXECUTOR_SELF_KEYTRACK_A_TASK_IDr   s    r   >test_callback_owner_is_independent_anu_executor_self_forbiddenr2   M   sZ    !!%7777""&8888!!U%<%<<<<  K///r   c                    | d   }|d   du sJ |d   du sJ |d   j                         D ]  \  }}|du rJ | d        y)uA   9-stage 가 한 입력 short read-only goal 으로 자동 결선.
evaluationauto_chained_9_stageT
all_passedchecksz failedN)items)r    evnameoks       r   test_nine_stage_auto_chainedr<   U   sk    	\	B$%---lt###xL&&( ,bTz+dV7++z,r   c                l    | d   d   }|d   dk(  sJ |d   du sJ |d   j                  d      dk7  sJ y)	uF   STAGE1 — 회장 미지정 gate/HOLD/allowed/forbidden 자동 산출.stagesstage1statusRESOLVEDprofile_boundTunknown_goal_type_resolutionN)get)r    s1s     r   6test_stage1_profile_auto_resolved_without_chair_detailrF   ^   sT    	Xx	 Bh<:%%%o$&&&,-11(;zIIIr   c                J    | d   d   }|d   du sJ |d   du sJ |d   du sJ y)	u7   STAGE2 — executor self key callback 구조적 차단.r>   stage2anu_key_registration_allowedTself_key_registration_allowedF2self_key_assert_raised_CallbackRegistrationBlockedNr   )r    s2s     r   %test_stage2_anu_key_contract_enforcedrM   f   sL    	Xx	 B,-555-.%777BCtKKKr   c                8    | d   d   }|d   du sJ |d   du sJ y)u>   STAGE4 — executor self collector = SELF_COLLECTOR_FORBIDDEN.r>   stage4!executor_self_collector_forbiddenTindependent_anu_collector_okNr   )r    s4s     r   -test_stage4_executor_self_collector_forbiddenrS   n   s8    	Xx	 B12d:::,-555r   c                J    | d   d   }|d   du sJ |d   du sJ |d   du sJ y)	uD   STAGE5 — authoritative 는 독립 ANU 만; self-chain QUARANTINED.r>   stage5authoritative_passTself_chain_quarantinedexecutor_self_collectorFNr   )r    s5s     r   @test_stage5_independent_anu_authoritative_self_chain_quarantinedrZ   u   sL    	Xx	 B"#t+++&'4///'(E111r   c                   | d   d   }|d   }|d   }|d   du sJ |d   du sJ |d   d	u sJ |d
   dk(  r6|d   dk(  sJ |d   d   dk(  sJ |d   du sJ |d   du sJ d|d   d   v sJ y|d
   dk(  sJ |d   d   du sJ y)u   STAGE5 — acceptance = Track A durable-success EVENT 소비
    (event-driven, NOT fixed-time/dead-man). A 미완→NON_BLOCKING(b)
    OPERATIONAL_PASS / A 완료→cancel-on-success live remove 또는
    CANCEL_FAILED_CLASSIFIED.r>   rU   track_a_event_consumptionfallback_acceptanceevent_driven_on_track_aTevent_drivenfixed_time_or_dead_man_usedFtrack_a_statusA_INCOMPLETE	criterionz'(b) REGISTRY_NON_BLOCKING_EXPLICIT_MARKverdictOPERATIONAL_PASSnon_blocking_mark_schema_validsemantic_binding_okbsatisfied_criterion
A_COMPLETEbranch+cancel_on_success_live_remove_or_classifiedNr   )r    rY   tafbs       r   .test_stage5_acceptance_event_driven_on_track_aro   }   s   
 
Xx	 B	'	(B	!	"B'(D000n%%%+,555	
~-+"KKKK)}Y'+====23t;;;'(D000bm$9::::"#|333xLFG	
r   c                p    | d   d   }|d   du sJ |d   dv sJ |d   du sJ |d	   d
k(  sJ d|d   v sJ y)u   STAGE6 — +53 durable-success write-back **평가만**(read-only).
    실 append 는 독립 ANU collector 소관 — ledger 직접 write 0.r>   stage6durable_success_evaluatedTwriteback_classification)DURABLE_SUCCESS_WRITTENWRITEBACK_IDEMPOTENT_SKIPwrite_performedFledger_direct_writer   zindependent ANU collectorapply_deferred_toNr   )r    s6s     r   @test_stage6_durable_writeback_evaluated_readonly_no_ledger_writerz      s     
Xx	 B)*d222() .     E)))#$)))&"-@*AAAAr   c                    | d   d   }|d   dv sJ |d   du sJ |d   du sJ |d	   }|d
   du sJ |d   du sJ |d   dk(  r|d   du sJ |d   du sJ yy)un   STAGE7 — Track A EVENT event-driven 소비; dead-man 진행 트리거
    하드 FAIL; fixed-time 미사용.r>   stage7rd   )NEXT_ACTION_READYALL_SETTLEDWAIT"event_driven_acceptance_consistentTfixed_time_usedFforbidden_trigger_negative	hard_fail%dead_man_signal_observed_not_promotedra   rb   track_a_in_events_observed track_a_single_task_result_readyNr   )r    s7negs      r   /test_stage7_loop_event_driven_deadman_forbiddenr      s     
Xx	 Bi=HHHH23t;;; E)))
)
*C{t###674??? 

~-./588845>>> .r   c                d    | d   d   }|d   du sJ |d   du sJ |d   dk(  sJ |d   d	   d
u sJ y)uJ   STAGE8 — proposal-only·additive; fallback 진행 트리거 하드 FAIL.r>   stage8actual_write_performedFauto_executedmerge_pr_writer   r   r   TNr   )r    s8s     r   4test_stage8_enactor_proposal_only_fallback_forbiddenr      sd    	Xx	 B&'5000o%'''1$$$*+K8D@@@r   c                T    |j                  |       }|d   }|d   du sJ d|d   v sJ y)uG   self-chain 산출은 영구 비권위 — authoritative 는 독립 ANU.r#   self_chain_authoritativeF%DEFERRED_TO_INDEPENDENT_ANU_COLLECTORauthoritative_selectionN_build_artifacts)r    r   artcrs       r   !test_self_chain_not_authoritativer      sL    

 
 
%C	?	@B()U2222
$%  r   c                    |j                  |       }|d   }|d   }|d   g k(  sJ d|d   v sJ |d   }|d   du sJ |d	   d
k(  sJ |d   d
k(  sJ y)uC   회장 §7 — team result contract + subagent usage ledger 강제.r&   subagent_usage_ledgersubagents_usedu   subagent 미사용declarationexternal_boundary_contractteam_result_contractT*executor_self_key_callback_collector_countr   'executor_self_dispatch_delegation_countNr   )r    r   r   resledebcs         r   "test_subagent_usage_ledger_presentr      s    

 
 
%C
3
4C
%
&C B&&&3}#5555
*
+C%&$...;<AAA89Q>>>r   c                    |j                  |       }|d   }|d   }|d   du sJ |d   du sJ |d   du sJ |d   du sJ |d   du sJ |d	   d
k(  sJ |d   |j                  k(  sJ |d   du sJ d|d   v sJ y)uF   §2/§5 — read-only·no PR/merge/credential/branch + ledger write 0.r%   conditions_satisfied_2	read_onlyTno_prno_mergeno_credentialno_branch_commit_pushrw   r   shared_infra_not_allowlistedhold_for_chairFz(Track A(task-2604) durable-success EVENTacceptance_fallback_criterionN)r   SHARED_LEDGER)r    r   r   deccs        r   2test_decision_conditions_read_only_no_ledger_writer      s    

 
 
%C
5
6C$%A[>T!!!W:Z=D   _%%%$%---"#q(((-.%2E2EEEE E)))5+,  r   c           
     X   | j                  dd| j                  g d      }| j                  |      }d| j                  dddd| j                  iddd	d
	}| j	                  ||      }|d   }|d   dv sJ |d   }|d   d	k(  sJ |d   du sJ |d   j                  d      s|d   dk(  sJ yy)ut  A 완료 시뮬레이션 — Track A durable-success EVENT 존재 시
    cancel-on-success live remove 또는 CANCEL_FAILED_CLASSIFIED 분기가
    실 entrypoint(cancel_on_success_live_wiring)로 동작함을 증명.
    현 ledger 에 task-2605 fallback record 가 없으므로 분류 처분
    CANCEL_FAILED_CLASSIFIED 가 되어야 한다 (미분류 잔존 아님).gs)goal_idgoal_statement	goal_typeboundaryztest-injected A_COMPLETET   task_idFrj   )	real_entrypointtrack_a_task_idshared_ledger_present%track_a_durable_success_event_presenttrack_a_durable_records_counttrack_a_registry_recordr_   r`   ra   r]   rc   )z!(a) CANCEL_ON_SUCCESS_LIVE_REMOVECANCEL_FAILED_CLASSIFIEDrk   ra   rl   cancel_dispositionr   &CANCEL_ON_SUCCESS_LIVE_REMOVE_ELIGIBLEN)_stage1_profile_selection	GOAL_TYPE_stage3_executorr1   _stage5_independent_collector
startswith)r   rE   s3track_a_completerY   rn   brs          r   7test_a_complete_branch_classified_when_no_lookup_recordr      s    
	(	(!		

B 
			#B5 00!%15)*$-u/D/D#E',&
 
	,	,R1A	BB	!	"Bk?     
HB<///;<DDD"#.."	 	!%M	MN N	Mr   c                    | j                  |      }|d   }|d   du sJ |d   du sJ t        dd      D ]   }|d   d|    d	   }d
|v rd|v rd|v r J  t        | j                  t              sJ y)uO   mock-only FAIL — 실 entrypoint 가 호출됨을 증명 (문서-only 금지).r"   	mock_onlyFdocumentation_onlyr   
   r>   stager   anu_v3z	dispatch.scripts.N)r   range
issubclassMockOnlyErrorRuntimeError)r   r    r   prieps         r   /test_mock_only_is_fail_real_entrypoint_requiredr     s    

 
 
%C	5	6Bk?e###"#u,,, 1b\ G]U1#;'(9:2~!2jB6FFFG e))<888r   c                     g  fd}|fS )u  consolidation seal seam spy 팩토리.

    ``delegate=True`` → 인자를 기록한 뒤 *실* selector
    (``avs.select_authoritative_verdict``) 로 그대로 위임 → 실 entrypoint
    호출을 독립 증명. ``delegate=False`` → 호출만 기록(미위임). 반환되는
    ``calls`` 리스트가 비어 있으면 seam 미경유(=실 selector 미호출) 로
    stage9 회귀가 FAIL 되어야 한다.c                   | t        |      |t        |      d d}j                  |       r| j                  |||      }||d<   |S y )N)avsrecordsr   anu_keys	real_seal)r   r   r   )listappendselect_authoritative_verdict)r   r   r   r   recsealcallsdelegates         r   spyz_make_seal_spy.<locals>.spy(  sb    G}X
 	S338 4 D  $CKr   r   )r   r   r   s   ` @r   _make_seal_spyr     s     E" :r   c                n   t        d      \  }}|j                  |d|       |j                  | d   | d         }t        |      dk(  sJ d       |d   }|d	   |j                  k(  sJ |d
   |j
                  gk(  sJ |d
   |j                  gk7  sJ t        |d         dk(  sJ |d   d   }|j                  dk(  sJ |j                  |j                  k(  sJ |j                  |j                  k(  sJ |j                  |j                  k(  sJ |j                  du sJ |j                  dk(  sJ |d   }|j                  |j
                  g      |j                  k(  sJ |d   }	t        |	|j                         sJ |	j"                  |j$                  k(  sJ |	j&                  dk(  sJ |	j(                  dk\  sJ |	j*                  du sJ |d   |	j,                  k(  sJ |d   |	j"                  k(  sJ |d   |	j(                  k(  sJ |d   |	j&                  k(  sJ |d   du sJ |d   du sJ d|d   v sJ y)u  STAGE9 옵션 A 강화 — `select_authoritative_verdict` *실제 호출*을
    monkeypatch/spy 로 독립 증명한다 (회장 §4.1·§4.2).

    seam spy 가 ``consolidate_pilot_result`` 가 로드한 *실* avs 모듈로
    위임 → 실 entrypoint 가 *진짜 consolidated self-chain 레코드* 에 대해
    실행됨을 관찰. 통합 결과 dict 의 seal 필드가 실 seal 값에서 *파생*
    됨을 대조(자기보고 플래그만 검증 금지 — §4.2).T)r   !_consolidation_authoritative_sealr>   track_a_eventr   uX   select_authoritative_verdict seam 미경유 — stage9 하드코딩/static-string 회귀r   r   r   r   collector_resultindependentr   r   Fconsolidation_seal_verdict!consolidation_seal_classification$consolidation_seal_quarantined_count(consolidation_seal_independent_anu_count)consolidation_non_authoritative_confirmedr   r   r   N)r   setattrconsolidate_pilot_resultlenTASK_IDr/   r0   kindr   executor_keycollector_keysession_is_executor_selfclaimed_originderived_originORIGIN_SELF_CHAIN
isinstanceAuthoritativeSelectionResultclassificationAUTHORITATIVE_VERDICT_PENDINGindependent_anu_countquarantined_countr;   rd   )
r    r   monkeypatchr   r   outr   vrr   r   s
             r   @test_stage9_select_authoritative_verdict_real_call_proven_by_spyr  <  s     .JCBCH

(
(Hs?+C
 u:? 	? 	aAY<5==(((Z=U334444Z=U445555q|!!!	
9aB77((((::&&&??e55555u66666&&$...---
 E(C
51123  	!	! +Ii!A!ABBB##s'H'HHHH**a///&&!+++<<5    +,	0A0AAAA/0##	$	$ 	23&&	'	' 	67**	+	+ :;tCCC)*e3332%&  r   zcls,qc,iac,vrd,expect_non_auth))r     r   FAILT)MUT_SENTINEL_CLSi     MUT_SENTINEL_VF)AUTHORITATIVE_PASSr   r   PASSFc                :   |j                  dd      }|j                  d|||j                  dd||dddg      fd}	|j                  |d	|	       |j	                  | d
   | d         }
|
d   |k(  sJ |
d   |k(  sJ |
d   |k(  sJ |
d   |k(  sJ |
d   |u sJ y)u  STAGE9 옵션 A 강화 — 하드코딩 우회 구조 제거 (회장 §4.3).

    seam 이 *임의* selector 결과를 반환하도록 변형하면 통합 결과 dict 가
    그 값을 *그대로 반영* 해야 한다. ``consolidate_pilot_result()`` 가
    stage9 값을 하드코딩하면 본 mutation 대조에서 반드시 FAIL → 하드코딩
    통과 구조가 구조적으로 제거됨을 보증한다.z%anu_v3.authoritative_verdict_selectorz(anu_v3/authoritative_verdict_selector.pyzmutation-sentinelNFmutation)schemard   r  r   authoritative_verdictauthoritative_source_kindr  r  deadman_duplicate_seendeadman_validreasonsc                     ~ ~S r   r   )_a_ksentinels     r   mutzEtest_stage9_hardcoded_consolidation_cannot_pass_mutation.<locals>.mut  s    r   r   r>   r   r   r   r   r   r   )
_load_realr  r   r   r   )r    r   r  clsqciacvrdexpect_non_authr   r  r	  r  s              @r   8test_stage9_hardcoded_consolidation_cannot_pass_mutationr&    s    ( 

/2C //"""&!$ 0 H BCH

(
(Hs?+C
 +,33323s:::56"<<<9:cAAA:;NNNr   c                    d }|j                  |d|       t        j                  t        d      5  |j	                  | d   | d          ddd       y# 1 sw Y   yxY w)u]  STAGE9 옵션 A 강화 — seam(실 selector) 이 critical path 임을 증명.

    seam 을 예외로 대체하면 ``consolidate_pilot_result`` 가 그대로
    전파해야 한다. stage9 가 selector 결과와 무관한 하드코딩 shortcut 을
    가졌다면 예외가 삼켜져 통과할 것이므로, 본 테스트가 그 구조를 차단.c                     ~ ~t        d      )Nseam-on-critical-path-probe)r   )r  r  s     r   boomz@test_stage9_seam_is_on_critical_path_not_dead_code.<locals>.boom  s    899r   r   r)  )matchr>   r   N)r   pytestraisesr   r   )r    r   r  r*  s       r   2test_stage9_seam_is_on_critical_path_not_dead_coder.    s\    : BDI	|+H	I 
&&M3/	

 
 
s   AAc                D   | d   d   }|d   }d|v rd|v sJ d|j                  d      d   vsJ |d	   d
k(  sJ |d   du sJ |d   du sJ |d   du sJ |d   dk(  sJ |d   dk(  sJ |d   dk\  sJ |d   du sJ |d   du sJ d|d   v sJ t        |j                        sJ t        |j                        sJ t        |j                        sJ | d   d   d   du sJ |j                  |       }|d   }t        |d   j                               t        dd      D ch c]  }d| 	 c}k(  sJ |d   |d   k(  sJ d |d   vsJ |d!   }t        |d"   j                               t        dd      D ch c]  }d| 	 c}k(  sJ |d#   d   du sJ y$c c}w c c}w )%u   STAGE9 — 옵션 B real-entrypoint 계승 계약 (자기보고 *외* spy 증명은
    위 테스트들이 담당; 본 테스트는 형태/계약 계승만 보존).r>   stage9r   r   r   zstatic string(r   consolidation_entrypointzBanu_v3.authoritative_verdict_selector.select_authoritative_verdictconsolidation_sealedTr   Fr   r   r  r   r   r   r   r   r   r   r4   r7   $stage9_consolidation_real_entrypointr"   nine_stage_chainr   r   z#consolidated result (memory/events/r#   nine_stage_real_entrypointsstage9_consolidation_sealN)	splitcallabler   _stage9_consolidationr   r   setkeysr   )r    r   s9r   r   r   r   r   s           r   :test_stage9_self_report_contract_and_real_entrypoint_shaper>    s    
Xx	 B		Br>jB..."((3-"2222
%&'	'	' $%---()U2229:dBBB12'   89Q>>>45:::k?e###"#u,,,2
$%   E22333E//000E;;<<<L(#$JK		 
 
 
%C	5	6Br$%**,-"1b\2%s2    h<2/000008DDD	?	@Br/05578"1b\=%s=    )*+ABdJJJ2=s   !F8Fc                P   ddl }| j                         }| j                         }t        |d   j                               t	        dd      D ch c]  }d| 	 c}k(  sJ t	        dd      D ]J  }d| }|j                  |d   |   dd	
      }|j                  |d   |   dd	
      }||k(  rBJ | d        |j                  |d   d   dd	
      }|j                  |d   d   dd	
      }||k(  sJ |d   d   du sJ t        |d   d   j                               sJ yc c}w )u   회장 §4.4·§4.5 — stage1~8 byte-equivalent 무회귀 + range(1,10)
    9-stage 검증 유지. seam 도입이 결정론/스테이지 산출을 변형하지
    않음을 독립 run 2회로 대조.r   Nr>   r   r   r   	   TF)	sort_keysensure_asciiu!    byte-equivalent 무회귀 위반r0  r4   r5   r7   )jsonr   r;  r<  r   dumpsallvalues)r   rC  r1r2r   kb1b2s           r   :test_stage1_8_byte_equivalent_no_regression_and_nine_stagerL    s]    		B		Br(|  "#"1b\(%s(    1a[ AA3KZZ8Q4eZLZZ8Q4eZLRx@A3?@@x	A 
BxL*d	OB	BxL*d	OB8O8l23t;;;r,)002333(s   D#)r   str)r   bool)-__doc__
__future__r   importlib.utilr	   syspathlibr   r,  __file__resolveparentsr   rM  pathinsertr   r   fixturer   r    r+   r2   r<   rF   rM   rS   rZ   ro   rz   r   r   r   r   r   r   r   r   r  markparametrizer&  r.  r>  rL  r   r   r   <module>r\     sG   #  
  H~''*t9CHHHHOOAs4y!3	 h!  ! h  
.80,JL62
2B?"A
?$&NR9<EP $
)O
)OX
(+K\4r   