
    4juK                       d Z ddlmZ ddlZddlmc m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(                  d   Z ee      ej.                  vr"ej.                  j1                  d ee             ddlmZ ddlmZmZmZ dd	lm Z! dd
l"m#Z# edz  dz  Z$edz  dz  Z%edz  dz  Z&edz  dz  Z'edz  dz  Z(dZ)d Z* ejV                         d        Z,d Z-d Z.d Z/d Z0d Z1d Z2d Z3d Z4d Z5d  Z6d! Z7d" Z8d# Z9d$ Z:d% Z;d& Z<d' Z=d( Z>d) Z?d* Z@d+ ZAd, ZBd- ZCej                  j                  d.g d/      d0        ZFy)1u  test_branch_ref_allocator_2553plus9.py — task-2553+9 regression.

§8 필수 16 + §9-R.5 추가 6 = **총 22**. branch-collision-safe activation
refinement: collision-safe allocator (read-only, loop-until-clean, 강제
reset 0) + runner 4-primitive isolated-worktree 재타겟 + fail-closed
preflight + live workspace 불변.

전부 부작용 0 — collision 시뮬레이션은 **tmp sandbox git repo** 에서만
수행하고 live workspace 는 정적(AST/grep) + read-only 로만 검사한다.
실 git mutation / PR open / live 변형 0.
    )annotationsN)Path)mock   )branch_ref_allocator)STATUS_ALLOCATEDSTATUS_HOLDallocate_branch) pre_authorized_activation_runner)TASK_2553P1_EFFECTIVE_DIFF_6anu_v3zbranch_ref_allocator.pyz#pre_authorized_activation_runner.pyscriptszrun_branch_ref_allocator.pyschemasz(branch_allocation_provenance.schema.jsonmemoryfixturesz%task/task-2553p1-f1-clean-replacementc                    t        j                  ddt        |       g|ddd      j                  j	                         S )Ngitz-CT)capture_outputtextcheck)
subprocessrunstrstdoutstrip)repoargss     K/home/jay/workspace/tests/regression/test_branch_ref_allocator_2553plus9.py_gitr   /   s:    >>	c$i'$'$d fUUW    c           	        | dz  }|j                          t        |dddd       t        |ddd       t        |dd	d
       |dz  j                  d       t        |dd       t        |ddd       t        |dd      }| dz  }t        j                  ddddt        |      gd       t        |dddt        |             |||fS )uA   격리 sandbox: main + 1 commit. live workspace 절대 무참조.r   init-qz-bmainconfigz
user.emailzt@tz	user.nametzf.txtzx
addz-Acommitz-qm	rev-parseHEADz
origin.gitr   z--bareT)r   remoteorigin)mkdirr   
write_textr   r   r   )tmp_pathr   shar,   s       r   sandboxr1   6   s     fDJJLvtT6*xu-xc*	G^&udx'
t[&
)C$FNN	hF4D 	x#f+6fr    c           	     H   | \  }}}t        |dt               t        |ddt               t        |ddt               }t        |t        |      }|d   }|t        k(  }|st	        j
                  d|fd	|t        f      t	        j                  |      d
t        j                         v st	        j                  t              rt	        j                  t              nd
dz  }dd|iz  }	t        t	        j                  |	            dx}}|d   }d}
||
u }|slt	        j
                  d|fd||
f      t	        j                  |      t	        j                  |
      dz  }dd|iz  }t        t	        j                  |            dx}x}}
|d   d   }d}
||
u }|slt	        j
                  d|fd||
f      t	        j                  |      t	        j                  |
      dz  }dd|iz  }t        t	        j                  |            dx}x}}
|d   }|t        k7  }|st	        j
                  d|fd|t        f      t	        j                  |      dt        j                         v st	        j                  t              rt	        j                  t              nddz  }dd|iz  }	t        t	        j                  |	            dx}}|d   }|j                  }d}t        |z   } ||      }|sdt	        j                  |      t	        j                  |      dt        j                         v st	        j                  t              rt	        j                  t              ndt	        j                  |      t	        j                  |      dz  }t        t	        j                  |            dx}x}x}x}}|d   }d }
||
k(  }|slt	        j
                  d|fd!||
f      t	        j                  |      t	        j                  |
      dz  }dd|iz  }t        t	        j                  |            dx}x}}
d}dt         }t        |||      }||k(  }|sKt	        j
                  d|fd"||f      d#t        j                         v st	        j                  t               rt	        j                  t               nd#d$t        j                         v st	        j                  |      rt	        j                  |      nd$t	        j                  |      t	        j                  |      t	        j                  |      d%t        j                         v st	        j                  |      rt	        j                  |      nd%d&z  }d'd(|iz  }t        t	        j                  |            dx}x}x}}y))up   1. target branch 가 live workspace 에 checked-out → allocator 가
    새 branch 할당, 기존 ref reset 0.branchcheckoutr#   r)   refs/heads/base_shastatus==z%(py1)s == %(py3)sr   py1py3assert %(py5)spy5Ncollision_detectedTisz%(py1)s is %(py4)sr=   py4assert %(py6)spy6sources_checkedworktreeallocated_branch_name!=z%(py1)s != %(py3)sBASE-zXassert %(py9)s
{%(py9)s = %(py3)s
{%(py3)s = %(py1)s.startswith
}((%(py4)s + %(py6)s))
})r=   r>   rF   rH   py9chosen_strategysuffixedz%(py1)s == %(py4)szB%(py7)s
{%(py7)s = %(py0)s(%(py1)s, %(py3)s, %(py5)s)
} == %(py9)sr   r   
ref_beforepy0r=   r>   r@   py7rQ   assert %(py11)spy11)r   rO   r
   r   
@pytest_ar_call_reprcompare	_saferepr@py_builtinslocals_should_repr_global_nameAssertionError_format_explanation
startswith)r1   r   r0   _rV   r@py_assert0@py_assert2@py_format4@py_format6@py_assert3@py_format5@py_format7@py_assert5@py_assert7@py_assert8@py_format10@py_assert4@py_assert6@py_format12s                       r   =test_01_target_checked_out_live_allocator_new_branch_no_resetru   N   sp    LD#qxz4&dK;tf)=>JdS1AX;*;*****;****;******************!"*d*"d****"d***"***d*******
+3t3+t3333+t333+333t3333333$%-%----%---%----------------$%<%00<<<0<<<<<%<<<0<<<<<<<<<<<<<<<<<<<<<<<-:-:----:------:-------!F[#7F4k#78F8JFFFF8JFFFFFF4FFF4FFFFFFFFFFFFkFFF#7FFF8FFFFFFJFFFJFFFFFFFFr    c                B   | \  }}}t        |dt               t        |t        |      }|d   }|t        k(  }|st	        j
                  d|fd|t        f      t	        j                  |      dt        j                         v st	        j                  t              rt	        j                  t              nddz  }dd	|iz  }t        t	        j                  |            d
