
    4jD              	         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Zddl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m Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z& edz  dz  dz  Z'd	 Z( ejR                  d
      d        Z*d)dZ+ddddZ,d Z-d Z.ej^                  ja                  dd dfd dfd dfd dfd dfg      d        Z1d Z2d  Z3d! Z4d" Z5d# Z6d$ Z7d% Z8d& Z9d' Z:d( Z;y)*u  tests/regression/test_cancel_on_success_live_observation_2553plus28.py

task-2553+28 — CALLBACK CANCEL-ON-SUCCESS LIVE OBSERVATION FIXTURE regression.

§3.2 6-step assertion (전건 PASS, 100% mock/fixture):
  ① normal success → seam 1회
  ② verifier 5조건 AND PASS → remove called
  ③ 각 mismatch/SKIP → preserve (remove 0)
  ④ fallback 발화 0 (spy schedule_history)
  ⑤ cancel-audit JSON schema 정합 (필수 8필드 + 5각 + normal_success_unchanged)
  ⑥ exact-once O_EXCL (동시 2호출 → 1 invoke·1 no-op, +25 9-R.3 정합)
  ⑦ 디커플 (cron-remove 실패 → normal collector success 불변)

부가 단언:
  • frozen anchor byte-0 (sha 전후 동일, §7)
  • 격리 강제 self-test: subprocess 차단·실 cron API 차단·live-path 차단
  • mock-only / 실 운영 무접촉 evidence
  • observation-fixture-decision.json ↔ harness 매핑 정합
  • live `/home/jay/workspace` git tracked HEAD/branch/ref 전후 assertEqual
    (§5 / 9-R.5 — task-2553+28.* marker=untracked, 위반 아님)

100% offline. 실 callback cron / cokacdir subprocess / 실 schedule_history /
실 4-tuple / network / git mutation 0. 실 운영 cron 실제 삭제·실 발화 0.
    )annotationsN)Path)ANU_CHAT_IDCONTRACT_PATHFROZEN_ANCHOR
