
    4jV                       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Zddl	m
Z
 ddlmZmZmZmZ  e
e      j#                         j$                  d   Z ee      ej*                  vr"ej*                  j-                  d ee             dZdZd	Zd
ZdZdZdZdZdZde de Z dZ!dZ"dZ#dZ$dZ%dZ&dZ'dZ(dZ)dZ* G d de+      Z,d6dZ-dZ.e.D ]  \  Z/Z0e/ejb                  vs e-e/e0        d7d Z2d8d!Z3d8d"Z4d9d#Z5d:d$Z6d:d%Z7d8d&Z8d8d'Z9	 	 	 	 	 	 d;d(Z:	 	 	 	 d<d)Z;d=d*Z<d>d+Z=	 	 	 	 	 	 	 	 	 	 d?d,Z>	 	 	 	 	 	 d@d-Z?	 	 	 	 	 	 d@d.Z@dAd/ZAd8d0ZBd8d1ZCdBd2ZDdCd3ZEdDdEd4ZFeGd5k(  r eH eF             y)Fu  task-2605 — Track B: READ_ONLY_OPERATIONAL_PILOT (9-stage 자동 결선).

회장 §1 verbatim: 짧은 read-only goal 하나로 ANU 가

  policy profile → dispatch planning → ANU-key callback → independent
  collector → registry → runtime loop → bounded enactor

흐름을 **실사용 검증**한다. 회장이 gate/HOLD/allowed/forbidden 을
풀어쓰지 않아도 ANU 가 policy_profile_engine + runtime guard 로 자동
산출·검증·통합한다.

핵심 = 본 스크립트가 각 단계의 **실 entrypoint 를 직접 호출**(mock-only
FAIL · 문서-only 금지)해 9-stage 자동 진행을 입증한다. 입력은 task-2553
+57 의 짧은 read-only goal(``pilot_goal.json`` goal_request, goal_type =
``runtime_structure_smoke_pilot`` — "policy profile dry-run / callback
owner·key registry consistency") 이며, +58 fallback acceptance
criterion/non_blocking schema 를 read-only 로 소비한다.

task-2605 고유 acceptance = **Track A(task-2604) durable-success EVENT
소비(event-driven, NOT fixed-time/dead-man)**:

  * A 미완 (ledger 에 task-2604 durable-success record 부재)
      → fallback criterion (b) REGISTRY_NON_BLOCKING_EXPLICIT_MARK 까지
        허용 (OPERATIONAL_PASS).
  * A 완료 (ledger 에 task-2604 durable-success record 존재)
      → cancel-on-success live remove 확인 (criterion (a)) 또는
        CANCEL_FAILED_CLASSIFIED (분류된 처분 — 미분류 잔존 아님).

실 entrypoint (direct call, no mock — stage ↔ module):

  1. ``anu_v3.default_profile_resolver.run_default_profile_resolution`` /
     ``run_selected_profile_evidence`` — policy_profile_engine 정본
     ``parse_goal_request -> resolve_policy`` READ-ONLY (engine byte-0).
  2. ``anu_v3.callback_owner_validator.validate_callback_owner_runtime`` +
     ``assert_registration_permitted`` — ANU-key callback contract 강제
     (executor self key → CallbackRegistrationBlocked).
  3. executor read-only goal — RESOLVED 일관 + 미매핑 fail-closed +
     callback owner/key registry 일관(``dispatch.callback_owner_enforcer``
     ``DEFAULT_ANU_KEYS``/``is_anu_key`` READ-ONLY).
  4. ``anu_v3.self_collector_guard.guard_self_collector_session`` — normal
     callback owner 는 독립 ANU key 만; executor self key collector 는
     ``SELF_COLLECTOR_FORBIDDEN``.
  5. ``anu_v3.authoritative_verdict_selector.select_authoritative_verdict``
     + ``anu_v3.cancel_on_success_live_wiring.
     lookup_fallback_from_durable_registry`` + ``scripts.
     validate_fallback_acceptance_2553plus58.evaluate_fallback_acceptance``
     — independent-ANU 만 authoritative · self-chain QUARANTINED ·
     Track A durable-success EVENT 소비로 acceptance criterion 자동 분기.
  6. ``anu_v3.batch_settle_writeback.evaluate_durable_success_writeback``
     — +53 durable-success write-back **평가만**(read-only). 실 append
     는 독립 ANU collector 세션 소관(§7) — 본 executor 세션은 ledger
     직접 write 0.
  7. ``anu_v3.runtime_event_loop.RuntimeEventLoop.run`` — durable-registry
     를 read-only 소비, Track A(task-2604) durable-success EVENT 즉시
     감지. dead-man/fixed-time 진행 트리거 → 하드 FAIL 음성 입증.
  8. ``anu_v3.runtime_event_enactor.RuntimeEventEnactor.enact`` — proposal
     -only · additive · merge/PR/write 0 (artifact_writer=None → dry).
  9. consolidated result (+58 verdict · Track A event · subagent ledger).

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 기존 산출물 변조, ZERO ledger 직접
write. 본 스크립트의 유일한 durable write 는 §4 allowlist 의 task-2605
신규 산출물(``--emit`` 시에만) 뿐이다. ``callback_4tuple_index.jsonl``
은 track 미소유 공유 durable 인프라 — 본 runner 는 read-only consume,
direct write 0 (+53/+54 소관 mechanism / 독립 ANU collector 만 append).

executor(dev6-team 페룬, key 1e41a2324a3ccdd0) self-collector /
self-adjudication / self-Codex / self-dispatch / self-delegation 0.
authoritative verdict·회수·검증·Codex·adjudication·batch 통합은 독립
ANU collector(callback ANU key c119085addb0f8b7)가 담당하며 본
self-chain 산출은 영구 비권위임을 *증명* 한다.
    )annotationsN)Path)AnyDictListOptional   z	task-2605runtime_structure_smoke_pilotztask-2605-operational-pilotREAD_ONLY_OPERATIONAL_PILOTc119085addb0f8b71e41a2324a3ccdd0
