
    4je                        d 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ZddlmZ ddlZ ee      j'                         j(                  d   Z ee      ej.                  vr"ej.                  j1                  d ee             dedefdZ edd	      Z ed
d      Z edd      Z edd      Z edd      Z edd      Zej@                  Z ejB                  Z!ejD                  Z"ejF                  Z#ejH                  Z$ejJ                  Z%ejL                  Z&ejN                  Z'ejP                  Z(ejR                  Z)ejT                  Z*ejV                  Z+ejX                  Z,ejZ                  Z-ej\                  Z.ej^                  Z/ej`                  Z0ejb                  Z1ejd                  Z2ejf                  Z3ejh                  Z4ejj                  Z5ejl                  Z6ejn                  Z7edz  dz  Z8edz  dz  Z9edz  dz  Z:edz  dz  dz  Z;edz  dz  dz  Z<dZ=dZ>dZ?d Z@d!ZAd"ZBd#ZCd$ZDd%ZEd&ed'efd(ZFd) ZGd* ZH G d+ d,ej                        ZJ G d- d.ej                        ZK G d/ d0ej                        ZL G d1 d2ej                        ZM G d3 d4ej                        ZN G d5 d6ej                        ZOePd7k(  r ej                  d8       yy)9u#	  Regression — task-2553+49 MICRO-HARDENING: executor self-collector /
self-dispatch / self-adjudication 구조적 차단 + write-back role/fallback
binding conflict 코드화.

Covers 회장 §4 verbatim regression 1~15, §3 8-classification coverage, §2/§8
owner-pin invariants, §5/9-R byte-0 carve-out, and 9-R.1 Layer A:

  §4.1  executor → ANU key normal callback                      = PASS
  §4.2  executor → self key normal callback                     = FAIL
  §4.3  executor → self key fallback callback                   = FAIL
  §4.4  executor_key == collector_key                            = FAIL
  §4.5  collector_role != ANU                                    = FAIL
  §4.6  prompt says ANU collector but owner key is executor      = FAIL
  §4.7  executor self-adjudication (Codex audit/adjudication)    = FAIL
  §4.8  executor self-dispatch (follow-up)                       = FAIL
  §4.9  +47 self-chain fixture                                   = FAIL
  §4.10 +47/+48 independent ANU verification fixture             = PASS
  §4.11 idempotency same collector but role/fallback mismatch    -> WRITEBACK_
                                                                    BINDING_CONFLICT
  §4.12 valid duplicate write-back                               -> idempotent SKIP
  §4.13 +32 callback mandatory regression                        무회귀
  §4.14 +44/+46 4-tuple registry regression                      무회귀
  §4.15 +45/+48 cancel-on-success regression                     무회귀

§5/9-R byte-0 carve-out: anu_v3/callback_4tuple_registry.py and
dispatch/executor_completion_contract.py are byte-0 (pinned by the existing
+44/+48 FROZEN_SHA256 autouse invariant; additive patching them would regress
13/14/15 and violate §5 "기존 +47/+48 산출물 수정 금지"). The §2 owner fields
(executor_key/collector_key/collector_owner_key/collector_role=ANU) are
carried by the NEW dispatch.callback_owner_enforcer record + schema, NOT by
mutating the frozen legacy record (byte-0 우선·불가피 시 additive; the §9
allowlist is a max-write set, not a must-write set; +42/+43/+45 선례 동형).

9-R.1 Layer A: callback_owner_enforcer / normal_fallback_callback_helper
perform ZERO cron register/remove, ZERO dispatch/merge/subprocess/cokacdir
exec — pure validation only.
    N)Path   modnamerelpathc                 (   t         j                  j                  | t        |z        }g }d}||u}|}|r|j                  }d}||u}	|	}|slt        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                  |      t        j                  |      d	z  }d