x}}|d   d   }d}	||	u }|slt	        j
                  d|fd||	f      t	        j                  |      t	        j                  |	      dz  }
dd|
iz  }t        t	        j                  |            d
x}x}}	|d   d   }d}	||	u }|slt	        j
                  d|fd||	f      t	        j                  |      t	        j                  |	      dz  }
dd|
iz  }t        t	        j                  |            d
x}x}}	|d   }|t        k7  }|st	        j
                  d|fd|t        f      t	        j                  |      dt        j                         v st	        j                  t              rt	        j                  t              nddz  }dd	|iz  }t        t	        j                  |            d
x}}|d   }d}	||	k(  }|slt	        j
                  d|fd||	f      t	        j                  |      t	        j                  |	      dz  }
dd|
iz  }t        t	        j                  |            d
x}x}}	y
)uK   2. target local 존재·미checkout → 정책상 안전 회피 allocation.r3   r6   r8   r9   r;   r   r<   r?   r@   NrI   localTrB   rD   rE   rG   rH   rJ   FrK   rL   rN   rO   rR   rS   rT   r   rO   r
   r   r\   r]   r^   r_   r`   ra   rb   rc   r1   r   r0   re   rf   rg   rh   ri   rj   rk   rl   rm   s               r   3test_02_target_local_not_checkedout_safe_allocationrz   `   s   LD#qxdS1AX;*;*****;****;******************(0D0(D0000(D000(000D0000000
+4u4+u4444+u444+444u4444444$%-%----%---%-----------------:-:----:------:-------r    c                   | \  }}}t        |dt               t        |dddt               t        |ddt               t        |t        |      }|d   }|t        k(  }|st	        j
                  d|fd	|t        f      t	        j                  |      d
t        j                         v st	        j                  t              rt	        j                  t              nd
dz  }dd|iz  }t        t	        j                  |            dx}}|d   d   }d}	||	u }|slt	        j
                  d|fd||	f      t	        j                  |      t	        j                  |	      dz  }
dd|
iz  }t        t	        j                  |            dx}x}}	|d   d   }d}	||	u }|slt	        j
                  d|fd||	f      t	        j                  |      t	        j                  |	      dz  }
dd|
iz  }t        t	        j                  |            dx}x}}	|d   }d}	||	k(  }|slt	        j
                  d|fd||	f      t	        j                  |      t	        j                  |	      dz  }
dd|
iz  }t        t	        j                  |            dx}x}}	|d   }|t        k7  }|st	        j
                  d|fd|t        f      t	        j                  |      dt        j                         v st	        j                  t              rt	        j                  t              nddz  }dd|iz  }t        t	        j                  |            dx}}y) u=   3. target remote 존재 → collision-safe suffix allocation.r3   pushr#   r,   -Dr6   r8   r9   r;   r   r<   r?   r@   NrI   r+   TrB   rD   rE   rG   rH   rw   FrR   rS   rT   rK   rL   rN   rO   rx   ry   s               r   +test_03_target_remote_collision_safe_suffixr~   l   s   LD#qxvtXt,xt$dS1AX;*;*****;****;******************)1T1)T1111)T111)111T1111111(1E1(E1111(E111(111E1111111-:-:----:------:-------$%-%----%---%----------------r    c                   | \  }}}t        |t        |      }|d   }|t        k(  }|st        j                  d|fd|t        f      t        j
                  |      dt        j                         v st        j                  t              rt        j
                  t              nddz  }dd|iz  }t        t        j                  |            d	x}}|d
   }d}	||	u }|slt        j                  d|fd||	f      t        j
                  |      t        j
                  |	      dz  }
dd|
iz  }t        t        j                  |            d	x}x}}	|d   }|t        k(  }|st        j                  d|fd|t        f      t        j
                  |      dt        j                         v st        j                  t              rt        j
                  t              nddz  }dd|iz  }t        t        j                  |            d	x}}|d   }d}	||	k(  }|slt        j                  d|fd||	f      t        j
                  |      t        j
                  |	      dz  }
dd|
iz  }t        t        j                  |            d	x}x}}	|d   }d	}	||	u }|slt        j                  d|fd||	f      t        j
                  |      t        j
                  |	      dz  }
dd|
iz  }t        t        j                  |            d	x}x}}	y	)u4   4. 미충돌 → deterministic base name (suffix 0).r6   r8   r9   r;   r   r<   r?   r@   NrA   FrB   rD   rE   rG   rH   rK   rO   rR   baserT   runid)r
   rO   r   r\   r]   r^   r_   r`   ra   rb   rc   ry   s               r   'test_04_no_collision_deterministic_namer   z   s   LD#qdS1AX;*;*****;****;******************!"+e+"e++++"e+++"+++e+++++++$%-%----%---%----------------)6)6))))6))))))6)))))))W::::r    c                   | \  }}}t        |t        |      }t        j                  t        j                               }|d   D ]  }||v }|st        j                  d|fd||f      dt        j                         v st        j                  |      rt        j                  |      nddt        j                         v st        j                  |      rt        j                  |      nddz  }t        j                  d|       d	z   d
|iz  }	t        t        j                  |	            d} |d   }t        |      }
h d}|
|k(  }|st        j                  d|fd|
|f      dt        j                         v st        j                  t              rt        j                  t              ndt        j                  |      t        j                  |
      t        j                  |      dz  }dd|iz  }t        t        j                  |            dx}x}
x}}|d   }||k(  }|st        j                  d|fd||f      t        j                  |      dt        j                         v st        j                  |      rt        j                  |      nddz  }dd|iz  }t        t        j                  |            dx}}|d   }d}
||
v }|slt        j                  d|fd||
f      t        j                  |      t        j                  |
      dz  }	dd|	iz  }t        t        j                  |            dx}x}}
y) uC   5. branch allocation provenance 기록 (schema 7-field 1:1, 9-R.6).r6   requiredin)z%(py0)s in %(py2)sfrf   rX   py2u   provenance 누락 필드: 
>assert %(py4)srF   NrI   >   rw   r+   rJ   r9   )z0%(py4)s
{%(py4)s = %(py0)s(%(py2)s)
} == %(py7)sset)rX   r   rF   rY   assert %(py9)srQ   r7   r;   r0   r<   r?   r@   rR   )r   rS   )z%(py1)s in %(py4)srE   rG   rH   )r
   rO   jsonloadsSCHEMA	read_textr\   r]   r_   r`   ra   r^   _format_assertmsgrb   rc   r   )r1   r   r0   re   rf   schr   @py_assert1@py_format3rl   rk   rs   rn   @py_format8rq   rg   rh   ri   rj   rm   s                       r   'test_05_provenance_recorded_schema_1to1r      s    LD#qdS1A
