
    |xj%                       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	m
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 e
d      Zd	 Zdd
ZddZdddZddZej6                  j9                  dddg      d d       Zej6                  j9                  dg d      d!d       Zd"dZd#dZ d#dZ!d$dZ"d"dZ#d"dZ$y)%    )annotationsN)Path)SimpleNamespacezinvite_harness_v2.pyzpermission-seal-v2.jsonz9/home/cube/projects/richard/hermes-agent/.venv/bin/pythonz`/home/cube/.hermes/profiles/dualcoachtest/data/profile-reset-archives/task26-live-reset-2e0894eac                     t         j                  j                  dt              } | r| j                  sJ t         j                  j                  |       }| j                  j                  |       |S )Ninvite_harness_v2)	importlibutilspec_from_file_locationHARNESSloadermodule_from_specexec_module)specmodules     S.omo/evidence/task26/task26-invite-harness-st_01a0056a-v2/test_invite_harness_v2.pyload_harnessr      sS    >>112EwODDKK^^,,T2FKKF#M    c                   g }t        d | j                  d      D              D ]s  }|j                  |j                  |       j	                         j                         dz   t        j                  |j                               j                         z          u t        j                  dj                  |            j                         S )Nc              3  B   K   | ]  }|j                         s|  y wN)is_file.0items     r   	<genexpr>zsha_tree.<locals>.<genexpr>   s     J4<<>ts   *       
)sortedrglobappendrelative_toas_posixencodehashlibsha256
read_bytesdigestjoin	hexdigest)rootrowspaths      r   sha_treer.      s    DJ

3JJD$$T*335<<>FX\XgXgXiIjIqIqIsst K>>%**T*+5577r   c                *   | dz  }|dz  }|j                  dd       |dz  }|j                  dd       dD ]6  }t        j                  t        |z  ||z         ||z  j	                  d       8 |j	                  d       |j	                  d       |S )	NprofiledataT  parentsmodez1profile-reset-archives/task26-live-reset-2e0894ea)zmanifest.jsonreceipt.json  )mkdirshutilcopyfileRESETchmod)tmp_pathr0   r1   archivenames        r   post_reset_profiler@   $   s    "GVDJJt%J(HHGMM$UM+1gn5	4u% 2 MM%JJuNr   c                    |dddddddg dd	d

}| j                  t        j                  |             | j                  d       | S )NzTask26 Synthetic Customerz
2026-08-16z08:00r      i     )	breakfastlunchdinnerzsynthetic rehearsal)
customer_keydisplay_name	starts_on
daily_timeweekly_weekdaymonthly_daycalories_kcal	protein_gmealsprimary_goalr7   )
write_textjsondumpsr<   )r-   keyvalues      r   draftrV   2   sO    3!1-E 	OODJJu%&JJuKr   c            	         t        j                  t        t              dt        t              g| dddi t
        j                  ddi      S )N-BTFPYTHONDONTWRITEBYTECODE1)textcapture_outputcheckenv)
subprocessrunstrVENV_PYTHONr   osenviron)argss    r   r`   r`   D   sF    >>	[	4W55$e:rzz:4c: r   r5   dry-runverifyc                   t        |       }t        |      }| | 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	k(  sJ |d
   du sJ |d   j                  d      sJ |d   j                  d      sJ |d   dk(  sJ t        |      |k(  sJ |dz  j                         rJ y )N.json	--profile--permission	--receiptr   statusPASSbaselineRESET_BOUND_LEDGER_ABSENTledger_presentFreset_manifest_sha2567ef0eb8freset_evidence_digestd2879b12	mutationsdata/onboarding)r@   r.   r`   ra   
PERMISSION
returncodestderrrR   loads	read_text
startswithexists)r=   r5   r0   beforereceiptresultrU   s          r   3test_missing_ledger_is_canonical_read_only_baseliner   L   s/    *GgFD6'G{CL.#j/S^`cdk`lmF!06==0!JJw((*+E?f$$$ ;;;;!"e+++()44Z@@@()44Z@@@"""G&&&++335555r   attack)unknown-parentunknown-filesymlink
wrong-modewrong-schemazunexpected-siblingc                   t        |       }|dz  }|dz  }|dk(  r|j                  d       n|dk(  r;|j                  dd       |d	z  }|j                  d
       |j                  d       n|dk(  r|j	                  |dz  d       no|dk(  r|j                  d       nW|dk(  r;|j                  dd       |dz  }|j                  d       |j                  d       n|dz  }|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 )Nrw   ztelegram-customer-bootstrap-v1r   r2   r5   r   Tr3   unknown   xr7   r   zdata/profile-reset-archives)target_is_directoryr   i  r   ledger.jsonz{}
	customersrf   rj   rk   rl   ri      rm   FAIL)r@   r8   write_bytesr<   
