
    jC~                       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ZddlZddlmZ ddlmZ ddlmZ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-h d      Z.dZ/dZ0dZ1e	jd                   e3e	d d      z  Z4 ee5      jm                         jn                  Z8e8jr                  d!   Z:e:d"z  Z;e;d#ez   z  d$z  Z<e:d%z  Z=e;d&z  Z>e>d'z  Z?e>d(z  Z@e>d)z  ZAe8d*z  ZBe8d+z  ZCd,ZDe8d-z  ZEd.ZFe8d/z  ZGe;d0z  ZHe;d1z  ZI ed2      ZJ G d3 d4eK      ZLdVd5ZMdWd6ZNdXd7ZOd8d9dYd:ZPdZd;ZQd8d9d[d<ZRd\d]d=ZSd^d>ZTd_d?ZUd`d@ZVdadAZWdbdBZXdcdCZYdddDZZdEZ[dedFZ\dfdGZ]dgdhdHZ^dgdhdIZ_ G dJ dK      Z`didLZadjdMZbdkdNZcdldOZddmdPZedldQZfdldRZgdndSZhdodTZiejdUk(  r ek ei             y)pzSTask26 invite harness v2: reset-bound absent-ledger initialization and observation.    )annotationsN)Path)Any)parse_qsurlparse@2e0894eac92bc396cc4723bf1f18ebc653b95018dd41574df435941c235da925@af4a9d0a1ffffb6eb7551c1d6dc2b32853ca6d024332a4f8f5702bbf992f141b@d816dbbd6a27d5826b251d279a9831de096ef7cd79b5fd131ceff7253b7369be@7ace03c6dad33d2fc3ef223621cbca68a150fde8429932138e252fb8498ac582@8416cd7c83cab5540af2e1e01dbcc5b1bdfd49a59d8ef21ea49512c28d749218@a2e15845764e7041957ae4518096fe73f87ec35b57021980cdd4df3ea18ac00d@6fa1e309e0e0f663ca82131a393fcbaa189338ec4c29a1140d3003bece66e18c@7ef0eb8f4b27ab311a11909c25167df9493348d996319d009eec36a0ebf6f146@d2879b128573a9d75a55958d2fa3e1a24be1636f0a7a20affe8f2ef9b94dfd33@16497e3bb42dd97c66caabc4abd57aa692f32951f0c0d012d754d9988b9cde6a@d906f1f79b85c897981d328e06a9bd9503a6b9cf0ca4f58852ee5ad7926cdf2dcb_v4olwxbpSQatMtVLR4QLmw@63bdc993abc7b4f0025e69b10246faf8b5f4da3b7c040f02987a77bef3fa7c59%task26_live_2e_r2_20260815_8527916639@ee05174e7287a87f9c5e40dae1034cf8b3228edc6b9516df8e6349667baffc7c@4a3551a9bbccf9bba66ff6b6cfd9500e8e30db65b6244032af4972ea475511ef
8527916639
8693203710dual_coach_pilot_test_botz0gateway/platforms/telegram_customer_bootstrap.py@145515d5e110dcebb94fcaa554bcee29544b3a75dcfe058fae944ea3b70042b2>   ACTIVEFAILEDEXPIRED	CANCELLED         
O_NOFOLLOW   z.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-runbook-rebind-2e0894ea-st_01a0054ez!task26-golden-path-2e0894ea-v6.mdz&task26-recovery-runbook-2e0894ea-v6.mdzrunbook-binding-receipt-v6.jsonz*replacement-approval-receipt.redacted.jsonzschema-v3.json@5d11d2189049c5f3b438b107281a092322753cd2831a30bbb9e12b2df6160229zOPERATIONS-v3.md@c04b6abccaba4982cb8392c3d6d9585fb011aac6237b549bea3e7e1f84c576fcz-task26-live-2e-r2-customer-draft.private.jsonzPreset-controller-st_01a0054d/reset-baseline-completion-v1/readiness-receipt.jsonzHtask26-invite-harness-st_01a0056a-v2/task26-live-2e-expiry.redacted.jsonz6data/profile-reset-archives/task26-live-reset-2e0894eac                      e Zd Zy)HarnessErrorN)__name__
__module____qualname__     N.omo/evidence/task26/task26-invite-harness-st_01a0056a-v3/invite_harness_v3.pyr(   r(   E   s    r-   r(   c                H    t        j                  |       j                         S N)hashlibsha256	hexdigest)raws    r.   	sha_bytesr5   I   s    >>#((**r-   c                V    t        j                  | ddd      dz   j                         S )NT,:)	sort_keys
separatorsensure_ascii
)jsondumpsencode)values    r.   	canonicalrB   M   s'    JJuRVWZ^^ffhhr-   c                    | j                   | j                  | j                  | j                  | j                  | j
                  | j                  | j                  fS r0   )st_devst_inost_modest_nlinkst_uidst_sizest_mtime_nsst_ctime_ns)infos    r.   stablerM   Q   sB    KKdllDMM4;;LL$**D,<,<> >r-   Tprivatec                  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        |      t        t        j                  |            k7  rt        d|        dj!                  |      t        j"                  |       S # t        j"                  |       w xY w)N   zunsafe regular file: >   @  r"       zfile is not private: i   zfile changed during read: r-   )osopenO_RDONLYO_FLAGSfstatstatS_ISREGrF   rG   rH   getuidr(   S_IMODEreadappendrM   joinclose)pathrO   fdbeforechunkschunks         r.   read_regularrg   V   s)   	r{{W,	-B"||FNN+v!/Cv}}XZXaXaXcGc!6tf=>>t||FNN3;WW!6tf=>> wwr;//e/MM%  wwr;//e/&>VBHHRL11!;D6BCCxx
