
    3j~                       d Z ddlmZ ddlmZmZ ddlmZ ddlm	Z	m
Z
mZ ddlmZmZ ddlmZ ddlmZmZmZ dd	lmZ dd
lmZmZ ddlmZmZ dZdZdZdZ dZ! G d d      Z" G d d      Z#e G d d             Z$e G d d             Z%e G d d             Z&e G d d             Z'e G d d             Z(dd 	 	 	 	 	 	 	 d-d!Z)eed"	 	 	 	 	 	 	 	 	 	 	 	 	 d.d#Z*d/d$Z+d%d%d%d%d%eed&d'dd(
	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d0d)Z,	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d1d*Z-	 	 	 	 	 	 	 	 	 	 d2d+Z.g d,Z/eZ0y%)3u  anu_v3.cancel_on_success_live_e2e — cancel-on-success live remove END-TO-END.

task-2553+48 (회장 결정, 코드/파일 자동화). Strict-additive 신규 orchestrator.

문제 (회장 §2 verbatim):
  +45 self-test 에서는 fallback binding 이 properly-bound 상태가 아니어서
  ROLE_MISMATCH 로 fallback 보존이 발생했다. 따라서 cancel-on-success live
  remove 는 아직 end-to-end 실증되지 않았다.

목표 (회장 §1/§3 verbatim):
  properly-bound 4-tuple 기반 cancel-on-success live remove end-to-end 실증.
    1. dispatch 시 +44 guard 가 normal_collector_cron_id +
       fallback_cron_id(role=fallback) 를 registry 에 정합 기록(REGISTERED),
       +47 ``write_back_completed`` 로 normal durable-success COMPLETED 갱신
       → live cron id == ledger id 일치 보장.
    2. 이 properly-bound 상태에서 +45
       ``run_cancel_on_success_live_wiring`` 실행 → +37→+25→+23 cancel seam
       1회 → live verifier 5조건 AND PASS → bound fallback cron 1건 실제
       제거 → cancel-audit JSON 생성.
    3. normal success 후 fallback 발화 0(실 제거 입증) end-to-end.

결선 (9-R.1 2-layer):
  * Layer A — 실 운영 cron 무접촉 (§5 구속). 본 모듈은 cron 을 자체
    로직으로 추가/제거하지 않는다. ZERO ``cokacdir`` / ``subprocess`` exec.
    properly-bound 4-tuple 은 +44 append-only API + +47 write-back API
    (read-only/additive 재사용) 로만 구성하고, live cron 조회/제거는
    전적으로 주입 Fake/Spy DI(전용 격리 fixture cron 세계)로만 수행한다.
    실 운영 fallback cron 강제삭제 0.
  * Layer B — bound·verified single cancel (§3 목표 자체). properly-bound
    4-tuple(live==ledger·role=fallback) + +45 live verifier 5조건 AND PASS
    = 단일 bound·verified cancel 1건 = 회장 §1 목표(end-to-end 실증) 그
    자체. mismatch/missing/unverified = 보존·decouple(+45 보수 가드
    무회귀).

무변 의무 (회장 §4/§6):
  +44/+45/+46/+47 모듈·+37/+25/+23·frozen anchor·기존 산출물 byte-0
  /additive 무변. 본 모듈은 그것들을 read-only/additive 재사용하는
  orchestrator 일 뿐이다 (신규 cancel 로직 0 — +45 권위 그대로 경유).
    )annotations)	dataclassfield)Path)ListOptionalUnion)Callback4TupleRegistrymake_record)write_back_completed)LOOKUP_VERIFIEDCancelOnSuccessLiveResult!run_cancel_on_success_live_wiring)guaranteed_write_audit)ANU_CHAT_IDFALLBACK_ROLE)CallbackInputClassificationztask-2553+48z+task-2553+48.cancel-on-success-e2e-audit_v1E2E_PASSE2E_PRESERVEDE2E_DECOUPLEDc                  8    e Zd ZdZddZd	dZd
