
    3j݀              	      ~   U d Z ddlmZ ddlZddlZddlZddlmZmZ ddl	m
Z
 ddlmZmZmZmZmZmZ ddlmZmZmZ ddlmZmZmZmZ dd	lmZ dd
lmZ ddlm 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e.d<   dZ/de.d<    G d de0      Z1d6dZ2e$fd7d Z3d8d!Z4d9d"Z5d8d#Z6 ed$%       G d& d'             Z7dde$d(	 	 	 	 	 	 	 	 	 	 	 d:d)Z8e G d* d+             Z9	 	 	 	 d;d,Z:dddd e; e<e             e$d-	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d<d.Z=e$d/	 	 	 	 	 	 	 d=d0Z>e G d1 d2             Z?dd3	 	 	 	 	 	 	 	 	 d>d4Z@g d5ZAy)?u)  anu_v3.batch_settle_writeback — independent-ANU durable-success write-back
+ batch settle evaluator (task-2553+53 §3).

회장 §2 진단: +50/+51/+52 normal completion callback collector 가 모두 독립
ANU 로 AUTHORITATIVE_PASS 를 산출했으나, +44 durable 4-tuple registry
(``memory/events/callback_4tuple_index.jsonl``) 에 durable-success(COMPLETED)
레코드가 0/3 → batch coordinator all-settled 자동 인식 실패 → last-settle
collector consolidated summary 미생성. track 실패가 아니라 normal collector
durable-success → registry write-back → batch settle trigger 결선이 미완.

이 모듈은 그 결선을 메운다:

  1. 독립 ANU collector 의 terminal verdict(AUTHORITATIVE_PASS / PASS /
     ACCEPTED) 를 ``anu_v3.authoritative_verdict_selector`` 정본으로 *선택*
     (self-chain 영구 QUARANTINE — §3.3) 한 뒤,
  2. ``anu_v3.self_collector_guard`` / ``anu_v3.writeback_binding_conflict_
     guard`` 를 fail-closed 로 경유해,
  3. §3.2 11종 필드를 담은 durable-success(COMPLETED) write-back 레코드를
     +44 ledger 에 **additive append-only** 로 기록하고,
  4. batch_id 기준 all-tracks-settled 를 normal-callback durable-success
     event 기준으로 즉시 평가한다 (고정시각/dead-man/fallback 진행 트리거
     금지 — §3.6/§3.7).

reuse, not re-implement:

  * +44 ``anu_v3.callback_4tuple_registry`` (append-only ledger, byte-0 —
    additive append 만, allowlist).
  * +49 ``anu_v3.authoritative_verdict_selector`` (self-chain vs independent
    ANU 권위 선택 정본).
  * +49 ``anu_v3.self_collector_guard`` (executor self-collector fail-closed).
  * +49 ``anu_v3.writeback_binding_conflict_guard`` (WRITEBACK_BINDING_
    CONFLICT / idempotent skip).
  * ``dispatch.callback_owner_enforcer.DEFAULT_ANU_KEYS`` (ANU key 정본).

Layer A / NO-CRON: 순수 분류 + append-only ledger WRITE (allowlist gated).
ZERO cron register/remove, ZERO dispatch, ZERO subprocess, ZERO cokacdir,
ZERO merge/PR/branch. fixed-time/dead-man/fallback 을 진행 트리거로 사용 0.
    )annotationsN)	dataclassfield)Path)DictListOptionalSequenceTupleUnion)AUTHORITATIVE_PASSVerdictRecordselect_authoritative_verdict)Callback4TupleRegistrymake_recordrecord_is_validvalidate_record)guard_self_collector_session)guard_writeback_binding)DEFAULT_ANU_KEYSz anu_v3.batch_settle_writeback.v1zdurable_success_writeback.v1zbatch_settle_result.v1z/home/jay/workspacez)memory/events/callback_4tuple_index.jsonl%normal_callback_durable_success_event)r   PASSACCEPTEDDURABLE_SUCCESS_WRITTENWRITEBACK_IDEMPOTENT_SKIPWRITEBACK_BINDING_CONFLICTTRACK_MISMATCHSELF_CHAIN_NO_WRITEBACK)task_idtrack_iddispatch_idnormal_collector_cron_idcollector_keycollector_roleauthoritative_verdictterminal_statuscompleted_atsource_result_pathbatch_idzTuple[str, ...]WRITEBACK_FIELDS_11)r   r    r#   r!   r%   BINDING_IDENTITY_FIELDSc                      e Zd ZdZy)WritebackPathRefusedu>   A write outside the §9 allowlist was attempted (fail-closed).N)__name__
