
    3j%                    :   U d Z ddlmZ ddlZddlmZ ddlmZ ddlm	Z	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<   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e G d d              Z	 	 	 	 d#d!Zg d"Zy)$uw  anu_v3.profile_coordinator_input_adapter — §3.5: profile decision →
batch coordinator 입력 어댑터 (task-2553+52 / Track 3).

목표 (회장 §3.5):
  default profile resolver(`anu_v3.default_profile_resolver`)의 decision
  output 을 batch coordinator 가 track 판단·통합 입력으로 그대로 소비할
  수 있는 평면 표현으로 변환한다.

설계 invariant (§5 / §6 — +39 coordinator_profile_binding 가드 미러):
  - 신규 별도 additive 모듈. resolver·engine·+38·+39·frozen
    `parallel_batch_coordinator.py`·durable v1 무수정. **import 결합 0**
    — anu_v3 import 전무, 순수 stdlib only (resolver decision = 파일레벨
    contract 로만 소비).
  - coordinator = 판단보조 입력 소비만. closeout / merge **자동확정 0** —
    어떤 입력에서도 ``closeout_authority`` / ``merge_authority`` /
    ``auto_confirm`` 를 절대 True 로 내지 않는다 (hard-pinned False,
    fail-closed §6 'coordinator가 closeout/merge 자동확정' 금지).
  - resolver 부재 / mismatch / status != RESOLVED → fail-closed 안전
    (coordinator 가 settle 못 하도록 HOLD/UNAVAILABLE 신호).
  - callback mandatory rule / self-collector guard / fallback safety
    path 약화·격상·대체 0 (이 모듈은 그 경로를 만지지 않는다).
  - 모든 메서드 = read-only derive/propose. 부작용 0 (파일 I/O 0).
    )annotationsN)	dataclass)Path)AnyDictFinalListMappingz(anu_v3.profile_coordinator_input_adapterz
Final[str]ADAPTER_MODULEztask-2553+52.Track3.v1ADAPTER_VERSIONz+anu_v3.profile_coordinator_input_adapter.v1ADAPTER_SCHEMAz+anu_v3.default_profile_resolver.decision.v1ACCEPTED_DECISION_SCHEMARESOLVED	_RESOLVEDCOORD_INPUT_OK
CONSUME_OKCOORD_RESOLVER_HOLDCONSUME_HOLDCOORD_RESOLVER_CONFLICTCONSUME_CONFLICTCOORD_RESOLVER_REFUSEDCONSUME_REFUSEDCOORD_DECISION_UNAVAILABLECONSUME_UNAVAILABLEc                  $     e Zd ZdZd fdZ xZS )#ProfileCoordinatorInputAdapterErroruF   resolver decision 소비 실패. ``self.code`` = 사유 (fail-closed).c                L    t         |   d| d|        || _        || _        y )N[] )super__init__codemessage)selfr"   r#   	__class__s      ?/home/jay/workspace/anu_v3/profile_coordinator_input_adapter.pyr!   z,ProfileCoordinatorInputAdapterError.__init__1   s+    1TF"WI./	    )r"   strr#   r(   returnNone)__name__
__module____qualname____doc__r!   __classcell__)r%   s   @r&   r   r   .   s    P r'   r   c           	     *   t        | t              rt        |       }n4t        |       }	 |j	                  d      }	 t        j                  |      }t        |t              s"t        d	d
t        |      j                         |j                  d      t        k7  r&t        ddt        d|j                  d      d      |S # t
        $ r}t        dd| d|       |d}~ww xY w# t        j                  $ r}t        dd| d|       |d}~ww xY w)u   default resolver decision(`decision.v1`)을 read-only 소비.

    resolver 모듈 import·호출 0 — 파일레벨 contract 만. schema marker
    mismatch / 부재 / 파싱 실패 = fail-closed (code 보존).zutf-8)encodingdecision_source_unreadableu'   resolver decision 부재/읽기 실패 z: Ndecision_source_unparsableu%   resolver decision JSON 파싱 실패 decision_not_objectu+   resolver decision 최상위 object 아님: schemadecision_schema_mismatchz,resolver decision schema mismatch: expected z, got uB    (resolver 부재/버전 mismatch — fail-closed, 자동확정 0))
isinstancer
   dictr   	read_textOSErrorr   jsonloadsJSONDecodeErrortyper+   getr   )sourceobjprawes        r&   load_resolver_decisionrE   7   s<    &'"<L	++w+/C	**S/C c4 1!9$s):L:L9MN
 	
 wwx441&:'*&1B0E FPQ
 	
 J1  	5,9!BqcB 	 ## 	5,7s"QC@ 	s.   C C' 	C$CC$'D:DDc                  N    e Zd ZU dZded<   dddZddZddZddZddZ	dd	Z
y
)ProfileCoordinatorInputAdapteru   resolver decision → batch coordinator 판단보조 입력 (read-only).

    어떤 입력에서도 closeout/merge 를 자동 확정하지 않는다 — coordinator 는
    판단보조 소비만 (확정 권한은 chair/ANU out-of-band).Dict[str, Any]decisionc                :    | j                   j                  ||      S N)rI   r?   )r$   kdefaults      r&   _gz!ProfileCoordinatorInputAdapter._gh   s    }}  G,,r'   c                8    t        | j                  dd            S )Nstatus )r(   rN   )r$   s    r&   rP   z%ProfileCoordinatorInputAdapter.statusk   s    4778R())r'   c                z    | j                   j                  d      xs i }t        |t              rt	        |      S i S )Nboundary_expansion)rI   r?   r7   r
   r8   )r$   bes     r&   _bez"ProfileCoordinatorInputAdapter._ben   s4    ]]34:%b'2tBx::r'   c                    | j                         j                  |      xs g D cg c]  }t        |       c}S c c}w rK   )rU   r?   r(   )r$   keyxs      r&   _listz$ProfileCoordinatorInputAdapter._listr   s.    !%!4!:<1A<<<s   ;c                    | j                         }|t        k(  rt        dfS |dk(  rt        dfS |dk(  rt        dfS |dk(  rt
        dfS t        d|d	fS )