s   C&E2 AE2 2F	c                .    t        t        | d            S )NFrN   )r5   rg   )rb   s    r.   sha_fileri   h   s    \$677r-   c                   	 t        j                  t        | |            }t        |t              st        d|        |S # t        t         j                  f$ r}t        d|        |d }~ww xY w)NrN   zinvalid JSON: zJSON root is not an object: )r>   loadsrg   UnicodeDecodeErrorJSONDecodeErrorr(   
isinstancedict)rb   rO   rA   excs       r.   	read_jsonrq   l   sq    =

<g>? eT"9$@AAL	  4 45 =^D623<=s    A A/A**A/c                ^   | j                         }t        j                  |j                        r@t        j                  |j                        s!|j
                  t        j                         k7  rt        d|        t        j                  |j                        |k7  rt        d|        y )Nzunsafe directory: zwrong directory mode: )
lstatrZ   S_ISDIRrF   S_ISLNKrH   rU   r\   r(   r]   )rb   moderL   s      r.   require_directoryrw   v   s    ::<D<<%dll)Ct{{VXV_V_VaGa/v677||DLL!T)3D6:;; *r-   c                h   | j                   j                  ddd       | j                   j                         rt        d      t	        j
                  | t        j                  t        j                  z  t        j                  z  t        z  d      }	 t        |      }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)NrT   T)rv   parentsexist_okz"receipt parent cannot be a symlinkrS   r   )parentmkdir
is_symlinkr(   rU   rV   O_WRONLYO_CREATO_EXCLrX   rB   fchmodlenwritefsyncra   )rb   rA   rc   r4   offsets        r.   exclusive_writer   ~   s    KK5$>{{?@@	r{{RZZ/"));gEu	MB
		"es3xbhhr3vw<00F s3x

s   AD /D D1c                    t        t              t        k7  rt        d      t	        j
                  t              5 } | j                  t              }d d d        t              t        k7  rt        d      |S # 1 sw Y   (xY w)Nzwheel hash mismatchz$wheel bootstrap member hash mismatch)
ri   WHEELWHEEL_SHA256r(   zipfileZipFiler^   MODULE_MEMBERr5   MODULE_SHA256)archiver4   s     r.   wheel_module_bytesr      sa    ,&011		7ll=) 
 ~&ABBJ	 
 	s   A88Bc                 J   t         t        ft        t        ft        t
        ft        t        ft        t        ft        t        ft        t        ff} | D ]+  \  }}t        |      |k7  st        d|j                           t#               }|j%                  d      d}t'        fd|D              rt        d      t(        j*                  j-                  d      }|1|j.                  %t        t1        |j.                              t2        k7  rt        d      dt2        ddd	S )
Nzbound evidence hash mismatch: zutf-8)zself._prepare_paths()z=self.state_dir.mkdir(mode=0o700, parents=True, exist_ok=True)zself._write_unlocked(())z,os.replace(temporary_name, self.ledger_path)zos.fsync(directory)c              3  &   K   | ]  }|v 
 y wr0   r,   ).0fragmentsources     r.   	<genexpr>z$loaded_byte_proof.<locals>.<genexpr>   s     
