
    4j1m                       U d Z ddlmZ ddlZddlZddlZddlZddlm	Z	 ddl
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'dZdZd	Zd
ZdZdZdZdZdZdZddeg ddZde d<    G d de!      Z"ddd(dZ#d)dZ$d*dZ%d)dZ&d*dZ'd)d Z(d+d!Z)d,d"Z*d)d#Z+d-d$Z,d.d/d%Z-e.d&k(  r e/ e-             y)0u  task-2553+57 — TRACK B: NEXT_RUNTIME_STRUCTURE_PILOT_PLAN builder (read-only).

회장 4-track ABCD 병렬 배치 Track B. goal = NEXT_RUNTIME_STRUCTURE_PILOT_PLAN.

핵심: 짧은 read-only goal 하나로 다음 실사용 pilot 을 **설계**한다.
**실제 dispatch 는 하지 않는다** (설계·계획·기준 산출 only). 문서-only 금지 —
본 스크립트가 policy_profile_engine 정본 read-only resolve 경로(실 entrypoint)
를 직접 호출해 selected profile 을 산출하고, json/schema 기반 pilot 계획
4종 + decision/result 를 결정적으로 생성한다 (mock-only 시 FAIL).

실 entrypoint (direct call, no mock):

  * ``anu_v3.default_profile_resolver.run_default_profile_resolution`` —
    goal_type + boundary 만으로 default 경로에서 profile 을 자동 선택.
    내부적으로 C1 engine 정본 API
    ``anu_v3.policy_profile_engine.parse_goal_request -> resolve_policy``
    를 READ-ONLY 소비 (engine byte-0, profile mutation 0).
  * ``anu_v3.default_profile_resolver.run_selected_profile_evidence`` —
    동일 입력의 selected profile evidence 평면 증거.
  * ``dispatch.callback_owner_enforcer.{DEFAULT_ANU_KEYS,is_anu_key}`` —
    callback owner/key 일관성 read-only 교차 확인 (+49 코드 정본).

설계된 pilot goal (권고안 §3): 짧은 read-only consistency check =
"policy profile engine read-only resolve dry-run" + callback owner/key
registry 일관성 교차 — 다음 실사용 pilot 의 진입 전 무해 확인.

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

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   c                &   t         j                  j                  | t        |z        }||j                  t        d|       t         j                  j                  |      }|t        j                  | <   |j                  j                  |       |S )uX  실 모듈을 파일 경로로 로딩 (mock 아님 — 정본 소스 그대로).

    repo 에 ``dispatch.py`` 모듈과 ``dispatch/`` 패키지가 공존해 일반
    import 가 컨텍스트(직접 실행 vs pytest)에 따라 엇갈리므로, sibling
    +51 pilot 과 동일하게 정본 파일을 명시 경로로 로딩한다. mock 0.
    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       ?/home/jay/workspace/scripts/build_next_pilot_plan_2553plus57.py
_load_realr   7   sx     >>11'4'>JD|t{{*!$;G9"EFF
..
)
)$
/CCKKKKC J    ztask-2553+57uQ   회장 4-track ABCD 병렬 배치 — Track B (NEXT_RUNTIME_STRUCTURE_PILOT_PLAN)runtime_structure_smoke_pilotc119085addb0f8b71e41a2324a3ccdd0
6937032012z2026-05-19 01:05 KST)	memory/events/pilot_goal.json*memory/events/selected_policy_profile.json'memory/events/pilot_execution_plan.json#memory/events/success_criteria.jsonz+scripts/build_next_pilot_plan_2553plus57.pyz3tests/regression/test_next_pilot_plan_2553plus57.py(memory/events/task-2553+57.decision.json&memory/events/task-2553+57.result.jsonzmemory/reports/task-2553+57.md)r   r    r!   r"   r#   r$   z#next-runtime-structure-pilot-dryrunu&  다음 실사용 pilot 진입 전, policy profile engine 의 read-only resolve 경로가 runtime_structure_smoke_pilot goal_type 에 대해 일관되게 RESOLVED 를 산출하고 unknown goal_type 에 fail-closed 되는지, callback owner/key 가 ANU key 정본과 일치하는지 무해 확인)zforbid:production_writez$forbid:actual_pr_merge_branch_actionz"forbid:self_collector_guard_bypass)goal_idgoal_statement	goal_typeboundaryDict[str, Any]PILOT_GOAL_REQUESTc                      e Zd ZdZy)MockOnlyErroruK   실 entrypoint 미사용(mock-only) 시 즉시 FAIL — 문서-only 금지.N)__name__
__module____qualname____doc__ r   r   r,   r,   |   s    Ur   r,   F
allow_mockc                h   | rt        d      t        dd      }t        dd      }|j                  }|j                  }|j                  }|j
                  } |t              } |t              } |dg d      }	t        |      }
