
    9Łj>              	         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Zddlm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' ed/      Z(d	ed0<   e(d1z  Z)d	ed2<   d3Z*d	ed4<   d5Z+d	ed6<    ejX                  d7      Z-d8Z.d9Z/d:Z0h d;Z1 G d< d=e2      Z3 G d> d?e3      Z4 ed@A       G dB dC             Z5dfdDZ6dgdhdEZ7didFZ8djdGZ9dkdHZ:	 	 	 	 	 	 	 	 dldIZ;dmdJZ<dndKZ=dodLZ>dpdMZ?	 dq	 	 	 	 	 drdNZ@	 	 	 	 dsdOZAdtdPZBdudQZC	 	 	 	 	 	 	 	 dvdRZD	 	 	 	 	 	 	 	 	 	 dwdSZE	 	 	 	 dxdTZFdydUZGdzdVZH	 	 	 	 	 	 	 	 	 	 d{dWZId|dXZJd}dYZKd~dZZLdd[ZMdd\ZNdd]ZOdd^ZPdd_ZQ G d` da      ZRddbZSddcZTdddZUeVdek(  r eW eU             y)zNContinuous, event-first Task26 lifecycle observer and role-handoff controller.    )annotationsN)	dataclass)date)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-v4z?/home/cube/.hermes/profiles/dualcoachtest/workspace/checkin_cliDOMAIN_PACKAGE_ROOTcheckin_cliDOMAIN_MODULE_ROOTu   활동 수준: 보통. 주 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__     /home/cube/projects/richard/traning coach/.omo/evidence/task26/task26-continuous-lifecycle-observer-v4-4e9962be/continuous_lifecycle.pyrM   rM   b       rS   rM   c                      e Zd Zy)LifecycleTimeoutNrN   rR   rS   rT   rW   rW   f   rU   rS   rW   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)r\   r]   r^   r_   ra   rb   rd   re   )	r\   r]   r^   listr_   ra   rb   rd   re   selfs    rT   docz
Prompt.docu   sI    kkIIZZ$**%//kk||kk	
 		
rS   N)returndict[str, object])rO   rP   rQ   __annotations__rd   re   rj   rR   rS   rT   rZ   rZ   j   s;    K
IJKGSFC

