
    jL                    R   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ZddlZddl	Z	ddl
Z
ddlZddlZddlZddlZddlmZmZmZmZ ddlmZ ddlmZmZ  ed      Zedz  Z ed	      Z ed
      Zedz  ZdZdZdZdZ dZ!dZ"dZ#dZ$dZ%dZ&dZ'ejP                   e)edd      z  Z* G d de+      Z,d6dZ-d7dZ.d8dZ/d9dZ0ddd:d Z1d;d!Z2d<d"Z3d=d#Z4d>d$Z5d>d%Z6d?d&Z7d@d'Z8dAd(Z9dBd)Z:dCd*Z;dDd+Z<dEd,Z=dFd-Z>dGd.Z?dCd/Z@dCd0ZAdHd1ZB G d2 d3      ZCdId4ZDeEd5k(  r eF eD             y)Jz7One-use, fail-closed Task26 strict-A launch controller.    )annotationsN)UTCdatedatetimetime)Path)AnyCallablez)/home/cube/projects/richard/traning coachz>.omo/evidence/task26/task26-strict-final-candidate-st_01a00f35z)/home/cube/.hermes/profiles/dualcoachtestz(/home/cube/projects/richard/hermes-agentz.venv/bin/pythonz$hermes-gateway-dualcoachtest.service@573d19e464c7df2a0dcacddbb915447beb20c97aceb7c1d1306415014d5730d7@90b2557bb159dc7595ea6bcd3d76d1a0dabf77c51f78aa0ffcf237746d669b49@b87aeaca4abb39ce43f6c9dc35eb47e9c3665ec363882aa286d47fb74ec1b7dc@fb48a1931828ee60ab3812faf795550bf4e672a54c56f78cd10dcf674c45560d@262d345eb795c55ca8076abf96d2262be4a7fe9a05405fee7277dea7c59d0175@fb95738da52c4d0c6f3e9664f9ce2d657bba8845a555b08444acba61e346f570
8527916639
8693203710dual_coach_pilot_test_bot)verifiedbaselineprepareddeployedstarted
subscribed
membershipproviderreadyinvite_intentinvite_result
O_NOFOLLOWc                      e Zd Zy)BlockedN)__name__
__module____qualname__     launch_controller.pyr!   r!   '   s    r&   r!   c                V    t        j                  | ddd      dz   j                         S )NT),:)	sort_keys
separatorsensure_ascii
)jsondumpsencode)values    r'   canonr3   )   s'    JJuRVWX\\ddffr&   c                H    t        j                  |       j                         S N)hashlibsha256	hexdigest)raws    r'   	sha_bytesr:   ,   s    )<)F)F)H"Hr&   c                4    t        | j                               S r5   )r:   
read_bytes)paths    r'   shar>   -   s    9T__->#??r&   c                    t        |      }|rNt        j                  | |      }t        |      t        us|dk  s|t        |      kD  rt        d      ||d  }|rMy y )Nr   zincomplete write)
memoryviewoswritetypeintlenr!   )fdr9   viewns       r'   	write_allrI   /   sU    c?D
HHR7#a1s4y=HZ@[:[ABx r&   F	exclusivec                  | j                   j                  ddd       | j                   j                  d       | j                         rt	        d|        |r| j                         rt	        d|        | j                  d| j                  z   dz   t        j                         j                  z   dz         }t        j                  |t        j                  t        j                  z  t        j                  z  t         z  d      }	 t        j"                  |d       t%        |t'        |             t        j(                  |       t        j*                  |       |r.| j                         r|j-                          t	        d|        t        j.                  ||        t        j                  | d       t        j                  | j                   t        j0                  t        j2                  z  t         z        }t        j(                  |       t        j*                  |       y # t        j*                  |       w xY w# t        j*                  |       w xY w)	NT  parentsmodeexist_okzsymlink output: zone-use output exists: .z.tmpi  )parentmkdirchmod
is_symlinkr!   exists	with_namenameuuiduuid4hexrA   openO_WRONLYO_CREATO_EXCLFLAGSfchmodrI   r3   fsynccloseunlinkreplaceO_RDONLYO_DIRECTORY)r=   r2   rK   tmprF   dfds         r'   atomicrk   6   s   KKd>@Q@QRW@X*:4&(A BBT[[]'4KD62R*S$S
..TYYs*4::<+;+;;FB
CC	bkk"**,RYY6u<e	DB
		"eiE%L9288B<XXb\T[[]CJJLBYZ^Y_@`8a2aJJsD288D%0
