
    ;IjS_                    X   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mZ ddlmZ ddlZ ee      j%                         j&                  j&                  j&                  Z ee      ej,                  v r!ej,                  j/                   ee             ej,                  j1                  d ee             ddlmZmZmZmZmZmZ ddl m!Z!m"Z" ddl#m$Z$m%Z% d"d
Z&d#dd	ddZ'd$d%dZ(d&dZ)d Z*d Z+d Z,d Z-d Z.d Z/d Z0d Z1d Z2d Z3d Z4d Z5d Z6d Z7d Z8d Z9d Z:d  Z;d! Z<y)'u   task-2510 회귀 테스트 — replacement_pr_runner 12 케이스.
QA 담당: 모리건(Morrigan)
대상: utils/replacement_pr_runner.py
    )annotationsN)asdict)Path)ReplacementPRRunnerassert_no_cherry_pickdetect_contaminationtransplant_expected_filesassert_clean_working_treeprecheck_local_replacement_diff)ReplacementResultCriticalEscalationType)TaskSpecassert_no_forbidden_git_flags c                4    t        j                  g | ||      S )N)args
returncodestdoutstderr)
subprocessCompletedProcess)r   r   r   s      f/home/jay/workspace/.worktrees/task-2554plus2-dev5/tests/regression/test_replacement_pr_runner_2510.pycpr   (   s    &&B:f]cdd    default_returncodedefault_stdoutc               x    g | rt        | j                               ng dfd	}t        |d       |S )u7   fake runner — args 패턴 매칭으로 응답 inject.c                    j                  t        |       ||d       dj                  d | D              	D ]  \  }}t        fd|D              s|c S  t	              S )N)r   cwdtimeout c              3  2   K   | ]  }t        |        y wNstr.0as     r   	<genexpr>z.make_runner.<locals>.runner.<locals>.<genexpr>3   s     /Q#a&/   c              3  &   K   | ]  }|v  
 y wr$    )r(   tokjoineds     r   r*   z.make_runner.<locals>.runner.<locals>.<genexpr>5   s     3S3&=3s   r   r   )appendlistjoinallr   )
r   r    r!   tokensresponser/   callsr   r   routess
        @r   runnerzmake_runner.<locals>.runner1   se    d4jIJ/$// & 	 FH3F33	  /GGr   r7   )N<   )r2   itemssetattr)returns_by_argsr   r   r9   r7   r8   s    `` @@r   make_runnerr>   ,   s>    E.=T/'')*2FH H FGU#Mr   c           
     <    t        | |xs ddgd|xs g dddd      S )	Nutils/replacement_pr_runner.py3tests/regression/test_replacement_pr_runner_2510.pyreplacement_prserial_only   TF)task_idexpected_files	risk_area
