
    Yj                       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ZddlZddlmZ ddlmZ ddlmZ dZdZd	Zd
ZdZedfZ ed      Z ee      j?                         j@                  Z!e!dz  Z"dZ#e!j@                  dz  dz  Z$dZ%dZ&e!dz  Z'e!dz  Z(e!dz  Z)dZ*dZ+h dZ,ddhZ-h dZ. G d de/      Z0d>dZ1d?d Z2d@d!Z3dAdBd"Z4dCd#Z5dDd$Z6dEd%Z7dFd&Z8dGd'Z9dHd(Z:dId)Z;dJd*Z<dKd+Z=dLd,Z>dMdNd-Z?dOd.Z@dPd/ZAdQd0ZBdRd1ZCddd2	 	 	 	 	 	 	 	 	 dSd3ZDdDd4ZEdTd5ZFdUd6ZGej                  dVd7       ZIdWd8ZJdddd9	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dXd:ZKdYd;ZLdMdZd<ZMeNd=k(  r eO eM             y)[zDDisposable-only Task27 cleanup for session-bound onboarding residue.    )annotationsN)Iterator)Path)Anyz)task27-supplemental-cleanup-controller-v1@d1109d8f78aaccf949ec4f664d9e62584c3cca33032030518bc3e2d712239112$task26_claim_20260818145508_1b96b23dcb_mYUoMIsk_CRzSDKYpPE9dg
85279166390z)/home/cube/.hermes/profiles/dualcoachtestz task27-live-cleanup-receipt.json@7848def41100aa4f4ef27239dfaae3cc634d5ad2b24df7966d4d80838f692a3az:task26/task26-combined-v38-delivered-st_01a019d7/artifactsz$hermes_agent-0.17.0-py3-none-any.whl@f8b3c779c58435dd33f8f9bbc89e9823bd09f81367a27366c6d678270c1860b1u   ㅇㅇz.task27-supplemental-live-final-preview-v2.jsonz9task27-supplemental-live-cleanup-authorization-final.jsonz-task27-supplemental-live-cleanup-receipt.jsonz$.task27-supplemental-disposable-copy#TASK27_SUPPLEMENTAL_DISPOSABLE_COPY>   .lock.receipt-key.emergency.lock.owner-callbacks.lockledger.jsonemergency.jsonowner-callbacks.jsonevents.jsonlzevents.jsonl.lock>   recovery-auditscustomer-cleanuptask27-final-cleanupprofile-reset-archivesrehearsal-reset-archivestask27-supplemental-cleanuppost-lifecycle-cleanup-archivesc                      e Zd Zy)RefusalN)__name__
__module____qualname__     h/home/cube/projects/richard/traning coach/.omo/evidence/task27/task27_supplemental_cleanup_controller.pyr   r   H   s    r$   r   c                P    t        j                  | ddd      j                         S )NT),:)ensure_ascii	sort_keys
separators)jsondumpsencodevalues    r%   	canonicalr1   L   s#    ::DDZfhr$   c                H    t        j                  |       j                         S N)hashlibsha256	hexdigestr/   s    r%   	sha_bytesr7   R   s    >>% **,,r$   c                $   t        j                         }| j                  d      5 }|j                  d      x}r%|j	                  |       |j                  d      x}r%d d d        |j                         S # 1 sw Y   |j                         S xY w)Nrbi   )r4   r5   openreadupdater6   )pathdigesthandleblocks       r%   sha_filerA   V   s~    ^^F	4F{{;//e/MM%  {{;//e/ 
  
 s   8A77Bc                   | j                         s| j                         rt        d|        | j                  j	                  ddd       t        j                  d| j                   d| j                        \  }}	 t        j                  ||       t        j                  |dd      5 }d	}|j                  t        |      d
