
    bja                       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mZ ddlmZ ej"                   eedd      z  Z G d de      Zd#d	Zd$d
Zd%dZd&dZd'dZd(dZd)dZd*dZd+dZd,dZd-dZ d.dZ!d/dZ"d0dZ#d1dZ$	 	 	 	 	 	 	 	 d2dZ%d3dZ&	 	 	 	 	 	 d4dZ'd5dZ(d6dZ)d7dZ*d8dZ+d8dZ,d9d Z-d:d!Z.e/d"k(  r e0 e.             y);zQCandidate-bound archive-first cleanup for exactly one completed ACTIVE lifecycle.    )annotationsN)Path)Any
O_NOFOLLOWc                      e Zd Zy)CleanupErrorN)__name__
__module____qualname__     a.omo/evidence/task26/reset-controller-st_01a0054d/post-lifecycle-cleanup-v2/cleanup_controller.pyr   r      s    r   r   c                T    t        j                  | dd      dz   j                         S )NT),:)	sort_keys
separators
)jsondumpsencode)vs    r   canonr      s#    JJqDZ@4GOOQQr   c                H    t        j                  |       j                         S N)hashlibsha256	hexdigest)raws    r   shar       s    >>#((**r   c           	         | j                   | j                  | j                  | j                  | j                  | j
                  | j                  | j                  | j                  f	S r   )	st_devst_inost_uidst_gidst_modest_nlinkst_sizest_mtime_nsst_ctime_ns)ss    r   stabler,   !   sK    								

					
 
r   c                   t        j                  | t         j                  t        z        }	 t        j                  |      }t        j                  |j                        rQ|j                  t        j                         k7  s0|j                  dk7  s!t        j                  |j                        dvrt        d|        d}t        j                  |d      x}r||z  }t        j                  |d      x}rt        |      t        t        j                  |            k7  rt        d|        |t        j                  |       S # t        j                  |       w xY w)N   >   @         zunsafe sealed input: r      zconcurrent sealed input: )osopenO_RDONLYFLAGSfstatstatS_ISREGr&   r$   getuidr'   S_IMODEr   readr,   close)pfdaoutcs        r   safe_externalrD   /   s   	BKK%'	(BHHRLQYY'xx299;&zzQ||AII&.JJ!6qc:;;772w''a'1HC 772w''a'!9rxx|,,!:1#>??
s   C
E 89E Ec                n   t        j                  | t         j                  t         j                  z  t        z        }t        j
                  |      }|j                  t        j                         k7  s"t        j                  |j                        dk7  r t        j                  |       t        d      |S )Nr2   zunsafe profile root)r4   r5   r6   O_DIRECTORYr7   r8   r$   r;   r9   r<   r&   r>   r   )r?   r@   r+   s      r   	open_rootrG   D   ss    	BKK"..058	9B
Axx299;$,,qyy"9U"B
011Ir   c                   |j                  d      }t        j                  |       }	 |d d D ]  }t        j                  |t        j                  t        j
                  z  t        z  |      }t        j                  |      }t        j                  |j                        rC|j                  t        j                         k7  s"t        j                  |j                        dk7  r#t        j                  |       t        d|       t        j                  |       |} ||d   fS # t         $ r t        j                  |        w xY w)N/dir_fdr2   zunsafe directory: )splitr4   dupr5   r6   rF   r7   r8   r9   S_ISDIRr&   r$   r;   r<   r>   r   	Exception)rootrelpartsr@   partnr+   s          r   	parent_fdrV   M   s    IIcNE	B#2JDbkkBNN:UB2NAALL+88ryy{*<<		*e3"%7u#=>>HHRLB  59} 
