Ë
    àúÝjUo  ã                   ó´   — d Z ddlZddlZddlZddlmZ d„ Z G d„ dej                  «      Z	 G d„ dej                  «      Z
ed	k(  r ej                  «        yy)
z]Unit-Tests des Profil-Builders (synthetischer Home-Baum, deterministisch, ohne Kaefig-Start).é    N)Úprofilesc                 óÔ   — t        j                  t         j                  j                  | «      d¬«       t	        | dd¬«      5 }|j                  d«       d d d «       y # 1 sw Y   y xY w)NT©Úexist_okÚwúutf-8©ÚencodingÚx)ÚosÚmakedirsÚpathÚdirnameÚopenÚwrite)r   Úfhs     ú>/home/aria/aria-v3-dev/python/tests/test_isolation_profiles.pyÚtouchr   	   sK   € Ü‡K�K”—‘—‘ Ó%°Õ5Ü	ˆd�C 'Ô	*ð ¨bØ
�‰�Œ÷÷ ñ ús   ÁAÁA'c                   óx   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zy)ÚSyntheticHomec                 ó¨  — t        j                  «       | _        t        j                  j                  | j                  j                  d«      | _        dD ]A  }t        j                  t        j                  j                  | j                  |«      d¬«       ŒC dD ]5  }t        t        j                  j                  | j                  |«      «       Œ7 y )NÚhome)	ú.sshz.claude/hooksz
.config/ghz.codexÚbrainz
projekte/xú.local/share/claudezrepo/srczrepo/node_modulesTr   )ú.envú
.env.bak.1ú.kadiv2-secretsúbrain/note.mdúprojekte/x/app.pyúprojekte/x/token.jsú	repo/.envzrepo/src/main.pyúrepo/src/creds.pemúrepo/node_modules/has-token.jsú.ssh/idú.claude/settings.jsonú.config/gh/hosts.ymlú.codex/auth.jsonú.local/share/claude/bin)
ÚtempfileÚTemporaryDirectoryÚ_tmpr   r   ÚjoinÚnameÚHr   r   )ÚselfÚdÚfs      r   ÚsetUpzSyntheticHome.setUp   s”   € Ü×/Ñ/Ó1ˆŒ	Ü—‘—‘˜dŸi™iŸn™n¨fÓ5ˆŒðJò 	@ˆAä�K‰KœŸ™Ÿ™ T§V¡V¨QÓ/¸$Ö?ð	@ðYò 	+ˆAô ”"—'‘'—,‘,˜tŸv™v qÓ)Õ*ñ		+ó    c                 ó8   — | j                   j                  «        y ©N©r,   Úcleanup©r0   s    r   ÚtearDownzSyntheticHome.tearDown   ó   € Ø�	‰	×ÑÕr4   c           	      ó¼   — t         j                  j                  | j                  j                  d«      }t        j                  ||dz   |dz   |dz   |dz   |dz   «      S ©NÚrunú/wsú/homeú/codex-homeú/authdirú/tmp©r   r   r-   r,   r.   ÚPÚRunDirs©r0   Úrrs     r   ÚdirszSyntheticHome.dirs   óP   € Ü�W‰W�\‰\˜$Ÿ)™)Ÿ.™.¨%Ó0ˆÜ�y‰y˜˜R %™Z¨¨g©°r¸MÑ7IÈ2ÐPZÉ?Ð\^ÐagÑ\gÓhÐhr4   c                 ó²  — t        j                  | j                  «      D �ch c],  }t        j                  j                  || j                  «      ’Œ. }}| j                  d|«       | j                  d|«       | j                  d|«       | j                  d|«       | j                  d|«       | j                  d|«       | j                  d|«       y c c}w )Nr   r   r   r"   r#   r!   r$   )rE   Úscan_secret_filesr/   r   r   ÚrelpathÚassertInÚassertNotIn)r0   ÚsÚsecs      r   Útest_scan_secret_namesz$SyntheticHome.test_scan_secret_names#   s§   € Ü34×3FÑ3FÀtÇvÁvÓ3NÖO¨aŒr�w‰w�‰˜q $§&¡&Õ)ÐOˆÐOØ�‰�f˜cÔ"Ø�‰�l CÔ(Ø�‰Ð'¨Ô-Ø�‰�k 3Ô'Ø�‰Ð*¨CÔ0à×ÑÐ.°Ô4à×ÑÐ9¸3Õ?ùò Ps   ¢1Cc                 óh  — t         j                  j                  | j                  |«      }|t	        |d   «      v ry|t	        |d   «      v ry|d   D ]+  }||k(  s#|j                  |t         j                  z   «      sŒ+ y |d   D ]+  }||k(  s#|j                  |t         j                  z   «      sŒ+ y y)NÚfile_rwÚfile_roÚrwÚroÚNONE)r   r   r-   r/   ÚsetÚ
startswithÚsep)r0   ÚcfgÚrelÚpr1   s        r   Ú_coveredzSyntheticHome._covered/   s©   € Ü�G‰G�L‰L˜Ÿ™ Ó%ˆØ”�C˜	‘NÓ#Ñ#ØØ”�C˜	‘NÓ#Ñ#ØØ�T‘ò 	ˆAØ�AŠv˜Ÿ™ a¬"¯&©&¡jÕ1Ùð	ð �T‘ò 	ˆAØ�AŠv˜Ÿ™ a¬"¯&©&¡jÕ1Ùð	ð r4   c                 óÒ  — t        j                  | j                  «       dddi| j                  dd¬«      }| j	                  | j                  |d«      d«       | j	                  | j                  |d	«      d«       | j	                  | j                  |d
«      d«       dD ]%  }| j                  | j                  ||«      d|«       Œ' | j                  | j                  |d«      d«       y )Nú/usr/bin/trueÚASé   © F©Ú	codex_binÚrlimitsÚ	home_rootÚ
exec_rootsÚprotect_startupr   ©rW   rU   r    r!   )r   r"   r#   r   r%   r&   r'   r(   rX   r)   )rE   Útools_profilerI   r/   rN   r_   ÚassertEqual©r0   r\   r]   s      r   Ú(test_tools_blocks_credentials_and_claudez6SyntheticHome.test_tools_blocks_credentials_and_claude=   sÎ   € ä�o‰o˜dŸi™i›k°_ÈtÐUVÈiØ(,¯©¸2ÈuôVˆð 	�‰�d—m‘m C¨Ó9Ð;LÔMØ�‰�d—m‘m CÐ)<Ó=Ð?PÔQØ�‰�d—m‘m CÐ)>Ó?ÐARÔSðdò 	CˆCà×Ñ˜TŸ]™]¨3°Ó4°f¸cÕBð	Cð 	×Ñ˜Ÿ™ sÐ,EÓFÈÕOr4   c                 óz  — dD ]¦  }t         j                  j                  | j                  |«      }t        j                  t         j                  j                  |«      d¬«       t         j                  j                  |«      rŒ�t        |d«      5 }|j                  d«       d d d «       Œ¨ t        j                  | j                  «       dddi| j                  d	d
¬«      }dD ]%  }| j                  | j                  ||«      d|«       Œ' | j                  t        j                  d«      «       y # 1 sw Y   �Œ7xY w)N)z.netrcz.npmrcz.pgpassz.pypircz.my.cnfz.bash_historyz.git-credentialsÚ
id_ed25519z.docker/config.jsonú.cargo/credentials.tomlz.aws/credentialsz.gnupg/secring.gpgTr   r   úCANARY
ra   rb   rc   rd   Fre   rX   zid_ed25519.pub)r   r   r-   r/   r   r   Úexistsr   r   rE   rl   rI   rm   r_   ÚassertFalseÚ_is_secret_name)r0   r]   ÚP_r   r\   s        r   Ú&test_extended_credential_names_blockedz4SyntheticHome.test_extended_credential_names_blockedL   s  € ðYò 	)ˆCô —‘—‘˜dŸf™f cÓ*ˆBÜ�K‰KœŸ™Ÿ™¨Ó+°dÕ;Ü—7‘7—>‘> "Õ%Ü˜"˜c“]ð ) bØ—H‘H˜ZÔ(÷)ð )ð	)ô �o‰o˜dŸi™i›k°_ÈtÐUVÈiØ(,¯©¸2ÈuôVˆðYò 	CˆCð ×Ñ˜TŸ]™]¨3°Ó4°f¸cÕBð	Cð
 	×Ñœ×*Ñ*Ð+;Ó<Õ=÷)ñ )ús   ÂD0Ä0D:	c                 óf  — t        t        j                  j                  | j                  d«      d«      5 }|j                  d«       d d d «       t        j                  | j                  «       dddi| j                  dd¬	«      }| j                  | j                  |d«      d