__module____qualname____doc__     4/home/jay/workspace/anu_v3/batch_settle_writeback.pyr-   r-   o   s    Hr3   r-   c           	         t        |       }t        t              j                  }|t        k7  r2t        |       j                  |k7  rt	        d|dt        d|d      yy)u  The ONLY durable WRITE target is the +44 ledger (additive append).

    The write target is keyed to the ledger *identity* (the canonical
    allowlisted relpath, OR a path whose basename is the durable
    ledger file name — the latter only so isolated regression ledgers
    never touch the real +44 ledger). Any other target (a differently
    named file) = §9 violation -> refuse (fail-closed, never silent).z"durable-success write-back target u/    is NOT the §9 allowlisted append-only ledger z (nor a u2   -named isolated ledger) — refused (fail-closed).N)_relpathr   DEFAULT_LEDGER_RELPATHnamer-   )ledger_pathrelledger_names      r4   _assert_ledger_allowlistedr<   s   s{     ;
C-.33K
$$k):)?)?* #0 8..D-G H!_ %
 	
*$r3   c                    	 t        t        |       j                         j                  t        |                  S # t        t
        f$ r t        |       cY S w xY wN)strr   resolverelative_to
ValueErrorOSError)proots     r4   r6   r6      sI    47??$00d<==  1vs   9< AAc                    | xs dj                         }dD ]*  }||v s|j                  |d      d   j                         }, |S )u7   ``task-2553+50 (TRACK 1 — ...)`` -> ``task-2553+50``. ) 	(   r   )stripsplit)rawtidseps      r4   _normalize_task_idrQ      sO    9"


C /#:))C#A&,,.C/ Jr3   c                 x    | D ]5  }t        |t              s|j                         s%|j                         c S  y)NrG   )
isinstancer?   rL   )valsvs     r4   
_first_strrV      s4     a!'')779 r3   c                p    | r3t        | xs dj                  dd      d         j                         d   S dS )uL   ``7943afbe12c12f7d (self-chain, 영구 비권위)`` -> ``7943afbe12c12f7d``.rG   rJ   rK   r   )rV   rM   )rN   s    r4   
_strip_keyrX      s8    BE:syb''Q/2399;A>M2Mr3   T)frozenc                      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Zded<   dZded<   dZded<   dZded<   ddZ	ddZ
y)WritebackBindingu   The §3.2 11-field durable-success binding extracted from an
    independent-ANU verdict file (untrusted free-text claims are NOT used
    to grant authority — origin is recomputed by the +49 selector).r?   r   r    r!   dispatch_id_sourcer"   normal_collector_cron_id_sourcer#   r$   r%   r&   r'   r(   r)   rG   executor_keychat_idNOptional[str]fallback_callback_cron_idFboolsession_is_executor_selfc                   dj                  | j                  | j                  | j                  | j                  | j
                  | j                  g      }t        j                  |j                  d            j                         S )N|utf-8)joinr   r    r!   r#   r%   r)   hashlibsha256encode	hexdigest)selfrN   s     r4   writeback_idzWritebackBinding.writeback_id   sh    hh  ""**	
 ~~cjj12<<>>r3   c                   i dt         d| j                  d| j                  d| j                  d| j                  d| j
                  d| j                  d| j                  d	| j                  d
| j                  d| j                  d| j                  d| j                  d| j                  d| j                  d| j                  d| j                   || j#                         d}|S )Nschemar   r    r!   r\   r"   r]   r#   r$   r%   r&   r'   r(   r)   r^   r_   ra   )writeback_classificationrm   ) DURABLE_SUCCESS_WRITEBACK_SCHEMAr   r    r!   r\   r"   r]   r#   r$   r%   r&   r'   r(   r)   r^   r_   ra   rm   )rl   classificationrecs      r4   	to_recordzWritebackBinding.to_record   sH   "
6"
t||"
 "
 4++	"

 !$"9"9"
 '(E(E"
 .44"
 T//"
 d11"
 $T%?%?"
 t33"
 D--"
 !$"9"9"
  !"