BKK6u<=C	#XXc] XXb\
 XXc]s   
A H, I ,IIc           	         t        j                  | fdddd|}|j                  r6t        d|j                   d| d|j                  j                                |S )NTF)textcapture_outputcheckzcommand failed (z): z: )
subprocessrun
returncoder!   stderrstrip)commandkwps      r'   rq   rq   E   s^    nnWL$dLLA||7%5all^3wkQSTUT\T\TbTbTdSe#fggHr&   c                     t        dddt        ddddddg
      } t        d | j                  j	                         D              S )	N/usr/bin/systemctl--usershowz-pActiveStateSubStateMainPIDc              3  J   K   | ]  }d |v s|j                  d d        yw)=   N)split.0xs     r'   	<genexpr>zservice.<locals>.<genexpr>L   s#     J(=1A(=s   	##)rq   SERVICEdictstdout
splitlines)rw   s    r'   servicer   J   sC    	]4PZ[_`i
jkAJ(;(;(=JJJr&   c                     dd l } | j                  t        dz  j                               }|d   d   d   }|d   }|d   |d   |d	   d
S )Nr   config.yaml	platformstelegramextraadaptive_nutritiondelivery_enabled
activationdeliveryr   r   r   )yaml	safe_loadPROFILE	read_text)r   r   r   as       r'   config_flagsr   N   sg    
nngm+6689A;PZA[\cAd5hm  oC  iDfg !34!L/]^_i]jkkr&   c                    t        j                  t        dz  j                               t        j                  t        dz  j                               } t        t
        t        t        t        t        d}j                  d      dk7  s"t        fd|j                         D              rt        d      t        t        dz        t        k7  rt        d      | D ]`  }t        |d	   z  }|j                         r2|j!                         j"                  |d
   k7  st        |      |d   k7  sQt        d|d	           dD ]R  }t        j                  t        d| dz  j                               }|j                  d      dk7  sFt        d|        t%        t'        t(              t'        t        dz        g       |S )Nz	SEAL.jsonzPACKAGE-INVENTORY.json)full_candidate_digestcore_candidate_digesthermes_wheel_sha256profile_wheel_sha256package_inventory_sha256lifecycle_observer_v7_sha256statusREADY_STRICT_REHEARSALc              3  L   K   | ]  \  }}j                  |      |k7    y wr5   get)r   kvseals      r'   r   z#verify_candidate.<locals>.<genexpr>V   s%     :fUecaPQ488A;>Ues   !$zcandidate seal mismatchzpackage inventory driftr=   sizer7   zcandidate inventory mismatch: )	objectivesecurityztrainer-freequalityqa