«       y # 1 sw Y   ŒaxY w)Nz
.gitconfigr   z[credential]
	helper = store
ra   rb   rc   rd   Fre   rU   )r   r   r   r-   r/   r   rE   rl   rI   rm   r_   )r0   r   r\   s      r   Ú-test_gitconfig_read_only_even_without_startupz;SyntheticHome.test_gitconfig_read_only_even_without_startup_   s‰   € Ü”"—'‘'—,‘,˜tŸv™v |Ó4°cÓ:ð 	9¸bØ�H‰HÐ7Ô8÷	9ä�o‰o˜dŸi™i›k°_ÈtÐUVÈiØ(,¯©¸2ÈuôVˆà×Ñ˜Ÿ™ s¨LÓ9¸9ÕE÷		9ð 	9ús   µB'Â'B0c                 ó$  — t        j                  t         j                  j                  | j                  d«      d¬«       t        t         j                  j                  | j                  dd«      d«      5 }|j                  d«       d d d «       dd l}|j                  t         j                  j                  | j                  d«      «       t        j                  t         j                  j                  | j                  d«      t         j                  j                  | j                  d«      «       t        j                  | j                  «      }| j                  t         j                  j                  | j                  d«      |«       t        j                  | j                  «       d	d
di| j                  dd¬«      }| j                  | j!                  |d«      d«       | j                  | j!                  |d«      d«       y # 1 sw Y   �Œ€xY w)NÚkeystoreTr   Úprivater   rs   r   r   ra   rb   rc   rd   Fre   zkeystore/privaterX   )r   r   r   r-   r/   r   r   ÚshutilÚrmtreeÚsymlinkrE   Úhard_credential_blocklistrN   rl   rI   rm   r_   )r0   r   Ú_shÚhardr\   s        r   Ú'test_symlinked_hard_block_covers_targetz5SyntheticHome.test_symlinked_hard_block_covers_targetf   sT  € ä
�‰”B—G‘G—L‘L §¡¨Ó4¸tÕDÜ”"—'‘'—,‘,˜tŸv™v z°9Ó=¸sÓCð 	!ÀrØ�H‰H�ZÔ ÷	!ó 	Ø�
‰
”2—7‘7—<‘< §¡¨Ó/Ô0Ü
�
‰
”2—7‘7—<‘< §¡¨
Ó3´R·W±W·\±\À$Ç&Á&È&Ó5QÔRÜ×*Ñ*¨4¯6©6Ó2ˆØ�‰”b—g‘g—l‘l 4§6¡6¨:Ó6¸Ô=Ü�o‰o˜dŸi™i›k°_ÈtÐUVÈiØ(,¯©¸2ÈuôVˆà×Ñ˜Ÿ™ sÐ,>Ó?ÀÔHØ×Ñ˜Ÿ™ s¨JÓ7¸Õ@÷	!ñ 	!ús   Á5HÈHc           
      óf  — t        j                  t         j                  j                  | j                  d«      d¬«       t        t         j                  j                  | j                  d«      d«      5 }|j                  d«       d d d «       t        j                  | j                  «       ddd	i| j                  t         j                  j                  | j                  d