H2Gh86!2Gs   z2candidate absent-ledger initializer proof mismatch-gateway.platforms.telegram_customer_bootstrapz2loaded bootstrap bytes differ from candidate wheelPASS)#candidate_absent_ledger_initializerinitializer_source_sha256"atomic_replace_and_directory_fsyncloaded_byte_match)PLANPLAN_SHA256	GOLDEN_V6GOLDEN_V6_SHA256RECOVERY_V6RECOVERY_V6_SHA256RUNBOOK_V6_RECEIPTRUNBOOK_V6_RECEIPT_SHA256BASELINE_READINESSBASELINE_READINESS_SHA256PRIOR_EXPIRYPRIOR_EXPIRY_SHA256REPLACEMENT_DRAFTREPLACEMENT_DRAFT_SHA256ri   r(   namer   decodeany	importlibutil	find_specoriginr   r   )pinsrb   wantedr4   initializer_fragmentsspecr   s         @r.   loaded_byte_proofr      s   	{i)9:	(),>@Y+Z	67,H[9\	45	D fD>V#!?		{KLL  
CZZ F 
H2G
HHOPP>>##$STD|t{{*htDKK7H.I].ZOPP/5%2.4#	 r-   c                   t        |       }t        t              t        k7  rt	        d      t        t
              t        k7  rt	        d      i dddt        dt        dt        dt        d	t        d
t        dt        dt        dt        dt         dt"        dt$        dt&        dt(        dt*        dddt,        t.        t        t0              t        t        t        t3        t4              j7                               d}|j9                         D ]'  \  }}|j;                  |      |k7  st	        d|        ||j;                  dg       vrt	        d|       |S )Nzharness schema hash mismatchzoperations hash mismatchschemaz(task26-invite-harness-permission-seal-v3candidate_digestwheel_sha256plan_sha256golden_runbook_v6_sha256recovery_runbook_v6_sha256runbook_binding_v6_sha256reset_manifest_sha256reset_evidence_digestbaseline_readiness_sha256prior_expiry_receipt_sha256prior_session_idprior_sid_hashreplacement_customer_keyreplacement_draft_sha256&replacement_authorization_event_sha256replacement_maximumrQ   F)third_invite_authorizedactor_idowner_idapproval_receipt_sha256schema_sha256operations_sha256harness_sha256zpermission seal mismatch: allowed_modeszmode is not permission sealed: )rq   ri   SCHEMASCHEMA_SHA256r(   
OPERATIONSOPERATIONS_SHA256	CANDIDATEr   r   r   r   r   RESET_MANIFEST_SHA256RESET_EVIDENCE_DIGESTr   r   PRIOR_SESSION_IDPRIOR_SID_HASHREPLACEMENT_KEYr    REPLACEMENT_AUTHORIZATION_SHA256ACTOR_IDOWNER_IDAPPROVAL_RECEIPTr   __file__resolveitemsget)rb   rv   sealexpectedkeyr   s         r.   verify_sealr      s   T?D=(9::
00566<I 	 	{	
 	#$4 	%&8 	$%> 	 !6 	 !6 	$%> 	&': 	, 	. 	#O 	#$<  	12R!" 	q#$ $)#+,<#=&."4>#9#9#;<1H4  ~~'V88C=F"!;C5ABB ( 488OR00<TFCDDKr-   c                   | t         z  }|dz  }|dz  }t        |      t        k7  rt        d      t	        |      t	        |      }t
        t        t        t        dd}t        fd|j                         D              rt        d      |j                  d      d	k7  sC|j                  d
      t        k7  s+|j                  d      t        k7  s|j                  d      durt        d      t        t        t        |      dS )Nzmanifest.jsonzreceipt.jsonzreset manifest hash mismatchF)r   r   r   evidence_digestrestore_or_prepopulatec              3  L   K   | ]  \  }}j                  |      |k7    y wr0   )r   )r   r   rA   manifests      r.   r   z reset_binding.<locals>.<genexpr>   s&     
I8H*#u8<<%8Hs   !$zreset manifest binding mismatchstatusr   manifest_sha256r   post_reset_empty_baselineTz(reset execution receipt binding mismatch)r   r   reset_receipt_sha256)RESET_RELATIVEri   r   r(   rq   r   r   RESET_PLAN_SHA256r   r   r   r   )profilerootmanifest_pathreceipt_pathreceiptr   r   s         @r.   reset_bindingr      s    ^#D?*M.(L"779::'H%G%$(0"'H 
I8H
II<==H';;()-BB;;()-BB;;234?EFF%:%:$,\$:< <r-   c                    | dz  S )Nz:data/onboarding/telegram-customer-bootstrap-v1/ledger.jsonr,   )r   s    r.   bootstrap_pathr      s    QQQr-   c                   t        |       }t        |      h dk7  s|j                  d      dk7  rt        d      |j                  d      }t	        |t
              st        d      t        j                  |d   |ddd	d
