
    4jO^                    l   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mZ ddlZddl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m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*  ee+      jY                         jZ                  d	   Z.e.d
z  Z/g dZ0ddddddddddd
Z1d9dZ2 ejf                  d      d:d       Z4 ejf                         d;d       Z5d Z6d Z7d Z8d Z9d Z:d  Z;d! Z<d" Z=d# Z>d$ Z?d% Z@d& ZAd' ZBd( ZCd) ZDd* ZEd+ ZFd, ZGd- ZHd. ZId/ ZJd0 ZKd1 ZLd2 ZMd3 ZNd4 ZOd5 ZPd6 ZQd7 ZRd8 ZSy)<u8  Regression — task-2553+17 ANU_PARALLEL_BATCH_COORDINATOR_V0 (Track2+3).

Authority: task-2553+17.md §6 (chair verbatim 11) + §12 (9-R.1/.3/.5/.6/.7).
All 11 chair checks + transition-table + fixture-immutability + frozen-anchor
invariant must PASS. Pure stdlib + pytest; no GitHub / network / live mutation.
    )annotationsN)Path)CallbackEventPacketCandidateclassify_callbackfinal_authority_packet_selectorpending_blocks_chair_decision)GoalRequestPolicyProfilegenerate_loop_plan)	BatchPlanParallelBatchCoordinatorTrackedPathWriteRefused	TrackPlan_is_git_tracked)