«      fd¬«      }t         j                  j                  | j                  d«      }|d   |d   z   |d   z   D ]?  }| j                  ||k(  xs" |j                  |t         j                  z   «      d|› d�«       ŒA | j                  |t        |d   «      t        |d   «      z  t        |d   «      z  «       y # 1 sw Y   �Œ"xY w)Nz.local/share/appTr   z.local/share/app/.envr   rs   ra   rb   rc   ú.localFre   ÚrxrV   rW   zSecret unter exec-root durch z wieder erreichbarrT   rU   Úfile_x)r   r   r   r-   r/   r   r   rE   rl   rI   ru   rZ   r[   rO   rY   )r0   r   r\   Úsecretr1   s        r   Ú&test_exec_root_does_not_regrant_secretz4SyntheticHome.test_exec_root_does_not_regrant_secretv   s]  € ä
�‰”B—G‘G—L‘L §¡Ð);Ó<ÀtÕLÜ”"—'‘'—,‘,˜tŸv™vÐ'>Ó?ÀÓEð 	!ÈØ�H‰H�ZÔ ÷	!ä�o‰o˜dŸi™i›k°_ÈtÐUVÈiØ(,¯©¼B¿G¹G¿L¹LÈÏÉÐQYÓ<ZÐ;\Ø.3ô5ˆô —‘—‘˜dŸf™fÐ&=Ó>ˆØ�T‘˜S ™YÑ&¨¨T©Ñ2ò 	TˆAØ×Ñ˜V q™[ÒI¨F×,=Ñ,=¸aÄ"Ç&Á&¹jÓ,IØ<¸Q¸CÐ?QÐRõTð	Tð 	×Ñ˜¤ S¨¡^Ó!4´s¸3¸y¹>Ó7JÑ!JÌSÐQTÐU]ÑQ^ÓM_Ñ!_Õ`÷	!ñ 	!ús   Á4F&Æ&F0c           
      ó
  ‡‡	— t         j                  j                  | j                  d«      }t        j                  t         j                  j                  |d«      d¬«       dD ]F  }t        t         j                  j                  ||«      d«      5 }|j                  d«       d d d «       ŒH t         j                  j                  | j                  d«      }t        j                  |d¬«       t        t         j                  j                  |d	«      d«      5 }|j                  d
«       d d d «       t         j                  j                  |dd«      }t        j                  |d¬«       t        j                  ||dz   |dz   |dz   |dz   |dz   «      Š	‰	j                  ‰	j                  ‰	j                  ‰	j                  ‰	j                  fD ]  }t        j                  |d¬«       Œ t        ‰	j                  d«      5 }|j                  d«       d d d «       t        j                  ‰	dddi| j                  dd||¬«      Šˆfd„}dD ]8  }| j!                   |t         j                  j                  ||«      «      |«       Œ: | j!                   |t         j                  j                  |d	«      «      «       | j#                  t%        ˆ	fd„‰d   D «       «      «       y # 1 sw Y   �Œ…xY w# 1 sw Y   �ŒÄxY w# 1 sw Y   ŒêxY w)NÚstateÚkeysTr   )zbudget.jsonznonces.jsonzkeys/clearance.keyr   zx
Úv3repoz
gateway.pyzcode
z
codex-workr>   r?   r@   rA   rB   rC   z{}ra   rb   rc   rd   F)rf   rg   rh   ri   rj   Ú	state_dirÚ	repo_rootc                 ó€   •‡ — ‰ t        ‰d   «      t        ‰d   «      z  v ryt        ˆ fd„‰d   ‰d   z   D «       «      S )NrT   rU   Tc              3   óp   •K  — | ]-  }‰|k(  xs" ‰j                  |t        j                  z   «      –— Œ/ y ­wr6   ©rZ   r   r[   ©Ú.0r1   r^   s     €r   ú	<genexpr>z^SyntheticHome.test_state_dir_and_repo_blocked_workspace_rw.<locals>.covered.<locals>.<genexpr>�   s.   øè ø€ ÒY¸a�q˜A‘vÒ9 §¡¨a´"·&±&©jÓ!9Ó9ÑYùó   ƒ36rV   rW   )rY   Úany)r^   r\   s   `€r   ÚcoveredzKSyntheticHome.test_state_dir_and_repo_blocked_workspace_rw.<locals>.coveredš   sD   ù€ Ø”C˜˜I™Ó'¬#¨c°)©nÓ*=Ñ=Ñ=ØÜÓYÀ3ÀtÁ9ÈsÐSWÉyÑCXÔYÓYÐYr4   c              3   ó<   •K  — | ]  }‰j                   |k(  –— Œ y ­wr6   )Ú	workspace)r•   r1   rI   s     €r   r–   zMSyntheticHome.test_state_dir_and_repo_blocked_workspace_rw.<locals>.<genexpr>¡   s   øè ø€ ÒC°A˜DŸN™N¨aÕ/ÑCùs   ƒrV   )r   r   r-   r/   r   r   r   rE   rF   r›   r   Ú
codex_homeÚauthdirÚtmpÚ	auth_copyrl   ru   Ú
assertTruer˜   )
r0   rŒ   r]   r   ÚreporH   r1   r™   r\   rI   s
           @@r   Ú,test_state_dir_and_repo_blocked_workspace_rwz:SyntheticHome.test_state_dir_and_repo_blocked_workspace_rw„   sU  ù€ ô —‘—‘˜TŸV™V WÓ-ˆÜ
