
    jK                    h   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mZ ddlmZ ddlmZ dZdZd	Zd
ZdZdZdZdZdZdZdZdZdZdZdZdZdZ dZ!dZ"dZ#dZ$ejJ                   e&edd      z  Z' ee(      jS                         jT                  Z+e+jX                  d   Z-e-dz  Z.e-dz  d ez   z  d!z  Z/e-d"z  Z0e.d#z  Z1e.d$z  Z2e.d%z  Z3d&Z4 G d' d(e5      Z6d;d)Z7d<d*Z8d+d,d=d-Z9d+d,d>d.Z:d?d/Z;d@d0Z<dAd1Z=dBd2Z>dCd3Z?dDd4Z@dEd5ZAd@d6ZBdFd7ZCdGd8ZDdHd9ZEeFd:k(  r eG eE             y)IzNAppend-only, read-only adjudication of the completed Task26 replacement claim.    )annotationsN)datetime)Path)Any@2e0894eac92bc396cc4723bf1f18ebc653b95018dd41574df435941c235da925@af4a9d0a1ffffb6eb7551c1d6dc2b32853ca6d024332a4f8f5702bbf992f141b@d816dbbd6a27d5826b251d279a9831de096ef7cd79b5fd131ceff7253b7369be@ec6acee7743c4cd50c84fb28d2e2c2fafd0d62165cacbbaadc2a72e0307e206d@c7c53db41858d53a6860baa98a1bc03f33e19a82048501c2a4b7c25dfddd3855@a9b73fcd6f46884857c14fdb94db0618f306225e9c17ed36b9a5b3a343bcdd48@ee05174e7287a87f9c5e40dae1034cf8b3228edc6b9516df8e6349667baffc7c@ebb97e82ac464abb900bc3a690a5c6c321c1cfd6401d3fdf40c283ae2faf8795@4415e362f61e7500f98f99c5b468828076f61f30a34eebe8b2863fc9faabeaadcb_v4olwxbpSQatMtVLR4QLmw@63bdc993abc7b4f0025e69b10246faf8b5f4da3b7c040f02987a77bef3fa7c59cb_PCczfFXoI4GjvCxLBs1oRA@53b4f95b5b4db9a611128976a7b951bbe22d9619e05b2ff07fadf5b02f9a5380%task26_live_2e_r2_20260815_8527916639
8527916639158159@145515d5e110dcebb94fcaa554bcee29544b3a75dcfe058fae944ea3b70042b2@cc0e4b697633150f3626daa8cf5bb4825bc96243f1a3dfadb6c9f540cad9906c@b41060dea28eb3bbb83217068f5218d5df2c879dba00e73c9ca4e577a6049dadz$hermes-gateway-dualcoachtest.service
O_NOFOLLOW   z9.omo/evidence/task26/task26-invite-harness-st_01a0056a-v3z.omo/evidence/task26z"task26-repaired-archive-successor-z.artifacts/hermes_agent-0.17.0-py3-none-any.whlz,.omo/plans/dualcoach-production-readiness.mdz+task26-live-2e-r2-preparation.redacted.jsonz-task26-live-2e-r2-customer-draft.private.jsonz-task26-live-2e-r2-invite-handoff.private.json)zdata/customersz(data/activation-completion-notices.jsonlz$data/customer-activation-audit.jsonlz%data/customer-activation-journal.jsonz%data/customer-activation-receipt.jsonz2data/nutrition-onboarding-projection-journal.jsonlzdata/scheduled-deliveries.jsonlz$data/scheduled-deliveries-fence.jsonzdata/customer-schedule-claimszdata/recovery-auditszdata/activation-readinessc                      e Zd Zy)AdjudicationErrorN)__name__
__module____qualname__     X.omo/evidence/task26/task26-post-claim-adjudicator-st_01a007d9/post_claim_adjudicator.pyr   r   >   s    r#   r   c                H    t        j                  |       j                         S N)hashlibsha256	hexdigest)raws    r$   shar+   B   s    >>#((**r#   c                T    t        j                  | dddd      j                  d      S )NFT),:)ensure_ascii	sort_keys
separators	allow_nanzutf-8)jsondumpsencode)values    r$   	canonicalr7   F   s&    ::e%4Jbghoopwxxr#   Tprivatec               H   t        j                  | t         j                  t        z        }	 t        j                  |      t        j                  j                        r0j                  dk7  s!j                  t        j                         k7  rt        d|        |r/t        j                  j                        dvrt        d|        g }t        j                  |d      x}r*|j                  |       t        j                  |d      x}r*t        j                  |      d}t        fd|D              t        fd|D              k7  rt        d	|        d
j!                  |      t        j"                  |       S # t        j"                  |       w xY w)N   zunsafe evidence file: >        znon-private evidence file: i   )st_devst_inost_modest_nlinkst_uidst_sizest_mtime_nsst_ctime_nsc              3  6   K   | ]  }t        |        y wr&   getattr).0keybefores     r$   	<genexpr>zread_regular.<locals>.<genexpr>W   s     8#%   c              3  6   K   | ]  }t        |        y wr&   rG   )rI   rJ   afters     r$   rL   zread_regular.<locals>.<genexpr>W   s     AhagZ]'%QTBUagrM   zevidence changed during read: r#   )osopenO_RDONLYO_FLAGSfstatstatS_ISREGr@   rA   rB   getuidr   S_IMODEreadappendtuplejoinclose)pathr9   fdchunksblockfieldsrO   rK   s         @@r$   read_regularrc   J   sA   	r{{W,	-B"||FNN+v!/Cv}}XZXaXaXcGc#&<TF$CDDt||FNN3>I#&A$$HII wwr;//e/MM%  wwr;//e/o888EAhagAh<hh#&DTF$KLLxx
s   C&F
 AF
 