dependencyparallel_policymerge_queue_positionstale_recheck_requiredcherry_pick_allowed)r   )rE   expectedrH   s      r   	make_specrN   =   s>     
,A$
 ##%#! r   c           
     F    | |d||xs g d| d|j                  dd      dS )uQ   fake pr metadata. **_extra: positional pr_number 등 호출자 ergonomics 흡수.main[z] test fixture	pr_numberr:   )head_refhead_shabase_refrE   filestitlenumber)get)rS   rT   rE   rV   _extras        r   fake_pr_metar[   M   s;     "WI^,**["- r   c           
        t               }t        |j                        t        i       }t	        |d      }dd lm} | j                  |dfd       | j                  |dfd       |j                  d|	      }t        |t              }|sd
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dt        j                         v st        j                  t              rt        j                  t              ndt        j                  |      dz  }t!        t        j"                  |            d }|j$                  }d}	||	u }|st        j&                  d|fd||	f      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}}	|j(                  }d }	||	u }|st        j&                  d|fd||	f      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}}	|j*                  }d}	||	u }|st        j&                  d|fd||	f      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}}	|j,                  }t/        |      }	t/              }|	|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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                  |      dz  }dd|iz  }t!        t        j"                  |            d x}x}	x}}|j0                  }g }	||	k(  }|st        j&                  d|fd||	f      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}}	|j2                  }d }	||	u }|st        j&                  d|fd||	f      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 ) NFr9   dry_runr   fetch_pr_metadatac                    t              S N)rV   r[   )prrrM   s     r   <lambda>z)test_t01_clean_pr_no_op.<locals>.<lambda>b   s    S[@\ r   compute_effective_diffc                    t              S r$   r2   )metard   rM   s     r   re   z)test_t01_clean_pr_no_op.<locals>.<lambda>c   s    tH~ r   r:   	task_specz5assert %(py4)s
{%(py4)s = %(py0)s(%(py1)s, %(py2)s)
}
isinstanceresultr   )py0py1py2py4Tisz/%(py2)s
{%(py2)s = %(py0)s.success
} is %(py5)srn   rp   py5assert %(py7)spy7)z6%(py2)s
{%(py2)s = %(py0)s.replacement_pr
} is %(py5)sz=%(py2)s
{%(py2)s = %(py0)s.original_pr_preserved
} is %(py5)s==)zz%(py5)s
{%(py5)s = %(py0)s(%(py3)s
{%(py3)s = %(py1)s.effective_diff_files
})
} == %(py10)s
{%(py10)s = %(py7)s(%(py8)s)
}sortedrM   )rn   ro   py3rv   rx   py8py10zassert %(py12)spy12)z7%(py2)s
{%(py2)s = %(py0)s.forbidden_paths
} == %(py5)s)z6%(py2)s
{%(py2)s = %(py0)s.failure_reason
} is %(py5)s)rN   r2   rF   r>   r   utils.replacement_pr_runnerreplacement_pr_runnerr<   executerl   r   @py_builtinslocals
@pytest_ar_should_repr_global_name	_safereprAssertionError_format_explanationsuccess_call_reprcomparerB   original_pr_preservedeffective_diff_filesr|   forbidden_pathsfailure_reason)monkeypatchspecr9   rprmodrm   @py_assert3@py_format5@py_assert1@py_assert4@py_format6@py_format8@py_assert2@py_assert9@py_assert6@py_format11@py_format13rM   s                    @r   test_t01_clean_pr_no_opr   [   s   ;DD''(H_F
VU
;C-02\]57UV[[t[,Ff/00000000:000:000000f000f000000/000/0000000000>>!T!>T!!!!>T!!!!!!6!!!6!!!>!!!T!!!!!!!  (D( D(((( D((((((6(((6((( (((D(((((((''/4/'4////'4//////6///6///'///4///////--B6-.B&2BB.2BBBBB.2BBBBBBB6BBB6BBBBBB&BBB&BBB-BBB.BBBBBB&BBB&BBBBBBBBBBBB2BBBBBBBB!!'R'!R''''!R''''''6'''6'''!'''R'''''''  (D( D(((( D((((((6(((6((( (((D(((((((r   c                 ,   ddg} | ddgz   }t        ||       }|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   }||v }|slt        j                  d|fd||f      t        j                  |      t        j                  |      d	z  }d
d|iz  }t	        t        j
                  |            d x}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 )Nr@   rA   utils/rogue_extra_module.pyzscripts/unrelated_script.shcontaminatedTrr   z%(py1)s is %(py4)sro   rq   assert %(py6)spy6extrain)z%(py1)s in %(py4)s)r   r   r   r   r   r   )rM   contaminated_extrarm   @py_assert0r   r   r   @py_format7s           r   test_t02_contaminated_detectionr   p   s    02ghH!%BDa$bb!"4h?F.!)T)!T))))!T)))!)))T)))))))(;F7O;(O;;;;(O;;;(;;;O;;;;;;;(;F7O;(O;;;;(O;;;(;;;O;;;;;;;r   c                   t               }t        |j                        dt        i       }t	        |d      }dd lm} | j                  |dfd       | j                  |dfd       |j                  d	|
      }|j                  }d}||u }|st        j                  d|fd||f      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}}|j$                  }d }||u}|st        j                  d|fd||f      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}}t&        j(                  }|j*                  }|j$                  }||v }|s
t        j                  d|fd||f      dt        j                         v st        j                  t&              rt        j                  t&              ndt        j                  |      t        j                  |      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}x}x}}|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                  |      rt        j                  |      ndt        j                  |      dz  }dd|iz  }t!        t        j"                  |            d x}}y )Nz.github/workflows/ci.ymlFr]   r   r_   c                $    t        gz         S ra   rb   )rc   rd   rM   forbidden_files     r   re   z3test_t03_forbidden_path_intrusion.<locals>.<lambda>   s    S[_m^nSn@o r   rf   c                    gz   S r$   r-   )ri   rd   rM   r   s     r   re   z3test_t03_forbidden_path_intrusion.<locals>.<lambda>   s    xSaRbGb r   r:   rj   rr   rt   rm   ru   rw   rx   is not)z:%(py2)s
{%(py2)s = %(py0)s.failure_reason
} is not %(py5)sr   )z%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.FORBIDDEN_PATH_INTRUSION
}.value
} in %(py8)s
{%(py8)s = %(py6)s.failure_reason
}r   rn   rp   rq   r   r~   assert %(py10)sr   )z7%(py0)s in %(py4)s
{%(py4)s = %(py2)s.forbidden_paths
}r   )rn   rp   rq   r   r   )rN   r2   rF   r>   r   r   r   r<   r   r   r   r   r   r   r   r   r   r   r   r   FORBIDDEN_PATH_INTRUSIONvaluer   )r   r   r9   r   r   rm   r   r   r   r   r   @py_assert7@py_assert5@py_format9r   r   r   rM   r   s                    @@r   !test_t03_forbidden_path_intrusionr   z   s   ;DD''(H/N_F
VU
;C-02op57bc[[t[,F>>"U">U"""">U""""""6"""6""">"""U"""""""  ,, ,,,, ,,,,,,6,,,6,,, ,,,,,,,,,,!::Y:@@YFDYDYY@DYYYYY@DYYYYYYY!YYY!YYY:YYY@YYYYYYFYYYFYYYDYYYYYYYY#333>33333>3333333>333>333333V333V33333333333r   c           	     	   ddg}d}t        dt        dd      id      }t        |||t        |       	       t	        |d
      }|D cg c]  }d|d   v sd|d   v s| }}t        |      }t        |      }||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                  |      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                  |      dz  }