" D--#"
$ t||%"
& ()G)G'"
( )7 --/+"
. 
r3   )returnr?   )rr   r?   ru   zDict[str, object])r.   r/   r0   r1   __annotations__r^   r_   ra   rc   rm   rt   r2   r3   r4   r[   r[      s    I LM!!%((ML#GS/3}3%*d*?r3   r[   )r    r^   canonical_rootc          	     (   t        |       }t        j                  |j                  d            }t	        t        |j                  d      |j                  d                  }t        ||j                  d      |j                  d            }|sd}t        |j                  d      |j                  d	            }	|j                  d
      xs i }
|j                  d      xs i }t        t        |
j                  d      |j                  d      |j                  d                  }|sRt        |j                  d            dk(  r5|j                  d      dv r"t        t        t        t                    d      }t        |
j                  d      |j                  d            xs d}t        t        ||
j                  d      |j                  d                  }t        |
j                  d      |j                  d      |j                  d            }t        |
j                  d      |
j                  d      |j                  d      |j                  d            }|rd}nd| }d}t        |
j                  d      |j                  d            }|rd}nd| }d}t        |
j                  d      |j                  d            xs d}t        |j                  d      |j                  d       |
j                  d            }t        |j                  d      xs$ |j                  d!      xs |j                  d"            }t        d)i d|d|d|d#|d|d$|d|d|d|	d%d&d |d't        ||      d(|d|d|d|d!|S )*u+  Read an independent-ANU verdict JSON and extract the §3.2 binding.

    dispatch_id / normal_collector_cron_id, when not source-recorded, are
    *deterministically derived* with explicit ``*_source`` provenance — a
    transparent, idempotent derivation, never a silent fabrication (§3.8).
    rf   encodingr   tasktrackr    UNKNOWN_TRACKr%   verdictfour_tuple_recordbatch_coordinator_integrationr#   collector_owner_keyr$   ANUexecutor_self_collector)FNrG   r^   r_   dispatch_cron_idr!   source_recordedzderived:derived_from_task_idr"   zANU-normal-callback:derived_from_collector_keyra   Nts_kstr'   rc   !executor_self_chain_authoritativer\   r]   r&   	COMPLETEDr(   r)   r2   )r   jsonloads	read_textrQ   rV   getrX   nextitersortedr   rb   r[   r6   )source_pathr)   r    r^   rw   rD   datar   trkr~   fourbcir#   r$   exec_keyr_   dispdisp_srcnccncc_srcfbr'   self_sessions                          r4   extract_binding_from_sourcer      s    	[A::akk7k34D 488I&(89G Xtxx0$((:2F
GC()488I+>G 88'(.BD
((2
3
9rCHH_%HH*+HH_%	
M 
 txx 012e;23}D f-=&>!?DM!"DHH-=$> 	  HH^$HH^$	
H TXXi0#'')2DG
 #$#$	D $'#) +,+,C #$]O4.	,-,-
 
 
 
 DHH^4dhhx6HL *+ 	988./	98878L    $	
 "% )0 $ & & $ " $A~6     #%!" ".# r3   c                      e Zd ZU 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<   edd       ZddZ	y)WritebackDecisionr?   ro   r~   rr   r   r    r)   Optional[Dict[str, object]]durable_recordrb   appendeddefault_factory	List[str]reasonsc                     | j                   dk(  S )Nr   )r~   rl   s    r4   okzWritebackDecision.okn  s    ||v%%r3   c                    | j                   | j                  | j                  | j                  | j                  | j
                  | j                  | j                  t        | j                        d	S )N	ro   r~   rr   r   r    r)   r   r   r   )
ro   r~   rr   r   r    r)   r   r   listr   r   s    r4   to_jsonzWritebackDecision.to_jsonr  sT    kk||"11||"11DLL)

 
	