rS   rZ   c                d    t        j                  | j                               j                         S N)hashlibsha256
read_bytes	hexdigest)ps    rT   sharu      s     >>!,,.)3355rS   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_symlinkrM   statS_ISREGst_modest_uidosgetuidS_IMODEjsonloadsrr   JSONDecodeError)rt   defaultses       rT   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)
isinstancerg   dictget)vxks      rT   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)rb   
generationhs      rT   callbackr      sH      s!34;;=DDSIA6(!J<q,,rS   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   rR   rS   rT   exact_cutoverr      s4     	b
	
M	N 	 t		trS   c           	         | D cg c]#  }t        |j                  |d            |k(  s"|% }}t        |      dk(  r|d   S d S c c}w )Nrc      r   )r[   r   len)seqfieldvaluerr   s        rT   _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stepra   chat_idtopic_idfinalized_event_id)r   r   r   ra   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   r[   rx   	read_text
splitlinesstripr   r   rg   values)rootbootbrregcrnrwfpubsprr   outocwrbindr   activebsbdraftgensr   r   r   auditaps                            rT   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 generationr]   ownerzpublication role route driftr   r\   sent_auditedr   zduplicate sent_audited delivery)r   r   r   r   r   rM   r   r   setrg   addr   r   r   )r   r   cseenr   r   r   r]   r_   dterminals              rT   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   intrM   )ar   awbwr   bpavbvs           rT   validate_transitionr   6  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 ! 	rS   c                    t        j                  | dddd      j                         }t        j                  |      j                         S )NFT,r   )ensure_ascii	sort_keys
separators	allow_nan)r   dumpsencoderp   rq   rs   )r   encodeds     rT   canonical_digestr  U  sE    jj fh  >>'",,..rS   c                   | 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| }}|D cg c]  }t        |t              rn|j                  d	      t        k(  rV|j                  d      dk(  rBt        |j                  d            t        u r"t        |j                  d            t        u r| }}t        d |D        d      }	t        fd|D        d      }
t        |      dk(  r|	k(  r||
kD  r|S d S c c}w c c}w )Nr   r   	COMMITTEDpayloadr   ra   r   r   r   r]   r_   r   r   c              3  8   K   | ]  }t        |d            yw)r   Nr   ).0records     rT   	<genexpr>z(committed_publication.<locals>.<genexpr>  s     C1BvVL!	"1Bs   )r   c              3  \   K   | ]#  }t        |d          k  rt        |d          % yw)r   ra   Nr  )r  r	  r   s     rT   r
  z(committed_publication.<locals>.<genexpr>  s5      	
+6,'(:5 |$%+s   ),r   )r   r   r   typer   rg   r   r   r   maxr   )r   r]   r   r  ra   r   r	  matchescommitted_recordslatestprior_messager   s              @rT   committed_publicationr  `  sL    %%&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fd#JJ|$/JJw;.L)*c1L)*c1 	   C1BCF 	
+	

 M w<1v!5*}:T 	 Es   B<IBI"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   rg   r  r   r   r[   r   r6   r   append)r   r  r	  r  r  r  r  keyr   unsignedtypedr   items                rT   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/   r\   >   noneprovidedFzstructured answer unavailable: r0   )Fz#health review input requires reviewr1   Tzgoal=z; activity=z; health=no-review)r   r   r[   r   )r  
goal_valuegoalactivity_valueactivityr   r   s          rT   summary_qualityr@    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FrS   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 )Nrc   , c              3  2   K   | ]  }t        |        y wro   )r[   r  r%  s     rT   r
  z7authoritative_summary.<locals>.value.<locals>.<genexpr>  s     734SY3s   )r   r   rg   joinr[   )r   r   rawr  s      rT   r   z$authoritative_summary.<locals>.value  sT    kk% ;#)sbyNc4 997377B7B3xrS   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 )	NrB  r\   r:     없음r   r;  rD  c              3  H   K   | ]  }t        |t              s|s|  y wro   r   r[   rF  s     rT   r
  z<authoritative_summary.<locals>.structured.<locals>.<genexpr>  s     Out