�‰”B—G‘G—L‘L ¨Ó/¸$Õ?ØGò 	 ˆCÜ”b—g‘g—l‘l 5¨#Ó.°Ó4ð  ¸Ø—‘˜”÷ ð  ð	 ô �w‰w�|‰|˜DŸF™F HÓ-ˆÜ
�‰�D 4Õ(Ü”"—'‘'—,‘,˜t \Ó2°CÓ8ð 	¸BØ�H‰H�XÔ÷	ä�W‰W�\‰\˜% ¨uÓ5ˆÜ
�‰�B Õ&Ü�y‰y˜˜R %™Z¨¨g©°r¸MÑ7IÈ2ÐPZÉ?Ð\^ÐagÑ\gÓhˆØ—.‘. $§)¡)¨T¯_©_¸d¿l¹lÈDÏHÉHÐUò 	*ˆAÜ�K‰K˜ DÖ)ð	*ä�$—.‘. #Ó&ð 	¨"Ø�H‰H�TŒN÷	ä�o‰o˜d¨oÈÈaÀyÐ\`×\bÑ\bØ)+¸UÈeÐ_côeˆô	Zð Hò 	EˆCØ×Ñ™W¤R§W¡W§\¡\°%¸Ó%=Ó>ÀÕDð	Eà×Ñ™¤§¡§¡¨d°LÓ!AÓBÔCØ�‰œÓC¸¸T¹ÔCÓCÕD÷/ ñ  ú÷	ñ 	ú÷	ð 	ús$   ÂKÄK,Ç>K9ËK)	Ë,K6Ë9Lc           	      óR  — dD ]P  }t        t        j                  j                  | j                  |«      d«      5 }|j                  d«       d d d «       ŒR t        j                  t        j                  j                  | j                  d«      d¬«       t        t        j                  j                  | j                  dd«      d«      5 }|j                  d«       d d d «       t        j                  t        j                  j                  | j                  d	d
d«      d¬«       t        t        j                  j                  | j                  d	d
dd«      d«      5 }|j                  d«       d d d «       t        t        j                  j                  | j                  d	d
d«      d«      5 }|j                  d«       d d d «       t        j                  | j                  «       dddi| j                  dd¬«      }dD ](  }| j                  | j                  ||«      d|› d�«       Œ* dD ]H  }| j                  | j                  ||«      d|«       | j                  | j                  ||«      d|«       ŒJ y # 1 sw Y   �Œ}xY w# 1 sw Y   �Œ©xY w# 1 sw Y   �Œ$xY w# 1 sw Y   ŒàxY w)N)ú.bashrcú.profileú.zshrcr   úecho hi
ÚscriptsTr   ú
wrapper.shú
#!/bin/sh
Úmyrepoú.gitÚhooksú
pre-commitÚconfigz[core]
ra   rb   rc   rd   re   )r¤   r¥   r¦   úscripts/wrapper.shr   zmyrepo/.git/hooks/pre-commitúmyrepo/.git/configrk   ú nicht read-only)r¤   r°   r   r±   rV   rT   )r   r   r   r-   r/   r   r   rE   rl   rI   rN   r_   ÚassertNotEqual)r0   r2   r   Úcfg_onr]   s        r   Ú1test_protect_startup_true_makes_startup_read_onlyz?SyntheticHome.test_protect_startup_true_makes_startup_read_only£   s   € Ø2ò 	&ˆAÜ”b—g‘g—l‘l 4§6¡6¨1Ó-¨sÓ3ð &°rØ—‘˜Ô%÷&ð &ð	&ô 	�‰”B—G‘G—L‘L §¡¨Ó3¸dÕCÜ”"—'‘'—,‘,˜tŸv™v y°,Ó?ÀÓEð 	$ÈØ�H‰H�]Ô#÷	$ä
�‰”B—G‘G—L‘L §¡¨°6¸7ÓCÈdÕSÜ”"—'‘'—,‘,˜tŸv™v x°¸À,ÓOÐQTÓUð 	$ÐY[Ø�H‰H�]Ô#÷	$ä”"—'‘'—,‘,˜tŸv™v x°¸ÓBÀCÓHð 	!ÈBØ�H‰H�ZÔ ÷	!ä—‘ §¡£¸ÐRVÐXYÐQZØ+/¯6©6¸bÐRVôXˆðJò 	cˆCà�M‰M˜$Ÿ-™-¨°Ó4Ð6GÈCÈ5ÐP`ÐIaÕbð	cð \ò 	LˆCØ×Ñ §¡¨f°cÓ :¸DÀ#ÔFØ×Ñ §¡¨f°cÓ :¸IÀsÕKñ	L÷!&ñ &ú÷	$ñ 	$ú÷	$ñ 	$ú÷	!ð 	!ús/   ºI6Ã
JÅJÆ,JÉ6J 	ÊJÊJÊJ&c                 óº  — dD ]P  }t        t        j                  j                  | j                  |«      d«      5 }|j                  d«       d d d «       ŒR t        j                  t        j                  j                  | j                  d«      d¬«       t        t        j                  j                  | j                  dd«      d«      5 }|j                  d«       d d d «       t        j                  | j                  «       d	d
di| j                  dd¬«      }dD ]%  }| j                  | j                  ||«      d|«       Œ' y # 1 sw Y   �ŒKxY w# 1 sw Y   ŒvxY w)N)r¤   r¦   r   r§   r¨   Tr   r©   rª   ra   rb   rc   rd   Fre   )r¤   r¦   r°   r   rk   )r   r   r   r-   r/   r   r   rE   rl   rI   rN   r_   )r0   r2   r   Úcfg_offr]   s        r   Ú6test_protect_startup_false_does_not_reopen_home_writeszDSyntheticHome.test_protect_startup_false_does_not_reopen_home_writes¹   s  € ð 'ò 	&ˆAÜ”b—g‘g—l‘l 4§6¡6¨1Ó-¨sÓ3ð &°rØ—‘˜Ô%÷&ð &ð	&ô 	�‰”B—G‘G—L‘L §¡¨Ó3¸dÕCÜ”"—'‘'—,‘,˜tŸv™v y°,Ó?ÀÓEð 	$ÈØ�H‰H�]Ô#÷	$ä—/‘/ $§)¡)£+¸ÐSWÐYZÐR[Ø,0¯F©F¸rÐSXôZˆàOò 	OˆCØ�M‰M˜$Ÿ-™-¨°Ó5Ð7HÈ#ÕNñ	O÷&ñ &ú÷	$ð 	$ús   ºEÃ
EÅE	ÅEc           
      óÔ  — t         j                  j                  | j                  dd«      }t	        t         j                  j                  |ddd«      «       t	        t         j                  j                  |dd«      «       t	        t         j                  j                  |d«      «       t        j                  | j                  «       di | j                  d	d
g |g¬«      }| j                  | j                  |d«      d«       dD ]%  }| j                  | j                  ||«      d|«       Œ' | j                  | j                  |d«      d«       t        j                  | j                  «       di | j                  d	d|g¬«      }| j                  | j                  |d«      d«       | j                  | j                  |d«      d«       | j                  | j                  |d«      d«       y )NÚprojekter   r¬   r­   r®   r¯   r   ra   rd   T)rf   rg   rh   ri   rj   Úcron_targetsÚwrite_allowlistr    )rV   rT   )ú projekte/x/.git/hooks/pre-commitzprojekte/x/.git/configrk   zprojekte/x/.envrX   F)rf   rg   rh   ri   rj   r¼   r½   r   )r   r   r-   r/   r   rE   rl   rI   rN   r_   rm   )r0   r¡   Úonr]   Úoffs        r   Ú*test_allowlist_dir_keeps_startup_carveoutsz8SyntheticHome.test_allowlist_dir_keeps_startup_carveoutsÈ   s~  € ô �w‰w�|‰|˜DŸF™F J°Ó4ˆÜŒb�g‰g�l‰l˜4 ¨°,Ó?Ô@ÜŒb�g‰g�l‰l˜4 ¨Ó2Ô3ÜŒb�g‰g�l‰l˜4 Ó(Ô)Ü�_‰_˜TŸY™Y›[°OÈRÐ[_×[aÑ[aØ(*¸DÈrÐdhÐciôkˆà�‰�d—m‘m BÐ(;Ó<Ð>OÔPØQò 	JˆCØ�M‰M˜$Ÿ-™-¨¨CÓ0Ð2CÀSÕIð	Jà×Ñ˜Ÿ™ rÐ+<Ó=¸vÔFÜ�o‰o˜dŸi™i›k°_ÈbÐ\`×\bÑ\bØ)+¸UÐUYÐTZô\ˆà�‰�d—m‘m CÐ)KÓLÐN_Ô`Ø×Ñ˜Ÿ™ sÐ,=Ó>ÀÔGØ�‰�d—m‘m C¨Ó9Ð;LÕMr4   c                 óð   — t        j                  | j                  «       dddi| j                  ¬«      }|d   |d   z   D ]5  }| j	                  d|«       | j                  |j                  d«      |«       Œ7 y )	Nra   rb   rc   )rf   rg   rh   r‡   rˆ   z/share/claudez/claude)rE   rl   rI   r/   rO   ru   Úendswith)r0   r\   r^   s      r   Ú$test_tools_claude_not_in_exec_grantsz2SyntheticHome.test_tools_claude_not_in_exec_grantsÛ   sm   € ä�o‰o˜dŸi™i›k°_ÈtÐUVÈiØ(,¯©ô0ˆà�T‘˜S ™]Ñ*ò 	7ˆAØ×Ñ˜_¨aÔ0Ø×Ñ˜QŸZ™Z¨	Ó2°AÕ6ñ	7r4   c                 ó°  — | j                  «       }t        j                  |di | j                  dd¬«      }| j	                  |j
                  |d   «       | j                  |j
                  |d   «       | j                  |j                  |d   «       t        j                  |di | j                  dd¬«      }| j	                  |j
                  |d   «       y )	Nra   Frd   )rf   rg   rh   Úwritable_authri   rU   rT   rV   T)rI   rE   rl   r/   rN   rŸ   rO   r�   )r0   r1   rW   rV   s       r   Ú&test_auth_default_readonly_vs_writablez4SyntheticHome.test_auth_default_readonly_vs_writableã   s¯   € Ø�I‰I‹KˆÜ�_‰_˜Q¨/À2ÐQU×QWÑQWØ+0¸RôAˆà�‰�a—k‘k 2 i¡=Ô1Ø×Ñ˜Ÿ™ b¨¡mÔ4Ø×Ñ˜Ÿ™ B t¡HÔ-Ü�_‰_˜Q¨/À2ÐQU×QWÑQWØ+/¸Bô@ˆà�‰�a—k‘k 2 i¡=Õ1r4   c                 ó:  — | j                  «       }t        j                  |dddi¬«      }| j                  |d   dg«       | j	                  d|d   «       | j	                  |j
                  |d   «       | j                  d	|«       | j                  d