d|iz  }|j                  |       t        j                  |d      i z  }dd|iz  }t        t        j                  |            dx}x}x}x}x}x}	}t         j                  j                  |      }|t         j"                  | <   |j                  j%                  |       |S )zEHermetic file-path import (collision-proof vs tests/dispatch shadow).N)is not)z%(py2)s is not %(py5)sspec)py2py5z%(py7)spy7)z5%(py11)s
{%(py11)s = %(py9)s.loader
} is not %(py14)s)py9py11py14z%(py16)spy16r   zassert %(py19)spy19)	importlibutilspec_from_file_location_ROOTloader
@pytest_ar_call_reprcompare@py_builtinslocals_should_repr_global_name	_safereprappend_format_boolopAssertionError_format_explanationmodule_from_specsysmodulesexec_module)r   r   r	   @py_assert1@py_assert4@py_assert3@py_assert0@py_assert10@py_assert13@py_assert12@py_format6@py_format8@py_format15@py_format17@py_format18@py_format20mods                    R/home/jay/workspace/tests/regression/test_callback_owner_enforcement_2553plus49.py_loadr4   7   s.   >>11'57?KD7t74t77474 777774t77777747774777t77777774777777777777777477777777777777
..
)
)$
/CCKKKKC J    z%dispatch.executor_completion_contract(dispatch/executor_completion_contract.pyz dispatch.spec_template_validatorz#dispatch/spec_template_validator.pyzanu_v3.callback_4tuple_registry"anu_v3/callback_4tuple_registry.pyz dispatch.callback_owner_enforcerz#dispatch/callback_owner_enforcer.pyz(dispatch.normal_fallback_callback_helperz+dispatch/normal_fallback_callback_helper.pyzdispatch.cron_dispatch_guardzdispatch/cron_dispatch_guard.pydispatchzcallback_owner_enforcer.pyz"normal_fallback_callback_helper.pyschemasz&callback_owner_enforcement.schema.jsonmemoryfixturesz)task-2553plus47.self-chain-violation.jsonz'task-2553plus47-48.independent-anu.json1e41a2324a3ccdd0c119085addb0f8b7
6937032012(20456b5f83fc039f2fd6f50f4b94095c29b41bfbz%task/task-2553p1-f1-clean-replacement@774d550628410d36962c23a7663c4b6dbf72789de7c7fd940871e9ad8280e5ab@364caa11904285657abd716d78c5493b1f8b519318387d0f864fb6a136dca0b4@352ad0f570e55040e7c1e4a32cbfe0f076cbd53529b4db6222a8da1a4bee9cc5u   [EXECUTOR COMPLETION CALLBACK — MANDATORY] executor 는 ANU 에 normal completion callback cron 을 반드시 발사해야 한다.preturnc                 d    t        j                  | j                               j                         S N)hashlibsha256
read_bytes	hexdigest)rC   s    r3   _sharK      s     >>!,,.)3355r5   c                      t        j                  ddt        t              g| ddd      j                  j                         S )Ngitz-CT)capture_outputtextcheck)
subprocessrunstrr   stdoutstrip)argss    r3   _gitrW      s:    >>	c%j(4($d fUUWr5   c                      t        dt        t        t        ddddt        dd      }|j	                  |        t        d	i |S )
Ntask-2553+49ANUNCFBDTcokacdir_cron_direct)task_idexecutor_keycollector_keycollector_owner_keycollector_rolenormal_collector_cron_idfallback_callback_cron_iddispatch_cron_idchat_idprompt_claims_anu_collector
entry_path )dictEXEC_KEYANU_KEYCHATupdateenforce_callback_owner)overbases     r3   	_enf_callrs      sI    #!%"&$()D 	KK!)D))r5   c                   X    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zy)OwnerPinRegressionuB   §4 회장 verbatim regression 1~12 + §3 classification coverage.c                     t               }| j                  |j                  t               | j                  |j                  g        | j                  |j                         y rF   )rs   assertEqualverdictPASSclassifications
assertTrueowner_is_independent_anuselfrs     r3   #test_01_executor_to_anu_normal_passz6OwnerPinRegression.test_01_executor_to_anu_normal_pass   sE    KD)**B/223r5   c                     t        t        t              }| j                  |j                  t               | j                  t        |j                         | j                  |j                         y Nra   rb   )
rs   rl   rw   rx   FAILassertInSELF_COLLECTOR_FORBIDDENrz   assertFalser|   r}   s     r3   !test_02_executor_self_normal_failz4OwnerPinRegression.test_02_executor_self_normal_fail   sK    H(KD).0A0AB334r5   c                     t        t        t        dd      }| j                  |j                  t               | j                  t        |j                         y )Nr[   zFB-self)ra   rb   rd   re   )rs   rl   rw   rx   r   r   r   rz   r}   s     r3   #test_03_executor_self_fallback_failz6OwnerPinRegression.test_03_executor_self_fallback_fail   sC    " (%)&/	
 	D).0A0ABr5   c                     t        t        t              }| j                  |j                  t
               | j                  t        |j                         y r   )	rs   rl   rm   rw   rx   r   r   r   rz   r}   s     r3   "test_04_executor_eq_collector_failz5OwnerPinRegression.test_04_executor_eq_collector_fail   s7    H'JD).0A0ABr5   c                     t        d      }| j                  |j                  t               | j	                  t
        |j                         y )Nexecutorrc   )rs   rw   rx   r   r   CALLBACK_COLLECTOR_NOT_ANUrz   r}   s     r3   #test_05_collector_role_not_anu_failz6OwnerPinRegression.test_05_collector_role_not_anu_fail   s5    Z0D)0!2C2CDr5   c                     t        t        t        d      }| j                  |j                  t               | j                  t        |j                         | j                  t        |j                         y )NT)ra   rb   rh   )	rs   rl   rw   rx   r   r   CALLBACK_OWNER_MISMATCHrz   r   r}   s     r3   *test_06_prompt_anu_but_owner_executor_failz=OwnerPinRegression.test_06_prompt_anu_but_owner_executor_fail   sU    " ((,

 	D)-q/@/@A.0A0ABr5   c                     t        t        t        dd      }| j                  |j                  t               | j                  |j
                  t               t        t        t        dd      }| j                  |j                  t               y )NT)r`   	actor_keyis_codex_auditis_adjudication)	assert_not_self_adjudicationrl   rw   rx   r   classification$EXECUTOR_SELF_ADJUDICATION_FORBIDDENrm   ry   r~   goks      r3   'test_07_executor_self_adjudication_failz:OwnerPinRegression.test_07_executor_self_adjudication_fail   sq    (!X7 	D)))=	? *!W7 	T*r5   c                    t        t        t        d      }| j                  |j                  t               | j                  |j
                  t               t        t        t        d      }| j                  |j                  t               y )NTr`   r   is_followup_dispatch)	assert_not_self_dispatchrl   rw   rx   r   r   SELF_DISPATCH_FORBIDDENrm   ry   r   s      r3   #test_08_executor_self_dispatch_failz6OwnerPinRegression.test_08_executor_self_dispatch_fail   si    $!X!%' 	D)))+BC%!W!%' 	T*r5   c           	         t        j                  t        j                  d            }|d   }t	        d