t        t        |
 |t        |
       |t        |
      d}d	d
d|||	|dS )u  policy_profile_engine 정본 read-only resolve 실 entrypoint 직접 호출.

    mock-only(=engine/resolver 를 우회한 날조 입력)는 FAIL. allow_mock=True
    는 regression 의 *음성* 케이스에서만 사용되며 MockOnlyError 를 던진다.
    un   mock-only path 거부 — 실 policy_profile_engine resolve 必須 (문서-only/날조 완료 금지, §3/§5)zanu_v3.default_profile_resolverz"anu_v3/default_profile_resolver.pyz dispatch.callback_owner_enforcerz#dispatch/callback_owner_enforcer.py __no_such_goal_type_2553plus57__)r'   r(   )mandated_callback_keyexecutor_self_keyregistered_anu_keysmandated_is_anu_keyexecutor_self_is_anu_keyFTu   anu_v3.default_profile_resolver -> anu_v3.policy_profile_engine.parse_goal_request -> resolve_policy (정본 API, import-only, mutation 0, byte-0))	mock_onlyreal_entrypointengine_consumed_read_onlyresolvedevidenceunknown_goal_type_resolutionowner_key_consistency)
r,   r   run_default_profile_resolutionrun_selected_profile_evidenceDEFAULT_ANU_KEYS
is_anu_keyr*   sortedANU_CALLBACK_KEYEXECUTOR_SELF_KEY)r3   	_resolver_enfrB   rC   rD   rE   r>   r?   unknownanu_keysowner_consistencys               r   _call_real_entrypointsrN      s     :
 	
 )+OI *,QD &/%M%M"$-$K$K!,,J-.@AH,-?@H -8bIG &'H!1.')*:HE$./@($K < (/!2 r   c                 T    dt         t        ddt        dddddt        d	g d
dg dddS )Nz.anu.next_runtime_structure_pilot.pilot_goal.v12026-05-18 22:02 KST   dev6-team 페룬FTuV   다음 실사용 pilot — policy profile engine read-only resolve consistency dry-runu8   short read-only consistency check (회장 §3 권고안)u  runtime_structure_smoke_pilot goal_type 을 default 경로에서 engine read-only resolve 했을 때 RESOLVED·profile_bound 가 안정적이고, unknown goal_type 에 fail-closed 되며, callback owner/key 가 ANU key 정본과 일치함을 무해 확인한다.u   다음 실사용 dispatch 진입 전, 신구조(policy_profile_engine + default_profile_resolver + callback owner enforcer)가 실제로 일관 작동하는지 무해(read-only)하게 1회 확인하는 최소 게이트. 실 merge/write/callback/dispatch 0.)uX   기존 task-2553 산출물 read-only index 재검(신구조 미검증 — 가치 낮음)uO   +44 callback_4tuple_registry 전용 재검(이미 +51 에서 수행 — 중복)uH   신규 profile 인스턴스 dry-run(현 evidence 1종 외 환각 위험))titlekindone_line_goalgoal_requestwhy_short_and_readonlyrejected_alternatives)zJanu_v3.default_profile_resolver.run_default_profile_resolution (READ-ONLY)zIanu_v3.default_profile_resolver.run_selected_profile_evidence (READ-ONLY)zUanu_v3.policy_profile_engine.parse_goal_request -> resolve_policy (READ-ONLY consume)zJdispatch.callback_owner_enforcer.{DEFAULT_ANU_KEYS,is_anu_key} (READ-ONLY)uK   mock-only 검증은 FAIL — 실 engine resolve 必須 (문서-only 금지))schematask_idbatchts_kstexecutorexecutor_keyactual_dispatchdesign_only
pilot_goalreal_entrypointsmock_only_forbidden)TASK_IDBATCHrH   r*   r1   r   r   build_pilot_goalre      sQ    B(&) mNT
 /I