d      j                         }|j                  d      t        |      k7  rt        d      |D cg c]$  }t	        |t              s|j                  d      & }}|D cg c]$  }t	        |t              s|j                  d      & }}t        |      t        |      k7  s@t        t        |            t        |      k7  s t        t        |            t        |      k7  rt        d      |S c c}w c c}w )N>   digestr   sessionsr   telegram-customer-bootstrap-v1z$unexpected customer-bootstrap schemar   z'customer-bootstrap sessions are invalid)r   r   FTr7   )r<   r:   r;   	allow_nanr   z)customer-bootstrap ledger digest mismatch
session_idsid_hashz2duplicate or malformed customer-bootstrap identity)rq   setr   r(   rn   listr>   r?   r@   r5   ro   r   )rb   rA   r   payloaditemidshashess          r.   validate_ledgerr    sK   dOE
5z5589LPp9pABByy$Hh%DEEjjE(OJY^#'J%QQWQWQY yyi00FGG.6
Qhd*T4:P488L!hC
Q/7Rxt:dD;Qdhhz"xFR
3x3x= CCMSX$=S[AQUXY_U`A`OPPL	 RRs   E?E?0FF)	customersgateway.lockgateway_state.jsonr   zstate.dbz.clean_shutdownzdata/customersdata/owner-actionsz(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                 p   t        t              } t        t              }t        t              }| j	                  d      dk7  s| j	                  d      dk7  rt        d      |j	                  d      dk7  sD|j	                  d      t        k7  s,|j	                  d      t        k7  s|j	                  d	      d
k7  rt        d      |j	                  d      t        k7  s?|j	                  d      dk7  s+|j	                  d      dus|j	                  d      t        k7  rt        d      t        t        t        dS )Nr   r   customer_rowsr   z(baseline completion readiness is invalidPASS_EXPIREDr   r   stater   zprior expiry receipt is invalidauthorization_event_sha256replacement_countrQ   r   Fr   z,replacement authorization receipt is invalid)r   r   r   )rq   r   r   r   r   r(   r   r   r   r   r   )	readinessexpiryapprovals      r.   replacement_evidencer    s	   ,-I|$F)*H}}X&(IMM/,Ja,OEFF

8.::l#'77::j!^3::g)+<==126VV<<+,1<<12%?<<*+/??IJJ%>':2R r-   c                     t        j                  g dddd      } t        d | j                  j	                         D              }| j
                  dk7  s	|ddd	d
k7  rt        d      y )N)
	systemctlz--usershowz$hermes-gateway-dualcoachtest.service-pActiveStater  SubStater  MainPIDTF)textcapture_outputcheckc              3  J   K   | ]  }d |v s|j                  d d        yw)=rQ   N)split)r   lines     r.   r   z#service_inactive.<locals>.<genexpr>>  s%     [1KsVZ{$**S!$1Ks   	##r   0inactivedead)r  r  r  z.gateway service must be inactive/dead MainPID0)