symlink_torQ   r`   ra   rx   ry   rR   r{   r|   )r=   r   r0   
onboarding	bootstrappr   s          r   8test_absent_baseline_rejects_unclean_or_unsafe_authorityr   ^   s{   
 !*G,,J==I!!e$	>	!51	!	d		9	g(EE[_`	<	e$	>	!51%	V	k!	UKW~s:c(xu-="=>@F!!!::xVHE"22==?@JfTTTr   c                |   t        |       }| dz  }| dz  }t        ddt        |      dt        t              dt        t	        | dz              dt        |      d	t        |      d
t        |             }|j
                  dk(  sJ |j                         t        j                  |j                               }|dz  }t        j                  |j                               }|d   dk(  s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 t        |d         dk(  sJ |d   d   d   dk(  sJ |j                  }|dz  j                         j                  dz  dk(  sJ |j                         j                  dz  dk(  sJ |j                         j                  dz  d k(  sJ |d!z  j                         j                  dz  d k(  sJ t        d" |j                         D              d#d!hk(  sJ |j                         j                  dz  d k(  sJ d$|j                         vsJ y )%Nhandoff.jsonzprepared.jsonpreparerj   rk   z--draft
draft.jsonz	--handoffrl   z--evidence-rootr   :data/onboarding/telegram-customer-bootstrap-v1/ledger.jsonbaseline_beforerp   
watch_rootr1   %event_subscription_before_initializerTonboarding_create_event_countrB   !candidate_initializer_invocationsprepare_invocations1final_ledger_publications_expected_from_candidater   sessionsstatePREPAREDrw   i  i  r2   r7   zledger.lockc              3  4   K   | ]  }|j                     y wr   )r?   r   s     r   r   zYtest_prepare_candidate_initializes_absent_tree_after_subscription_once.<locals>.<genexpr>   s     5_Ttyy_s   r   rc1_)r@   r`   ra   rx   rV   ry   rz   rR   r{   r|   lenparentstatst_modesetiterdir)	r=   r0   handoffr   r   rU   ledger_pathledgerr   s	            r   Ftest_prepare_candidate_initializes_absent_tree_after_subscription_oncer      sy    *G'G(G;Gnc*o3uX456S\S\#4c(mF
 !06==0!JJw((*+EXXKZZ--/0F"#'BBBB&(((89TAAA01Q66645:::&'1,,,DEJJJvj!"a'''*a )Z777E''--/77%?5HHH::<%'5000%%-666M!'')11E9UBBB5U]]_55-9WWWW<<>!!E)U222**,,,,r   c                   t               }t        |       |j                  } G fdd|      }|j                  |d|       t	        t        | dz        | dz  | dz  d       }t        j                  |j                  d	      5  |j                  |       d d d        |j                  j                         rJ d
z  j                         rJ y # 1 sw Y   ;xY w)Nc                  $     e Zd Zd fdZ xZS )Jtest_prepare_rejects_race_creation_after_subscription.<locals>.RacingWatchc                N    dz  j                  d       t        | 	  |       y )Nrw   r2   r   )r8   super__init__)self	directory	__class__r0   s     r   r   zStest_prepare_rejects_race_creation_after_subscription.<locals>.RacingWatch.__init__   s'    ((//U/;GY'r   )r   r   returnNone)__name__
__module____qualname__r   __classcell__)r   r0   s   @r   RacingWatchr      s    	( 	(r   r   Inotifyr   r   r6   r0   rV   r   r   evidence_rootracematchr   )r   r@   r   setattrr   rV   pytestraisesHarnessErrorr   r   r~   )r=   monkeypatchr   realr   re   r0   s         @r   5test_prepare_rejects_race_creation_after_subscriptionr      s    ^F *G>>D(d ( 	;7uX%<=xR`G`>)D 
v**&	9t 
:||""$$$VV^^```` 
:	9s   CCc                r   t               }t        |       } G d d      }|j                  |d|       t        |t	        | dz        | dz  | dz  d       }t        j                  |j                  d	      5  |j                  |       d d d        |j                  j                         rJ y # 1 sw Y   &xY w)
Nc                  $    e Zd ZddZddZddZy)Ftest_prepare_rejects_duplicate_creation_events.<locals>.DuplicateWatchc                     y r    )r   
_directorys     r   r   zOtest_prepare_rejects_duplicate_creation_events.<locals>.DuplicateWatch.__init__   s    dr   c                     y r   r   )r   s    r   closezLtest_prepare_rejects_duplicate_creation_events.<locals>.DuplicateWatch.close   s    r   c                     y)Nr   r   )r   _name_timeouts      r   await_name_countzWtest_prepare_rejects_duplicate_creation_events.<locals>.DuplicateWatch.await_name_count   s    QRr   N)r   r   r   r   r   r   )r   bytesr   floatr   int)r   r   r   r   r   r   r   r   r   DuplicateWatchr      s    :%Rr   r   r   r   r   r6   r   zexactly oner   )r   r@   r   r   rV   r   r   r   r   r   r~   )r=   r   r   r0   r   re   s         r   .test_prepare_rejects_duplicate_creation_eventsr      s    ^F *GS S
 	>:uX%<=xR`G`>)D 
v**-	@t 
A||""$$$$ 
A	@s   6B--B6c                    t               } | j                         }|d   dk(  sJ |d   | j                  k(  sJ | j                         j	                         }d|v sJ d|v sJ t        d      j                         }d|v sJ d|v sJ y )	N#candidate_absent_ledger_initializerrn   initializer_source_sha256z=self.state_dir.mkdir(mode=0o700, parents=True, exist_ok=True)z.else:
                self._write_unlocked(())zZ/home/cube/projects/richard/hermes-agent/tests/gateway/test_telegram_customer_bootstrap.pyz"state_dir = tmp_path / "bootstrap"z%RoomBootstrapStore(
        state_dir)r   loaded_byte_proofMODULE_SHA256wheel_module_bytesdecoder   r|   )r   proofsourceupstreams       r   Ctest_candidate_source_and_upstream_test_prove_supported_initializerr      s    ^F$$&E676AAA,-1E1EEEE&&(//1FJfTTT<FFFpq{{}H1X===3x???r   c                J   t        |       }|dz  }|j                  |j                         dz          t        ddt	        |      dt	        t
              dt	        | dz              }|j                  dk(  sJ d	t        j                  | dz  j                               d
   v sJ y )NzDdata/profile-reset-archives/task26-live-reset-2e0894ea/manifest.json    rg   rj   rk   rl   zverify.jsonr   zreset manifestblocker)
r@   r   r'   r`   ra   rx   ry   rR   r{   r|   )r=   r0   manifestr   s       r   %test_reset_binding_drift_fails_closedr      s     *G__H,,.56;Gnc*oc(]":;=F!!!tzz8m+C*N*N*PQR[\\\\r   c                B   | dz  }t        j                  t        t              dt        t        dz        t        |      gddd      }|j
                  dk(  sJ |j                         t        j                  |j                               }|d   d	k(  sJ |d
   dk(  sJ y )Nzindependent.jsonrX   zindependent_verify_v2.pyTF)r[   r\   r]   r   rm   rn   profile_mutations)
r_   r`   ra   rb   HEREry   rz   rR   r{   r|   )r=   outputr   rU   s       r   ;test_independent_verifier_passes_disposable_read_only_modesr      s    **F^^	[	4T,F%F!GVU$eF !06==0!JJv'')*E?f$$$$%***r   )r+   r   r   ra   )r=   r   r   r   )task26_same_actor_v2)r-   r   rT   ra   r   r   )re   ra   r   z subprocess.CompletedProcess[str])r=   r   r5   ra   r   r   )r=   r   r   ra   r   r   )r=   r   r   r   )r=   r   r   zpytest.MonkeyPatchr   r   r   )%
__future__r   r%   importlib.utilr   rR   rc   r9   r_   pathlibr   typesr   r   __file__resolver   r   r   rx   rb   r;   r   r.   r@   rV   r`   markparametrizer   r   r   r   r   r   r   r   r   r   r   <module>r      s    "    	    ! H~&&
'
'--
NOop8$ )X!676 86" eU	U:-@a,%&
@]	+r   