
    j                       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mZ d dl	Z	 ee
      j                         j                  Zedz  Zedz  Zedz  Z ed      Z ed      Zdd	Zdd
ZddZe	j,                  j/                  dddg      dd       Ze	j,                  j/                  dg d      dd       ZddZddZddZy)    )annotationsN)Pathzinvite_harness_v3.pyzpermission-seal-v3.jsonz-task26-live-2e-r2-customer-draft.private.jsonz9/home/cube/projects/richard/hermes-agent/.venv/bin/pythonz)/home/cube/.hermes/profiles/dualcoachtestc                    | d   | d   d}t        j                  |ddd      j                         }t        j                  |      j                         | d<   y )	Nschemasessions)r   r   FT,:)ensure_ascii	sort_keys
separatorsdigest)jsondumpsencodehashlibsha256	hexdigest)valuepayloadraws      S.omo/evidence/task26/task26-invite-harness-st_01a0056a-v3/test_invite_harness_v3.pycanonical_ledgerr      sM    xeJ6GHG
**W5DZ
X
_
_
aCnnS)335E(O    c                B   | dz  }d}|D ]U  }t         |z  }||z  }|j                  j                  ddd       t        j                  ||       |j                  d       W ||dz  |dz  |d	z  |d
z  fD ]  }|j                  d        |dz  j                  d       |S )Nprofile)customers/registry.json:data/onboarding/telegram-customer-bootstrap-v1/ledger.jsonz:data/onboarding/telegram-customer-bootstrap-v1/ledger.lockz-data/owner-actions/draft-deliveries.json.lockzgateway.lockzgateway_state.jsonzDdata/profile-reset-archives/task26-live-reset-2e0894ea/manifest.jsonzCdata/profile-reset-archives/task26-live-reset-2e0894ea/receipt.jsonTi  )parentsmodeexist_ok  data	customersz.data/onboarding/telegram-customer-bootstrap-v1zdata/owner-actionszdata/onboardingi  )LIVEparentmkdirshutilcopyfilechmod)tmp_pathr   pathsrelativesourcetargetpaths          r   fixturer1      s    "G	E 8#DutD'U  'F*Gk,AKK//1 	

51   ''.Nr   c            	         t        j                  t        t              dt        t              g| dddi t
        j                  ddi      S )Nz-BTFPYTHONDONTWRITEBYTECODE1)textcapture_outputcheckenv)