dZddZddZy)FakeCronWorldub  전용 격리 fixture cron 세계 (실 운영 cron 무접촉, NO-CRON).

    ``entries`` 는 ``{id, task_id, chat_id, role, fired, removed}`` dict
    리스트. 실 cokacdir/subprocess 를 절대 호출하지 않는다 — 본 task 의
    e2e 실증은 이 격리 세계로만 수행한다(회장 §5 "live cron 강제삭제"
    준수, Layer A).
    c                f    |D cg c]  }t        |       c}| _        d| _        d| _        y c c}w )Nr   )dictentries
list_callsfire_attempts)selfr   es      8/home/jay/workspace/anu_v3/cancel_on_success_live_e2e.py__init__zFakeCronWorld.__init__h   s,    5<#=DG#= $>s   .c                V    | j                   D ]  }|j                  d      |k(  s|c S  y )Nid)r   getr   cron_idr    s      r!   _findzFakeCronWorld._findn   s/     	AuuT{g%	     c                    | xj                   dz  c_         d| j                  D cg c]  }t        |       c}ddidS c c}w )u@   +23 verifier 가 호출하는 격리 cron 조회 (실 조회 0).   okfake_isolated_worldT)statusr   raw)r   r   r   )r   r    s     r!   listerzFakeCronWorld.listert   s>    1)-6AQ6)40
 	
6s   ?c                6    | j                  |      }|yd|d<   y)NFTremoved)r(   r&   s      r!   mark_removedzFakeCronWorld.mark_removed}   s$    JJw9)r)   c                    | xj                   dz  c_         | j                  |      }|"|j                  d      s|j                  d      ryd|d<   y)uJ  normal success **후** fallback 발화 시도 시뮬레이션.

        실제 cron 이 제거됐으면(또는 부재) 발화 불가 → False.
        return True 는 fallback 이 실제로 발화함을 의미(회장 §3: end-to-end
        에서 0 이어야 함). 실 cron 무접촉 — 격리 세계 상태만 평가.
        r+   r2   firedFT)r   r(   r%   r&   s      r!   attempt_fallback_firez#FakeCronWorld.attempt_fallback_fire   sL     	aJJw9i(AEE'N'
r)   N)r   
List[dict]returnNone)r'   strr8   Optional[dict]r8   r   )r'   r:   r8   bool)	__name__
__module____qualname____doc__r"   r(   r0   r3   r6    r)   r!   r   r   _   s     
r)   r   c                  ,    e Zd ZdZddd	dZddd
dZy)WorldSpyRemoveruB  주입 fake remover — 실 cron 삭제 0, FakeCronWorld 상태만 변형.

    +45→+37→+25→+23→+9a 경로가 operational=True 로 호출(dry_run=False).
    호출 인자를 spy 기록하고, 격리 세계의 해당 entry 만 removed 표시한다
    (실 운영 cron 무접촉 — 회장 §5/9-R.1 Layer A).
    r2   )r.   c               .    || _         || _        g | _        y )N)worldr.   calls)r   rF   r.   s      r!   r"   zWorldSpyRemover.__init__   s    
!#
r)   T)dry_runc                   ddl m} | j                  j                  ||d       | j                  dk(  r|s| j
                  j                  |        || j                  d| j                         S )Nr   )RemoverResult)r'   rH   r2   zfake-isolated:)r.   detail))utils.completion_callback_fallback_cancelrJ   rG   appendr.   rF   r3   )r   r'   rH   rJ   s       r!   __call__zWorldSpyRemover.__call__   sa    	
 	

g'BC;;)#GJJ##G,;;}'E
 	
r)   N)rF   r   r.   r:   )r'   r:   rH   r=   )r>   r?   r@   rA   r"   rN   rB   r)   r!   rD   rD      s     ?H $
 9= 