**V%%'
(C_ 8Av777qA777777q777q777777A777A77773A377777778"#G3#$G(GG$(GGGGG$(GGGGGGG3GGG3GGG#GGG$GGG(GGGGGGGGZ==C=C=CC7#77#77777#7777777#77777777r    c           	     &   | \  }}}t        |dd      }t        |t        |       d}d}t        |||      }||k(  }|sKt        j                  d|fd||f      dt        j                         v st        j                  t               rt        j                  t               nddt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      t        j                  |      dt        j                         v st        j                  |      rt        j                  |      ndd	z  }	d
d|	iz  }
t        t        j                  |
            dx}x}x}}y)u5   6. allocate 전후 sandbox(=live 대역) HEAD 불변.r)   r*   r6   r9   rU   r   r   h0rW   rZ   r[   N)r   r
   rO   r\   r]   r_   r`   ra   r^   rb   rc   )r1   r   r0   re   r   rh   rr   rs   rp   rq   rt   s              r   %test_06_live_workspace_head_unchangedr      s    LD#q	dK	(BD$-!0604k6*0*b0000*b00000040004000000000000k0006000*000000b000b00000000r    c           	     H   | \  }}}t        |dt               t        |dd      }t        |t        |       d}d}t        |||      }||k(  }|sKt        j                  d|fd||f      dt        j                         v st        j                  t               rt        j                  t               nddt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      t        j                  |      d	t        j                         v st        j                  |      rt        j                  |      nd	d
z  }	dd|	iz  }
t        t        j                  |
            dx}x}x}}y)uI   7. allocate 전후 branch ref 집합 불변 (allocator 가 ref 생성 0).r3   zfor-each-refz!--format=%(refname) %(objectname)r6   r9   rU   r   r   refs0rW   rZ   r[   N)r   rO   r
   r\   r]   r_   r`   ra   r^   rb   rc   )r1   r   r0   re   r   rh   rr   rs   rp   rq   rt   s              r   +test_07_live_workspace_branch_ref_unchangedr      s   LD#qx~'JKED$-A4nA  	    	      Y      	 Y 	 Y  Y B Y     Y      r    c                    t         j                         } g }d}|| v }|}|rd}|| v }|}|sXt        j                  d|fd|| f      t        j                  |      dt        j                         v st        j                  |       rt        j                  |       nddz  }dd|iz  }|j                  |       |rt        j                  dfd	| f      t        j                  |      dt        j                         v st        j                  |       rt        j                  |       ndd
z  }	dd|	iz  }
|j                  |
       t        j                  |d      i z  }dd|iz  }t        t        j                  |            dx}x}x}x}x}}d}t        j                  }||v}|st        j                  d|fd||f      t        j                  |      dt        j                         v st        j                  t              rt        j                  t              ndt        j                  |      dz  }dd|iz  }t        t        j                  |            dx}x}}y)uQ   8. same/source-branch push 불가 — runner push primitive 가드 정적 존재.ztask/task-2553-dev5u   push 거부r   )z%(py3)s in %(py5)ssrcr>   r@   %(py7)srY   )z%(py10)s in %(py12)spy10py12%(py14)spy14r   assert %(py17)spy17Nr|   not in)z?%(py1)s not in %(py5)s
{%(py5)s = %(py3)s.READ_ONLY_GIT_VERBS
}BRAr=   r>   r@   assert %(py7)s)
RUNNER_SRCr   r\   r]   r^   r_   r`   ra   append_format_booloprb   rc   r   READ_ONLY_GIT_VERBS)r   r   rh   rr   rg   @py_assert9@py_assert11rj   r   @py_format13@py_format15@py_format16@py_format18s                r   #test_08_same_branch_push_impossibler      sK   



 C@ @ C'@M@MS,@@@@@ C@@@ @@@@@@C@@@C@@@@@@@MS@@@M@@@@@@S@@@S@@@@@@@@@@@@@@000060000060000600000000000000000000r    c                 R   t         t        fD ]  } | j                         j                         }g }d}||v}|}|rd}||v}|}|sXt	        j
                  d|fd||f      t	        j                  |      dt        j                         v st	        j                  |      rt	        j                  |      nddz  }dd|iz  }	|j                  |	       |rt	        j
                  dfd	|f      t	        j                  |      dt        j                         v st	        j                  |      rt	        j                  |      ndd
z  }
dd|
iz  }|j                  |       t	        j                  |d      i z  }dd|iz  }t        t	        j                  |            dx}x}x}x}x}}g }d}||v}|}|rd}||v}|}|sXt	        j
                  d|fd||f      t	        j                  |      dt        j                         v st	        j                  |      rt	        j                  |      nddz  }dd|iz  }	|j                  |	       |rt	        j
                  d|fd	||f      t	        j                  |      dt        j                         v st	        j                  |      rt	        j                  |      ndd
z  }
dd|
iz  }|j                  |       t	        j                  |d      i z  }dd|iz  }t        t	        j                  |            dx}x}x}x}x}} y)uC   9. PR #102 원본 mutation 경로 부재 (allocator/runner 정적).zpr 102zpull/102r   z%(py3)s not in %(py5)ssr   r   rY   z%(py10)s not in %(py12)sr   r   r   r   r   r   Nz
gh pr editzgh pr close)	ALLOC_SRCr   r   lowerr\   r]   r^   r_   r`   ra   r   r   rb   rc   )pr   r   rh   rr   rg   r   r   rj   r   r   r   r   r   s                 r   #test_09_pr102_preserved_no_mutationr      s   $ @KKM!8x8xq 8Z8Zq%88888xq888x888888q888q8888888Zq888Z888888q888q88888888888888?|?|1$??a)?????|1???|??????1???1???????a?????????a???a??????????????@r    c            	        t        t              } t        |       }d}||k(  }|s[t        j                  d|fd||f      dt        j                         v st        j                  t              rt        j                  t              nddt        j                         v st        j                  t               rt        j                  t               nddt        j                         v st        j                  t              rt        j                  t              ndt        j                  |       t        j                  |      t        j                  |      dz  }dd	|iz  }t        t        j                  |            d
x} x}x}}t        j                         }d}||v }|st        j                  d|fd||f      t        j                  |      dt        j                         v st        j                  |      rt        j                  |      nddz  }	dd|	iz  }
t        t        j                  |
            d
