
    i]V                       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  ee      j!                         j"                  d   Z ee      ej(                  vr"ej(                  j+                  d ee             ddlmZmZmZ ddZdddZdd	Zdd
ZddZddZddZ ddZ!ddZ"ddZ#ddZ$ddZ%y)u  tests/regression/test_taskctl_reconcile.py — task-2472+1 회귀 테스트 (T1~T8).

헤임달 (개발2팀 테스트 엔지니어) 작성.
reconcile_orphaned_merge 공개 API를 격리된 환경에서 검증한다.

주의:
- 외부 gh/git 호출 금지. fake_gh 또는 monkeypatch로 격리.
- state_dir_override, events_dir_override, audit_path_override로 tmp_path 격리.
- forbidden_paths(memory/events/task-2472.* 등) 절대 변경 금지.
    )annotationsN)Path   )RECONCILE_AUDIT_FIELDScompute_done_sha256reconcile_orphaned_mergec                    | dz  }|j                  d       |dz  }|j                  dt        j                  |       d       |j	                  d       t        |      gS )uJ   tmp_path에 fake gh shell script 생성. payload를 JSON으로 echo한다.fake_gh_binT)exist_okghz#!/usr/bin/env bash
echo 'z'
i  )mkdir
write_textjsondumpschmodstr)tmp_pathpayloadgh_dirscripts       Z/home/jay/workspace/.worktrees/task-2472+1-dev2/tests/regression/test_taskctl_reconcile.pymake_fake_ghr   $   sa    %F
LL$Ld]F

&tzz'':&;4@ LLK=    c                n    | | dz  }||dd}|j                  t        j                  |      d       |S )u&   task-timer 포맷 .done 파일 생성..donez2026-05-07T00:00:00Z)task_id	qc_resultcompleted_atutf-8encoding)r   r   r   )
events_dirr   r   	done_pathr   s        r   make_done_filer$   0   sG    y..I.G
 G,w?r   c                   | j                   j                  dd       |ddddddd	| d
|dddddd}t        t        |       dd      5 }|j	                  t        j                  |      dz          ddd       y# 1 sw Y   yxY w)uG   audit jsonl에 done_sha256 포함 최소 라인 작성 (사전 시드).T)parentsr   z2026-05-01T00:00:00Z state_orphaned_after_valid_merge(   abc1234abc1234 PASSzmemory/events/r   
no_g3_failzhuman <human@test>z/memory/orchestration-audit/state-recovery.jsonlpre_seed)r   tsclassificationprmerge_commitorigin_main_headancestryr#   done_sha256g3_fail_classificationactorevidence_pathapproved_by_chairmandecisionar   r    
N)parentr   openr   writer   r   )
audit_pathr   r4   recordfs        r   write_audit_linerB   <   s    D48$<(%gYe4"".%J $F  
c*osW	5 +	

6"T)*+ + +s   
(A;;Bc                   | dz  dz  dz  }|j                   } |       }|st        j                  d|       dz   dt        j                         v st        j
                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }t        t        j                  |            dx}}|j                  d	
      j                         j                         }d}t        |      D ]W  }|j                         }|st        j                  |      }	|	j                  d      |k(  s@|	j                  d      dk(  sU|	} n d}
||
u}|st        j                   d|fd||
f      dt        j                         v st        j
                  |      rt        j                  |      ndt        j                  |
      dz  }t        j                  d| d      dz   d|iz  }t        t        j                  |            dx}}
t"        D cg c]	  }||vs| }}| }|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}t"        D ]  }||   }d}||u}
|
st        j                   d|
fd||f      t        j                  |      t        j                  |      dz  }t        j                  d|d      dz   d|iz  }t        t        j                  |            dx}x}
} |S c c}w ) u.  workspace/memory/orchestration-audit/state-recovery.jsonl에서
    task_id 매칭 reconcile_state_created 레코드 파싱 + 14필드 검증.

    append_reconcile_audit는 workspace 기반으로 고정 경로에 기록하므로
    audit_path_override가 아닌 workspace 경로를 사용한다.
    memoryzorchestration-auditstate-recovery.jsonlu   audit jsonl 없음: C