r)   rD   c                  f    e Zd ZU dZded<   ded<   ded<   ded<   ded<   ded<   ded	<   eZded
<   y)ProperlyBound4TupleuD   dispatch 시 +44 guard 가 기록할 4-tuple (role=fallback 정합).r:   task_iddispatch_iddispatch_cron_idexecutorchat_idnormal_collector_cron_idfallback_callback_cron_idroleN)r>   r?   r@   rA   __annotations__r   rX   rB   r)   r!   rP   rP      s6    NLML!!""D#r)   rP   c                  r    e Zd ZU dZded<   ded<   ded<   ded<   d	ed
<   ded<    ee      Zded<   ddZy)BindingConstructionEvidenceuB   properly-bound 4-tuple 구성 증거 (+44 guard + +47 write-back).r=   guard_registered_appendedr   guard_recordr:   writeback_statuswriteback_appendedr;   completed_recordledger_pathdefault_factory	List[str]reasonsc           
         d| j                   | j                  | j                  | j                  | j                  | j
                  t        | j                        dS )Nz$task-2553+48.binding_construction_v1)schemar\   r]   r^   r_   r`   ra   re   )r\   r]   r^   r_   r`   ra   listre   r   s    r!   to_dictz#BindingConstructionEvidence.to_dict   sQ    <)-)G)G -- $ 5 5"&"9"9 $ 5 5++DLL)	
 		
r)   Nr<   )	r>   r?   r@   rA   rY   r   rh   re   rj   rB   r)   r!   r[   r[      s=    L##$$t4GY4

r)   r[   c                      e Zd ZU dZded<   ded<   ded<   ded<   ded<   ded<   d	ed
<   d	ed<   d	ed<   dZded<    ee      Zded<   ddZ	y)BindingIntegrityuF   properly-bound 무결성 (live cron id == ledger id · role=fallback).r=   r,   completed_presentrole_is_fallback
chat_ownedlive_eq_ledgermarker_eq_ledgerOptional[str]ledger_fallback_cron_idlive_cron_idmarker_fallback_cron_idFsingle_live_fallbackrb   rd   re   c                   d| j                   | j                  | j                  | j                  | j                  | j
                  | j                  | j                  | j                  | j                  t        | j                        dS )Nz!task-2553+48.binding_integrity_v1)rg   r,   rm   rn   ro   rv   rp   rq   rs   rt   ru   re   )r,   rm   rn   ro   rv   rp   rq   rs   rt   ru   rh   re   ri   s    r!   rj   zBindingIntegrity.to_dict   sq    9''!%!7!7 $ 5 5//$($=$="11 $ 5 5'+'C'C --'+'C'CDLL)
 	
r)   Nr<   )
r>   r?   r@   rA   rY   rv   r   rh   re   rj   rB   r)   r!   rl   rl      sY    PH****!&$&t4GY4
r)   rl   c                  F    e Zd ZU dZded<   ded<   ded<   dZded	<   dd
Zy)FallbackFireProofu7   normal success 후 fallback 발화 0 end-to-end 입증.r=   cron_removedintpost_success_fire_attemptsfallback_fired_count r:   notec                b    d| j                   | j                  | j                  | j                  dS )Nz#task-2553+48.fallback_fire_proof_v1)rg   rz   r|   r}   r   rz   r|   r}   r   ri   s    r!   rj   zFallbackFireProof.to_dict  s1    ; --*.*I*I$($=$=II
 	