&!
,
  mK& &r   c                   | d   }|j                  di       }dt        dt        |j                  d      dk(  ddd	|j                  d
      |j                  d      |j                  d      |j                  d      |j                  d      |j                  d      |j                  d      |j                  d      |j                  d      ddd|j                  dg       |j                  dg       |j                  dg       |j                  dg       |j                  d      |j                  d      d| d   d| d   j                  d      | d   j                  d      | d   j                  d      dk7  d d!t         t        d"| d#   d$d%
S )&Nr>   boundary_expansionz;anu.next_runtime_structure_pilot.selected_policy_profile.v1rP   statusRESOLVEDu`  +52 Track3 mapping/resolver 등록 후 — runtime_structure_smoke_pilot goal_type 은 이제 policy_profile_engine 정본 read-only resolve 경로(default_profile_resolver -> parse_goal_request -> resolve_policy)로 engine-자동 산출된다 (+51 의 ANU 수기 도출과 달리 engine-resolved=true). 관측된 사실만 기재 — 날조·과장 0.u   본 builder 가 run_default_profile_resolution 실 entrypoint 를 직접 호출한 결과 status=RESOLVED·profile_bound=true 를 관측.)profile_engine_resolved	statementverified_basisresolved_profile_name
profile_idprofile_versionprofile_bound
auto_applydefault_pathdispatch_lifecycle_effectmapping_sourceLOWT)rm   rn   ro   rh   rp   rq   rr   rs   rt   	risk_tier	read_onlygate_condition_nameshold_trigger_conditionsallowed_actionsforbidden_actionscompletion_packet_meta_refevidence_meta_ref)rx   ry   rz   r{   r|   r}   r=   r5   r@   refusal_code)unknown_goal_typerh   r~   expected_not_resolvedu   독립 ANU key u`   dispatch.callback_owner_enforcer.enforce_callback_owner (DEFAULT_ANU_KEYS) — +49 코드 정본rA   )callback_owner_must_be$executor_self_key_forbidden_as_ownercode_enforced_byconsistency)
rX   rY   r[   r'   engine_mapping_statusselected_profilerg   r=   fail_closed_negative_check	owner_pin)getrc   	GOAL_TYPErG   rH   )realresbes      r   build_selected_policy_profiler      s   
z
C	%r	*BO('*wwx'8J'FaZ"
 &)WW-D%E'',/"ww'89ggh' WW_5'',/GGN3),1L)M!gg&67
 %'FF+A2$F')vv.G'L!vv&7<!#(;R!@*,&&1M*N!#(;!<
 &**E%F!C9:>>xH !?@DD^T%)*H%I%M%Mh%W&	'
 )88H7I&J4E;   78