ALL_STATES
DISPATCHEDHOLD_FOR_CHAIRLANDING_PENDINGMERGEDMERGE_READYPLANNEDRETRY_WITHIN_SCOPETERMINAL_STATESTrackLoopStateis_legal_transition   z5memory/fixtures/task-2553.parallel-batch.fixture.json)
z$anu_v3/pre_authorized_action_gate.pyz)anu_v3/pre_authorized_contract_deriver.pyz0anu_v3/pre_authorized_evidence_bundle_builder.pyz)anu_v3/pre_authorized_executor_binding.pyz*anu_v3/pre_authorized_activation_runner.pyz+anu_v3/isolated_worktree_evidence_source.py$anu_v3/goal_activation_controller.pyzanu_v3/branch_ref_allocator.pyz+utils/anu_delegation_completion_callback.pyz,utils/completion_callback_fallback_cancel.py@f34e2445452cd84f22a378ece0cd922d0ff952fa545cc02268923a5f9fc46532@2e1af1124cb330b4398fbdcccb0a765126443b859d46acf45a96382082259a0a@9344f9aa7bd37da9979e39222c782f8544f638b1d99f33bbdda0bff1514ea06a@6a66f7b76d7ef6cb16f099b5b1fea29a4dfb7e0312e13898e4db41bf246bb834@0e5a4a35db1aff434d65998d33deb302a589a1f80ad497cb3998cbc716993663@2f45801a036bb8a65d69b777b01dc1b15d451c4b4ee0ad01512bb0c8d8720e6a@619baac9d366087f4f1b3532127378eae51dc03366095737f6ede5a4d0792e7b@2569c42b42d2aafbcfb4e040d4851c3097a7c828312059c3518f4d5130dcecf5@83b3e307c8207c76a3e311c408aab4951373bd317896e51687d3007907b0c3d4@2ef661c49128ec6f1bd96bfbe6c1a227317e87ae31bf6deac025c66fd0e96d37c                d    t        j                  | j                               j                         S )N)hashlibsha256
read_bytes	hexdigest)ps    L/home/jay/workspace/tests/regression/test_parallel_batch_coordinator_2553.py_shar0   O   s     >>!,,.)3355    module)scopec                 T    t        j                  t        j                  d            S )Nutf-8encoding)jsonloadsFIXTURE	read_text r1   r/   fxr=   S   s    ::g'''9::r1   c                2   | d   D cg c]  }t        |d   |d   |d   |d   |d   |j                  dg       |j                  dg       |j                  d	g       |j                  d
g       |j                  dg       |j                  dd      |j                  dd             }}| j                  dg       D cg c]3  }t        |d   |d   |j                  dg       t        di |d         5 }}t	        t        | d   ||            S c c}w c c}w )Ntrackstrack_idtask_iddispatch_cron_idnormal_collector_cron_idfallback_callback_cron_idexpected_filesforbidden_write_targets
depends_onown_artifactscited_artifactsinitial_stater   retry_ceilingr   )r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   goal_requestsgoal_idgoal_statementboundarypolicy_profile)rM   rN   rO   rP   batch_label)rQ   r?   rL   r<   )r   getr
   r   r   r   )r=   tr?   ggrss        r/   coordrV   X   sD   " H  	z]iL12%&'A%B&'(C&D55!126$%EE*CR$Huu\2.%%4EE"3R8%%;%%3	
F 0 ,  	iL-.UU:r*(?1-=+>?		
C  $b/cR 5"s   BD;8Dc           	        | j                   } |       }g }||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                  }|j                  }d}d	} |||      }|sd
dt        j                         v st        j
                  |       rt        j                  |       ndt        j                  |      t        j                  |      t        j                  |      t        j                  |      t        j                  |      dz  }	t        t        j                  |	            dx}x}x}x}}y)u'   ① A↔B contamination 0, independent.==)zL%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.contamination
}()
} == %(py7)srV   )py0py2py4py7zassert %(py9)spy9NtrackA-closeouttrackB-landingzassert %(py10)s
{%(py10)s = %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.depmatrix
}.is_independent
}(%(py6)s, %(py8)s)
}rZ   r[   r\   py6py8py10)contamination
@pytest_ar_call_reprcompare@py_builtinslocals_should_repr_global_name	_safereprAssertionError_format_explanation	depmatrixis_independent)
rV   @py_assert1@py_assert3@py_assert6@py_assert5@py_format8@py_format10@py_assert7@py_assert9@py_format11s
             r/   /test_check01_A_B_contamination_zero_independentrz   }   s(   & &B& B&&&& B&&&&&&5&&&5&&&&&& &&&B&&&&&&&??N?))N*;N=MN)*;=MNNNNNNNN5NNN5NNN?NNN)NNN*;NNN=MNNNNNNNNNNNr1   c           	        | j                   }|j                  }d}d} |||      }| }|sddt        j                         v st	        j
                  |       rt	        j                  |       ndt	        j                  |      t	        j                  |      t	        j                  |      t	        j                  |      t	        j                  |      dz  }t        t	        j                  |            dx}x}x}x}x}}| j                   j                         }ddgg}	||	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}}	y)u&   ② A completion does not make B wait.r_   r`   zvassert not %(py10)s
{%(py10)s = %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.depmatrix
}.blocks
}(%(py6)s, %(py8)s)
}rV   rb   NrX   )z%(py0)s == %(py3)sgroups)rZ   py3assert %(py5)spy5)ro   blocksri   rj   rg   rk   rl   rm   rn   parallelizable_groupsrh   )rV   rq   rr   rt   rw   rx   @py_assert11@py_format12r|   @py_assert2@py_format4@py_format6s               r/   *test_check02_A_completion_does_not_block_Br      s!   J%%J&7J9IJ%&79IJJJJJJJJJJJuJJJuJJJJJJ%JJJ&7JJJ9IJJJJJJJJJJJ__224F(*:;<<6<<<<<6<<<<<<<6<<<6<<<<<<<<<<<r1   c                n   t        d |d   D              }t        t        d |d   D              d         }t        |d         t        |d         z  }|j                  } ||      }|sd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t        j                  |      d	z  }t        t        j                  |            d
x}}|d   }t        |      }||z  }	|	sd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                  |      t        j                  |      dz  }
t        t        j                  |
            d
x}x}}	| j                  }|j                  } |       }g }||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                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d
x}x}x}x}}y
)u,   ③ B does not write A's closeout artifacts.c              3  2   K   | ]  }|d    dk(  s|  yw)r@   r`   Nr<   .0rS   s     r/   	<genexpr>z<test_check03_B_does_not_modify_A_closeout.<locals>.<genexpr>   s     J1*9I(IQJ   r?   c              3  2   K   | ]  }|d    dk(  s|  ywr@   r_   Nr<   r   s     r/   r   z<test_check03_B_does_not_modify_A_closeout.<locals>.<genexpr>   s     K1*9J(JQKr   rH   rE   zLassert %(py5)s
{%(py5)s = %(py2)s
{%(py2)s = %(py0)s.isdisjoint
}(%(py3)s)
}b_writesa_artifacts)rZ   r[   r}   r   NrF   z8assert (%(py0)s & %(py5)s
{%(py5)s = %(py1)s(%(py3)s)
})setrZ   py1r}   r   rX   )zu%(py6)s
{%(py6)s = %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.depmatrix
}.forbidden_write_overlap
}()
} == %(py9)srV   rZ   r[   r\   rc   r^   assert %(py11)spy11)nextr   
isdisjointri   rj   rg   rk   rl   rm   rn   ro   forbidden_write_overlaprh   )rV   r=   br   r   rq   @py_assert4r   r   rs   @py_format7rr   rt   @py_assert8rw   rv   r   s                    r/   )test_check03_B_does_not_modify_A_closeoutr      s   J8JJAK8KK	
K
 1%&'#a.@*AAH+{++++++++8+++8+++++++++{+++{++++++++++89:9::;:::::::::;:::;::::::::::::9::::::::::??:?22:24::4::::4::::::5:::5:::?:::2:::4:::::::::::r1   c                   t        ddddd      }t        |      }d}||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                  |      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dddd      \  }}g }	| }
|
}|
r	d}||k(  }|}|s$dddt	        j
                         v st        j                  |      rt        j                  |      ndiz  }|	j                  |       |
rt        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  }|	j                  |       t        j                  |	d      i z  }dd|iz  }t        t        j                  |            dx}x}	x}
x}}y)u'   ④ 4-tuple mismatch -> TRACK_MISMATCH.r`   task-2553+15normalFr@   rA   kindidentity_oknormal_already_completedTRACK_MISMATCHrX   z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py6)sr   badrZ   r   r}   rc   assert %(py8)srd   NWRONGzNC-B15zFB-B15)rA   rB   rC   rD   znot %(py2)sr[   ok)z%(py5)s == %(py8)scls)r   rd   z%(py10)sre   r   assert %(py13)spy13)r   r   rg   rh   ri   rj   rk   rl   rm   rn   registryvalidate_callbackappend_format_boolop)rV   r   r   rt   r   r   @py_format9r   r   rq   rr   @py_assert0rw   rs   r   ry   r   @py_format14s                     r/   *test_check04_tuple_mismatch_TRACK_MISMATCHr      s   
!!&C S!5%55!%55555!%5555555555555555S555S555!555%55555555nn..% '(0)1		
GB .r6-6-6--c--------r---r----6---c-------c---c------------------r1   c                 Z   t        ddddd      } t        |       }d}||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                  |       rt        j                  |       nd
t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            dx}x}}t        dd      }|j                  }d} ||      }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                  |      t        j                  |	      dz  }dd|iz  }t        t        j                  |            dx}x}x}x}
}	y)uI   ⑤ normal completed first, later fallback -> DUPLICATE_CALLBACK_IGNORED.r_   task-2553+13fallbackTr   DUPLICATE_CALLBACK_IGNOREDrX   r   r   evr   r   rd   NNORMAL_COLLECTOR_COMPLETEDstate)zW%(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.classify_callback
}(%(py4)s)
} == %(py9)sstr   r   r   )r   r   rg   rh   ri   rj   rk   rl   rm   rn   r   )r   r   rt   r   r   r   r   rq   rr   r   rw   rv   r   s                r/   3test_check05_normal_then_fallback_DUPLICATE_IGNOREDr      sa   	"!%
B R @$@@ $@@@@@ $@@@@@@@@@@@@@@@@R@@@R@@@ @@@$@@@@@@@@	)1M	NBK
K
+K/KK+/KKKKK+/KKKKKKK2KKK2KKKKKK
KKK+KKK/KKKKKKKKKr1   c           
        t        d | d   D              }t        |d   |d   ddd|d   |d	   
      }t        |      }d}||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                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            dx}x}}t        |      }d}||u }|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                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            dx}x}}y)u7   ⑥ pending fallback does not block the chair decision.c              3  0   K   | ]  }|d    dk(  r|  yw)namepending_fallback_non_blockingNr<   )r   es     r/   r   z=test_check06_pending_fallback_non_blocking.<locals>.<genexpr>   s%      V977 	
s   callback_eventsr@   rA   r   TFauthority_settled_via_normalbatch_final_depends_on_track)r@   rA   r   r   r   r   r   CALLBACK_PENDINGrX   r   r   r   r   r   rd   Nisz0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} is %(py6)sr	   )r   r   r   rg   rh   ri   rj   rk   rl   rm   rn   r	   )r=   ev_defr   r   rt   r   r   r   s           r/   *test_check06_pending_fallback_non_blockingr      s    '( F 

#y!!&%+,J%K%+,J%K
B R 6$66 $66666 $6666666666666666R666R666 666$66666666(,55,5555,555555(555(555555555555,5555555555r1   c                   |d   D cg c]6  }t        |d   |d   |d   |d   |d   |d   |j                  dd	      
      8 }}t        |      }|d   j                         D ]  \  }}||   }|j                  }||k(  }	|	st        j                  d|	fd||f      t        j                  |      t        j                  |      dt        j                         v st        j                  |      rt        j                  |      nddz  }
dd|
iz  }t        t        j                  |            dx}x}}	 |d   }|j                  }d}||k(  }	|	st        j                  d|	fd||f      t        j                  |      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            dx}x}x}	}yc c}w )u?   ⑦ final authority packet correctly selected per task (9-R.6).packet_candidatesrA   r@   sourceschematspathstatus )rA   r@   r   r   r   r   r   expected_authorityrX   )z,%(py3)s
{%(py3)s = %(py1)s.path
} == %(py5)sexpected_path)r   r}   r   assert %(py7)sr]   Nztask-2553+9r   )z.%(py3)s
{%(py3)s = %(py1)s.source
} == %(py6)s)r   r}   rc   r   rd   )r   rR   r   itemsr   rg   rh   rl   ri   rj   rk   rm   rn   r   )rV   r=   ccandschosenrA   r   r   r   r   r   ru   rt   r   r   s                  r/   ,test_check07_final_authority_packet_per_taskr      s|    '(  	iLz]X;X;w6552&	
E  -U3F"$%9":"@"@"B 5g4##4#}4444#}444444#444444}444}44444445 - 3 ''383'83333'8333 333'33383333333!s   ;Gc                   | j                  |dz  |dz        }|j                  }d}||v }|st        j                  d|fd||f      t        j                  |      dt        j                         v st        j                  |      rt        j                  |      nddz  }dd	|iz  }t        t        j                  |            d
x}}d}||v }|st        j                  d|fd||f      t        j                  |      dt        j                         v st        j                  |      rt        j                  |      nddz  }dd	|iz  }t        t        j                  |            d
x}}g }d}||v}	|	}|	rd}
|j                  } |       }|
|v}|}|st        j                  d|	fd||f      t        j                  |      dt        j                         v st        j                  |      rt        j                  |      nddz  }dd|iz  }|j                  |       |	rt        j                  dfd
f      t        j                  |
      dt        j                         v st        j                  |      rt        j                  |      ndt        j                        t        j                  |      dz  }dd|iz  }|j                  |       t        j                  |d      i z  }dd|iz  }t        t        j                  |            d
x}x}x}x}	x}
x}x}}t        j                  |dz  j                               }|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"}	 ||	      }|std#t        j                  |      t        j                  |      t        j                  |	      t        j                  |      d$z  }t        t        j                  |            d
x}x}x}	}y
)%u:   ⑧ batch summary compresses to chair final decision only.
state.json
summary.mdz
Chair-onlyinz%(py1)s in %(py3)smdr   r}   r~   r   Nbatch_next_actionc119085addb0f8b7zkey not in)z%(py3)s not in %(py5)s)r}   r   z%(py7)sr]   )zN%(py10)s not in %(py16)s
{%(py16)s = %(py14)s
{%(py14)s = %(py12)s.lower
}()
})re   py12py14py16z%(py18)spy18r   zassert %(py21)spy21r   zanu_v3.parallel_batch_state.v1rX   z%(py1)s == %(py4)sr   r\   assert %(py6)src   batch_idzbatch-zLassert %(py7)s
{%(py7)s = %(py3)s
{%(py3)s = %(py1)s.startswith
}(%(py5)s)
})r   r}   r   r]   )run
summary_mdrg   rh   rl   ri   rj   rk   rm   rn   lowerr   r   r8   r9   r;   
startswith)rV   tmp_pathresr   r   r   r   r   rq   r   rx   @py_assert13@py_assert15r   ru   @py_format17@py_format19@py_format20@py_format22r   rr   @py_format5r   rs   s                           r/   (test_check08_summary_chair_decision_onlyr     s   
))<L!8C 
B<2<2<22$"$$$$"$$$$$$$$$"$$$"$$$$$$$DDR'DFD"((D(*DF*,DDDDDRDDDDDDDDDRDDDRDDDDDDDF*DDDFDDDDDD"DDD"DDD(DDD*DDDDDDDDDDDDDDJJ</::<=E?>>>?>>>>>?>>>>?>>>>>>>>>>>1''11'11111111'1111111111111r1   c           	     	   | j                         }d}||v }|st        j                  d|fd||f      t        j                  |      dt	        j
                         v st        j                  |      rt        j                  |      nddz  }dd|iz  }t        t        j                  |            dx}}|d   }|j                  }g 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      }|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t               | j                  }d}
 ||
      }|j                  }|t        k(  }|s"t        j                  d
|fd|t        f      dt	        j
                         v st        j                  |       rt        j                  |       ndt        j                  |      t        j                  |
      t        j                  |      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}x}
x}x}}| j                  }d}
 ||
      }|j                  }ddg}||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                  |      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            dx}x}
x}x}x}}y)u?   ⑨ each track's goal-achievement loop progress is represented.r`   r   r   plansr   r~   r   N)lint	refine_9rre_lintimplauditadjudicationcallbackr   rX   )z.%(py2)s
{%(py2)s = %(py0)s.stages
} == %(py5)slprZ   r[   r   r   r]   r   )z-%(py2)s
{%(py2)s = %(py0)s.state
} == %(py5)sr   zm%(py8)s
{%(py8)s = %(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.track_state
}(%(py4)s)
}.state
} == %(py10)srV   r   rb   assert %(py12)sr   )zo%(py8)s
{%(py8)s = %(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.track_state
}(%(py4)s)
}.history
} == %(py11)srZ   r[   r\   rc   rd   r   r   r   )fold_goal_loopsrg   rh   rl   ri   rj   rk   rm   rn   stagestrack_stater   advancer   history)rV   r=   r  r   r   r   r   r  rq   r   rr   ru   r   rt   rw   rx   ry   @py_format13@py_assert10r   r   s                        r/   )test_check09_goal_progress_loop_per_trackr     s   !!#E$u$$$$u$$$$$$$$$u$$$u$$$$$$$		 B99   9    9                        
 
		+	,B88(((8(((((8(((((((2(((2(((8(((((((((((	MM"K0C-C-.C.44C4CCCC4CCCCCC5CCC5CCCCCC-CCC.CCC4CCCCCCCCCCCCCCCCC - -. .66 =; 6 ;   6 ;                  .    /    7   ;       r1   c            
        t        dddddg t              t        ddd	d
dg t              g} t        t	        d|             }|j
                  }|j                  }d}d} |||      }|sddt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      t        j                  |      t        j                  |      t        j                  |      dz  }t        t        j                  |            dx}x}x}x}}|j                  dt               |j                  dt                |j"                  }d} ||      }|j$                  }|t         k(  }|s"t        j&                  d|fd|t         f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      t        j                  |      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}x}x}x}}|j)                         }	|	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}}y)u8   ⑩ one track HOLD does not block the independent track.r_   r   zDSP-AzNC-AzFB-A)r@   rA   rB   rC   rD   rG   rJ   r`   r   zDSP-BzNC-BzFB-Bz
hold-indepra   r   rb   NrX   r  r   r  r   r   CHAIR_DECISION_REQUIREDr   r   r   rc   )r   r   r   r   r   ro   rp   ri   rj   rg   rk   rl   rm   rn   r  r   r   r  r   rh   r   )r?   r   rq   rr   rt   rw   rx   ry   r  bnar   r   r  r   s                 r/   6test_check10_one_track_HOLD_does_not_block_independentr  
  s8    	&$v&,(		
 	%~$v&,)		
F 	!<!@AA;;J;%%J&7J9IJ%&79IJJJJJJJJ1JJJ1JJJ;JJJ%JJJ&7JJJ9IJJJJJJJJJJJII,II'==:):=)*:*00:0F::::0F::::::1:::1:::=:::):::*:::0::::::F:::F::::::::



C"#@'@@#'@@@@@#'@@@@#@@@'@@@@@@@@r1   c                .   | d   }|d   D cg c]3  }t        |d   |d   d|d    d|d    d|d    |d   |d   d	
      5 }}t        t        d|            }|j                  } |       }|sddt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }t        t        j                  |            dx}}|j                         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}	}yc c}w )u=   ⑪ cross-track contamination -> batch-level HOLD escalation.contamination_scenarior?   r@   zDSP-zNC-zFB-rH   rI   RUNNING)r@   rA   rB   rC   rD   rH   rI   rJ   contam)rQ   r?   zHassert %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.contamination
}()
}r   rZ   r[   r\   Nr   BATCH_HOLD_CONTAMINATIONrX   r   r   r   rc   )r   r   r   rf   ri   rj   rg   rk   rl   rm   rn   r   rh   )r=   scrS   r?   r   rq   rr   r  r   r   r   s              r/   1test_check11_cross_track_contamination_batch_holdr%  %  s   	$	%B H  	z]jM#AjM?3'*1Z=/%:(+AjM?&;O,/0#		
F  	!hv6	A ???11?	12%2%	& 2%   	3   &      #s   8Fc                    t        dt              } t        ddddt        t        t
        fD ]  }| j                  |        | 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}}y )NrS   r   r   r   CODEX_AUDIT_PENDINGANU_ADJUDICATION_PENDINGrX   )z-%(py2)s
{%(py2)s = %(py0)s.state
} == %(py4)sr   r   r"  r   rc   )r   r   r   r   r   r   
transitionr   rg   rh   ri   rj   rk   rl   rm   rn   )r   nxtrq   rr   r  r   s         r/   (test_9r3_legal_path_full_merge_lifecycler+  C  s    	7	+BI;9f 
 	c 888v8v228vvr1   c                    t        dt              } t        j                  t              5  | j                  t               d d d        g }| j                  }|}|r| j                  d   d   }|t        k(  }|}|sDddt        j                         v st        j                  |       rt        j                  |       ndt        j                  |      dz  }|j                  |       |rt        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  }|j                  |       t        j                  |d      i z  }	dd|	iz  }
t!        t        j"                  |
            d x}x}x}x}}y # 1 sw Y   xY w)NrS   r      z%%(py4)s
{%(py4)s = %(py2)s.rejected
}r   )r[   r\   rX   )z%(py7)s == %(py9)sr   )r]   r^   z%(py11)sr   r   zassert %(py14)sr   )r   r   pytestraises
ValueErrorr)  r   rejectedri   rj   rg   rk   rl   r   rh   r   rm   rn   )r   rq   rr   r   rs   r   r  rv   r   r  @py_format15s              r/   $test_9r3_illegal_transition_rejectedr4  N  s   	7	+B	z	" 
f72;;7;7;2;;r?1-7-777777727772777;7777;777-777-77777777777777777777777 s   G

Gc                    t         D ]G  } t        d|       }|j                  }|t        v }|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}}t        j                  t              5  |j                  t                d d d        J y # 1 sw Y   VxY w)
NrS   r   r   )z-%(py2)s
{%(py2)s = %(py0)s.state
} in %(py4)sr   r   r"  r   rc   )r   r   r   r   rg   rh   ri   rj   rk   rl   rm   rn   r/  r0  r1  r)  r   )termr   rq   rr   r  r   s         r/   "test_9r3_terminal_has_no_successorr7  U  s     &Ct,xx%x:%%%%x:%%%%%%r%%%r%%%x%%%%%%:%%%:%%%%%%%]]:& 	&MM*%	& 	&&	& 	&s   1EE	c                    t        dd      } | j                  dt        t        g      }|t        k(  }|st	        j
                  d|fd|t        f      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d	z  }d
d|iz  }t        t	        j                  |            d }t        dd      }|j                  }dt        g} ||      }|t        k(  }|st	        j
                  d|fd|t        f      dt        j                         v st	        j                  |      rt	        j                  |      ndt	        j                  |      t	        j                  |      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}x}x}}y )NrS   r(  r   AUTO_MICRO_FIXrX   )z%(py0)s == %(py2)spickr   rZ   r[   assert %(py4)sr\   zR%(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.resolve_next
}(%(py4)s)
} == %(py8)sst2r   rZ   r[   r\   rc   rd   assert %(py10)sre   )r   resolve_nextr   r   rg   rh   ri   rj   rk   rl   rm   rn   )r   r:  rq   @py_format3r  r>  rr   rt   rw   r   ry   s              r/   -test_9r3_precedence_hold_gt_retry_gt_microfixrC  ]  s   	#=	>B??	-~>D >!!!!4>!!!!!!4!!!4!!!!!!>!!!>!!!!!!!
$>
?C -/AB BC C   C                 C    D      	   	      r1   c                    t        ddd      } | j                  t               | j                  t               | j                  d       | j                  d       | j                  d       | j                  d       | j	                  t              \  }}| }|sedd	d
t        j                         v st        j                  |      rt        j                  |      nd
iz  }t        t        j                  |            d }| j                  }t        t        g} ||      }|t        k(  }|st        j                  d|fd|t        f      dt        j                         v st        j                  |       rt        j                  |       ndt        j                  |      t        j                  |      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}x}x}}y )NrS   r(  r.  )r   rK   r   r   r'  zassert not %(py0)srZ   r   rX   r=  r   r   r?  r@  re   )r   r)  r   r   can_transitionri   rj   rg   rk   rl   rm   rn   rA  r   rh   )
r   r   _rq   @py_format2rr   rt   rw   r   ry   s
             r/   "test_9r3_retry_ceiling_forces_holdrH  i  s   	#=Q	OBMM$%MM*MM)MM./MM'(MM,-01EB6M6MMMMMrMMMrMMMMMM?? .? ??@ @   @                 @    A      	   	      r1   c            	        t        t              } d}| |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                  |      dz  }dd|iz  }t        t        j                  |            d x} x}}t        d	d
g      j                  j                         D ]  \  }}|D ]  }|t        v }|st        j                  d|fd|t        f      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dz  }	dd|	iz  }
t        t        j                  |
            d }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                  |      rt        j                  |      ndt        j                  |      dz  }
t        t        j                  |
            d }  y )N   rX   r   lenr   r   r   rd   zanu_v3.track_loop_stateTRANSITIONS)fromlistr   )z%(py0)s in %(py2)sdr;  r<  r\   z5assert %(py4)s
{%(py4)s = %(py0)s(%(py1)s, %(py2)s)
}r   src)rZ   r   r[   r\   )rK  r   rg   rh   ri   rj   rk   rl   rm   rn   
__import__rL  r   r   )r   rt   r   r   r   rO  dstsrN  rq   rB  r  rr   s               r/   /test_9r3_table_is_13_states_and_self_consistentrR  x  s   z? b ?b    ?b      3   3      z   z   ?   b       !]Ok%%'/	T  	/A
?"""1
""""""1"""1""""""
"""
"""""""&sA........&...&......s...s......A...A..........	//r1   c                   | d   d   D ]  }t         |d   z  }|j                  } |       }|st        j                  d|d          dz   dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }t        t        j                  |            d x}}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                  |      dz  }	t        j                  d|d          dz   d|	iz  }
t        t        j                  |
            d x}x}} y )N
provenancesourcesr   zsource marker missing: C
>assert %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.exists
}()
}r.   r"  r+   rX   r   r0   r   z)source marker mutated (9-R.5 violation): 
>assert %(py8)srd   )REPOexistsrg   _format_assertmsgri   rj   rk   rl   rm   rn   r0   rh   )r=   sr.   rq   rr   r  r   rt   r   r   r   s              r/   !test_9r5_source_markers_read_onlyr\    s   i( 
1V9xx@xz@z@@4QvYK@@@@@@@q@@@q@@@x@@@z@@@@@@Aw 	
!H+ 	
w+% 	
 	
 	
w+ 	
 	
	6	
 	
   	
 	
 		  	
 	
	6	
 	
   	
 	
 		  	
 	
 		  	
 	
 		 & 	
 	
  8&	{C	
 	
 	
 	
 	
 	

r1   c                    t         D ]  } t        | z  }|j                  } |       }|st        j                  d|        dz   dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }t        t        j                  |            d x}}t        |      }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                  |      t        j                  |      dz  }t        j                  d	|        d
z   d|iz  }	t        t        j                  |	            d x}x}} y )Nzfrozen anchor missing: rV  r.   r"  rX   r   r0   r   z)frozen anchor changed (9-R.1 violation): rW  rd   )FROZEN_ANCHORSrX  rY  rg   rZ  ri   rj   rk   rl   rm   rn   r0   FROZEN_ANCHOR_SHArh   )
relr.   rq   rr   r  r   rt   r   r   r   s
             r/   test_9r1_frozen_anchor_byte0ra    s    
3Jxx:xz:z::4SE:::::::q:::q:::x:::z::::::Aw 	
+C0 	
w00 	
 	
 	
w0 	
 	
	6	
 	
   	
 	
 		  	
 	
	6	
 	
   	
 	
 		  	
 	
 		  	
 	
 		 1 	
 	
  8u=	
 	
 	
 	
 	
 	

r1   c            	        d } d}d} | ||      }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
                  |      t        j
                  |      dz  }d	d
|iz  }t        t        j                  |            d x}x}x}x}}d}d}d} | |||      }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
                  |      t        j
                  |      t        j
                  |      dz  }dd|iz  }
t        t        j                  |
            d x}x}x}x}x}	}d}d} | ||      }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
                  |      t        j
                  |      dz  }d	d
|iz  }t        t        j                  |            d x}x}x}x}}y )Nc                     t        j                  ddt        t              g| ddd      j                  j                         S )Ngitz-CT)capture_outputtextcheck)
subprocessr   strrX  stdoutstrip)argss    r/   rT   z1test_9r1_git_head_branch_ref_unchanged.<locals>.g  s:    ~~D#d)+d+d$
 &	r1   z	rev-parseHEAD(20456b5f83fc039f2fd6f50f4b94095c29b41bfbrX   )z9%(py6)s
{%(py6)s = %(py0)s(%(py2)s, %(py4)s)
} == %(py9)srT   r   r   r   z--abbrev-refz%task/task-2553p1-f1-clean-replacement)zC%(py8)s
{%(py8)s = %(py0)s(%(py2)s, %(py4)s, %(py6)s)
} == %(py11)sr  r   r   zsymbolic-refz0refs/heads/task/task-2553p1-f1-clean-replacement)rg   rh   ri   rj   rk   rl   rm   rn   )rT   rq   rr   rt   r   rw   rv   r   r  rx   r   s              r/   &test_9r1_git_head_branch_ref_unchangedro    s    O&O1[&!O%OO!%OOOOO!%OOOOOOO1OOO1OOO[OOO&OOO!OOO%OOOOOOOO . & 1[.&1 /1/  1/                 )    +1    2    	0        V 1^V$ :$:  $:                 $    %    	;      r1   c                    t        ddt        d            } t        | j                  d      dg      }|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g}||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}}y )Ng1goalr.   rP   r`   r   FOLLOW_UP_SPLITrX   z.%(py2)s
{%(py2)s = %(py0)s.status
} == %(py5)splanr  r   r]   )z7%(py2)s
{%(py2)s = %(py0)s.split_followups
} == %(py5)s)r
   r   r   
bind_trackr   rg   rh   ri   rj   rk   rl   rm   rn   split_followupsgrrv  rq   r   rr   r   ru   s          r/   -test_9r7_splittable_conflict_followup_no_dropr{    s   	T6-2D	EBbmm,<=@S?TUD;;+++;+++++;+++++++4+++4+++;+++++++++++8$7#88#88888#888888848884888888#88888888r1   c                    t        ddt        d            } t        | j                  d      dg      }|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}}y )Nrq  rr  r.   rs  r`   z#<irreducible>final_authority_packetr   rX   ru  rv  r  r   r]   )r
   r   r   rw  r   rg   rh   ri   rj   rk   rl   rm   rn   ry  s          r/   #test_9r7_irreducible_conflict_holdsr}    s    	T6-2D	EB
&'*O)PD ;;***;*****;*******4***4***;***********r1   c                 ~   t        ddt        d            } t        | j                  d            }|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}}g }|j                  d   }d}||k(  }|}	|r|j                  d   }
d}|
|k(  }|}	|	st        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd|iz  }|j                  |       |r_t        j                  dfd
f      t        j                  |
      t        j                  |      dz  }dd|iz  }|j                  |       t        j                  |d      i z  }dd|iz  }t        t        j                  |            d x}	x}x}x}x}x}
x}}y )Nrq  rr  r.   rs  r`   r   rX   ru  rv  r  r   r]   r   r  r-  r   )z%(py3)s == %(py6)s)r}   rc   z%(py8)srd   )z%(py11)s == %(py14)s)r   r   z%(py16)sr   zassert %(py19)spy19)r
   r   r   rw  r   rg   rh   ri   rj   rk   rl   rm   rn   r  r   r   )rz  rv  rq   r   rr   r   ru   r   rt   r   r  r   @py_assert12r   r   r3  r   @py_format18r   s                      r/   test_9r7_no_conflict_plannedr    sJ   	T6-2D	EBbmm,<=>D;;#)#;)####;)######4###4###;###)#######A4;;q>AVA>V#ABA6A6(AAAA>VAAA>AAAVAAAAAAA6AAAAAA6AAAAAAAAAAAAAAr1   c           
         | j                   j                  |      }t        ||j                  |dd|j                  |j
                  |j                        }|j                  |       t        di |S )zCallbackEvent whose observed 4-tuple matches the registry record
    unless explicitly overridden (HIGH-1: observed, not reconstructed).TF)r@   rA   r   r   r   observed_dispatch_cron_id!observed_normal_collector_cron_id"observed_fallback_callback_cron_idr<   )	r   rR   dictrA   rB   rC   rD   updater   )rV   r@   r   kwrecbases         r/   _evr    sk     ..

X
&C!&"%"6"6*-*F*F+.+H+H	D 	KKO 4  r1   c                   t        | dd      t        | dddd      g}| j                  |      }|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}||k(  }|slt        j                  d	|fd
||f      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            dx}x}}| j                  |      }|d   D 	ci c]  }	|	d   |	
 }
}	|
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   }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}||k(  }|slt        j                  d	|fd
||f      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            dx}x}}yc c}	w )a  Codex LOW: classify_callbacks -> batch_next_action end-to-end.

    A clean normal on the terminal track + a non-blocking pending fallback
    on the in-loop track must (a) be keyed by bare track_id (HIGH-2),
    (b) not block the chair (HIGH-3) -> CONTINUE_LOOP.r_   r   r`   r   TFr   r   NORMAL_COLLECTOR_ACCEPTEDrX   r   r   r   rc   Nr   r?   r@   callback_classblocks_chairr   )z%(py1)s is %(py4)sr   CONTINUE_LOOP)r  classify_callbacksrg   rh   rl   rm   rn   r   )rV   eventsclassesr   rr   r   r  r   r  rS   by_tracks              r/   8test_p19_e2e_classify_to_batch_next_action_callback_pathr    s+    	E$h/#Z)-).	
F &&v.G$%D)DD%)DDDDD%)DDDD%DDD)DDDDDDDD#$:(::$(:::::$(::::$:::(::::::::

!
!'
*C*-h-8Q*q 8H8$%&67M;MM7;MMMMM7;MMMM7MMM;MMMMMMMM$%n5>>5>>>>5>>>5>>>>>>>>>>"#66#6666#666#6666666666 9s   Kc                |   t        | dd      }t        | ddd      }| j                  |g      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}}| j                  |g      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}}y)zHIGH-1: a wrong *observed* cron-ID is caught even when the event
    self-declares identity_ok=True (no registry self-reconstruction).r`   r   z	DSP-WRONG)r  r  rX   r   r   r   rc   Nr   )r  r  rg   rh   rl   rm   rn   )rV   goodr   r   rr   r   r  r   s           r/   /test_p19_high1_observed_tuple_mismatch_detectedr    sE    u&1D
"-C ##TF+,<= #=#  =#   >    	$      ##SE*+;< <  <   =    	      r1   c                   | j                  t        | dd      g      }t        |      }dh}||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                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd	|iz  }t        t        j                  |            d
x}x}}d}||v}|st        j                  d|fd||f      t        j                  |      dt        j                         v st        j                  |      rt        j                  |      nddz  }dd|iz  }	t        t        j                  |	            d
x}}| j                  |      }
t        d |
d   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}}y
)zHIGH-2: classify_callbacks keys are bare track_ids (the exact key
    batch_next_action looks up), never the old ``track_id:kind`` form.r_   r   rX   r   r   r  r   r   rd   NztrackA-closeout:normalr   )z%(py1)s not in %(py3)sr   r~   r   c              3  2   K   | ]  }|d    dk(  s|  ywr   r<   r   s     r/   r   z?test_p19_high2_classify_key_is_bare_track_id.<locals>.<genexpr>  s     L1::K)KQLr   r?   r  r  r   r   r   rc   )r  r  r   rg   rh   ri   rj   rk   rl   rm   rn   r   r   )rV   r  r   rt   r   r   r   r   r   r   r  arr   r  s                 r/   ,test_p19_high2_classify_key_is_bare_track_idr  	  s    &&	U%x	01G w<.-..<.....<.......3...3......w...w...<...........#2#72222#7222#222222722272222222

!
!'
*CLHLLA="=="====="======="========r1   c                   t        | dddd      g}| j                  |      }| j                  |      d   }d}||k7  }|slt        j                  d|fd	||f      t        j
                  |      t        j
                  |      d
z  }dd|iz  }t        t        j                  |            dx}x}}t        | dddd      g}| j                  |      }	| j                  |	      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}}y)z_HIGH-3: pending_blocks_chair_decision drives blocking, not the bare
    CALLBACK_PENDING class.r`   r   TFr  r   AWAIT_PENDING_CALLBACK)!=)z%(py1)s != %(py4)sr   r   rc   NrX   r   )r  r  r   rg   rh   rl   rm   rn   )
rV   non_blockingr  r   rr   r   r  r   blockingclasses2s
             r/   /test_p19_high3_blocking_pending_blocks_else_notr    s{    	#Z)-).	
L &&|4G""7+,?@  @   @    A    	!      	#Z).)-	
H ''1H""8,-@A  A   A    B    	!      r1   c                   t        | dddd      g}| j                  |      }| j                  |      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}}| j                         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}}| j                  |dz  |dz        }	|	j                  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}}t        j                  |dz  j                               }
|
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}}y)u   NEW-HIGH (cycle2): build_state()/run() must persist a
    batch_next_action that reflects the last classify_callbacks() pass —
    not a blank default that silently drops a blocking pending callback.r`   r   FTr  r   r  rX   r   r   r   rc   Nzs.jsonzs.md)r  r  r   rg   rh   rl   rm   rn   build_stater   r   r8   r9   r;   )rV   r   r  r  r   rr   r   r  r   r   	persisteds              r/   6test_p19_persisted_state_reflects_classified_callbacksr  1  s   
 	#Z).)-	
H &&x0G""7+,?@  @   @    A    	!      23O7OO37OOOOO37OOOO3OOO7OOOOOOOO
))Hx'F):
;C99()E-EE)-EEEEE)-EEEE)EEE-EEEEEEEE

Hx/::<=I()E-EE)-EEEEE)-EEEE)EEE-EEEEEEEEr1   c                j   |dz  }|dz  }t        |      }d}||u }|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
                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }d	d
|iz  }t        t        j                  |            dx}x}}| j                  |       | j                  |       g }	|j                  }
 |
       }|}|r|j                  } |       }|}|s@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}}| j                  |       | j                  |       |dz  }|j                  dd       |j                  d      }t!        j"                  t$              5  | j                  |       ddd       t!        j"                  t$              5  | j                  |       ddd       |j                  }	d}
 |	|
      }||k(  }|st        j                  d|fd||f      dt        j                         v st        j
                  |      rt        j                  |      ndt        j                  |	      t        j                  |
      t        j                  |      dt        j                         v st        j
                  |      rt        j                  |      nddz  }dd|iz  }t        t        j                  |            dx}	x}
x}}|dz  }|j                  d d       | j                  |       t&        d!z  }t        |      }d"}||u }|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
                  |      rt        j                  |      nd#t        j                  |      t        j                  |      dz  }d	d
|iz  }t        t        j                  |            dx}x}}t)        |      }t!        j"                  t$              5  | j                  |       ddd       t!        j"                  t$              5  | j                  |       ddd       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  }d(d)|iz  }t        t        j                  |            dx}}y# 1 sw Y   SxY w# 1 sw Y   -xY w# 1 sw Y   xY w# 1 sw Y   lxY w)*zHIGH-4 / 9-R.2 full envelope: tracked -> refuse; NEW untracked ->
    allow; sanctioned coordinator deliverable idempotent re-write -> allow;
    pre-existing untracked NON-deliverable -> refuse (no clobber).r   r   Fr   r   r   spr   r   rd   Nz:%(py6)s
{%(py6)s = %(py4)s
{%(py4)s = %(py2)s.exists
}()
})r[   r\   rc   z>%(py12)s
{%(py12)s = %(py10)s
{%(py10)s = %(py8)s.exists
}()
}mp)rd   re   r   r   zassert %(py15)spy15zunrelated.jsonz#{"not":"a coordinator deliverable"}r5   r6   rX   )zX%(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.read_text
}(encoding=%(py4)s)
} == %(py8)sforeignforeign_beforer?  r@  re   z#task-2553.parallel-batch-state.jsonz{}r   Ttracked)z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py5)sr0   beforer   r   r]   )r   rg   rh   ri   rj   rk   rl   rm   rn   write_statewrite_summaryrY  r   r   
write_textr;   r/  r0  r   rX  r0   )rV   r   r  r  r   rt   r   r   r   rq   rr   r   rx   r   r  r   @py_format16r  r  rw   ry   namedr  r  r   ru   s                             r/   1test_p19_high4_tracked_rejected_untracked_allowedr  H  s   
 
L	 B	L	 B2'%'%''''%''''''?'''?''''''2'''2''''''%'''''''	b	&299&9;&;&;299&9;&;&&&&&&2&&&2&&&9&&&;&&&&;&&&&&2&&&2&&&9&&&;&&&&&&&&&&&&& 
b	))G<wO&&&8N	.	/ #'"#	.	/ %G$%@g@g.@..@@@@..@@@@@@7@@@7@@@@@@g@@@.@@@@@@.@@@.@@@@@@@<<E	TG,	e ;;G7#+t+#t++++#t++++++?+++?++++++7+++7+++#+++t+++++++']F	.	/ #'"#	.	/ %G$%="=F""""=F""""""4"""4""""""""""""=""""""F"""F"""""""'# #% %# #% %s0   ^^9^,^(^^^%(^2)r.   r   returnri  )r  r  )r  r   )T__doc__
__future__r   builtinsri   _pytest.assertion.rewrite	assertionrewriterg   r*   r8   rh  pathlibr   r/  anu_v3.batch_join_policyr   r   r   r   r	   anu_v3.goal_loop_plannerr
   r   r   !anu_v3.parallel_batch_coordinatorr   r   r   r   r   anu_v3.track_loop_stater   r   r   r   r   r   r   r   r   r   r   __file__resolveparentsrX  r:   r^  r_  r0   fixturer=   rV   rz   r   r   r   r   r   r   r  r  r  r%  r+  r4  r7  rC  rH  rR  r\  ra  ro  r{  r}  r  r  r  r  r  r  r  r  r<   r1   r/   <module>r     s   #         
     H~''*
H
H -o1s8z1s2t3u,n&h3u4v 6 h;  ;  HO=;..L6&4*2 &A6<8&	/

(9+B!$74 
>6F.&#r1   