
    4jY                       d Z ddlmZ ddlZddlmc mZ ddl	Z	ddl
Z
ddlZddlZddlmZ ddl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 ddlmZmZmZmZm Z  ddl!m"Z" ddl#m$Z$m%Z%m&Z&m'Z' ddl(m)Z* ddl+m,Z,m-Z-  e
j\                  ed	z  d
z  j_                  d            Z0dZ1ddddddddddddZ2dZ3d=dZ4 ejj                  d      d        Z6d Z7 ejj                  d      d         Z8 ejj                  d      d!        Z9d>d"Z:d?d#Z; ejj                  d      d$        Z<d@d%Z=dAd&Z>dBd'Z?d(d)	 	 	 	 	 	 	 	 	 dCd*Z@d+dd,dDd-ZAd.d/ddd0d+d1	 	 	 dEd2ZBd3 ZCd4 ZDd5 ZEd6 ZFd7 ZGd8 ZHd9 ZId: ZJd; ZKd< ZLy)Fu  tests/regression/test_cancel_on_success_live_adoption_2604.py

task-2604 Track A — CANCEL_ON_SUCCESS LIVE ADOPTION regression (§1~§12).

문서-only 금지: 본 regression 은 **실 모듈 + 실 entrypoint** 를 실행한다
(mock-only FAIL — 모듈/entrypoint 자체를 mock 으로 대체하면 §11 meta-가드가
FAIL). cron-list/remove DI 만 전용 격리 FakeCronWorld/WorldSpyRemover 주입
(실 cron-list·실 cron-remove·실 schedule_history 무접촉). 실 subprocess
즉시 FAIL 차단. 실 shared callback_4tuple_index.jsonl(track 미소유 공유
durable 인프라) 은 전 케이스 byte-0 — self-proof 는 격리 tmp ledger 만
구성. live /home/jay/workspace git tracked HEAD/branch/ref 전후 assertEqual.

§ 매핑:
  1  properly-bound 격리 ledger + 5조건 AND PASS → CANCEL_ADOPTED
     (cron-remove 실 호출[주입 spy]·fallback_cancelled·cron_removed)
  2  spy "failed" → +9a REMOVE_FAILED_WARNING → CANCEL_FAILED_CLASSIFIED
     (normal success decouple 유지 — 무효화 0)
  3  ownership mismatch(task_id) → unrelated cron 제거 방지 → NON_BLOCKING
  4  no ledger record → 미식별 → NON_BLOCKING (보존)
  5  live 5조건 미충족(entry fired) → seam SKIP_LIVE → NON_BLOCKING
  6  실 entrypoint CLI main() self-proof → exit0·audit/decision/result
     산출·schema valid·CANCEL_ADOPTED
  7  decouple 불변: 전 분류에서 normal_success_unchanged=True
  8  unrelated cron 미접촉: spy 는 bound target id 로만 호출
  9  frozen +9a/+23/+25/+44/+45/+48/anchor byte-0 무회귀
  10 shared callback_4tuple_index.jsonl track-scoped invariant — 이 track
     이 task-2604 row append 0 + pre-existing line 변조 0 + append-only
     성장(기존 prefix byte 보존). 정상 +53/+54 sanctioned cross-track
     append 는 무FAIL (글로벌 SHA 하드핀 폐기 — task-2604+1 HOLD remediation)
  11 mock-only FAIL meta-가드 (실 모듈/실 entrypoint 실행 입증)
  12 raw ANU key adoption-audit 노출 0
    )annotationsN)Path)ADOPT_CANCEL_ADOPTEDADOPT_CANCEL_FAILED_CLASSIFIEDADOPT_NON_BLOCKINGCancelOnSuccessAdoptionResult#run_cancel_on_success_live_adoption)Callback4TupleRegistry)FakeCronWorldProperlyBound4TupleWorldSpyRemoverbuild_properly_bound_4tuple)CallbackInputCallbackTypeschemasz0cancel_on_success_live_adoption_2604.schema.jsonutf-8encodingc119085addb0f8b7@ea33514d2289f0097a5344d2d5bbc0735b6385c3bbfe03aa5c6d9f24f970bf0a@774d550628410d36962c23a7663c4b6dbf72789de7c7fd940871e9ad8280e5ab@fa1421fef4faf2d6f4dc0cb1ce0d026f5c7086b046056e39dd343fb629b3af9b@0c5e10e616fe8919492f6c774045e8ff12f3ebfd203ecd25f35ad9ebd58c14d9@0f1900f46f60fe504ec89b5c84967506e15250d71d6f413b31d805c783a613fb@2ef661c49128ec6f1bd96bfbe6c1a227317e87ae31bf6deac025c66fd0e96d37@6bba56bd0dfc97e9155244251e00cdf3dcef2981a75dc5e2b966aa0b746d8d13@14d6a0fb29e9de9276fcbadde832fe348e02333d21d57f29bd583407f1542590@41af1b601f42f337301ca7a45c185349385dc625ca02df43810541baa9953db9@0636b99cf5d7e69d880c426bd03c0ff77e97987d1780912c05cc23899b832c6f@83b3e307c8207c76a3e311c408aab4951373bd317896e51687d3007907b0c3d4)z'anu_v3/cancel_on_success_live_wiring.pyz"anu_v3/callback_4tuple_registry.pyz$anu_v3/cancel_on_success_live_e2e.pyzanu_v3/cancel_audit_writer.pyz anu_v3/artifact_root_resolver.pyz,utils/completion_callback_fallback_cancel.pyz!utils/live_cron_state_verifier.pyz4utils/completion_callback_operational_cancel_seam.pyz8utils/normal_completion_callback_collector_entrypoint.pyz%utils/operational_collector_wiring.pyz+utils/anu_delegation_completion_callback.pyz)memory/events/callback_4tuple_index.jsonlc                r    t        j                  t        | z  j                               j	                         S )N)hashlibsha256	WORKSPACE