subprocessrunro   stdout
splitlines
returncoder(   )resultvaluess     r.   service_inactiver-  8  sk    ^^	A$eF
 [1I1I1K[[FAs:ci+j!jKLL "kr-   c                   t        |        t        | dz         t        |       }t        |      }|j                  }t        |       |j	                         D ch c]  }|j
                   c}ddhk7  rt        d      |j	                         D ]|  }|j                         s`|j                         rP|j                         j                  t        j                         k7  s!|j                         j                  dz  dk7  sst        d       |d   }t        |      d	k7  rt        d
      |d   }|j                  d      t         k7  sh|j                  d      t"        k7  sP|j                  d      dk7  s<|j                  d      dk7  s(|j                  d      g k7  s|j                  d      g k7  rt        d      |j                  d      }t%        |t&              r|j                  d      t        d      t)        | dz        }	|	j                  d      g k7  s|	j                  d      dk7  rt        d      | dz  }
|
j	                         D ch c]  }|j
                   c}dhk7  rt        d      | d z  }|j	                         D ch c]  }|j
                   c}d!hk7  rt        d"      t)        | d#z        }|j                  d$      }t%        |t&              r|j                  d%      nd }|j                  d&      d'k7  s$t%        |t&              r|j                  d      d(k7  rt        d)      | d*z  }|j                         s0|j                         r |j                         j                  dz  dk7  rt        d+      t+                ||t,        k7  rt        d,      ||j                  d-      k(  rt        d.      t/               }t1               }|d/d0d1d	ddddd2d	d3|d4|t3        |       fS c c}w c c}w c c}w )5Ndataledger.jsonledger.lockz,unexpected customer-bootstrap authority file  rS   z-unsafe customer-bootstrap authority mode/typer   rQ   z.replacement requires exactly one prior sessionr   r   r   r  r   
generation   role_claimsrecovery_attemptsz8prior session is not the exact expired unclaimed lineagecustomer_draftcustomer_user_idz5prior expired lineage has customer identity authorityzcustomers/registry.jsonr  registry_modeordinary_v1zcanonical registry is not emptydata/onboardingr   zunexpected onboarding authorityr
  zdraft-deliveries.json.lockz!unexpected owner-action authorityr	  	platformstelegramgateway_statestoppeddisconnectedz)gateway state is not stopped/disconnectedr  zgateway lock baseline is unsafez3only the sealed replacement customer key is allowedcustomer_keyz-replacement customer key reuses prior lineager   ONE_EXPIRED_REPLACEMENT_READYTzinactive/dead MainPID0F)r   baselineledger_presentprior_session_countprior_stateprepared_session_countaccepted_claim_countregistry_customer_countservicer   r   r   )rw   r   r  r{   iterdirr   r(   r}   is_filerZ   rH   rU   r\   rF   r   r   r   r   rn   ro   rq   r-  r   r   r  r   )r   rA  rb   ledgerr  r  r   priorprior_draftregistry
onboardingowner_actionsgatewayr<  r=  lockproofevidences                     r.   existing_baselinerW  C  s   gg&''"DT"FKKEe#mmo.od		o.=-2PPIJJ??DLLNdiik6H6HBIIK6W[_[d[d[f[n[nqv[vz[NOO   j!H
8}KLLQKE		,#3399Z N299W*99\"a'99]#r)99()R/UVV)),-Kk4(KOO<N,O,[RSS#<<=H||K B&(,,*G=*X<==,,J(00232d		238X7YY<==22M+33565d		56;W:XX>??"667GK(I,6y$,Gy}}Z(TH{{?#y0
8T8RV^VbVbcjVko}V}FGG^#D$))+2E2E2MQV2V<==LO$CPQQ{~66JKKE#%H&Eq"#Q#$1I U" '/ 3@2H  [ /2 4 7s   O8O=Pc                    t        |       }|j                         r|j                         rt        d      t	        | |      S )Nz/replacement requires exact prior expired ledger)r   existsr}   r(   rW  )r   rA  rb   s      r.   	preflightrZ    s7    '"D;;=DOO-LMMWl33r-   c                  $    e Zd ZddZddZddZy)Inotifyc                   t        j                  d d      }|j                  t        j                        | _        | j
                  dk  rt        t        j                         d      |j                  | j
                  t        j                  |      t        t        z  t        z        }|dk  rBt        j                         }t        j                  | j
                         t        |d|       y )NT)	use_errnor   inotify_init1zinotify_add_watch:)ctypesCDLLr_  rU   	O_CLOEXECrc   OSError	get_errnoinotify_add_watchfsencode	IN_CREATEIN_MOVED_TOIN_CLOSE_WRITEra   )self	directorylibcwatcherrors        r.   __init__zInotify.__init__  s    {{440$$R\\277Q;&**,o>>&&twwI0F	T_H_bpHpq19$$&EHHTWW%#5i[!ABB r-   c                B    t        j                  | j                         y r0   )rU   ra   rc   )rj  s    r.   ra   zInotify.close  s    
r-   c           	     L   t        j                         |z   }d}	 |t        j                         z
  }|dk  r|dk(  rt        d      t        j                  | j                  gg g |dk(  rt        d|      nd      \  }}}|s|r|S t        d      t        j                  | j                  d      }d}	|	dz   t        |      k  rat        j                  d||	      \  }
}}}||	dz   |	dz   |z    j                  dd      d   }|	d|z   z  }	||k(  r|dz  }|	dz   t        |      k  ra)	Nr   z bounded filesystem event timeoutg        i      iIII    rQ   )time	monotonicr(   selectrc   maxrU   r^   r   structunpack_fromr!  )rj  r   timeoutdeadlinecount	remainingreadable_r  r   _watch_mask_cookielengthobserveds                  r.   await_name_countzInotify.await_name_count  s9   >>#g- 4>>#33IA~%1*"#EFF#]]DGG9b"UZ^_U_c#y>QehiNHa L"#EFFggdggu-GF2+W-171C1CFGU[1\.w"6B;v{V/CDJJ5RSTUVW"v+%t#QJE 2+W- r-   N)rk  r   returnNoner  r  )r   bytesr{  floatr  int)r)   r*   r+   ro  ra   r  r,   r-   r.   r\  r\    s    	Cr-   r\  c                 r    t        j                  d      } | j                  | j                  | j                  fS )Nr   )r   import_moduleRoomBootstrapStoreload_customer_draftroom_bootstrap_state_dir)modules    r.   
import_apir    s2    $$%TUF$$f&@&@&BaBaaar-   c                \    d|  d| t         t        t        t        t        t
        t        dd
S )Nztask26-invite-harness-v3-z-receipt-v1z1redacted; no raw invite token or customer content)
r   rv   r   r   r   r   r   r   r   privacy)r   r   r   r   r   r   r   rv   s    r.   base_receiptr    s1    -dV;?%|T_$4&8!6QfF r-   c                f   	 t        | j                        \  }}i t        |      |dddt        |d         d}|d   r!t	        t        | j                              |d<   t        | j                  |       |S # t        t        f$ r'}i t        |      dt        |      dd	d
}Y d }~Id }~ww xY w)Nr   r   Tr   )r   	mutations(ready_for_exactly_one_replacement_inviteledger_session_countrD  ledger_sha256FAILF)r   blockerr  r  )rZ  r   r  r   ri   r   r(   rc  strr   r   )argsrv   rM  r+  r   rp   s         r.   	read_moder    s    	V"4<<0D\$' D6 DVRS?C+.vj/A+BD "#'/t||0L'MGO$ DLL'*N	 '" VV\$' V6c#h !uVVs   A A: :B0	B++B0c                   | j                   j                         s| j                  j                         rt        d      t	               \  }}}t        | j                         | j                  j                         j                  dz  dk7  st        | j                        t        k7  rt        d       || j                        }|j                  t        k7  s|j                  t        d      t        | j                  |j                        \  }}t!        | j                        j"                  }d}t%        |      }		  | || j                              }
|
j'                  |t(        t*              }|	j-                  |d      }|	j/                          |d	k7  rt        d
      t!        | j                        }t1        |      }|j"                  }t3        | j                  dz  d       t3        |       |j5                         D ch c]  }|j6                   c}ddhk7  rt        d      |j5                         D ]M  }|j9                         s1|j;                         r!|j                         j                  dz  dk7  sDt        d       t=        |d         dk7  s|d   d   |d   d   k7  rt        d      |d   D cg c]-  }|j?                  d      |j@                  jB                  k(  s,|/ }}t=        |      d	k7  sh|d   j?                  d      dk7  sQ|d   j?                  d      d	k7  s:|j@                  jB                  tD        k(  s|j@                  jF                  tH        k(  rt        d      tK        tM        |jN                        jP                  d      j?                  d      }tS        |tT              r"t=        |      d	k7  s|d   jW                  d      st        d      |d   }|j@                  jF                  tY        |d d  j[                  d!            k7  rt        d"      d#|j@                  jB                  ||jN                  |j\                  j_                         t`        d$}tc        | j                   |       i te        d%      i d&d'd(|d)   d*d+d,dd-dd.dd/|d0d	d1d	d2d	d3d	d4dd|j@                  jB                  d5tY        |j@                  jB                  j[                               d6|j@                  jF                  d7tY        |j[                               ddd	t        |      t        | j                         d8tg        | j                         gd9}tc        | j                  |       | jh                  rg }tk        d: | jh                  jm                  d;      D              D ]=  }	 |j[                         t        |      v r|jo                  |jq                                ? || j                   jq                         gk7  rt        d<      |S # |	j/                          w xY wc c}w c c}w # t        tr        f$ r Y w xY w)=Nzone-use output already existsr2  rS   z-only the sealed replacement draft is acceptedz$replacement draft authority mismatch   ledger.json)bot_usernamer   g      @rQ   z;expected exactly one watched authority creation/write eventr;  i  r  r0  r1  z'unexpected candidate initializer outputz/candidate initializer output mode/type mismatchr   r4  r   z:prepare did not preserve one prior and add one replacementr   r  PREPAREDr3  z?new session is not a distinct generation-1 PREPARED replacementT)strict_parsingstartrc1_z$candidate private handoff is invalid   asciizcandidate SID hash mismatchz task26-private-invite-handoff-v3)r   r   start_tokencustomer_link
