
    4jo5                        d Z ddlZddlmc mZ ddlZddlZddl	Z	ddl
Z
ddlmZ  ee      j                         j                  d   Z ee      e	j$                  vr"e	j$                  j'                  d ee             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mZmZ edz  d	z  Z e d
z  Z!e dz  Z"e dz  Z#edz  dz  dz  Z$edz  dz  Z%edz  dz  Z&edz  dz  dz  edz  dz  dz  edz  dz  dz  edz  dz  dz  gZ'dedefdZ(defdZ)dede*fdZ+defdZ, G d de
jZ                        Z.e/d k(  r e
j`                          yy)!u  Regression — task-2553+31 ANU_RUNTIME_RECONCILE_CHECKPOINT.

Covers §6 verbatim (20 items) + §5 fixture self-checks + NO-CRON dogfood +
frozen-guard / no-mutation / schema-conformance extras.

NO-CRON (§15): zero cron register/remove; +31 self-completion via
result.json + .done existence (dogfooding). Checkpoint is read-only:
zero write / cron / merge / dispatch (regression 12).
    N)Path   )RuntimeReconcileCheckpointRuntimeTaskObservationclassify_observation)resolveTERMINALNONTERMINALALL_CLASSIFICATIONS)build_proposalemit_runtime_batch_stateFrozenWriteRefusedmemoryfixturesz+task-2553.runtime-reconcile.no-cron-30.jsonz=task-2553.runtime-reconcile.result-ready-no-normal-26-27.jsonz/task-2553.runtime-reconcile.taxonomy-cases.jsoneventsz#task-2553.parallel-batch-state.jsonutilsz%anu_delegation_completion_callback.pyanu_v3zparallel_batch_coordinator.pyztask-2553+26.result.jsonztask-2553+27.result.jsonztask-2553+30.result.jsonztask-2553+30.donepreturnc                 v    t        j                  t        |       j                               j	                         S N)hashlibsha256r   
read_bytes	hexdigest)r   s    T/home/jay/workspace/tests/regression/test_runtime_reconcile_checkpoint_2553plus31.py_shar   8   s'    >>$q',,./99;;    c                       t        t              S r   )r   _ROOT r   r   _ckr"   <   s    %e,,r   fixturec                 :    t               j                  |       d   S )Ntrack_records)r"   run)r#   s    r   _recordsr'   @   s    599Wo..r   c                  h    t        dddddddddddg       }|j                  |        t        di |S )NtTFNONE )task_iddispatch_okresult_presentdone_presentnormal_collector_registerednormal_collector_executedby_design_no_normal_collectorfallback_stateterminal_outcomestaletrack_mismatchtrack_mismatch_reasonsr!   )dictupdater   )kwbases     r   _obsr<   D   sD    e"'u%RD 	KKO!)D))r   c                       e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zy)$RuntimeReconcileCheckpointRegressionc                     t        t              }| j                  |d   d   d       | j                  |d   d          y )Ntask-2553+30classificationNO_CRON_TASK_DONEterminal)r'   
NO_CRON_30assertEqual
assertTrueselfrecss     r   test_01_no_cron_task_donez>RuntimeReconcileCheckpointRegression.test_01_no_cron_task_doneS   sB    
# !124G	I^,Z89r   c                     t        t              }dD ]1  }| j                  ||   d   d       | j                  ||   d          3 y )N)task-2553+26task-2553+27rA   RESULT_READY_NO_NORMAL_CALLBACKrecovery_eligible)r'   RR_26_27rE   rF   )rH   rI   tids      r   'test_02_result_ready_no_normal_callbackzLRuntimeReconcileCheckpointRegression.test_02_result_ready_no_normal_callbackZ   sQ    !3 	<CS	*+13 OODI&9:;		<r   c                 Z    t        t        ddd            }| j                  |ddh       y )NFr*   )r.   r5   r3   RUNNINGWAIT_FOR_RESULT)r   r<   assertInrH   cs     r   test_03_running_or_waitz<RuntimeReconcileCheckpointRegression.test_03_running_or_waitc   s.     U%5;"= >a)%678r   c                 T    t        t        dd            }| j                  |d       y )NFT)r.   r5   STALE_OR_BOT_STUCK_CANDIDATE)r   r<   rE   rW   s     r   test_04_stale_candidatez<RuntimeReconcileCheckpointRegression.test_04_stale_candidatei   s$     U$!GH:;r   c                 R    t        t              }| j                  |d   d   d       y )Nztask-2553+SYN-normal-completedrA   NORMAL_COLLECTOR_COMPLETEDr'   TAXONOMYrE   rG   s     r   "test_05_normal_collector_completedzGRuntimeReconcileCheckpointRegression.test_05_normal_collector_completedn   s,    !123CD(	*r   c                     t        t              }|d   }| j                  |d   d       | j                  |d   d          | j                  |d   d          y )NrL   r3   PENDINGnext_actionblockingis_execution)r'   rP   rE   assertFalse)rH   rI   recs      r   2test_06_fallback_pending_result_ready_non_blockingzWRuntimeReconcileCheckpointRegression.test_06_fallback_pending_result_ready_non_blockingu   s\    !>"-.	:]+J78]+N;<r   c                 R    t        t              }| j                  |d   d   d       y )Nz task-2553+SYN-fallback-duplicaterA   DUPLICATE_CALLBACK_IGNOREDr_   rG   s     r   "test_07_duplicate_callback_ignoredzGRuntimeReconcileCheckpointRegression.test_07_duplicate_callback_ignored}   s,    !345EF(	*r   c                 R    t        t              }| j                  |d   d   d       y )Nztask-2553+SYN-mismatch-taskidrA   TRACK_MISMATCHr_   rG   s     r   test_08_taskid_mismatchz<RuntimeReconcileCheckpointRegression.test_08_taskid_mismatch   s,    !012BC	r   c                 R    t        t              }| j                  |d   d   d       y )Nz#task-2553+SYN-mismatch-dispatchcronrA   rn   r_   rG   s     r   test_09_dispatch_cron_mismatchzCRuntimeReconcileCheckpointRegression.test_09_dispatch_cron_mismatch   s,    !678HI	r   c                 R    t        t              }| j                  |d   d   d       y )Nz task-2553+SYN-mismatch-collectorrA   rn   r_   rG   s     r   %test_10_collector_other_task_mismatchzJRuntimeReconcileCheckpointRegression.test_10_collector_other_task_mismatch   s,    !345EF	r   c                 R    t        t              }| j                  |d   d   d       y )Nztask-2553+SYN-mismatch-fallbackrA   rn   r_   rG   s     r   $test_11_fallback_other_task_mismatchzIRuntimeReconcileCheckpointRegression.test_11_fallback_other_task_mismatch   s,    !234DE	r   c                    t         dz  dz  }|j                  d      D ci c])  }|j                         s|j                  t	        |      + }}t               j                  t        d      }|j                  d      D ci c])  }|j                         s|j                  t	        |      + }}| j                  ||d       |d   }| j                  |d   |d	   |d
   |d   fd       y c c}w c c}w )Nr   r   *Femitz$run(emit=False) wrote/changed a filezero_side_effect_proofwritecronmergedispatch)r   r   r   r   )	r    globis_filenamer   r"   r&   rD   rE   )rH   r   r   beforeresafterzs          r   test_12_zero_side_effectsz>RuntimeReconcileCheckpointRegression.test_12_zero_side_effects   s    !H,+1;;s+;Kaqyy{!&&$q'/KKeii
i/*0++c*:JQaiikaJJ(NO()wZ6AgJ*>	N LJs   C-C-C2C2c                     t               j                  t        d      }|d   }| j                  |d   d       | j	                  |d          | j                  |d   d       | j                  |d	   d
       y )N   )prior_versionbatch_state_proposalartifact_kindADDITIVE_VERSIONED_PROPOSALsupersedes_durable_v1version   schemaz2anu_v3.runtime_reconcile_checkpoint.batch_state.v1)r"   r&   rP   rE   rg   )rH   r   bss      r   &test_13_batch_state_additive_versionedzKRuntimeReconcileCheckpointRegression.test_13_batch_state_additive_versioned   sx    eiii2'(O,.KL345I*xL@	Br   c                    t         t        t        gt        z   D ci c]  }|j	                         r|t        |        }}t               j                  t        d       t               j                  t        d       t               j                  t        d       t         t        t        gt        z   D ci c]  }|j	                         r|t        |        }}| j                  ||       y c c}w c c}w )NFrx   )	FROZEN_V1FROZEN_CALLBACKFROZEN_COORDSOURCE_ARTIFACTSr   r   r"   r&   rD   rP   r`   rE   )rH   r   preposts       r   test_14_frozen_not_mutatedz?RuntimeReconcileCheckpointRegression.test_14_frozen_not_mutated   s    ?L9<LLa))+ $q'z   			*5	)		(	'		(	'O\:=MM q99; 47
     	d# s   #C/7#C4c                     t         t        t        fD ]d  }t        |      j	                         D ]F  }| j                  d|d          | j                  |d   d          | j                  |d   d   d       H f y )Nrecommendationrd   rf   execution_authorityCHAIR_OR_ANU)rD   rP   r`   r'   valuesrV   rg   rE   )rH   fxrh   s      r   'test_15_next_action_recommendation_onlyzLRuntimeReconcileCheckpointRegression.test_15_next_action_recommendation_only   s    x2 	$B|**, $.M0BC  ]!3N!CD  &'<="$$	$r   c                     t               j                  t              d   d   }| j                  |d          | j	                  |d          | j                  d|d          y )Nr   closeout_proposaleligible	confirmedCHAIRauthority_required)r"   r&   rD   rF   rg   rV   )rH   cps     r   'test_16_closeout_proposed_not_confirmedzLRuntimeReconcileCheckpointRegression.test_16_closeout_proposed_not_confirmed   sT    UYYz"#9:;NO:'K)gr"678r   c                 t    t               j                  t              d   }| j                  d|d   d          y )Nr   NOT disabledcallback_paths_statusprimary_callback_pathr"   r&   rD   rV   rH   sts     r   test_17_primary_path_preservedzCRuntimeReconcileCheckpointRegression.test_17_primary_path_preserved   s7    UYYz"#9:&'(?@	Br   c                 t    t               j                  t              d   }| j                  d|d   d          y )Nr   r   r   fallback_safety_pathr   r   s     r   test_18_fallback_path_preservedzDRuntimeReconcileCheckpointRegression.test_18_fallback_path_preserved   s7    UYYz"#9:&'(>?	Ar   c                 t    t               j                  t              d   }| j                  d|d   d          y )Nr   
compatibler   cancel_on_successr   r   s     r   $test_19_cancel_on_success_compatiblezIRuntimeReconcileCheckpointRegression.test_19_cancel_on_success_compatible   s6    UYYz"#9:&'(;<	>r   c                    i t        t              t        t              }| j                  |d   d   d       | j                  |d   d   d       | j                  |d   d   d       t	               j
                  }| j                  |j                  d      d       | j                  |j                  d      d	       | j                  |j                  d      d       y )