read_bytes	hexdigest)rels    Q/home/jay/workspace/tests/regression/test_cancel_on_success_live_adoption_2604.py_shar)   }   s'    >>9s?6689CCEE    T)autousec                8    d }| j                  t        d|       y )Nc                     t        d      )Nux   실 subprocess 호출 금지 (회장 §5) — 전용 격리 FakeCronWorld/WorldSpyRemover 만, 실 운영 cron 무접촉)AssertionError)aks     r(   _boomz%_block_real_subprocess.<locals>._boom   s    =
 	
r*   run)setattr
subprocess)monkeypatchr1   s     r(   _block_real_subprocessr6      s    
 
E51r*   c                 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HEADr   r   zref:zref:    )r$   	read_textstrip
startswithsplitexists)git_dirhead_txtbranchref_pathshas        r(   _git_refrD      s    & G& ++W+=CCEH v& 	w"1% 
 $,#6#6v#>wDH ) 
6	$$g$6<<> 
 fc""r*   c               #  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)srD   beforepy0py2py4u*   git HEAD/branch/ref 변경 감지 (위반)z
>assert %(py6)spy6)
rD   
@pytest_ar_call_reprcompare@py_builtinslocals_should_repr_global_name	_saferepr_format_assertmsgr.   _format_explanation)rH   @py_assert1@py_assert3@py_format5@py_format7s        r(   _git_ref_invariantrZ      s     ZF	:M:MMM:MMMMMM8MMM8MMM:MMMMMMMMMMMMM!MMMMMMMs   DDc               #    K   t         D  ci c]  } | t        |        }} d  t         j                         D ]  \  } }||    }||k(  }|st        j                  d|fd||f      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}}t        |       }||k(  }|s<t        j                  d|fd||f      d	t        j                         v st        j                  t              rt        j
                  t              nd	d
t        j                         v st        j                  |       rt        j
                  |       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 c c} w w)NrF   z%(py1)s == %(py3)spinnedpy1py3u    baseline drift (pre §9)
>assert %(py5)spy5)z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py5)sr)   r'   rJ   r_   r`   rb   u    byte-0 위반 (post §9)
>assert %(py7)spy7)FROZEN_SHA256r)   itemsrN   rO   rS   rP   rQ   rR   rT   r.   rU   )	r'   rH   r]   @py_assert0@py_assert2@py_format4@py_format6@py_assert4@py_format8s	            r(   _frozen_byte0_invariantrn      sh    (56c49n6F6	$**, FVc{G{f$GGG{fGGG{GGGGGGfGGGfGGGG-F&GGGGGGGCyEyF"EEEyFEEEEEEtEEEtEEEEEECEEECEEEyEEEEEEFEEEFEEEEse+D$EEEEEEEEF 7s   	IIH?Ic                 \    t         t        z  j                  d      j                  d      S )uP   실 shared ledger 의 현재 라인 스냅샷 (keepends — byte 단위 비교).r   r   T)keepends)r$   SHARED_INDEX_RELr:   
splitlines r*   r(   _shared_index_linesrt      s*     
%	%	G	$	T	"r*   c                    	 t        j                  |       }t	        |j                  dd            }|dk(  xs$ |j                  d      xs |j                  d      S # t        t        f$ r Y yw xY w)uv  이 track(task-2604) 소유 row 인가.

    공유 인프라(callback_4tuple_index.jsonl)엔 본 track 직접 write 0 이
    어야 하므로, append 된 라인 중 task_id 가 task-2604(또는 -ut/+N 변형)
    인 것이 1건이라도 있으면 track 직접 write 위반. 다른 track(2606/2607/
    2609 등)의 sanctioned +53/+54 durable-success append 는 비대상.Ftask_id z	task-2604z
task-2604-z
task-2604+)jsonloads
ValueError	TypeErrorstrgetr<   )linerectids      r(   _is_task2604_owned_rowr      st    jj cggi$
%C{ 	(>>,'	(>>,' 	" s   A A/.A/c               #    K   t               } t        |       }d t               }t        |      }||k\  }|s9t        j                  d|fd||f      dt	        j
                         v st        j                  t              rt        j                  t              nddt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      dt	        j
                         v st        j                  |      rt        j                  |      nddz  }t        j                  d      d	z   d
|iz  }t        t        j                  |            d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  }t        j                  d      dz   d|iz  }t        t        j                  |            dx}}||d D 	cg c]  }	t        |	      s|	 }
}	|
 }|st        j                  d|
