
    j                    @   U d Z ddlmZ ddlmZmZ dZ	 dZ	 dZ	 dZ		 dZ
	  eeeee	e
h      Zd	ed
<    eeh      Zd	ed<    eeh      Zd	ed<    eeh      Zd	ed<   e
 e       e eeee	h      e e       e e       e	 e       iZded<   ddZddZddZddZg dZy)u  utils.dispatch_status_enum — task-2645 dispatch status state machine.

회장 verbatim (2026-05-24 task-2644 사고 박제):
- dispatch.py 가 cron_response.status="ok" 만 보고 final success 로 처리하지 않는다.
- 발사 직후 status 는 ``DISPATCH_SUBMITTED_UNVERIFIED`` (cron 등록 응답 OK ≠ spawn 성공).
- spawn verification gate 통과 후에만 ``DISPATCH_VERIFIED_SPAWN`` 으로 전이.
- 4신호 silent drop 확정 시 ``DISPATCH_SILENT_DROP_HOLD``.
- 명시적 cron 에러 / pre-flight 차단은 기존 ``DISPATCH_ERROR``.

본 enum 은 dispatch 모듈과 spawn_verifier / regression 시험 양쪽에서 공유되는
단일 source-of-truth 이다. 문자열 상수 + 천이 검증 함수 두 가지를 제공한다.
    )annotations)	FrozenSetMappingDISPATCH_SUBMITTED_UNVERIFIEDDISPATCH_VERIFIED_SPAWNDISPATCH_SILENT_DROP_HOLDDISPATCH_ERRORDISPATCH_PRECHECK_BLOCKEDzFrozenSet[str]
ALL_STATESFINAL_SUCCESS_STATESNON_FINAL_STATESHOLD_FOR_CHAIR_STATESzMapping[str, FrozenSet[str]]_ALLOWED_TRANSITIONSc                    | t         v S )u7   final success 로 회장 보고 가능한 상태인가.)r   states    K/home/jay/workspace/.worktrees/task-2645-dev2/utils/dispatch_status_enum.pyis_final_successr   H   s    (((    c                    | t         v S )u0   silent drop 류 — 즉시 회장 보고 필요.)r   r   s    r   is_hold_for_chairr   M   s    )))r   c                ,    | t         k(  rt        d      y)u4  dispatch.py cron_response=ok 단독 final success 보고 차단 가드.

    회장 verbatim ANCHOR-1: "dispatch.py cron_response=ok ≠ spawn 성공 —
    DISPATCH_SUBMITTED_UNVERIFIED 거쳐야 함".

    Raises:
        AssertionError: state 가 SUBMITTED_UNVERIFIED 인 채로 final 보고 시도.
    u   dispatch status=DISPATCH_SUBMITTED_UNVERIFIED 단독으로 final success 보고 금지 (회장 verbatim ANCHOR-1, task-2645 §17.8).N)r   AssertionErrorr   s    r   assert_not_premature_successr   R   s%     --R
 	
 .r   c                f    | t         vry|t         vry|t        j                  | t                     v S )u   천이 가능 여부 검증.F)r   r   get	frozenset)
from_stateto_states     r   can_transitionr    b   s3    #z!+//
IKHHHr   )r   r   r   r	   r
   r   r   r   r   r   r   r   r    N)r   strreturnbool)r   r!   r"   None)r   r!   r   r!   r"   r#   )__doc__
__future__r   typingr   r   r   r   r   r	   r
   r   r   __annotations__r   r   r   r   r   r   r   r    __all__ r   r   <module>r+      s   # % !@  _3  P7  U! I7  J '%!!
N  (12I1J'K n K $-.K-L#M . M )23L2M(N ~ N
 y{!9#%	
$ Y[y{IK6 2 )
*

 Ir   