r)   Nr<   )r>   r?   r@   rA   rY   r   rj   rB   r)   r!   ry   ry      s%    A ##D#N
r)   ry   c                      e Zd ZU dZded<   ded<   ded<   ded	<   ded
<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<    ee      Zded<   y)CancelOnSuccessE2EResultu<   cancel-on-success live remove end-to-end 1회 실증 결과.r:   verdictr=   properly_boundr[   binding_constructionrl   binding_integritydurable_successseam_invokedcron_remove_invokedfallback_cancelledfallback_preservednormal_success_unchangedry   fallback_fire_proofr   live_resultr   	e2e_auditrr   e2e_audit_pathrb   rd   notesN)r>   r?   r@   rA   rY   r   rh   r   rB   r)   r!   r   r     sf    FL55''""****O!!T2E92r)   r   r~   ts_kstc               F   g }t        |j                  |j                  |j                  |j                  t        |j                        |j                  |j                  |j                  dd|      }| j                  |       |j                  d       t        | |j                  |j                  |j                  |j                  t        |j                        |j                  |j                  |j                  d|      }|j                  d|j                   d|j                   d       | j                  |j                        }t        d	|j!                         |j                  |j                  |r|j!                         nd
t        | j"                        |      S )u  dispatch 시 +44 guard 정합 기록 + +47 write-back COMPLETED 갱신.

    절차 (회장 §3.1):
      1. +44 ``make_record`` 로 REGISTERED 4-tuple(role=fallback,
         normal_collector_cron_id + fallback_callback_cron_id 정합) 을
         append (durable guard 기록 — +44 append-only API only, byte-0).
      2. +47 ``write_back_completed`` 로 normal durable-success COMPLETED
         line append (verified normal-collector identity 바인딩 — naive
         mark_completed 의 stale role/null copy 결함 회피).

    → ledger 최신 record = COMPLETED·role=fallback·fallback_callback_cron_id
    bound (live cron id == ledger id 일치 보장의 ledger 측 근거).
    
REGISTEREDF)rQ   rR   rS   rT   rU   rV   rW   rX   r.   no_fallbackr   u|   +44 guard: REGISTERED 4-tuple append (role=fallback, normal_collector+fallback 정합) — append-only API only (+44 byte-0))
rQ   rR   rS   rT   rU   rV   rW   rX   r   r   u   +47 write_back_completed → z (appended=uf   ) — normal durable-success COMPLETED 갱신, naive mark_completed stale role/null copy 결함 회피TNr\   r]   r^   r_   r`   ra   re   )r   rQ   rR   rS   rT   r:   rU   rV   rW   rX   rM   r   r.   appended
latest_forr[   to_jsonra   )registrytupr   re   guardwb	completeds          r!   build_properly_bound_4tupler   "  sj   & G OO--CKK !$!=!="%"?"?XXE OOENN	R 
OO--CKK !$!=!="%"?"?XX
B NN
'		{ 3[[M "B	B ##CKK0I&"&]]_;;09**,t,,- r)   )expected_chat_idexpected_rolec               `   g }| j                  |      }t        |duxr |j                  dk(        }|s|j                  d       t        |duxr |j                  xs d|k(        }	|	s|j                  d|d       t        |duxr! t        |j                        t        |      k(        }
|
s|j                  d       ||j                  nd}|D cg c],  }|j                  d      |k(  r|j                  d	      |k(  r|. }}t        |      d
k(  }|r|d   j                  d      nd}|s|j                  dt        |       d       t        |xr |xr	 |xr ||k(        }|s|r|j                  d|d|d       t        |t              r|j                  d      nd}t        |t              r|j                  d      nd}t        |xr	 |xr ||k(        }|s|j                  d|d|d       |xr |	xr |
xr
 |xr |xr |}t        ||||	|
||||||xs dg      S c c}w )u\  properly-bound 무결성 검증 — live cron id == ledger id · role=fallback.

    회장 §3.1 "live cron id == ledger id 일치 보장" 의 코드 검증:
      * ledger 최신 record = COMPLETED (+47 write-back 적용됨)
      * record.role == fallback, record.chat_id == ANU
      * record.fallback_callback_cron_id == live cron entry.id  (live==ledger)
      * record.fallback_callback_cron_id == marker.callback_policy_a.
        fallback_callback_cron_id                                (==marker)

    하나라도 불만족 → ``ok=False`` → +45 보수 가드 경로(보존·decouple).
    N	COMPLETEDuF   ledger 최신 record 가 COMPLETED 아님 → +47 write-back 미적용r~   zledger role != u    → properly-bound 아님u$   ledger chat_id 가 ANU 소유 아님rQ   rX   r+   r   r$   u   task/role 매칭 live fallback u[   건 — 정확히 1건이어야 properly-bound (모호 binding → 보존, Codex F1 수용)zlive cron id(z) != ledger id(u&   ) → properly-bound 4-tuple 불성립callback_policy_arW   zmarker fallback id(u   ) → 4-tuple 정합 실패u.   properly-bound 4-tuple 무결성 전수 통과)r,   rv   rm   rn   ro   rp   rq   rs   rt   ru   re   )r   r=   r.   rM   rX   r:   rU   rW   r%   len