|d   «       y )Nra   rb   rc   )rf   rg   Útcp_connecti»  rˆ   rU   r‡   z
/home/ariarV   )rI   rE   Útext_profilerm   rN   rŸ   rO   )r0   r1   r\   s      r   Útest_text_profile_minimalz'SyntheticHome.test_text_profile_minimalî   s†   € Ø�I‰I‹KˆÜ�n‰n˜Q¨/ÀDÈ!À9ÔMˆØ×Ñ˜˜]Ñ+¨c¨UÔ3Ø�‰�o s¨8¡}Ô5Ø�‰�a—k‘k 3 y¡>Ô2Ø×Ñ˜˜sÔ#à×Ñ˜ s¨4¡yÕ1r4   c                 óV  — t        t        j                  j                  | j                  d«      t        j                  j                  | j                  d«      h«      }t        j                  | j                  |«      \  }}t        |«      }| j                  t        j                  j                  | j                  d«      |«       | j                  t        d„ |D «       «      «       | j                  t        j                  j                  | j                  d«      t        |«      «       y )Nr"   r   c              3   ó>   K  — | ]  }|j                  d «      –— Œ y­w)z/brainN)rÂ   )r•   r1   s     r   r–   z>SyntheticHome.test_descent_excludes_blocked.<locals>.<genexpr>ý   s   è ø€ ÒB°Q˜AŸJ™J x×0ÑBùs   ‚)Ú	frozensetr   r   r-   r/   rE   Úbuild_home_rwrY   rO   r    r˜   )r0   ÚblockedÚrw_dirsÚrw_filesÚalloweds        r   Útest_descent_excludes_blockedz+SyntheticHome.test_descent_excludes_blockedø   s»   € ÜœRŸW™WŸ\™\¨$¯&©&°+Ó>ÄÇÁÇÁÈTÏVÉVÐU[Ó@\Ð]Ó^ˆÜŸO™O¨D¯F©F°GÓ<Ñˆ�Ü�g“,ˆØ×ÑœŸ™Ÿ™ d§f¡f¨fÓ5°wÔ?Ø�‰œÑB¸'ÔBÓBÔCà×ÑœŸ™Ÿ™ d§f¡f¨kÓ:¼CÀ»MÕJr4   N)Ú__name__Ú
__module__Ú__qualname__r3   r:   rI   rR   r_   ro   rx   rz   r„   rŠ   r¢   rµ   r¸   rÀ   rÃ   rÆ   rÊ   rÓ   rd   r4   r   r   r      sg   „ ò
+òòiò
@òòPò>ò&FòAò aòEò>Lò,OòNò&7ò	2ò2óKr4   r   c                   ó¢   — e Zd ZdZd„ Zd„ Zd„ Zddddddœd	„Zd
„ Zd„ Z	d„ Z
d„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zy)ÚReReview2DeferredExecutionzÅRe-Review 2 (verzoegerte Ausfuehrung): Top-Level-Dotfiles, .claude.json, Paketmanager/state ro,
    gesourcte Dateien, Cron-Ziele, Geschwister-Worktrees. Synthetischer Home-Baum, kein Kaefig-Start.c                 ó  — t        j                  «       | _        t        j                  j                  | j                  j                  d«      | _        dD ]A  }t        j                  t        j                  j                  | j                  |«      d¬«       ŒC i dd“dd“d	d
“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“d d
“d!d"“d#d“d
d
d$d%d&dd'd(d)d*œ	¥}|j                  «       D ]ˆ  \  }}t        t        j                  j                  | j                  |«      «       t        t        j                  j                  | j                  |«      d+d,¬-«      5 }|j                  |«       d d d «       ŒŠ t        t        j                  j                  | j                  d.d/«      d+d,¬-«      5 }|j                  d0t        j                  j                  | j                  d1d/d2d3«      z  «       d d d «       y # 1 sw Y   �ŒxY w# 1 sw Y   y xY w)4Nr   )r   z.claudez
.local/binr   z.local/lib/pkgú.nvmz.bun/binz
.cargo/binz.cargo/registry/craterŒ   r   zwork/projectz!main-repo-dev/.git/worktrees/wt-aúmain-repo-lane-azmain-repo-shadow/subÚ	unrelatedTr   r¤   zU. "$HOME/.mysource"
source ~/.other
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
r¥   z. "$HOME/.cargo/env"
ú	.mysourcer   ú.otherÚyú
.cargo/envzexport CARGO=1
ú.cargo/bin/cargoÚbinú.cargo/registry/crate/lib.rsÚcoderr   ÚSECRETú.local/bin/toolr)   Ú	claudebinú.local/lib/pkg/m.jsÚjsú.nvm/nvm.shÚnvmú.bun/bin/bunÚbunústate/run-heartbeat.confzCONF=1ústate/other.txtú.claude.jsonz{"mcpServers":{}}r   ÚinstructionsÚagentsÚnÚmainÚshadowÚok)	ú
.gitignoreú.lesshstú	CLAUDE.mdú	AGENTS.mdr   úwork/project/app.pyzmain-repo-dev/code.pyúmain-repo-shadow/sub/copy.pyúunrelated/thing.txtr   r   r	   rÛ   r¬   zgitdir: %s
úmain-repo-devÚ	worktreeszwt-a)r*   r+   r,   r   r   r-   r.   r/   r   Úitemsr   r   r   )r0   r1   Úfilesr]   Úbodyr   s         r   r3   z ReReview2DeferredExecution.setUp  sP  € Ü×/Ñ/Ó1ˆŒ	Ü—‘—‘˜dŸi™iŸn™n¨fÓ5ˆŒð7ò 	@ˆAô �K‰KœŸ™Ÿ™ T§V¡V¨QÓ/¸$Ö?ð		@ð

ØÐrð
àÐ0ð
ð ˜ð
ð '¨ð
ð Ð,ð	
ð /AÀ%ð	
ð
 +¨Fð
ð
 5NÈxð