provenancezreview-z.jsonzreview not ready: zverify_candidate.py)r/   loads	CANDIDATEr   FULLCORE
HERMES_SHAPROFILE_SHAPACKAGE_SHAOBSERVER_SHAr   anyitemsr!   r>   is_filestatst_sizerq   strPYTHON)invexpectedrowrw   rY   rr   s         @r'   verify_candidater   S   s   	Y{*557	8Ddjj)TlJlIwIwIy>z#&*4^h  AL  hs  S_  `Hxx33s:fU]UcUcUe:f7fnu  wP  oQ  iQ
9--.;7KdCe=e
CK
yy{affh..F;s1vs8}?T\c  gE  FI  JP  FQ  ER  eS  ]T  WT  T
**i'$u 55@@B
C55?66gHZ[_Z`Fa>b8b T VS#889:;Or&   c            
     B   t               ddddk7  rt        d      t        dz  t        dz  t        dz  t        d	z  t        d
z  t        dz  t        dz  t        dz  t        dz  g	} | D cg c]  }|j                         st	        |        }}t        dz  }|j                         rPt        j                  |j                               j                  dg       g k7  r|j                  t	        |             |rt        ddj                  |      z         t               }|ddddk7  rt        d      t        ddt	        t        j                               ddg      j                  }t!        d |j#                         D              rt        d      d|ddS c c}w )N0inactivedead)r~   r|   r}   zservice not inactive/deadcustomers/registry.jsongateway.lockgateway.pidgateway_state.jsonstate.dbsessionsdata/onboardingdata/owner-actionsdata/customerszcron/jobs.jsonjobsz>unexpected live bytes must be archived by cleanup controller: r)   Fr   zconfig safety flags mismatchz/usr/bin/ps-u-ozargs=c              3     K   | ]M  t        t        t              j                               vs,d v xs dv xr t	        fddD               O yw)dualcoachtesttask26c              3  &   K   | ]  }|v  
 y wr5   r%   )r   r   ls     r'   r   z%baseline.<locals>.<genexpr>.<genexpr>k   s     :vKua16Kus   )observerzjournalctl -fzgateway runN)r   r   __file__resolver   )r   r   s    @r'   r   zbaseline.<locals>.<genexpr>k   s       {  AP{|  TW  X\  ]e  Xf  Xn  Xn  Xp  Tq  yz  TzOq 1HMvs:vKu:v7vv  APs
   -A%Azstale target processzinactive/deadr   )r   flagsunexpected_live_bytes)r   r!   r   rW   r   r/   r   r   r   appendjoinr   rq   rA   getuidr   r   r   )	forbiddenrw   
unexpectedr   r   pss         r'   r   r   a   s   yc
fMMU\]xUyOy001GP]H]^efz^z  |C  DN  |N  OV  Wa  Oa  bi  j{  b{  |C  DX  |X  Y`  aq  Yq  rI )8	1QXXZA	J8	!	!D{{}DNN$4599&DbH*J[J[\_`d\eJf!abebjbjkubv!vww
.E%UeLLT[\zT{N{
M$s299;/W=>EEB
  {  AC  AN  AN  AP  {  {  CJ  Ka  Cb  }b%eANN 9s   +FFc                l   | dz  }| dz  }|j                          |j                          t        j                  t        dz        5 }|j	                  |       d d d        t        j                  t        dz        5 }|j	                  |       d d d        ||fS # 1 sw Y   CxY w# 1 sw Y   ||fS xY w)Nhermesprofile.artifacts/hermes_agent-0.17.0-py3-none-any.whl5artifacts/physique_checkin_cli-0.1.0-py3-none-any.whl)rT   zipfileZipFiler   
extractall)ri   hrw   zs       r'   extract_wheelsr   n   s    	(lAc)mAQWWYqwwy	#SS	TXYZ[ZfZfghZi	T	#ZZ	[_`abamamnoap	[Q3J 
U	T	[Q3Js   B=B'B$'B3c                   d| z   }t         dz  }|j                  j                  d       dt        t        ddg dd d	}t	        ||d
       g }t        j                  d      5 }t        t        |            \  }}t        |      t        |      g}|t        j                  d d ddlm}m}	 ddlm}
