
    jq                       d dl mZ d dlZd dlZd dlZd dlZd dlZd dlZd dl	m
Z
 d dlmZ d dlmZ d dlZ ee      j"                  Zej&                  j)                  dedz        Zerej,                  sJ ej&                  j/                  e      Zeej2                  ej4                  <   ej,                  j7                  e       ddd	d:d
Zddd	 	 	 	 	 	 	 	 	 d;dZd<dZdd	 	 	 	 	 	 	 	 	 	 	 d=dZ	 	 	 	 	 	 d>dZ d?dZ!d?dZ"d?dZ#d@dZ$	 	 d@dZ%d@dZ&d@dZ'd@dZ(d@dZ)d@dZ*ejV                  jY                  dg d      dAd        Z-	 	 d@d!Z.d@d"Z/d@d#Z0d@d$Z1d@d%Z2d@d&Z3	 	 d@d'Z4dBd(Z5dCd)Z6	 	 d@d*Z7ejV                  jY                  d+d,      	 	 	 	 	 	 dDd-       Z8d@d.Z9dEd/Z:d@d0Z;d@d1Z<d@d2Z=d@d3Z>dFd4Z?d@d5Z@d@d6ZAejV                  jY                  d7d8      	 	 	 	 dGd9       ZBy)H    )annotationsN)date)Path)Anycontinuous_v6_currentzcontinuous_lifecycle.pyTlegacyinclude_schedulec                    i ddddddddd	| rt         j                  nd
d| rdnt         j                  dddd dd ddg dddg dddg dddg dddg dddg dddg dddddddd}|rd |d!<   |S )"Ndate_of_birthz
1996-08-01equation_sex_basismale	height_cm180	weight_kg80activity_categorymoderateactivity_rationale   주 3회 근력운동	goal_typemaintaintarget_weight_kgtarget_date	allergiesnone)statusitemsintolerancesreligious_ethical_exclusionsdisliked_foodsdietary_preferences
conditionsmedicationspregnancy_breastfeedingFu   기본 조리 가능   보통   )eating_disorder_riskcooking_accessbudget_band
meal_count   없음schedule_constraints)mLEGACY_ACTIVITYDETAILED_RATIONALE)r	   r
   values      d.omo/evidence/task26/task26-continuous-lifecycle-observer-v6.4-4a6c7ee5/test_continuous_lifecycle.pyanswersr3      s1     f  	U  	T	 
 	&Q..j  	5QEYEY  	Z  	D  	t  	4  	6B7  	'6B(G  	Vb9  	&2>  	"5   	&26! " 	"5# $ !&0+ E. (0$%L    resolvedF)statecanonical_summaryc          
         g }|dk(  s|rddddg}d|t         j                  |       |rt         j                  |       ndg g g g |d||d	}t         j                  |      |d
<   |S )N
clarifyingr   	ambiguityu+   평소 활동량은 어느 정도인가요?)fieldkindquestion_ko!nutrition_input_reconciliation_v1u"   수정 전 활동 요약입니다.)
summary_kofacts_koambiguities_kocontradictions_kosafety_observations_koclarifications)schema_versionr6   answers_digestadvisoryrD   current_indexdigest)r.   canonical_digestauthoritative_summary)r1   rH   r6   r7   rD   records         r2   reconciliationrM   6   s     /1N -#L
 >,,U3 % ''.9 !#&(,
 )&#!F& ))&1F8Mr4   c                    t               } dt        j                  |       dd}t        j                  ddd|d}dd	t        j                  t        j                  t        j
                  d
dt        j                  t        j                  dgdt        j
                  t        j
                  ddd dd| t        | d      dgd|i |dt        j                  dgdgg d g g i i g dS )Ncustomer_attestation@3230cb1a3c13f8e164c2171148c6e3183cbce0d36289cc647c10634b840d8060r6   rF   body_digest   	COMMITTED   