ð ˜uð
ð '@Àð
ð OdÐeið
ð ˜5ð
ð #1°%ð
ð '¨ð
ð 3DÀSð
ð Ð/ð
ð 28¸ð
ð RUÐbeØ'°hØ ¸Ø%+ÈXØ#'ò
ˆð Ÿ™›ò 	‰IˆC�Ü”"—'‘'—,‘,˜tŸv™v sÓ+Ô,Ü”b—g‘g—l‘l 4§6¡6¨3Ó/°¸wÔGð È2Ø—‘˜”÷ð ð	ô
 ”"—'‘'—,‘,˜tŸv™vÐ'9¸6ÓBÀCÐRYÔZð 	jÐ^`Ø�H‰H�^¤b§g¡g§l¡l°4·6±6¸?ÈFÐT_ÐagÓ&hÑhÔi÷	jð 	j÷ñ ú÷	jð 	jús   ÅG5Æ,A HÇ5G?	ÈHc                 ó8   — | j                   j                  «        y r6   r7   r9   s    r   r:   z#ReReview2DeferredExecution.tearDown%  r;   r4   c           	      ó¼   — t         j                  j                  | j                  j                  d«      }t        j                  ||dz   |dz   |dz   |dz   |dz   «      S r=   rD   rG   s     r   rI   zReReview2DeferredExecution.dirs(  rJ   r4   TNrd   )rj   r»   r�   ri   r¼   c                óv   — t        j                  | j                  «       di | j                  |||�|ng ||¬«	      S )Nra   )rf   rg   rh   ri   rj   r»   r�   r¼   )rE   rl   rI   r/   )r0   rj   r»   r�   ri   r¼   s         r   r\   zReReview2DeferredExecution.cfg,  s?   € Ü�‰˜tŸy™y›{°oÈrÐ]a×]cÑ]cØ*4ÀoØ<HÐ<T©LÐZ\Ø)2ÀOôUð 	Ur4   c                 ó¨   ‡— t         j                  j                  | j                  |«      Š‰t	        |d   «      v ryt        ˆfd„|d   D «       «      S )NrT   Tc              3   óp   •K  — | ]-  }‰|k(  xs" ‰j                  |t        j                  z   «      –— Œ/ y ­wr6   r“   r”   s     €r   r–   z6ReReview2DeferredExecution.writable.<locals>.<genexpr>7  ó.   øè ø€ ÒI¸!�1˜‘6Ò5˜QŸ\™\¨!¬b¯f©f©*Ó5Ó5ÑIùr—   rV   ©r   r   r-   r/   rY   r˜   ©r0   r\   r]   r^   s      @r   Úwritablez#ReReview2DeferredExecution.writable3  óD   ø€ Ü�G‰G�L‰L˜Ÿ™ Ó%ˆØ”�C˜	‘NÓ#Ñ#ØÜÓI¸sÀ4¹yÔIÓIÐIr4   c                 ó¨   ‡— t         j                  j                  | j                  |«      Š‰t	        |d   «      v ryt        ˆfd„|d   D «       «      S )NrU   Tc              3   óp   •K  — | ]-  }‰|k(  xs" ‰j                  |t        j                  z   «      –— Œ/ y ­wr6   r“   r”   s     €r   r–   z6ReReview2DeferredExecution.readonly.<locals>.<genexpr>=  r  r—   rW   r	  r
  s      @r   Úreadonlyz#ReReview2DeferredExecution.readonly9  r  r4   c                 ó  ‡— t         j                  j                  | j                  |«      Š‰t	        |d   «      t	        |d   «      z  t	        |d   «      z  v xs# t        ˆfd„|d   |d   z   |d   z   D «       «      }| S )NrT   rU   rˆ   c              3   óp   •K  — | ]-  }‰|k(  xs" ‰j                  |t        j                  z   «      –— Œ/ y ­wr6   r“   r”   s     €r   r–   z7ReReview2DeferredExecution.no_access.<locals>.<genexpr>B  s.   øè ø€ ÒhÀ˜!˜q™&Ò< A§L¡L°´R·V±V±Ó$<Ó<Ñhùr—   rV   rW   r‡   r	  )r0   r\   r]   r™   r^   s       @r   Ú	no_accessz$ReReview2DeferredExecution.no_access?  s…   ø€ Ü�G‰G�L‰L˜Ÿ™ Ó%ˆØœ˜C 	™NÓ+¬c°#°i±.Ó.AÑAÄCÈÈHÉÓDVÑVÐVò iÜÓhÀcÈ$ÁiÐRUÐVZÑR[ÑF[Ð^aÐbfÑ^gÑFgÔhÓhð 	àˆ{Ðr4   c                 óÆ   — | j                  «       }dD ]L  }| j                  | j                  ||«      |› d�«       | j                  | j	                  ||«      |› d�«       ŒN y )N)r¤   r¥   r÷   rø   rù   rú   r²   z ist schreibbar)r\   r    r  ru   r  rn   s      r   Ú!test_top_level_dotfiles_read_onlyz<ReReview2DeferredExecution.test_top_level_dotfiles_read_onlyF  sa   € Ø�h‰h‹jˆØ^ò 	OˆCØ�O‰O˜DŸM™M¨#¨sÓ3¸°uÐ<LÐ5MÔNØ×Ñ˜TŸ]™]¨3°Ó4¸¸¸_Ð6MÕNñ	Or4   c                 óh   — | j                  «       }| j                  | j                  |d«      d«       y )Nr   z/.env darf weder ro noch rw sein (bleibt Secret))r\   r    r  ©r0   r\   s     r   Ú0test_secret_top_level_dotfile_stays_hard_blockedzKReReview2DeferredExecution.test_secret_top_level_dotfile_stays_hard_blockedL  s'   € Ø�h‰h‹jˆØ�‰˜Ÿ™ s¨FÓ3Ð5fÕgr4   c                 óZ  — | j                  «       }| j                  t        j                  j	                  | j
                  «      t        |d   «      «       | j                  t        j                  j                  t        j                  j                  | j
                  d«      «      «       y )NrV   z.bash_aliases)
r\   rO   r   r   Úabspathr/   rY   ru   rt   r-   r  s     r   Ú6test_home_root_not_writable_latent_dotfile_uncreatablezQReReview2DeferredExecution.test_home_root_not_writable_latent_dotfile_uncreatableP  sf   € ð �h‰h‹jˆØ×ÑœŸ™Ÿ™¨¯©Ó0´#°c¸$±i³.ÔAØ×ÑœŸ™Ÿ™¬¯©¯©°T·V±V¸_Ó(MÓNÕOr4   c                 ó  — | j                  «       }| j                  | j                  |d«      «       | j                  t        j
                  j                  | j                  d«      t        j                  | j                  «      «       y )Nrð   )
