
    8#j%                         d Z ddlmZmZmZmZmZmZmZm	Z	m
Z
mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZm Z  d Z!d Z"efdZ#y)u  Callback lifecycle classifier (evidence-only, pure function, decoupled).

회장 승인 2축(+root_cause 태그) schema 의 코드화 — CORE ONLY.
evidence snapshot(dict) → (delivery_outcome, normal_callback_miss_cause,
root_cause_tags, evidence_completeness) 를 결정적으로 판정한다.

doctrines:
- evidence-only decoupled: anu_v3 런타임 import 0
- pure function · read-only · 파일/네트워크/subprocess I/O 0 · no daemon
- 추정 금지 → 증거 결핍 시 UNKNOWN(INSUFFICIENT_EVIDENCE)
- CALLBACK_DELIVERY_GAP 은 residual only (이전 차단 원인 전무일 때만)
- 축B precedence = 상태기계상 가장 이른 차단 전이 (스펙 §5)

단일소스 스펙: memory/specs/system_callback_lifecycle_state_schema_260522.md
    )NORMAL_CALLBACK_RECEIVEDFALLBACK_COLLECTOR_APPLIEDDUPLICATE_FALLBACK_NO_OPMANUAL_ANU_REVERIFYNOT_YET_COLLECTEDUNKNOWN_INSUFFICIENT_EVIDENCENONEENVELOPE_PREPARED_NOT_FIRED,FINISH_TASK_GIT_GATE_BLOCKED_BEFORE_CALLBACK SELF_KEY_FAIL_CLOSED_BEFORE_FIRE SELF_KEY_FIRED_NON_AUTHORITATIVECALLBACK_DELIVERY_GAPCALLBACK_CONTRACT_VIOLATIONMISS_CAUSE_UNKNOWNFOREIGN_DIRTY_BLOCKERBOT_APP_TOKEN_ABSENTREFLECTION_NOT_MERGED!GIT_GATE_SHARED_WORKSPACE_MISFIRE SCOPE_GUARD_MAIN_HEAD_DIVERGENCEROOT_CAUSE_TAG_ORDERCOMPLETEPARTIALMISSINGINCIDENTNORMALINCIDENT_MISS_CAUSESDEFAULT_ANU_KEYSis_anu_owner_keyCANONICAL_EVIDENCE_SOURCESCORE_EVIDENCE_SOURCESMAX_ENVELOPE_BYTESc                 4    || v xr | j                  |      d uS N)get)evidencekeys     V/home/jay/workspace/.worktrees/task-2729+7-dev1/utils/callback_lifecycle_classifier.py_src_presentr(   #   s    (?<x||C0<<    c                     t         D cg c]  }t        | |      s| }}t         D cg c]	  }||vs| }}t        t        |      z  st        |fS |st
        |fS t        |fS c c}w c c}w r#   )r   r(   r    setr   r   r   )r%   spresentmissings       r'   _evidence_completenessr/   '   sq    4RQXq8QqRGR4IQ8HqIGI!CL0  G SIs   A%A%	A*A*c           	         | j                  d      xs i }| j                  d      xs i }|j                  d      xs i }| j                  d      xs i }| j                  d      xs i }| j                  d      xs i }| j                  d      xs d}t        |       \  }	}