>assert %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.exists
}()
}r?   py0py2py4Nr   r    r   r9   reconcile_state_createdis not)z%(py0)s is not %(py3)sr@   )rH   py3u   audit에서 task_id=u&    reconcile_state_created 라인 없음z
>assert %(py5)spy5u   audit 14필드 누락: z
>assert not %(py0)srH   missingz%(py1)s is not %(py4)spy1rJ   u   audit 필드     값이 None
>assert %(py6)spy6)exists
@pytest_ar_format_assertmsg@py_builtinslocals_should_repr_global_name	_safereprAssertionError_format_explanation	read_textstrip
splitlinesreversedr   loadsget_call_reprcomparer   )	workspacer   r?   @py_assert1@py_assert3@py_format5linesr@   lineobj@py_assert2@py_format4@py_format6rA   rP   @py_format2field@py_assert0@py_format7s                      r   assert_all_audit_fieldsru   S   sa    X%(==@VVJCCCC"6zl CCCCCCC:CCC:CCCCCCCCCCCC  ' 288:EEGEF zz|jj779(SWWZ-@D]-]F e6eee6eeeeee6eee6eeeeee!5gY>deeeeeee0DQAVOqDGD;;;;;1';;;;;;;w;;;w;;;;;;' Pe}ODO}D(OOO}DOOO}OOODOOOM%,*OOOOOOOOPM	 Es   '	M"1M"c                (   d}d}d}ddd|id}t        | |      }| dz  }|j                          t        ||      }t        |      }	| d	z  d
z  }
t	        |
||	       | dz  }|j                  dt        t        j                               ddl	m
} |j                  |dd2d       t        |||t        |
      d| d||||
      }|d   }d}||u }|st        j                  d|fd||f      t        j                  |      t        j                  |      dz  }t        j                   d|d          dz   d|iz  }t#        t        j$                  |            dx}x}}|| dz  }|j&                  } |       }|st        j                   d      dz   dt)        j*                         v st        j,                  |      rt        j                  |      ndt        j                  |      t        j                  |      d z  }t#        t        j$                  |            dx}}t/        j0                  |j3                               }|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}}|j5                  d&      }t/        j6                  |d'dd()      }t9        j:                  |j=                  d*            j?                         }||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  }t        j                   d/      d0z   d1|iz  }t#        t        j$                  |            d}tA        | |       y)3uF   T1: state file missing + PR merged + valid .done → reconcile 성공.ztask-t1-reconciled   *abc1234abc1234abc1234abc1234abc1234abc1234MERGEDz2026-05-01T12:00:00ZoidstatemergedAtmergeCommiteventsauditrE   r|   zutils.state_repair.sys.modulesr   Ncheck_origin_main_ancestryc                    dd| dddS )NTzancestry PASS (monkeypatched)origin_head_fakemerge_commit_sha
origin_shaokreasondetail shacwds     r   <lambda>z+test_t1_reconcile_success.<locals>.<lambda>   s    5+.>PQ
 r   	test/repoTr   	pr_numberr   r7   reporg   r8   gh_cmdstate_dir_overrideevents_dir_overrideaudit_path_overrider   isz%(py1)s is %(py4)srR      reconcile 실패: r   rU   rV   .jsonu   state 파일 미생성rF   