6937032012z2026-05-19 04:30 KSTz2026-05-19 07:45:00zANU-fallback-safety-net::z	task-2604zmemory/events/pilot_goal.jsonz'memory/events/pilot_execution_plan.jsonz#memory/events/success_criteria.jsonz/memory/events/fallback_acceptance_criteria.jsonz)schemas/non_blocking_fallback_schema.jsonz+scripts/run_operational_pilot_2553plus60.pyz)memory/events/callback_4tuple_index.jsonl)
z%scripts/run_operational_pilot_2605.py&memory/events/task-2605.pilot-run.json-memory/events/task-2605.selected-profile.json-memory/events/task-2605.execution-result.json9memory/events/task-2605.independent-collector-result.json0memory/events/task-2605.consolidated-result.jsonz/tests/regression/test_operational_pilot_2605.py%memory/events/task-2605.decision.json#memory/events/task-2605.result.jsonzmemory/reports/task-2605.mdr   r   r   r   r   r   r   c                      e Zd ZdZy)MockOnlyErroruK   실 entrypoint 미사용(mock-only) 시 즉시 FAIL — 문서-only 금지.N)__name__
__module____qualname____doc__     9/home/jay/workspace/scripts/run_operational_pilot_2605.pyr   r      s    Ur   r   c                &   t         j                  j                  | t        |z        }||j                  t        d|       t         j                  j                  |      }|t        j                  | <   |j                  j                  |       |S )u   정본 모듈을 파일 경로로 로딩 (mock 0). repo 에 dispatch.py 와
    dispatch/ 가 공존해 일반 import 가 컨텍스트에 따라 엇갈리므로 +60
    pilot 과 동일하게 명시 경로 로딩.zreal module not found: )
	importlibutilspec_from_file_locationROOTloaderModuleNotFoundErrormodule_from_specsysmodulesexec_module)modnamerelpathspecmods       r    
_load_realr0      sx     >>11'4'>JD|t{{*!$;G9"EFF
..
)
)$
/CCKKKKC Jr   )) dispatch.callback_owner_enforcer#dispatch/callback_owner_enforcer.py)z%dispatch.executor_completion_contractz(dispatch/executor_completion_contract.py)anu_v3.callback_4tuple_registry"anu_v3/callback_4tuple_registry.py)%anu_v3.authoritative_verdict_selector(anu_v3/authoritative_verdict_selector.pyc                Z    t        j                  t        | z  j                  d            S )Nutf-8encoding)jsonloadsr%   	read_text)rels    r    
_read_jsonr?      s#    ::tcz,,g,>??r   c            	     @   t        t              } | d   d   }t        t        z  j	                         }|| d   d   | d   d   t        t
              d   t        t              d   D cg c]  }|d   	 c}t        t              d   t        t              d   |d	S c c}w )
u   +57 짧은 read-only goal + +58 fallback 기준 read-only consume.
    +60 설계는 정적 read-only 재사용(byte-0 — 본 runner 가 호출 0).
pilot_goalgoal_requesttitleone_line_goalschemapilot_success_criteriaidz$id)pilot_goal_requestpilot_goal_titlepilot_goal_one_lineexec_plan_schemasuccess_criteria_idsfallback_criteria_schemanb_schema_id plus60_design_read_only_consumed)	r?   PLUS57_PILOT_GOALr%   PLUS60_PILOTis_filePLUS57_EXEC_PLANPLUS57_SUCCESSPLUS58_FALLBACK_CRITPLUS58_NB_SCHEMA)pgrB   plus60_existscs       r    _consume_inputsrZ      s     
%	&Bl#N3LL(113M*|,W5!,/@&'78B'78PQ!
AdG!
 %//C$DX$N"#34U;,9 