z          |j                          t        j                  |j                                d d d        t        j                   ||        | j#                  |       |dk\  rt        j$                  |       t'        j(                  t*              5  t        j,                  |       d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w# |dk\  rt        j$                  |       t'        j(                  t*              5  t        j,                  |       d d d        w # 1 sw Y   w xY wxY w)Nzoutput already exists: T  )parentsexist_okmode.)prefixdirwb)closefd   
r   )exists
is_symlinkr   parentmkdirtempfilemkstempnameosfchmodfdopenwriter1   flushfsyncfilenoreplacechmodclose
contextlibsuppressFileNotFoundErrorunlink)r=   r0   rF   
descriptor	temporaryr?   s         r%   atomic_jsonre   ^   sh   {{})/v677KKdT>$,,a		{!4D$++VJ	!
		*d#YYz46&JLL5)E12LLNHHV]]_%	 7
 	

9d#

4?HHZ   !23IIi  43 76 43 ?HHZ   !23IIi  433sI    .F .AF/F #FFF F4G9G-$	G9-G62G9c                  	 | j                         }|rt        j                  nt        j
                  }|rdnd}t        j                  |j                        sf ||j                        rT|j                  t        j                         k7  s3t        j                  |j                        |k7  s|s|j                  dk7  rt        d|        |S # t        $ r}t        d|        |d }~ww xY w)Nz'required cleanup state is unavailable: rC        zcleanup state is unsafe: )lstatOSErrorr   statS_ISDIRS_ISREGS_ISLNKst_modest_uidrU   geteuidS_IMODEst_nlink)r=   	directoryinfoexcexpected_kindexpected_modes         r%   _require_privatery   s   s    Qzz| %.DLL4<<M&EEMT\\"T\\*;;"**,&<<%6dmmq01$899K  Q?vFGSPQs   C 	C,C''C,c                   	 | j                         }t        j                  |j
                        spt        j                  |j
                        rQ|j                  t        j                         k7  s0t        j                  |j
                        dvs|j                  dk7  rt        d|        y # t        $ r}t        d|        |d }~ww xY w)Nz cleanup receipt is unavailable: >      rg   rh   zcleanup receipt is unsafe: )ri   rj   r   rk   rn   ro   rm   rp   rU   rq   rr   rs   )r=   ru   rv   s      r%   _require_owner_receiptr|      s    Jzz| 	T\\"||DLL);;"**,&<<%^;==A3D6:;;   J8?@cIJs   B0 0	C9CCc           
     r   | j                         s)| j                         st        |       ddt        d      dS t	        | d       g }| gt        | j                  d            D ]  }|| k(  rdn|j                  |       j                         }|j                         }t        j                  |j                        rt        d	|       t        j                  |j                        rg|j                  t!        j"                         k7  s"t        j$                  |j                        d
k7  rt        d|       |j'                  |dd
d       t        j(                  |j                        r|j                  t!        j"                         k7  s1t        j$                  |j                        dk7  s|j*                  dk7  rt        d|       |j'                  |dd|j,                  t/        |      d       t        d|        t        |       dt1        |      t        t3        |            |dS )NFr   s   []rootrN   entry_countr>   Trt   *rG   z"cleanup state contains a symlink: rC   z%cleanup directory is not owner-only: rI   )r=   typerF   rg   rh   zcleanup file is unsafe: file)r=   r   rF   sizer5   z(cleanup state has an unsupported entry: )r   rN   r   r>   entries)rN   rO   strr7   ry   sortedrglobrelative_toas_posixri   rk   rn   ro   r   rl   rp   rU   rq   rr   appendrm   rs   st_sizerA   lenr1   )r   rowsr=   relativeru   s        r%   tree_inventoryr      s   ;;=!2I&	
 	
 TT*!#D0tzz#/0$,3D,<,<T,B,K,K,Mzz|<<%>tfEFF<<%{{bjjl*dll4<<.HE.Q EdVLMMKK5%HI\\$,,'rzz|+<<-6==A% 8?@@KK$"! LL&tn DTFKLL5 18 D	4yIdO, r$   c                4    dD ci c]  }|| |   
 c}S c c}w )Nr~   r#   )snapshotkeys     r%   compactr      s2     ?>C 	Xc]>  s   c                     | dz  | dz  | dz  dS )Nz.data/onboarding/telegram-publication-outbox-v1z,data/onboarding/telegram-staff-membership-v1z data/task27-supplemental-cleanupoutbox
membershipsupplemental_archiver#   )r   s    r%   mutation_pathsr      s'    IIKK $'I I r$   c                 6    ddddddddddd	dd
dddddgS )Nz1data/onboarding/telegram-publication-outbox-v1/**zMarchive the exact target-only operational directory, verify it, then prune it)r=   actionz/data/onboarding/telegram-staff-membership-v1/**zNarchive the exact target-only subscription directory, verify it, then prune itz;data/task27-supplemental-cleanup/archives/<operation-id>/**z9create and freeze a byte-recoverable supplemental archivez&/tmp/task27-supplemental-rollback-*/**z<create and remove a private rollback buffer during executionzB.omo/evidence/task27/task27-supplemental-live-cleanup-receipt.jsonz3create and freeze the one-use terminal live receiptzE.omo/evidence/task27/.task27-supplemental-live-cleanup-receipt.json.*z6create and remove the private atomic receipt temporaryr#   r#   r$   r%   proposed_mutationsr      sf     H 	
 F 	
 RQ	

 =T	

 YK	
