
    jE                       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
mZ d dlZ ee      j                         j                  Zedz  ZdZdZedfZej                  dz  d	z  Zd
 Zd Zd$dZd%dZd&d'dZd(dZd)dZd*dZ	 	 	 	 	 	 d+dZ	 	 	 	 	 	 d+dZej@                  jC                  dg d      d,d       Z"ej@                  jC                  dg d      d-d       Z#ej@                  jC                  dg d      d-d       Z$d*dZ%ej@                  jC                  dddg      d.d        Z&d*d!Z'd*d"Z(d*d#Z)y)/    )annotationsN)Pathz)task27_supplemental_cleanup_controller.pycb_mYUoMIsk_CRzSDKYpPE9dg
85279166390z:task26/task26-combined-v38-delivered-st_01a019d7/artifactsz$hermes_agent-0.17.0-py3-none-any.whlc                    t         j                  j                  dt              } | | j                  J t         j                  j                  |       }|t        j                  | j                  <   | j                  j                  |       |S )Ntask27_supplement)
	importlibutilspec_from_file_location
CONTROLLERloadermodule_from_specsysmodulesnameexec_module)specmodules     m/home/cube/projects/richard/traning coach/.omo/evidence/task27/test_task27_supplemental_cleanup_controller.pyloadr      sk    >>112EzRD 777^^,,T2F#CKK		KKF#M    c                P    t        j                  | ddd      j                         S )NT),:)ensure_ascii	sort_keys
separators)jsondumpsencode)values    r   	canonicalr#   $   s#    ::DDZfhr   c                    | j                   j                  ddd       | j                  t        |      dz          | j	                  d       y )NT  parentsexist_okmode   
  )parentmkdirwrite_bytesr#   chmod)pathr"   s     r   private_jsonr1   *   s?    KKdT>Yu%-.JJur   c           	        | dz  }|j                  dd       |dz  }|j                  d       |j                  d       |dz  }|j                  j                  ddd	       |j	                  d
       |j                  d       t
        j                  j                  dt        t                     t        j                  d      }t        j                  d      }t        |d      }t        |d      }ddd}d}	 ||      }
|
j                  t        d|t        d|	       |
j!                  t        dt"        dd       |
j%                  t        d|t        d|	d        ||dz        j'                  ddddt"        gd       |S ) NprofileTr%   )r'   r)   $.task27-supplemental-disposable-copyz$TASK27_SUPPLEMENTAL_DISPOSABLE_COPY
r+   zdata/.profile-authority.lockr&   )r)   r   zBgateway.platforms.telegram_nutrition_onboarding_publication_outboxz0gateway.platforms.telegram_staff_membership_gate"GatewayOnboardingPublicationOutboxMembershipJournal@aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
collecting)body_digeststate@bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbcustomer)
session_id
generationpayloadrouterolerender_identityr   i0  )r=   r>   chat_idtopic_id
message_id)r=   r>   r?   r@   rA   rB   rE   9data/onboarding/telegram-staff-membership-v1/events.jsonlsubscription_armedzepoch-1z2026-08-18T14:55:11+00:00@cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc)eventsubscription_epoch_idobserved_at_utcstaff_chat_inventory_sha256customer_user_ids)r-   
write_textr/   r,   touchr   r0   insertstrWHEELr
   import_modulegetattrclaimSESSIONROUTErecord_receiptUSERmark_committedappend)tmp_pathrootmarkerauthority_lockoutbox_modulemembership_moduleoutbox_typejournal_typer?   renderoutboxs              r   r3   r3   0   s   iDJJt%J(::F
=>
LL::Nt%He$HHOOAs5z"++LM "//: -)MNK,.ABL&>GFF
LL         JJf)%.:+3"&	
 Kr   c                Z    | |rdndz  }t        ||rdnd|rdnd|rdnd|rd	ndd
       |S )Nzactive.jsonzinactive.jsonactiveinactiverunningdead*   r      )active_state	sub_statemain_pidmatching_processes)r1   )r\   rg   r0   s      r   service_staterq   m   sC    }ODD(.HJ&,&$!'-!1		
 Kr   c                V    |dz  }| j                  ||t        |            }||d   |fS )Npermission.jsonservice_overridepermission_seal)dry_runrq   )r   r]   r\   r0   results        r   