!
s   'Bc            
     F   t        dd      } t        t        z  }g }|j                         }|r|j	                  d      j                         D ]  }|j                         }|s	 t        j                  |      }t        |j                  dd            t        k7  rO|j                  d      dk(  r|j                  d	      d
k(  s?|j                  d      dk(  s|j                  d      dk(  s|j                  d      dk(  s|j                  |        d}	 | j                  |      }|j                  t              }|2|j                   t#        |dd      t#        |dd      t#        |dd      d}t'        |      xsF t)        |t*              xr4 |j                  d      t        k(  xr d|vxr |j                  d      dk(  }
dt        ||
t-        |      |dd|
rdd	S dd	S # t        j                  $ r Y w xY w# t$        $ r}	dt        |	      i}Y d}	~	d}	~	ww xY w)u   task-2605 고유 — Track A(task-2604) durable-success EVENT 를 공유
    durable ledger 에서 **read-only** 소비(event-driven, NOT fixed-time/
    dead-man). ledger 직접 write 0. 정본 +44 registry entrypoint 로 소비.r3   r4   r8   r9   task_id rE   zdurable_success_writeback.v1writeback_classificationDURABLE_SUCCESS_WRITTENz callback_4tuple_ledger_record.v1roleanu_collector_durable_successstatus	COMPLETEDNdispatch_cron_idchat_id)r\   rd   re   r`   lookup_erroru   anu_v3.callback_4tuple_registry.Callback4TupleRegistry.latest_for + shared ledger read-only scan (callback_4tuple_index.jsonl — track 미소유 공유 인프라, write 0)TF
A_COMPLETEA_INCOMPLETE)	real_entrypointtrack_a_task_idshared_ledger_present%track_a_durable_success_event_presenttrack_a_durable_records_counttrack_a_registry_recordevent_drivenfixed_time_or_dead_man_usedtrack_a_status)r0   r%   SHARED_LEDGERrR   r=   
splitlinesstripr;   r<   JSONDecodeErrorstrgetTRACK_A_TASK_IDappendCallback4TupleRegistry
latest_forr\   getattr	Exceptionbool
isinstancedictlen)reg_modledgerdurable_linesledger_presentrawobjregistry_recordregistryrecexc
a_completes              r    &_consume_track_a_durable_success_eventr      sE    ),G M!F*,M^^%N##W#5@@B 	*C))+Cjjo 3779b)*o=!%CCGG67,- !%GGGGFO'FFGGH%4$$S)'	** O511&9!!/2?;;$+C1CT$J"3	48VT2	O m$ ?D) 	K	*o=	K/1	K '+JJ	 V +!/1;),]);#2',*4,  ;I E '' 4  5)3s845s+   %G&AH  &G=<G= 	H 	HH c           	         t        dd      }|j                  |       }|j                  |       }|j                  dg d      }d|||d|j                  d      |j                  d      d	S )
u   STAGE 1 — ANU policy profile resolve. policy_profile_engine 정본
    read-only resolve. 회장 미지정 gate/HOLD/allowed/forbidden 자동 산출.zanu_v3.default_profile_resolverz"anu_v3/default_profile_resolver.py__no_such_goal_type_2605__)	goal_typeboundaryzanu_v3.default_profile_resolver.run_default_profile_resolution -> policy_profile_engine.parse_goal_request -> resolve_policy (READ-ONLY, engine byte-0)Trb   profile_bound)ri   resolvedselected_profile_evidenceunknown_goal_type_resolutionauto_derivedrb   r   )r0   run_default_profile_resolutionrun_selected_profile_evidencerw   )rB   resr   evidenceunknowns        r    _stage1_profile_selectionr     s     )+OC 11,?H00>H002CGJ %-(/,,x(!o6
 
r   c                   t        dd      }t        t        t        ddt         t
        dt         t        t        g      } |j                  dt        t        d|} |j                  dt        t        d|}d}d	}	 |j                  |       d|j                  |j                  |j                  ||j                  |t        t        dd| d   j                  d      d	S # |j                  $ r}d
}t        |      }Y d}~sd}~ww xY w)u   STAGE 2 — dispatch planning. ANU-key callback contract 강제.
    executor self key collector → CallbackRegistrationBlocked (구조적).zanu_v3.callback_owner_validatorz"anu_v3/callback_owner_validator.pyANUANU-normal-callback:	dispatch:)r\   executor_keycollector_rolenormal_collector_cron_idfallback_callback_cron_idrd   re   anu_keys)collector_keycollector_owner_keyFr]   TNz_anu_v3.callback_owner_validator.validate_callback_owner_runtime + assert_registration_permitteduG   Track A durable-success event (event-driven · NOT fixed-time/dead-man))$normal_completion_callback_owner_key$executor_self_key_forbidden_as_ownernext_action_basisr   resolved_profile_name)	ri   anu_key_registration_allowed anu_key_owner_is_independent_anuself_key_registration_allowed2self_key_assert_raised_CallbackRegistrationBlockedself_key_block_classificationblock_exceptioncallback_contractprofile_selectedr   )r0   r   TASK_IDEXECUTOR_SELF_KEYANU_CALLBACK_KEYFALLBACK_CRON_IDCHAT_IDvalidate_callback_owner_runtimeassert_registration_permittedCallbackRegistrationBlockedrv   registration_allowedowner_is_independent_anuclassificationsrw   )s1cvcommonanu_okself_blockedblocked_raised	block_exces           r    _stage2_dispatch_planningr   4  sA    
)+O
B &#78H7I!J"2$WI."#	F 0R// &, F
 6255 '- L NI
((6
J(.(C(C,2,K,K)5)J)J>L)5)E)E$4D4E"8
 zN../FG  )) F	s   C% %D4DDc           	        t        dd      }t        |j                        }| d   }| d   }|t        t        |j                  t        |      |j                  t        |      d}|j                  d      dk(  xr |j                  d      d	u |j                  d      dk7  |j                  d      |d
   d	u xr |d   du d}dd||dt        dddS )uv   STAGE 3 — executor read-only goal. RESOLVED 일관 + 미매핑
    fail-closed + callback owner/key registry 일관.r1   r2   r   r   )registered_anu_keysmandated_callback_keyexecutor_self_keymandated_is_anu_keyexecutor_self_is_anu_keyrb   RESOLVEDr   Tr   r   F)resolved_consistentunknown_fail_closedunknown_statuscallback_owner_key_consistentzcdispatch.callback_owner_enforcer.{DEFAULT_ANU_KEYS,is_anu_key} (READ-ONLY) + stage-1 engine resolvezjcallback owner/key registry consistency + policy profile dry-run consistency (+57 pilot_goal.goal_request)   dev6-team 페룬%DEFERRED_TO_INDEPENDENT_ANU_COLLECTOR)ri   read_only_goalowner_key_consistencygoal_outcomesexecutorr   self_chain_authoritativeauthoritative_selection)r0   sortedDEFAULT_ANU_KEYSr   r   
is_anu_keyrw   )r   enfr   r   unkconsistencyr   s          r    _stage3_executorr   i  s     *,QC c**+H
Z.C
+
,C'!1."~~.>I$'NN3Dh$OK  #wwx0J>  -GGO$,"wwx0J>''(+-.$6 A675@	MMK!,&&)$)#J r   c            	     L   t        dd      } | j                  t        t        t        dd      }| j                  t        t        t        dd      }d|j                  |j
                  |j                  dk(  xr |j
                  d	k(  |j                  |j                  t        d
dS )u   STAGE 4 — ANU-key normal completion callback. executor self
    collector = SELF_COLLECTOR_FORBIDDEN (구조적). ANU collector = PASS.zanu_v3.self_collector_guardzanu_v3/self_collector_guard.pyr   T)r   r   	actor_keyr   is_executor_self_sessionFz8anu_v3.self_collector_guard.guard_self_collector_sessionFAILSELF_COLLECTOR_FORBIDDENua   ANU key c119085addb0f8b7 (executor self key 1e41a2324a3ccdd0 절대 금지 — +49 코드 정본))ri   executor_self_collector_verdict&executor_self_collector_classification!executor_self_collector_forbidden!independent_anu_collector_verdictindependent_anu_collector_okr   callback_fired_with)r0   guard_self_collector_sessionr   r   verdictclassificationok)g
self_guard	anu_guards      r    _stage4_anu_key_callbackr     s     	%'G	A //&'#!% 0 J ..&&"!& / I'+5+=+=2<2K2K&( H))-GG-6->->(10@ D r   c                 `    dt         t        t        t        t              ddt
        ddddddddS )	u   +58 기준 (b) — registry NON_BLOCKING 명시 마크 (schema-valid·
    semantic binding). Track A 미완 시 acceptance criterion.z*task-2553+58.non_blocking_fallback_mark_v1TNON_BLOCKINGr   u  task-2605 durable-success registry line — 정상 수렴 후 ANU safety-net fallback 은 비차단 NO-ACTION. Track A(task-2604) durable-success EVENT 미소비(A 미완) 동안 기준 (b) 명시 마크가 최소 운영 품질 요건 (+58 remediation_north_star · event-driven).DUPLICATE_CALLBACK_IGNOREDF)rE   r\   fallback_cron_id	owner_keyre   "bound_after_normal_durable_successr   marked_at_kstmarked_by_collector_rolebasisnormal_success_unchangedexpected_on_fireprogress_triggercancel_on_success_eligiblecancel_on_success_applied)r   r   r   intr   TS_KSTr   r   r    _build_non_blocking_markr    sD     ?,%w<.2($)T %)8!&*%*% r   c                >   t        dd      }t        g}|j                  ddt        t        t        ddd      }|j                  ddt        t        t        dd	d