i |d   d   dt        |d         i}| j                  |j                  t               | j                  t        |j                         t	        d
i |d   d   dt        |d         i}| j                  |j                  t               t        d
i |d   d   }| j                  |j                  t               | j                  |j                  t               t        d
i |d	   d   }| j                  |j                  t               | j                  |j                  t                y )Nutf-8casesnormal_callback_self_ownedenforce_inputanu_keysfallback_callback_self_owneddev3_self_codex_auditinputdev3_self_dispatch_plus48rj   )jsonloadsFX_SELF	read_textrp   tuplerw   rx   r   r   r   rz   r   r   r   r   r   )r~   fxcrnrfgagds          r3   &test_09_plus47_self_chain_fixture_failz9OwnerPinRegression.test_09_plus47_self_chain_fixture_fail   sS   ZZ))'23wK# ,,-o>,2j>*, 	T*.0B0BC# ,./@,2j>*, 	T*) 3'(13T***=	?% 7+,W57T***,CDr5   c           	      
   t        j                  t        j                  d            }|d   }t	        d	i |d   d   dt        |d         i}| j                  |j                  t               | j                  |j                  g        | j                  |j                         | j                  t        d	i |d   d   j                  t               | j                  t        d	i |d   d   j                  t               y )
Nr   r   normal_callback_anu_ownedr   r   anu_session_codex_audit_okr    anu_session_followup_dispatch_okrj   )r   r   FX_ANUr   rp   r   rw   rx   ry   rz   r{   r|   r   r   )r~   r   r   r   s       r3   $test_10_independent_anu_fixture_passz7OwnerPinRegression.test_10_independent_anu_fixture_pass  s    ZZ((12wK# ,+,_=,2j>*, 	T*++R0334( <01':<<CGT	K 	$ B67@BBI'	r5   c                 ~   t        j                  t        j                  d            }|d   d   }|d   D cg c]+  }t	        d|d   |d   d|d   |d	   |d
   |d   |d   	      - }}t        |fddi|d   j                         D ci c]  \  }}|dk7  r|| c}}}| j                  |j                  t               | j                  |j                  t               | j                  |j                         | j                  |j                         | j                  |j                         y c c}w c c}}w )Nr   r   "idempotency_role_fallback_conflicthistoryrY   dispatch_iddevrg   rd   re   rolestatus	r_   r   rf   r   rg   rd   re   r   r   r_   	candidate)r   r   r   r   make_record audit_writeback_binding_conflictitemsrw   r   WRITEBACK_BINDING_CONFLICTrx   r   r{   conflictmatched_idempotency_keyconflicting_fields)r~   r   casehhistkvas           r3   "test_11_writeback_binding_conflictz5OwnerPinRegression.test_11_writeback_binding_conflict(  sG   ZZ((12'{?@ )_&  "-0@}-iL%&'A%B&'(C&D61X;0 & & -#(# $[ 1 7 7 9 "1y. !t "# 	))+EFD)

#112,,-!&"   0D4
D9c                 ~   t        j                  t        j                  d            }|d   d   }|d   D cg c]+  }t	        d|d   |d   d|d   |d	   |d
   |d   |d   	      - }}t        |fddi|d   j                         D ci c]  \  }}|dk7  r|| c}}}| j                  |j                  t               | j                  |j                  t               | j                  |j                         t        g ddt        ddd      }| j                  |j                  t               y c c}w c c}}w )Nr   r   idempotency_true_duplicater   rY   r   r   rg   rd   re   r   r   r   r_   r   Xr[   r   r\   r_   r   rg   rd   candidate_rolecandidate_fallback_cron_id)r   r   r   r   r   r   r   rw   r   WRITEBACK_IDEMPOTENT_SKIPrx   ry   r   r   rn   WRITEBACK_NO_CONFLICT)	r~   r   r   r   r   r   r   r   a2s	            r3   !test_12_writeback_idempotent_skipz4OwnerPinRegression.test_12_writeback_idempotent_skip>  sY   ZZ((12'{78 )_&  "-0@}-iL%&'A%B&'(C&D61X;0 & & -#(# $[ 1 7 7 9 "1y. !t "# 	))+DED)$-C%)*'+- 	**,AB)&"r   N)__name__
__module____qualname____doc__r   r   r   r   r   r   r   r   r   r   r   r   rj   r5   r3   ru   ru      sG    L45	CCEC+	+E.&.,Cr5   ru   c                   "    e Zd ZdZd Zd Zd Zy)ClassificationCoverageu;   §3 — all 8 classifications are reachable & schema-valid.c                 
   t               }|t        t        t        t              j                        z  }|t        t        d      j                        z  }|t        t        d       j                        z  }|t        t        d      j                        z  }|t        t        dd      j                        z  }|j	                  t        t        t        d	
      j                         |j	                  t        t        t        d	      j                         |j	                  t        t        ddddt        dddd	      gddt        ddd      j                         t        D ]  }| j                  ||| d        y )Nr   xr   )rd   mystery_path)ri   deadbeef)rb   ra   T)r`   r   r   r   tdenf1r   	COMPLETEDr   fallbackf2r   z not reachable)setrs   rl   rz   addr   r   r   r   r   rn   ALL_CLASSIFICATIONSr   )r~   seenr   s      r3   $test_all_8_classifications_reachablez;ClassificationCoverage.test_all_8_classifications_reachable[  sb   uIH2:<<KOM 	MIS1AABBI%)++:?< 	<I8HHIII*,688GI 	I-!X ""0.	2 	)!X!%''5~	7 	1#*-T2537j +	- .
 S$%('+- .<^	= % 	9AMM!TaS#78	9r5   c                    t        j                  t        j                  d            }t	        j
                  t               j                         |       t	        j
                  t        t        t              j                         |       t	        j
                  t        t        t        d      j                         |       t	        j
                  t        g ddt        ddd	
      j                         |       t        ddddt        t        t        dt        	      }t	        j
                  |j                         |       y )Nr   r   Tr   r   r   r   r   fr   rY   r]   r[   r\   rZ   )	r_   rf   rd   re   r`   ra   rb   rc   rg   )r   r   SCHEMAr   