Nu   resolver RESOLVED — coordinator 가 track gate/allowed/forbidden 을 판단보조 입력으로 소비 가능 (closeout/merge 자동확정은 여전히 0)HOLD_FOR_CHAIRu5   resolver HOLD_FOR_CHAIR — coordinator 소비 보류PROFILE_CONFLICTuD   resolver PROFILE_CONFLICT — fail-closed, coordinator settle 불가DEFAULT_RESOLUTION_REFUSEDuN   resolver DEFAULT_RESOLUTION_REFUSED — fail-closed, coordinator settle 불가u   resolver status 미상(u,   ) — fail-closed, coordinator settle 불가)rP   r   r   r   r   r   r   )r$   sts     r&   _signalz&ProfileCoordinatorInputAdapter._signalu   s    [[]?/ 
 !!!XXX###V  --",  #%bV+WX
 	
r'   c                
   | j                         \  }}i dt        dt        dt        dt        d|d|d|t
        k(  dt        | j                  dd	            d
t        | j                  d
d            dt        | j                  dd            d| j                  dd      dt        | j                  dd            d| j                         d| j                  d      ddd| j                  d      d| j                  d      | j                  d      | j                         j                  d      | j                         j                  d      | j                  dd      | j                  dd      dd	d	d	dd
S )u  batch coordinator 가 track 별 gate/hold/allowed/forbidden/packet/
        evidence 를 그대로 소비할 평면 입력.

        **자동확정 0 invariant**: closeout_authority / merge_authority /
        auto_confirm 는 입력과 무관하게 hard-pinned False.adapter_schemaadapter_moduleadapter_versionconsumed_decision_schemasignalreason
consumabledefault_pathFgoal_idrQ   	goal_typeresolved_profile_nameN
profile_idresolver_statusgate_condition_namesgate_semanticsu)   AND — ALL conditions must hold for PASShold_trigger_conditionsallowed_actionsforbidden_actionscompletion_packet_meta_refevidence_meta_refrefusal_coderefusal_reasondecision_consumer_onlyus   coordinator=판단보조 입력 소비만; closeout/merge 자동확정 0 (hard-pinned, 모든 입력에서 불변).)
rr   rs   rt   ru   rv   coordinator_rolecloseout_authoritymerge_authorityauto_confirmauto_confirm_invariant)r_   r   r   r   r   r   boolrN   r(   rP   rY   rU   r?   )r$   re   rf   s      r&   track_consumption_viewz5ProfileCoordinatorInputAdapter.track_consumption_view   s     
n 
n 
  
 '(@	 

 f 
 f 
 &J. 
 D!?@ 
 s4779b12 
 TWW["56 
 $TWW-Dd%K 
 #dgglB78 
 t{{} 
 #DJJ/E$F 
 I 
  &tzz2K'L! 
" tzz*;<# 
$ "&,?!@*.((*..9U*V!%0C!D GGND9"gg&6= 8"'$!=; 
  	
r'   N)rQ   )rL   r(   rM   r   r)   r   )r)   r(   )r)   rH   )rW   r(   r)   z	List[str])r)   ztuple[str, str])r+   r,   r-   r.   __annotations__rN   rP   rU   rY   r_   r~    r'   r&   rG   rG   _   s.    H
 -*;=
.'
r'   rG   c                L   	 t        |       }t        |      j                         S # t        $ rt}i dt        dt        dt        dt
        dt        dd|j                   d|j                   d	d
dd
dddddd
dd
dd
ddd|j                  ddcY d}~S d}~ww xY w)u   default resolver → batch coordinator 입력 단일 callable entrypoint.

    resolver 부재/mismatch 는 fail-closed safe 입력으로 변환 (예외를
    coordinator 가 settle 신호로 오인하지 않도록 COORD_DECISION_UNAVAILABLE).ra   rb   rc   rd   re   rf   r   r   rg   Frh   rm   UNAVAILABLErx   rw   ry   rz   r{   fail_closedT
error_coder|   uA   fail-closed 경로에서도 closeout/merge 자동확정 0 불변.N)rE   r   r   r   r   r   r   r"   r#   rG   r~   )r@   rI   rD   s      r&   adapt_for_coordinator_inputr      s   
)&1, *(3JJLL+ / 

n
n
 
 '(@	

 )
 !&&AII;/
 %
 E
 }
  8
 !%
 u
 E
 4
 !&&
  %S#
 	

s   & 	B#A)BB#B#)r   r   r   r   r   r   r   r   r   r   rG   rE   r   )r@   z 'str | Path | Mapping[str, Any]'r)   rH   )r.   
__future__r   r;   dataclassesr   pathlibr   typingr   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   
ValueErrorr   rE   rG   r   __all__r   r'   r&   <module>r      s   . #  !  2 2G
 G6 6J
 J'T * T"	: ")
J )0j 08 * 86 6"> Z >* %,%%P S
 S
 S
lM,MMBr'   