dd|
iz  }t        t        j                  |            dx}x}	}|D cg c]"  }ddj                  d |d   D              v s!|$ }}| }|sedddt        j                         v st        j                  |      rt        j                  |      ndiz  }t        t        j                  |            d}|D ]  }| |z  }|j                  } |       }|sd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  }t        t        j                  |            dx}x}}d!}| |z  }|j                   } |       }||v }|st        j                  d"|fd#||f      t        j                  |      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}x}x}}! yc c}w c c}w )'u1   ★ tmp_path 격리: 실제 source 손상 방지.zutils/sample.pyztests/regression/test_sample.py
abcdef1234)gitshowr   z# fake transplanted content
r0   r   repo_dirr7   r   r   r   >=)zN%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} >= %(py8)s
{%(py8)s = %(py5)s(%(py6)s)
}len
show_callsrM   )rn   ro   r}   rv   r   r~   r   r   Ncherry-pickr"   c              3  2   K   | ]  }t        |        y wr$   r%   r'   s     r   r*   zCtest_t04_transplant_expected_files_uses_git_show.<locals>.<genexpr>   s     MhYZcRSfMhr+   zassert not %(py0)srn   cherry_pick_callszMassert %(py6)s
{%(py6)s = %(py4)s
{%(py4)s = (%(py0)s / %(py1)s).exists
}()
}tmp_pathf)rn   ro   rq   r   zfake transplanted contentr   )zT%(py1)s in %(py9)s
{%(py9)s = %(py7)s
{%(py7)s = (%(py3)s / %(py4)s).read_text
}()
})ro   r}   rq   rx   py9zassert %(py11)spy11)r>   r   r	   r&   getattrr   r   r   r   r   r   r   r   r   r3   exists	read_text)r   rM   rT   r9   runner_callscr   r   r   r   r   r   r   r   @py_format2r   r   r   r   r   r   @py_assert8@py_format10@py_format12s                           r   0test_t04_transplant_expected_files_uses_git_showr      s   !#DEHH	"2QRSF
 X	 67+L)XUai-?FaPViDW!XJXz?+c(m+?m++++?m++++++3+++3++++++z+++z+++?++++++c+++c++++++(+++(+++m+++++++ %1iqMSXXMh^_`f^gMhEh4hii                      I1&$$&$&&&&&&&&&&&&&&&&&1&&&1&&&$&&&&&&&&&&*Hx!|H|.F.FH.F.HH*.HHHHH*.HHHH*HHHHHHxHHHxHHHHHH!HHH!HHH.FHHH.HHHHHHHHHI Y js   	SSS"S/Sc                |  # t               }t        |j                        }|dgz   #t        i dd      }t	        |dt        |            }dd lm} | j                  |d#fd       | j                  |d	#fd
       | j                  |ddRd       | j                  |dd d dd       | j                  |dd dd       | j                  |dd dd       | j                  |dd dd       | j                  |dd dd       | j                  |dd dd       | j                  |dd        |j                  d|      }t        |d      }|D 	cg c]  }	d j                  d! |	d"   D               }
}	|
D ]  }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}}g }d*}||v }|}|rd+}||v }|}|rd,}||v }|}| }|st        j                  d-|fd.||f      t        j                  |      d&t        j                          v st        j"                  |      rt        j                  |      nd&d/z  }d0d1|iz  }|j)                  |       |rt        j                  d-fd2|f      t        j                  |      d&t        j                          v st        j"                  |      rt        j                  |      nd&d3z  }d4d5|iz  }|j)                  |       |rt        j                  d-fd6|f      t        j                  |      d&t        j                          v st        j"                  |      rt        j                  |      nd&d7z  }d8d9|iz  }|j)                  |       t        j*                  |d      i z  }d:d;|iz  }t%        t        j&                  |            d x}x}x}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  }d0d1|iz  }|j)                  |       |rt        j                  d-|fd2||f      t        j                  |      d&t        j                          v st        j"                  |      rt        j                  |      nd&d3z  }d4d5|iz  }|j)                  |       t        j*                  |d      i z  }d>d?|iz  }t%        t        j&                  |            d x}x}x}x}x}x}}g }d@}||v }|}|rdA}||v }|}| }|sXt        j                  d-|fd.||f      t        j                  |      d&t        j                          v st        j"                  |      rt        j                  |      nd&d/z  }d0d1|iz  }|j)                  |       |rt        j                  d-|fd2||f      t        j                  |      d&t        j                          v st        j"                  |      rt        j                  |      nd&d3z  }d4d5|iz  }|j)                  |       t        j*                  |d      i z  }d>d?|iz  }t%        t        j&                  |            d x}x}x}x}x}x}} |
D 	cg c]  }	dB|	v sdC|	v s|	 } }	| s~t        j,                  dD|
       dEz   dFdGt        j                          v st        j"                  |       rt        j                  |       ndGiz  }!t%        t        j&                  |!            |j.                  }dH}||u }"|"st        j                  dI|"fdJ||f      dKt        j                          v st        j"                  |      rt        j                  |      ndKt        j                  |      t        j                  |      dLz  }dMd1|iz  }t%        t        j&                  |            d x}x}"}|j0                  }dH}||u }"|"st        j                  dI|"fdN||f      dKt        j                          v st        j"                  |      rt        j                  |      ndKt        j                  |      t        j                  |      dLz  }dMd1|iz  }t%        t        j&                  |            d x}x}"}|j2                  }dO}||k(  }"|"st        j                  dP|"fdQ||f      dKt        j                          v st        j"                  |      rt        j                  |      ndKt        j                  |      t        j                  |      dLz  }dMd1|iz  }t%        t        j&                  |            d x}x}"}y c c}	w c c}	w )SNr   r   r   r   Fr9   r^   r   r_   c                    t        d      S Nr:   )rR   rV   rb   rc   rd   r   s     r   re   z?test_t05_original_pr_preserved_comment_posted.<locals>.<lambda>       WYam@n r   rf   c                    S r$   r-   ri   rd   r   s     r   re   z?test_t05_original_pr_preserved_comment_posted.<locals>.<lambda>       | r   r
   c                     y r$   r-   rd   r   s     r   re   z?test_t05_original_pr_preserved_comment_posted.<locals>.<lambda>       r   create_clean_replacement_branch	timestampr   c                    y)Nz#task/task-2510-replacement-20260508r-   rE   rd   r   r   s       r   re   z?test_t05_original_pr_preserved_comment_posted.<locals>.<lambda>   r   r   r	   r   c                   t        |       S r$   rh   expsrcrd   r   s       r   re   z?test_t05_original_pr_preserved_comment_posted.<locals>.<lambda>       `deh`i r   commit_localc                   t        d      S Nr   )r   r   rE   rd   r   s      r   re   z?test_t05_original_pr_preserved_comment_posted.<locals>.<lambda>       RT`aRb r   r   c                   dg g fS NTr-   branchr   rd   r   s       r   re   z?test_t05_original_pr_preserved_comment_posted.<locals>.<lambda>   s    jnprtviw r   push_branchc                   t        d      S r   r   )r   rd   r   s      r   re   z?test_t05_original_pr_preserved_comment_posted.<locals>.<lambda>   s    PR^_P` r   open_replacement_prc                    y)N=   r-   )rE   r   	source_prrd   r   s        r   re   z?test_t05_original_pr_preserved_comment_posted.<locals>.<lambda>   r   r   validate_replacement_diffc                    dg g fS r   r-   )rB   r   rd   s      r   re   z?test_t05_original_pr_preserved_comment_posted.<locals>.<lambda>   s    Z^`bdfYg r   r:   rj   r7   r"   c              3  2   K   | ]  }t        |        y wr$   r%   r'   s     r   r*   z@test_t05_original_pr_preserved_comment_posted.<locals>.<genexpr>   s      ;AQ ;r+   r   zgh pr close)not in)z%(py1)s not in %(py3)scall_strro   r}   assert %(py5)srv   z
gh pr editz--stateclosedr   )z%(py3)s in %(py5)s)r}   rv   %(py7)srx   )z%(py10)s in %(py12)s)r   r   %(py14)spy14)z%(py17)s in %(py19)s)py17py19z%(py21)spy21zassert not %(py24)spy24zgh apiDELETEzassert not %(py17)sr
  zgit pushz--deletezgh pr commentz