d      dz   ddt	        j
                         v st        j                  |
      rt        j                  |
      ndiz  }t        t        j                  |            d}yc c}	w w)u  §10 (task-2604+1 HOLD remediation) — track-scoped invariant.

    글로벌 callback_4tuple_index.jsonl SHA 동일성 하드핀을 폐기한다(정상
    +53/+54 sanctioned cross-track append 를 FAIL 처리하던 spec §4/§8
    9-R.1 자가모순 해소). 본 track 검증:

      (a) 이 track 이 shared ledger 에 task-2604 row 를 append 0
      (b) pre-existing line 변조 0 (기존 prefix byte 보존)
      (c) 파일은 append-only 로만 성장 (축소·prefix 변형 = FAIL)

    sibling/authorized +53/+54 durable-success append(다른 track 소유)는
    비대상 — 무FAIL. isolated /tmp ledger self-proof 는 본 fixture 와
    독립(테스트 본문 — cron_removed/spy_calls 그대로 유지).
    N)>=)z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} >= %(py5)slenaftern_beforerc   u   shared callback_4tuple_index.jsonl 축소/재작성 감지 — append-only 위반 (§10 / 회장 §3 — append-only 위반은 FAIL)rd   re   rF   r\   rH   r^   uo   shared callback_4tuple_index.jsonl pre-existing line 변조 — 기존 prefix 보존 위반 (§10 / 회장 §3)ra   rb   ul   track 직접 write 0 위반 — task-2604 소유 row 가 shared callback_4tuple_index.jsonl 에 append 됨: uN    (§10 / 회장 §4 — track 미소유 공유 인프라, +53/+54 소관 only)z
>assert not %(py0)srJ   	offending)rt   r   rN   rO   rP   rQ   rR   rS   rT   r.   rU   r   )rH   r   r   ri   rl   rk   rm   rh   rj   lnr   rV   @py_format2s                r(   $_shared_index_track_scoped_invariantr      sx      !"F6{H	!Eu: :!   :                              "    "   	P    
 ( v%  v           &     &   	:    
 $HI.M2H2LMIM= =  	77@m DX	X  	  	    	     	  Ns   H:K<KKBKc                R    t        | ddt        j                  dddddddd	id

      S )Ndev-simDISP2604NORM2604ok	completedT)result_jsonreportfrozen_anchormatch)
rv   executordispatch_cron_idcallback_typecallback_cron_idcron_statustask_statusrequired_closeout_markerspreservation_anchors
dev_sunset)r   r   NORMAL)rv   s    r(   _inpr      s=    #"))#26$"G-w7 r*   c           
     (    ddddd|ddt         d| d	S )
Nz2026-05-19T00:00:00Zzdispatch firedr   Tr   fallback   L5: )standardizednormal_callback_cron_idfallback_callback_cron_idfallback_rolechat_idanu_key)ts_utcmarker_kindr   callback_policy_arv   )ANU_KEY_SECRET)rv   fb_crons     r(   _markerr      s1    ('& '1)0'!%
  r*   c           	        | j                  dd       | dz  }|j                  t        j                  t	        ||            d       | dz  }|j                  t        j                  d|dd	d
      d       | dz  }|j                  d| dd       | dz  }|j                  t        j                  d|d	dd      d       ||||| dz  | dz  | dz  dS )NT)parentsexist_okzdispatch-fired.jsonr   r   zresult.jsonanu_delegation_result_v1r   PASS)schemarv   statusclassificationz	report.mdz# z
PASS durable-success
zcollector-result.jsoncallback_ack_dedupe_v1)r   rv   r   ack_acquiredzfb-cancelled.jsonzcancel.lockzplus23-cancel-audit.json)dispatch_fired_marker_pathresult_json_pathreport_pathcollector_result_marker_pathfallback_cancelled_marker_pathcancel_lock_pathseam_audit_path)mkdir
write_textrx   dumpsr   )tmprv   r   dfmrjrepcrms          r(   _materializer     s   IIdTI*
%
%CNN4::ggw787NK	}	BMM

4"%"(		
   
 
CNNRy 89GNL
'
'CNN

2""( $		
   
 '*(+*-0C*C-/!;; r*   r   )rolec          
     h    | dz  }t        |      }t        |ddddd||      }t        ||d	       |S )
u   격리 tmp ledger 에만 properly-bound 4-tuple 구성 (실 shared index
    무접촉 — +44 guard + +47 write-back, read-only consume API).z$isolated_callback_4tuple_index.jsonlzDSP-2604-PBr   r   
6937032012r   )rv   dispatch_idr   r   r   normal_collector_cron_idr   r   z2026-05-19 09:00 KST)ts_kst)r
   r   r   )r   rv   r   r   ledgerregistrytups          r(   _build_isolated_ledgerr   9  sO    
 99F%f-H
!#!+")	C  #6LMMr*   F)firedextrac               R    || dd|ddg}|r|j                  |       t        |      S )Nr   r   Fidrv   r   r   r   removed)extendr   )rv   r   r   r   entriess        r(   _worldr   N  s>     !	
	G u!!r*   task-2604-utUT2604FBr   )rv   r   r   world
spy_statusworld_firedc                  t        | dz  ||      }|xs t        |||      }t        ||      }t        t	        |      | dz  |d   |d   |d   |d   | dz  || d	z  |j
                  ||d
   |d   |d   d|d      }	|	||fS )Nclaim)r   )r   z
ack.markerr   r   r   r   zadoption-audit.jsonr   r   r   completion_callback_contract_v1)r   r   )r   r   r   r   	claim_dirledger_pathadoption_audit_pathcron_listerremoverr   r   r   callback_contract)r   r   r   r	   r   lister)
r   rv   r   r   r   r   r   pathsspyress
             r(   _runr   ^  s     w9E@VGWK@E
%

3C
-Wl#()E#F12-(%*+I%J-"77LL',-M'N12/07)0
C( U?r*   c                   t        | dd      }t        | |      \  }}}|j                  }|t        k(  }|st	        j
                  d|fd|t        f      dt        j                         v st	        j                  |      rt	        j                  |      ndt	        j                  |      dt        j                         v st	        j                  t              rt	        j                  t              nddz  }d	d