s   C?D( ( Ec                    t        | |      \  }}	 	 t        j                  ||d      t        j                  |       S # t        $ r Y t        j                  |       y w xY w# t        j                  |       w xY w)NF)rL   follow_symlinks)rV   r4   r9   r>   FileNotFoundError)rQ   rR   r?   rU   s       r   lstrZ   c   sf    T3DAq	771Q> 	 ! 	
	 	s!   ? 	A A# A  A# #A:c                F   t        | |      \  }}	 t        j                  |t        j                  t        z  |      }t        j
                  |       	 t        j                  |      }t        j                  |j                        rR|j                  t        j                         k7  s1|j                  dk7  s"t        j                  |j                        dk7  rt        d|       d}t        j                  |d      x}r||z  }t        j                  |d      x}rt!        |      t!        t        j                  |            k7  rt        d|       |t        j
                  |       S # t        j
                  |       w xY w# t        j
                  |       w xY w)NrK   r.   r1   zunsafe authority file: r   r3   zconcurrent authority file: )rV   r4   r5   r6   r7   r>   r8   r9   r:   r&   r$   r;   r'   r<   r   r=   r,   )rQ   rR   r?   rU   r@   rA   rB   rC   s           r   	read_filer\   n   s7   T3DAqWWQe+A6
HHRLQYY'xx299;&zzQ||AII&%/!8>??772w''a'1HC 772w''a'!9rxx|,,!<SEBCC
# 	" 	s   -E/ CF	  9F	 /F	F c                   t        | |      }|g S t        j                  |j                        r&t	        | |      }|t        |      t        |      ddgS t        j                  |j                        rC|j                  t        j                         k7  s"t        j                  |j                        dk7  rt        d|       t        | |      \  }}	 t        j                  |t        j                  t        j                   z  t"        z  |      }t        j$                  |       	 g }t'        t        j(                  |            D ]  }|t+        | | d|       z  } t-        |      t-        t        j.                  |            k7  rt        d|       |t        j$                  |       S # t        j$                  |       w xY w# t        j$                  |       w xY w)N0600)pathsizer   moder2   zunsafe authority directory: rK   rI   z concurrent authority directory: )rZ   r9   r:   r&   r\   lenr    rO   r$   r4   r;   r<   r   rV   r5   r6   rF   r7   r>   sortedlistdirwalkr,   r8   )	rQ   rR   r+   r   r?   rU   r@   rowschilds	            r   re   re      so   D#Ay	||AIIc"c#h#c(FSTTLL#88ryy{"<<		"e+9#?@@T3DAqWWQbnn4u<QG
BJJrN+ED#aw/00D ,!9rxx|,,!A#GHH
 	 	s   >F2 *A2G 2G	G#c                    	 t        j                  t        | |            }t        |t              st	        d|       |S # t         j                  $ r}t	        d|       |d }~ww xY w)Nzinvalid JSON: zunknown schema: )r   loadsr\   JSONDecodeErrorr   
isinstancedict)rQ   rR   r   es       r   jloadrn      sl    :JJys+, a-cU344H	  :^C5129:s   A A(A##A(c                L   | j                   j                  ddd       t        j                  d| j                         \  }}	 t	        j
                  |d       t	        j                  ||       t	        j                  |       t	        j                  |       d}t	        j                  ||        t	        j                  | j                   t        j                  t        j                  z  t        z        }t	        j                  |       t	        j                  |       |dk\  rt	        j                  |       	 t	        j                  |       y # t        $ r Y y w xY w# |dk\  rt	        j                  |       	 t	        j                  |       w # t        $ r Y w w xY wxY w)	NTr2   parentsexist_okra   z	.cleanup-)prefixdirr1   rJ   r   )parentmkdirtempfilemkstempr4   fchmodwritefsyncr>   replacer5   r6   rF   r7   unlinkrY   )r?   r   r@   tmpds        r   atomicr      s"   HHNN4$UN;kqxx@GB
		"e
S




3GGAHHbkkBNN:UBC