jsonschemavalidaters   to_jsonrl   r   r   rn   CallbackOwner4Tuplerm   )r~   schemar   s      r3   test_schema_validationz-ClassificationCoverage.test_schema_validationw  s    F,,W56IK//16:H*244;GIv	G 	$%%)++279f	> 	,CS$),Z+.0 18	6		C
  "S%)T! 't	M
 	AIIK0r5   c                    t        d      }| j                  |j                  t               t        d      }| j                  |j                  t               | j                  t               j                  t               y )NF)anu_keys_resolvablerj   )r   )rs   rw   rx   HOLDry   )r~   r   r2s      r3   test_hold_is_conditional_onlyz4ClassificationCoverage.test_hold_is_conditional_only  sX     %0D)#T*,,d3r5   N)r   r   r   r   r   r  r  rj   r5   r3   r   r   X  s    E981,4r5   r   c                   (    e Zd ZdZd Zd Zd Zd Zy)HelperAndCompositeGateu-   §8/§10 helper fail-closed + composite gate.c                     t        ddt        t        t        ddddd
      }| j                  |j                  t
               | j                  |j                         y )	NnormalrY   rC   10sr[   r]   r\   
kindr_   r`   	owner_keyrg   promptatcron_idrf   re   ) build_anu_owned_callback_requestrl   rn   rw   rx   r   assertIsNoneargvr~   crs     r3   ,test_helper_failclosed_no_argv_on_self_ownerzCHelperAndCompositeGate.test_helper_failclosed_no_argv_on_self_owner  sL    ->SU3&*	,
 	T*"''"r5   c                 |   t        ddt        t        t        ddddd
      }| j	                  |j
                  t               | j                  d	|j                         | j	                  |j                  |j                  j                  d	      d
z      t               | j                  t        |j                         y )Nr  rY   rC   r  r[   r]   r\   r  z--key   )r  rl   rm   rn   rw   rx   ry   r   r  indexassertNotInr  s     r3   ,test_helper_anu_owner_produces_anukeyed_argvzCHelperAndCompositeGate.test_helper_anu_owner_produces_anukeyed_argv  s    ->tCE3&*	,
 	T*grww'w!7!!;<gF277+r5   c                    t        dt        t        t        dt              }| j	                  |j
                  t               t        dt        t        t        dt              }| j	                  |j
                  t               y )Nr   rZ   )r_   r`   observed_owner_keyobserved_chat_idobserved_roleexpected_chat_id)verify_post_registration_ownerrl   rm   rn   rw   rx   ry   r   )r~   r   bads      r3   'test_post_registration_owner_crosscheckz>HelperAndCompositeGate.test_post_registration_owner_crosscheck  s`    +h7!!# 	T*,h'$$8 	d+r5   c                 x   t        dddd      }t        t        d|t        t        t        ddddt
        d	      \  }}}| j                  |j                  |j                  |ft        t        t        f       t        t        d|t        t        t        ddddt
        
      \  }}}| j                  |t               y )NrY   r]   r[   r\   )r_   rf   rd   re   r^   rZ   T)	spec_textri   tuple_r`   ra   rb   rc   rf   rd   re   rg   rh   )r(  ri   r)  r`   ra   rb   rc   rf   rd   re   rg   )