F!c                   	 t        j                  t        | |            }t        |t              st        d|        |S # t        t         j                  f$ r}t        d|        |d }~ww xY w)Nr8   zinvalid JSON: zJSON root is not an object: )r3   loadsrc   UnicodeDecodeErrorJSONDecodeErrorr   
isinstancedict)r^   r9   r6   excs       r$   	read_jsonrk   ^   st    B

<g>? eT"">tf EFFL	  4 45 B. 78cABs    A A/A**A/c                n   | j                   j                  ddd       | j                   j                         rt        d      t	        j
                  | t        j                  t        j                  z  t        j                  z  t        z  d      }	 t        |      dz   }t	        j                  |d       d}|t        |      k  r+|t	        j                  |||d        z  }|t        |      k  r+t	        j                  |       t	        j                  |       y # t	        j                  |       w xY w)Ni  T)modeparentsexist_okzreceipt directory is a symlinkr=      
r   )parentmkdir
is_symlinkr   rP   rQ   O_WRONLYO_CREATO_EXCLrS   r7   fchmodlenwritefsyncr]   )r^   r6   r_   r*   offsets        r$   exclusive_receiptr|   h   s    KK5$>{{ @AA	r{{RZZ/"));gEu	MB&
		"es3xbhhr3vw<00F s3x

s   AD 2D D4c                    t         t        ft        t        ft        t
        ft        t        ft        t        ff} | D ]B  \  }}t        t        ||t         t        hv            |k7  s,t        d|j                          t        t              t        t        t        t         t"        t$        ddt        t&        d
}t)        fd|j+                         D              rt        d      S )Nr8   zsealed input hash mismatch: r;   PREPARED)
candidate_digestwheel_sha256plan_sha256ledger_sha256
session_idsid_hash
generationstatehandoff_sha256start_token_sha256c              3  L   K   | ]  \  }}j                  |      |k7    y wr&   get)rI   rJ   r6   preparations      r$   rL   z validate_pins.<locals>.<genexpr>   s&     
L;KZS%;??35(;K   !$zv3 preparation binding mismatch)WHEELWHEEL_SHA256PLANPLAN_SHA256PREPARATIONPREPARATION_SHA256DRAFTDRAFT_SHA256HANDOFFHANDOFF_SHA256r+   rc   r   namerk   	CANDIDATEPREPARATION_LEDGER_SHA256
SESSION_IDSID_HASHSTART_TOKEN_SHA256anyitems)pinsr^   wantedexpectedr   s       @r$   validate_pinsr   x   s    L!D+#6FX8YL!G^#<>Df|D$udm*CDEO#&B499+$NOO  K(K%|"5N ha~0H 
L8>>;K
LL ABBr#   c                   | dz  }t        |      }|j                         }t        j                  |      }t	        |t
              rt        |      h dk7  rt        d      |d   |d   d}|d   dk7  s|d   t        t        |            k7  rt        d	      |d   t        k7  rt        d
      t	        |d   t              rt        |d         dk7  rt        d      ||fS )Nz:data/onboarding/telegram-customer-bootstrap-v1/ledger.json>   digestschemasessionszbootstrap ledger shape mismatchr   r   r   r   ztelegram-customer-bootstrap-v1r   z bootstrap ledger digest mismatchz,current bootstrap ledger is not sealed state   z&bootstrap session cardinality mismatch)rc   rU   r3   re   rh   ri   setr   r+   r7   CURRENT_LEDGER_DIGESTlistrx   )profiler^   r*   infor6   payloads         r$   validate_ledgerr      s    QQD