permissionry   {   sA    ''D^^d]8%<  F )*F22r   c                    | j                  t        | j                  |      j                         D ci c]&  \  }}|| j	                  | j                  |            ( c}}            S c c}}w )N)	sha_bytesr#   mutation_pathsitemscompacttree_inventory)r   r]   keyr"   s       r   mutation_digestr      sp     #)"7"7"="C"C"E"EJC V^^F$9$9%$@AA"E	
 s   +A*c                @   t               }t        |       }t        |||       \  }}}|d   }t        |d         h dk(  sJ |d   d   |j                  k(  sJ |d   |j                         k(  sJ t        d |d   D              sJ |d   |j                         k(  sJ y )	Npermission_payloadexact_state>   re   
membershipsupplemental_archivecleanup_receiptsha256proposed_mutationsc              3  ,   K   | ]  }|d    dk(    yw)r0   zE.omo/evidence/task27/.task27-supplemental-live-cleanup-receipt.json.*N ).0mutations     r   	<genexpr>z.test_dry_run_binds_contract.<locals>.<genexpr>   s+       6H 	?	

 6s   tools)r   r3   ry   setCLEANUP_RECEIPT_SHA256r   anytool_binding)r\   r   r]   _rx   r?   s         r   test_dry_run_binds_contractr      s    VF8DfdH5LAq&)*Gw}%& +   
 $%h/63P3PPPP'(F,E,E,GGGG    45    7v224444r   c                   t               }t        |      }|dz  }|dz  }| j                  |d|       | j                  |d|d       | j                  |d|d       |dz  }| j                  |d	|d       |j                  ||t	        |      
      }|d   dk(  sJ d|j                         d   t        |      |j                  |      |d   ddd}ddt        |      |j                  |j                  |j                  |j                  |j                  t        |j                        d|j                         dddddddddd	|d	}	t!        ||	       |j#                  d       t%        j&                  |j(                  d      5  |j+                  |||d   |t	        |      
       d d d        |dz  }
|j                  ||
|t	        |            }|d    }t-        |      }d |d!<   ||d    k(  sJ t/        j0                  t/        j2                  |            }|d    }d"|d#   d$<   |j5                  t7        |            |d<   |d%z  }t!        ||       t%        j&                  |j(                  d&      5  |j+                  |||d   ||t	        |             d d d        |j+                  ||
|d   ||t	        |            }|d   d'k(  sJ |d(   d)k(  sJ |d!   d*   |j                  |      k(  sJ t9        |d+   d,         d-z  }|j;                         sJ t/        j0                  |j=                               d   |d   k(  sJ y # 1 sw Y   xY w# 1 sw Y   xY w).Nzauthorization.jsonzlive-receipt.jsonLIVELIVE_AUTHORIZATIONFraisingLIVE_OUTPUTzpreview.jsonLIVE_PREVIEWrt   statusAWAITING_AUTHORIZATIONz2026-08-20T03:56:29Zcontroller_sha256rv   ztest-sessionu   ㅇㅇ)approved_atapproved_controller_sha256approved_dry_run_pathapproved_dry_run_sha256approved_permission_sealthread_session_iduser_messagez1task27-supplemental-live-cleanup-authorization-v1APPROVED_ONCE)customer_keyr=   user_idr@   noner   T)	
activationcommitcustomer_deliveryexternal_network_actionsgateway_must_remain_stoppedprovider_actionspushreleasetelegram_actions)	schemar   targetcandidate_digestcleanup_receipt_sha256identityr   constraintsapproval   authorizationmatchzlive-permission.jsonlive_authorization_fileru   r   live_authorizationc   observedmembership_rowszforged-permission.jsonzapproved preview	COMMITTEDexecution_targetliver   archiver]   zauthorization-consumed.json)r   r3   setattrrw   rq   r   rQ   sha_file	CANDIDATEr   CUSTOMERrV   USER_IDlistrW   r   r1   r/   pytestraisesRefusalexecutedictr   loadsr    r{   r#   r   is_file	read_text)monkeypatchr\   r   r]   r   live_outputpreviewpreview_resultr   authorization_documentpermission_pathpermission_resultauthorized_payloadapproved_projectionforged_permissionforged_payloadforged_pathrx   consumptions                      r   0test_live_execution_requires_exact_authorizationr      s    VF8D33M00K- 4mUS{EJ'GG^^&x0 $ N
 (#'????-&,&9&9&;'
 "%W#)??7#;$23D$E+ 
#H F!d)",,"("?"?"OO ..~~&,,'	
 %779!&()+/ ! !

 14  67	v~~_	=,-*84 	 	
 
> !77O -&x0	 '  ++?@1204,-.1E"FFFF

4::.?#@A&';<N46N:01+1+;+;.!,'( 55K/0	v~~-?	@/0$1*84 	 	
 
A ^^+, -&x0  F ({***$%///&'1V__]5SSSSVIv&'*GG     ::k++-./@A+,  g 
>	=6 
A	@s   	#M:$MMM$c                F   t               }t        |      }|dz  }| j                  |d|       | j                  |d|d       t        j                  |j
                  d      5  |j                  ||dz  d	|d
z  |dz  t        |             d d d        y # 1 sw Y   y xY w)Nzexpected.jsonr   r   Fr   outputr   zunused-permission.json@0000000000000000000000000000000000000000000000000000000000000000zarbitrary.jsonzunused-authorization.jsonr   )r   r3   r   r   r   r   r   rq   )r   r\   r   r]   expected_outputs        r   *test_live_execution_refuses_unbound_outputr     s     VF8D0O-N	v~~X	6//''$,/J$J*84 	 	
 
7	6	6s   $*BB kind)foreign_sessionforeign_routemixed_membershipc                   t               }t        |       }|j                  d      rS|dz  }t        j                  |j                               }|dk(  rd|d   d   d<   nddg|d   d   d	<   t        ||       n|d
z  }t        j                  |j                               }t        dg|d<   |j                  d       t        j                  t        |            j                         |d<   |j                  t        |      dz          t        j                  |j                         5  |j#                  || dz  t%        |              d d d        y # 1 sw Y   y xY w)Nforeignz:data/onboarding/telegram-publication-outbox-v1/ledger.jsonr   recordsr   r=   999r   r@   rF   rM   
row_sha256r*   bad-permission.jsonrt   )r   r3   
startswithr   r   r   r1   rY   pophashlibr   r#   	hexdigestr.   r   r   r   rw   rq   )r\   r   r   r]   r0   documentrows          r   #test_rejects_foreign_or_mixed_stater   )  s3    VF8Dy!RR::dnn./$$3<HY"<0/4clHY"7+T8$QQjj)*$(%= #NN9S>:DDFL3%/0	v~~	&,,*84 	 	
 