Callback4Tupleguard_dispatch_with_owner_CLAUSErl   rm   rn   rw   rx   ry   r   )r~   r   bor   s        r3   "test_composite_gate_strictest_winsz9HelperAndCompositeGate.test_composite_gate_strictest_wins  s    >C596:< ,*@! ' 4&*D(,.1a 	!))QYY2T44FG+*@! ( 4&*D:1a 	D!r5   N)r   r   r   r   r  r  r&  r/  rj   r5   r3   r
  r
    s    7#	,
,"r5   r
  c                       e Zd ZdZd Zd Zy)FrozenByte0AndGitInvariantu@   §5/9-R byte-0 carve-out + git invariant (read-only regression).c                     | j                  t        t        dz        t               | j                  t        t        dz        t               | j                  t        t        dz        t
               y )Nr7   r6   z anu_v3/callback_event_trigger.py)rw   rK   r   REG_SHAECC_SHACET_SHAr~   s    r3   test_registry_ecc_cet_byte0z6FrozenByte0AndGitInvariant.test_registry_ecc_cet_byte0  sa    ==>	ICCD	 	;;<g	Gr5   c                     | j                  t        dd      t               | j                  t        ddd      t               y )Nz	rev-parseHEADz--abbrev-ref)rw   rW   GIT_HEAD_PREGIT_BRANCH_PREr6  s    r3   test_git_invariantz-FrozenByte0AndGitInvariant.test_git_invariant  s6    k62LAnf5~	Gr5   N)r   r   r   r   r7  r<  rj   r5   r3   r1  r1    s    JGGr5   r1  c                   (    e Zd ZdZdefdZd Zd Zy)LayerANoCronInvariantu>   9-R.1 Layer A — ZERO cron/dispatch/subprocess/cokacdir exec.srcc                    t        j                  |j                  d            }t        j                  |      D ]  }t	        |t         j
                        rC|j                  D ]4  }| j                  |j                  j                  d      d   dd|        6 t	        |t         j                        r | j                  |j                  dd|        t	        |t         j                        st	        |j                  t         j                        s|j                  j                  }t	        |t         j                         rb| j                  |j"                  |j                  j$                  fdt'        |             | j                  |j"                  dt'        |             | j                  |j                  j$                  dt'        |              y	)