m}m} t%        j&                         } |	| ||dt(        t(        d|t+        d      ddddd              |
|d|j-                         dddddd	      } | |t                     j/                  |t0        t              }d d d        g t        j                  d t3        |       t5        t        j6                        D ]@  }|dk(  s(|j9                  d      s|dk(  s|j9                  d      s0t        j6                  |= B |j:                  j<                  |j:                  j>                  d|j@                  d}|S # 1 sw Y   xY w)Ntask26_strict_a_r   rM   )rP   r   r   )user_idchat_idtopic_idordinary_v1)versionowner	customersregistry_modediagnostic_session_digestTrJ   ztask26-wheel-api-)prefixr   )CustomerDraftregister_customer)r   RoomBootstrapStoreroom_bootstrap_state_dirzTask26 strict A   i     )meal_1meal_2meal_3z08:00)bot_usernameowner_idcheckin_clizcheckin_cli.gatewayzgateway.)customer_id
session_idsid_hash
generationcustomer_link)!r   rS   rT   OWNERrk   tempfileTemporaryDirectoryr   r   r   sysr=   checkin_cli.customer_adminr   r   -gateway.platforms.telegram_customer_bootstrapr   r   r   todayACTORdaytime	isoformat!prepare_rehearsal_customer_inviteBOT_USERNAMErE   tuplemodules
startswithsessionr
  r  r  )lineagecustomerregistryinitialwheel_pathsdr   rw   
AdminDraftr   r   r   r   r  draftr   module_namer   s                     r'   preparer'  t   s   'H..H0E0E50E0QEES!Q^`q~  \`  aG
8Gd+K		$	$,?	@A47#!#a&Q[{#((2A,]{{jjl(:h7HuUXY^_fgh_ijklmnrsv  xT  $U  	VH%6u7HQRSTUYZ]^z{#$<W$EFhhin  }I  SXh  Y 
A #%CHHc+S[[)-';+A+A.+QU`dmUmq|  rH  rH  IS  rTK( *  X-=-=-H-HT\TdTdTmTm{|  NV  Nd  Nd  	eCJ 
A	@s   %CG==Hc                   t         dz  }t         dz  }t        t        t              ddddddt        |      t        |      g	       d	}t	        j
                  t        t        t              d
|g      j                        }dt        fdt        ffD ]'  \  }}||   d   d   d   }||k7  st        d| d       dt        t        t        t        t        d|}t        | |d       |S )Nr   r   z-mpipinstallz	--no-depsz--no-compilez--force-reinstalla  import hashlib,importlib.metadata as m,json
from pathlib import Path
import gateway.platforms.telegram as t,checkin_cli
def d(n):
 x=m.distribution(n).read_text("direct_url.json");return json.loads(x)
print(json.dumps({"hermes_origin":str(Path(t.__file__).resolve()),"profile_origin":str(Path(checkin_cli.__file__).resolve()),"hermes_direct":d("hermes-agent"),"profile_direct":d("physique-checkin-cli")},sort_keys=True))z-chermes_directprofile_directarchive_infohashesr7   z
installed z	 mismatchztask26-strict-deployment-v1)schemacandidate_digestcandidate_core_digestcandidate_inventory_digestr   r   TrJ   )r   rq   r   r   r/   r   r   r   r   r!   r   r   r   rk   )	outhwpwcodeproofkeywantgotreceipts	            r'   deployr<     s   AABi  QH  GH2VT%	+nEXY\]_Y`adegahij 
yD
**S#f+d40188
9E%j13CK2PQD#J~&x0:9GjY$?@@ R 4tdh  GR  is  KV  _  Y^  _G
3w&wr&   c                   t        j                         |z   }t        j                         |k  rl| j                         r/	 t        j                  | j                               } ||      r|S 	 t        j                  d       t        j                         |k  rlt        d|        # t        t        j                  f$ r Y Vw xY w)N皙?zbounded event timeout: )
r   	monotonicrW   r/   r   r   OSErrorJSONDecodeErrorsleepr!   )r=   timeout	predicatedeadliner2   s        r'   	wait_filerF     s    ^^g%H
..
8
#;;=8jj!12U#E\#