x}}d}||v }|st        j                  d|fd||f      t        j                  |      dt        j                         v st        j                  |      rt        j                  |      nddz  }	dd|	iz  }
t        t        j                  |
            d
x}}y
)uM   10. effective_diff = 정확 6 파일 (constant 무결 + runner commit guard).   r9   )zN%(py6)s
{%(py6)s = %(py0)s(%(py4)s
{%(py4)s = %(py1)s(%(py2)s)
})
} == %(py9)slenr   r   )rX   r=   r   rF   rH   rQ   rZ   r[   Nu5   6 effective-diff 파일과 정확 일치하지 않음r   )z%(py1)s in %(py3)sr   r<   r?   r@   )r   r   r   r\   r]   r_   r`   ra   r^   rb   rc   r   r   )rk   rn   rp   ro   rq   rt   r   rg   rh   ri   rj   s              r    test_10_expected_files_six_exactr      s   /063016Q61Q66661Q66666636663666666s666s666666/666/66606661666Q6666666



 CBIBcIIIIBcIIIBIIIIIIcIIIcIIIIIII)0)S0000)S000)000000S000S0000000r    c                 h   t         j                         t        j                         z   j                         } g }d}|| v}|}|rd}|| v}|}|sXt	        j
                  d|fd|| f      t	        j                  |      dt        j                         v st	        j                  |       rt	        j                  |       nddz  }dd|iz  }|j                  |       |rt	        j
                  dfd	| f      t	        j                  |      dt        j                         v st	        j                  |       rt	        j                  |       ndd
z  }	dd|	iz  }
|j                  |
       t	        j                  |d      i z  }dd|iz  }t        t	        j                  |            dx}x}x}x}x}}y)u4   11. F2(token transport) 파일 변경 경로 부재.token_transportowner_trigger_tokenr   r   r   r   r   rY   r   r   r   r   r   r   r   N)r   r   r   r   r\   r]   r^   r_   r`   ra   r   r   rb   rc   )r   r   rh   rr   rg   r   r   rj   r   r   r   r   r   s                r   test_11_f2_unchanged_staticr      s    				!5!5!7	7>>@AHHA%H*?H*?q*HHHHHAHHHHHHHHHAHHHAHHHHHHH*?qHHH*?HHHHHHqHHHqHHHHHHHHHHHHHHr    c                 \   t         t        fD ]  } | j                         }d}||v}|st        j                  d|fd||f      t        j
                  |      dt        j                         v st        j                  |      rt        j
                  |      nddz  }dd|iz  }t        t        j                  |            dx}}d	}|j                  } |       }||v}|st        j                  d|fd
||f      t        j
                  |      dt        j                         v st        j                  |      rt        j
                  |      ndt        j
                  |      t        j
                  |      dz  }dd|iz  }	t        t        j                  |	            dx}x}x}} y)u7   12. phase3 / merge_queue_executor 변경 경로 부재.merge_queue_executorr   z%(py1)s not in %(py3)sr   r<   r?   r@   Nphase3)zH%(py1)s not in %(py7)s
{%(py7)s = %(py5)s
{%(py5)s = %(py3)s.lower
}()
})r=   r>   r@   rY   r   rQ   )r   r   r   r\   r]   r^   r_   r`   ra   rb   rc   r   )
r   r   rg   rh   ri   rj   rr   rs   r   rq   s
             r   #test_12_phase3_mqe_unchanged_staticr      s    $ )KKM%.%Q....%Q...%......Q...Q.......(qww(wy(xy((((xy(((x((((((q(((q(((w(((y((((((()r    c            	        t         t        fD ]]  } t        j                  | j	                               }t        j
                  |      D ]  }t        |t        j                        sdj                  d t        j
                  |      D              j                  dd      }g }d}||v}|}|rd}||v}	|	}|sXt        j                  d|fd||f      t        j                  |      dt        j                         v st        j                  |      rt        j                  |      ndd	z  }
d
d|
iz  }|j!                  |       |rt        j                  d	fd|f      t        j                  |      dt        j                         v st        j                  |      rt        j                  |      nddz  }dd|iz  }|j!                  |       t        j"                  |d      i z  }dd|iz  }t%        t        j&                  |            dx}x}x}x}x}}	d}||v}|st        j                  d|fd||f      t        j                  |      dt        j                         v st        j                  |      rt        j                  |      nddz  }dd|iz  }
t%        t        j&                  |
            dx}}d}||v}|st        j                  d|fd||f      t        j                  |      dt        j                         v st        j                  |      rt        j                  |      nddz  }dd|iz  }
t%        t        j&                  |
            dx}}! ` y)u=   13. merge 호출 경로 정적 부재 (allocator/runner AST). c              3     K   | ]R  }t        |t        j                        r6t        |j                  t              r|j                  j                          T y wN)