C O	
7" "r$   c                     t        t              j                         } t        t              }|t
        k7  rt        d      t        t        |       |dS )Nz$delivered Hermes wheel hash mismatch)candidate_digestcontroller_sha256hermes_wheel_sha256)r   __file__resolverA   HERMES_WHEELHERMES_WHEEL_SHA256r   	CANDIDATE)
controller
wheel_hashs     r%   tool_bindingr      sK    h'')J,'J((<==%%j1) r$   c                    t        t               t        t              } | t        k7  rt	        d      	 t        j                  t        j                               }|j                  d      dk7  s|j                  d      dk7  s|j                  di       j                  di       j                  d	      t        k7  sp|j                  di       j                  di       j                  d
      t        k7  s8|j                  di       j                  di       j                  d      t        k7  rt	        d      t        t              | |d   dS # t        t
        j                  f$ r}t	        d      |d }~ww xY w)Nz,current Task27 cleanup receipt hash mismatchz)current Task27 cleanup receipt is invalidstatus	COMMITTEDoperation_id e90fcc341e9f49c2a2c57ce46dd50c12beforeexpectedcustomer_key
session_iduser_idz/current Task27 cleanup receipt binding mismatch)r=   r5   r   )r|   CLEANUP_RECEIPTrA   CLEANUP_RECEIPT_SHA256r   r,   loads
read_bytesrj   JSONDecodeErrorgetCUSTOMERSESSIONUSER_IDr   )actual_hashreceiptrv   s      r%   cleanup_receipt_bindingr     sC   ?+?+K,,DEEL**_779: 	H,;;~&*LL;;x$((R8<<^LPXX;;x$((R8<<\JgU;;x$((R8<<YG7RGHHO$/  T))* LABKLs   'E E6%E11E6c                    t        t               t        t              } 	 t        j                  t        j                               }|j                  d      }|j                  d      }|j                  d      t        k7  s|j                  d      dk7  s|j                  d      dk7  st        |t              r|j                  d	      t        t              k7  sp|j                  d
      _|j                  d      t               k7  sC|j                  d      t!               k7  s't        |t              r|t#        t%        |            k7  rt        d      || |fS # t        t        j                  f$ r}t        d      |d }~ww xY w)Nz approved live preview is invalidpermission_payloadpermission_sealschemarF   dry-runr   AWAITING_AUTHORIZATIONtargetlive_authorizationtoolsr   z&approved live preview binding mismatch)r|   LIVE_PREVIEWrA   r,   r   r   rj   r   r   r   SCHEMA
isinstancedictr   LIVEr   r   r7   r1   )preview_shapreviewrv   payloadseals        r%   approved_previewr     s?   <(<(KC**\4467 kk./G;;()DH';;v)+;;x $<<'4(;;x CI-;;+,8;;w<>1;;+,0B0DD$$9Yw/00>??K%%# T))* C89sBCs   'E F3E??Fc           
        | j                         t        j                         k7  rt        d      t        |        t	        |       }	 t        j                  | j                               }|j                  d      }t        t        t        t        t              d}dddddddddd		}t!        |t"              st        d
      |j                  d      }t!        |t$              r.t'        |      j                         t(        j                         k7  rt        d      t+               \  }}	}