u   No subprocess/os.system/Popen import or call anywhere (the real
        Layer A guarantee — prose docstrings are never executed).r   .r   rQ   zLayer A: import subprocess zLayer A: from subprocess )ossystemPopenN)astparser   walk
isinstanceImportnamesassertNotEqualnamesplit
ImportFrommoduleCallfunc	AttributevalueNameidattrrS   )r~   r?  treenoder   rr   s         r3   _assert_no_execz%LayerANoCronInvariant._assert_no_exec  sW    yyw/0HHTN 	GD$

+ MA''S(9!(<l*EcU(KMM $/##DKK&?u$EG$)jIIs}}/.yydCHH-''$))..(A(8#c(D''s3xH##DIINNGSXF	Gr5   c                 r   | j                  t               t        j                  t        j	                  d            }t        j
                  |      D ]b  }t        |t        j                        st        |j                  t              s9| j                  d|j                  j                                d y )Nr   zcokacdir --)rY  ENF_SRCrE  rF  r   rG  rH  ConstantrS  rS   r  lower)r~   rW  rX  s      r3   test_enforcer_layer_az+LayerANoCronInvariant.test_enforcer_layer_a  s    W% yy**734HHTN 	DD$-*JJ3%  

0@0@0BC	Dr5   c                 8   | j                  t               t        j                  t        j	                  d            }t               }t        j                  |      D ]  }t        |t        j                        st        |j                        |j                  D cg c]  }|j                   c}z   D ]7  }t        |t        j                        s|j                  t        |             9  t        j                  |      D ]  }t        |t        j                        st        |j                  t               s9d|j                  j#                         v sd|j                  j#                         v sr| j%                  t        |      |d        y c c}w )Nr   cokacdirz--cronzcLayer A: a cokacdir/--cron string is a call argument (would be an exec); it must be argv DATA only.)rY  HLP_SRCrE  rF  r   r   rG  rH  rP  listrV   keywordsrS  r\  r   rU  rS   r]  r  )r~   rW  call_arg_idsrX  r   r   s         r3   test_helper_layer_az)LayerANoCronInvariant.test_helper_layer_a  s4    	W%yy**734uHHTN 	0D$)dii)-,8$%,8 8 0A!!S\\2$((A/0	0 HHTN 	FD$-*JJ3%$**"2"2"444::#3#3#55  tHlEF	F,8s   FN)r   r   r   r   r   rY  r^  re  rj   r5   r3   r>  r>    s    HG4 G*DFr5   r>  c                   (    e Zd ZdZd Zd Zd Zd Zy)CrossRegressionNoRegressionuF   §4.13/§4.14/§4.15 — +32 / +44+46 / +45+48 무회귀 (subprocess).c                 N   t        j                  t        j                  ddddg|D cg c]  }t	        t
        dz  dz  |z         c}t	        t
              ddd	      }| j                  |j                  d