d	      }|j                  ||gt        |      }t        dd      }|d   d	u }t               }	|j                  |	      \  }
}|rt        dd      }|j                  t        t        t        t        z        }|j                  }|j                  }t        |xr |dk(  xr |j                        }|r	d}d}d	}d}nd}d| }d}d}t        t         d	d	d	|d||rdn|	d	}|j#                  |      }|xs |j%                  d      }d|||||j'                         d}n.d}t        t         d	d	d	ddd|	d	}|j#                  |      }dd |
|d!}i d"d#d$t        d%dd&t        d'dd(dd)|j(                  d*|j*                  d+|j*                  d,k(  xr |j                  d	u d-|j,                  d.|j.                  d/|j0                  d0|j.                  d1k\  d2t2        d3|d4t        d5t         d6t         t         t        dt        t        d7d8|d	|	|
|||	d$   |d$   k(  xr |	d9   |d9   k(  |d:d;| d<   iS )=u   STAGE 5 — independent ANU collector. authoritative verdict 는
    독립 ANU 만; self-chain QUARANTINED. acceptance = Track A
    durable-success EVENT 소비(event-driven) 로 criterion 자동 분기.r5   r6   collector_resultPASSr   FuA   independent ANU collector — 회수·검증·Codex·adjudication)kindr   r\   r   r   r   session_is_executor_selfdetailTindependentu8   executor self-chain — 영구 비권위 (claim ignored)	r	  r   r\   r   r   r   r
  claimed_originr  r\   r   z/scripts.validate_fallback_acceptance_2553plus58z2scripts/validate_fallback_acceptance_2553plus58.pyrl   z$anu_v3.cancel_on_success_live_wiringz'anu_v3/cancel_on_success_live_wiring.py)r\   expected_chat_idledger_pathLOOKUP_VERIFIEDz!(a) CANCEL_ON_SUCCESS_LIVE_REMOVE&CANCEL_ON_SUCCESS_LIVE_REMOVE_ELIGIBLENCANCEL_FAILED_CLASSIFIEDzCANCEL_FAILED_CLASSIFIED:r   )	r\   r   fallback_boundnormal_callback_durable_successr   r  fallback_firedfallback_handlingregistry_non_blocking_markrg   )rq   cancel_lookup_statuscancel_lookup_okcancel_disposition+cancel_on_success_live_remove_or_classifiedcancel_lookup_detailz'(b) REGISTRY_NON_BLOCKING_EXPLICIT_MARKrh   u   NON_BLOCKING mark 허용)rq   #fallback_criterion_until_a_completenon_blocking_mark_schema_validnon_blocking_mark_errorsri   zanu_v3.authoritative_verdict_selector.select_authoritative_verdict + anu_v3.cancel_on_success_live_wiring.lookup_fallback_from_durable_registry + scripts.validate_fallback_acceptance_2553plus58.evaluate_fallback_acceptancer\   r   r   executor_self_collectorr
  authoritative_verdictauthoritative_classificationauthoritative_passAUTHORITATIVE_PASSauthoritative_source_kindquarantined_countindependent_anu_countself_chain_quarantinedr	   ts_ksttrack_a_event_consumptionfour_tuple_recordr   r   )r\   rd   r   r   r   r   r   re   fallback_acceptancer   )	criterionevent_driven_on_track_anon_blocking_markr   r!  r   semantic_binding_okbranchexecutor_goal_outcomesr   )r0   r   VerdictRecordr   r   select_authoritative_verdictr  validate_non_blocking_mark%lookup_fallback_from_durable_registryr   r%   rr   rb   r   r~   r   r   evaluate_fallback_acceptance
startswithto_dictr   r   r'  r(  r)  r  )s3track_aavsr   r  
self_chainselfbr   nb_marknb_ok	nb_errorscwlk	lk_statuslk_okcancel_removabler/  r  cancel_appliedfb_handlingobservation
fb_verdictacceptance_classifiedcancel_branchs                            r    _stage5_independent_collectorrP    s    /2C !!H##&&!&R $ 	K ""&'!%$I # 
J 
*
*	[!7X + C 
9<
B
 @ATIJ&(G44W=E9
 25
 55$}, 6 

 II	Li#44L9L9L
 ;I!I!NK 3I#<YK!H"N6K 0"/3(,)7#!,2@$g

 44[A
 . !
2D2O2O&3
 +$- %"4;P$&JJL
 >	 0"/3(,).#!%*1

 44[A
,3M.3(1	
0 O0
 	70 	%0 	)0 	"50 	#E0 	 0 	'(:(:0 	"66I366T>0 	$S%B%B0  	S22!0" 	 !:!:#0$ 	!#"7"71"<%0& 	&'0( 	$W)0* 	"+G9 5&'7&89)9-#-
+0B 	"'+!(.3(1!	"k)&<< 3./123 $ 
C0^ 	!"_"5_0 0r   c           
        t        dd      }t        t        z  }t        j                  dddd      5 }t        j                  | |d       |j                  }d	d	d	       |j                  t        t        t        |
      }t        |      j                  d       dt        d|j                  |j                  |j                  dv t!        |j"                        dd	 ddd	S # 1 sw Y   xY w)u   STAGE 6 — durable registry durable-success write-back **평가만**
    (+53 소관 entrypoint read-only). 실 append 는 독립 ANU collector
    세션 소관(§7) — 본 executor 세션은 ledger 직접 write 0.zanu_v3.batch_settle_writebackz anu_v3/batch_settle_writeback.pywz.jsonFr8   )suffixdeleter:   )ensure_asciiN)batch_idtrack_idr   r  T)