isinstanceastConstantvaluer   r   ).0as     r   	<genexpr>z1test_13_merge_path_unreachable.<locals>.<genexpr>   s=       !!S\\2z!''37O GGMMO s   AA 	ghprmergeprmerger   r   litsr   r   rY   r   r   r   r   r   r   r   Nz--autor   r<   r?   r@   merge_pull_request)r   r   r   parser   walkr   Calljoinreplacer\   r]   r^   r_   r`   ra   r   r   rb   rc   )r   treenoder   r   rh   rr   rg   r   r   rj   r   r   r   r   r   ri   s                    r   test_13_merge_path_unreachabler      s    $ 8yy'HHTN 		8D$)xx   XXd^   '#r"	 
 I{H{$.H9H9D3HHHHH{$HHH{HHHHHH$HHH$HHHHHHH9DHHH9HHHHHHDHHHDHHHHHHHHHHHHHH+xt++++xt+++x++++++t+++t++++++++7+47777+4777+777777477747777777		88r    c                    t        j                  t        j                               } t	               }t        j
                  |       D ]  }t        |t         j                        st        j
                  |      D cg c]B  }t        |t         j                        r&t        |j                  t              r|j                  D }}d|v s|j                  t        |dd               |D ]  }|dd }d}||k(  }|st        j                  d|fd||f      t        j                  |      t        j                  |      dz  }	t        j                   d|       d	z   d
|	iz  }
t#        t        j$                  |
            dx}x}} yc c}w )uD   14. PR-open 외 credential/API 호출 부재 (gh pr create 1종만).ghN   )r   prcreater9   rT   rE   u   비인가 gh 호출: 
>assert %(py6)srH   )r   r   r   r   r   r   r   r   r   r   r   r'   tupler\   r]   r^   r   rb   rc   )r   
gh_subcmdsr   r   r   r&   rg   rk   rh   rl   rm   s              r   1test_14_credential_api_beyond_pr_open_unreachabler      s'   99Z))+,DJ 0dCHH%!$$a.:aggs3K D  t|uT"1X/0  L!uK.Ku..KKKu.KKKuKKK.KKK2Gs0KKKKKKKKLs   <AF
c                 j   d} t        t        |       }|sddt        j                         v st	        j
                  t               rt	        j                  t               nddt        j                         v st	        j
                  t              rt	        j                  t              ndt	        j                  |       t	        j                  |      dz  }t        t	        j                  |            dx} }d} t        t        |       }|sddt        j                         v st	        j
                  t               rt	        j                  t               nddt        j                         v st	        j
                  t              rt	        j                  t              ndt	        j                  |       t	        j                  |      dz  }t        t	        j                  |            dx} }t        j                  dd	d
      }g }|d   } d}| |k(  }|}|r|d   }d}||u }	|	}|st	        j                  d|fd| |f      t	        j                  |       t	        j                  |      dz  }
dd|
iz  }|j                  |       |r_t	        j                  d	fdf      t	        j                  |      t	        j                  |      dz  }dd|iz  }|j                  |       t	        j                  |d      i z  }dd|iz  }t        t	        j                  |            dx}x}x} x}x}x}x}	}y)uO   15. callback (a) 등록 메커니즘 — collector_handoff/adjudication 존재.collector_handoffz5assert %(py5)s
{%(py5)s = %(py0)s(%(py1)s, %(py3)s)
}hasattrRUN)rX   r=   r>   r@   Nadjudication_hooktask-2553+9Xtask_idr8   	authoritycollector_onlyno_writeTr9   )z%(py3)s == %(py6)s)r>   rH   z%(py8)spy8rB   )z%(py11)s is %(py14)s)r[   r   z%(py16)spy16r   zassert %(py19)spy19)r   r   r_   r`   r\   ra   r^   rb   rc   r   r]   r   r   )rh   rr   rj   hr   rn   rg   @py_assert10@py_assert13@py_assert12rm   @py_format9r   @py_format17r   @py_format20s                   r   -test_15_callback_registered_mechanism_presentr     s   +,73+,,,,,,,,7,,,7,,,,,,3,,,3,,,+,,,,,,,,,,+,73+,,,,,,,,7,,,7,,,,,,3,,,3,,,+,,,,,,,,,,-3GHAG1[>G-G>--G!J-G4G-42GGGG>-GGG>GGG-GGGGGGG-4GGG-GGG4GGGGGGGGGGGGGGr    c                 R   t        j                  dt         j                  dddd      } | d   }d}||u }|slt        j                  d|fd	||f      t        j
                  |      t        j
                  |      d
z  }dd|iz  }t        t        j                  |            dx}x}}| d   }d}||u }|slt        j                  d|fd	||f      t        j
                  |      t        j
                  |      d
z  }dd|iz  }t        t        j                  |            dx}x}}| d   }d}||u }|slt        j                  d|fd	||f      t        j
                  |      t        j
                  |      d
z  }dd|iz  }t        t        j                  |            dx}x}}y)u<   16. Codex audit / ANU-Codex adjudication loop 종결 산출.r   r   PASSr   )verdictunresolved_highcodex_audit_attachedTrB   rD   rE   rG   rH   Nauto_converge_eligiblecritical_7_detectedF)r   r   STATUS_DRY_RUN_VERIFIEDr\   r]   r^   rb   rc   )adjrg   rk   rh   rl   rm   s         r   /test_16_codex_audit_adjudication_loop_completesr     s#   


!S-H-HIq1C %&.$.&$....&$...&...$.......'(0D0(D0000(D000(000D0000000$%..%....%...%..........r    c            	     j   ddl } ddl}t        j                         }t        j                         }dD ]  }||v}|st        j                  d|fd||f      dt        j                         v st        j                  |      rt        j                  |      nddt        j                         v st        j                  |      rt        j                  |      nddz  }t        j                  d	|       d
z   d|iz  }t        t        j                  |            d}||v}|st        j                  d|fd||f      dt        j                         v st        j                  |      rt        j                  |      nddt        j                         v st        j                  |      rt        j                  |      nddz  }t        j                  d|       d
z   d|iz  }t        t        j                  |            d} t        j                  |      dffD ]$  \  }}	t        j                   |      D ]  }
t#        |
t        j$                        st        j                   |
      D cg c]B  }t#        |t        j&                        r&t#        |j(                  t*              r|j(                  D }}dj-                  |      }d|v rd|v rt/        j0                  |	 d|        d|v r*t3        d |D              rt/        j0                  |	 d       d|v s