r3   N)ru   rb   ru   dict)
r.   r/   r0   rv   r   r   r   propertyr   r   r2   r3   r4   r   r   b  sR    KLLMM//Nt4GY4& &
r3   r   c                x   g }	 | j                         s|S | j                  d      }|j                         D ]U  }|j	                         }|s	 t        j                  |      }|j                  d      t        k(  sE|j                  |       W |S # t        $ r |cY S w xY w# t
        j                  $ r Y w xY w)zAll durable_success_writeback.v1 lines (fail-safe; corrupt lines
    skipped). +44 Callback4TupleRecord lines are ignored here.rf   ry   ro   )is_filer   rC   
splitlinesrL   r   r   JSONDecodeErrorr   rq   append)r9   outtextrN   ds        r4   _ledger_durable_linesr     s    
 $&C""$J$$g$6   	iik	

3A 55?>>JJqM	 J  
 ## 		s(   B B B#B B #B98B9)r    r^   expectedr9   anu_keysrw   c                
   t        |      }|rt        |      n|t        z  }	t        | ||||      	 d*	 	 	 d+fd}
|rt        D cg c],  }||v r&t	        ||         t	        t        |            k7  r|. }}|rfd|v sd|v rt        nt        } |
d|d| d| d|D ci c]  }|||   
 c} d	|D ci c]  }|t        |       c} gj                  |            S j                  t        vr$ |
dt        d
j                  dt         dg      S t        t        ddj                  j                  j                   j"                  j$                  dj                  	      gj                  |      }|j&                  t(        k7  s|j*                  dk  r@ |
dt        d|j&                  d|j*                   dgt-        |j.                        z         S t1        j                  j                   j"                  j$                        }|j2                  s+ |
dt        ddj5                  |j.                        z   g      S j7                         }t9        |	      D ]A  j;                  d      |k(  r-t=        fdt        D              }|r |
dt>        dg      c S j;                  d      j                  k(  sdj;                  d      j@                  k(  sj;                  d      jB                  k(  sj;                  d      j                   k(  sj;                  d      jD                  k(  sj;                  d      j                  k7  s |
dt        d j;                  d      d!j                  d"gj                  t                    c S  tG        |	      }|jI                  j                        }tK        |j                  jB                  jL                  xs d#jN                  d$jP                  j                   j                  |j$                  %      }|j2                  s? |
dt        d&dj5                  |j.                        z   gj                  t                    S j                  tR              }tT        D cg c]  }|j;                  |      r| }}|r |
dt        d'| d(g|      S  |
dtR        d)g|      S c c}w c c}w c c}w c c}w ),u  §3.1/§3.2/§3.3/§3.8/§3.9 — evaluate (NO write) a durable-success
    write-back candidate from an independent-ANU verdict file.

    Pipeline (every step fail-closed, never a silent skip):

      1. extract §3.2 binding from the source verdict file.
      2. §3.9 mismatch — compare against ``expected`` (if given); any
         identity-field mismatch -> TRACK_MISMATCH / WRITEBACK_BINDING_
         CONFLICT (RECORDED, never silent).
      3. §3.3 — +49 ``select_authoritative_verdict``: self-chain origin is
         permanently QUARANTINED; only an independent-ANU terminal verdict
         is authoritative. self-chain -> SELF_CHAIN_NO_WRITEBACK.
      4. §3 — ``guard_self_collector_session`` fail-closed (collector MUST
         be an independent ANU session).
      5. §3.8 — idempotency over existing durable lines: identical binding
         -> WRITEBACK_IDEMPOTENT_SKIP; same idempotency identity but a
         different authoritative_verdict -> WRITEBACK_BINDING_CONFLICT.
      6. §3.9 — ``guard_writeback_binding`` over the +44 ledger history.
      7. clean -> DURABLE_SUCCESS_WRITTEN candidate (the §3.2 record).
    )r)   r    r^   rw   c                p    t        t        | |j                  j                  j                  |d|	      S )NFr   )r   MODULE_SCHEMAr   r    r)   )r~   clsr   rs   bs       r4   	_decisionz5evaluate_durable_success_writeback.<locals>._decision  s9     ! IIZZZZ

 
	