3 ..
8
# +D62
33 D001747s    ,B) )CCc                4   | dz  }t        |dd      }t        j                  dddt        dd	d
ddg	|t        j                  d      }| dz  }| dz  }t        j                  t        t              t        t        dz        ddt        |      dt        |      gt        j                  t        j                  d      }t        |dd        t        dddt        g       t        j                         dz   }t        j                         |k  rt               }t        dz  }	|j                  d      dk(  r|j                  d      dk(  r||	j!                         rlt#        j$                  |	j'                               }
|
j                  d      dk(  r5|
j                  d i       j                  d!i       j                  d"      d#k(  rn8t        j(                  d$       t        j                         |k  rt+        d%      t        d&z  }t        j                         d'z   }d }t        j                         |k  r|j!                         r]|j'                         j-                         D 
cg c]  }
t#        j$                  |
       }}
t/        d( t1        |      D        d       }|rn-t        j(                  d)       t        j                         |k  r|st+        d*      t3        t               d+         |j4                  |j4                  |d,   |d-   |d.   d/S c c}
w )0Nzjournal.txtwzutf-8)encodingz/usr/bin/journalctlrz   r   z-fz-n0z
--no-pagerr   catT)r   rs   start_new_sessionzobserver-events.jsonlzobserver-ready.jsonzlifecycle_observer_v7.pyobservez--eventsz--ready   c                *    | j                  d      dk(  S )Nr   ARMEDr   )r   s    r'   <lambda>zstart_runtime.<locals>.<lambda>   s    quuX7r&   ry   startZ   r   r|   activer}   runninggateway_stater   r   state	connectedg?zgateway readiness timeoutz9data/onboarding/telegram-staff-membership-v1/events.jsonl
   c              3  J   K   | ]  }|j                  d       dk(  s|  yw)eventsubscription_armedNr   r   s     r'   r   z start_runtime.<locals>.<genexpr>   s!     Z>aQUU7^EY5Y>s   ##r>  z!membership subscription not armedr~   subscription_epoch_idobserved_at_utcstaff_chat_inventory_sha256)service_pidobserver_pidmonitor_pidr\  subscription_armed_at_utcr^  )r]   rp   Popenr   STDOUTr   r   r   DEVNULLrF  rq   r   r?  r   r   r   rW   r/   r   r   rB  r!   r   nextreversedrD   pid)rootjournaljfmonitoreventsr   r   rE  srV  r   r   armedrowss                 r'   start_runtimerq     s   G4W#E3HT'$uUabfglmuw  @J  @Q  @Q  dh  iG''Ft4I/Is6{3y9S/S+TU^_ijmntjuv  AD  EJ  AK  L  T^  Tf  Tf  nx  n@  n@  SW  XHeA78	hww78^^b H
..
8
#
)7#77U55)aeeJ.?.Ju||~jj*+Auu_%y0QUU;r5J5N5NzZ\5]5a5abi5jlw5wy~

2 ..
8
# 34
4RRJ^^b H
E
..
8
#)3)=)=)?)J)J)LM)LA$**Q-)LDMZ8D>Z[_`Ee

3 ..
8
#  CDDgi	238<<^e^i^i  CH  I`  Ca  ~C  DU  ~V  uz  {X  uY  Z  Z Ns   $Lc                0  K   dd l }ddlm} ddlm}m} t        j                  t        dz  j                               }|j                  t        dz  j                               }	 |||	      }
|
j                  |d   k7  rt        d      |	d   d	   d
   } ||      4 d {   } |||
| |t        dz  t        dz  |d   t        t              |d   d|d   |d          d {   cd d d       d {    S 7 X7 7 	# 1 d {  7  sw Y   y xY ww)Nr   Bot)build_staff_chat_inventorycreate_pre_activation_evidencer   r   r^  zstaff inventory driftr   r   tokenr	  r
  r   r\  rb  )
output_pathdeployment_receipt_pathregistry_pathconfig_pathr	  customer_user_idbootstrap_session_idbootstrap_generationr\  rb  )r   r   rt  0gateway.platforms.telegram_staff_membership_gateru  rv  r/   r   r   r   r   r7   r!   rD   r  )r;  
deploymentr   runtimer   rt  ru  rv  r   config	inventoryrw  bots                r'   r   r      s    zZZ!::EEGHHQUQ_Q_ahivav  aB  aB  aD  RE&  Qk  lt  u{  Q|  GP!>??wOfGgAg