r\   r    r  rN   r   r   r-   r/   rE   r�   r  s     r   Útest_claude_json_hard_blockedz8ReReview2DeferredExecution.test_claude_json_hard_blockedX  sW   € Ø�h‰h‹jˆØ�‰˜Ÿ™ s¨NÓ;Ô<Ø�‰”b—g‘g—l‘l 4§6¡6¨>Ó:¼A×<WÑ<WÐX\×X^ÑX^Ó<_Õ`r4   c                 óÚ  ‡ — ‰ j                  t        j                  j                  ‰ j                  d«      t        j                  j                  ‰ j                  d«      t        j                  j                  ‰ j                  d«      f¬«      }dD ]L  }‰ j                  ‰ j                  ||«      |› d�«       ‰ j                  ‰ j                  ||«      |› d�«       ŒN ‰ j                  ‰ j                  |d«      d	«       ‰ j                  ‰ j                  |d«      d
«       ‰ j                  ‰ j                  |d«      «       ‰ j                  t        ˆ fd„|d   D «       «      d«       y )Nr†   rÚ   z.bun)ri   )rè   ræ   rê   rì   rá   rà   rî   rï   r²   z schreibbarrã   zcargo registry nicht lesbarzcargo registry schreibbarr)   c              3   ó¨  •K  — | ]É  }t         j                  j                  ‰j                  d «      |k(  xs– t         j                  j                  ‰j                  d «      j	                  |t         j
                  z   «      xsJ |j	                  t         j                  j                  ‰j                  d «      t         j
                  z   «      –— ŒË y­w)r†   N)r   r   r-   r/   rZ   r[   )r•   r1   r0   s     €r   r–   z\ReReview2DeferredExecution.test_package_dirs_and_cargo_registry_read_only.<locals>.<genexpr>l  s–   øè ø€ ò fàVWô ŸG™GŸL™L¨¯©°Ó:¸aÑ?ò RÜŸG™GŸL™L¨¯©°Ó:×EÑEÀaÌ"Ï&É&ÁjÓQòRàŸL™L¬¯©¯©°d·f±f¸hÓ)GÌ"Ï&É&Ñ)PÓQóRñ fùs   ƒCCr‡   z.local nicht mehr ausfuehrbar)r\   r   r   r-   r/   r    r  ru   r  r  r˜   rn   s   `  r   Ú.test_package_dirs_and_cargo_registry_read_onlyzIReReview2DeferredExecution.test_package_dirs_and_cargo_registry_read_only^  s5  ø€ Ø�h‰h¤2§7¡7§<¡<°·±¸Ó#AÄ2Ç7Á7Ç<Á<ÐPT×PVÑPVÐX^ÓC_Ü#%§7¡7§<¡<°·±¸Ó#?ð#Aˆhó Bˆðeò 	KˆCà�O‰O˜DŸM™M¨#¨sÓ3¸°uÐ<LÐ5MÔNØ×Ñ˜TŸ]™]¨3°Ó4¸¸¸[Ð6IÕJð	Kð 	�‰˜Ÿ™ cÐ+IÓJÐLiÔjØ×Ñ˜Ÿ™ sÐ,JÓKÐMhÔià�‰˜Ÿ™ sÐ,EÓFÔGà�‰œó fà[^Ð_cÑ[dôfó fð 8õ	9r4   c                 óø  — | j                  «       }dD ]F  }| j                  | j                  ||«      |«       | j                  | j	                  ||«      |«       ŒH | j                  t
        j                  j                  | j                  dd«      g¬«      }| j                  | j	                  |d«      «       | j                  | j	                  |d«      «       | j                  | j	                  |d«      «       y )N)rû   rý   r   ÚworkÚproject)r¼   rû   rý   r   )	r\   r    r  ru   r  r   r   r-   r/   )r0   r\   r]   Úcfg2s       r   Ú&test_normal_home_readable_not_writablezAReReview2DeferredExecution.test_normal_home_readable_not_writableq  sÇ   € ð �h‰h‹jˆØRò 	;ˆCØ�O‰O˜DŸM™M¨#¨sÓ3°SÔ9Ø×Ñ˜TŸ]™]¨3°Ó4°cÕ:ð	;ð �x‰x¬¯©¯©°d·f±f¸fÀiÓ)PÐ(QˆxÓRˆØ�‰˜Ÿ™ dÐ,AÓBÔCØ×Ñ˜Ÿ™ tÐ-BÓCÔDØ×Ñ˜Ÿ™ t¨_Ó=Õ>r4   c                 óº  — t        j                  | j                  «      }| j                  t        j
                  j                  | j                  d«      |«       | j                  t        j
                  j                  | j                  d«      |«       | j                  t        j
                  j                  | j                  dd«      |«       | j                  t        j
                  j                  | j                  dd«      |«       | j                  «       }| j                  | j                  |d«      «       | j                  | j                  |d«      «       y )NrÝ   rÞ   z.cargoÚenvrÚ   znvm.sh)rE   Úparse_sourced_pathsr/   rN   r   r   r-   rO   r\   r    r  )r0   Úsrcsr\   s      r   Útest_sourced_files_read_onlyz7ReReview2DeferredExecution.test_sourced_files_read_only~  sÙ   € Ü×$Ñ$ T§V¡VÓ,ˆØ�‰”b—g‘g—l‘l 4§6¡6¨;Ó7¸Ô>Ø�‰”b—g‘g—l‘l 4§6¡6¨8Ó4°dÔ;Ø�‰”b—g‘g—l‘l 4§6¡6¨8°UÓ;¸TÔBà×ÑœŸ™Ÿ™ d§f¡f¨f°hÓ?ÀÔFØ�h‰h‹jˆØ�‰˜Ÿ™ c¨;Ó7Ô8Ø�‰˜Ÿ™ c¨8Ó4Õ5r4   c                 ó   — | j                  t        j                  d| j                  «      «       | j                  t        j                  d| j                  «      «       | j	                  t        j                  d| j                  «      t
        j                  j                  | j                  d«      «       | j	                  t        j                  d| j                  «      t
        j                  j                  | j                  d«      «       y )Nz$NVM_DIR/nvm.shz$PWD/xz~/a/bza/bz$HOME/cÚc)ÚassertIsNonerE   Ú_resolve_home_tokenr/   rm   r   r   r-   r9   s    r   Ú(test_sourced_unresolved_variable_skippedzCReReview2DeferredExecution.test_sourced_unresolved_variable_skipped‰  s®   € à×Ñœ!×/Ñ/Ð0AÀ4Ç6Á6ÓJÔKØ×Ñœ!×/Ñ/°¸$¿&¹&ÓAÔBØ×Ñœ×.Ñ.¨w¸¿¹Ó?ÄÇÁÇÁÈdÏfÉfÐV[ÓA\Ô]Ø×Ñœ×.Ñ.¨y¸$¿&¹&ÓAÄ2Ç7Á7Ç<Á<ÐPT×PVÑPVÐX[ÓC\Õ]r4   c                 ót  — d| j                   z  }d| j                   z  }| j                  ||g¬«      }| j                  | j                  |d«      d«       | j	                  | j                  |d«      «       | j                  | j                  |d«      d«       | j	                  | j                  |d«      «       y )	Nz>12 7 * * * /usr/bin/env bash %s/work/project/app.py >/dev/nullz5*/5 * * * * cd %s/unrelated && python3 -m http.server)r»   rû   zcron-Datei nicht rorý   zcd-Verzeichnis nicht rorÜ   )r/   r\   r    r  ru   r  )r0   Ú	line_fileÚline_cdr\   s       r   Útest_cron_targets_read_onlyz6ReReview2DeferredExecution.test_cron_targets_read_only‘  sŸ   € ØTÐW[×W]ÑW]Ñ]ˆ	ØIÈDÏFÉFÑRˆØ�h‰h Y°Ð$8ˆhÓ9ˆØ�‰˜Ÿ™ cÐ+@ÓAÐCXÔYØ×Ñ˜Ÿ™ sÐ,AÓBÔCØ�‰˜Ÿ™ cÐ+@ÓAÐC\Ô]Ø×Ñ˜Ÿ™ s¨KÓ8Õ9r4   c           
      ó–  ‡	— dd l Š	t        j                   j                  }ˆ	fd„}|t        j                   _        	 t        j                  «       \  }}| j	                  |g «       | j                  |«       t        j                  | j                  d «      \  }}}| j	                  ||ft        «       t        «       f«       | j                  |d«       t        j                  | j                  «       di | j                  ddd d ¬«      }| j                  |d   d	«       |t        j                   _        y # |t        j                   _        w xY w)
