
    Vj"                        d Z ddlmZ ddlZddlZddlZddlmZmZ ddlm	Z	 ddl
mZ ddlmZ dZ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)u  task-2708 P2-A callback pre-registration helper.

회장 인가: CHAIR-AUTH-TASK-2708-P2A-CALLBACK-BEFORE-FAILFAST-PREREGISTRATION-260529

원칙:
  - idempotent: lock 파일로 1회 결정성 보장 (§5.3/§9.2)
  - non-blocking: 모든 예외 → try/except → exit 0 (success path 영향 0)
  - ANU-key only: owner_key 는 ANU key 전용 (c119085addb0f8b7)
  - helper 수정 0: dispatch.normal_fallback_callback_helper 코드 수정 없이 경유

finish-task.sh 진입 직후 fail-fast(exit 1) 이전에 ANU normal callback 을
1회 결정성 pre-register 하는 헬퍼. dispatch.normal_fallback_callback_helper.
launch_callback 을 경유한다 (헬퍼 자체 수정 0).
    )annotationsN)datetimetimezone)Path)Optionalzcallback_preregistration.v1i<  c                 d    t        j                  t        j                        j	                         S N)r   nowr   utc	isoformat     C/home/jay/workspace/scripts/harness/v36/callback_preregistration.py_now_isor       s    <<%//11r   c                    | j                   j                  dd       | j                  d      }|j                  t	        j
                  |dd      d       |j                  |        y	)
u-   마커 JSON 을 원자적으로 기록한다.Tparentsexist_okz.tmpF   )ensure_asciiindentutf-8)encodingN)parentmkdirwith_suffix
write_textjsondumpsreplace)pathpayloadtmps      r   _write_markerr$   $   sR    KKdT2


6
"CNN4::gE!DwNWKKr   c                :    t        | t        j                         y )N)file)printsysstderr)msgs    r   _auditr+   ,   s    	#CJJr   c           
     X   | j                   }| j                  }| j                  }| j                  }| j                  }| j
                  }| j                  }| j                  }| j                  }	t        |      }