7HHRL	IIcN  			 7HHRL	IIcN  		sC   CE" =E 	EE"F#>FF#	F F#F  F#c                   g }t        j                  | d      D ]H  \  }}}|j                          |j                          ||z   D ]  }t        |      |z  }|j	                  |       j                         }|j                         }t        j                  |j                        rt        d|       t        j                  |j                        r6|j                  d| dt        j                  |j                        d       t        j                  |j                        r+|j                  d| dt        t!        |                    t        d|        K t        d	j#                  |      j%                               S )
NF)followlinkszsymlink in protected tree: zD  ozF zunsupported protected entry: r   )r4   re   sortr   relative_toas_posixlstatr9   S_ISLNKr&   r   rO   appendr<   r:   r    rD   joinr   )	r?   rf   rQ   dirsfilesrU   xrr+   s	            r   tree_digestr      s6   DWWQE::dE		

AT
QAa ))+A	A||AII&"%@#DEE||AII&c!Bt||AII'>q&ABCaii(c!Bs=+;'<&=>?"%B1##FGG  ; tyy%%'((r   c                d   t        |d         }t        j                  dt        j                  t        j                  z  t
        z  |       }	 t        t        j                  |            }t        j                  |       t        |d         }|D ch c]<  }|j                  d      s|j                  dd      d   j                  dd      d   > }}|D ]F  }d| ||v s||v rt        fd	|d
   D              r|j                         :t        d        |D cg c]  }t        | |      | }	}g }
t        t        |	      d       D ](  t        fd|
D              r|
j                         * t        |
      S # t        j                  |       w xY wc c}w c c}w )Napproved_clear_scopesdatarK   protected_data_rootszdata/rI   r.   r   c              3  J   K   | ]  }t        j                  |        y wr   )fnmatchfnmatchcase).0r?   rR   s     r   	<genexpr>zscopes.<locals>.<genexpr>   s!     P4Oqw""3*4Os    #dynamic_clear_patternszunknown data root: c                (    | j                  d      | fS )NrI   )count)ys    r   <lambda>zscopes.<locals>.<lambda>   s    q0Ar   keyc              3  T   K   | ]  }|k(  xs j                  |d z          ! yw)rI   N)
startswith)r   r?   r   s     r   r   zscopes.<locals>.<genexpr>   s+     BEq162Q\\!c'22Es   %()listr4   r5   r6   rF   r7   rc   rd   r>   setr   rM   anyr   r   rZ   )rQ   rC   valuesr   children	protectedr   topsrg   presentouterrR   s         `    @r   scopesr      s   !+,-F
bnn4u<TJA"**Q-(
A,-.I5;5;q||G?TQ  a(+V 	  eWoI$PA6N4OPPMM#!4SE:;;  !=&QCaL$<q&G=ECL&ABBEBBLLO C %=% 	 >s$   F F(,*F('F-9F-F%c                   g }| j                   dz  | j                   dz  | j                  fD ]  }|j                         s|j                         s|j	                         st        d|       t        |j                               D ](  }|j                  j                  d      s(|| j                  k(  r|j                  | j                  k(  rH|j                         s|j	                         st        d|       t        |j                  d            }|st        d|       	 t        j                  |d   j                               }t#        |t$              st        d
|       |j'                  |j)                  | j                         j+                         t-        |      d       +  |S # t         $ r}t        d	|       |d }~ww xY w)Nzdata/rehearsal-reset-archiveszdata/profile-reset-archiveszunsafe archive root: 	.pending-zinvalid historical archive: manifest.jsonz#historical archive lacks manifest: r   zinvalid historical manifest: z#unknown historical archive schema: )r_   r   )profilearchive_rootexists
is_symlinkis_dirr   rc   iterdirnamer   run_idr   globr   ri   	read_textrP   rk   rl   r   r   r   r   )rA   resultrQ   rg   	manifestsr   rm   s          r   prior_archivesr      s   F			33			11	
 {{}??DKKM!6tf=>>DLLN+Ezz$$[1&5::+A!"%A%#IJJUZZ89I"%H#PQQSJJy|5578 a&"%H#PQQMM!--aii8AAC)%0! ,> M  S"%B5'#JKQRRSs   )&F99	GGGc                   dt        j                  | j                               z   }g }t        d      j	                         D ]i  }|j
                  j                         s	 |dz  j                         j                  d      }||v sF|j                  t        |j
                               k t        |      S # t        t        t        t        f$ r Y w xY w)Ns   HERMES_HOME=z/procenviron    )r4   fsencodeabsoluter   r   r   	isdecimal
read_bytesrM   rY   PermissionErrorProcessLookupErrorOSErrorr   intrc   )r   needlerB   r?   r   s        r   	processesr     s    r{{7+;+;+=>>F
C']""$vv!	Y**,2259A Q;JJs166{# % #;	 "?4FP 		s   !"B99CCc                   t        |d      }|j                  d      dk7  st        |j                  d      t              st	        d      |d   D cg c](  }t        |t
              r|j                  d      dk(  r|* }}t        |      dk7  rt	        d	      |d   D ]]  }||d
   u rt        |t
              r9|j                  d      |d   vs#|j                  d      s|j                  d      sTt	        d       |d
   }|j                  d      }|j                  d      }t        |t              rHt        |      dk7  s:t        |d
   t
              r'|d
   j                  d      dk7  st        |t
              st	        d      t        |d
   j                  d            t        |j                  d            t        |j                  d            dd   | j                  k7  sQt        |d
   j                  d            | j                  k7  s't        |j                  d            | j                  k7  rt	        d      t        |d      }|j                  d      }	t        |	t              rt        |	      dk7  sq|	d
   j                  d      d   k7  sWt        |	d
   j                  d            | j                  k7  s-|	d
   j                  d      dus|	d
   j                  d      d k7  rt	        d!      t        |d"      j                  d#      }