t
C99;DJJsOEeT"c%j4T&T ABBxeJ6GHGX::eHoQTU^_fUgQh>h BCCX// NOOeJ'.#eJ6G2HA2M HII$;r#   c           
       
 | d   \  
t         t        ddg g dd dd	}t        
fd|j                         D              rt	        d      
j                  d      }t        |t              r|j                  d	      t	        d
      j                  d      t        k7  sj                  d      t        k7  rt	        d      t        t         k(  st        t        k(  rt	        d      dddg dt        d d}t        fd|j                         D              rt	        d      j                  d      }dt        t        dt        d}||gk7  rt	        d      t        t              }j                  d      }t        |t              st	        d      t        |      t        |      z  D ch c](  }|j                  |      |j                  |      k7  s'|* }	}|	d	hk7  s)|j                  d	      |j                  d	      t        k7  rt	        d      j                  d      t!        t#        |            k7  rt	        d      
|fS c c}w )Nr   EXPIREDr   r   )	r   r   r   r   role_claimsrecovery_attemptsconsent_publication_attemptconsent_card_message_idrecovery_attempt_generationc              3  L   K   | ]  \  }}j                  |      |k7    y wr&   r   )rI   rJ   r6   priors      r$   rL   z!exact_sessions.<locals>.<genexpr>   s%     
L5KzsE599S>U"5Kr   zold EXPIRED session changedcustomer_draftcustomer_user_idz$old EXPIRED customer binding changedr   r   z%replacement identity binding mismatchz$replacement identity is not distinctAWAITING_CONSENT   r;   )r   r   r   r   r   r   failure_codec              3  L   K   | ]  \  }}j                  |      |k7    y wr&   r   )rI   rJ   r6   replacements      r$   rL   z!exact_sessions.<locals>.<genexpr>   s&     
R;QZS%;??35(;Qr   z replacement final state mismatchr   customer0)roleuser_idchat_idtopic_id
message_idz>accepted role claim is not exactly one sealed private-DM claimz%replacement customer draft is invalidz4customer draft changed beyond customer_user_id claimcustomer_draft_digestz&claimed customer draft digest mismatch)PRIOR_SESSION_IDPRIOR_SID_HASHr   r   r   r   rh   ri   r   r   CONSENT_CARDACTORCLAIM_MESSAGErk   r   r   r+   r7   )ledgerprior_expectedprior_draftexpected_finalclaimswanted_claimdraft_beforedraft_afterrJ   changedr   r   s             @@r$   exact_sessionsr      sE   
+E;&NY'(T'(	N 
L^5I5I5K
LL =>>)),-Kk4(KOO<N,O,[ FGG|$
2kooj6QU]6] GHH%%^)C FGG#1UV#/N
 