|i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                  }|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                  |      t	        j                  |      dz  }dd|iz  }t        t	        j                  |            d x}x}x}}|j                  }|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                  |      t	        j                  |      dz  }dd|iz  }t        t	        j                  |            d x}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}	||	u }|st	        j
                  d|fd||	f      dt        j                         v st	        j                  |      rt	        j                  |      ndt	        j                  |      t	        j                  |	      dz  }
dd|
iz  }t        t	        j                  |            d x}x}}	|j$                  }d}	||	u }|st	        j
                  d|fd||	f      dt        j                         v st	        j                  |      rt	        j                  |      ndt	        j                  |      t	        j                  |	      dz  }
dd|
iz  }t        t	        j                  |            d x}x}}	|j&                  }d}	||	u }|st	        j
                  d|fd||	f      dt        j                         v st	        j                  |      rt	        j                  |      ndt	        j                  |      t	        j                  |	      dz  }
dd|
iz  }t        t	        j                  |            d x}x}}	|j(                  }t+        |      }	d}|	|k(  }|s
t	        j
                  d|fd|	|f      dt        j                         v st	        j                  t*              rt	        j                  t*              nddt        j                         v st	        j                  |      rt	        j                  |      ndt	        j                  |      t	        j                  |	      t	        j                  |      dz  }d d!|iz  }t        t	        j                  |            d x}x}	x}}|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& |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}}|j0                  }d}	||	u }|st	        j
                  d|fd)||	f      dt        j                         v st	        j                  |      rt	        j                  |      ndt	        j                  |      t	        j                  |	      dz  }
dd|
iz  }t        t	        j                  |            d x}x}}	|j2                  }d}	||	u }|st	        j
                  d|fd*||	f      dt        j                         v st	        j                  |      rt	        j                  |      ndt	        j                  |      t	        j                  |	      dz  }