session_id
generationr6   
message_idpayloadAWAITING_ACTIVATION   )r6   rX   rW   sid_hashowner_idF0)enabledrouteuser_idchat_idtopic_id      rH      r6   cursorr3   rM   consumed_updatescustomerrolera   )	bootstraprm   ownerbaselineworkflowpublicationoutboxowner_callbackswizardgenerationscardsdrafts
deliveries
activation)r3   r.   rJ   SESSIONSIDOWNERCUSTOMERrM   )r1   rZ   rt   s      r2   baser   ]   s    IE',,U3YG iiK +))
 !&QZZ0MNWWcJ+,U!D!$
 #RkR:S@QRS5 r4   rm   ro   c                   t         j                  |d||d}|| d<   |dk(  rt         j                  dgnt         j                  dg}| d   j	                  i |||d       y )NrT   rV   rt   rm   r_   ru   rn   )r.   r}   r   r   append)snapshotrX   rY   rZ   ro   rt   ra   s          r2   publishr      si     ii  K *H]!%!3QZZ!''3EXKKdUKLr4   c                   | d   d   }t         j                  | d   ||      }|J dt         j                  |      t         j                  j	                  |j                               j                         dS )Nrs   r3   rO   rQ   )r.   candidate_attestation_textrJ   hashlibsha256encode	hexdigest)r   rH   r1   texts       r2   candidate_payloadr      st     Z +E''(<e]SD',,U3yy''6@@B r4   c           	     6    t        | ddt        | d             y )N      rg   rh   )r   r   r   s    r2   startupr      s    Hb#0KLr4   c           	     V    ddt        dd      ddgd| d<   t        | d	d
dddd       y )N
collecting   Fr   ri   ,  )r6   rk   r3   rl   rs         @cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc	broadcast)r6   rR   force_reply_mode)r3   r   r   s    r2   normalized_rewindr      sF    %%@ #J	HZ 
!# +	
		r4   c           	         t        d      }dd|t        |dd      g dd	| d
<   t        | ddt        | d             y )NFr	   rO   rf   r   T)rH   r7   )ri   r   -  rj   rs         rh   )r3   rM   r   r   )r   r1   s     r2   canonical_attestationr      sM    5!E'(d
 ,HZ Hb#0KLr4   c                     t         j                  dk(  sJ t         j                  dk(  sJ t         j                  dk(  sJ y )N@4a6c7ee54cf9526a30de8bb576c1d71b411938beba33a04914738f6e1b6ed1cb@3374be765c7e53fc431b0c6e48cacbacb09618f77f13ef87016cb0ad2575d060@9d22e89a0b1a14d4eb7f1c2005fc01860bec5f3b4eda6e01bb1390542a90b875)r.   	SUCCESSORCOREWHEEL r4   r2   test_final_candidate_bindingsr      sE    	M	N	N 66WWWW77XXXXr4   c                     dt         j                  z  } t        j                  t        j
                  d| gdddd      }t        j                  |j                        dt         j                  gddk(  sJ y )	Na  