|
g k7  rt	        d$      t        |d%      }d&|vsd'|v rt	        d(      t        |d)      }t        |      dk7  rt	        d*      t        t        |j                                     }t        |t
              r6|j                  d      d+k7  s"|j                  d,      r|j                  d-      st	        d.      t        |j                  d/            d/<   d0D ]-  }t        |j                  |            |   k7  s$t	        d1       t        |d2      j                  d3      }t        |t
              rt        |      d   gk7  rt	        d4      |d      }t        |t
              rl|j                  d      |d5   vsV|j                  d6      |d5   vs@t        |j                  d            d   k7  s t        |j                  d            d   k7  rt	        d7      t        |d8      }t        |      d/   gk7  st        |d/      t              r|d/      st	        d9      |d/      d:   }t        |t
              r6|j                  d      d;k7  s"|j                  d<      |j                  d=      st	        d>      t        |d?      }t        |      d/   gk7  sT|d/      j                  d      d@k7  s:|d/      j                  d      d   k7  s|d/      j                  d      d   k7  rt	        dA      t        |dB      }t        |      dk7  rt	        dC      t        t        |j                                     }|j                  d      dDk7  s?|j                  d<      .|j                  dE      d/   k7  s|j                  d      d   k7  rt	        dF      t        |dG      }|j                  d      dHk7  s6t        |j                  dI      t              rt        fdJ|dI   D              rt	        dK      t        |dL      }|j                  dI      g k7  rt	        dM      S c c}w )NNz:data/onboarding/telegram-customer-bootstrap-v1/ledger.jsonschemaztelegram-customer-bootstrap-v1sessionsz!unknown customer-bootstrap schemastateACTIVEr.   z0requires exactly one authorized ACTIVE lifecycler   terminal_bootstrap_statesrole_claimsrecovery_attemptsz-all other bootstrap sessions must be terminalcustomer_draftrolecustomerzACTIVE claim schema mismatchuser_id