R>;O;O;Q
RR BCC__]+F&5U #=BL, `aaU#L//"23Kk4( GHH!,/#k2BBtBslFVFVWZF[_j_n_nor_sFssBGt%&&,*:*:;M*N*Z^i^m^m  oA  _B  FK  _K VWW./3y7M3NN HII+|++ us   .(IIc                2   t        |      }|j                  |t        t        |            dd|d   g dd dg d
       | d   ||gd}i |dt        t        |            i}t        t        |            }|t        k7  rt        d	      ||d   | d   |d
   dS )Nr~   r;   
created_atr   )
r   r   r   r   
updated_atr   r   r   r   r   r   r   r   z9preparation-to-current exact digest relationship mismatchr   )preparation_ledger_sha256prepared_payload_digestcurrent_payload_digestclaimed_draft_digest)ri   updater+   r7   r   r   )r   r   r   draftpreparedr   prepared_documentreconstructeds           r$   digest_relationshipr      s    K HOO#i>N:O1K<U!#'   )x7HIGF7FHc)G2D.EF	"345M11 [\\%2#4X#>"("2 +,C D	 r#   c                   t        t              }|j                  d      }t        |t              r|j                  d      st        d      |j                  d      t        k7  s t        |j                               t        k7  rt        d      t        |dd  j                  d            t        k7  rt        d      g }| j                  d	      D ]`  }|j                         r|j                         r$	 |j                         t        |d
      v r|j!                  |j#                                b |t        j#                         gk7  rt        d      t        t        dddS # t        t$        t&        f$ r Y w xY w)Nstart_tokenrc1_z private handoff token is invalidr   z&private handoff token/session mismatchr   asciiz!private handoff SID hash mismatch*Fr8   z6raw invite token leaked outside sealed private handoffr;   T)token_sha256r   raw_token_hit_countraw_token_only_private_handoff)rk   r   r   rh   str
startswithr   r   r+   r5   r   r   rglobis_filers   rc   rZ   resolveOSErrorPermissionError)evidence_roothandofftokenhitsr^   s        r$   token_bindingr      sD    GKK&EeS!)9)9&)A BCC{{< J.#elln2EI[2[ HII
59G$%1 CDDD##C(||~!2	||~dE!BBDLLN+ ) !"" XYY.H#$N N	 "7O< 		s   7<E''E>=E>c                L   t        | dz        }|j                  d      }t        |t              st	        d      |rt	        dt        |       d      t        D cg c]  }| |z  j                         s| }}|rt	        ddj                  |      z         dddd	S c c}w )
Nzcustomers/registry.json	customersz(customer registry cardinality is UNKNOWNz,required no customer registry row, observed z row(s)z9activation/checkin/generation/delivery authority exists: r-   r   )customer_registry_rowsactivation_authorities'checkin_generation_delivery_authorities)	rk   r   rh   r   r   rx   ABSENT_AUTHORITIESexistsr\   )r   registryr   relativepresents        r$   authority_absencer     s    #<<=H[)Ii& JKK"NsS\~N^^e fgg(:\(:Hw?Q>Y>Y>[x(:G\ [^a^f^fgn^o opp&'178: : ]s   B!6B!c                 b   t        j                  dddt        ddddddg
ddd	
      } t        d | j                  j                         D              }| j                  s(|j                  d      dk7  s|j                  d      dk7  rt        d      	 t        |j                  dd            }t        d| d      j                         j                  d      }t        d t        d| d      j                         j                  d      D              }g d}|d d |k7  s|j                  d      dk7  rt        d      t        d      }t        t         t"        d}i }	|j%                         D ]6  \  }
}t'        ||
z  d	      }t)        |      |k7  rt        d|
       ||	|