[REPLACED]z.[REPLACED] comment must be posted, got calls: z
>assert %(py0)srn   comment_callsTrr   ry   rm   ru   rw   rt   r   rz   z6%(py2)s
{%(py2)s = %(py0)s.replacement_pr
} == %(py5)sr$   )rN   r2   rF   r>   r   r&   r   r   r<   r   r   r3   r   r   r   r   r   r   r   r   r1   _format_boolop_format_assertmsgr   r   rB   )$r   r   r   rM   r9   r   r   rm   r   r   all_calls_joinedr  r   r   @py_format4r   r   r   r   @py_assert11@py_assert16@py_assert18@py_assert25r   r   @py_format15@py_format20@py_format22@py_format23@py_format26@py_format16@py_format19r  @py_format1r   r   s$                                      @r   -test_t05_original_pr_preserved_comment_postedr!     sk   ;DD''(H<==L"EF
VUS]
SC-02no57ST8:WX>`dos  A[  \8Z^:ij^D-bc>cg@wx]$,`a2fj4no8:gh [[t[,F67+LEQR ;6 ;;RR % G,}H,,,,}H,,,},,,,,,H,,,H,,,,,,,`L`LH,``h1F`8`8W_K_```````LH```L``````H```H````````h`````````h```h```````8W_```8``````W_```W_```````````````BHBH(BXBX-ABBBBBBBHBBBHBBBBBBBBBBBBBBBBXBBBXBBBBBBBBBBBBBBBBBBBBBBBFJFJ(*FzFzX/EFFFFFFFJ(FFFJFFFFFF(FFF(FFFFFFFzXFFFzFFFFFFXFFFXFFFFFFFFFFFFFFF	G !1_1Oq4H\]^M^Q_M_]]JK[J\]]]]]]]=]]]=]]]]]''/4/'4////'4//////6///6///'///4///////>>!T!>T!!!!>T!!!!!!6!!!6!!!>!!!T!!!!!!!  &B& B&&&& B&&&&&&6&&&6&&& &&&B&&&&&&& S `s   "h4	h9h9h9c                    dd l m}  ddg}t        j                  d|D cg c]  }d|i c}i      }t	        dt        d|      i      }| j                  d||      \  }}}d	}||u }	|	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  }t        t        j                  |            d x}	}g }||k(  }	|	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  }t        t        j                  |            d x}	}g }||k(  }	|	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  }t        t        j                  |            d x}	}|dgz   }t        j                  d|D cg c]  }d|i c}i      }t	        dt        d|      i      }| j                  d||      \  }}}d}||u }	|	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  }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 c c}w c c}w )Nr   r@   rA   rV   path)ghrc   viewr0   r   Trr   z%(py0)s is %(py3)svalidrn   r}   r  rv   rz   )z%(py0)s == %(py3)sr   missingzutils/rogue_extra.pyFvalid_er   )z%(py1)s in %(py3)sextra_er  )r   r   jsondumpsr>   r   r   r   r   r   r   r   r   r   r   )r   rM   pfiles_payload_ok	runner_okr'  r   r)  r   r   r  r   extra_files_listfiles_payload_extrarunner_extrar*  r+  
_missing_er   s                      r   .test_t06_validate_replacement_diff_exact_matchr5     s   -02ghHzz7(,KQfa[,K"LM12K[3\]^I99"h	RE5'5D=5D55D5B;5B55B7b=7b77b#9"::**gEU/V/V%WX 4bANa6bcdL#&#@#@X|#\ GWj7e7e77e!,!W,,,,!W,,,!,,,,,,W,,,W,,,,,,, -L 0Ws   O9
,O>
c                   t               }t        |j                        dgz   t        i d      }t	        |dt        |            }dd lm} | j                  |dfd       | j                  |dfd	       d
 }| j                  |dd        | j                  |dd        | j                  |dfd       | j                  |dd        | j                  |dd        | j                  |d|       |j                  d|      }|j                  }d}	||	u }
