+
    5mj  c                     ^ RI Ht ^ RIt^ RIHu Ht ^ RIt^ RI	t	^ RI
t
^ RIHt ^ RIt]
P                  P                  ^ ]! ]! ]4      P%                  4       P&                  ^,          4      4       ^ RIHtHt ^ RIHt ]P2                  ! RRRR	R
//4      tR R ltR R ltR R ltR R ltR R ltR R lt R R lt!R R lt"R# )    )annotationsN)Path)AccountRegistryAccountRegistryKind)pin_account_uuidclaudeAiOauthaccessTokenliverefreshTokenzlive-refreshc                    V ^8  d   QhRRRR/# )   tmp_pathr   returnr    )formats   "o/home/user/overdeck-private-tests/workstation-ai-broad2/modules/systray/tests/test_claude_grant_preservation.py__annotate__r      s     	 	 	 	    c                    V R ,          pVP                  4        \        V R,          V R,          \        P                  VV R,          R7      # )claudetraycodex.claude.json)base_dirlegacy_codex_homekindlegacy_claude_homeactive_claude_json)mkdirr   r   CLAUDE)r   r   s   & r   	_registryr       sJ    !H,F""W, ''-#n4 r   c               (    V ^8  d   QhRRRRRRRR/# )r   registryr   slugstraccount_uuidr   r   r   )r   s   "r   r   r       s(      ? # S T r   c           
         V P                  WP                  4       4      pVR ,          P                  \        P                  ! RRVRV R2//4      RR7       \        W24       V# ).credentials.jsonr   r   r
   z-refreshutf-8encoding)add_dirtitle
write_textjsondumpsr   )r"   r#   r%   homes   &&& r   _addr1       se    D**,/D	++

OmT>dVS[K\%]^_ ,  T(Kr   c               $    V ^8  d   QhRRRRRR/# )r   monkeypatchpytest.MonkeyPatch
owner_uuid
str | Noner   Noner   )r   s   "r   r   r   *   s'     K K 2 K
 Kt Kr   c                F   a  ! V3R  lR4      pV P                  RV4       R# )c                  *   < ] tR t^+tR V 3R lltRtR# )!_stub_identity.<locals>._Identityc                    V ^8  d   QhRRRR/# r   _credentials_pathr   r   r6   r   )r   s   "r   r   ._stub_identity.<locals>._Identity.__annotate__,   s     	 	d 	z 	r   c                	   < S# )Nr   )selfr=   r5   s   &&r   account_uuid_for2_stub_identity.<locals>._Identity.account_uuid_for,   s	    r   r   N__name__