t-               }|j                  d      dk7  sJ|j                  d      dk7  s5|j                  d      t%        t.              k7  s|j                  d      t0        k7  s|j                  d      t2        k7  s|j                  d      |k7  s|j                  d      t5               k7  s|j                  d      |k7  s|j                  d      |d   k7  s|j                  d      |	k7  st|j                  d      |
k7  s`|j                  d      t6        k7  sHt!        |j                  d      t$              r)|d   r$t!        |j                  d      t$              r|d   st        d
      t%        |       ||d   |	|
|d   |d   t6        dS # t        t
        j                  f$ r}t        d      |d }~ww xY w)Nz live authorization path mismatchzlive authorization is invalidapprovalr   r   r   routeFnoner   T)	
activationcommitcustomer_deliveryexternal_network_actionsgateway_must_remain_stoppedprovider_actionspushreleasetelegram_actionsz#live authorization binding mismatchapproved_dry_run_pathz#approved live preview path mismatchr   z1task27-supplemental-live-cleanup-authorization-v1r   APPROVED_ONCEr   r   cleanup_receipt_sha256identityr   constraintsapproved_controller_sha256r   approved_dry_run_sha256approved_permission_sealuser_messageapproved_atthread_session_id)r=   r5   r   r   r   r   r   r   )r   LIVE_AUTHORIZATIONr   r|   rA   r,   r   r   rj   r   r   r   r   r   listROUTEr   r   r   r   r   r   r   r   r   r   r   APPROVAL_MESSAGE)r=   authorization_hashdocumentrv   r   expected_identityexpected_constraintsapproved_preview_path_approved_preview_shaapproved_preview_sealcurrent_toolss               r%   live_authorization_bindingr   4  s   ||~+33558994 !$@::doo/0 ||J'H e	 "$%'+
 h%;<<$LL)@A,c2%&..0L4H4H4JJ;<<5E5G2A2 NMX>	?<<!_4<<!SY.<<*+y8<<015KK<<
#'88<<,-1C1EE<<&*>><<45,-.<<126JJ<<23 !<<'+;;(,,}5s;&(,,':;SA+,;<<D	$&34G&H#7$9.%&9:(	 	i T))* @56C?@s   #K   K*K%%K*c                ~   | It        j                  | j                               }|d   |d   t        |d         t        |d         ddS t	        j
                  g ddd	d	
      }|j                  r&t        d|j                  j                                t        d |j                  j                         D              }t        j                         h}t        j                         }|dkD  rb||vr^|j!                  |       	 t        t#        d      t%        |      z  dz  j'                         j)                         d         }|dkD  r||vr^d}t#        d      j1                         D ]f  }|j2                  j5                         rt        |j2                        |v r5	 |dz  j                         j7                  dd      }d|v sd|v sb|dz  }h |j9                  d      |j9                  d      t        |j9                  dd            |ddS # t*        t,        t.        f$ r Y w xY w# t*        $ r Y w xY w)Nactive_state	sub_statemain_pidmatching_processestest_override)r   r   r   r   source)
	systemctlz--usershowz"hermes-agent@dualcoachtest.service-pActiveStater  SubStater  MainPIDFT)checkcapture_outputtextzservice state unavailable: c              3  J   K   | ]  }d |v s|j                  d d        yw)=rh   N)split).0lines     r%   	<genexpr>z service_state.<locals>.<genexpr>  s&      'AtSD[

3'As   	##rh   z/procrk      r   cmdline        s   dualcoachtests   hermes-agentr  r  r  z-1systemd_and_proc)r,   r   r   int
subprocessrun
returncoder   stderrstripr   stdout
splitlinesrU   getpidgetppidaddr   r   	read_textr  rj   
ValueError
IndexErroriterdirrT   isdigitr\   r   )	overrider0   resultfields	ancestorsrP   matchesentrycommands	            r%   service_stater-  {  s.   

8..01!.1{+E*-."%e,@&A"B%
 	
 ^^	
 F" 3FMM4G4G4I3JKLL '-}}'?'?'A F IZZ\F
1*y0f	$w-#f+5>IIKQQSTUVWF 1*y0 Gg&&(zz!!#s5::)'C	y(446>>udKG w&/W*DqLG ) 

=1ZZ
+

9d34%$  Z0 		  		s%   AH $#H0H-,H-0	H<;H<c                D    | d   | d   | d   | d   fdk7  rt        d      y )Nr   r   r   r   )inactivedeadr   r   z6service must be inactive/dead with no matching process)r   r/   s    r%   require_inactiver1    sE    nkj"#	
 
$$ NOO$r$   c           	         | j                         D ch c]  }|j                   }}||k7  rt        d|  dt        ||z               y c c}w )Nz2cleanup directory has unknown or missing entries: z: )r$  rT   r   r   )r   r   r=   actuals       r%   _strict_namesr4    s]    $(LLN3NDdiiNF3@bfx'()+
 	
  4s   Ac                    t        t              } | t        j                  vr t        j                  j	                  d|        t        j                  d      }t        j                  d      }t        |d      t        |d      fS )Nr   zBgateway.platforms.telegram_nutrition_onboarding_publication_outboxz0gateway.platforms.telegram_staff_membership_gate"GatewayOnboardingPublicationOutboxMembershipJournal)r   r   sysr=   insert	importlibimport_modulegetattr)wheeloutbox_modulemembership_modules      r%   _import_runtime_typesr@    sv    ECHH5!++LM "//: 	CD!#67 r$   c                   t        |       }|d   }|d   }t        |      }t        |      }t        t        |d               }|d   r|d   st        d      |d   rt        d      t	        |t
               t	        |t               	 t        j                  |dz  j                               }t        j                  |dz  j                               }t        j                  |d	z  j                               }	|j                  d      }|j                  d      dk7  s"t        |t              r|r|dg dk7  s|	dg dk7  rt        d      |D ]~  }t        |t              rb|j                  d      t         k7  sJ|j                  d      t        t"              k7  s)|j                  d      dk7  s|j                  d      dk7  sut        d       t%               \  }}	  || d      }|j'                         }|j)                         rt        d       ||dz        j+                         }t/        |      t/        |      k7  rt        d      t/        |      dk7  sU|d   j                  d       d!k7  s>|d   j                  d"      t0        gk7  s"t        |d   j                  d#      t2              st        d$      t        |      t        |      |t/        |      t/        |      |d   d#   d%S # t        t        j                  f$ r}
t        d
      |
d }
~
ww xY w# t        $ r  t,        $ r}
t        d      |
d }
~
ww xY w)&Nr   r   r   rN   z)target operational directories are absentz9supplemental cleanup root must be absent before executionr   r   r   zoutbox JSON is malformedrecordsr   z3telegram-nutrition-onboarding-publication-outbox-v2)r   rB  z/telegram-nutrition-onboarding-owner-callback-v1z2outbox does not match the exact supplemental stater   r   rolecustomerstater   z)foreign, mixed, or nonterminal outbox rowF)
initializezemergency outbox is not emptyr   z6outbox HMAC or membership hash-chain validation failedz!outbox parser projection mismatchrh   r   eventsubscription_armedcustomer_user_idssubscription_epoch_idz!foreign or mixed membership state)r   r   r   publication_recordsmembership_rowsmembership_epoch)r   r   r   r   r4  OUTBOX_NAMESMEMBERSHIP_NAMESr,   r   r   rj   r   r   r   r   r   r   r   r@  rB  emergency_recordsverify	Exceptionr   r   r   )r   pathsr   r   outbox_treemembership_treesupplemental_treeprimary	emergency	callbacksrv   primary_rowsrowoutbox_typejournal_typeauthenticatedparsedr   s                     r%   validate_target_stater`    s"   4 E8_F|$J (K$Z0Ou5K/L MNx (AABB"QRR&,'*./;**f}4@@BCJJ)9 9EEGH	JJ)? ?KKMN	 ;;y)LH!VV,-K


 G

 JKK3%ww|$/www4;.wwv*,www;.EFF  !6 7K	Y#DU;&&(**,9::J78??A
 6{c,''9::D	Q7;;w#777;;*+y8$q'++&=>D9::+&o. 1"<0t9 G$;< a T))* ;01s:;F   YNOUXXYs2   	A2K/ AL /LLLL?.L::L?live_authorization_fileservice_overridec                  | j                         } t        | d       | j                         t        j                         k(  }|r|d n
t	        |      }n|t        d      d }t        |      }t        |       t        |       }dt        |       t        t        t        t        t              dt               |t!               |dD ci c]  }|||   
 c}|d   |d   |d	   d