import json
from types import SimpleNamespace
from gateway.platforms.telegram_nutrition_onboarding_copy import parse_legacy_activity_answer
from gateway.platforms.telegram_nutrition_onboarding_runtime_publication_transport import publication_generation
legacy = %r
parsed = parse_legacy_activity_answer(legacy)
status = SimpleNamespace(answer_count=22, state=SimpleNamespace(value='customer_attestation'))
current = SimpleNamespace(generation=24, payload={'body_digest': 'old'})
generation = publication_generation(status, current=current, payload={'body_digest': 'candidate-changed'})
print(json.dumps({'parsed': parsed, 'generation': generation}, ensure_ascii=False))
z-cz(/home/cube/projects/richard/hermes-agentT)cwdcheckcapture_outputr   r   r   )parsedrX   )
r.   r/   
subprocessrunsys
executablejsonloadsstdoutr0   )coderesults     r2   Jtest_product_runtime_recovers_exact_legacy_activity_and_startup_generationr      s}    	 

	 	 ^^	t$6F ::fmm$q334)   r4   c                     t         j                  t                     } | j                  dk(  sJ | j                  J | j
                  dk(  sJ y )NWAIT_DEPLOYzdeploy-final-candidate)r.   classifyr   r   rY   action)prompts    r2   1test_current_inactive_authority_emits_wait_deployr      sI    ZZF==M)))$$$==4444r4   c                 0   t               } t        |        t        j                  |       }|j                  dk(  sJ |j
                  dk(  sJ |j                  t        j                  dd      k(  sJ |j                  t        j                  dd      k7  sJ y )NREADY_CUSTOMER_REVISION209reviser   rS   )r   r   r.   r   r   rY   r   callbackr   r   s     r2   =test_startup_changed_body_generation_25_emits_latest_revisionr      s    vHHZZ!F==5555%%%==AJJx4444==AJJx4444r4   c                     t               } t        |        t        j                  | d   d         | d<   t        j                  |       }|j                  dk(  sJ |j                  J y )Nru   r   rt   "WAIT_MATCHING_CUSTOMER_PUBLICATION)r   r   copydeepcopyr.   r   r   rY   r   s     r2   9test_stale_generation_24_message_207_callback_is_rejectedr     sa    vHH"mmHX,>q,ABH]ZZ!F==@@@@$$$r4   c                     t               } t        j                  |       J t        |        t        j                  |       }|J |d   dk(  sJ |d   dk(  sJ |d   t        j	                  dd      k(  sJ y )Nr   r   rY   r   r   r   r   )r   r.   candidate_revision_handoffr   r   )r   handoffs     r2   <test_revision_handoff_helper_never_authorizes_predeploy_cardr     s    vH''1999H**84G8 9999< E)))8