isinstancer   rl   )r   rQ   r   r   live_cron_entriesdispatch_markerre   recrm   rn   ro   
ledger_fidr    matchesrv   live_idrp   pol
marker_fidrq   r,   s                        r!   verify_4tuple_binding_integrityr   k  s   ( G


g
&CS_J{1JKT	
 CtOQRM0QRm..HI	
 4EC,4D0EEJ =>25/..tJ #55w&155=M+I 	
G 
 w<1,&-gajnnT"4G-c'l^ <J J	
 QQQGz<QN 2G;oj^ D3 3	
 ot, 	/0  c4  	+, 
 >z>jJ&> !* 0~8:	
 	 			 !	 		
   1+)%) * *MLM as   1H+c                    | j                   }|r"|j                  r|j                  j                  nd }|y |j                  xs i }|j	                  d      S )Nchecks)wired_resultwiring_resultseam_outcomelive_verificationr%   )r   wrsolvs       r!   _five_conditionsr     sQ    		!	!B+-"2B2B			&	&B	z				#B66(r)   N   F)
r   fallback_cancelled_marker_pathcancel_lock_pathseam_audit_pathcallback_contractr   r   r|   skip_binding_constructionr   c                 ( t        t        |            }|rT|j                  | j                        }t	        di dd|r|j                         ndt        |j                        dg      }nt        |||      }t        || j                  |||
j                  |	      }t        | ||||||||
j                  |||||||      }|j                  r6|j                  j                  r |j                  j                  j                  nd}|rt!        |j"                        nd}|j$                  (t'        (fd	|
j                  D              }|
j                  D cg c]_  }|j)                  d
      | j                  k(  r?|j)                  d      |k(  r+|j)                  d      rt        |j)                  d            a }}(|vr|j+                  (       d} t-        t/        d|            D ]   }!|D ]  }"|
j1                  |"      s| dz  }  " t3        ||| |r| dk(  rdnd      }#t!        |j4                        }$|s_|j6                  rS|j8                  j:                  t<        k(  r6|j>                  r*|j@                  r|r|r| dk(  r|$r|jB                  rtD        }%n'|j>                  r|j@                  r	|stF        }%ntH        }%tK        ||||#|%|j6                  xr | (      }&tM        |&|||jN                        }'tQ        |%|j6                  xr | |||$|j>                  |j@                  ||jR                  |jB                  |#||&|'g d      S c c}w )u"  properly-bound 4-tuple 기반 cancel-on-success live remove end-to-end.

    절차 (회장 §3):
      1. +44 guard 정합 기록 + +47 write-back COMPLETED → properly-bound
         4-tuple 구성 (``skip_binding_construction`` 시 외부 ledger 상태
         그대로 — mismatch/missing 보수 가드 무회귀 재현용).
      2. properly-bound 무결성 검증 (live cron id == ledger id·role=
         fallback). 불만족이어도 +45 가 보수적으로 보존하는지(무회귀)
         그대로 진행 — 본 모듈이 cancel 을 강제하지 않는다.
      3. +45 ``run_cancel_on_success_live_wiring`` **경유** (PRIMARY —
         신규 cancel 로직 0). +37→+25→+23 seam 1회 → live verifier 5조건
         AND → bound fallback 1건 cron-remove(주입 WorldSpyRemover, 실
         운영 cron 무접촉).
      4. normal success 후 fallback 발화 0 입증: 제거 후 격리 세계에서
         fallback 발화를 ``post_success_fire_attempts`` 회 시도 → 전부
         미발화(0) 여야 end-to-end 성립.
      5. e2e cancel-audit JSON 생성·보장 기록. seam/cron-remove 의 어떤
         예외·skip·실패도 normal collector success 를 뒤집지 않는다(디커플
         — +45 권위 그대로, normal_success_unchanged=True 불변).
    FSKIPPED_EXTERNAL_LEDGERNuh   binding 구성 skip — 외부 ledger 상태 그대로 (mismatch/missing 보수 가드 무회귀 재현)r   r   )rQ   r   r   r   r   )dispatch_fired_marker_pathresult_json_pathreport_pathcollector_result_marker_path	claim_dirra   cron_listerremoverr   r   r   r   r   r   c              3  l   K   | ]+  }|j                  d       k(  xr |j                  d       - yw)r$   r2   N)r%   ).0r    targets     r!   	<genexpr>z1run_cancel_on_success_live_e2e.<locals>.<genexpr>M  s7       	