d| d|j                  dd   d|j                  dd          y c c}w )Nz-mpytestz-qz--no-headertests
regressionTi  )cwdrN   rO   timeoutr   u   regression 무회귀 실패 (z):
i0
i)
rQ   rR   r"   
executablerS   r   rw   
returncoderT   stderr)r~   filesr   r   s       r3   _runz CrossRegressionNoRegression._run%  s    NN^^T8T= H@EF1s57?\1A56FHE
4dCI 	LL!+E7$qxx7G6Hxx "	# Gs   B"
c                 &    | j                  d       y )Nz9test_executor_completion_callback_mandatory_2553plus32.pyrs  r6  s    r3   &test_13_plus32_mandatory_no_regressionzBCrossRegressionNoRegression.test_13_plus32_mandatory_no_regression/  s    		MNr5   c                 (    | j                  dd       y )Nz+test_callback_4tuple_registry_2553plus44.pyz)test_artifact_root_resolver_2553plus46.pyru  r6  s    r3   ,test_14_plus44_plus46_registry_no_regressionzHCrossRegressionNoRegression.test_14_plus44_plus46_registry_no_regression2  s    		?=	?r5   c                 *    | j                  ddd       y )Nz0test_cancel_on_success_live_wiring_2553plus45.pyz-test_cancel_on_success_live_e2e_2553plus48.pyz)test_callback_event_trigger_2553plus47.pyru  r6  s    r3   *test_15_plus45_plus48_cancel_no_regressionzFCrossRegressionNoRegression.test_15_plus45_plus48_cancel_no_regression6  s    		DA=	?r5   N)r   r   r   r   rs  rv  rx  rz  rj   r5   r3   rg  rg  "  s    P#O??r5   rg  __main__)	verbosity)Rr   builtinsr   _pytest.assertion.rewrite	assertionrewriter   rE  rG   importlib.utilr   r   rQ   r"   unittestpathlibr   r   __file__resolveparentsr   rS   pathinsertr4   _ecc_stv_reg_enf_hlp_grdrp   r   r   r   r  ry   r   r  r   r   r   r   r   CALLBACK_4TUPLE_INVALIDDISPATCH_PATH_BYPASSED_CONTRACTr   r   r   r   r  r$  r+  r*  r   r[  ra  r   r   r   rl   rm   rn   r:  r;  r3  r4  r5  r,  rK   rW   rs   TestCaseru   r   r
  r1  r>  rg  r   mainrj   r5   r3   <module>r     sM  $J  
     
   X ((+u:SXXHHOOAs5z"3   +. &) %( &) .1 "%
 44 #@@ 88 #'#H#H  .. yyyyyy88 '+'P'P $66 66 !<< 66 "&"F"F !<<  :: 22 .. #'#H#H  !%!D!D  :: $$
*
;
;
*
C
C		E	E8j(89
(
Z
'56 
98
 M
L
LB 6D 6S 6*$fC** fCR=4X.. =4@5"X.. 5"pG!2!2 G$=FH-- =F@?("3"3 ?4 zHMMA r5   