r3   r   r    FAILzbinding identity mismatch on u    — RECORDED as u-   ; silent skip is FORBIDDEN (§3.9). expected=z
 observed=zverdict z& is not a terminal write-back verdict u+    — no durable-success write-back (§3.1).collector_resultr   independent_anu)	kindr~   r   r^   r#   r$   rc   claimed_origindetail)r   r   rK   u]   authoritative_verdict_selector (+49 정본) did NOT classify this as AUTHORITATIVE_PASS (got z, independent_anu_count=u   ) — self-chain verdict is permanently non-authoritative; executor self-chain is NEVER written back as durable-success (§3.3).)r^   r#   r$   is_executor_self_sessionzself-collector guard FAIL: ; rm   c              3  ~   K   | ]4  }t        j                  |            t        t        |            k(   6 y wr>   )r?   r   getattr).0fr   lns     r4   	<genexpr>z5evaluate_durable_success_writeback.<locals>.<genexpr>%  s5       BFF1I#gam"44s   :=u   identical durable-success write-back already present (same writeback_id AND identical binding) — idempotent SKIP, NOT a duplicate append (§3.8).r!   r#   r)   r%   zDsame binding identity but a different authoritative_verdict (ledger=z vs candidate=uL   ) — RECORDED as WRITEBACK_BINDING_CONFLICT; silent skip FORBIDDEN (§3.9).
6937032012anu_collector_durable_success)
r   r!   r_   r"   candidate_rolecandidate_fallback_cron_idcandidate_owner_keyr^   r   "candidate_session_is_executor_selfzwriteback binding guard FAIL: u1   §3.2 mandatory write-back fields missing/empty: u:    — refused (fail-closed, never a silent partial record).u   independent-ANU AUTHORITATIVE_PASS confirmed via +49 정본 selector; self-collector + writeback-binding guards PASS; §3.2 11-field durable-success record ready for additive append-only write-back.r>   )
r~   r?   r   r?   r   r   rs   r   ru   r   )+r   r7   r   r+   r?   r   r   r   rt   r%   TERMINAL_WRITEBACK_VERDICTSr   r   r   r   r^   r#   r$   rc   rr   r   independent_anu_countr   r   r   r   rg   rm   r   r   allr   r    r!   r)   r   history_forr   r_   r"   ra   r   r*   )r   r)   r    r^   r   r9   r   rw   rE   lpr   r   
mismatchedr   kselgwidsamereghistorywbrs   missingr   r   s                           @@r4   "evaluate_durable_success_writebackr     sV   > D)k	t6L/LB#!	A 7;
3
)
  .
H}Xa[!1SA5G!G 

 
  +zZ/G / 
 3J< @K1;<AHQK<> ? <F!Gq!WQ]"2!GIK C 	 	 	&AA+1225 6&&A%B C66
 	
 ''		^^oo //)*)C)C0..
	
 		C" //!!A%+3363E3E2H I)),)B)B(C D## 3;; 
 	
 	%^^oo''!"!;!;		A 44+*TYYqyy-AAB
 	
 ..
C#B' %66.!S( 0 D  5O
   FF9*z"ajj0}%6'1??:z"ajj0./13J3JJ25vv569..1 2 67 5%P !
$Cooaii(G	 		MM		)\!"!;!;6#$#>#>OO^^+,+E+E
B 55.-		"**0EEFKK23
 	
 ++-