d|v sd|v st/        j0                  |	 d        ' | sedddt        j                         v st        j                  |       rt        j                  |       ndiz  }t        t        j                  |            yc c}w )uy   17. live-repo checkout -B / reset / clean / stash / rm / unlink /
    rmtree 정적 부재 (isolated wt 외). AST + grep.r   N)zshutil.rmtreez	os.unlinkz	os.removezPath.unlinkz.rmdir(r   )z%(py0)s not in %(py2)sbadrunnerr   u   runner 파괴 op: r   rF   allocu   allocator 파괴 op: r   r4   z-Bu"   : live checkout -B 호출 잔존: resetc              3  $   K   | ]  }d |v  
 yw)z--hardN r   xs     r   r   zBtest_17_live_repo_destructive_ops_static_absent.<locals>.<genexpr>  s     *GQ8q=*G   u   : reset --hard 호출 잔존stashcleanz-fdu   : stash/clean 호출 잔존zassert %(py0)srX   os)r  shutilr   r   r   r\   r]   r_   r`   ra   r^   r   rb   rc   r   r   r   r   r   r   r   r   r   pytestfailany)r  r  r  r  r  r   r   rl   tree_srcnamer   r   r   joined@py_format1s                  r   /test_17_live_repo_destructive_ops_static_absentr$     sm    !!#F!ET ?& <<<s&<<<<<<s<<<s<<<<<<&<<<&<<<<$6se"<<<<<<<%>>>s%>>>>>>s>>>s>>>>>>%>>>%>>>>#8!>>>>>>>?
  IIf-x8: F$HHX& 	FD$)%(XXd^ !!!S\\2z!''37O GG  $%$$,KK4&(J4& QRd?s*G$*G'GKK4&(D EFd?w$5F?KK4&(C DE	FF IIIII2III2IIIII2s   2AN0c                   | \  }}}t        |dt               t        g d      t        |dt         d       t        |t        |fd      }|d   }|t        k(  }|st        j                  d|fd|t        f      t        j                  |      d	t        j                         v st        j                  t              rt        j                  t              nd	d
z  }dd|iz  }t        t        j                  |            dx}}|d   }t         d}	||	k(  }|slt        j                  d|fd||	f      t        j                  |      t        j                  |	      dz  }
dd|
iz  }t        t        j                  |            dx}x}}	|d   }d}	||	k\  }|slt        j                  d|fd||	f      t        j                  |      t        j                  |	      dz  }
dd|
iz  }t        t        j                  |            dx}x}}	|d   d   }d}	||	u }|slt        j                  d|fd||	f      t        j                  |      t        j                  |	      dz  }
dd|
iz  }t        t        j                  |            dx}x}}	ddlm}m}m} |d   } ||      }||v}|st        j                  d|fd ||f      d!t        j                         v st        j                  |      rt        j                  |      nd!d"t        j                         v st        j                  |      rt        j                  |      nd"d#t        j                         v st        j                  |      rt        j                  |      nd#t        j                  |      d$z  }d%d&|iz  }t        t        j                  |            dx}} |||      }	d'}|	|u }|s/t        j                  d|fd(|	|f      d)t        j                         v st        j                  |      rt        j                  |      nd)d#t        j                         v st        j                  |      rt        j                  |      nd#d!t        j                         v st        j                  |      rt        j                  |      nd!t        j                  |	      t        j                  |      d*z  }d+d,|iz  }t        t        j                  |            dx}	x}} |||      }	d'}|	|u }|s/t        j                  d|fd(|	|f      d-t        j                         v st        j                  |      rt        j                  |      nd-d#t        j                         v st        j                  |      rt        j                  |      nd#d!t        j                         v st        j                  |      rt        j                  |      nd!t        j                  |	      t        j                  |      d*z  }d+d,|iz  }t        t        j                  |            dx}	x}}y).uY   18. 1차 후보 충돌 → 재생성 → 전 source absent 확인 (확률 방어 금지).r3   )dup0000dup000r&  cleanrunid999z-dup0000dup000c                     t               S r   )next)seqs   r   <lambda>z@test_18_allocator_loop_until_clean_regenerates.<locals>.<lambda>'  s    S	 r    )r7   runid_factoryr8   r9   r;   r   r<   r?   r@   NrK   z-cleanrunid999rT   rE   rG   rH   attemptsr   )>=)z%(py1)s >= %(py4)srI   rw   TrB   rD   r   )list_checked_out_brancheslocal_ref_existsremote_ref_existsr   )z4%(py0)s not in %(py5)s
{%(py5)s = %(py2)s(%(py3)s)
}
alloc_namer/  r   )rX   r   r>   r@   r   rY   F)z9%(py4)s
{%(py4)s = %(py0)s(%(py1)s, %(py2)s)
} is %(py7)sr0  )rX   r=   r   rF   rY   r   rQ   r1  )r   rO   iterr
   r   r\   r]   r^   r_   r`   ra   rb   rc   anu_v3.branch_ref_allocatorr/  r0  r1  )r1   r   r0   re   rf   rg   rh   ri   rj   rk   rl   rm   r/  r0  r1  r2  rr   r   r   rs   rn   rq   r*  s                         @r   .test_18_allocator_loop_until_clean_regeneratesr5    s   LD#qx
B
CCxD601dS0A	A X;*;*****;****;******************$%@D6)@@%)@@@@@%)@@@@%@@@)@@@@@@@@Z=A=A=A=A(0D0(D0000(D000(000D0000000  *+J6t<<:<<<<<:<<<<<<<:<<<:<<<<<<6<<<6<<<<<<t<<<t<<<<<<<<<<<D*-66-6666-666666666666666D666D666666*666*666-6666666666T:.7%7.%7777.%777777777777777T777T777777:777:777.777%7777777r    c                Z   | \  }}}t        |dt               t        |dt         d       t        |t        |dd       }|d   }|t        k(  }|st	        j
                  d|fd|t        f      t	        j                  |      d	t        j                         v st	        j                  t              rt	        j                  t              nd	d
z  }dd|iz  }t        t	        j                  |            dx}}|d   }d}	||	k(  }|slt	        j
                  d|fd||	f      t	        j                  |      t	        j                  |	      dz  }
dd|
iz  }t        t	        j                  |            dx}x}}	d |d   D        }t        |      }	|	sddt        j                         v st	        j                  t              rt	        j                  t              ndt	        j                  |      t	        j                  |	      dz  }
t        t	        j                  |
            dx}}	y)u@   18b. max_attempts 내 clean 미발견 → HOLD (강제 reset 0).r3   z-xr   c                      y)Nr  r  r  r    r   r+  z/test_18b_loop_exhausted_holds.<locals>.<lambda>>  s    r    )r7   max_attemptsr,  r8   r9   r;   r	   r<   r?   r@   NrK   r   rT   rE   rG   rH   c              3  $   K   | ]  }d |v  
 yw)zclean unique branchNr  r  s     r   r   z0test_18b_loop_exhausted_holds.<locals>.<genexpr>B  s     Ea$)Er  hold_reasons,assert %(py4)s
{%(py4)s = %(py0)s(%(py2)s)
}r  rX   r   rF   )r   rO   r
   r	   r\   r]   r^   r_   r`   ra   rb   rc   r  )r1   r   r0   re   rf   rg   rh   ri   rj   rk   rl   rm   r   s                r   test_18b_loop_exhausted_holdsr=  8  sV   LD#qxxD6%dSq	A X;%;+%%%%;+%%%;%%%%%%+%%%+%%%%%%%$%++%++++%+++%++++++++++E1^3DEE3EEEEEEEEE3EEE3EEEEEEEEEEEEEEr    c           	     d   | \  }}}t        |dt               t        |ddt               t        |dd      }t        d      D ]  }t        |t        |        t        |dd      }||k(  }|st	        j
                  d|fd	||f      d
t        j                         v st	        j                  |      rt	        j                  |      nd
dt        j                         v st	        j                  |      rt	        j                  |      nddz  }dd|iz  }t        t	        j                  |            d}d}	d}
t        ||	|
      }|t        k(  }|sWt	        j
                  d|fd|t        f      dt        j                         v st	        j                  t               rt	        j                  t               nddt        j                         v st	        j                  |      rt	        j                  |      ndt	        j                  |	      t	        j                  |
      t	        j                  |      dt        j                         v st	        j                  t              rt	        j                  t              nddz  }dd|iz  }t        t	        j                  |            dx}	x}
x}}y)uH   19. pre/post live workspace HEAD sha assertEqual (직접 불변 증명).r3   r4   r#   r)   r*   r   r6   r9   )z%(py0)s == %(py2)sprepostr   zassert %(py4)srF   Nz--show-currentrU   r   r   rO   rW   rZ   r[   )r   rO   ranger
   r\   r]   r_   r`   ra   r^   rb   rc   )r1   r   r0   re   r?  r@  r   r   rl   rh   rr   rs   rp   rq   rt   s                  r   'test_19_pre_post_live_head_assert_equalrB  E  s   LD#qxz4&