'	&	&s   )!EEattack)hmacunknownsymlinkhardlinkr)   c                r   t               }t        |       }|dz  }|dz  }|dk(  r;t        j                  |j	                               }d|d   d   d<   t        ||       n|dk(  r(|d	z  }|j                  d
       |j                  d       nW|dk(  r"|j                          |j                  d       n0|dk(  rt        j                  ||dz         n|j                  d       t        j                  |j                        5  |j                  || dz  t!        |              d d d        y # 1 sw Y   y xY w)N.data/onboarding/telegram-publication-outbox-v1zledger.jsonr   r   r   r   receipt_integrityr   zunexpected.jsonz{}
r+   r   zemergency.jsonr   zledger-copy.json  r   rt   )r   r3   r   r   r   r1   rN   r/   unlink
symlink_tooslinkr   r   r   rw   rq   )r\   r   r   r]   re   ledgerr   r0   s           r   %test_rejects_unsafe_or_unknown_outboxr	  F  s    VF8DDDFm#F::f..016>A23VX&	9	))

5	9	*+	:	
!334U	v~~	&,,*84 	 	
 
'	&	&s   !D--D6)r   r   r   r)   	malformedc                    t               }t        |       }|dz  }|dz  }|dk(  r(|dz  }|j                  d       |j                  d       nn|dk(  r"|j	                          |j                  d       nG|d	k(  rt        j                  ||d
z         n(|dk(  r|j                  d       n|j                  d       t        j                  |j                        5  |j                  || dz  t        |              d d d        y # 1 sw Y   y xY w)N,data/onboarding/telegram-staff-membership-v1zevents.jsonlr   
unexpectedxr+   r   zevents.jsonl.lockr   copyr)   r  {r   rt   )r   r3   rN   r/   r  r  r  r  r   r   r   rw   rq   )r\   r   r   r]   r   eventsr0   s          r   test_rejects_unsafe_membershipr  e  s     VF8DFFJ.(FL(

5	9	-.	:	

V+,	6	U#	v~~	&,,*84 	 	
 
'	&	&s   !DDc           
        t               }t        |       }t        j                  |j                        5  |j                  || dz  t        | d             d d d        t        |||       \  }}}|dz  j                  d       t        j                  |j                  d      5  |j                  |||| dz  t        |              d d d        y # 1 sw Y   {xY w# 1 sw Y   y xY w)Nzactive-permission.jsonTrt   z4data/onboarding/telegram-publication-outbox-v1/.lockdriftr   receipt.json)
r   r3   r   r   r   rw   rq   ry   rN   r   r\   r   r]   r   sealr   s         r   +test_rejects_active_service_and_state_driftr    s    VF8D	v~~	&//*8T: 	 	
 