dv2!%%	"22s   14rQ   rX   r$   r   r+   u   normal durable-success 후 bound fallback cron 이 실제 제거되어 이후 발화 시도 전부 미발화(0) — end-to-end 입증 (회장 §3)u   fallback 미제거(보존) — properly-bound 불성립/5조건 미충족 보수 가드 경로. normal success 는 디커플로 무변(+45 무회귀)r   )r   construction	integrity
fire_proofr   r   target_cron_id)r   r   event_id)uq   properly-bound 4-tuple = +44 guard 정합 기록 + +47 write_back_completed COMPLETED (live cron id == ledger id)u   +45 run_cancel_on_success_live_wiring 경유 — 신규 cancel 로직 0, +37→+25→+23 seam·5조건 verifier 권위 그대로u   Layer A: 실 운영 cron 무접촉(격리 FakeCronWorld/Spy) / Layer B: bound·verified single cancel 1건 (회장 §1 목표 자체)u   디커플: normal_success_unchanged 절대불변 — cancel 실패/skip/exception 이 normal success 를 뒤집지 않음 (+45 권위 상속))r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )*r
   r   r   rQ   r[   r   r:   ra   r   r   r   r   r0   r   r   r   r=   r   rW   anyr%   rM   rangemaxr6   ry   r   r,   lookupr.   r   r   r   r   r   r   r   _build_e2e_audit_write_e2e_auditr   r   r   ))inpack_pathr   r   r   r   r   r   ra   r   rF   r   r   r   r   r   r   r   r   r|   r   r   r   r   r   r   r   r   r   rz   r    fallback_idsr5   _fidr   r   r   r   audit_writtenr   s)                                           @r!   run_cancel_on_success_live_e2er     s}   Z &d;&78H !!!#++.2&+6$.1S[[]tH001:
 3c&

 0)#--'I 4#=)%ALL'E)'+)#!K, $$((66 	  ..;;
   9;b334 **F  L 55s{{*EE&M]*EE$K	 	AEE$KL  \!F#E3q456  	C**3/
	 #!#=" 
Z^J ;667O &LL%%8$$++QJ00  ++"   ! ||E,E(EI %%%%	M $ ||E,E(E)#' --';;-&99!,!E!E&$	
 Os   A$Mc                P   t        | j                  t              r| j                  ni }i dt        d| j                  xs | j
                  j                   dd| j
                  j                  d|xs dd|dt        |      d	| j
                  j                  d