j
)'
2E5zzS3C	gnx  HO  Pi  Hi  v}  ~K  vK  X`  an  Xo  AD  EJ  AK  ai  jv  aw  MN  el  mD  eE  `g  hC  `D  E  E zz E zzzsZ   B D"C;#D&?D%C=&D)D5C?6D=D?DDD
DDc                   ddl m}  || d      }|j                  dk7  r"t        d|j                  j
                  z         |j                  j
                  t        |j                        t        |j                        dS )Nr   )provider_auth_checkT)receipt_directoryallow_billable_active_probezprovider readiness failed: )resultreceipt_sha256receipt_path)	!gateway.platforms.dualcoach_adminr  exitr!   r  r2   r>   r  r   )receipt_dirr  r   s      r'   r   r      s`    EKTXYAvvqy =ahhnn LMMXX^^S5HX[\]\j\jXkllr&   c                  K   dd l }ddlm} | dz  }| dz  }|j                         s|j                         rt	        d      d|d   z   }t        |dd	t        t        |d
   z   j                               |d   |d
   t        t        |j                               dd       |j                  t        dz  j                               }	  ||d   d   d         4 d {   }|j                  t        t              |d       d {   }	d d d       d {    ddt%        	j&                        t%        |	j(                        t        t        |d
   z   j                               d}t        ||d       |S 7 7 u7 g# 1 d {  7  sw Y   wxY w# t        $ r9}
t        | dz  ddt!        |
      j"                  dd       t	        d      |
d }
~
ww xY ww)Nr   rs  zinvite-intent.jsonzinvite-result.jsonz-invite was already attempted; retry forbiddenu`   DualCoach 시작 초대입니다. 아래 링크를 눌러 본인이 직접 시작해 주세요.
r  ztask26-invite-intent-v1ATTEMPTING_NEVER_RETRYr
  r	  )r/  r   idempotency_keyr	  r
  destinationmessage_sha256TrJ   r   r   r   rw  )r   rm   disable_web_page_previewzinvite-unknown.jsonztask26-invite-unknown-v1UNKNOWN_NO_RETRY)r/  r   
error_typez*invite outcome unknown; no retry permittedztask26-invite-result-v1SENT_EXACTLY_ONCE)r/  r   
message_idr   r  )r   r   rt  rW   r!   rk   r:   r   r1   r  r   r   r   send_messagerD   BaseExceptionrC   r"   r   r  r   )ri  r   r   rt  intentr  messager  r  sentexcr2   s               r'   	send_oncer     s    $$FT2F-Ff}}&--/9h1i+iopx  zI  qJ  JG
65?Wjsuy  {C  DP  {Q  vQ  uY  uY  u[  k\  ks  tA  kB  PX  Ye  Pf  uz  LU  V]  Vd  Vd  Vf  Lg  h  sw  x>>7=0;;=>Fbvk*:6w?@@C''E
ae'ffD A@ .7JX[\`\k\kXlwz{  |H  |H  xI  \e  gk  lt  uA  lB  gB  fJ  fJ  fL  \M  NE
6%$' Af A@@@ bt))4NXjx|  ~A  yB  yK  yK  +L  W[  	\  dk  lX  dY  _b  ^bbs   CG	F E;F "%FE=FF E?F AG;F =F?F FF
FF 	G4GGGc                   t        j                  dddt        gdd       | dz  }|j	                  dd	       d
D ]f  }t
        |z  }|j                         s|j                         r.||z  }|j                  j	                  ddd       t        j                  ||       h t        | dz  d|d       y # t        $ r Y w xY w)Nry   rz   stopT   )rn   rC  zrollback-archiverM   )rP   rQ   )r   r   r   r   r   r   r   r   zstate.db-shmzstate.db-walr   rN   zblocked.jsonBLOCKED_CLEAN_ROLLBACK)r   reason)rp   rq   r   	ExceptionrT   r   rW   rV   rS   rA   renamerk   )ri  r  archiverelrw   qs         r'   rollbackr     s    	-hvgFVZcf	g##GW]]t]%L {
#+88:allnckA188>>$E4>PRTR[R[\]^_R` { 4)A6RS ds    B7 7	CCc                
   | dz  }t        |dt        t        t                    dd       t	        j
                  t              j                  d      dz   t        j                         j                  d d z   }d	}	 t               }t        | d
