
    fjc              	         U d Z 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	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Zded	<   d
Zded<   dZded<   dZded<   dZded<   dZded<   dZded<   dZded<   dZded<   dZded<   dZded<   dZ ded<   d Z!ded!<   d"d#d$d%d&d'd(d)d*Z"ded+<    ed,      Z#d-Z$d.Z%ded/<   d0Z&ded1<    ejN                  d2      Z(d3Z)d4Z*d5Z+h d6Z, G d7 d8e-      Z. G d9 d:e.      Z/ ed;<       G d= d>             Z0d`d?Z1dadbd@Z2dcdAZ3dddBZ4dedCZ5	 	 	 	 	 	 	 	 dfdDZ6dgdEZ7dhdFZ8didGZ9djdHZ:	 dk	 	 	 	 	 dldIZ;	 	 	 	 dmdJZ<dndKZ=dodLZ>	 	 	 	 	 	 	 	 dpdMZ?	 	 	 	 	 	 	 	 	 	 dqdNZ@drdOZAdsdPZB	 	 	 	 	 	 	 	 	 	 dtdQZCdudRZDdvdSZEdwdTZFdxdUZGdydVZHdzdWZId{dXZJd|dYZK G dZ d[      ZLd}d\ZMd~d]ZNd|d^ZOePd_k(  r eQ eO             y)zNContinuous, event-first Task26 lifecycle observer and role-handoff controller.    )annotationsN)	dataclass)Path)Final@4e9962be49b72951c3b9ed7e1a4fe36d0ca03e757872ae03364c1ab7a790f32br   	SUCCESSOR@88caabf3dee923e720463d917d35b6dd32ecc31102ed3ab4df4c6a203df4a760CORE@33688875a0d1ce20955bd8272257ee34d84cb138f6a23a43e5d16682368ae5e5WHEEL@d816dbbd6a27d5826b251d279a9831de096ef7cd79b5fd131ceff7253b7369bePLAN@8416cd7c83cab5540af2e1e01dbcc5b1bdfd49a59d8ef21ea49512c28d749218GOLDEN@a2e15845764e7041957ae4518096fe73f87ec35b57021980cdd4df3ea18ac00dRECOVERY@5e3067fe3c865224fc73ff5a9a65058c87960f05d9af53bddccaf6f32dc83939CONSENTcb_PCczfFXoI4GjvCxLBs1oRASESSION@53b4f95b5b4db9a611128976a7b951bbe22d9619e05b2ff07fadf5b02f9a5380SID%task26_live_2e_r2_20260815_8527916639KEY
8527916639CUSTOMER
8693203710OWNER)date_of_birthequation_sex_basis	height_cm	weight_kgactivity_categoryactivity_rationale	goal_typetarget_weight_kgtarget_date	allergiesintolerancesreligious_ethical_exclusionsdisliked_foodsdietary_preferences
conditionsmedicationspregnancy_breastfeedingeating_disorder_riskcooking_accessbudget_band
meal_countschedule_constraintsFIELDS@95637abce4742d583534cf406b038f7c862ad0a72d10a6bab24d2452dcb0f776@8c7065277d5d96ce1012ac0c098d53288bba66c44c0674704be4072fe0a63951@8ce2fe8770c2b480083e9d44237d80892ccddcaec06acca14db18576a2ee0088@b41060dea28eb3bbb83217068f5218d5df2c879dba00e73c9ca4e577a6049dad@8fb6ba6f855e7508c525447cdec482ceb240f8c0a5827b2ca0ce4268c6880bb0@8afb45c5cca082fd85cf07ab43dc5d1062c34678fd268a5722e313ce35cffd8b@3c24d49d656c623edfb95fcfbc7fb0f92365fc123420df66f733f9dbe39d704f@f04ea498ad12a257fb1322da4c8cfd2f91fc9403f0b978617fcc00df41729209)z1gateway/platforms/dualcoach_activation_cutover.pyz$gateway/platforms/dualcoach_admin.pyz0gateway/platforms/telegram_customer_bootstrap.pyzgateway/platforms/telegram.pyz8gateway/platforms/nutrition_onboarding_reconciliation.pyz7gateway/platforms/telegram_nutrition_onboarding_copy.pyz:gateway/platforms/telegram_nutrition_onboarding_runtime.pyzFgateway/platforms/telegram_nutrition_onboarding_runtime_publication.pyRUNTIMEzK/home/cube/projects/richard/hermes-agent/.venv/lib/python3.12/site-packagesz$task26-continuous-lifecycle-v3-finalu   활동 수준: 보통. 주 3회, 회당 60분 정도의 중간 강도 근력운동을 희망합니다
 . 평소 걷기·이동은 하루 약 6,000~8,000보 수준입니다.LEGACY_ACTIVITYu   주 3회, 회당 60분 정도의 중간 강도 근력운동을 희망합니다
 . 평소 걷기·이동은 하루 약 6,000~8,000보 수준입니다.DETAILED_RATIONALEiIIIi  i @  i   >   recovery-auditsprofile-reset-archivesdualcoach-provider-authrehearsal-reset-archivespost-lifecycle-cleanup-archivesglobalc                      e Zd Zy)LifecycleErrorN__name__
__module____qualname__     c.omo/evidence/task26/task26-continuous-lifecycle-observer-v3-final-4e9962be/continuous_lifecycle.pyrI   rI   \       rO   rI   c                      e Zd Zy)LifecycleTimeoutNrJ   rN   rO   rP   rS   rS   `   rQ   rO   rS   T)frozenc                  n    e Zd ZU ded<   ded<   ded<   ded<   ded<   ded	<   d
Zded<   d
Zded<   ddZy)Promptstrstatusroleactorztuple[str, str]route
str | None
message_idaction commanddetailc           	         | j                   | j                  | j                  t        | j                        | j
                  | j                  | j                  | j                  dS )N)rX   rY   rZ   r[   r]   r^   r`   ra   )	rX   rY   rZ   listr[   r]   r^   r`   ra   selfs    rP   docz
Prompt.doco   sI    kkIIZZ$**%//kk||kk	
 		
rO   N)returndict[str, object])rK   rL   rM   __annotations__r`   ra   rf   rN   rO   rP   rV   rV   d   s;    K
IJKGSFC