expires_atr   preparer   PASS_PREPAREDbaseline_beforerC  
watch_rootr   %event_subscription_before_initializer!event_subscription_before_prepareonboarding_create_event_countledger_write_event_count!candidate_initializer_invocationsprepare_invocationsreplacement_prepare_invocations1final_ledger_publications_expected_from_candidate/atomic_replace_and_directory_fsync_source_proofsession_id_sha256r   start_token_sha2560600)r3  r  handoff_sha256handoff_moderaw_token_locationsc              3  d   K   | ](  }|j                         s|j                         r%| * y wr0   )rL  r}   )r   r  s     r.   r   zprepare.<locals>.<genexpr>  s'     v,IDT\\^dhdsdsdu4,Is   000*z)raw token escaped the one private handoff):handoffrY  r   r(   r  rg   draftrZ   rF   ri   r   rA  r   r8  rZ  r   r   r{   r\  !prepare_rehearsal_customer_inviteBOT_USERNAMEr   r  ra   r  rw   rK  r   r}   rL  r   r   sessionr   r   r   r   r   r   r  queryrn   r  
startswithr5   r@   r  	isoformatr   r   r  r  evidence_rootsortedrglobr_   r   PermissionError)r  Store
load_draftstate_dir_forr  rd   r+  r  
event_namerm  storepreparedevent_countledger_pathafterr  r  newtokenstokenr  r   	locationsrb   s                           r.   r  r    s   || 3 3 5:;;'1|$E:}zz  5(E1Xdjj5IMe5eJKKtzz"E_,0F0F0RABBt||U-?-?@NFF-44JJJEmDLL12::5|fn:o,,Z=aXYY .KK(EE dll%66UCe#mmo.od		o.=-2PPDEE??DLLNdiik6I6IE6QUZ6ZPQQ   5"eJ&7&:fZ>PQR>S&SWXX!*-
g-D,1G8K[K[KfKf1f4-C
gCAq6::g*,q6::l#q(&&*::$$6\]]hx556<<TRVVW^_Ffd#s6{a'7vay?S?STZ?[ABB1IE  IeABi.>.>w.G$HH899;8K[K[KfKf#h6L6L%00::<(TG DLL'*
y
!#+_>OQWXbQc6 	0 8[\` 	(	 -G	
 	,Q
 1Fq 	*1 	<Q 	:4 	h&&11 	Yx'7'7'B'B'I'I'KL 	H$$-- 0DYu||~E^ 	 ,-x?T"4<<0& #DLL 12G  DLL'*	vD,>,>,D,DS,IvvD<<>\$%77$$T\\^4 w --/00JKKNA 	 / hT !/2 s1    AX, 	Y-Y1Y:Y,X>YYc                X   | d   }t        |      dk7  rt        d      |\  }}|j                  d      t        k7  sT|j                  d      t        k7  s<|j                  d      dk7  s(|j                  d      g k7  s|j                  d	      g k7  rt        d
      |j                  d      }|j                  d      |k7  s_|j                  d      |k7  sK|t        k(  sB|t        k(  s9t        |t              r)|j                  d      t        k7  s|j                  d      t        d      |S )Nr   r4  z3replacement lifecycle requires exactly two sessionsr   r   r  r   r5  r6  zprior expired lineage changedr7  rA  r8  z$replacement session binding mismatch)r   r(   r   r   r   rn   ro   r   )rM  r   r   r   rN  replacementr  s          r.   replacement_sessionr  "  s   j!H