'  *&$AOT1	BBNN 
v~~W	5~%*84 	 	
 
6	5 
'	& 
6	5s   "C%#CCC&faultafter_archive_copyafter_prunec                Z   t               }t        |       }t        |||       \  }}}t        ||      }t	        j
                  t        |      5  |j                  |||| dz  |t        |              d d d        t        ||      |k(  sJ |dz  j                         rJ y # 1 sw Y   0xY w)Nr   r  )r  ru   z data/task27-supplemental-cleanup)
r   r3   ry   r   r   r   RuntimeErrorr   rq   exists)r\   r  r   r]   r   r  r   befores           r   test_fault_rollback_is_exactr     s    VF8D)&$AOT1VT*F	|5	1~%*84 	 	
 
2 64(F22299AACCCC 
2	1s   $B!!B*c           
        t               }t        |       }t        |||       \  }}}| dz  }|j                  ||||t	        |             }|d   dk(  sJ |d   d   dk(  sJ |dz  j                         rJ |d	z  j                         rJ t        |d
   d         }t        j                  |j                         j                        dk(  sJ t        d |g|j                  d      D              sJ t        j                  |j                  d      5  |j                  ||||t	        |              d d d        y # 1 sw Y   y xY w)Nr  rt   r   r   terminalactive_target_matchesr   r  r  r   r]   i@  c              3  X   K   | ]"  }|j                         j                  d z    $ yw)   N)statst_mode)r   r0   s     r   r   z>test_success_is_frozen_terminal_and_one_use.<locals>.<genexpr>  s,      2D YY[  5()2s   (**zoutput already exists|reuser   )r   r3   ry   r   rq   r  r   r&  S_IMODEr'  allrglobr   r   r   )	r\   r   r]   r   r  r   r   rx   r   s	            r   +test_success_is_frozen_terminal_and_one_user,    sw   VF8D)&$AOT1&F^^&x0  F ({****56!;;;??fh   	==fh   6)$V,-G<<../5888 2w}}S12    
v~~-J	K*84 	 	
 
L	K	Ks    D??Ec           
     &   t               }t        |       }t        |||       \  }}}|dz  j                          t	        j
                  |j                  d      5  |j                  |||| dz  t        |              d d d        y # 1 sw Y   y xY w)Nr4   
disposabler   r  rt   )	r   r3   ry   r  r   r   r   r   rq   r  s         r   test_execute_is_disposable_onlyr/    s    VF8D)&$AOT1	22::<	v~~\	:~%*84 	 	
 
;	:	:s   #BBc                   t        |       }t        |       }| dz  }t        j                  t        j
                  t        t              ddt        |      dt        |      dt        |      g	dd      }|j                  dk(  sJ |j                         t        j                  |j                               d	   }t        j                  t        j
                  t        t              d
dt        |      dt        |      dddt        | dz        dt        |      gdd      }|j                  dk(  sJ d|j                  v sJ t        j                  t        j
                  t        t              d
dt        |      dt        |      d|dt        | dz        dt        |      gdd      }|j                  dk(  sJ |j                         y )Nrs   zdry-runz	--profilez--outputz--test-service-stateT)textcapture_outputr   rv   r   z--permission-filez--permission-sealr   zbad.json   zpermission seal mismatchz	good.json)r3   rq   
subprocessrunr   
executablerQ   r   
returncodestderrr   r   r   )r\   r]   r:   r   dryr  badgoods           r   test_cli_bad_seal_and_successr<    s   8D(#E!22O
..NN
OI "J
	
 C >>Q*

*::o//123DED
..NN
OI :%&"J	
 #C& >>Q%333>>NN
OI ;&'"J	
 #D& ??a,,r   )r0   r   returnNone)r\   r   r=  r   )F)r\   r   rg   boolr=  r   )r]   r   r\   r   )r]   r   r=  rQ   )r\   r   r=  r>  )r   zpytest.MonkeyPatchr\   r   r=  r>  )r\   r   r   rQ   r=  r>  )r\   r   r   rQ   r=  r>  )r\   r   r  rQ   r=  r>  )*
__future__r   r   r
   importlib.utilr   r  r&  r4  r   pathlibr   r   __file__resolver,   HEREr   rV   rY   rW   rR   r   r#   r1   r3   rq   ry   r   r   r   r   markparametrizer   r	  r  r  r   r,  r/  r<  r   r   r   <module>rH     s   "     	   
  H~&&??

%	sKKBC,- :z35.n#n/3n	nb
#
/3
	
& 
D

4 @

8 E

4
. #7"GHD ID$!
H
=-r   