FROZEN_SHALIVE_SCHEDULE_HISTORYFakeCronLister
SpyRemoverSpyScheduleHistoryattempt_exact_once_claiminstall_isolation_guardsmaterialize_scenarioobserve_six_stepsimulate_concurrent_doublememoryeventsz.task-2553+28.observation-fixture-decision.jsonc                 R   t         dz  } | dz  j                  d      j                         }|j                  d      r|j	                  dd      d   n|}|j                  d      r| |z  nd }|r3|j                         r#| |z  j                  d      j                         n|}|||fS )Nz.gitHEADutf-8encodingzref:zref:    )	WORKSPACE	read_textstrip
startswithsplitexists)git_dirhead_txtbranchref_pathshas        Z/home/jay/workspace/tests/regression/test_cancel_on_success_live_observation_2553plus28.py_git_refr&   C   s    & G& ++W+=CCEH)1)<)<V)Dw"1%(  $,#6#6v#>wDH ) 
6	$$g$6<<> 
 fc""    T)autousec               #  B  K   t               } d  t               }|| k(  }|st        j                  d|fd|| f      dt        j                         v st        j
                  t               rt        j                  t               ndt        j                  |      dt        j                         v st        j
                  |       rt        j                  |       nddz  }t        j                  d      dz   d|iz  }t        t        j                  |            d x}}y w)	N==)z)%(py2)s
{%(py2)s = %(py0)s()
} == %(py4)sr&   beforepy0py2py4u.   git HEAD/branch/ref 변경 감지 (§5 위반)
>assert %(py6)spy6)
r&   
@pytest_ar_call_reprcompare@py_builtinslocals_should_repr_global_name	_saferepr_format_assertmsgAssertionError_format_explanation)r,   @py_assert1@py_assert3@py_format5@py_format7s        r%   _git_ref_invariantr@   R   s     ZF	:Q:QQQ:QQQQQQ8QQQ8QQQ:QQQQQQQQQQQQQ!QQQQQQQs   DDc                     t        | dz  fi |S )Nsandbox)r   )tmp_pathkws     r%   	_scenariorE   Y   s    9 4;;;r'   removed)remover_statushistory_firedc               r    t        | d   | d         }t        |      }t        | d   |xs g       }|||fS )Nverifier_entriestarget_cron_id)drop_id_after_first)statusrB   )	fired_ids)r
   r   r   )scenariorG   rH   listerremoverhistorys         r%   _fakesrS   ]   sR    #$$%56F /G }':G 7G##r'   c                   t        ||        t        |       }t        |      \  }}}t        ||||      }|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
}||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}	}y )NrP   rQ   rR   TiszF%(py2)s
{%(py2)s = %(py0)s.step1_normal_collector_success
} is %(py5)sobsr.   r/   py5assert %(py7)spy7)z?%(py2)s
{%(py2)s = %(py0)s.step2_seam_invoked_once
} is %(py5)sr   r*   )z9%(py2)s
{%(py2)s = %(py0)s.seam_invoke_count
} == %(py5)s)r   rE   rS   r   step1_normal_collector_successr3   r4   r5   r6   r7   r8   r:   r;   step2_seam_invoked_onceseam_invoke_count)rC   monkeypatchscrP   rQ   rR   rY   r<   @py_assert4r=   @py_format6@py_format8s               r%   &test_step1_normal_success_to_seam_oncerf   l   s   [(3	8	B%bzFGW
2fgw
OC--55-5555-55555535553555-5555555555&&.$.&$....&$......3...3...&...$.......  %A% A%%%% A%%%%%%3%%%3%%% %%%A%%%%%%%r'   c                   t        ||        t        |       }t        |      \  }}}t        ||||      }|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	   fd
dD        }t        |      }	|	sddt        j                         v st        j                  t              rt        j                  t              ndt        j                  |      t        j                  |	      dz  }t        t        j                  |            d x}}	|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}	}|j"                  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}}	y )NrU   TrV   zD%(py2)s
{%(py2)s = %(py0)s.step3_verifier_five_and_pass
} is %(py5)srY   rZ   r\   r]   five_condition_resultsc              3  ,   K   | ]  }|   d u   yw)TN ).0kfives     r%   	<genexpr>z@test_step2_verifier_five_and_pass_then_remove.<locals>.<genexpr>   s!      	 	Q4	s   )c1_task_id_matchc2_chat_id_ownedc3_role_fallbackc4_marker_id_crosscheck c5_pending_not_fired_not_removed,assert %(py4)s
{%(py4)s = %(py0)s(%(py2)s)
}allr-   zE%(py2)s
{%(py2)s = %(py0)s.step4_fallback_cron_remove_ok
} is %(py5)sr   r*   z9%(py2)s
{%(py2)s = %(py0)s.remove_call_count
} == %(py5)sr   dry_runFz%(py1)s is %(py4)spy1r0   assert %(py6)sr2   )r   rE   rS   r   step3_verifier_five_and_passr3   r4   r5   r6   r7   r8   r:   r;   cancel_auditrv   step4_fallback_cron_remove_okremove_call_countcalls)rC   ra   rb   rP   rQ   rR   rY   r<   rc   r=   rd   re   r>   @py_assert0@py_assert2r?   rn   s                   @r%   -test_step2_verifier_five_and_pass_then_remover   y   s   [(3	8	B%bzFGW
2fgw
OC++3t3+t3333+t33333333333333+333t333333345D	
	 	3 	 	 	 	 	 	 	   	 	   	 	 	 	 	 	 	 	 	 	 	 ,,44,4444,44444434443444,4444444444  %A% A%%%% A%%%%%%3%%%3%%% %%%A%%%%%%%==I&/%/&%////&%///&///%///////r'   zmutate,labelc                &    | j                  d      S )Nz
task-OTHER)task_idupdatees    r%   <lambda>r      s    188L81 r'   ztask_id mismatchc                &    | j                  d      S )No   )chat_idr   r   s    r%   r   r      s    188C8( r'   zchat_id not ownedc                &    | j                  d      S )Nnormal)roler   r   s    r%   r   r      s    1888* r'   zrole not fallbackc                &    | j                  d      S )NT)firedr   r   s    r%   r   r      s    188$8' r'   zalready firedc                &    | j                  d      S )NT)rF   r   r   s    r%   r   r      s    188D8) r'   zalready removedc                   t        ||        t        |       } ||d   d          t        |      \  }}}t        ||||      }|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	z   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  }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	z   d
|iz  }t        t        j                  |            d x}	x}}
|j                   d   }d}||u }|st        j                  d|fd||f      t        j                  |      t        j                  |      dz  }t        j                  |      dz   d|iz  }t        t        j                  |            d x}x}}y )NrJ   r   rU   FrV   rh   rY   rZ   
>assert %(py7)sr]   r*   rx   u%   : 실 remove 발생 (preserve 위반)TrX   normal_success_unchangedrz   r{   r1   r2   )r   rE   rS   r   r~   r3   r4   r5   r6   r7   r8   r9   r:   r;   r   r^   r   )rC   ra   mutatelabelrb   rP   rQ   rR   rY   r<   rc   r=   rd   re   r   r   r>   r?   s                     r%   "test_step3_mismatch_skip_preservesr      s.    [(3	8	B
2 !!$%%bzFGW
2fgw
OC++;u;+u4;;;+u;;;;;;3;;;3;;;+;;;u;;;e;;;;;;;  VAV A%VVV AVVVVVV3VVV3VVV VVVAVVV%0U'VVVVVVVV--<<-5<<<-<<<<<<3<<<3<<<-<<<<<<u<<<<<<<67F4F74?FFF74FFF7FFF4FFFFFFFFFFr'   c                :   t        ||        t        |       }t        |      \  }}}t        ||||      }|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	   }	 ||	      }d}||u }|st        j                  d|fd
||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |	      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}	x}x}}|j                  }|st        j                  d      dz   dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      dz  }t        t        j                  |            d }y )NrU   TrV   )z@%(py2)s
{%(py2)s = %(py0)s.step5_no_fallback_firing
} is %(py5)srY   rZ   r\   r]   rK   )zO%(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.no_firing
}(%(py4)s)
} is %(py9)srR   )r.   r/   r0   r2   py9zassert %(py11)spy11u6   schedule_history spy 미조회 (passive 관측 누락)z+
>assert %(py2)s
{%(py2)s = %(py0)s.reads
}r.   r/   )r   rE   rS   r   step5_no_fallback_firingr3   r4   r5   r6   r7   r8   r:   r;   	no_firingreadsr9   )rC   ra   rb   rP   rQ   rR   rY   r<   rc   r=   rd   re   @py_assert5@py_assert8@py_assert7@py_format10@py_format12@py_format3s                     r%   test_step4_no_fallback_firingr      s   [(3	8	B%bzFGW
2fgw
OC''/4/'4////'4//////3///3///'///4///////:R 01:12:d:2d::::2d::::::7:::7::::::1:::2:::d:::::::==R=RRRRRRRRR7RRR7RRR=RRRRRRr'   c                   t        ||        t        |       }t        |      \  }}}t        ||||      }|j                  }dD ]  }||v }	|	st        j                  d|	fd||f      dt        j                         v st        j                  |      rt        j                  |      nddt        j                         v st        j                  |      rt        j                  |      nddz  }
t        j                  d|       d	z   d
|
iz  }t        t        j                  |            d }	 |d   }	t        |	      }h d}||k\  }|st        j                  d|fd||f      dt        j                         v st        j                  t              rt        j                  t              ndt        j                  |	      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}	x}x}}|d   }d}||u }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}|d   }d}||u }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}|d   }d}||k(  }|slt        j                  d|fd||f      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}}y )$NrU   )schemaevent_idri   remove_attemptedremove_resultskip_reasonalready_removed_or_missingr   )in)z%(py0)s in %(py2)srm   ar   u#   cancel-audit 필수 필드 누락: 
>assert %(py4)sr0   ri   >   rp   rq   rr   rs   rt   >=)z0%(py4)s
{%(py4)s = %(py0)s(%(py2)s)
} >= %(py7)ssetr.   r/   r0   r]   assert %(py9)sr   r   TrV   rz   r{   r}   r2   r   r   	CANCELLEDr*   z%(py1)s == %(py4)s)zD%(py2)s
{%(py2)s = %(py0)s.step6_cancel_audit_schema_ok
} is %(py5)srY   rZ   r\   r]   )r   rE   rS   r   r   r3   r4   r5   r6   r7   r8   r9   r:   r;   r   step6_cancel_audit_schema_ok)rC   ra   rb   rP   rQ   rR   rY   r   rm   r<   r   r>   r=   @py_assert6r   re   r   r   r   r?   rc   rd   s                         r%   test_step5_cancel_audit_schemar      s   [(3	8	B%bzFGW
2fgw
OCA	 
A Av@@@qA@@@@@@q@@@q@@@@@@A@@@A@@@@<QC@@@@@@@
A )* 3*+  0 + 0   + 0              +    ,   0        '(0D0(D0000(D000(000D0000000 (D( D(((( D((( (((D(((((((_,,,,,,,,,,,,,,,,,,,++3t3+t3333+t33333333333333+333t3333333r'   c                   t        ||        | dz  dz  }t        j                  d      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}||u }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }d	d
|iz  }	t        t        j                  |	            d x}x}}|d   }d}||k(  }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }d	d
|iz  }	t        t        j                  |	            d x}x}}|d   }d}||u }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }d	d
|iz  }	t        t        j                  |	            d x}x}}|d   }d}||u }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }d	d
|iz  }	t        t        j                  |	            d x}x}}t        |j                  d            }
t        |
      }d}||k(  }|st        j                  d|fd||f      dt        j                         v st        j                  t              rt        j                  t              nddt        j                         v st        j                  |
      rt        j                  |
      ndt        j                  |      t        j                  |      dz  }	dd|	iz  }t        t        j                  |            d x}x}}t!        j"                  |