8}PQQ!E;		,#3399Z N299W*99]#r)99()R/:;;OO,-E%3??:&(2))~%%&99^$799'(4ABBr-   c                   t                t        t        | j                              }t	        || j
                  | j                        }|j                  d      dk7  s|j                  d      g k7  rt        d      t        t        | j                        j                        }i t        d      ddt        | j
                  j                               | j                  d}t        | j                  |       | j                   ?t#        j$                  | j                   d	       t#        j&                  | j                          	 |j)                  d
| j*                        }|j'                          |dk7  rt        d      t        t        | j                              }t	        || j
                  | j                        }|j                  d      }t-        |t.              rt1        |      dk7  rt        d      |d   }	|	j                  d      t2        k7  s,|	j                  d      t2        k7  s|	j                  d      dk7  rt        d      i t        d      ddt2        d| j
                  | j                  |j                  d      t5        t        | j                              dddd}
t        | j6                  |
       |
S # |j'                          w xY w)Nr  r  r5  z1observe requires exact clean PREPARED replacementzobserve-readyREADYT)r   event_subscription_before_claimr  r      1r  rQ   z2duplicate claim ledger writes observed at boundaryz%accepted claim cardinality is not oner   user_idchat_idtopic_idr#  z,accepted claim is not exact actor private DMobservePASS_CLAIM_OBSERVEDF)r   accepted_start_claim_countr   
private_dmr   r   r  r  raw_getUpdatesdrop_pending_updatescursor_edits)r   r  r   r   r  r   r   r   r(   r\  r{   r  r5   r@   r   readyready_fdrU   r   ra   r  timeout_secondsrn   r  r   r   ri   r   )r  rM  r  rm  r  r}  r  r  claimsclaimr   s              r.   r  r  =  sF   ^DLL9:F%fdoot}}MKw:-1OSU1UNOON4<<0778Eb|O, bdh"+DOO,B,B,D"ESWS`S`bEDJJ&}} 
%
&&~t7K7KLzOPPN4<<89Eudoot}}EDXXm$Ffd#s6{a'7BCC1IEyyx'599Y+?8+KuyyYcOdhkOkIJJ^i( ^4Iij#4t==488G3DW_`noso{o{`|W}!&W\^G DLL'*N! 	s   K Kc                (    t               \  }}}t        t         j                              }t	        | j
                   j                        }|j                  d      dk7  s|j                  d      g k7  rt        d      t        j                         t        d      j                  j                  |d         j                         k  rt        d       | | j                              j                         }t         fd|D              }|j                   j"                  d	k7  rt        d
      i t%        d      ddd j
                   j                  d	t'        t         j                              d}t)         j*                  |       |S )Nr  r  r5  zexpiry binding mismatchdatetimer  z.canonical expiry unavailable before expires_atc              3  V   K   | ]   }|j                   j                   k(  s| " y wr0   )r   )r   oner  s     r.   r   zexpire.<locals>.<genexpr>i  s!     Mx3>>T__+Lxs   ))r   zcanonical expiry failedexpirer  z!RoomBootstrapStore.expire_unboundrQ   )r   canonical_apiexpire_invocationsr   r   r  r  )r  r  r   r   r  r   r   r   r(   ru  