Nr   c                  ó*   •— ‰j                  dd¬«      ‚)NÚcrontabé   )ÚcmdÚtimeout)ÚTimeoutExpired©ÚaÚkÚ_sps     €r   ÚboomzXReReview2DeferredExecution.test_cron_read_failure_yields_warning_not_crash.<locals>.boomž  s   ø€ Ø×$Ñ$¨¸AÐ$Ó>Ð>r4   zWarnung fehltra   rd   T)rf   rg   rh   ri   rj   r»   r�   ÚwarningszProfil-Warnung fehlt)Ú
subprocessrE   r>   Úread_user_crontabrm   ÚassertIsNotNoneÚresolve_cron_targetsr/   rY   r    rl   rI   )
r0   Úrealr>  ÚlinesÚwarnr1   r2   Úwarnsr\   r=  s
            @r   Ú/test_cron_read_failure_yields_warning_not_crashzJReReview2DeferredExecution.test_cron_read_failure_yields_warning_not_crashš  sý   ø€ Û Ü�|‰|×Ñˆô	?àŒ�‰Ôð	$Ü×-Ñ-Ó/‰KˆE�4Ø×Ñ˜U BÔ'Ø× Ñ  Ô&Ü×0Ñ0°·±¸Ó>‰KˆAˆq�%Ø×Ñ˜a ˜V¤c£e¬S«U ^Ô4Ø�O‰O˜E ?Ô3ä—/‘/ $§)¡)£+¸ÐRTÐ`d×`fÑ`fØ-/ÀÐTXÐdhôjˆCà�O‰O˜C 
™OÐ-CÔDà#ŒA�L‰LÕø˜tŒA�L‰LÕús   »C D1 Ä1Ec                 ó0  ‡— dd l Št        j                   j                  }ˆfd„}|t        j                   _        	 t        j                  «       \  }}| j	                  ||fg d f«       |t        j                   _        y # |t        j                   _        w xY w)Nr   c                  ó4   •— ‰j                  | d   ddd¬«      S )Nr   rc   r4   s   no crontab for x)ÚstdoutÚstderr)ÚCompletedProcessr:  s     €r   ÚemptyzHReReview2DeferredExecution.test_cron_no_crontab_is_silent.<locals>.empty´  s"   ø€ Ø×'Ñ'¨¨!©¨a¸ÐDWÐ'ÓXÐXr4   )r@  rE   r>   rA  rm   )r0   rD  rN  rE  rF  r=  s        @r   Útest_cron_no_crontab_is_silentz9ReReview2DeferredExecution.test_cron_no_crontab_is_silent¯  so   ø€ ã Ü�|‰|×Ñˆô	Yà Œ�‰Ôð	$Ü×-Ñ-Ó/‰KˆE�4Ø×Ñ˜e T˜]¨R°¨JÔ7à#ŒA�L‰LÕø˜tŒA�L‰LÕús   »-A> Á>Bc                 ó„   — | j                  t        j                  d«       | j                  dt        j                  «       y )Nrd   z/home/aria/aria)rm   rE   ÚSTARTUP_RO_ABSrO   r9   s    r   Ú%test_startup_ro_abs_has_no_dead_entryz@ReReview2DeferredExecution.test_startup_ro_abs_has_no_dead_entry¾  s/   € Ø×Ñœ×)Ñ)¨2Ô.Ø×ÑÐ*¬A×,<Ñ,<Õ=r4   c                 óà  — t         j                  j                  | j                  d«      }t	        j
                  | j                  |«      }| j                  t         j                  j                  | j                  d«      |«       | j                  t         j                  j                  | j                  d«      |«       | j                  t         j                  j                  | j                  d«      |«       | j                  |¬«      }| j                  | j                  |d«      «       | j                  | j                  |d«      «       | j                  | j                  |d«      d	«       y )
Nrþ   rÛ   úmain-repo-shadowrÜ   ©r�   zmain-repo-lane-a/.gitrü   rý   z%Fremdverzeichnis faelschlich gesperrt)r   r   r-   r/   rE   Úsibling_worktreesrN   rO   r\   r    r  r  )r0   r¡   Úsibr\   s       r   Ú)test_sibling_worktrees_and_family_blockedzDReReview2DeferredExecution.test_sibling_worktrees_and_family_blockedÃ  sò   € Ü�w‰w�|‰|˜DŸF™F OÓ4ˆÜ×!Ñ! $§&¡&¨$Ó/ˆØ�‰”b—g‘g—l‘l 4§6¡6Ð+=Ó>ÀÔDØ�‰”b—g‘g—l‘l 4§6¡6Ð+=Ó>ÀÔDØ×ÑœŸ™Ÿ™ d§f¡f¨kÓ:¸CÔ@Ø�h‰h ˆhÓ&ˆØ�‰˜Ÿ™ sÐ,CÓDÔEØ�‰˜Ÿ™ sÐ,JÓKÔLà�‰˜Ÿ™ cÐ+@ÓAÐCjÕkr4   c           	      óš  — t         j                  j                  | j                  d«      }| j	                  t         j                  j                  t         j                  j                  | j                  dd«      «      «       | j                  t        j                  | j                  |«      t        «       «       | j                  |¬«       y )NrÜ   rÛ   r¬   rU  )r   r   r-   r/   r    Úisfilerm   rE   rV  rY   r\   )r0   r¡   s     r   Ú6test_sibling_worktrees_repo_without_git_does_not_crashzQReReview2DeferredExecution.test_sibling_worktrees_repo_without_git_does_not_crashÏ  s}   € ô �w‰w�|‰|˜DŸF™F KÓ0ˆØ�‰œŸ™Ÿ™¤r§w¡w§|¡|°D·F±FÐ<NÐPVÓ'WÓXÔYØ×Ñœ×,Ñ,¨T¯V©V°TÓ:¼C»EÔBØ�‰˜4ˆÕ r4   c           	      óä  — t         j                  j                  | j                  d«      }| j	                  d|¬«      }| j                  | j                  |d«      «       | j                  | j                  |d«      «       | j                  t        j                  «      5  | j	                  d|t         j                  j                  | j                  d«      g¬«       d d d «       y # 1 sw Y   y xY w)Nrþ   F)rj   r�   rü   rT  )rj   r�   r¼   )r   r   r-   r/   r\   r    r  ru   r  ÚassertRaisesrE   ÚWriteAllowlistError)r0   r¡   r\   s      r   Ú*test_siblings_not_blocked_when_startup_offzEReReview2DeferredExecution.test_siblings_not_blocked_when_startup_offØ  s»   € Ü�w‰w�|‰|˜DŸF™F OÓ4ˆØ�h‰h u¸ˆhÓ=ˆà�‰˜Ÿ™ cÐ+IÓJÔKØ×Ñ˜Ÿ™ sÐ,JÓKÔLà×Ñœq×4Ñ4Ó5ñ 	QØ�H‰H U°dÜ&(§g¡g§l¡l°4·6±6Ð;MÓ&NÐ%Oð ô Q÷	Q÷ 	Qñ 	Qús   Â>C&Ã&C/)rÔ   rÕ   rÖ   Ú__doc__r3   r:   rI   r\   r  r  r  r  r  r  r  r  r$  r)  r.  r2  rH  rO  rR  rX  r[  r_  rd   r4   r   rØ   rØ     s‘   „ ñiòjò>òið &*¸ÈÐY[Ðmoô UòJòJòòOòhòPòaò9ò&
?ò	6ò^ò:ò$ò*$ò>ò

lò!ó	Qr4   rØ   Ú__main__)r`  r   r*   ÚunittestÚaria_router.isolationr   rE   r   ÚTestCaser   rØ   rÔ   rô   rd   r4   r   ú<module>re     sa   ðÙ cÛ 	Û Û å /òôpK�H×%Ñ%ô pKôf_Q ×!2Ñ!2ô _QðD ˆzÒØ€H‡M�M…Oð r4   