state_filerG   current_stateDONE==z%(py1)s == %(py4)sassert %(py6)s	_checksumF,:ensure_ascii	sort_keys
separatorsr   z%(py0)s == %(py2)sstored_checksumexpected_checksumrH   rI   u   state checksum 불일치
>assert %(py4)srJ   N)!r   r   r$   r   rB   setattrdictsysmodulesutils.silent_corruption_guardsilent_corruption_guardr   r   rX   rf   r]   rY   r^   r_   rW   rZ   r[   r\   r   rd   r`   popr   hashlibsha256encode	hexdigestru   )r   monkeypatchr   r   r   
gh_payloadfake_ghr"   r#   done_shar?   	state_dirscg_modresultrs   ri   rn   rj   rt   r   rh   
state_datar   canonr   @py_format3s                             r   test_t1_reconcile_successr   s   s   !GIC */0J
 8Z0G H$Jz73I"9-H G#&<<JZ(3 7"I (S[[ 4$	
 &)*o!$&&F $<H4H<4HHH<4HHH<HHH4HHH#5fX6F5G!HHHHHHHH y..J8888 8888888:888:888888888888J0023Jo&0&0&&0000&&000&000&0000000 !nn[1OJJzR\]Eu||G'<=GGI//KKK?/KKKKKK?KKK?KKKKKK/KKK/KKKK1KKKKKKK Hg.r   c                   d}d}dddd}t        | |      }| dz  }|j                          | dz  }| dz  d	z  }t        ||d
t        |      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}|
|k(  }|st	        j
                  d|fd|
|f      t	        j                  |
      t	        j                  |      dz  }t	        j                  d|	d    d      dz   d|iz  }t        t	        j                  |            dx}
x}}y)u$   T2: PR not merged → step 1 실패.ztask-t2-open-pr   OPENNr{   r   r|   r   rE   (deadbeefdeadbeefdeadbeefdeadbeefdeadbeefr   Tr   r   Fr   r   rR   r   rV   step_failed   r   r   step_failed=u    (1 예상)rU   )
r   r   r   r   rX   rf   r]   r^   r_   rY   )r   r   r   r   r   r   r"   r   r?   r   rs   ri   rn   rj   rt   s                  r   test_t2_pr_not_mergedr      sG   GI J
 8Z0GH$J7"IG#&<<J%'*o!$&&F $< 5 <5    <5   <   5       - XAX A%XXX AXXX XXXAXXXf]6K5LK'XXXXXXXXr   c                   d}d}d}ddd|id}t        | |      }| dz  }|j                          || d	z  }|j                  t        j                  d
di      d       t        |      }	| dz  dz  }
t        |
||	       | dz  }ddlm} |j                  |dd6d       t        |||t        |
      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}}g }|d   }d }||k(  }|}|s/d!}|d"   }|j"                  } |       }||v }|}|sd	}|d"   }||v }|}|st        j                  d#|fd$||f      t        j                  |      t        j                  |      d%z  }d&d'|iz  }|j%                  |       |st        j                  d(fd)f      t        j                  |      t        j                        t        j                        t        j                  |      d*z  }d+d,|iz  } |j%                  |        |s_t        j                  d(fd-f      t        j                  |      t        j                  |      d.z  }!d/d0|!iz  }"|j%                  |"       t        j&                  |d1      i z  }#t        j(                  d2|d    d3|d"          d4z   d5|#iz  }$t        t        j                   |$            dx}x}x}x}x}x}x}x}x}x}x}x}}y)7uD   T3: invalid .done (스키마 미준수) → schema 오류로 reject.ztask-t3-bad-donei,  (ccccddddeeeeffffccccddddeeeeffffccccddddry   z2026-05-02T10:00:00Zrz   r{   r   r   foobarr   r    r   rE   r|   r   Nr   c                    dd| dddS NTancestry PASSfake_originr   r   r   r   s     r   r   z-test_t3_invalid_done_schema.<locals>.<lambda>	      %+.mL
 r   r   Tr   r   Fr   r   rR   r   rV   r      schemar   r   )z%(py3)s == %(py6)s)rN   rV   z%(py8)spy8in)zJ%(py11)s in %(py18)s
{%(py18)s = %(py16)s
{%(py16)s = %(py14)s.lower
}()
})py11py14py16py18z%(py20)spy20)z%(py23)s in %(py26)s)py23py26z%(py28)spy28r   u   예상과 다른 실패: step=z	, reason=z
>assert %(py31)spy31r   )r   r   r   r   r   r   rB   r   r   r   r   r   rX   rf   r]   r^   r_   lowerappend_format_booloprY   )%r   r   r   r   r   r   r   r"   r#   r   r?   r   r   r   rs   ri   rn   rj   rt   rh   @py_assert5@py_assert4@py_assert10@py_assert13@py_assert15@py_assert17@py_assert12@py_assert22@py_assert25@py_assert24@py_format9@py_format19@py_format21@py_format27@py_format29@py_format30@py_format32s%                                        r   test_t3_invalid_done_schemar      sY    GIA */0J
 8Z0GH$J y..IUEN3gF"9-HG#&<<JZ(37"I3$	
 &)*o!$&&F $< 5 <5    <5   <   5       6-  A  A%  VH5E 5E5K5K 5K5M 5M)M QX \bck\l QX\lQl    A    !    %&     5M    *2    6F    6L    6N     QX\l    RY    ]m        ))>(?yPXIYHZ[       r   c                   d}d}d}ddd|id}t        | |      }| dz  }|j                          t        ||      }t        |      }	|| d	z  }
|
j	                  t        j                  d
dgi      d       | dz  dz  }t        |||	       | dz  }ddlm	} |j                  |dd0d       t        |||t        |      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   j%                         }g }d }||v }|}|sd!}||v }|}|stt        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-                  |       |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  }|j-                  |       t        j.                  |d,      i z  }t        j0                  d-|d          d.z   d/|iz  }t!        t        j"                  |            dx}x}x}x}x}}y)1uQ   T4: .g3-fail이 unresolved (fail_reasons에 'test failure') → reconcile 차단.ztask-t4-g3-unresolvedi  (dddd1111dddd2222dddd3333dddd4444dddd5555ry   z2026-05-03T10:00:00Zrz   r{   r   .g3-failfail_reasonsz test failure: pytest exit code 1r   r    r   rE   r|   r   Nr   c                    dd| dddS r   r   r   s     r   r   z,test_t4_g3_fail_unresolved.<locals>.<lambda>N  r   r   r   Tr   r   Fr   r   rR   r   rV   r   g3
unresolvedr   z%(py3)s in %(py5)sreason_lowerrN   rO   %(py7)spy7z%(py10)s in %(py12)spy10py12%(py14)sr   r   u+   reason에 'g3' 또는 'unresolved' 없음: 
>assert %(py17)spy17r   )r   r   r$   r   r   r   r   rB   r   r   r   r   r   rX   rf   r]   r^   r_   r   rZ   r[   r\   r   r   rY   )r   r   r   r   r   r   r   r"   r#   r   g3_fail_pathr?   r   r   r   rs   ri   rn   rj   rt   r  rh   r   @py_assert9@py_assert11rp   @py_format8@py_format13@py_format15@py_format16@py_format18s                                  r   test_t4_g3_fail_unresolvedr  *  s   %GIA */0J
 8Z0GH$J z73I"9-H 7)8 44L

N%G$HIJ  
 G#&<<JZ(37"I3$	
 &)*o!$&&F $< 5 <5    <5   <   5       (#))+L4 4< < <<#?   4<                     <<    $0      4@    4@        6fX6F5GH     r   c                (   d}d}d}ddd|id}t        | |      }| dz  }|j                          | d	z  }| d
z  dz  }	ddlm}
 |j	                  |
dd!d       t        |||t        |	      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}||k(  }|st        j                  d|fd||f      t        j                  |      t        j                  |      dz  }t        j                  d|d    d      d z   d|iz  }t        t        j                  |            dx}x}}y)"uA   T5: PR=MERGED 이지만 ancestry 검증 실패 → step 2 실패.ztask-t5-ancestry-faili  (eeee1111eeee2222eeee3333eeee4444eeee5555ry   z2026-05-04T10:00:00Zrz   r{   r   r|   r   rE   r   Nr   c                    dd| dddS )NFz8merge_commit not ancestor of origin/main (monkeypatched)r   r   r   r   r   s     r   r   z'test_t5_ancestry_fail.<locals>.<lambda>  s    P+.mL
 r   r   Tr   r   Fr   r   rR   r   rV   r   r   r   r   r   u    (2 예상)rU   r   )r   r   r   r   r   r   r   rX   rf   r]   r^   r_   rY   )r   r   r   r   r   r   r   r"   r   r?   r   r   rs   ri   rn   rj   rt   s                    r   test_t5_ancestry_failr  o  ss   %GIA */0J
 8Z0GH$J7"IG#&<<J 4$	
 &)*o!$&&F $< 5 <5    <5   <   5       - XAX A%XXX AXXX XXXAXXXf]6K5LK'XXXXXXXXr   c                x   d}d}d}ddd|id}t        | |      }| dz  }|j                          t        ||      }d	}	| d
z  dz  }
t        |
||	       | dz  }ddlm} |j                  |dd,d       t        |||t        |
      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   j                         }g }d}||v }|}|sd}||v }|}|stt        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%                  |       |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  }|j%                  |       t        j&                  |d(      i z  }t        j(                  d)|d          d*z   d+|iz  }t        t        j                  |            dx}x}x}x}x}}y)-uE   T6: audit의 done_sha256과 실제 .done sha256 불일치 → reject.ztask-t6-sha256-mismatchiX  (ffff1111ffff2222ffff3333ffff4444ffff5555ry   z2026-05-05T10:00:00Zrz   r{   r   @aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaar   rE   r|   r   Nr   c                    dd| dddS r   r   r   s     r   r   z+test_t6_checksum_mismatch.<locals>.<lambda>  r   r   r   Tr   r   Fr   r   rR   r   rV   r   r   checksumr   r  r  r  r  r  r  r	  r  r   r   u-   reason에 'sha256' 또는 'checksum' 없음: r  r  r   )r   r   r$   rB   r   r   r   r   r   rX   rf   r]   r^   r_   r   rZ   r[   r\   r   r   rY   )r   r   r   r   r   r   r   r"   r#   	wrong_shar?   r   r   r   rs   ri   rn   rj   rt   r  rh   r   r  r  rp   r  r  r  r  r  s                                 r   test_t6_checksum_mismatchr"    s   'GIA */0J
 8Z0GH$Jz73IIG#&<<JZ)47"I3$	
 &)*o!$&&F $< 5 <5    <5   <   5       (#))+L8 8|# z z\'A   8|          $    $     z\    (2      6B    6B        8x8H7IJ     r   c                   d}d}d}ddd|id}t        | |      }| dz  }|j                          t        ||      }t        |      }	| d	z  d
z  }
t	        |
||	       | dz  }ddlm} |j                  |dd'd       t        |||t        |
      d| d||||
      }|d   }d}||u }|st        j                  d|fd||f      t        j                  |      t        j                  |      dz  }t        j                  d|d          dz   d|iz  }t        t        j                  |            dx}x}}t!        | |      }t"        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!      d"z   d#|iz  }t        t        j                  |            d}||   }d}||u}|st        j                  d$|fd%||f      t        j                  |      t        j                  |      dz  }t        j                  d |d&      dz   d|iz  }t        t        j                  |            dx}x}} y)(uO   T7: 성공 시나리오에서 audit jsonl 14필드 모두 존재 + None 아님.ztask-t7-audit-fieldsi  (aaaa1111bbbb2222cccc3333dddd4444eeee5555ry   z2026-05-06T10:00:00Zrz   r{   r   r   rE   r|   r   Nr   c                    dd| dddS )NTr   t7_origin_headr   r   r   r   s     r   r   z)test_t7_audit_14_fields.<locals>.<lambda>  s    %+.>NO
 r   r   Tr   r   r   r   rR   r   r   rU   rV   r   )z%(py0)s in %(py2)srr   r@   r   u   필드 u    없음r   rJ   rL   rQ   rT   r   )r   r   r$   r   rB   r   r   r   r   r   rX   rf   r]   rY   r^   r_   ru   r   rZ   r[   r\   )r   r   r   r   r   r   r   r"   r#   r   r?   r   r   r   rs   ri   rn   rj   rt   r@   rr   rh   r   s                          r   test_t7_audit_14_fieldsr'    s>   $GIA */0J
 8Z0GH$Jz73I"9-HG#&<<JZ(37"I3$	
 &)*o!$&&F $<H4H<4HHH<4HHH<HHH4HHH#5fX6F5G!HHHHHHHH %Xw7F ( J:::u::::::u:::u:::::::::::::'%' :::::::e}IDI}D(III}DIII}IIIDIIIGE9L*IIIIIIIIJr   c                6	   d}d}d}ddd|id}t        | |      }| dz  }|j                          || d	z  }|j                  t        j                  |d
d|d      d       t        |      }	|| dz  }
|
j                  t        j                  ddgi      d       | dz  dz  }|j                  d       || dz  }|j                  d| dd       |
j                         j                  }t        j                  t        |      |dz   |dz   f       | dz  dz  }t        |||	       | dz  }ddlm} |j                  |dd?d        t        |||t        |      d!| d||||"      }|d#   }d}||u }|st!        j"                  d$|fd%||f      t!        j$                  |      t!        j$                  |      d&z  }t!        j&                  d'|d(          d)z   d*|iz  }t)        t!        j*                  |            dx}x}}|| d+z  }|j,                  } |       }|sd,d-t/        j0                         v st!        j2                  |      rt!        j$                  |      nd-t!        j$                  |      t!        j$                  |      d.z  }t)        t!        j*                  |            dx}}t        j4                  |j7                               }|d/   }d0}||k(  }|slt!        j"                  d1|fd2||f      t!        j$                  |      t!        j$                  |      d&z  }d3d*|iz  }t)        t!        j*                  |            dx}x}}|j9                  d4      }t        j                  |d5dd67      }t;        j<                  |j?                  d            jA                         }||k(  }|st!        j"                  d1|fd8||f      d9t/        j0                         v st!        j2                  |      rt!        j$                  |      nd9d:t/        j0                         v st!        j2                  |      rt!        j$                  |      nd:d;z  }t!        j&                  d<      d=z   d>|iz  }t)        t!        j*                  |            d}y)@u   T8: task-2472 케이스 격리 재현. 실제 파일 변경 없이 unit test로 검증.

    task_id="task-2472-dogfooding-test" 로 격리.
    ztask-2472-dogfooding-testr(   (6ec4e0d8a4e4d2dd39fbd13eb19a69d4212faebary   z2026-04-20T08:00:00Zrz   r{   r   r   r+   z2026-04-20T07:55:00Z)r   r   r   r   r   r    r   r   zreport not foundrD   reportsT)r&   z.mdz# z report

   r   rE   r|   r   Nr   c                    dd| dddS )NTzancestry PASS (dogfooding sim)dogfooding_originr   r   r   r   s     r   r   z/test_t8_dogfooding_simulation.<locals>.<lambda>\  s    6+.>QR
 r   r   r   r   r   r   rR   u#   dogfooding 시뮬레이션 실패: r   rU   rV   r   zAassert %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.exists
}()
}r   rG   r   r   r   r   r   r   Fr   r   r   r   r   r   u#   dogfooding state checksum 불일치r   rJ   r   )!r   r   r   r   r   r   statst_mtimeosutimer   rB   r   r   r   r   rX   rf   r]   rY   r^   r_   rW   rZ   r[   r\   rd   r`   r   r   r   r   r   )r   r   r   r   r   r   r   r"   r#   r   r  reports_dirreport_pathg3_mtimer?   r   r   r   rs   ri   rn   rj   rt   r   rh   r   r   r   r   r   s                                 r   test_t8_dogfooding_simulationr5  "  s   
 *GIA */0J
 8Z0GH$J y..I

2 0	
 	    #9-H 7)8 44L

N%7$89:   X%	1Kd#7)3/KRy	2WE   "++HHHS2x"}=>G#&<<JZ(37"I3$	
 &)*o!$&&F $<Y4Y<4YYY<4YYY<YYY4YYY#FvhGWFX!YYYYYYYY y..J::J0023Jo&0&0&&0000&&000&000&0000000 !nn[1OJJzR\]Eu||G'<=GGI//VVV?/VVVVVV?VVV?VVVVVV/VVV/VVVV1VVVVVVVr   )r   r   r   r   returnz	list[str])r+   )r"   r   r   r   r   r   r6  r   )r?   r   r   r   r4   r   r6  None)rg   r   r   r   r6  r   )r   r   )&__doc__
__future__r   builtinsrZ   _pytest.assertion.rewrite	assertionrewriterX   r   r   r0  r   pathlibr   __file__resolver&   _WT_ROOTr   pathinsertutils.state_repairr   r   r   r   r$   rB   ru   r   r   r   r  r  r"  r'  r5  r   r   r   <module>rE     s   	 #     	 
  >!!#++A.x= HHOOAs8}% 		+.@H/` YP7~=J-Yj6|8J@^Wr   