__import__r  fromisoformat	timestampexpire_unboundnextr  rA   r  ri   r   r   )	r  r  _loadr  rM  r  r   r  r   s	   `        r.   r  r  `  sJ   ",,E5-^DLL9:F%fdoot}}MKw:-1OSU1U455yy{Z
+44BB;|C\]ggiiKLL]4<<01@@BHMxMMDzz9$455\h' \>Tw%&dooSWS`S`!H^DLL=Y4Z\G DLL'*Nr-   c                    t        j                  t              } | j                  dd      }dD ]  }|j	                  |      }|j                  dt        d       |j                  dt        d       |j                  d	t        d       |d
k(  rG|j                  dt        d       |j                  dt        d       |j                  dt               |dv r&|j                  dd       |j                  dd       |dk(  s|j                  dt        d       |j                  dt        d       |j                  dt               " | S )N)descriptionrv   T)destrequired)dry-runverifyr  r  r  z	--profile)typer  z--permissionz	--receiptr  z--draftz	--handoffz--evidence-root)r  >   r  r  z--session-id)r  z
--sid-hashr  z--readyz--timeout-secondsg      ^@)r  defaultz
--ready-fd)	argparseArgumentParser__doc__add_subparsers
add_parseradd_argumentr   r  r  )r+  subr   commands       r.   parserr  s  sA   $$9F


Vd

;CE..&[tdC^$F[tdC9   E  4$ G  !2 >((  $ ?   =9   E  !45% P  C 8 F  Mr-   c            	        t               j                         } 	 t        | j                  | j                         | j                  dv rt        | | j                        }n$t        t        t        d| j                     |       }t        j                  j                  j                  t        | j                  |d   t        | j                        d             |d   dk(  rdS dS # t         t"        t$        t&        t(        t*        j,                  f$ r-}t        j.                  j                  d| d	       Y d }~yd }~ww xY w)
N>   r  r  )r  r  r  r   )rv   r   r   r  r4  r   zFAIL: r=   )r  
parse_argsr   
permissionrv   r  r  r  r  sysr(  bufferr   rB   r  r   r(   rc  
ValueErrorKeyErrorStopIterationr   
BadZipFilestderr)r  r+  rp   s      r.   mainr    s    8 D
DOOTYY/99--tTYY/F!(WOPTPYPYZ[_`F

	499xHXehimiuiuev*w xy8$.q5A5':xHZHZ[ 

6#b)*s   CC% #C% %-D?#D::D?__main__)r4   r  r  r  )rA   r   r  r  )rL   zos.stat_resultr  ztuple[int, ...])rb   r   rO   boolr  r  )rb   r   r  r  )rb   r   rO   r  r  dict[str, Any])rT   )rb   r   rv   r  r  r  )rb   r   rA   r  r  r  )r  r  )r  zdict[str, str])rb   r   rv   r  r  r  )r   r   r  r  )r   r   r  r   )rb   r   r  r  )r  r  r  r0   )r   r   rA  z
str | Noner  z%tuple[dict[str, Any], dict[str, Any]])r  ztuple[Any, Any, Any])rv   r  r  r  )r  argparse.Namespacerv   r  r  r  )r  r  r  r  )rM  r  r   r  r   r  r  r  )r  zargparse.ArgumentParser)r  r  )lr	  
__future__r   r  r`  r1   r   importlib.utilr>   rU   rw  rZ   ry  r&  r  ru  r   pathlibr   typingr   urllib.parser   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r   r   	frozensetTERMINALri  rh  rg  rb  getattrrX   r   r   r{   HEREry   ROOTEVIDENCEr   r   RUNBOOK_ROOTr   r   r   r   r   r   r   r   r   r   r   r   RuntimeErrorr(   r5   rB   rM   rg   ri   rq   rw   r   r   r   r   r   r   r  CLEARED_SIBLINGSr  r-  rW  rZ  r\  r  r  r  r  r  r  r  r  r  r)   
SystemExitr,   r-   r.   <module>r.     s   Y "       	     
     +N	QPV U W ^ Z Z ^ X . S9] #e  *BRAB	
,,\15
5H~&&||A((89DEHxx<<FF>>	EE!$EE FF 	 	 R&&
V JJ  rr ddNO	< 	+i>
 15 $8 .2 < @%P<:R$ 6M;|4" "Jb
Sl6 F&, z
TV
 r-   