|
st        j                  d|
fd||	f      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}
}	|j&                  }t(        j*                  j,                  t(        j.                  j,                  h}	||	v }
|
st        j                  d|
fd||	f      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 ) Nzutils/rogue.pyr   r   Fr   r_   c                    t              S ra   rb   r   s     r   re   z7test_t07_replacement_failure_critical.<locals>.<lambda>   s    S_@` r   rf   c                    S r$   r-   r   s     r   re   z7test_t07_replacement_failure_critical.<locals>.<lambda>   r   r   c                     t        d      )NzPUSH_FAILED simulatedRuntimeErrorr)   ks     r   boomz3test_t07_replacement_failure_critical.<locals>.boom   s    233r   r
   c                      y r$   r-   r<  s     r   re   z7test_t07_replacement_failure_critical.<locals>.<lambda>   r   r   r   c                      y)Nztask/task-2510-replacement-zzzr-   r<  s     r   re   z7test_t07_replacement_failure_critical.<locals>.<lambda>   r   r   r	   c                     t              S r$   rh   )r)   r=  rM   s     r   re   z7test_t07_replacement_failure_critical.<locals>.<lambda>   s    $x. r   r   c                     t        d      S r   r   r<  s     r   re   z7test_t07_replacement_failure_critical.<locals>.<lambda>   s    R1=M r   r   c                     dg g fS r   r-   r<  s     r   re   z7test_t07_replacement_failure_critical.<locals>.<lambda>   s    QUWY[]P^ r   r   r:   rj   rr   rt   rm   ru   rw   rx   r   )z6%(py2)s
{%(py2)s = %(py0)s.failure_reason
} in %(py5)s)rN   r2   rF   r>   r   r&   r   r   r<   r   r   r   r   r   r   r   r   r   r   r   r   9REPLACEMENT_PR_AUTO_CREATION_FAILED_FOR_CONTAMINATED_DIFFr   REPLACEMENT_PR_FAILED)r   r   r   r9   r   r   r>  rm   r   r   r   r   r   r   rM   s                @@r   %test_t07_replacement_failure_criticalrF     sD   ;DD''(H/00L2F
VUS]
SC-02`a57ST48:NO>@pq8:XY^-MN>@^_]D1[[t[,F>>"U">U"""">U""""""6"""6""">"""U"""""""   XX^^44::%   %     %              !   %       r   c            	     j   ddg} t        |       }dD ]B  }t        d      D ]2  }|j                  d| d| d       |j                  d| d	| d       4 D t        d
      D ],  }|j                  d| d       |j                  d| d       . t        t        j	                  |            }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}}t        ||       }	|	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        |      }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}}y )#Nr@   rA   )ztask-2487+1z	task-2503ztask-2485+1z	task-2488z	task-2489z	task-2493
   zutils/_module_.pyztests/regression/test__   zscripts/poc_script_z.shztests/POC/poc_test_N   r   )z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} >= %(py6)sr   contaminated_files)rn   ro   r}   r   assert %(py8)sr~   r   Trr   r   r   r   r   r      )z0%(py4)s
{%(py4)s = %(py0)s(%(py2)s)
} >= %(py7)s)rn   rp   rq   rx   zassert %(py9)sr   )r2   ranger1   dictfromkeysr   r   r   r   r   r   r   r   r   r   )rM   rN  prefixir   r   r   r   r   rm   r   r   r   r   r   r   r   s                    r   +test_t08_pr54_fixture_78_files_contaminatedrV  
  sM   02ghHhd Pr 	PA%%vhhqc&EF%%(>vhas#&NO	PP 1X @!!$7s#">?!!$7s#">?@ dmm,>?@!"(b("b(((("b((((((3(((3((((((!(((!((("(((b(((((((!"4h?F.!)T)!T))))!T)))!)))T)))))))g$3$1$1$$$$1$$$$$$3$$$3$$$$$$$$$1$$$$$$$r   c                    ddg} t        |       }t        d      D ],  }|j                  d| d       |j                  d| d       . |j                  d       |j                  d       t        t        j	                  |            }t        ||       }|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g}	t        |	      }
t        d      D ],  }|
j                  d| d       |
j                  d| d       . t        t        j	                  |
            }
t        |
|	      }|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 )Nzutils/auto_gemini_triage.pyz0tests/regression/test_auto_gemini_triage_2506.py9   z!utils/task-2479-dev1_accumulated_rJ  ztests/regression/test_task2479_zscripts/dev1_bootstrap.shztests/POC/poc_gemini.pyr   Trr   r   r   r   r   r@   rA   '   zutils/task-2507_base_acc_z#tests/regression/test_task2507_acc_)r2   rQ  r1   rR  rS  r   r   r   r   r   r   )expected_2506contaminated_2506rU  r2506r   r   r   r   r   expected_2507contaminated_2507r2507s               r   (test_t09_task2506_117_files_contaminatedr`    s   24fgM]+2Y K  #DQCs!KL  #B1#S!IJK 8967T]]+<=> !2MBE (D( D(((( D((( (((D(((((((57lmM]+2Y O  #<QCs!CD  #Fqc!MNO T]]+<=> !2MBE (D( D(((( D((( (((D(((((((r   c                    t        j                  t              5 } t        g d       d d d        d} j                  }t        |      }||v }|s
t        j                  d|fd||f      t        j                  |      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}x}}y # 1 sw Y   =xY w)
N)r   r   abcCHERRY_PICK_FORBIDDENr   )zK%(py1)s in %(py8)s
{%(py8)s = %(py3)s(%(py6)s
{%(py6)s = %(py4)s.value
})
}r&   excinfo)ro   r}   rq   r   r~   r   r   )pytestraisesr;  r   r   r&   r   r   r   r   r   r   r   r   )rd  r   r   r   r   r   r   s          r   %test_t10_assert_no_cherry_pick_raisesrg  4  s    	|	$ =;<="8'--8c-&88"&88888"&8888"888888c888c888888'888'888-888&88888888= =s   E##E-c                 8    t        g d       t        g d       y )N)r   mergerb  )r   r   zabc:file.py)r   r-   r   r   )test_t10_assert_no_cherry_pick_safe_mergerj  :  s    1289r   c                 z    t        j                  t              5  t        g d       d d d        y # 1 sw Y   y xY w)N)r   pushz--forcere  rf  r;  r   r-   r   r   test_t11_force_flag_raisesrn  A  s0    	|	$ B%&@AB B B   1:c                 z    t        j                  t              5  t        g d       d d d        y # 1 sw Y   y xY w)N)r$  rc   ri  z--adminrm  r-   r   r   test_t11_admin_flag_raisesrq  F  s0    	|	$ H%&FGH H Hro  c                 z    t        j                  t              5  t        g d       d d d        y # 1 sw Y   y xY w)N)r   rebaserP   rm  r-   r   r   test_t11_rebase_raisesrt  K  s0    	|	$ A%&?@A A Aro  c            
        t        dddddgddgg dd       } t        j                  t        |             }t        j                  |      }t        di |}|j
                  }d}||u }|st        j                  d|fd||f      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}}|j                  }d}||k(  }|st        j                  d|fd||f      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}}t        dd ddgg g dt        j                   j"                        }	t        j                  t        |	            }