t#               d
}	|r0|.t%               \  }
}}t'        |	      }d |d<   ||
k7  rt        d      t)        t+        |	            }t,        d|r|dnd|	|d}t/        ||       |S c c}w )NTr   5live authorization cannot target a disposable profilez)task27-supplemental-cleanup-permission-v1r   r   rK  rL  rM  )rK  rL  rM  )
r   r   r   cleanup_receiptr   r   serviceexact_stateobservedr   r   z,live state drifted from the approved previewr   r   READY)r   rF   r   r   r   )absolutery   r   r   r   r   r-  r1  r`  r   r   r   r   r   r   r   r   r   r   r   r7   r1   r   re   )profileoutputrb  rc  is_liveauthorizationrE  r   rT   r   preview_payloadr   preview_projectionr   r   s                  r%   dry_runrr  $  s     GW-oo4<<>1G '. +,CD 	 #.QRR*+EU"7+F=g,$!%[	
 34+ I
H &,H

 $**?#@%&78 &'9 :

 12-G0 =, 0 2A!']37/00HIIYw'(D =0 %%
G  N=
s   Ec                X   | j                         rt        d|        | j                         r|t        | j	                  d      d      D ]6  }|j                         r|j                  |j                         rdnd       8 | j                  d       t        j                  |        y y )Nzrefusing to remove symlink: r   T)reverserC   rg   )	rO   r   rN   r   r   r]   is_dirshutilrmtree)r=   items     r%   _removery  i  s    4TF;<<{{}4::c?D9D??$

DKKM5u= : 	

5d r$   c                4    t        j                  | |d       y )NF)symlinks)rv  copytree)r  destinations     r%   _copyr~  t  s    
OOFK%8r$   c                    t        | j                  d      d d      D ]C  }|j                         rt        d|       |j	                  |j                         rdnd       E | j	                  d       y )Nr   c                ,    t        | j                        S r3   )r   parts)rx  s    r%   <lambda>z_freeze.<locals>.<lambda>y  s    TZZr$   T)r   rt  zarchive contains a symlink: i@  r{   )r   r   rO   r   r]   ru  )r   r=   s     r%   _freezer  x  sa    tzz#,HRVW??8?@@

DKKM5u5 X 	JJur$   c              #    K   | dz  }t        |d       |dz  }t        |d       t        j                  |t        j                  t        j                  z  t        j
                  z        }	 t        j                  |      }|j                         }t        j                  |j                        ra|j                  t        j                         k7  s@|j                  dk7  s1|j                  |j                  f|j                  |j                  fk7  rt!        d      t#        j$                  |t"        j&                         d  t#        j$                  |t"        j(                         t        j*                  |       y # t#        j$                  |t"        j(                         t        j*                  |       w xY ww)NdataTr   z.profile-authority.lockFrh   z profile authority lock is unsafe)ry   rU   r:   O_RDWR
O_NOFOLLOW	O_CLOEXECfstatri   rk   rm   ro   rp   rq   rs   st_devst_inor   fcntlflockLOCK_EXLOCK_UNr^   )r   r  r=   rc   ru   nameds         r%   authority_lockr    s&    &=DTT*++DTU+
		BMM!BLL0Jxx
#

T\\*{{bjjl*}}!T[[)ellELL-II<==J.J.
 	J.
s   A+F>.CF  :F> ;F;;F>c                $   t         j                         t        j                         t        j                         f}g }| dz  }|j	                         s|S |j                  d      D ]  }|j                         s|j                  |      }t        d |j                  D              rB	 |j                         t        fd|D              sh|j                  |j                                 |S # t        $ r}t        d|       |d }~ww xY w)Nr  r   c              3  ,   K   | ]  }|t         v   y wr3   )ARCHIVE_ROOT_NAMES)r  parts     r%   r  z)_active_target_matches.<locals>.<genexpr>  s     Endt))ns   zterminal scan cannot read c              3  &   K   | ]  }|v  
 y wr3   r#   )r  needler   s     r%   r  z)_active_target_matches.<locals>.<genexpr>  s     7wVv ws   )r   r.   r   r   rN   r   is_filer   anyr  r   rj   r   r   r   )r   needlesr*  r  r=   r   rv   r   s          @r%   _active_target_matchesr    s     '.."2GNN4DEGG&=D;;=

3||~##D)EhnnEE	Hoo'G 7w77NN8,,./   N	  	H6tf=>CG	Hs   *C22	D;D

Dfaultrb  rc  c               p   |j                         s|j                         rt        d|       | j                         } | j	                         t
        j	                         k(  }|rI|j	                         t        j	                         k7  rt        d      |t        d      t        |      }nh|t        d      d }| t        z  }	|	j                         r5|	j                         s%|	j                         j                         t        k7  rt        d      t        | d       	 t        j                  |j!                               }
|
j'                  d	      }|
j'                  d
      }t)        |t*              r\|
j'                  d      t,        k7  sD|
j'                  d      dk7  s0|
j'                  d      dk7  s|t/        t1        |            k7  s||k7  rt        d      |j'                  d      t3        |       k7  rt        d      |j'                  d      t5               k7  rt        d      |j'                  d      |k7  rt        d      |j'                  d      t7               k7  rt        d      |r.t9               \  }}}t+        |      }d |d<   ||k7  rt        d      t;        t=        |             t?        |       }dD ]  }||   |d   |   k7  st        d|        tA        |       }|r%t/        t,         d| jC                               d d ntE        jF                         jH                  }|d   d z  |z  }tK        |       5  t;        t=        |             t?        |       }dD ]  }||   |d   |   k7  st        d!|        tM        tO        jP                  d"#            }|d$z  }d%}	 |jS                  d&'       tU        |d(   |d(z         tU        |d)   |d)z         |d*z  }|jS                  dd&+       d}tU        |d(   ||d(   jV                  z         tU        |d)   ||d)   jV                  z         tY        t[        ||d(   jV                  z              tY        t[        ||d)   jV                  z              d,}d,D ci c]*  }|i |d   |   d-t3        |||   jV                  z        i, }}||k7  rt        d.      d/||d0   |d   |t3        |      |d   d,D ci c]  }||d   |    c}|d1	}|d2z  }t]        ||       d }|r!d3d4|||t3        |      d5}t]        |d6z  |       |d7k(  rt_        d8      ta        |d(          ta        |d)          |d9k(  rt_        d:      tc        |       } | rt        d;|        t;        t=        |             t,        d<d=|rd>nd?t3        |       |||d   |||d   |d@   t3        |      te        |      d,D ci c]  }||d   |    c}|dA|d(   j                          |d)   j                          dBddCtg               dD}!t]        |dEz  |!       ti        |       t]        ||!dF       |!tk        jl                  |       cd d d        S # t"        t        j$                  f$ r}t        d      |d }~ww xY wc c}w c c}w c c}w # tn        $ rR |rNta        |d(          ta        |d)          ta        |d          tU        |d(z  |d(          tU        |d)z  |d)           w xY w# tk        jl                  |       w xY w# 1 sw Y   y xY w)GNz.output already exists; receipt reuse refused: z!live receipt output path mismatchz+live execution requires exact authorizationre  z5execution requires an explicit disposable-copy markerTr   zpermission receipt is invalidr   r   r   rF   r   r   rj  zpermission seal mismatchr   zpermission target mismatchrf  zcleanup receipt driftr   zlive authorization driftr   z"controller or delivered tool driftz5permission is not the approved preview transformationr   rh  zsource drift: r(       r   archivesz#source drift under authority lock: ztask27-supplemental-rollback-)rH   rE  FrC   )rF   r   r   zfiles/data/onboarding)rD   rF   )r   r   r   z-supplemental archive copy verification failedztask27-supplemental-archive-v1r   )	r   r   r   rf  r   receipt_outputr   r  archivezmanifest.jsonz0task27-supplemental-authorization-consumption-v1CONSUMED_ON_COMMIT)r   r   ro  r   r   r  zauthorization-consumed.jsonafter_archive_copyz!injected fault after_archive_copyafter_prunezinjected fault after_prunezactive target residue remains: executer   live
disposableri  )r   manifest_sha256r  copiedr   )outbox_absentmembership_absentactive_target_matchesservice_inactive)r   rF   r   execution_targetrl  r   r   rf  r   authorization_consumptionr   ri  r  terminalproposed_live_mutationszreceipt.jsonr{   )8rN   rO   r   rk  r   r   LIVE_OUTPUTr   MARKERr  r!  r  MARKER_VALUEry   r,   r   r   rj   r   r   r   r   r   r7   r1   r   r   r   r   r1  r-  r`  r   r.   uuiduuid4hexr  r   rR   mkdtemprQ   r~  rT   r   r   re   RuntimeErrorry  r  rA   r   r  rv  rw  BaseException)"rl  permission_filer   rm  r  rb  rc  rn  ro  marker
permissionrv   r   expected_sealrp  r   rq  currentrT   rS  	operationr  lockedrollbackbackupmutation_startedfilesarchivedexpected_archivedmanifestmanifest_pathconsumptionr*  r  s"                                     r%   r  r    s    }}&++-FvhOPP Goo4<<>1G>>{2244=>>"*GHH23JK".QRR6!   "!'')\9QRRW-@ZZ : : <=
 nn12GNN#45Mw%>>(#v->>&!Y.>>(#w.Ii&899= 011{{8G,233{{$%)@)BB-..{{'(M9011{{7|~-:;; 0 2A!']37/00QRR]#345#G,G@4=GM2488N4&122 A 7#E  	VHAdV$++-.s3ZZ\ 
 *+j89DG		 '789&w/DDd|w}5d;; CD6JKK E ((0OPQG# i	$LLeL$%/6H#45%%v'<=55EKK5K1#%/55?+?+?#?@%%uu\/B/G/G'GH!.x9M9M1M"NO%nUU<=P=U=U5U&VWH 5!
 5D	  m,T2Cd(8(8 89  5  ! ,,MNN: )#J/#*+<#=&3"%f+ ) !9 8 '-066 8 $H $o5Mx0KP2%2'+$-&)&k ;; ,,"#FGGE(O$E,'(%"#?@@,W5G ?yIJJ]+;<= !%.5F<w<#' )#*+<#=&3-8 )#J/L'/'> %=$<D gm4T::$< ' */x)?)?)A%A-2<-@-G-G-I)I-.(,	 ,>+?9H< .0(;G%0 MM(#e 
!	 O T))* @56C?@z!"`$  	h(l+,456fx'x9f|+U<-@A	 MM(#e 
!	 s|   %#Y8 3\,5\,8CZ4/Z%/Z41Z*C%Z4&Z/"6A#Z4\,8Z"ZZ"%Z44A\\\))\,,\5c                    t        j                         } | j                  dd      }|j                  d      }|j	                  dt
        d       |j	                  dt
        d       |j	                  dt
        	       |j	                  d