a9 9r   c                     dt         dddddddd	d
ddddd
ddddd
ddddd
gdt        t        dddt         ddddddddddddd	d	S )Nz8anu.next_runtime_structure_pilot.pilot_execution_plan.v1rP   FTu   본 절은 다음 실사용 pilot 의 실행 계획을 *설계* 만 한다. 실제 dispatch cron 발사·실 dispatch·신규 cron 등록 0 (회장 §1/§2/§4).r   zread-only resolve dry-runu   scripts/build_next_pilot_plan_2553plus57.py 를 read-only 로 실행 — default_profile_resolver 실 entrypoint 가 policy_profile_engine 을 read-only 소비, RESOLVED 확인u3   none (file write 0, --emit 시에만 §3 allowlist))stepnameactionside_effect   zfail-closed negativeu;   미매핑 goal_type 이 RESOLVED 가 아님(refusal) 확인none   zcallback owner/key consistencyuk   mandated callback key == 등록 ANU key, executor self key ∉ ANU key 확인 (+49 코드 정본 read-only)   zregression gateux   tests/regression/test_next_pilot_plan_2553plus57.py 실행 — 스키마/조건 검증 + mock-only FAIL 음성 케이스u   아래는 *향후* 회장 GO 시 실 dispatch 가 따를 계약의 설계 스케치일 뿐 — 본 Track 에서 발사 0. cron 미등록.uI   ANU (독립 세션 — 회수·검증·Codex·adjudication·batch 통합)D   normal-callback durable-success event (고정시각/dead-man 금지)u    ANU key·안전망 한정 (예: u$   ) — 진행/수락 트리거 아님zTexecutor self-collector/self-adjudication/self-Codex/self-dispatch/self-delegation 0)note$executor_self_key_NOT_callback_owner$normal_completion_callback_owner_keycollector_rolenext_action_basisfallbackno_self_staru-   0 (byte-0 — 실 entrypoint·mock-only FAIL))	rw   no_github_writeno_prno_mergeno_credentialno_branch_commit_pushlow_riskr^   existing_artifact_modification)	rX   rY   r[   r^   r_   rk   planned_steps&would_be_dispatch_contract_DESIGN_ONLYconditions_2)rc   rH   rG   ANU_FALLBACK_AT_KSTr1   r   r   build_pilot_execution_planr   "  s    L( ]
 3R  U	 .W%	 8K  & )T  &5#
LR 5F4Di!g:;N:OOstr3
 #!%)$.]