40E$dus   """)r   r   r   rg   rG  )r   rH  r   r  s      rT   
structuredz)authoritative_summary.<locals>.structured  s|    kk% #t$778& 778
**UD2IIIOuOO 	
rS   r(  r)  r*  r+  r&   r/  r0  r1  r2  r3  r4  r$   u    · c              3  >   K   | ]  \  }}| d  |         yw) NrR   )r  labelr   rM  s      rT   r
  z(authoritative_summary.<locals>.<genexpr>  s2      	
LE5 ':e$%&
s   ))u   알레르기r)   )u	   불내증r*   )u   종교·윤리 제한r+   )u   비선호 식품r,   )u   식품 선호r-   
u
   - 목표: u
   - 활동: r%   u   - 식사: 하루 r4   u   끼u   - 조리·예산: r2   r3   u   - 식사 시간: r5   u*   - 알레르기·불내증·식품 제한: u=   - 건강 관련 입력: 별도 검토 입력이 없습니다.)rB  )r   r[   r   r[   rk   r[   )r   r[   rk   r[   )r   r[   rG  )r  r   r=  r?  restrictionsrM  s   `    @rT   authoritative_summaryrS    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	

 
rS   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    입력 내용을 정리했어요rc   ))u   확인된 내용facts_ko)u   안전 관련 참고사항safety_observations_korR   c              3  <   K   | ]  }t        |t                y wro   rL  rF  s     rT   r
  z-candidate_attestation_text.<locals>.<genexpr>A  s      @28$
4%&s   c              3  &   K   | ]	  }d |   yw)z- NrR   rF  s     rT   r
  z-candidate_attestation_text.<locals>.<genexpr>E  s     &FvtD6{vs   )rc   u\   이 요약은 참고용이며 안전 판정·승인·활성화를 대신하지 않습니다.u=   내용이 맞으면 아래 확인 버튼을 눌러 주세요.rQ  u   

아래 버튼을 누르면 입력 확인이 저장되고 운영자 검토로 넘어갑니다.
이 단계에서 영양 코칭이 시작되거나 활성화되지는 않습니다.)
r   r   r   rS  r[   rg   tupleallextendrG  )
r   r  r  r  rU  summarylinestitler"  r   s
             rT   candidate_attestation_textra  ,  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	
 			%]	]rS   c                    t        | ||      }t        |d uxrC |j                  d      t        j                  |j                               j                         k(        S )Nbody_digest)ra  boolr   rp   rq   r   rs   )r   r  r  r  texts        rT   candidate_body_boundrf  T  sV     &hGDD 	TKK&'..*G*Q*Q*SS rS   c           	     ,   t        |       t        t              k7  s| j                  d      dk7  ry| j                  d      }t        |t              syt	        t
              }|t        j                  vr t        j                  j                  d|       	 t        j                  d      }t        t	        t        |dd                  j                         }|j                  t        j                               syt!        |       }|j#                  d	t$        d
dd       |j'                  |t)        j*                               }t        |dd       }t        |t              r|rt5        |      dkD  ryd|fS # t,        t.        t0        t2        f$ r Y yw xY w)Nr$   r7  )FNr%   r   z'checkin_cli.nutrition_onboarding_models__file__rc   z1.0	completedpendingunpublished)schema_versionr   session_statusreview_decisionpublication_status)as_ofi  T)r   r6   r   r   r[   r@   syspathinsert	importlibimport_moduler   getattrresolveis_relative_torB   r   updater   build_onboarding_baseliner   todayImportErrorOSError	TypeError
ValueErrorr   )r  	rationalepackagemodelssourcer  baseline
normalizeds           rT   shipped_baseline_validationr  a  sX    7|s6{"gkk2E&F*&T01Ii%%&Gchh7#(()RSc'&*b9:;CCE$$%7%?%?%ABw- &%, 	 	
 33G4::<3PX';TB
 j#&jC
Oc<Q	 )Z8 s   A%E7 ;AE7 7FFc                "    t        |       \  }}|S ro   )r  )r  valid_s      rT   baseline_valid_answersr    s    *73HE1LrS   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$   r7  r%   r5   r  )r   rd  r   r   r   r6   rD   )r   r  s     rT   normalized_rewindr    s    ll9%G7D! 	-LCs,,	-KK+,
:	- KK,-1CC	- #'1		-
 H, rS   c                    t        | ||      t        | |||      syd}t        fd|D              ryd}t        fd|D              syy)	N)Fz.publication body is not candidate-render-bound){r   r\   rB  u
   수정 전u    실제 총활동량은 불명확u   위험 신호r-  r7  r5  r8  r9  c              3  &   K   | ]  }|v  
 y wro   rR   r  tokenre  s     rT   r
  z.publication_summary_quality.<locals>.<genexpr>  s     
0iU5D=i   )Fz5publication contains forbidden internal or stale copy)u   - 목표: 유지u   - 활동: 보통u   주 3회u   60분u   6,000~8,000보u%   별도 검토 입력이 없습니다.c              3  &   K   | ]  }|v  
 y wro   rR   r  s     rT   r
  z.publication_summary_quality.<locals>.<genexpr>  s     3(u}(r  )Fz8publication lacks Korean goal/activity/no-review summary)Tz,candidate-render-bound Korean summary passed)ra  rf  anyr\  )r   r  r  r  	forbiddenrequiredre  s         @rT   publication_summary_qualityr    sf     &hGD|/'=' GI 
0i
00MH 3(33P?rS   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   ra      r  clarification_fieldREADY_CUSTOMER_REVISIONr   r   reviseuV   press the existing 수정 button, then resubmit the unchanged final canonical answer; )	r\   r]   r^   r_   ra   rb   
next_field
next_valuere   )r   r  r   r   r&  r@  r6   r  r   rf  r   r[   r   )r   r   r   	authorityr  r  r  r  r  
quality_okreasonr   r   ra   s                 rT   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
 rS   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   ra   r      z*normalized schedule rewind authority driftREADY_CUSTOMER_RESUBMITr   z"submit_answer:schedule_constraintsrJ  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)re   r  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   r  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 committedr  r  r  rc   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   r\   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   r^  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 unknownr  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   rd  rM   r[   r  r   r   r6   r  rZ   r  r   r&  rf  rC   r@  r   r  r  r   r   r   r   r   rg   )-r   r   r   r   r  r   r   committed_collectionr  r   ra   	committedr  r  r  r  r  genmidr  r   
body_boundr  quality_detailr   r   r   wr   matchedr   r   r   grelevant_generationsr   r   diddrgeneration_tokenscards_valuer   carddestr\   s-                                                rT   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   )rp   rq   r   r   r   rs   )r   s    rT   
event_hashr    s3    >>

1<CCEikrS   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   NrR   )r  r  s     rT   r
  zappend_event.<locals>.<genexpr>  s     /;a;s   r   )schemasequenceprevious_event_sha256  r   r  rQ  )parentmkdirchmodrx   r   r   r   r   SCHEMAsumopenr  r~   O_WRONLYO_CREATO_APPEND	O_CLOEXECwriter   r   fsyncclose)rr  eventpreviousr_  rowfds         rT   append_eventr    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HHRLrS   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  rQ  )r  r  r  r~   r  r  r  O_EXCLr  r   r   r   r  r   )rr  r   r  s      rT   securer    s    KKdT2KKe	r{{RZZ/"));U	CBHHR$**Q$:FMUUWXHHRLHHRLrS   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   rR   rS   rT   r   r     s!    " rS   c                     t         j                         D ](  \  } }t        t        | z        |k7  st	        d|         y )Nzinstalled runtime drift: )r?   r   ru   SITErM   )rt   r   s     rT   runtime_checkr    s9    1tax=A #<QC!@AA  rS   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_init1r~   r  
O_NONBLOCKrM   r   )libcr  s     rT   initfdr    sK    ;;tt,D			BLL2==8	9B	Av233r7NrS   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 ro   )rw  r   r  r  watches)ri   r   s     rT   __init__zWatcher.__init__  s    LLN	((*rS   c                    t        j                  | j                        D ]<  \  }}}|D cg c]  }|t        vs| c}|d d  | j	                  t        |             > y c c}w ro   )r~   walkr   SKIPr   r   )ri   r   dirsr  r   s        rT   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: )ry   is_dirr  r  inotify_add_watchr  r~   fsencodeMASKrM   r   r   )ri   rt   r  r  s       rT   r   zWatcher.add  sq    <<>{{440""477BKKNDAq5 >!!566 SVrS   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selectrW   r~   readEVsizer   unpack_fromsplitr   OVERrM   IGNOREDr   r   r   r(  r   r   )ri   secondsselr  rH  offr  maskr  nnamechilds               rT   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 ro   )r~   r   r  rh   s    rT   r   zWatcher.close  s    
rS   N)r   r   rk   None)rt   r   rk   rD  )r:  floatrk   rD  )rO   rP   rQ   r!  r&  r   rA  r   rR   rS   rT   r  r    s    +

!0rS   r  c                    t         d|j                  dk(  rdndt               |j                  dk(  rdnd|j                         t	        |       t        |       dd	d
ddS )NREADY_CONTINUOUS_LIFECYCLEr  READY_FOR_DEPLOYARMED_POST_DEPLOYr  PASS_SHIPPED_CHECKIN_CLINOT_APPLICABLEz recursive-inotify-before-actions  `T  z=no raw updates, tokens, customer answers, or provider content)r  r\   deployment_readinessr   baseline_validationinitial_handoffcandidate_summary_revisionauthority_sha256event_subscriptionper_stage_timeout_maxtotal_timeout_maxprivacy)r  r\   r   rj   r  r  )r   prompts     rT   	ready_docrX    sh    . }}- $J }} 77 '!!::<&@&C&qM@!%"R) rS   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  handoffrR  Tr   )flushr   z"bounded lifecycle deadline expired
TRANSITION)r  fromtor\  rR  r  "PASS_CONTINUOUS_TO_CLEANUP_HANDOFF)r  r\   r   final_handoff)r  r  profiler&  r   r   r  rX  r  r  moder   r  eventsrj   r  printr   r   time	monotonicr\   minstage_timeouttotal_timeoutrW   rA  r   r  r   )r   r  r   rt   r   startstagelast	remainingr>  qs              rT   runrr    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)Nre  T)r  r  )rZ  observez	--profile)r  r  z--readyrt  z--eventsz--stage-timeoutrL  )r  r   z--total-timeoutrM  r   ztimeout bound invalidr]  zFAIL: )file      )argparseArgumentParseradd_subparsers
add_parseradd_argumentr   rE  
parse_argsre  rk  rl  rM   rg  r   r   rr  rW   rq  stderrr}  r  KeyError)r   spre  r   r   r   s         rT   mainr  V  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__)rt   r   rk   r[   ro   )rt   r   r   objectrk   r  )r   r  rk   list[dict[str, object]])rb   r[   r   r   rk   r[   )rk   r[   )r   r  r   r[   r   r[   rk   dict[str, object] | None)r   r   rk   rl   )r   rl   rk   rD  )r   rl   r   rl   rk   rD  )r   r  rk   r[   )r   )r   rl   r]   r[   rk   r  )r   rl   rk   zBtuple[dict[str, object], str, list[dict[str, object]], int] | None)r  rl   rk   tuple[bool, str])r  rl   rk   r[   )r   rl   r  rl   r  r   rk   r`   )
r   rl   r  rl   r  r   r  rl   rk   rd  )r  rl   rk   ztuple[bool, str | None])r  rl   rk   rd  )r   rl   rk   rd  )
r   rl   r  rl   r  r   r  rl   rk   r  )r   rl   rk   r  )r   rl   rk   rZ   )r   rl   rk   r[   )rr  r   r  rl   rk   rD  )rr  r   r   rl   rk   rD  )rk   zdict[str, str]rC  )rk   r   )r   rl   rW  rZ   rk   rl   )r   zargparse.Namespacerk   rl   )X__doc__
__future__r   rx  r   r  rp   rt  r   r~   r.  rz   structrq  rh  dataclassesr   datetimer   pathlibr   typingr   r	   rm   r   r   r   r   r   r   r   r   r   r   r   r6   r?   r  r  r@   rB   rC   rD   Structr4  r+  r8  r9  r$  RuntimeErrorrM   rW   rZ   ru   r   r   r   r   r   r   r   r   r  r  r&  r@  rS  ra  rf  r  r  r  r  r  r  r  r  r  r   r  r  r  rX  rr  r  rO   
SystemExitrR   rS   rT   <module>r     sk   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 
*!E U  0-? E ?M  
M E  V]]6
	\ 		~ 	 $
 
 
.6:$-
)	 )),)58))EP3Dl:>/ '1:: #::z'9'9G'9T*GZ5p%%*;%LO%%P


 
 	

 

B
	%@%@%@ %@ 	%@
 %@P)Xh2V,	B- -`29x6 z
TV
 rS   