session_idcustomer_key)actor_idr   r   r   chat_idcustomer_user_idz(actor/session/customer identity mismatchzcustomers/registry.json	customersenabledFstatusdisabledz*registry/customer is not uniquely disabledzcron/jobs.jsonjobszfuture cron jobs remainzconfig.yamls   delivery_enabled: falses   delivery_enabled: truezdelivery gate is not disabledz(data/owner-actions/draft-deliveries.jsonz%requires exactly one delivery receiptsent_auditedprovider_receipt
message_idz6delivery/provider outcome is not terminal sent_auditeddraft_id)r   r   r   zdelivery identity mismatchz.data/owner-actions/customer-service-state.jsonstateszowner state is not uniqueowner_terminal_statesowner_action_statez)owner action is nonterminal or mismatchedz)data/owner-actions/draft-generations.jsonzgeneration lineage mismatchrJ   	completedclaim_idgeneration_provider_receiptz+pending/unknown generation provider outcomezdata/owner-actions/drafts.jsonapprovedzdraft is not reconciledz.data/owner-actions/draft-generation-cards.jsonz!card reconciliation is not unique	publishedtokenzcard is pending or mismatchedz:data/onboarding/telegram-publication-outbox-v1/ledger.jsonztelegram-publication-outbox-v1recordsc              3     K   | ]A  }t        |t              r/|j                  d       dk7  xs |j                  d      d   k7   C yw)r   r   r   N)rk   rl   get)r   r   idss     r   r   z!lifecycle_gate.<locals>.<genexpr>  sK      
&!T" EE'Nk)UQUU<-@CDU-UU&s   AA
z$outbox/publication is not reconciledz=data/onboarding/telegram-publication-outbox-v1/emergency.jsonzemergency publication remains)rn   r   rk   r   r   rl   rb   strr   r\   nextiterr   r   )rA   rQ   rC   ledgerr   activeclaimsdraftregr   r   config
deliveriesdeliveryr   r   ownergenslatestdraftscardscardoutbox	emergencyr   s                           @r   lifecycle_gater  &  s    4UVFzz(??z

:H >?? 
##Aa155>X#= 	
#  
 6{aMNNJq	>1d#uuW~Q'B%CCuu]#uu()NOO   	q	AUU=!FEE"#Evt$v;!&)T*!9== J.%&9::q	i01!%%-.EIIn56C 	J1::%vay}}Y'(AJJ6uyy+,-;EFF
/
0C$Iy$'y>QQ<N+s>/BBy|	*+qzz9Q<I&e3Q<H%3GHH'(,,V4Drz455t]+F!/3LPV3V:;;tGHJ
:!BCCD**,-.Hx&<<!^3||./||L)STT(,,z23C
O9x||C !SX-;<< : 4IJNNxXFfd#tF|N8K7L'L6773~&'Eud#99WQ'>%??99)*!4K2LLuyy&'3|+<<uyy$%Z8FGGBCDT
s:''$s:/6C
O$899#j/"2&Fvt$::g+-::j!-zz78HII49:FVZ))#j/"&&x0J>#j/"&&~6#n:MM#j/"&&|4L8II455$HIE
5zQ>??U\\^$%D[(88J+88GJ/88L!S%66:;;4UVF

8 @@&**Y/6 
I&
 
 ABBMI }}Y2%:;;JKs   -]c                ^   t        |d      t        d      t        |d      }|j                  d      dk7  s|j                  d      dk7  rt        d      t	        | j
                        rt        d	      t        | j                        }|j                  d
      s|j                  d      st        d      t        j                  t        | j                        dd| j                  ddgddd      }|j                  dk7  s|j                  j                         g dk7  rt        d      y )Nzgateway.lockzgateway lock remainszgateway_state.jsongateway_statestoppedpidr   z!gateway state is not stopped pid0zprofile process remainss   ELFs   #!zinvalid systemctl executablez--usershowz'--property=ActiveState,SubState,MainPIDz--valueTF)capture_outputtextcheck)inactivedead0z%service is not inactive/dead MainPID0)rZ   r   rn   r   r   r   rD   	systemctlr   
subprocessrunr   service
returncodestdout
splitlines)rA   rQ   r   toolr   s        r   runtime_gater    s   
4 ,122$,-Eyy!Y.%))E2Ba2G>??455%DOOJ'4??5+A9::II5	
 	A 	||qAHH//15NNBCC Or   c                   t        | j                        }	 t        ||      }g }|D ]  }|t        ||      z  } t	        | ||      }|D ch c]  }|d   	 }}t        t        |d         |z
        }	|	rt        d|	       t        | |       |D ]:  }t        j                  |d   d      s|d   j                  d      s1t        d       t        |       }