dd|
iz  }t        t	        j                  |            d x}x}}	t5        j6                  |j8                  t:               y )+Nr   r   r   rF   z?%(py2)s
{%(py2)s = %(py0)s.adoption_classification
} == %(py4)sr   r   rI   assert %(py6)srM   Tis)z6%(py2)s
{%(py2)s = %(py0)s.cancel_adopted
} is %(py5)srJ   rK   rb   assert %(py7)sre   zV%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.identification
}.identified
} is %(py7)srJ   rK   rL   re   assert %(py9)spy9)zc%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.identification
}.ownership_all_satisfied
} is %(py7)sLOOKUP_VERIFIED)z5%(py2)s
{%(py2)s = %(py0)s.lookup_status
} == %(py5)s)z4%(py2)s
{%(py2)s = %(py0)s.seam_invoked
} is %(py5)sz;%(py2)s
{%(py2)s = %(py0)s.cron_remove_invoked
} is %(py5)s)z:%(py2)s
{%(py2)s = %(py0)s.fallback_cancelled
} is %(py5)sr9   zK%(py5)s
{%(py5)s = %(py0)s(%(py3)s
{%(py3)s = %(py1)s.calls
})
} == %(py8)sr   r   rJ   r_   r`   rb   py8assert %(py10)spy10r   cron_idz%(py1)s == %(py4)sr_   rL   c              3  :   K   | ]  }|d    dk(  xr |d     yw)r   r   r   Nrs   .0es     r(   	<genexpr>z4test_s1_cancel_adopted_end_to_end.<locals>.<genexpr>  s*      34$:.!I,.   z,assert %(py4)s
{%(py4)s = %(py0)s(%(py2)s)
}anyz@%(py2)s
{%(py2)s = %(py0)s.normal_success_unchanged
} is %(py5)sz?%(py2)s
{%(py2)s = %(py0)s.decouple_invariant_held
} is %(py5)s)r   r   adoption_classificationr   rN   rO   rP   rQ   rR   rS   r.   rU   cancel_adoptedidentification
identifiedownership_all_satisfiedlookup_statusseam_invokedcron_remove_invokedfallback_cancelledcallsr   r   r  normal_success_unchangeddecouple_invariant_held
jsonschemavalidateadoption_auditSCHEMA)tmp_pathr   r   r   r   rV   rW   rX   rY   rl   rk   rm   @py_assert6@py_assert5@py_format10ri   @py_assert7@py_format9@py_format11rh   s                       r(   !test_s1_cancel_adopted_end_to_endr%    s   #HnjIF8F3OCe&&>&*>>>>>&*>>>>>>>3>>>3>>>&>>>>>>*>>>>*>>>>>>>>%%%%%%%%%%%%3%%%3%%%%%%%%%%%%%0((0D0(D0000(D00000030003000000(000D0000000=55==5====5======3===3======5==========1 11 11111 111111131113111111 11111111#t#t####t######3###3######t#######""*d*"d****"d******3***3***"***d*******!!)T)!T))))!T))))))3)))3)))!)))T)))))))yy3y>Q>Q>Q33ssy>Q99Q<	"0j0"j0000"j000"000j00000008= 3                         ''/4/'4////'4//////3///3///'///4///////&&.$.&$....&$......3...3...&...$.......**F3r*   c                   t        | dd      }t        | |d      \  }}}|j                  }|t        k(  }|st	        j
                  d|fd|t        f      dt        j                         v st	        j                  |      rt	        j                  |      ndt	        j                  |      dt        j                         v st	        j                  t              rt	        j                  t              ndd	z  }d
d|i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                  }t        |      }	d}|	|k(  }|s
t	        j
                  d|fd|	|f      dt        j                         v st	        j                  t              rt	        j                  t              nddt        j                         v st	        j                  |      rt	        j                  |      ndt	        j                  |      t	        j                  |	      t	        j                  |      dz  }dd|iz  }t        t	        j                  |            d x}x}	x}}|j                   }d}	||	u }|st	        j
                  d|fd||	f      dt        j                         v st	        j                  |      rt	        j                  |      ndt	        j                  |      t	        j                  |	      dz  }
dd|
iz  }t        t	        j                  |            d x}x}}	|j"                  }d}	||	u }|st	        j
                  d|fd||	f      dt        j                         v st	        j                  |      rt	        j                  |      ndt	        j                  |      t	        j                  |	      dz  }
dd|
iz  }t        t	        j                  |            d x}x}}	|j$                  }d}	||	u }|st	        j
                  d|fd||	f      dt        j                         v st	        j                  |      rt	        j                  |      ndt	        j                  |      t	        j                  |	      dz  }
dd|
iz  }t        t	        j                  |            d x}x}}	t'        j(                  |j*                  t,               y )Nr   r   failed)r   r   rF   r   r   r   rI   r   rM   Tr   )z@%(py2)s
{%(py2)s = %(py0)s.cancel_failed_classified
} is %(py5)sr   r   re   REMOVE_FAILED_CLASSIFIED)z5%(py2)s
{%(py2)s = %(py0)s.remove_result
} == %(py5)sr9   r   r   r   r   r   r  r  r  )z7%(py2)s
{%(py2)s = %(py0)s.durable_success
} is %(py5)s)r   r   r  r   rN   rO   rP   rQ   rR   rS   r.   rU   cancel_failed_classifiedremove_resultr  r   r  r  durable_successr  r  r  r  r  r   r   r   r   rV   rW   rX   rY   rl   rk   rm   ri   r"  r  r#  r$  s                    r(   *test_s2_remove_failed_classified_decoupledr-    s   #HnjIF8FxHOCe&&H&*HHHHH&*H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HH''/4/'4////'4//////3///3///'///4///////: :: ::::: :::::::3:::3:::::: ::::::::yy3y>Q>Q>Q33ssy>Q''/4/'4////'4//////3///3///'///4///////&&.$.&$....&$......3...3...&...$.......&$&$&&&&$&&&&&&3&&&3&&&&&&$&&&&&&&**F3r*   c                *   t        | dd      }t        | d|      \  }}}|j                  }|t        k(  }|st	        j
                  d|fd|t        f      dt        j                         v st	        j                  |      rt	        j                  |      ndt	        j                  |      dt        j                         v st	        j                  t              rt	        j                  t              ndd	z  }d
d|i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}	||	u }|st	        j
                  d|fd||	f      dt        j                         v st	        j                  |      rt	        j                  |      ndt	        j                  |      t	        j                  |	      dz  }
dd|
iz  }t        t	        j                  |            d x}x}}	|j                  }t        |      }	d}|	|k(  }|s
t	        j
                  d|fd|	|f      dt        j                         v st	        j                  t              rt	        j                  t              nddt        j                         v st	        j                  |      rt	        j                  |      ndt	        j                  |      t	        j                  |	      t	        j                  |      dz  }dd|iz  }t        t	        j                  |            d x}x}	x}}|j                   }d}	||	u }|st	        j
                  d|fd||	f      dt        j                         v st	        j                  |      rt	        j                  |      ndt	        j                  |      t	        j                  |	      dz  }
dd|
iz  }t        t	        j                  |            d x}x}}	|j"                  }d}	||	u }|st	        j
                  d|fd||	f      dt        j                         v st	        j                  |      rt	        j                  |      ndt	        j                  |      t	        j                  |	      dz  }
dd|
iz  }t        t	        j                  |            d x}x}}	t%        j&                  |j(                  t*               y )Nztask-2604-OTHERr   r   )rv   r   rF   r   r   r   rI   r   rM   Tr   )z;%(py2)s
{%(py2)s = %(py0)s.non_blocking_marked
} is %(py5)sr   r   re   Fr   r   r   r   r   r   r   r  z:%(py2)s
{%(py2)s = %(py0)s.fallback_preserved
} is %(py5)sr  )r   r   r  r   rN   rO   rP   rQ   rR   rS   r.   rU   non_blocking_markedr  r  r   fallback_preservedr  r  r  r  r  r,  s                    r(   $test_s3_ownership_mismatch_preservesr2    s-   ##ZF 8^FKOCe&&<&*<<<<<&*<<<<<<<3<<<3<<<&<<<<<<*<<<<*<<<<<<<<""*d*"d****"d******3***3***"***d*******""+e+"e++++"e++++++3+++3+++"+++e+++++++yy3y>Q>Q>Q33ssy>Q!!)T)!T))))!T))))))3)))3)))!)))T)))))))''/4/'4////'4//////3///3///'///4///////**F3r*   c                :
   | dz  }|j                  dd       t        | |      \  }}}|j                  }|t        k(  }|st	        j
                  d|fd|t        f      dt        j                         v st	        j                  |      rt	        j                  |      ndt	        j                  |      d	t        j                         v st	        j                  t              rt	        j                  t              nd	d
z  }dd|iz  }t        t	        j                  |            d x}}|j                  }|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                  |      t	        j                  |	      dz  }dd|iz  }t        t	        j                  |            d x}x}x}
}	|j                  }|j                  }d}	||	k(  }
|
st	        j
                  d|
fd||	f      dt        j                         v st	        j                  |      rt	        j                  |      ndt	        j                  |      t	        j                  |      t	        j                  |	      dz  }dd|iz  }t        t	        j                  |            d x}x}x}
}	|j                  }t!        |      }d}||k(  }	|	s
t	        j
                  d|	fd||f      dt        j                         v st	        j                  t               rt	        j                  t               nddt        j                         v st	        j                  |      rt	        j                  |      ndt	        j                  |      t	        j                  |      t	        j                  |      dz  }dd|iz  }t        t	        j                  |            d x}x}x}	}|j"                  }d}||u }|st	        j
                  d|fd||f      dt        j                         v st	        j                  |      rt	        j                  |      ndt	        j                  |      t	        j                  |      dz  }dd |iz  }t        t	        j                  |            d x}x}}t%        j&                  |j(                  t*               y )!Nzempty_ledger.jsonlrw   r   r   r   rF   r   r   r   rI   r   rM   Fr   r   r   r   r   NO_LEDGER_RECORD)zX%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.identification
}.ident_status
} == %(py7)sr   r   r   r   r   r   r  Tr  r   r   re   )r   r   r  r   rN   rO   rP   rQ   rR   rS   r.   rU   r  r  ident_statusr  r   r  r  r  r  r  )r  emptyr   r   _rV   rW   rX   rY   r  r   rm   r!  ri   rl   r"  r#  r$  rk   s                      r(   "test_s4_no_ledger_record_preservesr8    s   ++E	R'*x.KCa&&<&*<<<<<&*<<<<<<<3<<<3<<<&<<<<<<*<<<<*<<<<<<<<1((1E1(E1111(E11111131113111111(111E1111111@**@.@@*.@@@@@*.@@@@@@@3@@@3@@@@@@*@@@.@@@@@@@@yy3y>Q>Q>Q33ssy>Q''/4/'4////'4//////3///3///'///4///////**F3r*   c                	   t        | dd      }t        | |d      \  }}}|j                  }|t        k(  }|st	        j
                  d|fd|t        f      dt        j                         v st	        j                  |      rt	        j                  |      ndt	        j                  |      dt        j                         v st	        j                  t              rt	        j                  t              ndd	z  }d
d|i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                  }t        |      }	d}|	|k(  }|s
t	        j
                  d|fd|	|f      dt        j                         v st	        j                  t              rt	        j                  t              nddt        j                         v st	        j                  |      rt	        j                  |      ndt	        j                  |      t	        j                  |	      t	        j                  |      dz  }dd|iz  }t        t	        j                  |            d x}x}	x}}|j                  }d}	||	u }|st	        j
                  d|fd||	f      dt        j                         v st	        j                  |      rt	        j                  |      ndt	        j                  |      t	        j                  |	      dz  }
dd|
iz  }t        t	        j                  |            d x}x}}	|j                   }d}	||	u }|st	        j
                  d|fd||	f      dt        j                         v st	        j                  |      rt	        j                  |      ndt	        j                  |      t	        j                  |	      dz  }
dd|
iz  }t        t	        j                  |            d x}x}}	t#        j$                  |j&                  t(               y )Nr   r   T)r   r   rF   r   r   r   rI   r   rM   Fr   r   r   r   re   r   r   r   r   r   r   r  r/  r  )r   r   r  r   rN   rO   rP   rQ   rR   rS   r.   rU   r  r  r   r1  r  r  r  r  r  r,  s                    r(   *test_s5_live_five_condition_fail_preservesr:    s   #HnjIF8FEOCe&&<&*<<<<<&*<<<<<<<3<<<3<<<&<<<<<<*<<<<*<<<<<<<<""+e+"e++++"e++++++3+++3+++"+++e+++++++yy3y>Q>Q>Q33ssy>Q!!)T)!T))))!T))))))3)))3)))!)))T)))))))''/4/'4////'4//////3///3///'///4///////**F3r*   c                   | dz  }| dz  }| dz  }|j                  t        d|       |j                  t        d|       |j                  t        d|       |j                  t        d|        t        j                  dd	d
t        |      g      }d}||k(  }|st	        j
                  d|fd||f      dt        j                         v st	        j                  |      rt	        j                  |      ndt	        j                  |      dz  }dd|iz  }	t        t	        j                  |	            d x}}g }|j                  }
 |
       }|}|r,|j                  } |       }|}|r|j                  } |       }|}|sddt        j                         v st	        j                  |      rt	        j                  |      ndt	        j                  |
      t	        j                  |      dz  }|j                  |       |rddt        j                         v st	        j                  |      rt	        j                  |      ndt	        j                        t	        j                        dz  }|j                  |       |rddt        j                         v st	        j                  |      rt	        j                  |      nd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}}t        j                   |j#                  d            }t%        j&                  |t(               |d   }|t*        k(  }|st	        j
                  d|fd |t*        f      t	        j                  |      d!t        j                         v st	        j                  t*              rt	        j                  t*              nd!d"z  }dd|iz  }	t        t	        j                  |	            d x}}|d#   }d$}
||
u }|slt	        j
                  d%|fd&||
f      t	        j                  |      t	        j                  |
      d'z  }d(d)|iz  }t        t	        j                  |            d x}x}}
|d*   }d$}
||
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                   |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.   }d$}
||
u }|slt	        j
                  d%|fd&||
f      t	        j                  |      t	        j                  |
      d'z  }d(d)|iz  }t        t	        j                  |            d x}x}}
y )/Nz$task-2604.cancel-adoption-audit.jsonztask-2604.decision.jsonztask-2604.result.jsonADOPTION_AUDIT_OUTDECISION_OUT
RESULT_OUTEVENTSz--modez
self-proofz--outr   rF   )z%(py0)s == %(py3)src)rJ   r`   zassert %(py5)srb   z:%(py6)s
{%(py6)s = %(py4)s
{%(py4)s = %(py2)s.exists
}()
}out)rK   rL   rM   z>%(py12)s
{%(py12)s = %(py10)s
{%(py10)s = %(py8)s.exists
}()
}decision)r   r  py12z?%(py18)s
{%(py18)s = %(py16)s
{%(py16)s = %(py14)s.exists
}()
}result)py14py16py18zassert %(py21)spy21r   r   r  r\   r   r^   r  Tr   z%(py1)s is %(py4)sr  r   rM   r  r   r   r  r  )r3   CLImainr|   rN   rO   rP   rQ   rR   rS   r.   rU   r>   append_format_booloprx   ry   r:   r  r  r  r   )r  r5   rA  rB  rD  r@  ri   rV   rj   rk   rW   r   rh   @py_assert9@py_assert11@py_assert15@py_assert17rY   @py_format13@py_format19@py_format20@py_format22auditrX   r   s                            r(   "test_s6_real_entrypoint_self_proofrW    s   
;
;C33H//F137^X6\62Xx0	8\7CH=	>BN27NNN2NNNNNN2NNN2NNNNNNNNNNA3::A:<A<A<HOOAO-A-A-&--A-/A/AAAAAA3AAA3AAA:AAA<AAAA<AAAAAHAAAHAAAOAAA-AAAA-AAAAA&AAA&AAA-AAA/AAAAAAAAAAAAAJJs}}g}67Ev&*+C+/CCCCC+/CCCC+CCCCCC/CCCC/CCCCCCCC+,44,4444,444,4444444444*+3t3+t3333+t333+333t3333333	F$$g$6	7Bh<4<4<4<4'4'4''''4''''''4'''''''r*   c                   t        | dz  dd      }t        | dz  d|      \  }}}t        | dz  dd      }t        | dz  d|d      \  }}}t        | d	z  d
| d	z  dz        \  }}}|||fD ]  }|j                  }d}	||	u }
|
st        j                  d|
fd||	f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |	      dz  }dd|iz  }t        t        j                  |            d x}x}
}	|j                  }d}	||	u }
|
st        j                  d|
fd||	f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |	      dz  }dd|iz  }t        t        j                  |            d x}x}
}	|j                  d   }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 )Nr/   r   FB1)r   r   bFB2r'  )r   r   r   cFB3znoledger.jsonlTr   r  rr   r   re   r  r  rI  r  r   rM   )r   r   r  rN   rO   rP   rQ   rR   rS   r.   rU   r  r  )r  ledr_adoptr7  led2r_failr_nbr^  rV   rl   rW   rk   rm   rh   ri   rX   rY   s                    r(   &test_s7_decouple_invariant_all_classesrd    s   
 C