.C-@QSWWQZq@G@.CG9 ML L 
 	
 '&	
 		 	s
 =!G~ As   	1S,!S16S6)S; S;)rw   c                  t        |      }t        |       | j                  t        k(  r| j                  j                  d       | S | j                  r| j                  t        k7  r8| j                  j                  d| j                  d| j                  d       | S t        | j                  xs i       }|j                  j                  dd       t        j                  |dd      }t        |d	d
      5 }|j!                  |dz          |j#                          t%        j&                  |j)                                ddd       |j+                  d      }t-        t/        |d         t/        |d         t/        |d         d|d    dt/        |j+                  d      xs d      t/        |d         |rt/        |      nddd| t/        |d               }t1        |      sB| j                  j                  ddj3                  t5        |            z   dz          d| _        | S t9        |      j                  |       d| _        | j                  j                  d       | S # 1 sw Y   )xY w)u  §3.1/§3.10 — durable-success additive append-only WRITE.

    ONLY the §9-allowlisted +44 ledger is writable (fail-closed). Two
    additive lines are appended:

      * the §3.2 ``durable_success_writeback.v1`` 11-field record, AND
      * a +44 ``callback_4tuple_ledger_record.v1`` COMPLETED line so the
        existing +44 ``classify`` / batch coordinator immediately observes
        ``NORMAL_CALLBACK_COMPLETED`` (this is the diagnosed §2 root-cause
        fix). No historical line is rewritten (append-only — +44 byte-0).

    IDEMPOTENT_SKIP / any FAIL classification -> NO write (idempotent /
    fail-closed). Returns the decision with ``appended`` set.
    u:   idempotent skip — no duplicate append performed (§3.8).zclassification=z	 verdict=uq    — NO durable-success write performed (fail-closed; mismatch/conflict/self-chain never silently written §3.9).T)parentsexist_okF)ensure_ascii	sort_keysarf   ry   
Nra   r   r!   zindependent ANU collector (key r#   )r_   r   r"   r   r   r'   )r   r!   r   executorr_   r"   ra   rolestatusno_fallbackr   z)WARN: +44-compat COMPLETED line invalid (r   ul   ) — durable_success_writeback line written; +44 mirror skipped (fail-closed, never an invalid +44 record).u   durable-success write-back appended (additive, append-only): durable_success_writeback.v1 + +44 COMPLETED mirror line — batch coordinator now observes NORMAL_CALLBACK_COMPLETED (§2 root-cause fixed).)r   r<   rr   r   r   r   r   r   r~   r   r   parentmkdirr   dumpsopenwriteflushosfsyncfilenor   r   r?   r   rg   r   r   r   )	decisionr9   rw   r   rs   linefhr   c44s	            r4   apply_durable_success_writebackr   y  sJ   ( 
k	Br"";;H	
 ;;(115LLh558	" #	
 
x&&,"
-CIIOOD4O0::c>D	b#	( B



 
,	-B
C	N#M*+S/0233G2HJCGGI&6,7!$S)C%D!E.03r7d,V3~&'C 37ii,-.BB	
 !2%%c*H	 OO s   :AI))I3c                      e Zd ZU 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<   dZded<   dZded<    ee      Z	ded<   ddZ
y)BatchSettleResultr?   ro   r)   evaluated_at_basisr   tracks_expectedtracks_settledrb   all_settledall_authoritative_passr   List[Dict[str, object]]track_statesF#this_collector_is_last_settle_trackTfallback_pending_non_blockingNr`   #consolidated_summary_candidate_pathr   r   c                n   | j                   | j                  | j                  t        | j                        t        | j
                        | j                  | j                  | j                  | j                  | j                  t        | j                        | j                  t        | j                        dS )N)ro   r)   r  r  r  r  r  r   r
  r  r	  r  r   )ro   r)   r  r   r  r  r  r  r   r
  r  r	  r  r   r   s    r4   r   zBatchSettleResult.to_json  s    kk"&"9"9#D$8$89"4#6#67++&*&A&A88 22 !2!2388DLL)'
 	
r3   r   )r.   r/   r0   rv   r
  r  r  r   r   r   r   r2   r3   r4   r  r    sj    KM  M))05'5*.!4.9='=t4GY4