| j                  D ci c]%  }t        |j                               t!        |      ' }}||t        |d       ||
|fS c c}w c c}w # t"        $ r t%        j&                  |        w xY w)	Nr_   required_evidence_filesz%missing required lifecycle evidence: z'data/.scheduled-delivery-attempt-*.lockzdata/customer-schedule-claims/z%claim/lease/attempt authority remainsc                    | d   S )Nr_   r   )r   s    r   r   zpreflight.<locals>.<lambda>  s    AfIr   r   )rG   r   r   re   r  rc   r   r   r  r   r   r   r   other_profiler   r   r   rP   r4   r>   )rA   rC   rQ   ssrf   r+   r   r   r   missingpriorr?   others                r   	preflightr!    s]    QYYDD!_ADqM!D Qa($()Dq6D)Q89:UBC!FwiPQQQA""&	D6%%&FG"#JKK	 
 q!<=OOLOqQZZ\"KN2OLR*=>UEQQ * M 
s0   5D2 D(A*D2 %D2 (*D-D2 (
D2 2 Ec                \   t        | j                        }t        | j                        }t        j                  |      }t        j                  |      }d| j
                  | j                  | j                  | j                  | j                  t        t        t              j                               t        |      ddd
}||k7  rt        d      |j                  d      dk7  s<|j                  d      | j                  k7  s|j                  d	      | j                  k7  rt        d
      |S )Nz+task26-post-lifecycle-cleanup-permission-v2T(derive_unique_active_and_seal_in_archive)
r   approvalcandidate_digestwheel_sha256plan_sha256r   controller_sha256contract_sha256execute_allowedlifecycle_bindingzpermission seal/pins mismatchr   z)task26-post-lifecycle-cleanup-contract-v2r%  r&  zcontract/candidate mismatch)rD   contract
permissionr   ri   r$  	candidater&  r'  r   r    r   __file__r   r   r   )rA   crprrC   r?   expecteds         r   validate_inputsr3    s    	qzz	"B	q||	$B

2A

2A?JJKK}}JJ h!:!:!<=r7GH 	H}:;;	hFF55#$355 ANN2899Hr   c                   t        | |      \  }}||z  }|j                  j                  ddd       t        j                  |j                  t        j
                  t        j                  z  t        z        }	 t        j                  ||j                  ||       t        j                  |       t        j                  |       y # t        j                  |       t        j                  |       w xY w)NTr2   rp   
src_dir_fd
dst_dir_fd)rV   ru   rv   r4   r5   r6   rF   r7   renamer   r>   )rQ   rR   destr?   rU   qr   s          r   mover;    s    T3DAqs
AHHNN4$UN;
"++6>?A
		!QVVa8

 	
s   :#C ,C4c                   t        |      D ]  }||z  }|j                         st        | |      \  }}t        j                  |j
                  t        j                  t        j                  z  t        z        }	 t        j                  |j                  |||       t        j                  |       t        j                  |        y # t        j                  |       t        j                  |       w xY w)Nr5  )reversedr   rV   r4   r5   ru   r6   rF   r7   r8  r   r>   )rQ   movedr9  rR   srcr?   rU   r   s           r   rollbackr@    s    Sjzz|s#1GGCJJbnn <u DE	IIchhaA>HHQKHHQK  HHQKHHQKs   ;#C,C7c                P   t        | |      \  }}}}}}| j                  d| j                   z  }| j                  | j                  z  }	|j                         s|	j                         r t	        j
                  |       t        d      |j                  dd       |dz  }