GCCsCMGQ!(S..%HD3dxLFAq 33!11JD!Q
 vt$ D))1T1)T1111)T111111q111q111)111T1111111((0D0(D0000(D000000q000q000(000D0000000 :;CtC;tCCCC;tCCC;CCCtCCCCCCCDr*   c                &   t        | dd      }t        dddddddddg	      }t        | ||
      \  }}}|j                  }|t        k(  }|st        j                  d|fd|t        f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      dt        j                         v st        j                  t              rt        j                  t              nddz  }dd|iz  }t        t        j                  |            d x}}|j                  D 	cg c]  }	|	d   	 }
}	dg}|
|k(  }|slt        j                  d|fd|
|f      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}x}}y c c}	w )Nr   r   UNRELATED-CRON-9z
task-OTHERr   r   Fr   )r   )r   r   rF   r   r   r   rI   r   rM   r  r  r  c              3  :   K   | ]  }|d    dk(  xr |d     yw)r   rf  r   Nrs   r  s     r(   r	  z3test_s8_unrelated_cron_untouched.<locals>.<genexpr>  s.       	
$%%6!I,6r
  z0assert not %(py4)s
{%(py4)s = %(py0)s(%(py2)s)
}r  )r   r   r   r  r   rN   rO   rP   rQ   rR   rS   r.   rU   r  r   r  )r  r   r   r   r   rV   rW   rX   rY   r\  rh   ri   r   rk   s                 r(    test_s8_unrelated_cron_untouchedrh    s   #HnjIF )'%" 	
E 8F%@OCe&&>&*>>>>>&*>>>>>>>3>>>3>>>&>>>>>>*>>>>*>>>>>>>>"%)),QAiL,<,<,<<<<,<<<,<<<<<<<<<< s                             -s   Jc                $   t         j                  }t        |      }|j                  } |       }d}t        |z  }d}||z  }||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                  t               rt        j                  t               ndt        j                  |      t        j                  |      t        j                  |      t        j                  |      dt        j                         v st        j                  t              rt        j                  t              ndt        j                  |      t        j                  |      d	z  }
d	d
|
iz  }t        t        j                  |            d x}x}x}x}x}	x}x}x}}t        j                  }t        |      }|j                  } |       }d}t        |z  }d}||z  }||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                  t              rt        j                  t              ndt        j                  |      t        j                  |      t        j                  |      t        j                  |      dt        j                         v st        j                  t              rt        j                  t              ndt        j                  |      t        j                  |      d	z  }
d	d
|
iz  }t        t        j                  |            d x}x}x}x}x}	x}x}x}}t        | dd      }t        | |      \  }}}t!        |t"              }|sddt        j                         v st        j                  t               rt        j                  t               nddt        j                         v st        j                  |      rt        j                  |      nddt        j                         v st        j                  t"              rt        j                  t"              ndt        j                  |      dz  }t        t        j                  |            d }|j$                  }d }||u}|st        j                  d|fd||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}|j&                  }|j(                  }d}d} |||      }|j*                  }d} ||      }|sddt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      t        j                  |      t        j                  |      t        j                  |      t        j                  |      t        j                  |      t        j                  |      d	z  }t        t        j                  |            d x}x}x}x}x}x}x}}t-        |d       r|j.                  nd!}|s8d"d#t        j                  |      iz  }t        t        j                  |            d }y )$Nanu_v3z'cancel_on_success_live_adoption_2604.pyrF   )z%(py9)s
{%(py9)s = %(py7)s
{%(py7)s = %(py5)s
{%(py5)s = %(py0)s(%(py3)s
{%(py3)s = %(py1)s.__file__
})
}.resolve
}()
} == ((%(py11)s / %(py13)s) / %(py16)s)r   	ADOPT_MODr$   )	rJ   r_   r`   rb   re   r   py11py13rF  zassert %(py19)spy19scriptsz+run_cancel_on_success_live_adoption_2604.pyrJ  r   r   r   z5assert %(py4)s
{%(py4)s = %(py0)s(%(py1)s, %(py2)s)
}
isinstancer   r   )rJ   r_   rK   rL   )is not)z7%(py2)s
{%(py2)s = %(py0)s.live_result
} is not %(py5)sr   r   re   r   rw   ztask-2553+45zassert %(py16)s
{%(py16)s = %(py12)s
{%(py12)s = %(py10)s
{%(py10)s = %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.underlying_cancel_audit
}.get
}(%(py6)s, %(py8)s)
}.startswith
}(%(py14)s)
})	rJ   rK   rL   rM   r   r  rC  rE  rF  &wired_via_operational_collector_wiringTzassert %(py1)sr_   )rk  __file__r   resolver$   rN   rO   rP   rQ   rR   rS   r.   rU   rJ  r   r   rp  r   live_resultunderlying_cancel_auditr}   r<   hasattrrr  )r  ri   rl   r  @py_assert8@py_assert12@py_assert14rP  rQ  @py_assert10@py_format18rT  r   r   r   r7  rW   rX   rV   rk   rm   r   r"  rN  rO  @py_assert13@py_format17rh   r   s                                r(   test_s11_real_module_not_mockr    s<   "" 4"# #++ +- HHHH-H   -H                       #    $    ,    .      	   	       I         4 %% %' I M MM'M   'M                               &    (      	   	      !N        $HnjIFx/KCac899999999:999:999999c999c999999899989999999999??&$&?$&&&&?$&&&&&&3&&&3&&&?&&&$&&&&&&&&& &** 8 R *8R8 8CC C               '    +    ,4    68    9    D    	          :A5:355  i     r*   c           	        t        | dd      }t        | |      \  }}}|j                  j                         D ci c]  \  }}|dk7  r|| }}}t        j
                  }d} |||      }	t        |	v}
|
sWt        j                  d|
fdt        |	f      d	t        j                         v st        j                  t              rt        j                  t              nd	d
t        j                         v st        j                  t              rt        j                  t              nd
t        j                  |      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |	      dz  }dd|iz  }t        t        j                  |            d x}
x}x}}	y c c}}w )Nr   r   r   rv  F)ensure_ascii)not in)ze%(py0)s not in %(py9)s
{%(py9)s = %(py4)s
{%(py4)s = %(py2)s.dumps
}(%(py5)s, ensure_ascii=%(py7)s)
}r   rx   adoption_view)rJ   rK   rL   rb   re   r   zassert %(py11)srl  )r   r   r  rg   rx   r   r   rN   rO   rP   rQ   rR   rS   r.   rU   )r  r   r   r7  r0   vr  rW   r  rx  rV   r!  @py_format12s                r(   *test_s12_no_raw_anu_key_in_adoption_fieldsr  +  s-   #HnjIFXf-ICA &&,,.Aq)) 	
1M 
 "&NNM!NN>!NNNNN>!NNNNNNN>NNN>NNNNNNNNNNNNNNNNNNMNNNMNNNNNN!NNNNNNNNs   G)r'   r|   returnr|   )r  z	list[str])r~   r|   r  bool)rv   r|   r  r   )rv   r|   r   r|   r  dict)r   r   rv   r|   r   r|   r  r  )
r   r   rv   r|   r   r|   r   r|   r  r   )rv   r|   r   r|   r   r  )r   r   r  zDtuple[CancelOnSuccessAdoptionResult, WorldSpyRemover, FakeCronWorld])M__doc__
__future__r   builtinsrP   _pytest.assertion.rewrite	assertionrewriterN   r"   rx   r4   syspathlibr   r  pytestrs  rt  parentr$   r|   pathremoveinsert+anu_v3.cancel_on_success_live_adoption_2604$cancel_on_success_live_adoption_2604rk  r   r   r   r   r	   anu_v3.callback_4tuple_registryr
   !anu_v3.cancel_on_success_live_e2er   r   r   r   0scripts.run_cancel_on_success_live_adoption_2604(run_cancel_on_success_live_adoption_2604rJ  (utils.anu_delegation_completion_callbackr   r   ry   r:   r  r   rf   rq   r)   fixturer6   rD   rZ   rn   rt   r   r   r   r   r   r   r   r   r%  r-  r2  r8  r:  rW  rd  rh  r  r  rs   r*   r(   <module>r     s  @ #      
   N""$++2299	y>SXXHHOOC	N# 3y> " ?   ?
 

	
<	= ii!
 $
 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	KA"P ? F 2 2#" N N F F& # #L"&T ;E	&)47	* 9>T "& 
!	! J!J4.44 	44(,D&4,	Or*   