t
        t         j                         |j                  d      }|j	                  dt
        d       |j	                  dt
        d       |j	                  dd       |j	                  dt
        d       |j	                  dt
        	       |j	                  dd       |j	                  d
t
        t         j                         | S )Nr,  T)destrequiredr   z	--profile)r   r  z--outputz--live-authorization-file)r   z--test-service-state)r   helpr  z--permission-filez--permission-seal)r  z--fault)r  r  )choices)argparseArgumentParseradd_subparsers
add_parseradd_argumentr   SUPPRESS)r0   commandsdryr  s       r%   parserr  n  s<   ##%E##T#BH


i
(C[td;ZdT:0t<+$X=N=NO


i
(C[td;(tdC(48ZdT:0t<Y(MN+$X=N=NOLr$   c           
     (   t               j                  |       }	 |j                  dk(  r8t        |j                  |j
                  |j                  |j                        }nXt        |j                  |j                  |j                  |j
                  |j                  |j                  |j                        }t        t        j                  |d   |d   t        |j
                        dd             y	# t         $ r}t        t        j                  d
t        |      t#        |      j$                  dd      t&        j(                         t*        j,                  j/                  d      dk(  rt1        j2                          Y d }~yd }~ww xY w)Nr   ra  r  r   r   )r   r   rm  T)r*   r   REFUSED)r   errorr   )r   TASK27_TRACEBACK1   )r  
parse_argsr,  rr  rl  rm  rb  test_service_stater  r  r   r  printr,   r-   r   r  r   r    r8  r  rU   environr   	traceback	print_exc)argvargsr'  rv   s       r%   mainr    sK   8t$D+<<9$(,(D(D!%!8!8	F $$$$jj(,(D(D!%!8!8F 	JJ$X.'-.?'@!$++.
 		
  JJ' X I..
  
	
 ::>>,-4!s   CC8 8	FBFF__main__)r0   objectreturnbytes)r0   r  r  r   )r=   r   r  r   )rg   )r=   r   r0   r  rF   r  r  None)r=   r   rt   boolr  zos.stat_result)r=   r   r  r  )r   r   r  dict[str, Any])r   r  r  r  )r   r   r  zdict[str, Path])r  zlist[dict[str, str]])r  zdict[str, str])r  dict[str, object])r  ztuple[dict[str, Any], str, str])r=   r   r  r  r3   )r&  Path | Noner  r  )r0   r  r  r  )r   r   r   zset[str]r  r  )r  ztuple[type[Any], type[Any]])r   r   r  r  )