d   j%                  d            }|d   }d}||k(  }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }d	d
|iz  }	t        t        j                  |	            d x}x}}|d   }||k(  }|st        j                  d|fd||f      t        j                  |      d t        j                         v st        j                  |      rt        j                  |      nd d!z  }d"d#|iz  }t        t        j                  |            d x}}t'        ||      }d}||u }|s7t        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&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 )*NrB   claimss   task-2553+28-eventfirst_claimedTrV   rz   r{   r}   r2   second_claimedFr`   r   r*   r   second_is_noopexact_once_okz*.seam-claim.*.jsonz0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py6)slenr.   r|   py3r2   assert %(py8)spy8r   r   r   atomic_create_methodzO_CREAT|O_EXCLr   z%(py1)s == %(py3)seidr|   r   assert %(py5)sr[   )z9%(py4)s
{%(py4)s = %(py0)s(%(py1)s, %(py2)s)
} is %(py7)sr   	claim_dir)r.   r|   r/   r0   r]   r   r   )r   hashlibsha256	hexdigestr   r3   r4   r8   r:   r;   listglobr   r5   r6   r7   jsonloadsr   r   )rC   ra   r   r   resr   r=   r   r>   r?   r   r   rc   @py_format9payload@py_format4rd   r   re   r   s                       r%   test_step6_exact_once_oexclr      s   [(39$x/I
...
/
9
9
;C
$Y
4C'4'4''''4''''''4''''''' )E) E)))) E))) )))E)))))))"#(q(#q((((#q(((#(((q((((((( (D( D(((( D((( (((D((((((('4'4''''4''''''4''''''')..!678Fv;!;!;!33vv;!jj,,g,>?G)*>.>>*.>>>>>*.>>>>*>>>.>>>>>>>>:%#%%%%#%%%%%%%%%#%%%#%%%%%%%#Is3<u<3u<<<<3u<<<<<<#<<<#<<<<<<I<<<I<<<<<<s<<<s<<<3<<<u<<<<<<<r'   c                   t        ||        t        |       }t        |d      \  }}}t        ||||      }|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   }d}	||	u }|slt        j                  d|fd||	f      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   }d}	||	k7  }|slt        j                  d|fd||	f      t        j                  |      t        j                  |	      dz  }dd|iz  }t        t        j                  |            d x}x}}	y )Nfailed)rG   rU   TrV   rX   rY   rZ   r\   r]   r   rz   r{   r}   r2   Frw   r   r   )!=)z%(py1)s != %(py4)s)r   rE   rS   r   r^   r3   r4   r5   r6   r7   r8   r:   r;   r   r   )rC   ra   rb   rP   rQ   rR   rY   r<   rc   r=   rd   re   r   r   r>   r?   s                   r%   "test_step7_decouple_remove_failurer      s   [(3	8	B%bBFGW
2fgw
OC--55-5555-55555535553555-555555555567?4?74????74???7???4???????,,55,5555,55555535553555,5555555555O,;;,;;;;,;;;,;;;;;;;;;;r'   c                 X   t        j                  t        j                               j	                         } | t
        k(  }|st        j                  d|fd| t
        f      dt        j                         v st        j                  |       rt        j                  |       nddt        j                         v st        j                  t
              rt        j                  t
              nddz  }t        j                  d      dz   d|iz  }t        t        j                  |            d }y )	Nr*   )z%(py0)s == %(py2)sr$   r   r   u(   frozen anchor byte-0 변경 (§7 위반)r   r0   )r   r   r   
read_bytesr   r   r3   r4   r5   r6   r7   r8   r9   r:   r;   )r$   r<   r   r>   s       r%   test_frozen_anchor_byte0r     s    
..113
4
>
>
@C*HHH3*HHHHHH3HHH3HHHHHH*HHH*HHHHHHHHHHHr'   c                ,   t        ||        t        j                  t              5  t	        j
                  ddg       d d d        t        j                  t              5  t        j                  d       d d d        y # 1 sw Y   AxY w# 1 sw Y   y xY w)Nechoxzecho x)r   pytestraisesr:   
subprocessrunossystem)rC   ra   s     r%    test_isolation_blocks_subprocessr     so    [(3	~	& &}%&	~	& 
		( & & s   A>B
>B
Bc                F   t        ||        dd lm} dd lm} t        j                  t              5   |j                                 d d d        t        j                  t              5   |j                         dd       d d d        y # 1 sw Y   DxY w# 1 sw Y   y xY w)Nr   FB1F)ry   )
r   )utils.completion_callback_fallback_cancel#completion_callback_fallback_cancelutils.live_cron_state_verifierlive_cron_state_verifierr   r   r:   RealCokacdirCronListerRealCokacdirCronRemover)rC   ra   fclvs       r%   #test_isolation_blocks_real_cron_apir     s    [(3:/	~	& &#!!#%&	~	& ;$""$UE:; ;& &; ;s   B)BBB c                |   t        ||        t        j                  t              5  t	        j
                  t        t        dz        d       d d d        t        j                  t              5  t        j
                  t        t        dz        t        j                         d d d        | dz  }t	        j
                  t        |      d      5 }|j                  d       d d d        |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"                  |      t        j"                  |      dz  }d	d
|iz  }	t        t        j$                  |	            d x}x}x}}t	        j
                  t        t&              d      5 }|j(                  }d} ||      }|sddt        j                         v st        j                   |      rt        j"                  |      ndt        j"                  |      t        j"                  |      t        j"                  |      dz  }
t        t        j$                  |
            d x}x}}d d d        t        j                  t              5  t	        j
                  t        t&              d       d d d        y # 1 sw Y   xY w# 1 sw Y   kxY w# 1 sw Y   :xY w# 1 sw Y   vxY w# 1 sw Y   y xY w)NzFBX.logwzok.txtokr*   )zH%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.read_text
}()
} == %(py7)spr   r   r   rr   zFassert %(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.read
}(%(py4)s)
}f)r.   r/   r0   r2   )r   r   r   r:   builtinsopenstrr	   r   O_RDONLYwriter   r3   r4   r5   r6   r7   r8   r;   r   read)rC   ra   r   r   r<   r=   r   r   re   r   r?   s              r%    test_isolation_blocks_live_pathsr    s   [(3	~	& Cc/);<cBC	~	& E
)I56DE 	8A	s1vs	# q	;; ;= D =D    =D      1   1   ;   =   D       	s=)3	/ 1vvavayyqqvay	~	& /c-(#./ /C CE E  / /s<   'K?.5LL1C L&$L2?L	LL#&L/2L;c                   t        ||        t        |       }t        |      \  }}}t        ||||      }|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                  |j                               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  }
d
d|
iz  }t        t        j                  |            d x}x}	}d |j                   D        }t#        |      }	|	sddt        j                         v st        j                  t"              rt        j                  t"              ndt        j                  |      t        j                  |	      dz  }t        t        j                  |            d x}}	g }|j                   }	d}|	|k\  }|}|r|j$                  }|d   } ||      }| }|}|stt        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  }|j'                  |       |rddt        j                         v st        j                  |      rt        j                  |      ndt        j                        t        j                        t        j                        dz  }|j'                  |       t        j(                  |d      i z  }dd|iz  }t        t        j                  |            d x}x}x}	x}x}x}x}x}}y )NrU   TrV   )z0%(py2)s
{%(py2)s = %(py0)s.all_pass
} is %(py5)srY   rZ   r   r]   )z1%(py2)s
{%(py2)s = %(py0)s.mock_only
} is %(py5)sr\   c              3  *   K   | ]  }|d    du   yw)ry   FNrk   )rl   cs     r%   ro   z/test_mock_only_full_six_step.<locals>.<genexpr><  s     <q|u$<s   ru   rv   r-   r   rK   r   )z-%(py4)s
{%(py4)s = %(py2)s.calls
} >= %(py7)srP   )r/   r0   r]   z%(py9)sr   zOnot %(py17)s
{%(py17)s = %(py13)s
{%(py13)s = %(py11)s.id_present
}(%(py15)s)
})r   py13py15py17r   zassert %(py21)spy21)r   rE   rS   r   all_passr3   r4   r5   r6   r7   r8   r9   step_mapr:   r;   	mock_onlyr   rv   
id_presentappend_format_boolop)rC   ra   rb   rP   rQ   rR   rY   r<   rc   r=   rd   re   r>   r   r   r   @py_assert12@py_assert14@py_assert16@py_assert18r   @py_format19@py_format20@py_format22s                           r%   test_mock_only_full_six_stepr  4  s   [(3	8	B%bzFGW
2fgw
OC<</4/<4///<4//////3///3///<///4//////////== D =D    =D      3   3   =   D       <gmm<<3<<<<<<<<<3<<<3<<<<<<<<<<<<<<L6<<L1L<1LV%6%6Lr:J7KL%67K%LL%L!LL!LLLL<1LLLLLL6LLL6LLL<LLL1LLLLLLLLLLVLLLVLLL%6LLL7KLLL%LLLLLLLLLLLLLLLr'   c                    t         j                  } |       }|st        j                  d      dz   dt	        j
                         v st        j                  t               rt        j                  t               ndt        j                  |      t        j                  |      dz  }t        t        j                  |            d x}}t        j                  t         j                  d            }|d   }d}||u }|slt        j                  d	|fd
||f      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}|d   }d}||u }|slt        j                  d	|fd
||f      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}|d   }d}||u }|slt        j                  d	|fd
||f      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}|d   }|t        k(  }|st        j                  d|fd|t        f      t        j                  |      dt	        j
                         v st        j                  t              rt        j                  t              nddz  }	dd|	iz  }
t        t        j                  |
            d x}}|d   }t        |      }t!        dd      D ch c]  }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#        ||        t%        |       }t'        |      \  }}}t)        ||||!      }|j+                         j-                         D ]L  \  }}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&z   d|	iz  }
t        t        j                  |
            d x}}||   d'   }|s8d(d)t        j                  |      iz  }t        t        j                  |            d }||   d*   }|s8d(d)t        j                  |      iz  }t        t        j                  |            d }O y c c}w )+Nu(   observation-fixture-decision.json 부재zC
>assert %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.exists
}()
}DECISION_JSONr-   r   r   r  TrV   rz   r{   r}   r2   real_ops_zero_touchfuture_real_task_applicableanu_chat_idr*   r   r   r   r   r[   contract_six_step_to_harnessr      stepr   r   mappingr   r   r   rU   )z%(py0)s is %(py3)sr   )r.   r   u)    관측 실패 — decision 정합 위반z
>assert %(py5)sharness_componentzassert %(py1)sr|   mock_artifact)r  r   r3   r9   r5   r6   r7   r8   r:   r;   r   r   r   r4   r   r   ranger   rE   rS   r   r  items)rC   ra   r<   r=   r>   decr   r   r?   r   rd   r"  ir   rc   r   rb   rP   rQ   rR   rY   r!  r   @py_format2s                           r%   test_decision_json_consistencyr*  C  s   M!M!MM#MMMMMMM=MMM=MMMMMM!MMMMMM
**],,g,>
?C{#t#t####t######t#######$%--%----%---%----------,-55-5555-555-5555555555},,,,,,,,,,,,,,,,,,,,,,,,01Gw<<a<1d1#J<<<<<<<<<<<<<<<<<3<<<3<<<<<<w<<<w<<<<<<<<<<<<<<<[(3	8	B%bzFGW
2fgw
OCLLN((* .bMrTzMMMrTMMMMMMrMMMrMMMTMMMdV#LMMMMMMMt}0111111111111t}_-------------. =s   W;)rC   r   )<__doc__
__future__r   r   r5   _pytest.assertion.rewrite	assertionrewriter3   r   r   r   r   syspathlibr   r   __file__resolveparentr   r   pathremoveinsert4tests.fixtures.cancel_on_success_observation_harnessr   r   r   r   r	   r
   r   r   r   r   r   r   r   r  r&   fixturer@   rE   rS   rf   r   markparametrizer   r   r   r   r   r   r   r   r  r  r*  rk   r'   r%   <module>r<     s  0 #      	  
  N""$++2299	y>SXXHHOOC	N# 3y> "   "  77 # R R< (1 	$&02 	13EF	(*=>	*,?@	'9	)+<=	G	G"S4B=.
< I;/,	M.r'   