t        j                  |
      }t        di |}|j
                  }d}||u }|st        j                  d|fd||f      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}}|j$                  }t        j                   }|j"                  }||k(  }|s
t        j                  d|fd||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      dt        j                         v st        j                  t              rt        j                  t              ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}x}}y )N6   r   Tr@   rA   )r   rB   r   rF   r   r   r   r   rr   rt   
rebuilt_okru   rw   rx   rz   r  Frebuilt_failz|%(py2)s
{%(py2)s = %(py0)s.failure_reason
} == %(py8)s
{%(py8)s = %(py6)s
{%(py6)s = %(py4)s.REPLACEMENT_PR_FAILED
}.value
}r   r   r   r   r-   )r   r,  r-  r   loadsr   r   r   r   r   r   r   r   r   rB   r   rE  r   r   )ok
payload_ok	parsed_okrw  r   r   r   r   r   failpayload_failparsed_failrx  r   r   r   r   s                    r   *test_t12_replacement_result_json_roundtripr  Q  s   	Rt8:op>@uvD	
B F2J'J

:&I"/Y/J%%%%%%%%%%%%:%%%:%%%%%%%%%%%%%$$**$****$******:***:***$********** T89PRE-CCII	D ::fTl+L**\*K$3{3L(5(5((((5((((((<(((<((((((5(((((((&&\*@*V*V\*V*\*\\&*\\\\\&*\\\\\\\<\\\<\\\&\\\\\\*@\\\*@\\\*V\\\*\\\\\\\\r   c                
   t               }t        |j                        }|dgz   t        dt	        dd      idd      }t        |dt        |      	      }dd
lm} | j                  |dfd       | j                  |dfd       |j                  d|      }|j                  }d}	||	u }
|
st        j                  d|
fd||	f      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}
}	|j(                  }t*        j,                  }|j.                  }||k(  }
|
s
t        j                  d|
fd||f      dt        j                         v st        j                   |      rt        j"                  |      ndt        j"                  |      dt        j                         v st        j                   t*              rt        j"                  t*              ndt        j"                  |      t        j"                  |      dz  }dd|iz  }t%        t        j&                  |            d
x}x}
x}}|j0                  }d}	||	u }
|
st        j                  d|
fd||	f      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}
}	|j2                  }d
}	||	u}
|
st        j                  d|
fd ||	f      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}
}	|j2                  }|j4                  }
t*        j,                  }|
|k(  }|s
t        j                  d|fd"|
|f      d!t        j                         v st        j                   |      rt        j"                  |      nd!t        j"                  |      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}
x}}y
)#uM   dirty working tree 감지 시 replacement 흐름 진입 전에 실패 반환.zutils/rogue_dirty.py)r   statusz--porcelainr   z M utils/dirty_file.py
r0   r   r   Fr   Nr_   c                    t        d      S r   rb   r   s     r   re   z3test_t13_dirty_working_tree_fails.<locals>.<lambda>}  r   r   rf   c                    S r$   r-   r   s     r   re   z3test_t13_dirty_working_tree_fails.<locals>.<lambda>~  r   r   r:   rj   rr   rt   rm   ru   rw   rx   rz   )z%(py2)s
{%(py2)s = %(py0)s.failure_reason
} == %(py8)s
{%(py8)s = %(py6)s
{%(py6)s = %(py4)s.REPLACEMENT_PR_AUTO_CREATION_FAILED_FOR_CONTAMINATED_DIFF
}.value
}r   r   r   r   Try   r   zB%(py2)s
{%(py2)s = %(py0)s.last_escalation_packet
} is not %(py5)sr   )z%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.last_escalation_packet
}.escalation_type
} == %(py8)s
{%(py8)s = %(py6)s.REPLACEMENT_PR_AUTO_CREATION_FAILED_FOR_CONTAMINATED_DIFF
})rN   r2   rF   r>   r   r   r&   r   r   r<   r   r   r   r   r   r   r   r   r   r   r   r   rD  r   r   last_escalation_packetescalation_type)r   r   r   rM   dirty_runnerr   r   rm   r   r   r   r   r   r   r   r   r   r   s                    @r   !test_t13_dirty_working_tree_failsr  n  s   ;DD''(H566L 	)2C]+^_L
 \53x=