__module____qualname____firstlineno__rA   __static_attributes__)r5   s   r   	_Identityr:   +   s    	 	r   rI   $account_registry.ClaudeTokenIdentityN)setattr)r3   r5   rI   s   &f r   _stub_identityrL   *   s       >	Jr   c               $    V ^8  d   QhRRRRRR/# r   r3   r4   r   r   r   r7   r   )r   s   "r   r   r   2   s&      # 
r   c                x	   \        V4      p\        VR R4      p\        VRR4       VP                  R,          pVP                  \        RR7       \        V R4       VP                  \        R VP                  4        4       4      4       RqSV,          qfP                  pRq! VR7      q\        8H  q'       EgN   \        P                  ! R V
3R!V	\        34      RR	\        P                  ! 4       9   g   \        P                  ! V4      '       d   \        P                  ! V4      MR	R
\        P                  ! V4      R\        P                  ! V4      R\        P                  ! V4      R\        P                  ! V	4      RR\        P                  ! 4       9   g!   \        P                  ! \        4      '       d   \        P                  ! \        4      MR/,          pRRV/,          p\!        \        P"                  ! V4      4      hR;p;p;p;p;r\$        P&                  pRqsV,          qP$                  q! 4       qP(                  q! V4      pRpVV8H  pV'       Eg   \        P                  ! R V3R"VV34      RR\        P                  ! 4       9   g!   \        P                  ! \$        4      '       d   \        P                  ! \$        4      MRR
\        P                  ! V4      RR	\        P                  ! 4       9   g   \        P                  ! V4      '       d   \        P                  ! V4      MR	R\        P                  ! V4      R\        P                  ! V4      R\        P                  ! V4      R\        P                  ! V4      R\        P                  ! V4      R\        P                  ! V4      /	,          pRRV/,          p\!        \        P"                  ! V4      4      hR;p;p;p;p;p;p;p;ppVP*                  qU! 4       qf'       g   RRR\        P                  ! 4       9   g   \        P                  ! V4      '       d   \        P                  ! V4      MRR
\        P                  ! V4      R\        P                  ! V4      /,          p\!        \        P"                  ! V4      4      hR;rVR# )#owner
owner-uuidnext	next-uuidr'   r(   r)   c              3  J   "   T F  qP                   R 8X  g   K  Vx  K  	  R# 5irR   Nr#   .0as   & r   	<genexpr>Qtest_activation_hands_a_vendor_written_grant_back_to_its_owner.<locals>.<genexpr>=        MAFFf<Laa   #
#py0
owner_homepy2py5py7py9py11_LIVE_GRANTzassert %(py13)spy13N  statpy3py8py10py12py14py17assert %(py19)spy19Eassert %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.is_symlink
}()
}r	   py4==ze%(py9)s
{%(py9)s = %(py5)s
{%(py5)s = (%(py0)s / %(py2)s).read_text
}(encoding=%(py7)s)
} == %(py11)s)z%(py14)s
{%(py14)s = %(py2)s
{%(py2)s = %(py0)s.S_IMODE
}(%(py12)s
{%(py12)s = %(py10)s
{%(py10)s = %(py8)s
{%(py8)s = (%(py3)s / %(py5)s).stat
}()
}.st_mode
})
} == %(py17)s)r    r1   r   r-   re   rL   set_defaultrR   list	read_text
@pytest_ar_call_reprcompare@py_builtinslocals_should_repr_global_name	_safereprAssertionError_format_explanationrh   S_IMODEst_mode
is_symlink)r3   r   r"   r_   r	   @py_assert1@py_assert3@py_assert4@py_assert6@py_assert8@py_assert10@py_format12@py_format14@py_assert7@py_assert9@py_assert11@py_assert13@py_assert16@py_assert15@py_format18@py_format20@py_format5s   &&                    r   >test_activation_hands_a_vendor_written_grant_back_to_its_ownerr   2   s    "Hh6J6;'&&)<<DOOK'O2;-MMMN,X,,X77XX7IX[XXXXXI[XXXXXXJXXXXJXXX,XXX7XXXXXXIXXXXXX[XXXX[XXXXXXXXX<<S&9S&99S??S?ASIIS<IJSeSJeSSSSSJeSSSSSS4SSSS4SSS<SSSSSSSSSSSSS&9SSS?SSSASSSISSSJSSSeSSSSSSSSS???44?r   c               $    V ^8  d   QhRRRRRR/# rN   r   )r   s   "r   r   r   D   s+     ` `#`` 
`r   c                   \        V4      pVP                  R R4      pVR,          P                  \        P                  ! RRR RR//4      RR7       VR	,          P                  \        P                  ! R
RR//4      RR7       \        VRR4       VP                  R,          pVP                  \        RR7       \        V R4       VP                  \        R VP                  4        4       4      4       RqSV,          qfP                  pRq! VR7      q\        8H  q'       * q'       EgN   \        P                  ! RV
3RV	\        34      RR\        P                   ! 4       9   g   \        P"                  ! V4      '       d   \        P$                  ! V4      MRR\        P$                  ! V4      R\        P$                  ! V4      R\        P$                  ! V4      R\        P$                  ! V	4      RR\        P                   ! 4       9   g!   \        P"                  ! \        4      '       d   \        P$                  ! \        4      MR/,          pRRV/,          p\'        \        P(                  ! V4      4      hR;p;p;p;p;p	;rR# )poisonedPoisonedr'   r   r   r
   zpoisoned-refreshr(   r)   r   oauthAccountaccountUuidrQ   rR   rS   c              3  J   "   T F  qP                   R 8X  g   K  Vx  K  	  R# 5irU   rV   rW   s   & r   rZ   Xtest_a_poisoned_claude_json_without_a_pin_never_claims_the_live_grant.<locals>.<genexpr>W   r\   r]   r^   poisoned_homer`   ra   rb   rc   rd   re   zassert not %(py13)srf   Nrs   ru   )r    r+   r-   r.   r/   r1   r   re   rL   rv   rR   rw   rx   ry   rz   r{   r|   r}   r~   r   r   )r3   r   r"   r   r	   r   r   r   r   r   r   @py_assert14r   @py_format15s   &&            r   Etest_a_poisoned_claude_json_without_a_pin_never_claims_the_live_grantr   D   s    "H$$Z<M((44

OmZQc%def 5  ^#//

N]L$ABC 0  	6;'&&)<<DOOK'O2;-MMMN 3_ 33_>>__>P_T_________PT______________ 3___>______P______T_____T__________r   c               $    V ^8  d   QhRRRRRR/# rN   r   )r   s   "r   r   r   \   s&      # 
r   c                   \        V4      p\        VR R4      p\        VRR4       VP                  R,          pVP                  \        RR7       \        V R4       VP                  \        R VP                  4        4       4      4       \        P                  pRqcV,          qwP                  pRq! V	R7      q! V
4      pR	R
R RR//qV8H  q'       Eg   \        P                  ! RV3RW34      RR\        P                  ! 4       9   g!   \        P                   ! \        4      '       d   \        P"                  ! \        4      MRR\        P"                  ! V4      RR\        P                  ! 4       9   g   \        P                   ! V4      '       d   \        P"                  ! V4      MRR\        P"                  ! V4      R\        P"                  ! V4      R\        P"                  ! V	4      R\        P"                  ! V
4      R\        P"                  ! V4      R\        P"                  ! V4      /	,          pRRV/,          p\%        \        P&                  ! V4      4      hR;p;p;p;p;p	;p
;p;rR# )rP   rQ   rR   rS   r'   r(   r)   Nc              3  J   "   T F  qP                   R 8X  g   K  Vx  K  	  R# 5irU   rV   rW   s   & r   rZ   Btest_an_unattributable_live_grant_is_left_alone.<locals>.<genexpr>g   r\   r]   r   r   r
   owner-refreshr^   r.   r`   ri   r_   ra   rj   rk   rl   rm   rn   ro   rp   rs   )z%(py14)s
{%(py14)s = %(py2)s
{%(py2)s = %(py0)s.loads
}(%(py12)s
{%(py12)s = %(py8)s
{%(py8)s = (%(py3)s / %(py5)s).read_text
}(encoding=%(py10)s)
})
} == %(py17)s)r    r1   r   r-   re   rL   rv   rR   rw   r.   loadsrx   ry   rz   r{   r|   r}   r~   r   r   )r3   r   r"   r_   r	   r   r   r   r   r   r   r   r   r   r   r   s   &&              r   /test_an_unattributable_live_grant_is_left_aloner   \   s3    "Hh6J6;'&&)<<DOOK'O2;%MMMN:: $7 $77 BB G BGT :TU -./RZ  Z    U     4   4   :     z   z   $7   B   G   T   U    Z         r   c               $    V ^8  d   QhRRRRRR/# rN   r   )r   s   "r   r   r   n   s&      # 
r   c                   \        V4      p\        VR R4      p\        VRR4        ! R R4      pV P                  RV4       VP                  \	        R VP                  4        4       4      4       VP                  \	        R VP                  4        4       4      4       R	qSV,          qfP                  pR
q! VR7      p	\        P                  p
RRR RR//q! V4      qV8H  q'       Eg   \        P                  ! RV3RW34      RR\        P                  ! 4       9   g   \        P                  ! V4      '       d   \        P                  ! V4      MRR\        P                  ! V4      R\        P                  ! V4      R\        P                  ! V4      R\        P                  ! V	4      RR\        P                  ! 4       9   g!   \        P                  ! \        4      '       d   \        P                  ! \        4      MRR\        P                  ! V
4      R\        P                  ! V4      R\        P                  ! V4      /	,          pRRV/,          p\        \        P                   ! V4      4      hR;p;p;p;p;p	;p;p
;rR# ) rP   rQ   rR   rS   c                  "    ] tR t^vtR R ltRtR# )>test_a_symlinked_live_grant_is_never_probed.<locals>._Identityc                    V ^8  d   QhRRRR/# r<   r   )r   s   "r   r   Ktest_a_symlinked_live_grant_is_never_probed.<locals>._Identity.__annotate__w   s     	Z 	Zd 	Zz 	Zr   c                	    \        R 4      h)z5a symlinked live grant already belongs to its account)r   )r@   r=   s   &&r   rA   Otest_a_symlinked_live_grant_is_never_probed.<locals>._Identity.account_uuid_forw   s     !XYYr   r   NrC   r   r   r   rI   r   v   s    	Z 	Zr   rI   rJ   c              3  J   "   T F  qP                   R 8X  g   K  Vx  K  	  R# 5i)rP   NrV   rW   s   & r   rZ   >test_a_symlinked_live_grant_is_never_probed.<locals>.<genexpr>|   s     NAFFg<Maar]   c              3  J   "   T F  qP                   R 8X  g   K  Vx  K  	  R# 5irU   rV   rW   s   & r   rZ   r   }   r\   r]   r'   r(   r)   r   r   r
   r   r^   r_   r`   ra   rb   rc   rd   r.   rf   py15rn   ro   rp   Nrs   )z%(py9)s
{%(py9)s = %(py5)s
{%(py5)s = (%(py0)s / %(py2)s).read_text
}(encoding=%(py7)s)
} == %(py17)s
{%(py17)s = %(py13)s
{%(py13)s = %(py11)s.dumps
}(%(py15)s)
})r    r1   rK   rv   rR   rw   rx   r.   r/   ry   rz   r{   r|   r}   r~   r   r   )r3   r   r"   r_   rI   r   r   r   r   r   @py_assert12r   r   r   r   r   s   &&              r   +test_a_symlinked_live_grant_is_never_probedr   n   sE    "Hh6J6;'Z Z >	JNNNOMMMN, ,, 77  7I TZZ 	='>?STZTN  N    I     J   J   ,   7      I     T   T   Z   T   N         r   c               $    V ^8  d   QhRRRRRR/# rN   r   )r   s   "r   r   r      s&      # 
r   c                    \        V4      pVP                  R R4      pVR,          P                  RRR7       \        VRR4       VP                  R,          pVP                  \
        RR7       \        V R4       VR	,          pV P                  R