8R 8888r4   c                 n   t               } t        |        t        |        | d   }|d   d   dk(  sJ |d   d   t        j                  k(  sJ d|d   vsJ d|vsJ t        j                  |       }|j                  dk(  sJ |j                  d	k(  sJ |j                  d
k(  sJ |j                  dk(  sJ y )Nrs   r3   r   r   r   r-   rM   READY_CUSTOMER_RESUBMIT211z"submit_answer:schedule_constraintsr,   )
r   r   r   r.   r0   r   r   rY   r   command)r   rs   r   s      r2   Htest_authorized_rewind_normalizes_activity_and_preserves_exact_rationaler     s    vHHh
#HI23zAAAI348L8LLLL!))<<<<8+++ZZ!F==5555%%%==@@@@>>X%%%r4   fault)activity	rationalerM   rX   c                   t               }t        |       t        |       | dk(  rt        j                  |d   d   d<   nL| dk(  rd|d   d   d<   n;| dk(  r	i |d   d<   n-d	|d
   d<   t        j                  |      j                  dk(  sJ y t        j                  t        j                        5  t        j                  |       d d d        y # 1 sw Y   y xY w)Nr   rs   r3   r   r   r   r   rM   r   rt   rX   r   )
r   r   r   r.   r/   r   r   pytestraisesLifecycleError)r   r   s     r2   3test_rewind_rejects_noncanonical_or_stale_authorityr   ,  s     vHHh
?@?P?PY'(;<	+	@WY'(<=	"	"13-.02-zz(#**.RRRR	q''	(	

8 
)	(	(s   /CCc                    t               } t        |        t        |        t        |        | d   d   }t        j                  |      sJ t        j                  | d   |d      }|J dD ]  }||vrJ  ddt        j                  dfD ]  }||v rJ  t        j                  |       }|j                  dk(  sJ |j                  d	k(  sJ |j                  t        j                  d
d      k(  sJ y )Nrs   r3   r   )	{r   r   r   r   u	   미입력u   위험 신호u
   수정 전u    실제 총활동량은 불명확u   유지r&   u%   별도 검토 입력이 없습니다.READY_CUSTOMER_ATTEST213attestr   )r   r   r   r   r.   baseline_valid_answersr   r0   r   r   rY   r   r   )r   r1   r   	forbiddenrequiredr   s         r2   Jtest_new_reconciliation_summary_is_canonical_baseline_valid_and_attestabler   A  s    vHHh(#Z +E##E***''(<eQGD
	 $$$
 		/	 4 ZZ!F==3333%%%==AJJx4444r4   c                    t               } t        |        t        |        t        |        d| d   d   d<   d| d   d   d   d<   t        j                  |       j                  dk(  sJ t               } t        |        t        |        t        |        d| d	   d
   d<   t        j                  | d	   d
         }|| d	   d   d<   | d	   d   j                         D ci c]  \  }}|dk7  s|| }}}t        j                  |      | d	   d   d<   || d   d   d<   || d   d   d   d<   t        j                  |       j                  dk(  sJ y c c}}w )N@0000000000000000000000000000000000000000000000000000000000000000rt   rZ   rR   ru   WAIT_CANDIDATE_PUBLICATIONr   rs   r3   r   rM   rF   rI   r   )	r   r   r   r   r.   r   r   rJ   r   )r   rI   kvunsigneds        r2   Ftest_final_summary_rejects_bad_body_and_accepts_domain_valid_rationaler   e  s   vHHh(#8@H]I&}57?HXr9%m4::h&&*FFFFvHHh(#<SHZ#$89 4Y ?@F?EHZ)*+;<!*-.>?EEGGA1PX=1G   897I7I(7SHZ)*84;AH]I&'78:@HXr9%&67::h&&*AAAAs   E,Ec                 ,   t               } t        d      }dd|t        |dd      d| d	<   dt        t        j                  |            d
dd}t        | dd|       t        j                  |       }|j                  dk(  sJ |j                  dk(  sJ y )NFr   rO   rf   r   r9   )rH   r6   )r6   rk   r3   rM   rs   @ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddr   )r6   rF   rR   clarification_fieldr   r   READY_CUSTOMER_CLARIFICATIONz&submit_clarification:activity_category)
r   r3   rM   strr.   rJ   r   r   r   r   )r   r1   rZ   r   s       r2   /test_matching_clarification_remains_field_boundr   }  s    vH5!E'(a|T	HZ (a00782	"G Hb#w'ZZ!F==::::==DDDDr4   c                    t               } | d   j                  t        j                  | d   d                t	        j
                  t        j                  d      5  t        j                  |        d d d        y # 1 sw Y   y xY w)Nru   r   zduplicate publicationmatch)	r   r   r   r   r   r   r.   r   r   r   s    r2   2test_duplicate_publication_generation_fails_closedr     s]    vHXdmmHX,>q,ABC	q''/F	G	

8 
H	G	Gs   A<<Bc                 ~   t               } t        | d       | d   d   dk(  sJ t        j                  |       }|j                  dk(  sJ |j
                  dk(  sJ |j                  J t        | dd	d
ddd       t        j                  |       }|j                  dk(  sJ |j                  t        j                  k(  sJ |j                  t        j                  dfk(  sJ |j                  dk(  sJ |j                  t        j                  dd      k(  sJ |j                  t        j                  dd      k7  sJ y )NFcommit_publicationrs   baseline_digest@4d3d925fe27f953252ed0f108ed7c65900d05546cbbe46ee42cb7004a069be45WAIT_MATCHING_ROLE_PUBLICATIONsystem      owner_review@4903900d9c98c474006e512d14207439262ce405b696f4c6765dd65e1927cbd9r6   rR   rq   r   READY_OWNER_REVIEWr_   215owner_okr      )r   owner_review_stater.   r   r   ro   rY   r   actorr   ra   r   r   r   s     r2   Etest_customer_attestation_to_owner_publication_gap_waits_without_exitr    s>   vHxE:./M	N	N ZZ!F==<<<<;;("""$$$
#]	
 	 ZZ!F==0000<<177"""<<AGGS>)))%%%==AJJz26666==AJJx4444r4   c                    t               } t        | d       t        j                  |       j                  dk(  sJ t        j                  |       }d|d   d<   t        j                  t        j                  d      5  t        j                  |       d d d        t        j                  |       }t        j                  d	g|d
   d   d<   t        j                  t        j                  d      5  t        j                  |       d d d        t        j                  |       }d|d   d   d<   d|d
   d   d   d<   t        j                  |      j                  dk(  sJ t        j                  |       }d|d   d<   d|d
   d   d<   t        j                  |      j                  dk(  sJ y # 1 sw Y   xY w# 1 sw Y   xY w)NTr   r  r   rs   r   rr   r   r_   ru   r   ra   rt   rZ   rR   r      rY   )r   r
  r.   r   r   r   r   r   r   r   r   )r   bad_baseline	bad_routebad_bodystale_messages        r2   Dtest_owner_review_rejects_baseline_role_route_body_and_stale_messager    s~   vHxD9::h&&*>>>>==*L2:L./	q''z	:	