|j                  d	      }|j                  d
      xs i }|j                  d      xs i }|j                  d      xs i }t        |j                  d            }t        |j                  d            }t        |j                  d            }t        |j                  d            }|xs |xr |}|j                  d      }t        |j                  d            }t        |j                  d            }|xr |xr |duxr t        ||       }|xr t        ||      }|j                  d      xs d}t        |j                  d            xs d|v }|j                  d      xs g }|j                  d      }t        |j                  d            }t        |j                  d            }|j                  d      }|j                  d      } t        |j                  d            xs | duxr	 | t        kD  }!t        | j                  d            }"| j                  d      d u }#| j                  d!      d u }$|	t
        k(  rt        }%nQ|r|r|d"kD  rt        }%nA|rt        }%n8|r|s|d"k(  rt        }%n(|r	|st        }%nt        | d      s||rt        }%nt        }%|	t
        k(  rt        }&n|%t        k(  rt        }&n|rt        }&n|!rt         }&n|rt"        }&n|t$        k(  rtg }'|"r|'j'                  t(               |#r|'j'                  t*               |$r|'j'                  t,               t/        |'      d"kD  rt$        }&nB|'t(        gk(  rt(        }&n1t$        }&n*|"rt(        }&n!|r	|st0        }&n|	t2        k(  rt$        }&nt        }&t5               }(|&t        k(  rP|r|(j7                  t8               |d#k(  r|r|(j7                  t:               |r|d$k(  r|(j7                  t<               no|&t"        k(  r|$rd|(j7                  t,               nN|&t$        k(  rE|"r|(j7                  t(               |#r|(j7                  t*               |$r|(j7                  t,               t>        D )cg c]	  })|)|(v s|) }*})|&t@        v rtB        ntD        }+i d	|d%|rt        ||      ndd&|d'|d(|d|d)t/        |      d*|d+|d,|d-t        |j                  d            d|"d!| j                  d!      d| j                  d      d|!d|d.|j                  d      },|%|&|*|	|
|+|,d/d0S c c})w )1u?   evidence snapshot(dict) → 분류 결과(dict). 순수 함수.result_jsonschedule_historynormal_callbackescalate
collectorsgitapplied_countr   callback_registration_statusself_collectionfallback_collectormanual_anu_reverifynormal_collection_ackr-   authoritative	owner_keyfiredargv_presentNreason git_gate_blockedforeign_dirtygit_gate_checked_scopeper_task_scope_cleanscope_guard_blockedscope_guard_basisenvelope_utf8_bytescontract_violationself_key_fail_closedbot_app_token_presentFreflection_merged   main_workspace	main_head normal_callback_owner_key_is_anunormal_callback_firednormal_fired_with_self_keyanu_key_normal_firedforeign_dirty_countauthoritative_cron_collectionfallback_collector_presentmanual_anu_reverify_presentself_collection_authoritativeescalate_reasonzauto-classifier)delivery_outcomenormal_callback_miss_causeroot_cause_tagsevidence_completenessmissing_evidence_sourcesclassificationlifecycle_state_evidenceclassified_by)#r$   r/   boolr   r!   r   r   r   r   r   r   r(   r   r   r	   r   r   r   r
   appendr   r   r   lenr   r   r+   addr   r   r   r   r   r   r   )-r%   anu_keysrjshncesccolr6   r7   completenessr.   
reg_statusr9   r:   manual_reverifyr<   fallback_presentfallback_authoritativemanual_presentrV   nc_ownernc_firednc_argv_presentrS   rT   
esc_reasonrC   rD   rE   rF   rG   rH   rI   rJ   rK   bot_token_absentreflection_not_mergedr[   
miss_causereasonsraw_tagstr]   r`   ra   s-                                                r'   classify_callback_lifecycler}   1   s   	m	$	*B	(	)	/RB	!	"	(bB
,,z
"
(bC
,,|
$
*C
,,u

#CLL16QM28<L'67Jgg/06BO!56<"gg34:O )@!AB.229=>!"4"8"8"IJ/--i89N$9$j>N>iSi!vvk"HBFF7O$H266.12O 	5_ 	5)= 	5 844  $L(88(L"(bJCGG$678^=OS]=]GGO,2M WW%=>(> ?@sww'<=> 34&&!67bff%9:; 4'T,?BT,T   -C DE %<=F%\\*=>%G w8	38I3	3	#8mq>P5	 =.	h	.*2HB,8 w'
	5	5
	A
	0
	#5
	2	2NN;<NN/0 NN01w<!4J9::9J4J	5
	&C*
		!0
'
 uHAALL./!%55:NLL:;#4#CLL9:	7	7 LL./	2	2LL9:LL-. LL./
 #7HQ!x-qHOH!+/C!CXN &
 *U]-=h-Qcg  	   	%&@	 
 	 4  	,  	s=1  	()F  	%&6  	&~  	(o.A.A/.R)S  	 4  	X\\*=>  	 .E!F  	0   	! " 	3778,# * -&0*!-$+($<*	 	1 Is   	WWN)$__doc__utils.callback_lifecycle_statesr   r   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r(   r/   r}    r)   r'   <module>r      sM           &= 4D ]r)   