uE Er   c                   dt         ddd| d   | d   ddd	d
| d   j                  d      | d   j                  d      dddd| d   j                  d      | d   j                  d      dk7  dddddddt         dt         d| d   dddddddd d!dgd"d#d$t         d%d&d'd(t         d)gd*t         d+t         d,d-d.d/S )0u   success_criteria — Track C(+58 FALLBACK_ACCEPTANCE_CRITERION_FOR_NEXT_PILOT)
    의 fallback acceptance criterion 을 반영 (배치 doctrine 정본).z4anu.next_runtime_structure_pilot.success_criteria.v1rP   SC1_real_entrypointu   pilot 은 policy_profile_engine 정본 read-only resolve 실 entrypoint 를 직접 호출해야 한다. mock-only/문서-only 는 FAIL.r;   r<   )r;   r<   )id	criterionevidence_nowSC2_resolveduH   runtime_structure_smoke_pilot → status=RESOLVED · profile_bound=true.r>   rh   rp   )rh   rp   SC3_fail_closeduX   미매핑 goal_type 은 RESOLVED 가 아니어야 한다(fail-closed, 추측·날조 0).r@   ri   )unknown_statusnot_resolvedSC4_engine_byte0uO   policy_profile_engine·profile·mapping·anchor mutation 0 (read-only consume).)r   r   SC5_callback_owner_anu_keyu3   normal completion callback owner == 독립 ANU key z; executor self key u6    는 callback owner 절대 금지 (+49 코드 정본).rA   SC6_no_self_staru   executor self-collector/self-adjudication/self-Codex/self-dispatch/self-delegation 0; authoritative verdict 는 독립 ANU collector 만.SC7_expected_files_disjointu[   write 는 §3 allowlist 9종에 한정, Track A/C/D 와 0 overlap, 기존 산출물 byte-0.SC8_no_actual_dispatchuM   본 Track 은 설계만 — 실 dispatch cron 발사 0, 신규 cron 등록 0.u   Track C = task-2553+58 FALLBACK_ACCEPTANCE_CRITERION_FOR_NEXT_PILOT (회장 4-track ABCD 배치). 배치 doctrine 정본 — 교차오염 없이 확립된 fallback 원칙을 반영.u   FAC1: pilot 수락(acceptance)은 오직 normal-callback durable-success event 로만 성립한다 (고정시각/dead-man/fixed-time 게이트 진행 트리거 미등록·doctrine).u   FAC2: ANU fallback(예: u   )은 callback 미수신 안전망 한정이며 진행/수락 트리거로 사용해서는 안 된다 (fallback ≠ progress trigger).u   FAC3: normal callback 이 이미 durable-success 인데 fallback 이 발사되면 그 fallback 은 DUPLICATE_CALLBACK_IGNORED 로 분류·무시되어야 한다 (중복 callback 영구 비권위).u   FAC4: normal callback 부재를 fallback 발사로 '수락'으로 승격하는 경로는 금지 (ANU-only authoritative, self-chain verdict 영구 비권위).uH   FAC5: fallback 은 ANU key 로만 발사 가능하며 executor self key uC    fallback 은 CallbackRegistrationBlocked/SELF_COLLECTOR_FORBIDDEN.u(   본 Track B 완료 callback 은 ANU key ud    로만 발사; 수락은 그 normal-callback durable-success event 기준. 본 배치 ANU fallback u    는 안전망 한정.)sourcer   applied_to_this_tracku   batch coordinator: +44 durable registry 에서 Track A/B/C/D durable-success 전부 충족(자신이 마지막 settle track)일 때만 독립 ANU collector 가 consolidated summary 통합. 고정시각/dead-man 게이트 미등록 — 미충족 시 defer.)rX   rY   r[   pilot_success_criteria%track_c_fallback_acceptance_criterionbatch_consolidation_criterion)rc   r   rG   rH   r   )r   s    r   build_success_criteriar   k  s    I( , 
 "&k!2'+,='>! %g":.228<%)*%5%9%9/%J! (w&*+I&J&N&Nx&X$()G$H$L$LX$V!%"! )n
 3I'((<=N<O PLL !%%< = ) i
 4z
 /lg7#
tK
N +&' (6-() *HH( ;#$ %I&''=?52
BD{b br   c                     dt         t        dddddddddddddt        t              dt        t
        d	d
t         dddS )Nz,anu.next_runtime_structure_pilot.decision.v1rP   *NEXT_RUNTIME_STRUCTURE_PILOT_PLAN_DESIGNEDFu  회장 §1 — 짧은 read-only goal 기반 다음 실사용 pilot 을 설계(실 dispatch 0). policy_profile_engine 정본 read-only resolve 실 entrypoint 로 selected profile 산출, json 기반 pilot_goal/selected_policy_profile/pilot_execution_plan/success_criteria 결정적 생성. success_criteria 에 Track C fallback acceptance criterion 반영. 문서-only 아님 — 실 entrypoint·regression(mock-only FAIL).T)rw   r   r   r   r   r   r   u   executor self-collector/self-adjudication/self-Codex/self-dispatch/self-delegation 0 — 회수·검증·Codex·adjudication·batch 통합은 독립 ANU collector(callback ANU key)r   u   ANU key·안전망 한정 (u   ) — 진행 트리거 아님)r   executor_self_key_forbiddenr   r   )rX   rY   rZ   r[   decisionr^   hold_for_chair	rationaleconditions_satisfied_2expected_files_3_disjointself_star_zerocallback_a_independent_anu_key)rc   rd   listEXPECTED_FILESrG   rH   r   r1   r   r   build_decisionr     ss    @(@ 6 #!%)#
 &*.%9G
 5E+<!g56I5JJgh	+
A& &r   c                V   i dddt         dddddt        d	| d	   d
| d   dddddt        t              d|rdndddddd| d   j	                  d      | d   j	                  d      | d   j	                  d      | d   j	                  d      | d   dddt
         d d!dS )"NrX   z*anu.next_runtime_structure_pilot.result.v1rY   r[   rP   r\   rQ   r]   r;   real_entrypoint_calledr<   engine_mutatedFr^   deliverablesself_chain_verdictPASSFAILself_chain_authoritativeauthoritative_selection%DEFERRED_TO_INDEPENDENT_ANU_COLLECTORreal_entrypoint_observationr>   rh   rm   rp   r@   rA   )resolved_statusresolved_profilerp   unknown_goal_type_statusrA   next_actionu,   normal completion callback cron — ANU key us    로만 발사 (durable-success event). 독립 ANU collector 가 회수·검증·Codex·adjudication·batch 통합.r   )rc   rH   r   r   r   rG   r   checks_passeds     r   build_resultr     sS   >7 	( 	&	
 	) 	T+& 	!$'8"9 	% 	5 	^, 	f6 	#E 	"#J 	&#J/33H= $Z 0 4 45L M!*-11/B(,-K(L(P(P) &**A%B(