rO   rV   c                d    t        j                  | j                               j                         S N)hashlibsha256
read_bytes	hexdigest)ps    rP   sharq   |   s     >>!,,.)3355rO   c                   | j                         s|S | j                         rt        d|        | j                         }t        j                  |j
                        rC|j                  t        j                         k7  s"t        j                  |j
                        dz  rt        d|        	 t        j                  | j                               S # t        j                  $ r}t        d|        |d }~ww xY w)Nzsymlink authority: ?   zunsafe authority: zinvalid JSON: )exists
is_symlinkrI   statS_ISREGst_modest_uidosgetuidS_IMODEjsonloadsrn   JSONDecodeError)rp   defaultses       rP   loadr      s    88:||~21#677	ALL#88ryy{"<<		"U*1!566:zz!,,.)) :~aS129:s   2"C C<(C77C<c                4   t        | t              r!| D cg c]  }t        |t              s| c}S t        | t              rLdD ]G  }t        | j                  |      t              s#| |   D cg c]  }t        |t              s| c}c S  g S c c}w c c}w )N)recordsgenerationsitems)
isinstancerc   dictget)vxks      rP   rowsr      s    !T41a
1d 3144!T4A!%%(D)#$Q4?4a:a+>4?? 5 I 5 @s   BB.BBc                    t        j                  t        j                  t                    j                         j                  d      }d|  d| d| S )N=znon2::)base64urlsafe_b64encodebytesfromhexr   decoderstrip)r^   
generationhs      rP   callbackr      sH      s!34;;=DDSIA6(!J<q,,rO   c                 .    dt         z   dz   t        z   dz   S )Nz/home/cube/projects/richard/hermes-agent/.venv/bin/dualcoach_admin customer activate --profile-root /home/cube/.hermes/profiles/dualcoachtest --data-root /home/cube/.hermes/profiles/dualcoachtest/data --customer-id zA --checklist-evidence '<CHECKLIST_EVIDENCE>' --bootstrap-session zg --expected-generation 5 --package-root /home/cube/.hermes/profiles/dualcoachtest/workspace/checkin_cli)r   r   rN   rO   rP   exact_cutoverr      s4     	b
	
M	N 	 t		trO   c           	         | D cg c]#  }t        |j                  |d            |k(  s"|% }}t        |      dk(  r|d   S d S c c}w )Nr_      r   )rW   r   len)seqfieldvaluerr   s        rP   _oner      sM     :Cq3quuUB/0E9CA:q6Q;1Q4(D( 	;s
   #AAc                   t        | dz  i       }t        t        t        |t              r|j                  dg       ng       dt              }t        | dz  i       }t        t        t        |t              r|j                  dg       ng       dt              }| dz  t        z  dz  }t        |d	z  d       xs t        |d
z  d       }t        |dz  i       }t        t        t        |t              r|j                  di       ni       dt              }|[t        |t              rKt        |j                  d      t              r,|d   j                  t              }	t        |	t              r|	nd }t        | dz  i       }
t        | dz  i       }| dz  t        z  dz  }t        |dz  d       }d }t        |t              r|j                  d      }t        |j                  dg             }|rt        |dt        |            nd }|rt        |dz  | dz  d       nd }t        |t              r||j                  d      |j                  d      |j                  d      t        |j                  d            t        |j                  d            gt        |t              r|j                  d      nd d}t        | dz  g       }t        | dz  i       }t        | dz  i       }t        | dz  i       }g }| dz  }|j                         rO|j                         j                         D 	cg c](  }	|	j                         st        j                  |	      * }}	||||t        |
      t        |      |t        |      t        |t              rt        |j!                               n
t        |      t        |t              r|ni t        |t              r||d S i |d S c c}	w )!Nz:data/onboarding/telegram-customer-bootstrap-v1/ledger.jsonsessions
session_idzcustomers/registry.json	customerscustomer_keyzdata/customersznutrition-onboardingz
ready.jsonztransient/workflow.jsonzsession.jsonz:data/onboarding/telegram-publication-outbox-v1/ledger.jsonzCdata/onboarding/telegram-publication-outbox-v1/owner-callbacks.jsonwizardztelegram-bindings.jsonactive_session_idbindingsdraftsz.jsonversionstepr]   chat_idtopic_idfinalized_event_id)r   r   r   r]   r[   r   z)data/owner-actions/draft-generations.jsonz.data/owner-actions/draft-generation-cards.jsonzdata/owner-actions/drafts.jsonz(data/owner-actions/draft-deliveries.jsonz$data/customer-activation-audit.jsonl)	bootstrapcustomerworkflowpublicationoutboxowner_callbacksr   r   cardsr   
deliveries
activation)r   r   r   r   r   r   r   r   rW   rt   	read_text
splitlinesstripr}   r~   rc   values)rootbootbrregcrnrwfpubsprr   outocwrbindr   activebsbdraftgensr   r   r   auditaps                            rP   capturer      s   SSUWXD	D$)?TXXj"%RH
B
 t//
4C	C)>SWW["%BG
B
 
 	 3	&)?	?B	b<	&	T$r4M/Mt*TB^#R(D	D$)?TXXj"%RH
B 
zjt,DHHZ<PRV1W  )Q%Q4
tRRTV
WC	TTVX
B 
 	 3	&	1B--t4DF$-.$((:r*+39D\3v;/t@FR(]xu%55t<Da$55+feeL1aeeI./QUU:5F1GHeT* ',ii0D&E	F BBBGDHH"ME$992>FdGGLJE	6	6B	yy{(*(A(A(CQ(C1qwwyA(CQs)8Dz)3E4)@elln%d5k&vt4&"$.z4$@j  GI  Rs   'O=Oc                    | j                  d      }| j                  d      }t        |t              rV|j                  d      t        k7  s>|j                  d      t        k7  s&|j                  d      dvs|j                  d      dvrt        d	      t        |t              r]|j                  d