Nr@   r4   DONErL   MERGEDrM   PASS)r   r   )COMPLETE_MERGEDr   )r'   rD   rP   rE   r"   detectorrV   terminal_outcome_hint)rH   rI   dets      r   "test_20_reproduces_actual_statuseszGRuntimeReconcileCheckpointRegression.test_20_reproduces_actual_statuses   s    =(:&=(8*<=n-.@A6Jn-.@A8Ln-.@A6Jenn%%n57G	I%%n5)	+ 	%%n57G	Ir   c                     t         t        t        fD ]6  }t               j	                  |      d   }| j                  |d   | d       8 y )Nconsolidated_summaryfixture_self_check_passz self-check)rD   rP   r`   r"   r&   rF   )rH   r   css      r   &test_extra_fixture_self_check_all_passzKRuntimeReconcileCheckpointRegression.test_extra_fixture_self_check_all_pass   sJ    x2 	OB256BOOB89bT;MN	Or   c                 x   | j                  t        t              d       | j                  t        t              d       | j                  t        t              d       t        D ]/  }t        |      }| j                  |j                         d          1 | j                  dt        d      j                         y )Nr   r   	   rf   HOLDBOGUS)
rE   lenr	   r
   r   r   rg   to_jsonrV   r   )rH   rX   nas      r   test_extra_taxonomy_enumerationzDRuntimeReconcileCheckpointRegression.test_extra_taxonomy_enumeration   s    X*[)1-0115$ 	;ABRZZ\.9:	; 	fgg.==>r   c                 6   t               j                  t        d      }|d   }| j                  t	        |d         j                                | j                  t	        |d         j                  d       | j                  t	        |d         t               y )NTrx   batch_state_proposal_emittedpathz7task-2553.runtime-reconcile-checkpoint.batch-state.json)