. 	:  !ZZ18 	%9 r   c                   | d   }| d   }t        | d   xrt | d    xrl |j                  d      dk(  xrV |j                  d      du xrA | d	   j                  d      dk7  xr( |j                  d
      du xr |j                  d      du       S )Nr>   rA   r<   r;   rh   ri   rp   Tr@   r9   r:   F)boolr   )r   r   okcs      r   	_evaluater     s    
z
C
&
'C 	9[!!	9GGH+	9 GGO$,	9 /044X>*L		9
 GG)*d2	9 GG./58 r   c            	         t        d      } t        |       }t               t        |       t	               t        |       t               t        | |      |dS )NFr2   )r   r    r!   r"   r#   r$   __checks_passed__)rN   r   re   r   r   r   r   r   r   s     r   	build_allr   ,  sT    !U3DdOM)9);6S7
 4N3O/Ed/K4B4D2>t]2S*
 
r   c                    | 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 §3 allowlist (write 0 outside)T)parentsexist_okFr   ensure_asciiindent
zutf-8)encoding)r   
SystemExitr   parentmkdir
write_textjsondumps)relobjps      r   _writer   <  s_    
. 9SE)PQRRs
AHHNN4$N/LLCeA>EPWLXr   c                   t        j                  d      }|j                  ddd       |j                  |       }t	               }|j                  d      }t        t        j                  t        d|rd	nd
dt        |j                               ddd             |j                  r-|j                         D ]  \  }}|t        v st        ||        |rdS dS )Nz'task-2553+57 Track B pilot plan builder)descriptionz--emit
store_trueu:   write §3 allowlisted plan artifacts (default: print only))r   helpr   Fr   r   )rY   r^   r   r   	artifactsr   r   r   r   )argparseArgumentParseradd_argument
parse_argsr   popprintr   r   rc   r   keysemititems
EMIT_FILESr   )argvapnsbuiltr   r   r   s          r   mainr  D  s    		 	 -V	WBOOI  
 
t	BKEII12M	

"#(0=f6,1!%**,/ 
	
 
ww 	!HCj sC 	! 1$1$r   __main__)r   strr   r  )r3   r   returnr)   )r  r)   )r   r)   r  r)   )r   r)   r   r   r  r)   )r   r)   r  r   )r   r  r   r   r  None)N)r  zList[str] | Noner  int)0r0   
__future__r   r   importlib.utilr
   r   r   pathlibr   typingr   r   r   __file__resolver   r   r  pathinsertr   rc   rd   r   rG   rH   CHAT_IDr   r   r  r*   __annotations__RuntimeErrorr,   rN   re   r   r   r   r   r   r   r   r   r  r-   r   r1   r   r   <module>r     s=  %L #    
  " " H~''*t9CHHHHOOAs4y! [+	 & & 
 - 

 5	\
 & N "VL V 27 6r'T<~FReP'TB Y%> z
TV
 r   