t              t        k7  s@|j                  d      t        t        ddd fvr*|j                  d      t        t        dgk7  rt        d      t               }| j                  dg       }t        |t              st        d      |D ]  }t        |t              st        d      |j                  d      |j                  d      f}||v rt        d      |j                  |       |j                  d      }|j                  d      }|dk(  r|t        dgk7  s|dk(  s|t        dgk7  st        d       | j                  di       }	t        |	t              rs|	j                         D cg c]@  }t        |t              r.|j                  d
      t        k(  r|j                  d      dk(  r|B }
}t        |
      dkD  rt        d      y y c c}w )Nr   r   r   sid_hashstate>   ACTIVEAWAITING_ACTIVATIONr   >         zbootstrap authority driftr   telegram0user_idr   r   r[   zcustomer route driftr   zoutbox schema driftz duplicate publication generationrY   ownerzpublication role route driftr   rX   sent_auditedr   zduplicate sent_audited delivery)r   r   r   r   r   rI   r   r   setrc   addr   r   r   )r   r   cseenr   r   r   rY   r[   dterminals              rP   validate_snapshotr      sH   	kA	jAq$55')55#55>!BB55f,899q$55%,EE* (X3OQUVWg8Xs";; 3445DUU8R Ffd#233!T" !677UU< !%%"569 !CDDuuV}gJ(C(w%% !?@@   	
lBA!T XXZ
!T"n%,h>1	  	 
 x=1 !BCC  
s   )AJc                   t        |       | j                  d      }|j                  d      }t        |t              rzt        |t              rj|j                  d      dk(  rV|j                  d      dk(  rBt	        |j                  dd            t	        |j                  dd            k  rt        d      | j                  d      }|j                  d      }t        |t              rRt        |t              rBt	        |j                  dd            t	        |j                  dd            k  rt        d	      | j                  d
      }|j                  d
      }t        |t              rxt        |t              rg|j                  d      |j                  d      k(  rCt	        |j                  dd            t	        |j                  dd            k  rt        d      y y y y )Nr   r   
collectingcursorr   zonboarding cursor regressedr   r   z publication generation regressedr   r   r   zcheckin version regressed)r   r   r   r   intrI   )ar   awbwr   bpavbvs           rP   validate_transitionr   0  s   a	
z	B	
z	B2tr4 FF7O|+FF7O|+x#$s266(A+>'??:;;	
}	B	
}	B2tr4 |Q'(3rvvlA/F+GG?@@	
xB	
xB2tr4 FF< BFF<$88y!$%BFF9a,@(AA899 B 9 ! 	rO   c                    t        j                  | dddd      j                         }t        j                  |      j                         S )NFT,r   )ensure_ascii	sort_keys
separators	allow_nan)r}   dumpsencoderl   rm   ro   )r   encodeds     rP   canonical_digestr   O  sE    jj fh  >>'",,..rO   c                v   | j                  d      }t        |t              r|j                  d      dk7  ry |j                  d      }|j                  d      }|j                  d      }t        |t              r,t        |      t        us|dk  st        |      t        us|dk  ry | j                  d      }t        |t
              sy |D cg c]  }t        |t              r|j                  d	      t        k(  r|j                  d      dk(  ry|j                  d      |k(  re|j                  d      |k(  rQ|j                  d      |k(  r=|j                  d
      |k(  r)|j                  d      |dk(  rt        dgnt        dgk(  r| }}t        d |D        d      }	t        |      dk(  r||	k(  r|S d S c c}w )Nr   r   	COMMITTEDpayloadr   r]   r   r   r   rY   r[   r   r   c              3     K   | ]n  }t        |t              r\|j                  d       t        k(  rD|j                  d      dk(  r0t	        |j                  d            t
        u rt        |d          p yw)r   r   r   r   N)r   r   r   r   typer   ).0records     rP   	<genexpr>z(committed_publication.<locals>.<genexpr>|  sd      	
 &$'

<(G3

7#{2VZZ-.#5 |$% s   A4A6)r   r   )r   r   r   r  r   rc   r   r   r   maxr   )
r   rY   r   r  r   r]   r   r  matcheslatests
             rP   committed_publicationr  Z  s    %%&Kk4(KOOG,D,Sooi(G.J.Jw%
3&>
3&?UU8_Ffd# Ffd#JJ|$/JJw;.JJ|$
2JJ|$
2JJy!W,JJv$&JJw#z1XsOs|E 	   	
 	
 
F g,!+
f0D;N$N1s   B<F6c                8   | j                  d      }| j                  d      }t        |t              rt        |t              sy t        |      }|j                  d      }|j                  d      }|j                  d      }|j	                         D ci c]  \  }}|dk7  s|| }	}}|j                  d      dvs|j                  d      |k7  syt        |t
              rit        |      t        usXd	|cxk  rt        |      k  rDn y t        |t              r1t        |	      |k7  s#|j                  d      d
k(  |t        |      k  k7  ry g }
t               }|D ]  }t        |t              rqt        |      h dk7  sa|j                  d      t        vsJ|j                  d      |v s7|j                  d      dvs$t        |j                  d      t              r|d   s y |j                  t        |d                |
j                  |        |||
|fS c c}}w )Nanswersreconciliationclarificationscurrent_indexdigestr   >   resolved
clarifyinganswers_digestr   r  >   kindr   question_kor   r  >   	ambiguitycontradictionr  )r   r   r   r   r   rc   r  r   r   rW   r   r5   r   append)r   r  r  r  r  r  r  keyr   unsignedtypedr   items                rP   reconciliation_authorityr    s    ll9%G\\*+Fgt$Jvt,D%g.NZZ 01NJJ/MZZ!F-3\\^O^zsEshU
^HO