|dk(  r	|
| dz  }n|
| dz  }|	rt        |	      }n|dk(  r	|
| dz  }n|
| dz  }|dk(  r	|
| dz  }n|
| dz  }	 |j                         rt        d| d	|        y
t        |      j                         st        d| d|        y
|j                         }d| d| dd| ddd| d| d| d| g}dj                  |      }|j                  d      }t        |      t         kD  r|dt          j#                  dd      }t%        j&                  ||||||d|      }|j(                  r|j*                  j-                  dd       |j/                          t0        ||d|j2                  dt5               d}t7        ||       t9        t;        j<                  |j?                         d !             y
t0        ||d"|j2                  tA        |jB                        dt5               d#}t7        ||       t        d| d$|j2                   d%       y
# tD        $ r}}t        d| d&tG        |      jH                   d'| d%       	 t0        ||d(tG        |      jH                   d'| dt5               d)}t7        ||       n# tD        $ r Y nw xY wY d}~y
d}~ww xY w)*uB   launch subcommand: fail-fast 이전 ANU callback pre-registration.normalz.callback-prereg-lockz.callback-fallback-lockz.callback-prereg-launch.jsonz.callback-fallback-launch.jsonz$.callback-prereg-not-registered.jsonz&.callback-fallback-not-registered.jsonz[callback_preregistration] [u8   ] lock exists → silent skip (idempotent §5.3/§9.2): r   u3   ] envelope absent → skip (pre-reg not required): ztask_id=zresult_path=memory/events/z.result.jsonzreport_path=memory/reports/z.mdzcollector_role=ANUzcallback_kind=z6source_attribution=FINISH_TASK_SH_P2A_PREREGISTRATION_z
owner_key=zcanonical_root=
r   Nignore)errors)kindtask_idexecutor_key	owner_keychat_idpromptatcanonical_rootTr   ANU_OWNED_READY)schemar2   r1   statusverdictpreregtsF)r   FAIL_CLOSED)r:   r2   r1   r;   r<   reasonsr=   r>   z] FAIL_CLOSED verdict=u    → non-blocking exit 0z] EXCEPTION z: 	EXCEPTION)r:   r2   r1   r;   errorr=   r>   )%r2   r1   r4   r5   r3   envelope_path
events_dir	workspaceoutputr   existsr+   upperjoinencodelenPROMPT_MAX_BYTESdecode
_cb_helperlaunch_callbackokr   r   touchSCHEMAr<   r   r$   r'   r   r   to_jsonlistr@   	Exceptiontype__name__)argsr2   r1   r4   r5   r3   rC   rD   rE   rF   events	lock_pathlaunch_marker_pathnot_reg_marker_path
kind_upperprompt_linesr6   prompt_bytesdecisionmarker_payloadexcs                        r   
cmd_launchrc   0   s    <<G		D^^I<<G))L++MooJ^^I KKF*F xy(=>>	y(?@@	 !&\		#	1M&NN#	1O&PPx$'2V'WW$'2X'YYi.wi7opyoz{  M"))+.wi7jkxjyz  ZZ\
wi (	>)'#6 TF#DZLQ$i[)	
 <( }}W-|//!"3#34;;GH;UF --%$	
 ;;""4$"?OO !"+#++jN ,n= $**X--/eDE
 !"'#++ 0 01j	N -~>.wi7MhN^N^M__wx  *7)<S	@R@R?SSUVYUZZrs	
	 "% I../r#7jN -~> 		%sP   	!J# +*J# D/J# AJ# #	L),(L$:LL$	LL$LL$$L)c                    t        j                  dd      } | j                  dd      }|j                  dd	      }|j	                  d
dd       |j	                  dddgdd       |j	                  ddd       |j	                  ddd       |j	                  ddd       |j	                  ddd       |j	                  ddd       |j	                  ddd        |j	                  d!d d"       |j                  t        #       | S )$Nzcallback_preregistration.pyu   task-2708 P2-A: fail-fast 이전 ANU callback pre-registration helper. CHAIR-AUTH-TASK-2708-P2A-CALLBACK-BEFORE-FAILFAST-PREREGISTRATION-260529)progdescriptionsubcmdT)destrequiredlaunchu$   ANU callback pre-registration 실행)helpz	--task-idu   태스크 ID)ri   rk   z--kindr-   fallbacku!   callback 종류 (default: normal))choicesdefaultrk   z--owner-keyzANU owner keyz	--chat-idzchat IDz--executor-key zexecutor self key (default: ''))rn   rk   z--envelope-pathu   callback envelope 파일 경로z--events-diru   events 디렉토리 경로z--workspacez/home/jay/workspaceu9   canonical workspace 경로 (default: /home/jay/workspace)z--outputu$   launch marker 출력 경로 (선택))func)argparseArgumentParseradd_subparsers
add_parseradd_argumentset_defaultsrc   )parsersublaunch_ps      r   _build_parserrz      sE   $$*WF 

X

=C~~h-S~TH+>J:&0	   -$_M+9E"+L   +dAbc.4>Z[%H  
 D'M   z*Mr   c                Z    t               }|j                  |       }|j                  |      S r	   )rz   
parse_argsrp   )argvrw   rX   s      r   mainr~      s'    _FT"D99T?r   __main__)returnstr)r!   r   r"   dictr   None)r*   r   r   r   )rX   zargparse.Namespacer   int)r   zargparse.ArgumentParserr	   )r   r   )__doc__
__future__r   rq   r   r(   r   r   pathlibr   typingr   (dispatch.normal_fallback_callback_helpernormal_fallback_callback_helperrN   rR   rL   r   r$   r+   rc   rz   r~   rW   
SystemExitr   r   r   <module>r      sn    #   
 '   = 
' 2 K\#L z
TV
 r   