YC-02no57ST[[t[,F>>"U">U"""">U""""""6"""6""">"""U"""""""  z$:$t$tz$t$z$zz $zzzzz $zzzzzzz6zzz6zzz zzzzzz$:zzz$:zzz$tzzz$zzzzzzzz''/4/'4////'4//////6///6///'///4///////%%1T1%T1111%T11111131113111%111T1111111%%  J%55  J9O  :J  :J  J5  :J  J  J  J  J5  :J  J  J  J  J  J  J3  J  J  J3  J  J  J%  J  J  J5  J  J  J  J  J  J9O  J  J  J9O  J  J  J  :J  J  J  J  J  J  J  Jr   c                f   t               }t        |j                        }|dgz   t        i dd      }t	        |dt        |            }ddlm} | j                  |dfd	       | j                  |d
fd       | j                  |dd0d       | j                  |ddddd       | j                  |dddd       | j                  |dddd       | j                  |dddd       g fd}| j                  |d|       |j                  d|      }|j                  }	d}
|	|
u }|st        j                  d|fd|	|
f      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}}
|j&                  }	t(        j*                  }|j,                  }|	|k(  }|s
t        j                  d"|fd#|	|f      dt        j                         v st        j                  |      rt        j                   |      ndt        j                   |	      d$t        j                         v st        j                  t(              rt        j                   t(              nd$t        j                   |      t        j                   |      d%z  }d&d'|iz  }t#        t        j$                  |            dx}	x}x}} }	|	s{t        j.                  d(      d)z   d*d+t        j                         v st        j                        rt        j                         nd+iz  }t#        t        j$                  |            d}	|j0                  }	d}
|	|
u}|st        j                  d,|fd-|	|
f      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}}
|j0                  }	|	j2                  }t(        j*                  }||k(  }|s
t        j                  d"|fd/||f      d.t        j                         v st        j                  |      rt        j                   |      nd.t        j                   |	      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}x}}y)1u]   로컬 diff 사전 검증 실패 시 gh pr create 호출 없이 REPLACEMENT_PR_FAILED 반환.zutils/rogue_precheck.pyr   r   r   Fr   Nr_   c                    t        d      S r   rb   r   s     r   re   z7test_t14_precheck_mismatch_no_pr_open.<locals>.<lambda>  r   r   rf   c                    S r$   r-   r   s     r   re   z7test_t14_precheck_mismatch_no_pr_open.<locals>.<lambda>  r   r   r
   c                     y r$   r-   r   s     r   re   z7test_t14_precheck_mismatch_no_pr_open.<locals>.<lambda>  r   r   r   r   c                    y)Nz#task/task-2510-replacement-precheckr-   r   s       r   re   z7test_t14_precheck_mismatch_no_pr_open.<locals>.<lambda>  r   r   r	   r   c                   t        |       S r$   rh   r   s       r   re   z7test_t14_precheck_mismatch_no_pr_open.<locals>.<lambda>  r   r   r   c                   t        d      S r   r   r   s      r   re   z7test_t14_precheck_mismatch_no_pr_open.<locals>.<lambda>  r   r   r   c                   ddgg fS )NFzutils/unexpected_extra.pyr-   r   s       r   re   z7test_t14_precheck_mismatch_no_pr_open.<locals>.<lambda>  s#    jo  sN  rO  QS  jT r   c                 (    j                  d       y)NTc   )r1   )r)   r=  pr_open_calleds     r   fail_if_calledz=test_t14_precheck_mismatch_no_pr_open.<locals>.fail_if_called  s    d#r   r   r:   rj   rr   rt   rm   ru   rw   rx   rz   ry  r   r   r   r   z3gh pr create must NOT be called when precheck failsz
