
    kwj3                       d Z ddlmZ ddlZddlZddlmZmZmZ ddlm	Z	m
Z
mZ dZdZ e ed	            Z eh d
      Z	 	 	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddZ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddZy)uS  v3.6 Runtime Harness — Layer 0: Task MD SHA Decision Marker Writer.

chair_authorization_id=CHAIR-AUTH-TASK-2705PLUS1-V36-TASK-MD-SHA-BOOTSTRAP-260528

Writes a 12-field decision marker JSON to
``memory/events/<task_id>.task-md-sha-decision.json`` per spec §7.2.

Safe-fail: every public function returns None on failure. Never raises.
    )annotationsN)datetime	timedeltatimezone)AnyDictOptionalzv36.task_md_sha_decision.v1z!/home/jay/workspace/memory/events	   )hours>   tsshasactorsizestask_id
patch_typedecision_idreason_codedecision_classschema_versioncontinue_allowedmismatch_locationchair_authorization_idcontent_verbatim_matchc                Z    	 t        | ||||xs i |||||	|
||      S # t        $ r Y yw xY w)zNWrite a task md sha decision marker. Returns the absolute marker path or None.r   dispatch_pre_shadispatch_post_shaexecutor_observed_shaclassificationr   pre_size	post_sizeobserved_sizeactor_personaactor_model
actor_role
events_dirN)_write_impl	Exceptionr   s                D/home/jay/workspace/scripts/harness/v36/task_md_sha_marker_writer.pywrite_task_md_sha_markerr*   '   sT     -/"7)/R#9''#!!
 	
  s    	**c                8   t        j                  t              }|j                  d      }|j	                  d      }t
        |  d| | ||||d|||d|j                  dd      |j                  d	d      |j                  d
d      |j                  dd      |j                  dd      |j                  dd      ||	|
|dd}t        t        |j                               z
  }|ry |xs t        }t        j                  |d       |  d}t        j                  j                  ||      }t        j                  j                  |      r9|j	                  d      }|  d| d}t        j                  j                  ||      }|dz   }	 t!        |dd      5 }t#        j$                  ||dd        d d d        t        j&                  ||       t        j                  j                  |      r	 t        j(                  |       	 d!d"lm}  |d#| ||d   |d	   |d
   d$%       |S # 1 sw Y   vxY w# t*        $ r Y 9w xY w# t        j                  j                  |      r&	 t        j(                  |       w # t*        $ r Y w w xY ww xY w# t*        $ r Y |S w xY w)&Nseconds)timespecz%y%m%d-%H%Mz.task-md-sha.)r   r   r   )dispatch_pre_sizedispatch_post_sizeexecutor_observed_sizer   UNKNOWNr   r   unverifiabler   holdr   HOLD_FOR_CHAIRr   uncovered_state_hold)personamodelrole)r   r   r   r   r   r   r   r   r   r   r   r   r   r   T)exist_okz.task-md-sha-decision.jsonz%Y%m%d%H%M%S%fz.task-md-sha-decision.z.jsonz.tmpwzutf-8)encodingF   )ensure_asciiindentr   )log_runtime_eventtask_md_sha_decision_written)marker_pathr   r   r   )
event_typer   payload)r   now_KST	isoformatstrftimeSCHEMA_VERSIONget_REQUIRED_FIELDSsetkeys_DEFAULT_EVENTS_DIRosmakedirspathjoinexistsopenjsondumpreplaceunlinkr(   +scripts.harness.v36.runtime_decision_loggerr?   )r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   now_kstts_iso	ts_for_idmarkermissingdir_pathfilenamerA   ts_ustmp_pathfhr?   s                            r)   r'   r'   K   s    ll4 G	2F  /I )!-	{; 0!2%:
 "*"+&3

 ,//0CYO$((yA"0"4"45M~"^*../A6J(,,-=?OP%))-9OP"8$ 
-F: V[[]!33G00HKK4(45H'',,x2K	ww~~k"  !12Y4UG5Aggll8X6V#H	(C'2 	@bIIfbuQ?	@


8[)77>>(#		(#Q5*"()9":$\2*01I*J			
 3	@ 	@   77>>(#		(#  $$  sl   
I H'2I 0H3 J 'H0,I 3	H?>H? J	#I98J	9	JJ	JJ		JJ)NNNNNNN)r   strr   Optional[str]r   rd   r   rd   r   zOptional[Dict[str, Any]]r   rd   r    Optional[int]r!   re   r"   re   r#   rd   r$   rd   r%   rd   r&   rd   returnrd   )r   rc   r   rd   r   rd   r   rd   r   zDict[str, Any]r   rd   r    re   r!   re   r"   re   r#   rd   r$   rd   r%   rd   r&   rd   rf   rd   )__doc__
__future__r   rT   rN   r   r   r   typingr   r   r	   rH   rM   rE   	frozensetrJ   r*   r'        r)   <module>rm      s   #  	 2 2 & &.9 	"#   2 ###'#'!% $ $!!#! %! )	!
 -! *! ! ! !! !! ! ! ! !HXX#X %X )	X
 #X *X X X !X !X X X X Xrl   