subprocessrunstrPYTHONHARNESSosenviron)argss    r   r:   r:   4   sE    >>	VdCL040tDGBJJG(A3G r   r    dry-runverifyc                   t        |       }|dz  }t        j                  |j                               j	                         }| | dz  }t        |dt        |      dt        t              dt        |            }|j                  dk(  sJ |j                         t        j                  |j                               }|d   dk(  sJ |d	   d
u sJ |d   dk(  sJ |d   dk(  sJ |d   dk(  sJ |d   dk(  sJ |d   dk(  sJ |d   dk(  sJ t        j                  |j                               j	                         |k(  sJ y )Nr   z.json	--profile--permission	--receiptr   statusPASS(ready_for_exactly_one_replacement_inviteTprior_session_count   prior_stateEXPIREDprepared_session_countaccepted_claim_countregistry_customer_count	mutations)r1   r   r   
read_bytesr   r:   r;   
PERMISSION
returncodestderrr   loads	read_text)r+   r    r   ledgerbeforereceiptresultr   s           r   -test_exact_expired_lineage_is_read_only_readyr\   ;   se   hGSSF^^F--/0::<FD6'G{CL.#j/c'l,F!06==0!JJw((*+E?f$$$;<DDD&'1,,,9,,,)*a///'(A---*+q000""">>&++-.88:fDDDr   attack)zerotwopreparedclaimwrong-idcustomerc                   t        |       }|dz  }t        j                  |j                               }|d   d   }|dk(  rg |d<   n|dk(  r4|d   j	                  t        |             d|d   d   d<   d	|d   d   d
<   n|dk(  rd|d<   n~|dk(  r	ddig|d<   np|dk(  rd|d<   ne|dz  }t        j                  |j                               }ddig|d<   |j                  t        j                  |             |j                  d       |dk7  rCt        |       |j                  t        j                  |dd             |j                  d       t        ddt        |      dt        t              dt        | dz              }|j                  d k(  sJ t        j                  | dz  j                               d!   d"k(  sJ y )#Nr   r   r   r^   r_   cb_0000000000000000000000rK   
session_id@0000000000000000000000000000000000000000000000000000000000000000sid_hashr`   PREPAREDstatera   rolerc   role_claimsrb   r   customer_keyxr$   r"   Tr   )r   r   rA   rD   rE   rF   zreceipt.json   rG   FAIL)r1   r   rV   rW   appenddict
write_textr   r*   r   r:   r;   rS   rT   )	r+   r]   r   ledger_pathrX   sessionregistryr   r[   s	            r   ,test_rejects_wrong_lineage_or_live_authorityrw   P   s   hGXXKZZ--/0FZ #Gz	5z!!$w-0.Iz1l+,4z1j)	:	%	7	#):"6!7	:	 ;66

8--/0-s34kDJJu-.u tzz&DZXY% KW~s:c(^";<>F!!!::x.0;;=>xHFRRRr   c                2   t        |       }| dz  }t        j                  t        j	                               }d|d<   |j                  t        j                  |             |j                  d       t        ddt        |      dt        t              dt        |      d	t        | d
z        dt        | dz              }|j                  dk(  sJ d|j                  v sJ t        j                  |dz  j	                               }t        |d         dk(  sJ y )Nz
draft.jsonsome_other_new_keyrm   r"   preparerD   rE   --draft	--handoffhandoff.jsonrF   prepared.jsonro   zreplacement draftr   r   rK   )r1   r   rV   DRAFTrW   rs   r   r*   r:   r;   rS   rT   rU   len)r+   r   alteredr   r[   rX   s         r   3test_only_hard_pinned_replacement_draft_is_acceptedr   r   s    hG%GJJu()E0E.tzz%()MM%;Gnc*o3w<c(^2K.LSO34F
 !!!&--///ZZ#__jjlmFvj!"a'''r   c                V   t        |       }t        ddt        |      dt        t              dt        t              dt        | dz        dt        | dz        d	t        |             }|j
                  d
k(  sJ |j                         t        j                  | dz  j                               }t        j                  |dz  j                               }|d   dk(  sJ |d   du sJ t        |d         dk(  sJ |d   D cg c]  }|d   	 c}ddgk(  sJ |d   d   d   |d   d
   d   k7  sJ t        ddt        |      dt        t              dt        t              dt        | dz        dt        | dz              }|j
                  dk(  sJ | dz  j                         rJ y c c}w )Nrz   rD   rE   r{   r|   r}   rF   r~   z--evidence-rootr   r   replacement_prepare_invocationsrK   !event_subscription_before_prepareTr   ro   rj   rM   ri   rf   zthird-handoff.jsonz
third.json)r1   r:   r;   rS   r   rT   rU   r   rV   rW   r   exists)r+   r   r[   rZ   rX   itemthirds          r   2test_one_replacement_then_third_invite_is_rejectedr      s   hG;Gnc*o3u:{C>0I,JSO346GXF
 !06==0!jj(_4??ABGZZ#__jjlmF45:::674???vj!"a'''&,Z&89&8dDM&89i=TTTT*a .&2DQ2G2UUUU;Gnc*o3u:{C;O0O,PSL01E
 q   //779999 :s    F&c                 (   t        j                  t        j                               } | d   j	                  d      sJ | d   j	                  d      sJ | d   j	                  d      sJ | d   j	                  d      sJ | d	   d
k(  sJ | d   du sJ y )Nplan_sha256d816dbbd&replacement_authorization_event_sha2564a3551a9baseline_readiness_sha25616497e3bprior_expiry_receipt_sha256d906f1freplacement_maximumrK   third_invite_authorizedF)r   rV   rS   rW   
startswith)seals    r   3test_seal_binds_current_plan_approval_expiry_and_v6r      s    ::j**,-D))*55589DDZPPP+,77
CCC-.99)DDD%&!+++)*e333r   )r   zdict[str, object]returnNone)r+   r   r   r   )r@   r;   r   z subprocess.CompletedProcess[str])r+   r   r    r;   r   r   )r+   r   r]   r;   r   r   )r+   r   r   r   )r   r   )
__future__r   r   r   r>   r(   r9   pathlibr   pytest__file__resolver&   HEREr=   rS   r   r<   r%   r   r1   r:   markparametrizer\   rw   r   r   r    r   r   <module>r      s    "   	    H~&&
'
'--
>>	I	J7864 )X!67E 8E( #_`S aSB($:04r   