z  |       t               }t        | dz  |       t        |      }|j                  d      }t        | dz  |       ||d<   t        | dz        }t!        |       }	t        | dz  |	       t#        j$                  t'        | dz  | dz  ||	            }
t)        | dz        }t               |k7  st+               |d   k7  rt-        d      t        | dz  d|
d   |d       t#        j$                  t/        | |            }d}d}ddt0        |d   |d   t3               |	d   |
d   |d   d|d	d	d	d }t        | d!z  |d       |S # t4        $ r}|st7        | t9        |              d }~ww xY w)"NzONE-USECLAIMED)r   controller_sha256TrJ   z%Y%m%d%H%M%S_r   Fz01-verified.jsonz02-baseline.jsonr  z03-prepared.jsonz04-deployment.jsonz05-runtime.jsonz06-membership.jsonr   r   z&candidate/config changed after startupz07-ready.jsonREADY_TO_INVITEevidence_sha256)r   membership_evidence_sha256r   zCustomer 8527916639: open the single DualCoach invite in this private DM and tap Start yourself; do not send onboarding answers yet.ztask26-strict-launch-result-v1READY_CUSTOMER_CLAIMr	  r
  r`  r  r   )r/  r   	candidater	  r
  r   r`  r  invite_message_idinvite_countfirst_user_instructionr   r   delivery_capability_issuedzREADY_CUSTOMER_CLAIM.json)rk   r>   r   r   r   nowr   strftimerZ   r[   r\   r   r   r'  popr<  rq  asynciorq   r   r   r   r!   r  r   r   r  r  r   )ri  markerr  invitedpinsbaser   private_linkr  r  memberprovider_resultinvitehandofffinalr  s                   r'   executer     sw   	>F6&9QTUYZbUcQd)eptuLL&&~6s:4::<;K;KBQ;OOGG-?(?!EZ%7 7=!_0M<vVZ[mVmnvOw".!$334
d#VD1B,B7%K{{:d+?&?EY@YZbcjkl j1t#|~tG}'DGT|L}F}tO#.?]cdu]v  CR  %S  	T{{9T(34dg W8BXei  yA  BO  yP  ^f  gs  ^t  F  H  X_  `n  Xo  MS  Te  Mf  {A  BN  {O  _`  zA  OT  `e  CH  It//Ee| c#h/s   =EG 	H%G==Hc                    t        t              }t               }t               }t        t              }||k7  rt	        d      ddt
        ||t        d}t        | dz  |d       |S )Nzdry-run mutated profileztask26-strict-launch-dry-run-v1PASS_ZERO_MUTATIONS)r/  r   r  checksr   planned_boundarieszdry-run.jsonTrJ   )tree_snapshotr   r   r   r!   r   