|
j                  d       d}g }	 |D ]?  }t        ||d	         }t        |
|d	   z  |       t        |      |d
   k7  s6t        d       d| j                  | j                  | j                  | j                  | j                  |dd|||ddd}t        t        |            |d<   t        |dz  t        |             | j                   rt        d      t	        j"                  ||	       d}|	dz  }|j                  d       	 |D ]   }t%        |||       |j'                  |       " |D ]  }t)        ||      t        d|        | j*                  D ci c]%  }t-        |j/                               t1        |      ' c}|k7  rt        d      	 ddd| j                  t        t        |            dd|dd	}t        |	dz  t        |             |t	        j
                  |       |s'|j                         rt7        j8                  |       S S S c c}w # t2        $ r t5        |||        w xY w# t	        j
                  |       |s'|j                         rt7        j8                  |       w w w xY w)Nr   zarchive id existsTr2   )rq   ra   payload)ra   Fr_   r   zarchive copy mismatch(task26-post-lifecycle-cleanup-archive-v2zBpayload/data/onboarding/telegram-customer-bootstrap-v1/ledger.json)r   r   r%  r&  r'  r$  active_lifecycleactive_ledger_pathactive_ledger_byte_for_byteentriesr   other_profiles_pre_sha256archive_committed_before_clearrestore_or_prepopulateevidence_digestr   zinjected archive commit failurezcleared-originalszclear mismatch: zother profile changedz(task26-post-lifecycle-cleanup-receipt-v2PASSexecutezHafter archive commit, all live renames roll back before terminal receipt)	r   r   ra   r   manifest_sha256rI  post_cleanup_emptyrD  rollback_boundaryreceipt.json)r!  r   r   r   r4   r>   r   rv   r\   r   r    r.  r&  r'  r$  r   test_fail_before_archive_commitr8  r;  r   rZ   r  r   r   r   rP   r@  shutilrmtree)rA   rC   rQ   r  rf   r   r  r   pendingfinalrB  	committedr>  rowr   manifest
quarantiner+   r?   receipts                       r   rM  rM  +  s   (1!Q%D"dCnn188*55GNNQXX%E~~5<<>
.//MM$UM+	!GMMuMIE:#CD#f+.C7S[(#.3x3x=("#:;;	  Ahh !NN==

 #"f+/#)..2&+
  '*%/&:"#w(%/:,,@AA
		'5!	00
e$	T1j)Q  tQ<+&)9!'=>>  <=??K?aAJJL!;q>1?KuT"#:;; U Ahh"5?3.2"& #!k

 	u~%uW~6
W^^-MM'" .y) L 	T5*-	" 	W^^-MM'" .ysE   87K% 0CK% 56K
 ,K
 	*K3K
 AK% K
 
K""K% %A L%c                v   | j                   xs | j                  | j                  z  }t        |dz        }t	        j
                  |      }t	        j
                  t        |dz              }|j                  d      dk7  s|j                  d      dk7  rt        d      |d   }t        |      }|j                  d       |t        t        |            k7  s|j                  d	      t        |      k7  rt        d
      |d   D ]C  }t        |dz  |d   z        }	t        |	      |d   k7  st        |	      |d   k7  s:t        d       t        | j                        }
	 t        |