r3   r  )this_track_idc                V   t        |      }t        |      }i }|D ]M  }|j                  d      | k7  r|j                  d      t        k7  r1||t	        |j                  d            <   O g }g }	d}
|D ]  \  }}|j                  |      }t        |xr- |j                  d      dk(  xr |j                  d      t        v       }|r|j                  d      nd}|r|	j                  |       |t        k7  rd	}
nd	}
|j                  |||r|j                  d      nd
|||r|j                  d      ndd        t        |	      t        t        |            k(  xr t        |      }|xr |
}|rdnd}dt         dt        |	       dt        t        |             dg}|r|j                  d       n|j                  d       t        |xr ||D cg c]  \  }}|	 c}}v xr |      }t        t        | t        |D cg c]  \  }}|	 c}}|	|||||d|      S c c}}w c c}}w )u  §3.4/§3.5/§3.6/§3.7 — evaluate all-tracks-settled for ``batch_id``.

    ``expected_tracks`` = sequence of (track_id, task_id). A track is
    *settled* iff the +44 ledger has a ``durable_success_writeback.v1``
    line for it with ``terminal_status == COMPLETED`` and a terminal
    authoritative verdict. The gate is judged ONLY on these normal-callback
    durable-success events — fixed-time / dead-man / fallback are NEVER a
    progress trigger (§3.7) and a fallback/dead-man pending state is
    explicitly NON-blocking (§3.6).

    decision = ``ALL_SETTLED_CONSOLIDATE`` iff every expected track is
    settled AND every verdict is AUTHORITATIVE_PASS (§3.5); else
    ``RECORD_AND_DEFER``.
    r)   rp   r    Tr&   r   r%   NFPENDING)r    r   r&   r%   durable_success_presentrp   ALL_SETTLED_CONSOLIDATERECORD_AND_DEFERzbatch settle judged on u    ONLY — fixed-time / dead-man / fallback are NOT progress triggers (§3.7); a fallback/dead-man pending state does NOT block all-settled (§3.6)./z= tracks settled via durable_success_writeback.v1 (COMPLETED).u   ALL tracks settled AND every verdict is AUTHORITATIVE_PASS — last settle collector generates the consolidated summary candidate (§3.5).znot all-settled (or a non-AUTHORITATIVE_PASS verdict present) -> RECORD_AND_DEFER; the last settle track's independent ANU collector consolidates once 3/3 durable-success are recorded.)ro   r)   r  r  r  r  r  r   r	  r
  r  r   )r   r   r   r   r?   rb   r   r   r   lenr   EVALUATED_AT_BASISr  BATCH_SETTLE_RESULT_SCHEMA)r)   expected_tracksr9   r  r   durableby_trackr   r	  settledall_apr   r   rs   presentr~   r  consolidater   r   t_is_lasts                          r4   evaluate_batch_settler"    s   * 
k	B#B'G-/H -55(55+,0GG+,QUU:&'(- -/LGF' 
Wll3 +)*k9+/0*+
 7:#''12tNN3,,F"25CGG-.9)0+2;>CGG67D	

< g,#d?&;"<< BK (&K,7(=OH ""4!5 6N 	N w<.#d?345 64 	4	G !	
 	L	
  	O<DAqa<<	G )-'67tq!7*!,3&* 	 = 8s   HH%)r   rq   r  r  r   r   r   r   r   r   r*   r-   r[   r   r  r   r   r   r"  )r9   r   ru   None)rD   r   rE   objectru   r?   )rN   r?   ru   r?   )rT   r$  ru   r?   )r   Union[str, os.PathLike]r)   r?   r    r`   r^   r`   rw   r%  ru   r[   )r9   r   ru   r  )r   r%  r)   r?   r    r`   r^   r`   r   r   r9   z!Optional[Union[str, os.PathLike]]r   zSequence[str]rw   r%  ru   r   )r   r   r9   r%  rw   r%  ru   r   )
r)   r?   r  zSequence[Tuple[str, str]]r9   r%  r  r`   ru   r  )Br1   
__future__r   rh   r   r   dataclassesr   r   pathlibr   typingr   r   r	   r
   r   r   %anu_v3.authoritative_verdict_selectorr   r   r   anu_v3.callback_4tuple_registryr   r   r   r   anu_v3.self_collector_guardr   'anu_v3.writeback_binding_conflict_guardr    dispatch.callback_owner_enforcerr   r   rq   r  CANONICAL_ROOTr7   r  r   r   r   r   r   r   r*   rv   r+   RuntimeErrorr-   r<   r6   rQ   rV   rX   r[   r   r   r   tupler   r   r   r  r"  __all__r2   r3   r4   <module>r3     s  %L #   	 (  ? ? 
  E K =2#A  5 &D  =  I  4 7 9 !3 ( _ ,  I< I
* &4 N
 $< < <F #"&.<y(y y 	y
  y ,y yz 
 
 
:: #"&,059#F+;$<=.<](] ] 	]
  ] *] 3] ] ,] ]H /=	OO )O ,	O
 Of $
 $
 $
X $(nn /n )	n
 !n nbr3   