>assert not %(py0)srn   r  r   r  r   )z%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.last_escalation_packet
}.escalation_type
} == %(py8)s
{%(py8)s = %(py6)s.REPLACEMENT_PR_FAILED
}r$   )rN   r2   rF   r>   r   r&   r   r   r<   r   r   r   r   r   r   r   r   r   r   r   r   rE  r   r  r  r  )r   r   r   rM   r9   r   r   r  rm   r   r   r   r   r   r   r   r   r   r   r   r  s                      @@r   %test_t14_precheck_mismatch_no_pr_openr    s   ;DD''(H899L "EF
VUS]
SC-02no57ST8:WX>`dos  A[  \8Z^:ij^D-bc>cg  AT  U N 2NC[[t[,F>>"U">U"""">U""""""6"""6""">"""U"""""""  V$:$P$PV$P$V$VV $VVVVV $VVVVVVV6VVV6VVV VVVVVV$:VVV$:VVV$PVVV$VVVVVVVVTTTTTTTTTT~TTT~TTTTTT%%1T1%T1111%T11111131113111%111T1111111%%e%55e9O9e9ee59eeeee59eeeeeee3eee3eee%eee5eeeeee9Oeee9Oeee9eeeeeeeer   c                .   t               }t        |j                        }|dgz   t        i dd      }t	        |dt        |            }ddlm} | j                  |dfd	       | j                  |d
fd       | j                  |dd2d       | j                  |ddddd       | j                  |dddd       d }| j                  |d|       |j                  }d}	||	u }
|
st        j                  d|
fd||	f      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}
}	|j%                  d|      }|j&                  }d}	||	u }
|
st        j                  d|
fd||	f      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}
}	|j                  }d}	||	u}
|
st        j                  d |
fd!||	f      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}
}	|j                  }|j(                  }d}	||	k(  }
|
st        j                  d"|
fd#||	f      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}
}	|j*                  }|j*                  }||k(  }
|
st        j                  d"|
fd%||f      d$t        j                         v st        j                  |      rt        j                  |      nd$t        j                  |      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}x}
}|j,                  }t.        j0                  t.        j2                  f}	||	v }
|
st        j                  d*|
fd+||	f      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}
}	|j4                  }d}	||	k7  }
|
st        j                  d,|
fd-||	f      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}
}	|j6                  }t9        |t:              }|sd.d/t        j                         v st        j                  t8              rt        j                  t8              nd/d$t        j                         v st        j                  |      rt        j                  |      nd$t        j                  |      d0t        j                         v st        j                  t:              rt        j                  t:              nd0t        j                  |      d1z  }t!        t        j"                  |            dx}}y)3uL   실패 경로에서 runner.last_escalation_packet이 채워지는지 검증.zutils/rogue_escalation.pyr   r   r   Fr   Nr_   c                    t        d      S r   rb   r   s     r   re   zAtest_t15_escalation_packet_populated_on_failure.<locals>.<lambda>  r   r   rf   c                    S r$   r-   r   s     r   re   zAtest_t15_escalation_packet_populated_on_failure.<locals>.<lambda>  r   r   r
   c                     y r$   r-   r   s     r   re   zAtest_t15_escalation_packet_populated_on_failure.<locals>.<lambda>  r   r   r   r   c                    y)Nztask/task-2510-replacement-escr-   r   s       r   re   zAtest_t15_escalation_packet_populated_on_failure.<locals>.<lambda>  r   r   r	   r   c                   t        |       S r$   rh   r   s       r   re   zAtest_t15_escalation_packet_populated_on_failure.<locals>.<lambda>  r   r   c                     t        d      )NzCOMMIT_FAILED simulated for T15r:  r<  s     r   boom_commitzDtest_t15_escalation_packet_populated_on_failure.<locals>.boom_commit  s    <==r   r   rr   )z>%(py2)s
{%(py2)s = %(py0)s.last_escalation_packet
} is %(py5)sr   ru   rw   rx   r:   rj   rt   rm   r   r  rz   )z1%(py2)s
{%(py2)s = %(py0)s.pr_number
} == %(py5)spkt)zL%(py2)s
{%(py2)s = %(py0)s.task_id
} == %(py6)s
{%(py6)s = %(py4)s.task_id
}r   )rn   rp   rq   r   rO  r~   r   )z7%(py2)s
{%(py2)s = %(py0)s.escalation_type
} in %(py5)s)!=)z.%(py2)s
{%(py2)s = %(py0)s.reason
} != %(py5)szSassert %(py6)s
{%(py6)s = %(py0)s(%(py3)s
{%(py3)s = %(py1)s.evidence
}, %(py4)s)
}rl   rR  )rn   ro   r}   rq   r   r$   )rN   r2   rF   r>   r   r&   r   r   r<   r  r   r   r   r   r   r   r   r   r   r   rR   rE   r  r   rD  rE  reasonevidencerl   rR  )r   r   r   rM   r9   r   r   r  r   r   r   r   r   rm   r  r   r   r   r   r   s                      @r   /test_t15_escalation_packet_populated_on_failurer    s   ;DD''(H:;;L"EF
VUS]
SC-02no57ST8:WX>`dos  AV  W8Z^:ij>^[9 %%--%----%------3---3---%----------[[t[,F>>"U">U"""">U""""""6"""6""">"""U"""""""%%1T1%T1111%T11111131113111%111T1111111

$
$C==B=B=B33=B;;&$,,&;,&&&&;,&&&&&&3&&&3&&&;&&&&&&$&&&$&&&,&&&&&&& XX44#  #    #                 #       ::::33:ll):lD)))))))):))):))))))c)))c)))l))))))D)))D))))))))))r   c                    ddl } dD ]&  }|t        j                  v st        j                  |= ( | j                  d      }|j                  }d}||u }|st        j                  d|fd||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      d	z  }t        j                  d
      dz   d|iz  }t        t        j                  |            dx}x}}|j                  }d}||u}|st        j                  d|fd||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      d	z  }t        j                  d      dz   d|iz  }t        t        j                  |            dx}x}}| j                  d      }|j                  dgdg      \  }	}
}d}|	|u }|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  }t        t        j                  |            dx}}g }g }|
|k(  }|}|r	g }||k(  }|}|sXt        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!                  |       |rt        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  }d!d"|iz  }t        t        j                  |            dx}x}x}x}x}}y)#u   task-2516: replacement_pr_runner 모듈의 top-level import에서 merge_queue_executor와의
    circular import가 제거되어 default wiring path(_WIRING_AVAILABLE=True)가 활성화되는지 회귀 검증.
    r   N)utils.merge_queue_executorutils.replacement_pr_runnerr  Trr   )z9%(py2)s
{%(py2)s = %(py0)s._WIRING_AVAILABLE
} is %(py5)smqeru   uS   W1 wiring 비활성 — replacement_pr_runner.py에 circular import가 남아있음z
>assert %(py7)srx   r   )z?%(py2)s
{%(py2)s = %(py0)s.ReplacementPRRunner
} is not %(py5)su-   ReplacementPRRunner가 None — wiring 누락r  za.pyr&  equalr(  r  rv   rz   )z%(py2)s == %(py5)sr   )rp   rv   r  )z%(py9)s == %(py12)sr)  )r   r   r  r	  zassert %(py17)sr
  )	importlibsysmodulesimport_module_WIRING_AVAILABLEr   r   r   r   r   r   r  r   r   r   compare_effective_diffr1   r  )r  mod_namer  r   r   r   r   r   r   r  r   r)  r   r  r   r  @py_assert10r   r  r  @py_format18s                        r   /test_wiring_activated_default_runtime_path_2516r    s    Q &s{{"H%& 
!
!">
?C   D  D(   D              !    %)    	^     ""_$_"$.___"$______3___3___"___$___0________

!
!"?
@C66x&JE5'5D=5D55D(B(5B;(b(7b=((((5B((((((5(((5(((B(((((((7b((((((7(((7(((b((((((((((((((r   )r   r   r   r$   )z	task-2510NN)returnr   )ztask/task-2507-dev5abcdef1z	task-2507N)=__doc__
__future__r   builtinsr   _pytest.assertion.rewrite	assertionrewriter   r,  r   r  dataclassesr   pathlibr   re  __file__resolveparent	WORKSPACEr&   r#  removeinsertr   r   r   r   r	   r
   r   utils.automation_contractsr   r   utils.merge_queue_executorr   r   r   r>   rN   r[   r   r   r   r   r!  r5  rF  rV  r`  rg  rj  rn  rq  rt  r  r  r  r  r  r-   r   r   <module>r     s   #     
   N""$++2299	y>SXXHHOOC	N# 3y> " eAb " 
)*<4(I@&'T-(<%&).9:B
H
A]:J<#fN$*P)r   