<   8 t+        j,                  t.              5 }|j%                         D ]5  \  }
}d|
z   }t)        |j1                  |            |k7  s)t        d |
        	 d d d        |d!z  j3                         }|d"z  j3                         }|d#z  j3                         }|d$d%d&f|d'd(f|d)d*d+ff}t5        d, |D              rt        d-      d.||	g d/d0S # t        t        f$ r}t        d      |d }~ww xY w# 1 sw Y   xY w)1N	systemctlz--usershowz-pActiveStateSubStateMainPIDTF)textcapture_outputcheckc              3  J   K   | ]  }d |v s|j                  d d        yw)=r;   Nsplit)rI   lines     r$   rL   z/source_semantics_and_service.<locals>.<genexpr>  s%     [1KsVZ{$**S!$1K   	##activerunningz$sealed service is not active/runningr   z/proc/z/cmdline    c              3  J   K   | ]  }d |v s|j                  d d        yw)   =r;   Nr  )rI   items     r$   rL   z/source_semantics_and_service.<locals>.<genexpr>
  s2       C;q4uy  ~B  vB4::dA.;qr  z/environz#service process identity is UNKNOWN)s9   /home/cube/projects/richard/hermes-agent/.venv/bin/pythons   -ms   hermes_cli.mains	   --profiles   dualcoachtests   gateways   runs   VIRTUAL_ENVs.   /home/cube/projects/richard/hermes-agent/.venvz service process binding mismatchz]/home/cube/projects/richard/hermes-agent/.venv/lib/python3.12/site-packages/gateway/platforms)telegram_customer_bootstrap.py+telegram_customer_bootstrap_registration.pytelegram.pyr8   z"active candidate module mismatch: zgateway/platforms/z!candidate wheel module mismatch: r  r  r  zcustomer_draft=draftz state=BootstrapState.REGISTERINGz!generation=current.generation + 1zadmin.register_customer(z&target=BootstrapState.AWAITING_CONSENTzreserve_consent_publication(zreserve_recovery_attempt(zbind_recovery_receipt(c              3  J   K   | ]  ^}t        fd |D                yw)c              3  &   K   | ]  }|v 
 y wr&   r"   )rI   fragmentsources     r$   rL   z9source_semantics_and_service.<locals>.<genexpr>.<genexpr>)  s     =f(xv%fs   N)r   )rI   r   r   s     @r$   rL   z/source_semantics_and_service.<locals>.<genexpr>)  s#     