t[&
)C1X 2dS12k6*D$;3$33$$9 094h 0191T99991T99999949994999999999999h999 09991999999T999T99999999r    c                2   | \  }}}dg id }d }fd}t         j                  j                  t        d|      5  t         j                  j                  t        d|      5  t         j                  j                  t        d|      5  t         j                  j                  t        dd	       5  t         j                  j                  t        d
d       5  t        j                  t        |      ddidt        |d      }ddd       ddd       ddd       ddd       ddd       d   }|sNt        j                  d      dz   dt        j                  |      iz  }	t        t        j                  |	            d}d   }t        j                  }
||
k(  }|st        j                  d|fd||
f      t        j                  |      dt        j                         v st        j                   t              rt        j                  t              ndt        j                  |
      dz  }dd|iz  }t        t        j                  |            dx}x}}
y# 1 sw Y   YxY w# 1 sw Y   ^xY w# 1 sw Y   cxY w# 1 sw Y   hxY w# 1 sw Y   mxY w)uS   20. isolated worktree 실패·예외 시에도 finally 로 제거 (live 무영향).removec                >    t        |      j                  dd       |S )NT)parentsexist_ok)r   r-   )repo_iso_pathr7   	allocateds       r   fake_createzKtest_20_isolated_worktree_finally_removed_on_exception.<locals>.fake_createW  s    XTD9r    c                ,    t        j                  d      )Nu   simulated replay 실패)r   RunnerError)rH  rI  s     r   fake_replayzKtest_20_isolated_worktree_finally_removed_on_exception.<locals>.fake_replay[  s    oo788r    c                @    d   j                  t        |             y )NrD  )r   r   )rH  rI  callss     r   fake_removezKtest_20_isolated_worktree_finally_removed_on_exception.<locals>.fake_remove^  s    hs8}-r    _create_isolated_worktree_replay_six_file_delta_remove_isolated_worktree_allocate_branchc                     t         | dddg dS )Nz-deadbeef0000Tdeadbeef0000)r8   rK   rA   r   r:  )r   )rf   nr7   s      r   r+  zHtest_20_isolated_worktree_finally_removed_on_exception.<locals>.<lambda>f  s    +-.C}*='+n!#	% r    _list_checked_out_branchesc                    i S r   r  )rf   s    r   r+  zHtest_20_isolated_worktree_finally_removed_on_exception.<locals>.<lambda>m  s     r    r   r   N)r   r   r   
new_branchr7   hold_out_pathu(   finally 에서 worktree 제거 미호출z
>assert %(py1)sr=   r8   r9   )z3%(py1)s == %(py5)s
{%(py5)s = %(py3)s.STATUS_HOLD
}r   r   r   rY   )r   patchobjectr   _activate_real_writer   rO   r\   r   r^   rb   rc   r	   r]   r_   r`   ra   )r1   r   r0   re   rK  rN  rQ  outrg   @py_format2rr   rh   rj   r   rP  s                 @r   6test_20_isolated_worktree_finally_removed_on_exceptionrb  R  s   LD#qrNE9. 
		3 ;[	I 
			3 8+	F
			3 ;[	I
 
		$

 
		3 <l	K
 &&d9m"<!dS

 
 
 
 
$ ?F?FFFFFF?FFFFFx=+COO+=O++++=O+++=++++++C+++C+++O+++++++'
 
 
 
 
 
 
 
 
 
sk   &J"&I?'I2/'I%	+II%		I2I?JI"I%	%I/*I22I<7I??J		JJc                   | \  }}}t        |dt               t        d      D ch c]  }t        |t        |      d    }}t	        |      }d}||k(  }|st        j                  d|fd||f      dt        j                         v st        j                  t              rt        j                  t              nddt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      d	z  }d
d|iz  }	t        t        j                  |	            dx}x}}d |D        }
t        |
      }|sddt        j                         v st        j                  t              rt        j                  t              ndt        j                  |
      t        j                  |      dz  }t        t        j                  |            dx}
}yc c}w )u   21. runid uniqueness — 동일 입력 재실행 시 매번 신규 suffix
    (동일 branch 재사용 → 중복 PR open 0 보장의 토대).r3      r6   rK   r9   )z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py6)sr   names)rX   r=   r>   rH   zassert %(py8)sr   Nc              3  L   K   | ]  }|j                  t        d z           yw)rP   N)rd   rO   )r   rX  s     r   r   z7test_21_runid_uniqueness_idempotency.<locals>.<genexpr>  s     7Aq||D3J'7s   "$r;  allr<  )r   rO   rA  r
   r   r\   r]   r_   r`   ra   r^   rb   rc   rg  )r1   r   r0   re   re  rh   rn   rr   rm   r  r   rk   rl   s                r   $test_21_runid_uniqueness_idempotencyrh  w  s>    LD#qx q 	dS12IJE  u::?:33uu:77737777777773777377777777777777s   Hc                   | \  }}}t        |dt               g t        j                  fd}t	        j
                  d|      5  t        |t        |       ddd       h d}D ]  }t        |      dkD  r|d   nd}t        j                  }||v }	|	st        j                  d	|	fd