missing_oku   anu_v3.batch_settle_writeback.evaluate_durable_success_writeback (+53 소관 · READ-ONLY 평가만 · 실 append 는 독립 ANU collector 세션 소관 · ledger 직접 write 0)r   )r_   WRITEBACK_IDEMPOTENT_SKIPu   independent ANU collector (callback ANU key c119085addb0f8b7) — §7 회수·검증·Codex·adjudication 후 +53 durable-success write-back)	ri   r  ledger_direct_writewriteback_verdictr^   durable_success_evaluatedreasonswrite_performedapply_deferred_to)r0   r%   rr   tempfileNamedTemporaryFiler;   dumpname"evaluate_durable_success_writebackBATCH_IDTRACK_IDr   r   unlinkr   r   listr^  )r  bswr   tfsrc_pathdecisions         r    _stage6_durable_writebackrn  z  s    ')KC M!F 
	$	$GEG
 			"BU;77	 55& 6 H 	NT*V % %--$,$;$;%-%<%<C&D(()"#. %  s   %C##C,c                   t        dd      }t        dd      }t        t        z  }|j                  |      }|j	                  |t
        g      }|j                  t        dt         t        t
        t              }|j                  |gdt        	      }|j                  |gd
dt              }| d   du }	t        d |j                  D              }
t        d |j                  D              }|
xs |}d|j                         |j                   |j"                  |j$                  |j&                  t)        |j                        | d   |
|||	r|n| d
|j                   |j                   dk(  |j*                  du xr |j"                  du ddS )u   STAGE 7 — runtime event loop (+54). 공유 durable ledger 를
    read-only 소비, Track A(task-2604) durable-success EVENT 즉시 감지
    (event-driven). dead-man/fixed-time 진행 트리거 → 하드 FAIL 음성.zanu_v3.runtime_event_loopzanu_v3/runtime_event_loop.pyr3   r4   )r   r   )r\   expected_dispatch_idr  r   r   registry_completed_event)single_tasksprogress_trigger_sourcegenerated_at_kstdead_man_fallbackT)rr  rs  dead_man_signalrt  rl   c              3  ^   K   | ]%  }t        |j                  d             t        k(   ' yw)r\   N)rv   rw   rx   ).0r   s     r    	<genexpr>z-_stage7_runtime_event_loop.<locals>.<genexpr>  s+       	AEE)0s   +-c              3     K   | ]b  }t        |j                  d             t        k(  xr; t        |j                  d            du xr t        |j                  d            dk7   d yw)r\   readyTr   NO_LEDGER_RECORDN)rv   rw   rx   r~   )rx  rs     r    ry  z-_stage7_runtime_event_loop.<locals>.<genexpr>  sh      $  	AEE)0 	8w D(	8i !%77	8$s   A(A*z[anu_v3.runtime_event_loop.RuntimeEventLoop.run (read-only registry consumer; ledger byte-0)rq   FORBIDDEN_TRIGGER_SOURCEN)rs  r   	hard_fail%dead_man_signal_observed_not_promoted)ri   enveloper   r   fixed_time_useddead_man_usedevents_observed_countrq   track_a_in_events_observed track_a_single_task_result_readytrack_a_event_detected_by_loop"event_driven_acceptance_consistentforbidden_trigger_negative)r0   r%   rr   rz   RuntimeEventLoopr   SingleTaskSpecrx   r   r   runr  anyevents_observedsingle_task_resultsto_jsonr   r   r  r  r   dead_man_signal_observed)r=  r>   r   r   r   loopr.   result	forbiddenr   track_a_in_eventstrack_a_task_result_readydetected_track_as                r    _stage7_runtime_event_loopr    s    #%CC ),G M!F--f5H4D3EFD((9: &&  D XXV :  F V 3	  I @ATIJ
  ''  !$ $ ++	$ ! )E,E7NN$>>"33!11--!$V%;%;!<!"23&7,E*: !+5E1E (; (("**.HH22d: 7..$6'
% r   c                   t        dd      }|j                  t        gt        t	        t
                    }|j                  | dddt              }|j                  |t              }|j                  | d	dt        
      }d||j                  ddd|j                  |j                  |j                  dddd	|j                  |j                  dk(  xs |j                  dk(  ddS )u   STAGE 8 — bounded enactor (+55). proposal→additive consolidated.
    artifact_writer=None → 완전 dry (merge/PR/write 0).zanu_v3.runtime_event_enactorzanu_v3/runtime_event_enactor.py)r   r   workspace_rootrq  FN)rs  allow_actual_dispatchartifact_writerrt  )rt  fallback_progress)rs  r  rt  uY   anu_v3.runtime_event_enactor.RuntimeEventEnactor.enact (proposal-only · additive · dry)nonezbounded_enact (proposal-only)Tr   ENACTOR_FORBIDDEN_TRIGGERr~  )rs  r   r  )ri   r  r   	authorityauto_executedaction_modeenacted_countdispatch_ready_countblocked_countadditive_artifacts_onlyactual_write_performedmerge_pr_writer  )r0   RuntimeEventEnactorr   r   rv   r%   enactr  enactor_result_enveloper   r  r  r  )loop_envelopeenenactorr  r  r  s         r    _stage8_bounded_enactorr    s    