_U^/&63=f==U^s    #z5candidate atomic claim/publication semantics mismatchzactive/running)zAPREPARED/g1 -> REGISTERING/g2 + one role claim + customer_user_idz"register one disabled customer rowz%REGISTERING/g2 -> AWAITING_CONSENT/g3z&bind owner no-op durable rewrite at g3z*reserve consent publication -> attempt1/g4z3reserve recovery -> recovery_attempt_generation1/g4z4bind provider receipt card159 -> AWAITING_CONSENT/g4)servicemain_pidcandidate_modulesnormal_path_transitions)
subprocessrunSERVICEri   stdout
splitlines
returncoder   r   intr   
read_bytesr  r   
ValueErrorBOOTSTRAP_MODULE_SHA256REGISTRATION_MODULE_SHA256TELEGRAM_MODULE_SHA256r   rc   r+   zipfileZipFiler   rY   	read_textr   )resultvaluespidcmdlineenvironmentrj   
wanted_cmdsitemodulessourcesr   r   r*   archivemember	bootstrapregistrationtelegram	fragmentss                      r$   source_semantics_and_servicerC    s   ^^[(FGT=Z^`jlpr{|!%d%IF[1I1I1K[[FFJJ}5AVZZPZE[_hEh FGGP&**Y,-uH-.99;AA%H  C4&X@V;W;b;b;d;j;jkp;q  C  C _Js|z![__^%DHy%y BCCopD*A7Q-G
 !Gf4$;6s8v#&H$OPP	 (
 
	7#MMOLD&)D0F7<<'(F2'*KD6(RSS , 
 
 88CCEIHHSSUL}$//1H	*,NPst	13[\	13NPhiI
 
_U^
__ WXX'Sw(	 	A Z  P EFCOP" 
 	s+   BJ 9J%;J%J"JJ"%J.c                \   t        j                  | d         }t        j                  | d         }t        j                  |j                  |j                        }||k  rt        ||z
  j                               dkD  rt        d      |j                         |j                         dddS )	Nr   r   )tzg{Gz?z.ledger event timestamp relationship is UNKNOWNTzNone durable RoleClaim(message_id=158) accepted by one start handler invocation)prepared_atone_claim_event_finalized_at%ledger_mtime_matches_final_transitionone_event_semantics)	r   fromisoformatfromtimestampst_mtimetzinfoabstotal_secondsr   	isoformat)r   ledger_infocreatedupdatedmtimes        r$   timestamp_evidencerU  7  s    $$[%>?G$$[%>?G"";#7#7GNNKEWUW_$C$C$E F M PQQ",,.PWPaPaPc59#su ur#   c                   t                t        |       \  }}t        |      \  }}}t        ||||      }t	        |      }t        ||      }	t               }
t        |       }i dddddt        dt        dt        dt        d	t        d
t        dt        ddddddddddddddddddddd|||	|
|dS )Nr   !task26-post-claim-adjudication-v1statusPASS_SUCCESSFUL_CLAIMr   r   r   r   actor_idclaim_message_idr   r   r   r   r   r   r;   old_expired_session_unchangedTreplacement_identity_distinctaccepted_role_claim_countconsent_publication_count,customer_draft_only_customer_user_id_changedr   z3redacted; hashes and identifiers only; no raw token)profile_mutationsnetwork_callsreplay_countprivacy)r   rU  service_proofabsence_proof)r   r   r   r   r   rU  rC  r  r   r   r   r   r   r   r   )r   r   r   r   r   r   r   relationshipr   
timestampsr!  absences               r$   
adjudicaterj  B  s`   O"7+LFD .v 6E;&vuk5IL-(E#K6J*,G(G57?AXI'5|ERT_ 	j #-e 6H 	"<	 29:L	
 	a
 7 	( 0OPT 	$Q )DQ 	7 AH MY j 7 r#   c                    t        j                  t              } | j                  dt        d       | j                  dt        d       | j                  dt        d       | j                         }	 t        |j                  |j                        }d}t)        |j*                  |       t,        j.                  j0                  j3                  t5        |d   t!        |j*                        d      dz          |S # t        t        t        t        t        t        j                  f$ r/}dd	t!        |      dt"        t$        t&        dddd
d}d}Y d }~d }~ww xY w)N)descriptionz	--profileT)typerequiredz--evidence-rootz	--receiptr   rW  FAILzredacted; no raw token)r   rX  blockerunknown_is_failurer   r   r   ra  rb  rc  rd  r   rX  )rX  receiptrp   )argparseArgumentParser__doc__add_argumentr   
parse_argsrj  r   r   r   r   r-  KeyError	TypeErrorr1  
BadZipFiler   r   r   r   r|   rr  sysr(  bufferry   r7   )parserargsr4  coderj   s        r$   mainr  [  s!   $$9F
$>
)tD
$>D
DLL$*<*<= dllF+JJI1AcRVR^R^N_&`adiijK w
HiI[I[\ ?6 XT&/!,1#$a57 s   4"C< <-E)%EE__main__)r*   bytesreturnr   )r6   r   r  r  )r^   r   r9   boolr  r  )r^   r   r9   r  r  dict[str, Any])r^   r   r6   r  r  None)r  r  )r   r   r  z%tuple[dict[str, Any], os.stat_result])r   r  r  z5tuple[dict[str, Any], dict[str, Any], dict[str, Any]])
r   r  r   r  r   r  r   r  r  r  )r   r   r  r  )r   r   r  r  )r   r  rQ  zos.stat_resultr  r  )r   r   r   r   r  r  )r  r+  )Hru  
__future__r   rs  r'   r3   rP   rU   r%  r{  r1  r   pathlibr   typingr   r   r   r   r   r   r   r   r   r   r   r   r   r   CUSTOMER_KEYr   r   r   r.  r/  r0  r'  	O_CLOEXECrH   rS   __file__r   rq   HERErn   ROOTV3r   r   r   r   r   r   RuntimeErrorr   r+   r7   rc   rk   r|   r   r   r   r   r   r  rC  rU  rj  r  r   
SystemExitr"   r#   r$   <module>r     s   T "    	   
    N	QPW ^ Z QSW . S(
M6\ _ [ 
0
,,\15
5H~&&||A	GG%%)MPY)YZ  ^N  	N<<@@
<<
>
> 	 	+y 15 ( .2  &"&,R,N0:3lu2, z
TV
 r#   