7#==::&'>9.$/c)M8S%88  &#&H%/JJw</C//1 %'EUD4&4y<<xx .xx D(xx'EEdhh}5s;&T']#$T  NE=889 Ps   H#Hc                   | j                  d      }t        |t              rddddj                  |      nd }| j                  d      }t        |t              rddd	d
ddj                  |      nd }|y|ydD ]?  }| j                  |      }t        |t              r|j                  d      dvs8dd| fc S  | j                  d      dury| j                  d      durydd| d| dfS )Nr%      감량   유지   증량lossmaintaingainr#      좌식	   가벼움   보통   매우 활동적   최고 활동	sedentarylightmoderatevery_activeextra_active)Fz$canonical Korean goal is unavailable)Fz(canonical Korean activity is unavailable)r(   r)   r*   r+   r,   r-   r.   rX   >   noneprovidedFzstructured answer unavailable: r/   )Fz#health review input requires reviewr0   Tzgoal=z; activity=z; health=no-review)r   r   rW   r   )r  
goal_valuegoalactivity_valueactivityr   r   s          rP   summary_qualityr8    s-   [)J j#& xBFFzR 	
 [[!45N nc* "  -+	
 #n
  |<@ E"%&%))H*= F
 +
 ;E7CCC {{,-U:;{{)*%7;5k(3EFFFrO   c                    d!d" fd}d# fdddddj                  t         j                  d                  }d	d
ddddj                  t         j                  d                  }dj                  fddD              }dj                  d|xs d d|xs d d |d       d |d       dd |d       d |d       d |d       d| d f      S )$N	   미입력c                    j                  |       }|
|dk(  s|g k(  r|S t        |t              rdj                  d |D              xs |S t	        |      S )Nr_   , c              3  2   K   | ]  }t        |        y wrk   )rW   r  r  s     rP   r  z7authoritative_summary.<locals>.value.<locals>.<genexpr>  s     734SY3s   )r   r   rc   joinrW   )r   r   rawr  s      rP   r   z$authoritative_summary.<locals>.value  sT    kk% ;#)sbyNc4 997377B7B3xrO   c                   j                  |       }t        |t              sy|j                  d      dk(  ry|j                  d      }|j                  d      dk7  st        |t              sydj	                  d |D              xs dS )	Nr:  rX   r2     없음r   r3  r<  c              3  H   K   | ]  }t        |t              s|s|  y wrk   r   rW   r>  s     rP   r  z<authoritative_summary.<locals>.structured.<locals>.<genexpr>  s     Out
40E$dus   """)r   r   r   rc   r?  )r   r@  r   r  s      rP   
structuredz)authoritative_summary.<locals>.structured  s|    kk% #t$778& 778
**UD2IIIOuOO 	
rO   r   r!  r"  r#  r%   r'  r(  r)  r*  r+  r,  r#   u    · c              3  >   K   | ]  \  }}| d  |         yw) NrN   )r  labelr   rE  s      rP   r  z(authoritative_summary.<locals>.<genexpr>  s2      	
LE5 ':e$%&
s   ))u   알레르기r(   )u	   불내증r)   )u   종교·윤리 제한r*   )u   비선호 식품r+   )u   식품 선호r,   
u
   - 목표: u
   - 활동: r$   u   - 식사: 하루 r3   u   끼u   - 조리·예산: r1   r2   u   - 식사 시간: r4   u*   - 알레르기·불내증·식품 제한: u=   - 건강 관련 입력: 별도 검토 입력이 없습니다.)r:  )r   rW   r   rW   rg   rW   )r   rW   rg   rW   )r   rW   r?  )r  r   r5  r7  restrictionsrE  s   `    @rP   authoritative_summaryrK    s   
 (HEIIGKK$%D )' 
c#gkk-.
/0  ;; 	
	 	L 99,-.0[1e<P6Q5RSl 34C8 '7!8 9eM>R=ST&< =>?8GK	

 
rO   c                   | j                  d      }t        |t              sy |j                  d      }t        |t              sy |rt        |      n|j                  d      }t        |t              r|sy dd|g}dD ]d  \  }}|rdn|j                  |      }	|	st        |	t
        t        f      rt        d |	D              s y |j                  d|gd	 |	D               f |j                  d
       dj                  |      dz   S )Nr  advisory
summary_kou    입력 내용을 정리했어요r_   ))u   확인된 내용facts_ko)u   안전 관련 참고사항safety_observations_korN   c              3  <   K   | ]  }t        |t                y wrk   rD  r>  s     rP   r  z-candidate_attestation_text.<locals>.<genexpr>-  s      @28$
4%&s   c              3  &   K   | ]	  }d |   yw)z- NrN   r>  s     rP   r  z-candidate_attestation_text.<locals>.<genexpr>1  s     &FvtD6{vs   )r_   u\   이 요약은 참고용이며 안전 판정·승인·활성화를 대신하지 않습니다.u=   내용이 맞으면 아래 확인 버튼을 눌러 주세요.rI  u   

아래 버튼을 누르면 입력 확인이 저장되고 운영자 검토로 넘어갑니다.
이 단계에서 영양 코칭이 시작되거나 활성화되지는 않습니다.)
r   r   r   rK  rW   rc   tupleallextendr?  )
r   r  r  r  rM  summarylinestitler  r   s
             rP   candidate_attestation_textrY    s    \\"23Nnd+!!*-Hh%*7g&X\\,=W  gs#7/W=E
s %(,,s*;ftUm4C @28@ = LL"eG&Fv&FGH 
LL	
 			%]	]rO   c                    t        | ||      }t        |d uxrC |j                  d      t        j                  |j                               j                         k(        S )Nbody_digest)rY  boolr   rl   rm   r   ro   )r   r  r  r  texts        rP   candidate_body_boundr^  @  sV     &hGDD 	TKK&'..*G*Q*Q*SS rO   c                R   t        |       \  }}t        |xr t        |       t        t              k(  xrp | j	                  d      dk(  xrZ | j	                  d      t
        k(  xr@ | j	                  d      dk(  xr* | j	                  d      dk(  xr | j	                  d      d	k(        S )
Nr#   r/  r$   r%   r%  r4   rB  r3      )r8  r\  r   r5   r   r@   )r  
quality_ok_s      rP   baseline_valid_answersrc  M  s    #G,MJ 	+LCK'	+KK+,
:	+ KK,-1CC	+ KK$
2		+
 KK./8;	+ KK%* rO   c                   | j                  d      }t        t        |t              xrZ t	        |      t	        t
        d d       k(  xr: |j                  d      dk(  xr$ |j                  d      t        k(  xr
 d|vxr d| v      S )Nr  r  r#   r/  r$   r4   r  )r   r\  r   r   r   r5   r@   )r   r  s     rP   normalized_rewindre  Z  s    ll9%G7D! 	-LCs,,	-KK+,
:	- KK,-1CC	- #'1		-
 H, rO   c                    t        | ||      t        | |||      syd}t        fd|D              ryddt        df}t	        fd|D              sy	y
)N)Fz.publication body is not candidate-render-bound){r   rX   r:  u
   수정 전u    실제 총활동량은 불명확u   위험 신호r%  r/  r-  r0  r1  c              3  &   K   | ]  }|v  
 y wrk   rN   r  tokenr]  s     rP   r  z.publication_summary_quality.<locals>.<genexpr>  s     
0iU5D=i   )Fz5publication contains forbidden internal or stale copyu   - 목표: 유지u   - 활동: 보통u%   별도 검토 입력이 없습니다.c              3  &   K   | ]  }|v  
 y wrk   rN   ri  s     rP   r  z.publication_summary_quality.<locals>.<genexpr>  s     3(u}(rk  )Fz8publication lacks Korean goal/activity/no-review summary)Tz,candidate-render-bound Korean summary passed)rY  r^  anyr@   rT  )r   r  r  r  	forbiddenrequiredr]  s         @rP   publication_summary_qualityrp  f  sr     &hGD|/'=' GI 
0i
00M/	H 3(33P?rO   c           
        | j                  d      }t        |       }t        |t              r|j                  d      dk7  s|y t	        |      }|j                  d      }|t        |t              sy |\  }}}}t        |      \  }	}
t        d   }|j                  d      }|j                  d      }|	sPt        |      t        us?|dk  s:|j                  d      dk7  s&|j                  d	      |k7  sd
|v st        ||||      sy t        |      t        ust        |      t        ury ddt        t        dgt        |      t        d|      ||j                  |      d|
z   d	S )Nr   r   customer_attestationr  r  r   r]      r  clarification_fieldREADY_CUSTOMER_REVISIONr   r   reviseuV   press the existing 수정 button, then resubmit the unchanged final canonical answer; )	rX   rY   rZ   r[   r]   r^   
next_field
next_valuera   )r   r  r   r   r  r8  r5   r  r   r^  r   rW   r   )r   r   r   	authorityr  r  r  rb  r  ra  reasonr   r   r]   s                 rP   candidate_revision_handoffr{    s`   uuZ H'*Kx&<< $::(2Iooi(G
7D 909-G^Q(1J2JE.J.J
3&?;;w#99;;'(N: G+#Hg}gNJs"d:&6c&A+C*o8Z0kk%(j
 rO   c                v   t        |        | d   }| d   }| j                  d      }t        |t              rt        |t              sJ t	        |j                  d            }|j                  d      dk(  rkt        |t              st        d      t        |j                  d            }|dk(  r|j                  d	      }t        |      t        us$d
|cxk  rt        t              k  st        d       t        d      t        |       }|t        ddddd d      S |j                  d      }|j                  d      }	|j                  d      }
t        |t              r6|j                  d      dk7  s"t        |	      t        ust        |
      t        urt        ddddd d      S |t        t              dz
  k(  r@|	dk  st        |      st        d      t        ddt        t        dft        |
      ddd      S t        ddt        t        dft        |
      dt        |    d|dz    d      S t        |       }|d k(  r|t        ddddd dd!      S |d   }t        |t              sJ t        |      }|t        d"dddd d#      S |\  }}}}|j                  d      d k7  s|j                  d$      |k7  rt        ddddd dd%      S |j                  d      }	|j                  d      }
t        |	      t        ust        |
      t        urt        d&      |	}t        |
      }|d'   }t        |t              sJ |d   d(k(  rM||   d)   }|j                  d*      |k7  rt        ddddd dd+      S t        d,dt        t        df|d-| d.      S d*|v rt        ddddd dd/      S t!        ||||      }|sF|d0k(  r/|
d1k(  r*|j                  d2      t"        k(  rt        d3d4d4dd d5d6      S t        d7dddd dd8      S t%        |      \  }}|sU|d9k(  r>|j                  d2      t"        k(  r&t        d:dt        t        df|t'        d;|      d<d=      S t        d>d4d4d|d?|      S |d@k  st)        |      st        dAdddd d#dB      S t+        ||||      \  }}|st        d>d4d4d|d?|      S t        dCdt        t        df|t'        dD|      d<dE|z         S t        | dF      }t        |t              st        dG      |j                  d      }	|j                  d      }
t        |	      t        ust        |
      t        urt        d&      |	}t        |
      }|dHk(  r&t        dIdFt,        t,        df|t'        dJ|      d<dK      S |dLk(  rt        dMdFt,        t,        df|dN      S |dOv r/|dPk(  rt        dQdddd dR      S t        dSd4d4dd dTt/               dU      S t        dV      |j                  d      dWk7  s|j                  d      dXk7  rt        dY      | j                  dZi       }g }t        |t              rY|j1                         D cg c]@  }t        |t              r.|j                  d[      t2        k(  r|j                  d\      d]k(  r|B }}|r&|rt        d^d4d4dd d_d`      S t        dad4d4dd dbdc      S |st        dd      | j                  de      }t        |t              st        dfdt        t        dfd dgdh      S |j                  di      t        dgk7  rt        dj      |j                  dk      dlk7  rFt        dmdt        t        dft        |j                  d            dn|j                  dk       do      S |j                  dp      s4t        dqdt        t        dft        |j                  d            drds      S | j                  dti       }g }t        |t              ro|j5                         D cg c]T  \  }}t        |t              r?|j                  d[      t2        k(  r'|j                  du      |j                  du      k(  r||fV }}}| j                  dvg       } t        | t6              st        dw      | D !cg c]O  }!t        |!t              r=|!j                  d[      t2        k(  r%|!j                  du      |j                  du      k(  r|!Q }"}!|s|"rt        dx      t        dydddd dzd{      S |D #cg c]  }#|#d   j                  d\      d|vr|# }$}#t        |$      dk7  rt        d}      |$d
   \  }%}&|"D !ch c]3  }!t        |!j                  d~      t              s#|!j                  d~      5 }'}!| j                  dg       }(t        |(t6              st        d      |(D #cg c]s  }#t        |#t              ra|#j                  d      |%k(  s7|#j                  d~      |%|&j                  d      hv s|#j                  d~      |'v r|#j                  d      dk(  r|#u })}#t        |)      dk7  rt        d      |)d
   }*|*j                  d      }+|+t,        t,        ddk7  rt        d      t        |&j                  d\            },|,dv r8t        ddFt,        t,        dft        |*j                  d            d|% dd      S |,dk(  r8t        ddFt,        t,        dft        |*j                  d            d|% dd      S t        d      c c}w c c}}w c c}!w c c}#w c c}!w c c}#w )Nr   r   r   enabledr   r   zonboarding workflow unavailabler   r   r   zcollection authority drift"WAIT_MATCHING_CUSTOMER_PUBLICATIONsystem)localr   zpublication:autor  r   r]   r      z*normalized schedule rewind authority driftREADY_CUSTOMER_RESUBMITr   z"submit_answer:schedule_constraintsrB  zNreply to the committed normalized rewind prompt with the exact unchanged valueREADY_CUSTOMER_ONBOARDINGzsubmit_answer:zanswer onboarding question z'/22 by replying to the committed prompt)ra   rr  z0workflow state alone never authorizes a callbackWAIT_RECONCILIATION_AUTHORITYzreconciliation:autor  z>resolved authority precedes its matching committed publicationz$committed publication identity driftr  r  r   rt  z,clarification field is not publication-boundREADY_CUSTOMER_CLARIFICATIONzsubmit_clarification:z5reply only to the committed field-bound clarificationz8resolved authority still has a clarification publication      r#   WAIT_DEPLOYoperatorzdeploy-final-candidatezWdeploy 4e9962be; startup must commit changed summary generation 25 before any UI actionWAIT_CANDIDATE_PUBLICATIONz1candidate-bound summary body is not yet committedrs  ru  rv  r_   u<   press latest 수정 once; generation 24/message 207 is staleSTOP_CUSTOMER_SUMMARY_QUALITYzdo-not-attest   WAIT_CANONICAL_RECONCILIATIONzBnormalized answers are not yet baseline-valid in a new publicationREADY_CUSTOMER_ATTESTattestz6press the matching committed attestation button once; r   z"onboarding publication unavailableowner_reviewREADY_OWNER_ONBOARDING_APPROVEowner_okz7press Approve once; readiness finalization is automaticsafety_holdSTOP_SAFETY_HOLDzclinical-review-required>   ready
finalizingr  WAIT_AUTOMATIC_READINESSzautomatic-finalization!READY_OPERATOR_ACTIVATION_CUTOVERz!dualcoach_admin:customer:activatezbrun only after checklist evidence exists; commits registry activation then bootstrap g5->g6 ACTIVEzunknown onboarding outcomer   r   z.activation cutover is not atomically committedr   r   rX   r   READY_OPERATOR_DISABLEzcustomer_admin:disablezCdisable exact customer, then stop service and await cleanup handoffREADY_CLEANUP_HANDOFFzsealed-cleanup:dry-runzIservice must be inactive; use sealed cleanup dry-run -> execute -> verifyz/active lifecycle customer unexpectedly disabledr   READY_CUSTOMER_START_CHECKINzsend:checkinz'send checkin, then press Begin check-inr[   zcheckin route driftr   rV  READY_CUSTOMER_CHECKIN_ANSWERzcheckin:z"answer the visible check-in promptr   READY_CUSTOMER_CHECKIN_SUMMARYzcheckin:finalizezconfirm the visible summaryr   r   r   zgeneration authority driftz&generated result lacks draft authorityWAIT_AUTOMATIC_GENERATIONzgeneration:autoz.no human action; wait for generated owner card>   heldsentrejected
supersededz&draft identity is duplicate or unknownrj  r   zowner card authority driftdraft_idgeneration_token	publishedz'exact owner generation card unavailabledestinationr   zowner card route drift>   editedcreatedREADY_OWNER_DRAFT_REVIEWzdraft:z:reviewz;choose regenerate or edit if needed; otherwise approve onceapprovedREADY_OWNER_EXPLICIT_SENDz:sendz9approval never sends; press Send to customer exactly oncezunknown draft outcome)r   r   r   r   r\  rI   rW   r  r   r   r5   r  rV   re  r   r  r^  r?   r8  r   rc  rp  r   r   r   r   r   rc   )-r   r   r   r   r}  r   r   committed_collectionr  r   r]   	committedry  r  r  r  r  genmidr  r   
body_boundra  quality_detailr   r   r   wr   matchedr   r   r   grelevant_generationsr   r   diddrgeneration_tokenscards_valuer   carddestrX   s-                                                rP   classifyr    s   a	+A	*A	
z	Ba:a#666155#$GuuW~.."d# !BCCBFF7O$L VVH%FF|3&a6.GCK.G$%ABB /H$%ABB#8#; #+8"&  +..y9G-11,?J-11,?Jw-;;w'<7
#3.
#3.8"&  Vq(?*;B*?()UVV-sO
O8d	 	 +3J  014VaZL@gh  *!,	** 8"&M   	*Ggt,,,04I 3")  FOBG^^]G$(>>;;/0NB8"&[  #|4J"|4JJs*d:.>c.I$%KLLCj/C 01Nnd333g&,6&}5g>;;45>!<  &*M  2sO+E73R  %/8"&U  .b'='RJ2I"c)$78OK!%""&0x  0"&N  *9)A&J"9-@!A_!T!1" !3 3/V	 	 3"#)  Rx5g>3")_  *EG]G*&J 3"#)  '33'H !
 
 *!W5	)T* !EFF]]<0
]]<0

3&$z*:#*E !GHH*oN"0S)I	 	 M!"*  ++$.",  33t	 	 9::uuW~!QUU<%8A%=MNN	lBAH!T XXZ
!T"n%,h>1	  	 
 ((\  #$^
 	
 NOO	hAa*sO<
 	
 	uuW~(C(233uuV}	!+sOl#$quuV}o&7
 	
 55%&,sOl#$0
 	
 UU8R FG&$ 
&1!T"n%,l#quu\'::	 F& 	 
 %%r*Kk4(9:: AaEE.!S(EE,155#66	 	
    !IJJ'C
 	
 AQ488H%OO 	
  
 6{aEFFQiGC 4 41
155>SV8Wg 4   %%$Kk4(9:: 
AaEE*$uuW~#rvv.@'A!BBuuW~!22EE'Nk) 	
 
 
 5zQFGG8D88M"D5UDD566!"F&&&CL&'SE!P
 	
 'CL&'SEN
 	
 0
11g
B
(
s.   Al Al!Al'l,$l13l19A8l6c                    t        j                  t        j                  | dd      j	                               j                         S )NTr   r   r   )rl   rm   r}   r   r   ro   )r   s    rP   
event_hashr  c  s3    >>

1<CCEikrO   c                $   | j                   j                  dd       | j                   j                  d       d}| j                         r=| j	                         j                         }|rt        j                  |d         d   n|}t        | j                         r t        d | j                         D              nd|d	|}t        |      |d<   t        j                  | t        j                  t        j                  z  t        j                  z  t        j                   z  d
      }t        j"                  |t        j$                  |dd      dz   j'                                t        j(                  |       t        j*                  |       y )NTparentsexist_ok  @0000000000000000000000000000000000000000000000000000000000000000r  event_sha256c              3      K   | ]  }d   yw)r   NrN   )r  rb  s     rP   r  zappend_event.<locals>.<genexpr>r  s     /;a;s   r   )schemasequenceprevious_event_sha256  r   r  rI  )parentmkdirchmodrt   r   r   r}   r~   SCHEMAsumopenr  rz   O_WRONLYO_CREATO_APPEND	O_CLOEXECwriter   r   fsyncclose)patheventpreviousrW  rowfds         rP   append_eventr  i  s#   KKdT2KKeH{{} ++-<A4::eBi(8x37;;=C/499;//a!) 	C %S/C	r{{RZZ/"++=Le	TBHH
TZZt
CdJRRT HHRLHHRLrO   c                   | j                   j                  dd       | j                   j                  d       t        j                  | t        j
                  t        j                  z  t        j                  z  d      }t        j                  |t        j                  |dd      dz   j                                t        j                  |       t        j                  |       y )NTr  r  r  r   r  rI  )r  r  r  rz   r  r  r  O_EXCLr  r}   r   r   r  r  )r  r   r  s      rP   securer    s    KKdT2KKe	r{{RZZ/"));U	CBHHR$**Q$:FMUUWXHHRLHHRLrO   c                 N    t         t        t        t        t        t
        t        dS )N)	successorcorewheelplan	golden_v6recovery_v6consent_receipt)r   r
   r   r   r   r   r   rN   rO   rP   r   r     s!    " rO   c                     t         j                         D ](  \  } }t        t        | z        |k7  st	        d|         y )Nzinstalled runtime drift: )r>   r   rq   SITErI   )rp   r   s     rP   runtime_checkr    s9    1tax=A #<QC!@AA  rO   c                     t        j                  d d      } | j                  t        j                  t        j
                  z        }|dk  rt        d      t        |      S )NT	use_errnor   zinotify init failed)ctypesCDLLinotify_init1rz   r  
O_NONBLOCKrI   r   )libcr  s     rP   initfdr    sK    ;;tt,D			BLL2==8	9B	Av233r7NrO   c                  4    e Zd ZddZddZd	dZd
dZddZy)Watcherc                Z    |j                         | _        t               | _        i | _        y rk   )resolver   r  r  watches)re   r   s     rP   __init__zWatcher.__init__  s    LLN	((*rO   c                    t        j                  | j                        D ]<  \  }}}|D cg c]  }|t        vs| c}|d d  | j	                  t        |             > y c c}w rk   )rz   walkr   SKIPr   r   )re   r   dirsrb  r   s        rP   add_treezWatcher.add_tree  sP    ''$)),JAtQ"&8$Q!4-q$8DGHHT!W -8s
   A A c                2   |j                         s|j                         sy t        j                  d d      }|j	                  | j
                  t        j                  |      t              }|dk  rt        d|       || j                  t        |      <   y )NTr  r   zwatch failed: )ru   is_dirr  r  inotify_add_watchr  rz   fsencodeMASKrI   r  r   )re   rp   r  r  s       rP   r   zWatcher.add  sq    <<>{{440""477BKKNDAq5 >!!566 SVrO   c                X   t        j                         }|j                  | j                  t         j                         	 |j                  |      }|st        d      t        j                  | j                  d      }d}|t        j                  z   t        |      k  rt        j                  ||      \  }}}}	|t        j                  z  }||||	z    j                  dd      d   j                         }
||	z  }|t        z  rt!        d      |t"        z  r| j$                  j'                  |t)                     |
z  }|dz  r!|j+                         r| j-                  |       |t        j                  z   t        |      k  r|j/                          y # |j/                          w xY w)Nz stage monotonic deadline expiredi   r       r   zinotify overflowi   @)	selectorsDefaultSelectorregisterr  
EVENT_READselectrS   rz   readEVsizer   unpack_fromsplitr   OVERrI   IGNOREDr  r   r   r  r   r  )re   secondsselr  r@  offr  maskrb  nnamechilds               rP   waitzWatcher.wait  sP   '')TWWi223	JJw'E&'IJJ''$''5)CC-3s8+ "sC 84Arww3q)//q9!<CCEq$;();<<'>((DF3d:*$HHUO -3s8+ IIKCIIKs    EF F)c                B    t        j                  | j                         y rk   )rz   r  r  rd   s    rP   r  zWatcher.close  s    
rO   N)r   r   rg   None)rp   r   rg   r  )r  floatrg   r  )rK   rL   rM   r  r   r   r  r  rN   rO   rP   r  r    s    +

!0rO   r  c                    t         d|j                  dk(  rdndt               |j                         t	        |       t        |       ddddd	S )
NREADY_CONTINUOUS_LIFECYCLEr  READY_FOR_DEPLOYARMED_POST_DEPLOYz recursive-inotify-before-actions  `T  z=no raw updates, tokens, customer answers, or provider content)r  rX   deployment_readinessr   initial_handoffcandidate_summary_revisionauthority_sha256event_subscriptionper_stage_timeout_maxtotal_timeout_maxprivacy)r  rX   r   rf   r{  r  )r   prompts     rP   	ready_docr/    sQ    . }}- $J!::<&@&C&qM@!%"R rO   c           
        t                t        | j                        }|j                          t	        | j                        }t        |       t        |      }t        ||      }t        | j                  |       | j                  dk(  r|j                          |S t        | j                  d|j                         t        |      d       t!        t#        j$                  |d      d       t'        j(                         }|}|j*                  }	 	 t-        | j.                  t'        j(                         |z
  z
  | j0                  t'        j(                         |z
  z
        }|dk  rt3        d      |j5                  |       t	        | j                        }	t        |	      t        |      k(  rt7        ||	       t        |	      }
t        | j                  d	|j*                  |
j*                  |
j                         t        |	      d
       |
j*                  |k7  rPt!        t#        j$                  |
j                         d      d       t'        j(                         }|
j*                  }|	|
}}|
j*                  dk(  r1t8        dt;               |
j                         d|j                          S # |j                          w xY w)Narm-onlyREADY)r  handoffr)  Tr   )flushr   z"bounded lifecycle deadline expired
TRANSITION)r  fromtor3  r)  r  "PASS_CONTINUOUS_TO_CLEANUP_HANDOFF)r  rX   r   final_handoff)r  r  profiler   r   r   r  r/  r  r  moder  r  eventsrf   r  printr}   r   time	monotonicrX   minstage_timeouttotal_timeoutrS   r  r   r  r   )r   r  r   rp   r   startstagelast	remainingr  qs              rP   runrI    s   O		AJJL		AaA!QA
177Avv			QUUW*Q-P 
$**Q$
't4NNEE88D%4>>#3e#;<4>>#3e#;<I A~&'KLLFF9		"A!}
1-1%A(HH(( uuw(21	 xx4djjD9F(xxaqAxx22$B (
%&UUW	 	
	I H 	
	s   FJ6 4J6 6Kc                    t        j                         } | j                  dd      }dD ]  }|j                  |      }|j	                  dt
        d       |j	                  dt
        d       |dk(  sJ|j	                  d	t
        d       |j	                  d
t        d       |j	                  dt        d        | j                         }	 |j                  dk(  rNd|j                  cxk  rdk  r.n t        d      d|j                  cxk  rdk  st        d       t        d      t        t        j                  t        |      d             y# t         $ r(}t        d| t"        j$                         Y d }~yd }~wt        t&        t(        t*        f$ r(}t        d| t"        j$                         Y d }~yd }~ww xY w)Nr<  T)r  ro  )r1  observez	--profile)r  ro  z--readyrK  z--eventsz--stage-timeoutr$  )r  r   z--total-timeoutr%  r   ztimeout bound invalidr4  zFAIL: )filer`     )argparseArgumentParseradd_subparsers
add_parseradd_argumentr   r  
parse_argsr<  rB  rC  rI   r>  r}   r   rI  rS   sysstderrOSError
ValueErrorKeyError)r   spr<  r   r   r   s         rP   mainrZ  "  sw   		 	 	"B					6B'MM$	{=	ytd;9NN:D4N@NN,5$NGNN,5%NH ( 	A66YAOO+t+ !899 45q3O%3O !899 4P !899djjQ401 qcl,GZ: qcl,s%   BE 	GFGGG__main__)rp   r   rg   rW   rk   )rp   r   r   objectrg   r\  )r   r\  rg   list[dict[str, object]])r^   rW   r   r   rg   rW   )rg   rW   )r   r]  r   rW   r   rW   rg   dict[str, object] | None)r   r   rg   rh   )r   rh   rg   r  )r   rh   r   rh   rg   r  )r   r\  rg   rW   )r   )r   rh   rY   rW   rg   r^  )r   rh   rg   zBtuple[dict[str, object], str, list[dict[str, object]], int] | None)r  rh   rg   tuple[bool, str])r  rh   rg   rW   )r   rh   r  rh   r  r   rg   r\   )
r   rh   r  rh   r  r   r  rh   rg   r\  )r  rh   rg   r\  )r   rh   rg   r\  )
r   rh   r  rh   r  r   r  rh   rg   r_  )r   rh   rg   r^  )r   rh   rg   rV   )r   rh   rg   rW   )r  r   r  rh   rg   r  )r  r   r   rh   rg   r  )rg   zdict[str, str]r  )rg   r   )r   rh   r.  rV   rg   rh   )r   zargparse.Namespacerg   rh   )R__doc__
__future__r   rN  r   r  rl   r}   rz   r  rv   structrT  r?  dataclassesr   pathlibr   typingr   r   ri   r
   r   r   r   r   r   r   r   r   r   r   r5   r>   r  r  r?   r@   Structr  r  r  r  r  RuntimeErrorrI   rS   rV   rq   r   r   r   r   r   r   r   r   r   r  r  r8  rK  rY  r^  rc  re  rp  r{  r  r  r  r  r   r  r  r  r/  rI  rZ  rK   
SystemExitrN   rO   rP   <module>ri     s,   T "      	    
  !  U	5 UPe PQu QPe PR RT% TS S, ,OU O4U 4% u  2 :|,n8z%g AC @B CE OQ	 	 Q 
0M  
M E  V]]6
	\ 		~ 	 $
 
 
.6:$-
)	 )),)58))EP3Dl:>/ '1,O,O #,O,O^'9'9G'9T*GZ5p%%*;%LO%%P


 
 	

 


	#@#@#@ #@ 	#@
 #@L)Xh2V,	B- -`(9x6 z
TV
 rO   