|j                         d|j                         d|dt        |       dt        | j                        dt        | j                        dt        |j                  dd            dt        | j                        d|j                         dt        | j                        t        | j                         | j
                  j"                  | j
                  j$                  ddg|j                  d      dS )u   e2e cancel-audit 단일 레코드 (schema 정합).

    ``normal_success_unchanged`` 는 디커플 절대불변 — 무엇이 와도 True
    (회장 §3: cancel 실패/skip/exception 이 normal success 를 뒤집지 않음).
    rg   r   z|e2erQ   r   z	<UNBOUND>r   r   lookup_statusr   r   cancel_auditfive_condition_resultsr   r   r   Fr   r   &wired_via_operational_collector_wiringu<   task-2553+48 cancel-on-success live remove END-TO-END 실증u   properly-bound 4-tuple(+44 guard + +47 write-back) → +45 wiring → +37→+25→+23 seam → 5조건 AND → bound fallback cron-remove → normal success 후 fallback 발화 0ts_utc)r   canonical_rootra   r   r   )r   r   r   E2E_AUDIT_SCHEMAr   r   rQ   r=   r.   rj   r   r   r   r%   r   r   r   r   ra   )r   r   r   r   r   r   r   cas           r!   r   r     s    &0  $&	!	! &"&K((O{/A/A/I/I.J$,O& 	;%%--& 	.7K	&
 	7& 	$~.& 	++22& 	 4 4 6& 	Y..0& 	& 	!"2;"?& 	[556& 	tK$C$CD& 	dFF'/
&" 	d;#A#AB#&$ 	z113%&& 	1$>>3
'&4 %)00%
 &,,;;"))55JC
 &&"K& &r)   c          	         |t        |      nt        |      t         dz  }dj                  d |xs dD              dd }t        | |t        |      t         d| dz  g      S )	uQ   e2e cancel-audit 다중 후보 보장 기록 (Layer A — NO-CRON, 디커플 IO).Nz.cancel-audit.jsonr~   c              3  D   K   | ]  }|j                         r|nd   yw)r   N)isalnum)r   cs     r!   r   z#_write_e2e_audit.<locals>.<genexpr>  s     KQAIIKqS0Ks    P   z.cancel-audit.z.json)primary	fallbacks)r   TASK_MARKER_PREFIXjoinr   )auditr   r   r   r   safe_eids         r!   r   r     s     % 	^)_"4!55GHH 
 wwK8>rKKCRPH!O#$N8*EBC
 r)   )r   r   r   r   r   r   rD   rP   r[   rl   ry   r   r   r   r   )r   r
   r   rP   r   r:   r8   r[   )r   r
   rQ   r:   r   Union[int, str]r   r:   r   r7   r   r   r8   rl   )r   r   r8   r;   ).r   r   r   Union[str, Path]r   rP   r   r   r   r   r   r   r   r   r   r   ra   r   r   r   rF   r   r   rD   r   Optional[Union[str, Path]]r   r   r   r   r   r   r   r;   r   r   r   r:   r|   r{   r   r=   r   r:   r8   r   )r   r   r   r[   r   rl   r   ry   r   r:   r   r=   r   r:   r8   r   )
r   r   r   r   r   r   r   r:   r8   rr   )1rA   
__future__r   dataclassesr   r   pathlibr   typingr   r   r	   anu_v3.callback_4tuple_registryr
   r   anu_v3.callback_event_triggerr   $anu_v3.cancel_on_success_live_wiringr   r   r   anu_v3.cancel_audit_writerr   utils.live_cron_state_verifierr   r   (utils.anu_delegation_completion_callbackr   r   r   r   r   r   r   r   rD   rP   r[   rl   ry   r   r   r   r   r   r   r   __all__r   rB   r)   r!   <module>r     s;  &N # (  ( (
 


 $ @  2 2j
 
< 
 
 
 
 
 
0 
 
 
@ 
 
 
$ 3 3 30 	F$F	F 	F
 !FZ )4&i$i i &	i
 i "i i iX. 26AE3726(,(3&&'&+/V	VV 
V
 !1V 'V "V #3V  V "V V V V /V %?V  1!V" 0#V$ &%V& &'V( )V* !$+V,  $-V. /V0 1Vr8*8 .8  	8
 "8 8 8 8 
8v   /	
  0& r)   