|      rt        d      	 t!        j"                  |
       dddt%        |      |d   dS # t!        j"                  |
       w xY w)Nr   rQ  r   rC  r   rL  zunknown archive/receipt schemarK  rN  zarchive seal mismatchrG  rB  r_   r`   r   zpayload mismatchzlive cleanup scope is not emptyz-task26-post-lifecycle-cleanup-verification-v2verifyrD  )r   r   ra   archiverD  )r^  r   r   rD   r   ri   r   r   rl   popr    r   rb   rG   r   r   r4   r>   r   )rA   rC   r^  mrawmr[  claimedr   rX  r   rQ   s              r   r]  r]  t  s   ii41>>AHH4G?23D

4Ajjw'?@AG	hEE;;x F*;<<!"GQAEE
#eAh-7;;/@#ASY#N233|Gi/#f+=>s8s6{"c#h#h-&?122  QYYD$?@AA  	Aw<01  	s    F! !F8c                    t        j                         } | j                  dg d       | j                  dt        d       | j                  dt        dg 	       | j                  d
t        d       | j                  dt               | j                  dt        d       | j                  dt        d       | j                  dd       | j                  dd       | j                  dd       | j                  dd       | j                  dd       | j                  dd       | j                  dt        t        d             | j                  dd       | j                  ddt         j                         | S )Nra   )dry-runrM  r]  )choicesz	--profileT)typerequiredz--other-profiler   )rf  actiondefaultz--archive-rootz	--archive)rf  z
--contractz--permissionz--candidate)rg  z--wheel-sha256z--plan-sha256z
--approvalz
--actor-idz--run-idz--systemctlz/usr/bin/systemctl)rf  ri  z	--servicez$hermes-gateway-dualcoachtest.service)ri  z!--test-fail-before-archive-commit
store_true)rh  help)argparseArgumentParseradd_argumentr   SUPPRESS)r?   s    r   parserrp    s>   !ANN6#CNDNN;TDN9NN$4"NMNN#$N>NN;TN*NN<dTN:NN>tN<NN=4N0NN#dN3NN?TN2NN<$N/NN<$N/NN:N-NN=tT:N5ONPNN;(NNONN+LxGXGX   Hr   c            
     6   t               j                         } 	 t        |       }| j                  dk(  rt	        | |      }nY| j                  dk(  rt        | |      }n=t        | |      \  }}}}}}t        j                  |       dddd||t        |      ||d	}t        j                  j                  j                  t        |             y# t        t         t"        t$        t&        f$ r-}	t        j(                  j                  d|	 d	       Y d }	~	y
d }	~	ww xY w)NrM  r]  z(task26-post-lifecycle-cleanup-dry-run-v2rL  rd  r   )	r   r   ra   	mutationsrD  r   entry_countr   other_profiles_sha256zFAIL: r      )rp  
parse_argsr3  ra   rM  r]  r!  r4   r>   rb   sysr  bufferrz   r   r   r   
ValueErrorKeyError	TypeErrorstderr)
rA   rC   r   rQ   r  rf   r   r  r   rm   s
             r   mainr}    s    AA66Y1AVVxq!A09!Q-D"dCHHTND !$'"4y"').
A 	

a)':xC 

6!B(s   B2C D+#DD__main__)r   r   returnbytes)r   r  r  r   )r+   zos.stat_resultr  ztuple[int, ...])r?   r   r  r  )r?   r   r  r   )rQ   r   rR   r   r  ztuple[int, str])rQ   r   rR   r   r  zos.stat_result | None)rQ   r   rR   r   r  r  )rQ   r   rR   r   r  zlist[dict[str, Any]])rQ   r   rR   r   r  dict[str, Any])r?   r   r   r  r  None)r?   r   r  r   )rQ   r   rC   r  r  	list[str])rA   argparse.Namespacer  zlist[dict[str, str]])r   r   r  z	list[int])rA   r  rQ   r   rC   r  r  zdict[str, str])rA   r  rQ   r   r  r  )rA   r  rC   r  r  zatuple[int, list[str], list[dict[str, Any]], dict[str, str], list[dict[str, str]], dict[str, str]])rA   r  r  r  )rQ   r   rR   r   r9  r   r  r  )rQ   r   r>  r  r9  r   r  r  )rA   r  rC   r  r  r  )r  zargparse.ArgumentParser)r  r   )1__doc__
__future__r   rl  r   r   r   r4   rS  r9   r  rw  rw   pathlibr   typingr   	O_CLOEXECgetattrr7   RuntimeErrorr   r   r    r,   rD   rG   rV   rZ   r\   re   rn   r   r   r   r   r   r  r  r!  r3  r;  r@  rM  r]  rp  r}  r	   
SystemExitr   r   r   <module>r     s2   W "     	    
   
wr<33	< 	R+*,2:,)(6!HMM!$M)7MM`D8  ,  F8	F#RD.: z
TV
 r   