BOUNDARIESrk   )ri  beforer  r  afterr2   s         r'   dry_runr     sn    !F(8(:4DS`ahSiUu}G$=>>5?Taeos  @D  Zd  eE
4ut4Ulr&   c           
     f   g }t        | j                  d            D ]  }|j                         }|j	                  |       j                         }|j                         r(|j                  |dt        j                  |      f       j|j                         r4|j                  |d|j                  |j                  t        |      f       |j                         s|j                  |dt        j                   |j"                        f        t%        t'        |            S # t        $ r Y w xY w)N*LFD)sortedrgloblstatFileNotFoundErrorrelative_toas_posixrV   r   rA   readlinkr   r   st_mtime_nsr>   is_dirr   S_IMODEst_moder:   r3   )ri  rp  rw   str  s        r'   r  r    s    	DDJJsO$	RMM$((*<<>4;;CA'?@YY[$++s3rzz"..Q&PQXXZc#dll2::.F%GH % U4[!! !*(*s   D##	D0/D0c                  *    e Zd ZdZddZddddddZy)	BoundaryModelzHDeterministic model used to prove ordering/crash/unknown-outcome policy.c                .    d| _         d| _        d| _        y )Nr   F)index	attemptedr  )selfs    r'   __init__zBoundaryModel.__init__  s    1
UdnaDIr&   F)crash_beforecrash_afterunknownc               f   |t         | j                     k7  rt        d      |rt        d      |dk(  r| j                  rt        d      d| _        |dk(  r9| j                  st        d      |rt        d      | xj
                  d	z  c_        | xj                  d	z  c_        |rt        d
      y )Nzorder violationzcrash-beforer   zduplicate inviteTr   zmissing intentzunknown-no-retryr   zcrash-after)r  r  r!   RuntimeErrorr  r  )r  rY   r  r  r  s        r'   crosszBoundaryModel.cross  s    DJJ''w7H/I)I|N;; ~~011DN >>1A)B#Bg&899IIqLI

A
l=99;r&   N)returnNone)
rY   r   r  boolr  r  r  r  r  r  )r"   r#   r$   __doc__r  r  r%   r&   r'   r  r    s    RO05uZ_ :r&   r  c                    t        j                         } | j                  dd       | j                  dt        d       | j	                         }	 |j
                  j                  ddd       |j                  d	k(  rt        |j
                        nt        |j
                        }t        t        j                  |d
             y# t        $ r&}t        d|t        j                         Y d }~yd }~ww xY w)NrP   )dry-runr  )choicesz--rootT)rC   requiredrM   )rP   rO   rQ   r  )r+   r   zBLOCKED:)file   )argparseArgumentParseradd_argumentr   
parse_argsri  rT   rP   r  r  printr/   r0   r  r  rs   )rw   r   r  r  s       r'   mainr    s   A?T!UWXWeWefntx  CGWe  XH  LM  LX  LX  LZ  JKM	%d;WXW]W]_hWhGAFFOnuvwv|v|n}V  @E  FJ  FP  FP  QW  bf  Fg  @h  qrLU:cszzB1Ls   A7C	 		C8C33C8__main__)r2   r	   r  bytes)r9   r  r  r   )r=   r   r  r   )rF   rD   r9   r  r  r  )r=   r   r2   r	   rK   r  r  r  )ru   z	list[str]rv   r	   r  z subprocess.CompletedProcess[str])r  zdict[str, str])r  zdict[str, bool])r  dict[str, Any])ri   r   r  ztuple[Path, Path])r  r   r  r   )r3  r   r  r   )r=   r   rC  floatrD  zCallable[[Any], bool]r  r	   )ri  r   r  r   )
r;  r   r  r   r   r   r  r   r  r   )r  r   r  r   )ri  r   r   r   r  r   )ri  r   r  r   r  r  )ri  r   r  r   )r  rD   )Gr  
__future__r   r  r  r6   r/   rA   r   rp   r  r  r   rZ   r   r   r   r   r  pathlibr   typingr	   r
   ROOTr   r   HERMESr   r   r   r   r   r   r   r   r  r  r  r  	O_CLOEXECgetattrra   r  r!   r3   r:   r>   rI   rk   rq   r   r   r   r   r   r'  r<  rF  rq  r   r   r  r  r  r  r  r  r  r"   
SystemExitr%   r&   r'   <module>r
     so   = "     	   
     9 9   78QQ	
:
;	8	9	"	"
0IIO
PPQ* R

wr<33 !l !g I ? 9> 
Kl
O*	7	4Z6Em6 T.C	": :"M
 Zz$&11r&   