&(I
B $$"#+4y % G
 ]] :#  F ))&6)JH 3	  IG>>6-- & ; ;--#'"'': (("**.II ?  $>>	'
 r   c               *    | j                  |||      S )u  STAGE9 consolidation seal seam — 실 entrypoint
    ``anu_v3.authoritative_verdict_selector.select_authoritative_verdict``
    호출 단일 지점.

    테스트 가능성 위한 *최소* spy seam (회장 §5: 옵션 B real-entrypoint
    구현 무회귀 — 기본 경로는 인자/반환 변형 0 으로 실 selector 에 그대로
    위임). stage9 회귀 테스트가 본 seam 을 monkeypatch/spy 하여
    select_authoritative_verdict 실 호출을 독립 증명하고, 통합 결과가
    selector 반환에서 *파생* 됨(하드코딩 우회 불가)을 mutation 으로
    검증한다. seam 미경유(=실 selector 미호출) 시 stage9 회귀 FAIL.r  )r6  )r>  recordsr\   r   s       r    !_consolidation_authoritative_sealr  (  s#     ++8 ,  r   c                   t        dd      }t        dd      D ci c]  }d| | d|    d    }}|j                  ddt        t        t        d	d
dd	      }t        ||gt        t        g      }|j                  |j                  k(  xr0 |j                  dk(  xr |j                  dk\  xr |j                  du }dd|d
|j                  |j                  |j                  |j                  d|dt         dd|d   dddS c c}w )u  STAGE 9 — 전용 consolidation real entrypoint (회장 §3 옵션 B
    remediation · Codex HIGH 해소).

    stage1~8 self-chain 산출을 통합하고, 통합 결과 *자체* 를 실
    entrypoint ``anu_v3.authoritative_verdict_selector.
    select_authoritative_verdict`` 로 봉인(seal)한다. 통합 self-chain
    record(claimed independent — untrusted)를 단독 입력하면 독립 ANU
    verdict 부재로 ``AUTHORITATIVE_VERDICT_PENDING`` · self-chain
    QUARANTINED 이 *실 모듈 계산* 으로 산출되어, "통합 결과는 영구
    비권위 · authoritative=독립 ANU collector" 가 재확인된다. stage9
    가 더 이상 local static string 이 아니라 다른 stage 와 동형으로
    ``real_entrypoint`` 값으로 backed (mock-only/문서-only 금지).r5   r6   r	   	   stageri   r  r  r   Tr  uy   executor self-chain CONSOLIDATED result — 영구 비권위 (통합 단계 claim 무시 · 독립 ANU 만 authoritative)r  r  r   Fu  scripts.run_operational_pilot_2605.consolidate_pilot_result -> anu_v3.authoritative_verdict_selector.select_authoritative_verdict (consolidation seal · self-chain 영구 비권위 재확인 · authoritative=DEFERRED_TO_INDEPENDENT_ANU_COLLECTOR · static string 아님)zBanu_v3.authoritative_verdict_selector.select_authoritative_verdict8DEFERRED_TO_INDEPENDENT_ANU_COLLECTOR (callback ANU key )r   rq   )ri   consolidation_entrypointconsolidated_stage_entrypointsconsolidation_sealedconsolidation_seal_verdict!consolidation_seal_classification$consolidation_seal_quarantined_count(consolidation_seal_independent_anu_countr   )consolidation_non_authoritative_confirmedr   consolidated_artifact_pathrq   	mock_onlydocumentation_only)r0   ranger5  r   r   r  r   r   AUTHORITATIVE_VERDICT_PENDINGr)  r(  r   r   )stagesr=  r>  istage_entrypointsconsolidated_self_chainsealconsolidation_non_authoritatives           r    consolidate_pilot_resultr  :  sl    /2C q! sVeA3K():;;  "//&'!%$G 0  -	 !"#	D 	s@@@ 	&&!+	""a'	 GGu	 $=
%0*; $&*ll-1-@-@040F0F&&$)+ G # ?!"23#; 9s   Dc                    t        | |      S )un   STAGE 9 wrapper — 전용 real callable ``consolidate_pilot_result``
    호출 (stage1~8 과 동형 결선).)r  )r  r=  s     r    _stage9_consolidationr    s    
 $FG44r   c                   | d   | d   | d   c}}| d   | d   }}| d   | d   | d   }}}| d	   }|d
   }	|	d   d   }
|d   dk(  xr  |d   du xr |d   j                  d      dk7  |d   du xr |d   du xr |d   du t        fddD              |d   du xr |d   du |d   du xr |d   du |	d   du xrI |d   d   du xr= |d   d   dk(  xr |
d k(  xr |	d!   du xr |	d"   du xs |d   d   d#k(  xr
 |	d$   d%   du |d&   du xr |d'   du xr |d(   d)k(  |d   d*v xr |d+   du xr |d,   du xr
 |d-   d.   du |d/   du xr |d0   du xr
 |d-   d.   du |d1   du xr+ |d2   du xr" |d3   du xr |d4   du xr |d5   du xr d6|d7   v d8
}|t        |j                               t        |j                               d9S ):Nstage1stage2stage3stage4stage5stage6stage7stage8stage9r.  r   rb   r   r   Tr   r   r   Fr   c              3  .   K   | ]  }d    |     yw)r   Nr   )rx  kr<  s     r    ry  z_evaluate.<locals>.<genexpr>  s#      0
 "0