rl  r   rm  r   rb  r  rc  r  r  r  )r  r   r}  r   r  r  )r   r   r  r  )r   r   r  zIterator[None])r   r   r  z	list[str])rl  r   r  r   r   r   rm  r   r  z
str | Nonerb  r  rc  r  r  r  )r  zargparse.ArgumentParser)r  zlist[str] | Noner  r  )P__doc__
__future__r   r  r_   r  r4   r:  r,   rU   rv  rk   r  r8  rR   r  r  collections.abcr   pathlibr   typingr   r   r   r   r   r   r   r   r   r   rP   EVIDENCEr   r   r   r   r   r   r   r  r  r  rN  rO  r  r  r   r1   r7   rA   re   ry   r|   r   r   r   r   r   r   r   r   r-  r1  r4  r@  r`  rr  ry  r~  r  contextmanagerr  r  r  r  r  r    
SystemExitr#   r$   r%   <module>r     s   J "       	    
    $  	4N	1
%
	#78>!!#**??F  OOBC,-  G   JJJJ  HH	/4 #$78  	l 	-!*$<+\#L	0&2DN8vP
 H^ ,0$(BBB )	B
 "B BJ9  46 +/$({${${$ {$ 	{$ {$ ){$ "{$ {$|&-` z
TV
 r$   