VRR7       VP                  \        R VP                  4        4       4      4       VR,          pVP                  pRq! VR7      q\
        8H  q'       Eg8   \        P                  ! R'V
3R(V	\
        34      RR	\        P                  ! 4       9   g   \        P                   ! V4      '       d   \        P"                  ! V4      MR	R\        P"                  ! V4      R\        P"                  ! V4      R\        P"                  ! V	4      RR\        P                  ! 4       9   g!   \        P                   ! \
        4      '       d   \        P"                  ! \
        4      MR/,          pRRV/,          p\%        \        P&                  ! V4      4      hR;p;p;r\(        P*                  qvP(                  q! 4       qP,                  q! V4      pRpVV8H  pV'       Egv   \        P                  ! R'V3R)VV34      RR\        P                  ! 4       9   g!   \        P                   ! \(        4      '       d   \        P"                  ! \(        4      MRR\        P"                  ! V4      RR	\        P                  ! 4       9   g   \        P                   ! V4      '       d   \        P"                  ! V4      MR	R\        P"                  ! V4      R\        P"                  ! V4      R\        P"                  ! V4      R\        P"                  ! V4      R\        P"                  ! V4      /,          pR R!V/,          p\%        \        P&                  ! V4      4      hR;p;p;p;p;p;ppRqsV,          qP                  pRq! VR7      pRpVV8H  pV'       Eg
   \        P                  ! R'V3R*VV34      RR"\        P                  ! 4       9   g   \        P                   ! V4      '       d   \        P"                  ! V4      MR"R\        P"                  ! V4      R\        P"                  ! V4      R\        P"                  ! V4      R\        P"                  ! V4      R#\        P"                  ! V4      /,          pR$RV/,          p\%        \        P&                  ! V4      4      hR;p;p;p;p;p;ppVP.                  qw! 4       q'       g   R%RR&\        P                  ! 4       9   g   \        P                   ! V4      '       d   \        P"                  ! V4      MR&R\        P"                  ! V4      R\        P"                  ! V4      /,          p\%        \        P&                  ! V4      4      hR;rxR# )+unpinnedUnpinnedr'   z{}r(   r)   rR   rS   zstranger-uuidrescuez$account_registry.ROTATION_BACKUP_DIRF)raisingc              3  J   "   T F  qP                   R 8X  g   K  Vx  K  	  R# 5irU   rV   rW   s   & r   rZ   Htest_an_unclaimed_live_grant_is_rescued_not_destroyed.<locals>.<genexpr>   r\   r]   z(unclaimed-stranger-uuid.credentials.jsonr^   r`   rr   py6rj   re   zassert %(py10)srk   Nrg   rh   ri   ra   rb   rc   rd   rm   zassert %(py16)spy16unpinned_homerl   zassert %(py14)srq   r	   rs   )zX%(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.read_text
}(encoding=%(py4)s)
} == %(py8)s)z%(py11)s
{%(py11)s = %(py2)s
{%(py2)s = %(py0)s.S_IMODE
}(%(py9)s
{%(py9)s = %(py7)s
{%(py7)s = %(py5)s
{%(py5)s = %(py3)s.stat
}()
}.st_mode
})
} == %(py14)s)ze%(py9)s
{%(py9)s = %(py5)s
{%(py5)s = (%(py0)s / %(py2)s).read_text
}(encoding=%(py7)s)
} == %(py12)s)r    r+   r-   r1   r   re   rL   rK   rv   rR   rw   rx   ry   rz   r{   r|   r}   r~   r   r   rh   r   r   r   )r3   r   r"   r   r	   
rescue_dirr   r   r   @py_assert5r   @py_format9@py_format11r   r   r   r   r   r   r   @py_format17r   @py_format13r   s   &&                      r   5test_an_unclaimed_live_grant_is_rescued_not_destroyedr      sz    "H$$Z<M((44TG4L6;'&&)<<DOOK'O2;0H$J>
TYZMMMNDDF<W<W-<<<<<<-<<<<<<6<<<<6<<<<<<W<<<-<<<<<<<<<<<<<<<<<<<<777--7<-.7%7.%77777.%777777477774777<7777777777777777777-777.777%777777777/T//T::TGT:GLTPTTLPTTTTTTLPTTTTTTTMTTTTMTTT/TTT:TTTGTTTLTTTPTTTTTTTTTT???44?r   )#
__future__r   builtinsr{   _pytest.assertion.rewrite	assertionrewritery   r.   rh   syspathlibr   pytestpathinsertr$   __file__resolveparentsaccount_registryr   r   claude_credentialsr   r/   re   r    r1   rL   r   r   r   r   r   r   r   r   <module>r      s    "     
   3tH~--/77:; < A /jj}fnnMN
	K$`0$,r   