s   )r   r   r   r   r   r%  r*  r0  r,  rp   rq   rh   OPERATIONAL_PASSr   r2  rg   r3  r  r]  r_  r[  r   )NEXT_ACTION_READYALL_SETTLEDWAITr  r  r  r  r  r  r  r   r  r  r  anu_v3ri   )
stage1_profile_auto_resolvedstage2_anu_contract_enforced stage3_executor_readonly_goal_okstage4_callback_anu_key_only$stage5_independent_anu_authoritative)stage5_acceptance_event_driven_on_track_a.stage6_durable_success_writeback_eval_readonly#stage7_loop_event_driven_no_deadmanstage8_enactor_proposal_only$stage9_consolidation_real_entrypoint)checks
all_passedauto_chained_9_stage)rw   allvalues)r  r   s2s4s5s6s7s8s9rA  rM  r  r<  s               @r    	_evaluater    sq   !6(#3VH5EJBBHvh/B!6(#3VH5EBB		B	!	"BIy)J(*8
(B )K4')K-.228<
J-.$6 23u<GH -0 0
0
 -
 23t; ;12d: #$, 5+,4 ()T1 ./0MN 234DE%& :"&88: ;<D: 01T9 234DE#$ 8E  *+t3 /$%./()Q. yMII F78D@F$%.F /0=E '(E1 F?#u,F/0=E %&$. 2-.%72>?4G2 ;5(2 '(E1	2
 B011SKFZ &--/* #FMMO 4 r   c            	     F   t               } | d   }t               }t        |      }t        |      }t	        |      }t               }t        ||      }t        |      }t        |      }	t        |	d         }
|||||||	|
d}t        ||      }||d<   t        |      }| |||dS )uK   9-stage 자동 결선 (READ-ONLY — ledger/실 dispatch/merge/PR write 0).rH   r  )r  r  r  r  r  r  r  r  r  )inputstrack_a_eventr  
evaluation)rZ   r   r   r   r   r   rP  rn  r  r  r  r  )r  grr=  r   r  r<  r  r  r  r  r  r  r  evs                 r    	run_pilotr    s    F	$	%B46G	"2	&B	"2	&B	"	B	!	#B	&r7	3B	"2	&B	#G	,B	 J	0B 	F 
vw	/BF8	6	B 	 r   c            
     &    g ddddt         dddddS )uF   회장 §7 — team result 외부경계: subagent usage ledger 강제.u:  subagent 미사용 — 본 Track B operational pilot 은 단일 executor(dev6-team 페룬) 세션이 9-stage 실 entrypoint 를 직접 결선 호출했으며 내부 subagent 를 0회 사용했다. 회장 §7: team result 에 usage ledger 또는 미사용 명시 필수 — 본 ledger 가 미사용을 명시한다.TuX   9-stage operational pilot consolidated result + §4 allowlist additive artifacts (10종)uq   self-chain 영구 비권위 — authoritative verdict 는 독립 ANU collector(callback ANU key c119085addb0f8b7)r   )team_result_contractoutputs_summaryr  callback_owner_key*executor_self_key_callback_collector_count'executor_self_dispatch_delegation_count+executor_self_codex_self_adjudication_count)subagents_useddeclarationexternal_boundary_contract)r   r   r   r    _subagent_usage_ledgerr    s8     % %) @F"2:;78;<
'
 r   c                   | d   }| d   }| d   }| d   }|d   }t         t        d}|d   d   }|j                  d	i       xs i }d
d|j                  dg       |j                  dg       |j                  dg       |j                  dg       dd d}	ddi|i ddd|d   d|d   d|d   dt        |d   |d   |d   |d    |d!   t        d"d#|d$t        d%d&      D 
ci c]  }
d'|
 |d'|
    d(    c}
d)|d)   d(   d*|d)   d+|	d,|d-   d.|d/   d0|d0   d1dd2dd3|d4   }dd5i|t        d|j                  d6      |j                  d7      |j                  d8      |j                  d9      |j                  d:      d;|d   d<   |d   d(   |	d=|d   d>   j                  d8      |d   d>   j                  d8      d?k7  d@dA}ddBi||dC   |dD   |dE   |dF   dG}ddHi||j                         D ci c]  \  }}||
 c}}dddI}|dJ   }ddKi|dL|d0   |d4   |d)   t        d%d&      D 
ci c]  }
d'|
 |d'|
    d(    c}
|dM   rdNndOddPt         dQ|dR   dt        |dS   |dT   |dU   |dV   dV   |dW   dXdYddZt               |d-   dV   d|d/   d[   d\dd]d^t        dd_d`dad\dbdcd\dddt               de}ddfi||dM   rdgndhddddddddd\didjdk|dS    dl|dR    t        t              t        dmdn}ddoi|i dpdqdrt        d1dd2ddsddtt        d%d&      D 
ci c]  }
d'|
 |d'|
    d(    c}
du|d)   d(   d0|d0   dv|dM   rdNndOdwddxdydzt        |dS   d|dR   |dV   dV   d{d|t        D cg c]  }| c}d}t               d~dt         dt         ddd}|||||||dS c c}
w c c}}w c c}
w c c}
w c c}w )Nr  r  r  r  r  )schema_taskr+  r  r   boundary_expansionu   회장이 gate/HOLD/allowed/forbidden 을 풀어쓰지 않았으나 ANU 가 policy_profile_engine boundary_expansion 으로 자동 산출.Tgate_condition_nameshold_trigger_conditionsallowed_actionsforbidden_actionsF)noteauto_derived_by_enginer  r  r  r  hold_for_chairhold_reasonrE   z"anu.operational_pilot.pilot_run.v1rC   -task-2605 Track B READ_ONLY_OPERATIONAL_PILOT
input_goalrI   input_goal_one_linerJ   input_goal_requestrH   consumed_read_onlyrK   rL   rM   rN   rO   )plus57_pilot_goalplus57_exec_plan_schemaplus57_success_criteria_idsplus58_fallback_criteria_schemaplus58_non_blocking_schema_idrO   shared_ledger_read_onlyr,  nine_stage_chainr	   
   r  ri   r  stage9_consolidation_sealgate_hold_decision_embedded"runtime_event_loop_result_embeddedr  enactor_result_embeddedr  r  r  r  evaluation_checksr  z)anu.operational_pilot.selected_profile.v1r   
profile_idrb   r   mapping_source)r   r%  rb   r   r&  r   r   r   r   )unknown_goal_typerb   not_resolved)r   "auto_resolved_without_chair_detailselected_profiler   engine_consumed_read_onlygate_hold_decisionfail_closed_negativez)anu.operational_pilot.execution_result.v1r  r  r  r  )dispatch_planninganu_key_callbackdurable_writeback_evalz5anu.operational_pilot.independent_collector_result.v1)authoritative!executor_self_chain_authoritativer.  z,anu.operational_pilot.consolidated_result.v1u4   task-2605 9-stage operational pilot — consolidatedr  r  r   r  r  r/  rq   rl   rp   r   r3  u   NON_BLOCKING mark 까지 허용u=   cancel-on-success live remove 또는 CANCEL_FAILED_CLASSIFIED)r/  r0  rj   rq   rl   rp   fallback_acceptance_verdictr3  a_incomplete_rulea_complete_ruleduplicate_only_is_not_passr  r   )runtime_event_loop_verdictenactor_proposal_onlyenactor_actual_writer  blocking)!1_acceptance_event_driven_track_a&2_team_result_contract_subagent_ledger$3_runtime_loop_enactor_proposal_onlyzNO-ACTION (safety-net only)rq  zJTrack A(task-2604) durable-success EVENT (shared ledger read-only consume))anu_fallback_at_kstfallback_is_progress_triggernormal_convergence_actionrs  acceptance_event_source0dead_man_fixed_time_fallback_as_progress_triggeru   track 미소유 공유 durable 인프라 — 본 runner read-only consume, direct write 0 (+53/+54 소관 mechanism / 독립 ANU collector 만 append))callback_4tuple_index_jsonlr[  )rC   r  
all_checksr   nine_stage_real_entrypointsself_chain_verdictr   r   acceptance_required_inclusionsfallback_doctrineshared_infra_contractr  subagent_usage_ledgerz!anu.operational_pilot.decision.v1&OPERATIONAL_PILOT_9_STAGE_AUTO_CHAINEDOPERATIONAL_PILOT_INCOMPLETEu   0 (byte-0 · additive only))	read_onlyno_github_writeno_prno_mergeno_credentialno_branch_commit_pushr[  existing_artifact_modificationuM   Track A(task-2604) durable-success EVENT 소비(event-driven) — 현 상태 u    · criterion zTexecutor self-collector/self-adjudication/self-Codex/self-dispatch/self-delegation 0)rm  r  actual_dispatchconditions_satisfied_2acceptance_fallback_criterionexpected_files_allowlistshared_infra_not_allowlistedself_star_zerozanu.operational_pilot.result.v1r   r   r   real_entrypoint_calledrE  r  rF  r   r   r   track_a_acceptance)r\   rb   ro   r/  r   deliverablesrJ  next_actionu,   normal completion callback cron — ANU key u"    로만 발사 (executor self key u    절대 금지). 독립 ANU collector 가 회수·검증·Codex·adjudication·+53 durable-success write-back·+54 event loop·+55 enactor·consolidated 자동 결선 (authoritative=독립 ANU).r  r   )r   r  rw   rP   rr   r  	GOAL_TYPEitemsr   rx   r  ANU_FALLBACK_AT_KSTri  EXPECTED_FILESr   )r  str  inpr=  r  r   r   be	gate_holdr  	pilot_runr*  execution_resultr  vr  rA  consolidatedrm  fr  s                         r    _build_artifactsrk  ,  s/   	XB	\	B
h-C/"G	HB$7F
X,z
"C	%r	*	0bBQ"& "'=r B#%66*CR#H66"3R8VV$7<
I 	6 
  	@  	c,-	 
 	s#89  	c"67  	!2'*+='>+./E+F/23M/N-0-@0321 (5

 $ 	$W% & 	1b\
 A3KeA3K):;;
' . 	"X,01/ 0 	$R\1 2 	&y3 4 	-bl5 6 	"2h<7 8 	#9 :9 : 	U; < 	e= > 	R\? IF 	=
 .2%(WW-D%E'',/ggh' WW_5!gg&67
 &(\'&
 &(\2C%D'!=l#ABFF xL.c(m	!
#< 	=
 X,  \xL"$X, 	I
 HHJ
'DAq1a4
' -2 
!	"B@B
B H "#9 :l%'\ 1b\(
 A3KeA3K):;;(
 )+<(8ff$)F #
  _+/#2")*:";9@;: 0710 02)}Y/GX,%F$+.2!2& '( /1l9.E)-(*8,) #$!5-+
B $7,1)F'A(6@A
,K $%	"
  !7!9CBLJ 	5
 l =+ #!%)#$.K	#
!"234 5K)+ %)$8(553H< 	3"
" 	&" 	)	"
 	U" 	e" 	!$" 	&1b\(
 A3KeA3K):;;(
" 	/81
" 	#9 :"  	<(8ff!"" 	#E#"$ 	"#J%"& 	&./ K)}Y/
'"4 	N3q35"6 	 !7!97"8 	E
>
 TT9"B 	%C"FJ 3<9I9I<H19/5
 
G
p ((
D(
$ 4s   N>
>O:O	,O
	O
c                   | t         vrt        d|  d      | t        vrt        d|  d      t        | z  }|j                  j                  dd       |j                  t        j                  |dd      d	z   d
       y )Nz	REFUSED: u    not in §4 allowlist (write 0)u8    is static/shared-infra — runner does not direct-writeT)parentsexist_okF   rU  indent
r8   r9   )	ra  
SystemExit
EMIT_FILESr%   parentmkdir
write_textr;   dumps)r>   r   ps      r    _writerz  %  s    
. 9SE)HIJJ
*u  
 	
 	s
AHHNN4$N/LL

3U15<w  r   c                   t        j                  d      }|j                  ddd       |j                  |       }t	               }t        |      }|d   }|d   }t        t        j                  t        |d	   |d
   rdndd|d   |d   |d   d   d   d   |d   d   d   d   d   |d   d   d   dt        |j                        ddd             |j                  r$|j                         D ]  \  }}t        ||        |d
   rdS dS )Nr  )descriptionz--emit
store_trueuw   write §4 allowlist artifacts (default: dry — print only, ZERO write). ledger 는 어느 경우에도 직접 write 0.)actionhelpr  r  r  r  r  r   Fr  rq   r  r  r.  r/  r   r  r^   r   )r\   r  rF  r   r  rq   acceptance_criterionr3  r0  r[  emitro  rp  r	   )argparseArgumentParseradd_argument
parse_argsr  rk  printr;   rx  r   r~   r  r_  rz  )	argvapnsr  	artifactsr  tar>   r   s	            r    mainr  4  s\   		 	 C
B OOF   
t	B
+C %I	\	B	_	B	

"(*+A(B02<0@ff,1X,"$%5"6(+Hh(?))) 038}X/F)00&0( +.h-*A.+ ()RWW#& +	
2 
ww!) 	HC3	< 1'a'r   __main__)r,   rv   r-   rv   )r>   rv   returnr   )r  Dict[str, Any])rB   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\   rv   r   r   r  r   )r  r  r=  r  r  r  )r  r  r  r  )r  r  r  r  )r>   rv   r   r   r  None)N)r  zOptional[List[str]]r  r  )Ir   
__future__r   r  importlib.utilr"   r;   r)   ra  pathlibr   typingr   r   r   r   __file__resolverm  r%   rv   pathinsertr   r^  rf  rg  r   r   r   r  r`  r   rx   rP   rS   rT   rU   rV   rQ   rr   ra  rt  RuntimeErrorr   r0   _PRESEED_mn_rpr*   r?   rZ   r   r   r   r   r   r  rP  rn  r  r  r  r  r  r  r  r  rk  rz  r  r   rs  r   r   r    <module>r     sW  HR #    
   , ,H~''*t9CHHHHOOAs4y!
+	((
 & & 
	 , -gYa8H7IJ   4 < 6H > <;

VL V
"  HC
#++3
@.@L22j%P"J2hh!/hhV*$**ZM`.b	(+7:$MM%3MM`55%355Wt#R.vr-(` z
TV
 r   