||f      dt        j                         v st        j                  |      rt        j                  |      nddt        j                         v st        j                  t              rt        j                  t              ndt        j                  |      dz  }
t        j                   d|       dz   d|
iz  }t#        t        j$                  |            dx}	}g }	||v}|}|s	d}||k(  }|}|st        j                  d|fd||f      dt        j                         v st        j                  |      rt        j                  |      nddt        j                         v st        j                  |      rt        j                  |      nddz  }
dd|
iz  }|	j'                  |       |st        j                  dfd|f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      dz  }dd|iz  }|	j'                  |       t        j(                  |	d      i z  }t        j                   d|       dz   d|iz  }t#        t        j$                  |            dx}x}	x}x}}|dk(  s|d    }d!}||k(  }|st        j                  d|fd"||f      t        j                  |      t        j                  |      d#z  }
t        j                   d$|       dz   d|
iz  }t#        t        j$                  |            dx}x}} y# 1 sw Y   xY w)%uJ   22. allocator read-only 증명 — git-write verb 호출 0 (detection만).r3   c                    t        | t        t        f      r$| r"| d   dk(  rj                  t        |               | g|i |S )Nr   r   )r   listr   r   )cmdr   krealseens      r   spyz5test_22_allocator_read_only_no_git_write.<locals>.spy  sB    cD%=)cc!foKKS	"C!!!q!!r    z*anu_v3.branch_ref_allocator.subprocess.runr6   N>   rmr'   tagpullr|   r  fetchmerger  r  r3   r(   r4   rJ   r   r   r   )z;%(py0)s in %(py4)s
{%(py4)s = %(py2)s.READ_ONLY_GIT_VERBS
}verbr   r<  u   비read-only git: r   rH   rJ   r   )z%(py2)s not in %(py4)swrite_verbs)r   rF   z%(py6)sr9   )z%(py8)s == %(py11)s)r   r[   z%(py13)spy13   u   git-write verb 호출: z
>assert %(py16)sr      rk  rT   rE   u   worktree 비-list 호출: )r   rO   r   r   r   r]  r
   r   r   r   r\   r]   r_   r`   ra   r^   r   rb   rc   r   r   )r1   r   r0   re   rp  rw  rl  rv  rk   r   rl   rm   rg   r   r   rt   @py_format14r   r  rh   rn  ro  s                       @@r   (test_22_allocator_read_only_no_git_writer|    s   LD#qxD>>D"
 
@#	F 2dS12K  HSAs1v2..Jt..JJJt.JJJJJJtJJJtJJJJJJsJJJsJJJ.JJJ2DSE0JJJJJJJ	
t;& 	
* 	
$**< 	
 	
 	
t; 	
 	
	6	
 	
   	
 	
 		  	
 	
	6	
 	
  ' 	
 	
 		 ' 	
 	
 	
	6	
		
 	
$* 	
 	
	6	
 	
  +/ 	
 	
 		 +/ 	
 	
 		 3= 	
 	
 	
	6	
		
 	
 	
  &dV,	
 	
 	
 	
 	
 	
 :q6GVG6V#GGG6VGGG6GGGVGGG'A#%GGGGGGGGH2 2s   O99Pfname)&branch_alloc_live_checkedout_collision!branch_alloc_local_not_checkedoutbranch_alloc_remote_conflictbranch_alloc_no_collisionc           	     	   | \  }}}t        j                  t        | dz  j                               }|d   }|d   s
|d   s|d   rt	        |dt
               |d   rt	        |ddd	t
               |d   rt	        |d
dt
               n|d   s|d   s	 |d   r%|d   s t	        |d
dd       t	        |ddt
               d}|d   rt	        |ddt
               }t        |t
        |      }|d   }	|d   }
|
t        k(  }|st        j                  d|fd|
t        f      t        j                  |
      dt        j                         v st        j                  t              rt        j                  t              nddz  }dd|iz  }t        t        j                  |            dx}
}|d   }
|	d   }|
|k(  }|slt        j                  d|fd|
|f      t        j                  |
      t        j                  |      dz  }dd|iz  }t        t        j                  |            dx}
x}}|d   }
|	d   }|
|k(  }|slt        j                  d|fd|
|f      t        j                  |
      t        j                  |      dz  }dd|iz  }t        t        j                  |            dx}
x}}|	d   r4|d   r-|d    }
|
t
        k7  }|st        j                  d!|fd"|
t
        f      t        j                  |
      d#t        j                         v st        j                  t
              rt        j                  t
              nd#dz  }dd|iz  }t        t        j                  |            dx}
}d}dt
         }t	        |||      }||k(  }|sKt        j                  d|fd$||f      d%t        j                         v st        j                  t              rt        j                  t              nd%d&t        j                         v st        j                  |      rt        j                  |      nd&t        j                  |      t        j                  |      t        j                  |      d't        j                         v st        j                  |      rt        j                  |      nd'd(z  }d)d*|iz  }t        t        j                  |            dx}x}x}}yyy)+uL   4 fixture 시나리오 → allocator 결과가 expected 와 일치, reset 0.z.json	occupancy	local_refworktree_checked_out
remote_refr3   r|   r#   r,   r4   r$   r}   Nr)   r5   r6   expectedr8   r9   r;   r   r<   r?   r@   rA   rT   rE   rG   rH   rR   &allocated_differs_from_live_checkedoutrK   rL   rN   rO   rU   r   r   rV   rW   rZ   r[   )r   r   FIXDIRr   r   rO   r
   r   r\   r]   r^   r_   r`   ra   rb   rc   )r1   r}  r   r0   re   specoccrV   rf   exprg   rh   ri   rj   rk   rl   rm   rr   rs   rp   rq   rt   s                         r   test_fixture_scenariosr    sl    LD#q::v5'/::<=D
{
C
;356#l:KT8T"
<T6440
!"T:tT*c,&7
<[!1T:tV,T8T4(J
!"${4&-AB
dS1A
z
CX;*;*****;****;******************!"?c*>&??"&?????"&????"???&????????93'8#99#99999#9999999#99999999
34: ()1)T1111)T111)111111T111T1111111%JTF';JtD+';<J<
JJJJ<
JJJJJJtJJJtJJJJJJDJJJDJJJ+JJJ';JJJ<JJJJJJ
JJJ
JJJJJJJJ:4r    )G__doc__
__future__r   builtinsr_   _pytest.assertion.rewrite	assertionrewriter\   r   r   r   syspathlibr   unittestr   r  __file__resolverF  WSr   pathinsertr   r   r   r4  r   r	   r
   r   r   -anu_v3.pre_authorized_evidence_bundle_builderr   r   r   CLI_SRCr   r  rO   r   fixturer1   ru   rz   r~   r   r   r   r   r   r   r   r   r   r   r   r  r  r$  r5  r=  rB  rb  rh  r|  markparametrizer  r  r    r   <module>r     s  
 #   
   
   	(^%%a(r7#((HHOOAs2w . 
 ; M55	(]BB

y.8
8	iD	D	h	#.  .G$	..	811@1I)8 L H/>82
F
:",J
8H<  # KKr    