r"   r&   rD   rF   r   r   rE   r   assertNotEqualr   )rH   r   emitteds      r   test_extra_emit_guard_allowlistzDRuntimeReconcileCheckpointRegression.test_extra_emit_guard_allowlist
  s~    eii
i.45WV_-5578!&&E	G 	D19=r   c                 4   t        i ddddd      }| j                  t              5  t        |t        t
               d d d        | j                  t              5  t        |t
        dz  dz  dz  t
               d d d        y # 1 sw Y   FxY w# 1 sw Y   y xY w)Nx)source_fixturesource_fixture_sha256frozen_v1_reffrozen_v1_sha256generated_ts_kstr   r   z"task-2553.generic-batch-state.json)r   assertRaisesr   r   r   r    )rH   docs     r   "test_extra_emit_refuses_durable_v1zGRuntimeReconcileCheckpointRegression.test_extra_emit_refuses_durable_v1  s    s#cK 12 	<$S)U;	<12 	$ 8+67		 		< 	<	 	s   BBBBc                     t        t              }t               j                  t        d       | j                  t        t              |       y )NTrx   )r   r   r"   r&   rD   rE   )rH   r   s     r   $test_extra_emit_durable_v1_untouchedzIRuntimeReconcileCheckpointRegression.test_extra_emit_durable_v1_untouched   s1    9o		*4	(i#.r   c                     t               j                  t              }| j                  |d          | j	                  |d          | j                  |d          y )Nauto_wireablechair_question_requiredno_cron_completion_detected)r"   checkpoint_entrypointrD   rF   rg   )rH   eps     r   5test_extra_entrypoint_auto_wireable_no_chair_questionzZRuntimeReconcileCheckpointRegression.test_extra_entrypoint_auto_wireable_no_chair_question&  sK    U((4?+,56789:r   c                     t               j                         }| j                  |d   d       | j                  |d          | j	                  |d   t
               y )Nr,   ztask-2553+31r   rA   )r"   detect_self_completionrE   rg   rV   r   )rH   scs     r   %test_extra_dogfooding_self_completionzJRuntimeReconcileCheckpointRegression.test_extra_dogfooding_self_completion,  sO    U))+I7567b)*,?@r   c                    t               j                  t              }dD ]  }| j                  ||        | j	                  |d   d       t        j                  t        dz  dz  j                               }| j	                  |d   d       y )N)r   r,   moder%   r   r   rz   r   	READ_ONLYschemasz$runtime_reconcile_result.schema.jsontitlez-anu_v3.runtime_reconcile_checkpoint.result.v1)	r"   r&   rP   rV   rE   jsonloadsr    	read_text)rH   r   kr   s       r   test_extra_result_schema_keyszBRuntimeReconcileCheckpointRegression.test_extra_result_schema_keys4  s    eii!, 	"A MM!S!	" 	Vk2Y!GGY[ 	H	Jr   N)__name__
__module____qualname__rJ   rR   rY   r\   ra   ri   rl   ro   rq   rs   ru   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r!   r   r   r>   r>   P   s    :<9<
*=*NB
$$9BA>I O?>/;AJr   r>   __main__)1__doc__builtins@py_builtins_pytest.assertion.rewrite	assertionrewrite
@pytest_arr   r   sysunittestpathlibr   __file__r   parentsr    strr   insert#anu_v3.runtime_reconcile_checkpointr   r   r   #anu_v3.runtime_next_action_resolverr	   r
   r   "anu_v3.runtime_batch_state_updaterr   r   r   FIX_DIRrD   rP   r`   r   r   r   r   r   r"   r8   r'   r<   TestCaser>   r   mainr!   r   r   <module>r     s      
  X ((+u:SXXHHOOAs5z" 
   (
Z
'DD
TTFFHx'*OO	'/$KKx"AA 
Hx"<<	Hx"<<	Hx"<<	Hx"55	 <D <S <-' -/d /t /	*( 	*pJ8+<+< pJf zHMMO r   