<  
;h'I()

C'8IhG$	q''w	7	

9 
8}}X&H8@H]I&}57?HXr9%m4::h&&*JJJJMM(+M14M- .03M(B-::m$++/OOOO 
;	: 
8	7s   >F.1F;.F8;Gc                 t   t               } t        | d       d| d   d<   t        j                  |       j                  dk(  sJ t        | dddd	d
d       t        j                  |       j                  dk(  sJ d| d   d<   t        j                  |       j                  dk(  sJ t        | ddddd
d       t        j                  |       }|j                  dk(  sJ |j                  t        j                         k(  sJ t        t        j                        |j                  v sJ d|j                  vrd|j                  vsJ | d   j                  dd       d| d   d<   t        j                  |       }|j                  dk(  sJ |j                  dk(  sJ |j                  dk(  sJ t        j                  | |      }|d   dk(  sJ |d    d!d"d#d$d%k(  sJ d&d'd(d)t        j                  d*gd+d,| d-<   t        j                  |       j                  d.k(  sJ d/t        j                  d&d0d1g| d2<   d/d3d4t        j                   t        j                   d*d5d6g| d7<   d8t        j                  d&d9d/d:i| d;<   t        j                  |       j                  d<k(  sJ d=| d;   d8   d><   t        j                  |       j                  d?k(  sJ d@t        j                  d&d8dAdBdCi| dD<   t        j                  |       j                  dEk(  sJ dF| d   d<   t        j                  |       j                  dGk(  sJ y )HNTr   
finalizingrs   r6   r         @ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffr  rq   r   WAIT_AUTOMATIC_READINESSready      @aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa!READY_OPERATOR_ACTIVATION_CUTOVER<>rp   ACTIVE   r6   rX   rm   r`   READY_CUSTOMER_START_CHECKINu   send:오늘 체크인u   after arming, send one fresh exact production alias 오늘 체크인, then press inline 오늘 체크인 시작; the pre-arm 2026-08-17 12:10 message produced no state/card and is not replayed or acceptedevent_subscriptionz-recursive-inotify-before-snapshot-and-actionsfresh_alias_requirement   오늘 체크인   오늘 체크인 시작z2026-08-17 12:10z'no state/card; not replayed or accepted)required_after_armingexpected_inlinepre_arm_messagepre_arm_resultzwiz-current   summary221r_   zevt-current)rW   versionsteprY   ra   finalized_event_idrw   WAIT_AUTOMATIC_GENERATIONztok-current	generated)tokencustomer_keyrW   r6   rx   	published223rb   )r5  r6   rY   destinationry   zdraft-currentcreated)r6  rW   r   generation_tokenrz   READY_OWNER_DRAFT_REVIEWapprovedr   READY_OWNER_EXPLICIT_SENDzdelivery-currentsent_audited225)r6  rW   draft_idr   rY   r{   READY_OPERATOR_DISABLEFREADY_CLEANUP_HANDOFF)r   r
  r.   r   r   r   r   exact_cutoverr   	CHECKLISTupdater   detail	ready_docr   KEYr   )r   cutoverstartr  s       r2   Ktest_owner_finalization_ready_activation_checkin_delivery_cleanup_continuesrL    s    vHxD9$0HZ!::h&&*JJJJ
x8 ::h&&*DDDD$+HZ!::h&&*JJJJ
(3 jj"G>>@@@@??aoo////q{{w...goo%#W__*DDD[  xA >&*HZ#JJx E<<9999<<2222<<	*  
 KK%(E%&*YYYY*+!34-C	0    $**c"+HX ::h&&*EEEE #EE' 		
H] # 7777			
HW 	EE' -	
HX ::h&&*DDDD4>HX'1::h&&*EEEEEE''$
H\ ::h&&*BBBB&+HZ#::h&&*AAAAr4   c                    d}t        d      }||d<   dd|t        |d      g d	d
| d<   t        | d      }t        | dd|       |S )Nu   현재도 주 3회, 회당 60분 정도의 중간 강도 근력운동을 꾸준히 하고 있으며,
 앞으로도 같은 수준으로 유지할 계획입니다. 평소 하루 6,000~8,000보 정도 걷습
 니다.Fr   r   rO   rf   rg   rh   )ri   r   r   i.  rj   rs   r	  r   )r3   rM   r   r   )r   r   r1   rZ   s       r2   current_generation_28rN  2  sf    	 
 5!E"+E
'(a@0HZ  :GHb#w'Lr4   c               J   t        |       }t        t        j                        }|t        j
                  vr t        j
                  j                  d|       t        j                  d      }t        |      }|j                  dt        j                  ddd       |j                  |t        dd	d
            j                  d      }t        j                  |      }| d   d   }d||||d   d| d<   | d   j                  di |ddg       |rt!        | dddddd       y y )Nr   z'checkin_cli.nutrition_onboarding_modelsz1.0	completedpendingunpublished)rE   r6  session_statusreview_decisionpublication_statusi        )as_ofr   )moders   rM   rI   )rE   rI   rr   source_answersinput_reconciliation_digestrr   r  ri   izʅ%)r6   r3   r   rl   r  r  r  r  rq   r   )rN  r   r.   DOMAIN_PACKAGE_ROOTr   pathinsert	importlibimport_moduledictrF  rI  build_onboarding_baseliner   
model_dumprJ   r   )	r   r   rZ  packagemodelsrawbaseline_payloadr   reconciliation_records	            r2   r
  r
  F  sG   *84N!''(Gchh7#$$%NOF
~
CJJUU"!(   774a$ 8 jfj  (()9:O$Z01AB!$('<X'FHZ Z'y)	    'a 		
 r4   c                    t               } t        |       }t        j                  |      dk(  sJ | d   d   d   dk(  sJ t        j	                  |      \  }}|du sJ |dj                  t        |d         j                               k(  sJ t        j                  |       }|j                  d	k(  sJ |j                  d
k(  sJ |j                  t        j                  dd      k(  sJ y )N@280dabc7a1705face34a68fb61f62f079e20f6fc3844afe82f9752db0f5cf669rt   rZ   rR   @f760b5ac4c2109067a2798ec3480898afe6f77722efa18635684a45e51406b65T r   r   r   r   r	  )r   rN  r.   rJ   shipped_baseline_validationjoinr   splitr   r   rY   r   r   )r   r1   valid
normalizedr   s        r2   Jtest_current_transport_whitespace_rationale_is_domain_valid_and_attestablerr  s  s     vH!(+E	5!M	N	N 		*=9M	N	N 55e<E:D==#e,@&A"B"H"H"JKKKKZZ!F==3333%%%==AJJx4444r4   )categoryr   ))r    )r     xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)	arbitraryzvalid rationalec                t    t        d      }| |d<   ||d<   t        j                  |      \  }}|du sJ |J y )NFr   r   r   )r3   r.   rm  )rs  r   r1   rp  rq  s        r2   3test_shipped_baseline_gate_rejects_invalid_activityrx    sQ     5!E!)E
"+E
55e<E:E>>r4   c                    t               } t        |        t        j                  |       }d|d   d   d<   d|d   d   d   d<   t        j                  |      j                  dk(  sJ t        j                  |       }d|d   d	<   d|d   d   d	<   t        j                  |      j                  dk(  sJ t        j                  |       }d
|d   d   d<   d
|d   d   d   d<   t        j                  |      j                  dk(  sJ y )Nr   rt   rZ   rF   ru   r   r      rY   r  rR   r   )r   rN  r   r   r.   r   r   )r   stale_digestr  r  s       r2   @test_current_authority_rejects_stale_digest_message_and_bad_bodyr|    s   vH(#==*L?GL	*+;<>FL2y)*:;::l#**.RRRRMM(+M14M- .03M(B-::m$++/SSSS}}X&H8@H]I&}57?HXr9%m4::h&&*FFFFr4   c                r   | dz  }t         j                  |ddi       t         j                  |ddi       |j                         j                         D cg c]!  }t         j                  j                  |      # }}|j                         j                  dz  dk(  sJ |d   d   |d	   d
   k(  sJ y c c}w )Nzevents.jsonlr   ABi  i  rg   previous_event_sha256r   event_sha256)r.   append_event	read_text
splitlinesr   r   statst_mode)tmp_pathtargetlinerowss       r2   .test_append_ledger_is_private_and_hash_chainedr    s    &FNN6Hc?+NN6Hc?++1+;+;+=+H+H+JK+J4AFFLL+JDK;;=  5(E1117*+tAw~/FFFF Ls   &B4c                 T   t         j                         } t        j                  |       }t         j                  j
                  j
                  dz  t         j                  z  }t         j                  dk(  sJ t         j                  dk(  sJ t         j                  dk(  sJ t         j                  dk(  sJ t         j                  dk(  sJ | j                  d      dk(  sJ t        t         j                        | v sJ ||j                  d	      dz      t        |      k(  sJ d
| vsJ y )Ndata/customersr   r   @f75856d6d986b64d3d2f083aec2f865c7aea19f5950b84ff06e519f2f6505af6@b093aeb888ce7325cddd7d56d52a7e4a7ec8a180ac80eef21fea9453a8ef0e8e@acb21c8c02260497c197427cfc93417f2be65c8746768ba788bb33400e3e6e78z--checklist-evidencerg   z--data-rootz<CHECKLIST_EVIDENCE>)r.   rD  shlexro  r\  parentrI  r   r   PROFILE_WHEELCHECKLIST_SHA256VALIDATION_RECEIPT_SHA256countr   rE  index)r   	argumentsexpected_data_roots      r2   <test_current_cutover_bindings_are_exact_and_placeholder_freer    s   ooGG$I	$$++
	
%%	 
 ;;\\\\66WWWW??````!cccc&&*llll==/0A555q{{w&&&Y__]3a78C@R<SSSS!000r4   c                 |   t        t        j                        } | t        j                  vr t        j                  j                  d|        t        j                  d      }t        j                  j                  j                  }|dz  }|dz  }|dz  t        j                  z  }t        j                  |j                  d      5  |j                  ||t        j                  |       d d d        |j                  ||t        j                  |      }|j                  j                         |j                         k(  sJ |j!                  ||      }t        j                  |j                  d      5  |j#                  |||j                  ||j$                         d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)	Nr   zcheckin_cli.customer_adminzcustomers/registry.jsondatar  z5data root does not match the registered customer rootr   zG1 data root)r   r.   r\  r   r]  r^  r_  r`  r  rI  r   r   CustomerAdminError_registered_customer	data_rootresolve_read_profile_registry_validate_activation_data_rootspec)rd  adminprofileregistrywrong	canonicalruntimedocuments           r2   Qtest_real_registered_root_resolver_rejects_profile_data_and_accepts_customer_rootr    sa   !''(Gchh7###$@AE##**11G22HfE**QUU2I	  E
 	""8WaeeUC	
 ((7AEE9MG$$&)*;*;*====++Hg>H	u//~	F,,UG--x	
 
G	F
 
 
G	Fs   #F&3*F2&F/2F;c                     t        j                  d      } | j                  j                  } |d      du sJ  |d      du sJ  |d      du sJ  |d      du sJ  |d      du sJ y )	Nzgateway.platforms.telegramu   체크인 시작Tr'  u     오늘   체크인  checkinFr(  )r_  r`  TelegramAdapter$_is_nutrition_customer_start_command)telegram
classifiers     r2   Ntest_installed_telegram_adapter_accepts_only_production_customer_start_aliasesr    s    &&'CDH))NNJ()T111()T111./4777i E)))/0E999r4   c                    t               } t        | d       d| d   d<   t        | ddddd	d
       | d   j                  dd       d| d   d<   t        j
                  ddd}d|i| d<   t        j                  |       j                  dk(  sJ i |ddi| d   d<   t        j                  t        j                  d      5  t        j                  |        d d d        y # 1 sw Y   y xY w)NTr   r  rs   r6   r     r  r  rq   r   rp   r!  r"  r#  rm   r`   r?  r@  )r6  r   rY   oner{   rB  rY   226	duplicatezduplicate sent_audited deliveryr   )r   r
  r   rF  r.   rI  r   r   r   r   r   )r   deliverys     r2   Atest_one_delivery_is_terminal_and_duplicate_delivery_fails_closedr    s    vHxD9$+HZ!Hb#JQXY[  xA >&*HZ# !uUH#X.H\::h&&*BBBB*KX*K|U*KH\;'	q''/P	Q	

8 
R	Q	Qs   C""C+c            	     >    t         j                  dddddddg|       S )Nobservez	--profilez/authority/profilez--readyz/fresh/ready.jsonz--eventsz/fresh/events.jsonl)r.   
parse_args)extras    r2   timeout_argsr    s7    << !		
 		
 r4   c                     t               } | j                  dk(  sJ | j                  dk(  sJ t        j	                  |        y )Ni  i`T  )r  stage_timeouttotal_timeoutr.   validate_timeout_boundsr   s    r2   7test_timeout_defaults_remain_1800_stage_and_21600_totalr    s?    ^F4'''5(((f%r4   c                     t        dd      } | j                  t        j                  k(  sJ | j                  t        j
                  k(  sJ t        j                  |        y )N--stage-timeout21600)r  r  r.   MAX_STAGE_TIMEOUTr  MAX_TOTAL_TIMEOUTr  r  s    r2   ?test_six_hour_stage_timeout_is_accepted_with_existing_total_capr    sQ    +W5F1#6#66661#6#6666f%r4   r  ))r  	21600.001)z--total-timeoutr  c                    t        j                  t        j                  d      5  t        j	                  t        |         d d d        y # 1 sw Y   y xY w)Nztimeout bound invalidr   )r   r   r.   r   r  r  )r  s    r2   4test_timeout_values_above_explicit_caps_are_rejectedr    s9     
q''/F	G	!!,	":; 
H	G	Gs   AA)r	   boolr
   r  returndict[str, object])
r1   r  rH   intr6   r   r7   r  r  r  )r  dict[str, Any])r   r  rX   r  rY   r  rZ   r  ro   r   r  None)r   r  rH   r  r  r  )r   r  r  r  )r  r  )r   r   r  r  )r   r  r  r  )r   r  r   r  r  r  )rs  r   r   r   r  r  )r  r   r  r  )r  r   r  r   )r  ztuple[str, str]r  r  )C
__future__r   r   importlib.utilr_  r   r  r   r   datetimer   pathlibr   typingr   r   __file__r  HEREutilspec_from_file_locationSPECloadermodule_from_specr.   modulesnameexec_moduler3   rM   r   r   r   r   r   r   r   r   r   r   r   r   r   markparametrizer   r   r   r   r   r  r  rL  rN  r
  rr  rx  r|  r  r  r  r  r  r  r  r  r  r   r4   r2   <module>r     s   "      
    H~~~--T$==  NN##D)DII      #T B #$$ $ 	$
 $ $N)d MMM M 	M M 
M(

03

M&MY>55%9&  F$!5!5HB0E*5<P,bBbBJ(*
Z55, Q!		G"G1&
6:&& <<	<<r4   