
    jv                    8   d Z ddlmZ ddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddlZddlmZ ddlmZmZ ddlZdZdZdZd	Zd
ZdZdZdZdZdZdZeeeefZdZ dZ!dZ"dZ#d3dZ$d4dZ%d5dZ&d6dZ'd7d8dZ(d9dZ)d:dZ*d;dZ+d<dZ,d=dZ-d>dZ.d?d Z/d@d!Z0dAd"Z1dBd#Z2dCd$Z3dDd%Z4dEdFd&Z5	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dGd'Z6dHd(Z7dId)Z8	 	 	 	 	 	 	 	 	 	 	 	 	 	 dJd*Z9dKd+Z:dLd,Z;dMd-Z<dNd.Z=dOd/Z>dPd0Z?dQd1Z@eAd2k(  r eB e@             y)Ra,  Seal, verify, and package-deploy the bounded DualCoach provider-auth candidate.

The candidate is intentionally limited to the new production command, its
human-driven controller, their tests, the package wheel, and immutable
historical evidence.  It never contacts a provider, Telegram, or systemd.
    )annotationsN)Path)AnyIterablez$dualcoach-provider-auth-candidate-v1z/dualcoach-provider-auth-candidate-checkpoint-v1z5dualcoach-provider-auth-profile-package-deployment-v1z#dualcoach_admin provider-auth checkv2 f4cd2ea29c98b7038bc9490b87ee0db2)$gateway/platforms/dualcoach_admin.py4gateway/platforms/dualcoach_tasks21_25_controller.pyagent/auxiliary_client.pyagent/codex_runtime.pyz3tests/gateway/test_dualcoach_admin_provider_auth.pyz5tests/gateway/test_dualcoach_tasks21_25_controller.pyz$tests/agent/test_auxiliary_client.pypyproject.tomlr	   r
   r   r   )z8dualcoach_admin = gateway.platforms.dualcoach_admin:mainzXdualcoach_tasks21_25_controller = gateway.platforms.dualcoach_tasks21_25_controller:main)z:dualcoach_admin = "gateway.platforms.dualcoach_admin:main"zZdualcoach_tasks21_25_controller = "gateway.platforms.dualcoach_tasks21_25_controller:main")config.yamlz	auth.jsoncustomers/registry.jsongateway_state.jsonz(data/owner-actions/draft-deliveries.jsonzdata/scheduled-deliveries.jsonl:data/onboarding/telegram-publication-outbox-v1/ledger.json)z3.omo/evidence/dualcoach-task-24-evidence-index.jsonz3.omo/evidence/dualcoach-task-25-evidence-index.jsonz..omo/evidence/task24-terminal-noop-matrix.jsonz7.omo/evidence/task26/task24-terminal-replay-report.jsonz@.omo/evidence/task26/task24-task25-final-candidate-manifest.jsonzH.omo/evidence/task26/task26-owner-customer-v1-readiness-v3.redacted.jsonc                R    t        j                  | ddd      j                  d      S )NT),:)	sort_keys
separatorsensure_asciiutf-8)jsondumpsencodevalues    j/home/cube/projects/richard/traning coach/.omo/senpi-task/task26/seal_dualcoach_provider_auth_candidate.py	canonicalr   Q   s$    ::et
QUV]]^eff    c                H    t        j                  |       j                         S N)hashlibsha256	hexdigestr   s    r   r$   r$   U   s    >>% **,,r    c                4    t        | j                               S r"   )r$   
read_bytespaths    r   sha256_filer*   Y   s    $//#$$r    c                \    t        j                  | j                         j                        S r"   )statS_IMODElstatst_moder(   s    r   moder0   ]   s    <<

,,--r    c                    | j                         }| j                         s| j                         r|j                  dk7  rt	        | d      |t        |       |vrt	        | d      y y )N   z" is not a regular single-link filez has an unsafe mode)r.   
is_symlinkis_filest_nlinkAssertionErrorr0   r)   labelallowed_modesinfos       r   regularr;   a   sj    ::<D$--12Dw&HIJJ T$Z}%Dw&9:;; &E r    c                    | j                         }| j                         s| j                         rt        |       |vrt	        | d      y )Nz is not a private directory)r.   r3   is_dirr0   r6   r7   s       r   private_directoryr>   i   sC    ::<Dd=1Pw&ABCC 2Qr    c                    | |z  }t        ||h d       |t        |      d|j                         j                  t	        |      dS )N>           04or)   r0   bytesr$   r;   r0   r,   st_sizer*   )rootrelativer)   s      r   source_entryrK   o   sH    (?DD(89:c"$$d#	 r    c           
     D    t         ddh       g }t         j                  d       fd      D ]  }|j                         j	                         }|j                         }|j                         s|j                         r|j                  dk7  rt        d      |j                         r!|j                  |dt        |      d	d
       |j                         r6|j                  |dt        |      d	|j                  t        |      d       t        d       |S )Nzprofile package@  *c                B    | j                        j                         S r"   )relative_toas_posix)itemrI   s    r   <lambda>zpackage_tree.<locals>.<lambda>}   s    9I9I$9O9X9X9Zr    )keyr2   z!profile package has link or alias	directoryrD   )r)   kindr0   file)r)   rV   r0   rF   r$   z-profile package contains an unsupported entry)r>   sortedrglobrP   rQ   r.   r3   r4   r5   r6   r=   appendr0   rH   r*   )rI   entriesr)   rJ   r:   s   `    r   package_treer\   z   s    d-w7')Gtzz#,Z[##D)224zz|??DMMQ4F !DEE;;=NNHkdSWjY\M]_`\\^NN$"#Dz#.!\\)$/ !!PQQ% \& Nr    c                *    t        t        |             S r"   )r$   r   )r[   s    r   package_digestr^      s    )G$%%r    c                    t        j                  g d| dd      }|j                  dk7  rt        d      |j                  S )N)gitstatusz--porcelain=v1z-zz--untracked-files=allTF)cwdcapture_outputcheckr   z repository status is unavailable)
subprocessrun
returncoder6   stdout)
repositoryresults     r   status_bytesrk      sB    ^^J	F A?@@==r    c                b    t        | j                  d      D cg c]  }|s|	 c}      S c c}w )N    )lensplit)r   entrys     r   status_countrq      s,    5;;u#5?#5%#5?@@?s   ,,c           	     T    t        t        t        t        t        |       d            S )N)commandcommand_versionsource_sha256)r$   r   COMMANDCOMMAND_VERSION)admin_sources    r   provider_candidate_digestry      s*    "#2!'!5	
 r    c           	        t        j                  |       5 }g }t        d |j                         D              D ]:  }|j	                  |      }|j                  |t        |      t        |      d       < |j	                  d      j                  d      j                         d d d        t        fdt        D              st        d      fS # 1 sw Y   0xY w)Nc              3  D   K   | ]  }|j                  d       r|  yw)/N)endswith).0names     r   	<genexpr>z wheel_members.<locals>.<genexpr>   s     Y,>DdmmTWFX4,>s     )r)   rF   r$   z.hermes_agent-0.17.0.dist-info/entry_points.txtr   c              3  &   K   | ]  }|v  
 y wr"    )r~   rp   entry_pointss     r   r   z wheel_members.<locals>.<genexpr>   s     ?,u$,   z!wheel entry points are incomplete)zipfileZipFilerX   namelistreadrZ   rn   r$   decode
splitlinesallENTRY_POINTSr6   )wheelarchiver[   r   rawr   s        @r   wheel_membersr      s    		7+-YG,<,<,>YYD,,t$CNND3s8vc{ST Z ||$TU\\]deppr 
  ?,??@AAL   
 	s   BCCc                    t        | ||       |t        |       d| j                         j                  t	        |       dS )NrD   rE   rG   )r)   displayr9   s      r   _file_recordr      s>    D'=):c"$$d#	 r    c                6   dt        j                  |       z   }t        d      j                         D ]F  }|j                  j                         s	 |dz  j                         j                  d      }||v sF y y# t        t        t        t        f$ r Y ew xY w)Ns   HERMES_HOME=z/procenvironrm   FT)osfsencoder   iterdirr   	isdecimalr'   ro   FileNotFoundErrorPermissionErrorProcessLookupErrorOSError)profileexpected	candidateenvironments       r   profile_process_absentr      s    W!55H']**,	~~'')	$y0<<>DDUKK {" - 	 "?4FP 		s   "A<<BBc           	     v   g }t         D ]I  }| |z  }|j                         r|j                  t        ||dh             6|j                  |dd       K t	        j
                  | dz  j                  d            }t        j                  | dz  j                  d            }t        j                  | dz  j                  d            }t        |t              r t        |t              rt        |t              st        d	      |j                  d
i       j                  di       j                  di       j                  di       }|j                  d
i       j                  di       }t        |t              r_|j                  d      dusL|j                  d      g k7  s8|j                  d      dk7  s$t        |t              r|j                  d      dk7  rt        d      | dz  }	t        j                  |	j                  d            }
t        |
t              r|
j                  d      g k7  rt        d      t        j                  g dddd      }|j                  dk7  s&t!        |j"                  j%                               dk7  rt        d      t'        |       st        d      |dddddddd S )!N  T)r)   absentr   r   encodingr   r   zprofile baseline is malformed	platformstelegramextraadaptive_nutritiondelivery_enabledF	customersgateway_statestoppedstatedisconnectedzprofile baseline is not cleanr   recordsz$profile delivery ledger is not empty)	systemctlz--usershowz$hermes-gateway-dualcoachtest.servicez--property=ActiveState,SubStatez--value)rc   textrd   r   )inactivedeadz!rehearsal service is not inactivez$rehearsal profile process is presentinactive/dead)filesr   registry_customer_countdelivery_countr   telegram_stateservice_stateprofile_process_count)PROFILE_BASELINE_FILESexistsrZ   r   yaml	safe_load	read_textr   loads
isinstancedictr6   getre   rf   rg   tuplerh   r   r   )r   r   rJ   r)   configregistryr   adaptiver   ledger_pathledgerservices               r   profile_baseliner      sl   ')G*!;;=NN<h@ANNH=> + ^^W}4???QRFzz7%>>IISZI[\HJJ"66AA7ASTEfd#:h+EZX]_cMd<==zz+r*..z2>BB7BOSSThjlmHyyb)--j"=Hx&<<*+58<<$*99_%2(D)<< N2<==XXKZZ--w-?@Ffd#vzz)'<'BCDDnn}	G Q%(A(A(C"DH\"\@AA!'*CDD!#$"((!"	 	r    c                   t        |ddh      }t        |ddh      }t        j                  |j                  d            }t        j                  |j                  d            }|j	                  d      t
        k7  s;|j	                  d      t
        k7  s#|j	                  d      |j	                  d      k7  rt        d      | d	z  }t        |d
dh      }t        j                  |j                  d            }	|	j	                  d      }
t        |
t              ru|
j	                  d      dusb|
j	                  d      dk7  sN|
j	                  d      dk7  s:|
j	                  d      dk7  s&|
j	                  d      dus|
j	                  d      durt        d      t        D cg c]'  }t        | j                  j                  |z  |dh      ) }}||t
        d|g|fS c c}w )N'historical_workspace_quarantine_receipt   %historical_workspace_quarantine_indexr   r   event_idcandidate_digestz2historical workspace quarantine binding is invalidz7task26/task26-task21-preflight-blocked-v1.redacted.jsonzE.omo/evidence/task26/task26-task21-preflight-blocked-v1.redacted.jsonr   preflight_customer#archive_record_historically_enabledT"exact_archive_customer_cardinalityr2   current_registry_customer_countr   'current_registry_enabled_customer_countprivate_dm_shape)distinct_from_owner_and_staff_authoritiesz&synthetic identity evidence is invalid)receiptindexr   )r   r   r   r   r   EVENT_IDr6   r   r   TERMINAL_EVIDENCEparent)evidence_rootworkspace_receiptworkspace_indexr   r   receipt_payloadindex_payloadprior_identityidentityidentity_payloadcustomerrJ   terminals                r   historical_recordsr   	  s   ,.WZ_Y`aG*QTYSZ[Ejj!2!<!<g!<!NOOJJ88'8JKMJ'83Z(H412m6G6GHZ6[[QRR"%^^NN,sv{u|}Hzz.":":G":"LM##$89Hh%:;4G<<<=B<<9:a?<<ABaG<<*+47<<CDDPEFFhyzhy\d]11888CXPUwWhyHzHEG\S[G\\\ {s   &,G#c                   | j                   j                  ddd       t        j                  d| j                   d| j                         \  }}t        |      }	 t        j                  ||       t        j                  |d      5 }d}|j                  |       |j                          t        j                  |j                                d d d        t        j                  ||        | j                  |       |dk\  rt        j                  |       |j!                         r|j#                          y y # 1 sw Y   lxY w# |dk\  rt        j                  |       |j!                         r|j#                          w w xY w)	N  Tr0   parentsexist_ok.)prefixdirwbr   )r   mkdirtempfilemkstempr   r   r   fchmodfdopenwriteflushfsyncfilenoreplacechmodcloser   unlink)r)   r   
mode_value
descriptortemporary_name	temporarystreams          r   write_privater	  %  s)   KK5$>!)!1!11TYYKq9It{{![J^$I
		*j)YYz4(FJLLLLNHHV]]_%	 )
 	

9d#

:?HHZ   )( ?HHZ  s%   ,E 	AD;/E ;E E =Fc                   t        d | D              }t        d | D              }t        d | D              }t        |t        |d         z  j                               }i dt        d|ddd	| d
t        t        |             d|d   d|d   d|d   dt        t        ddddddg ddddt        t              dt        t              ddt        |      |j                         j                  |t        t        |            ddt        |      |t!        |      dd d!||j#                  d"      d#d$|d%||d&   d   |d'   d   |d(   d   d)t        |
      t%        |
      d*t        |
      d+|	|d,d-S ).Nc              3  2   K   | ]  }|d    dk(  s|  yw)r)   r	   Nr   r~   rp   s     r   r   z!candidate_core.<locals>.<genexpr>H  s     fF5eFm?e.eF   c              3  2   K   | ]  }|d    dk(  s|  yw)r)   r
   Nr   r  s     r   r   z!candidate_core.<locals>.<genexpr>I  s     {5=Dz3zer  c              3  :   K   | ]  }|d    t         k(  s|  yw)r)   N)CODEX_ADAPTER_MEMBERr  s     r   r   z!candidate_core.<locals>.<genexpr>J  s     \F5eFmG[6[Fs   r)   schemar   canonicalizationzISHA-256 over UTF-8 canonical JSON with sorted keys and compact separatorssource_entriessource_entries_sha256provider_auth_module_sha256r$   controller_module_sha256codex_adapter_module_sha256provider_auth_contractv1z"dualcoach-provider-auth-receipt-v2-explicit_one_shot_nonpersistent_generation_v1)rs   versionadapter_versionreceipt_schemacodex_active_probecontroller_contractz&dualcoach-tasks21-25-controller-arm-v1)               zv2-codex-active-receipt)r  tasksr  wheel_entry_pointspyproject_entry_pointsr   z.artifacts/hermes_agent-0.17.0-py3-none-any.whl)r)   r$   rF   membersmembers_sha256profile_package)source_tree_digestr[   entry_countquality_gatesartifacts/gate-receipt.jsonra   )r)   r$   ra   historical_workspace_quarantine'historical_terminal_and_adverse_indexesr   r   r   artifacts/repository-status.nul)r)   r$   r,  artifacts/profile-baseline.json)r)   r$   r   )"synthetic_identity_evidence_sha256#historical_workspace_receipt_sha256!historical_workspace_index_sha256repository_statusrepository_status_sha256active_profile_baseline)nextry   strr'   SCHEMAr$   r   rv   rw   listr   PYPROJECT_ENTRY_POINTSr*   r,   rH   r^   rn   r   rq   )sourcer   wheel_entriespackage_entrieshistorical_workspacehistorical_terminalgate_receiptgate_receipt_sha256baselinebaseline_sha256ra   ri   admin
controllercodex_adapterr   s                   r   candidate_corerJ  9  s/    fFffE{{{J\F\\M0*s5=?Q2Q1]1]1_`4&4,4 	g4 	&	4
 	 	&(9!:4 	&uX4 	#Jx$84 	&}X'>4 	!&#B"Q#
4  	*R]q  X   Y!4" 	d<0#4$ 	!$'=">%4& 	D!%(ZZ\))$$Y}%=>
'44 	"0"A&/
54> 	1)"&&x0
?4H 	*+?I4J 	23FK4L /B!.DX.N/CI/Nx/X-A'-J8-T5Vn'/

 %+6N5%$
_4 4r    c                l    | j                  d      D ch c]  }|j                         s| c}S c c}w )NrN   )rY   r4   )rI   r)   s     r   
root_filesrL    s*    !ZZ_?_TD_???s   11c                   | j                   j                         }| j                  j                         }| j                  j                         }| j                  j                         }| j
                  j                         }| j                  j                         }| j                  j                         }t        |d       t        |ddh       t        j                  |j                  d            }t        |t              r|j                  d      dk7  rt        d      t         D 	cg c]  }	t#        ||	       }
}	t%        |      \  }}t'        |d	z        }t)        |||      \  }}t+        |      }t-        |      }t/        |      d
z   }t1        |
||||||t3        |      |t5        |      ||      }t5        t/        |            }i |d|i}| j6                  j                         d| z  }|j9                         s|j;                         rt=        d      |j?                  dd       |dz  }|j?                  d       tA        jB                  ||dz         |dz  jE                  d       tG        |dz  |jI                                tG        |dz  |       tG        |dz  |       tG        |dz  t/        |      d
z          tJ        ||d   t3        |dz        |d   d   |d   dd}tG        |dz  t/        |      d
z          |jE                  d        |jE                  d        tM        ||||||!       |S c c}	w )"Nr   zgate receiptr   r   r   ra   PASSzgate receipt is not PASSzworkspace/checkin_cli   
)r>  r   r?  r@  rA  rB  rC  rD  rE  rF  ra   ri   full_candidate_digest"dualcoach-provider-auth-candidate-zcandidate root already existsr   T)r0   r   	artifacts)r0   $hermes_agent-0.17.0-py3-none-any.whlr   gate-receipt.jsonprofile-baseline.jsonrepository-status.nulcandidate-manifest.jsonr   r$   r7  SEALEDr  rP  r   candidate_manifest_sha256wheel_sha256r7  ra   candidate-checkpoint.jsonrM   ri   r   r   r   r   )'ri   resolver   r   r   rC  r   r   r;   r   r   r   r   r   r   r6   SOURCE_FILESrK   r   r\   r   r   rk   r   rJ  r*   r$   output_parentr   r3   FileExistsErrorr   shutilcopyfiler  r	  r'   CHECKPOINT_SCHEMAverify)argsri   r   r   r   	gate_pathr   r   gatesrJ   r>  r?  _entry_pointsr@  	workspacer   rE  ra   baseline_bytescorefull_digestmanifestoutput_rootrR  
checkpoints                            r   sealrq    s<   ((*J&&..0Mll""$GJJ E!!))+I..668**224OE7I~w/JJy**G*<=EeT"eii&9V&C788AMNXl:x0FN#0#7 M="7-D#DEO,]<M_Ix(H*%Fx(50N#'&$'	2~.D 4)K=$=/=H$$,,.3UVaUb1ccK{557=>>5$/k)IOOO
OOE9'MMN77>>uE)1193G3G3IJ)55~F)55v>+ 999X;NQV;VW#!,$%78%0?X1X%Y )(3$,-G$HJ + ;;Yz=RUZ=Z[OOEe
;:]T[  pA  Sb  ca Os   -Mc          
        t        | ddh       | dz  }t        |ddh       | dz  | dz  |dz  |dz  |d	z  |d
z  h}t        |       |k7  rt        d      |D ]  }t        |ddh        | dz  }	t	        j
                  |	j                  d            }
t        |
t              r|
j                  d      t        k7  rt        d      |
j                  dd       }t        |t              r)t        t        |
            |k7  s| j                  d| k7  rt        d      ||
d<   t	        j
                  | dz  j                  d            }|t         ||
d   t#        |	      |
d   d   |
d   ddk7  rt        d      |
d   D cg c]  }t%        |t        |d                }}||
d   k7  rt        d      |t&        z  }|
d   t)        |j+                               k7  rt        d      |d z  j                  d      t-        fd!t.        D              st        d"      | t        |
d   d         z  }t#        |      |
d   d   k7  rt        d#      t1        |      \  }||
d   d$   k7  s5t        t        |            |
d   d%   k7  st-        fd&t2        D              st        d'      |D ci c]  }t        |d         |d    c}|
d   D ci c]  }t        |d         |d    c}t5        fd(t6        D              rt        d)      t	        j
                  | d*z  j                  d            j                  d+      d,k7  st#        | d*z        |
d-   d   k7  rt        d.      | d/z  j+                         t9        |      k7  rt        d0      t;        |      }t        |      d1z   }||
d2   d3   k7  s*t        |      |
d2   d   k7  s| d4z  j+                         |k7  rt        d5      t=        |||      \  }}||
d6   k7  s||
d7   k7  rt        d8      d9d,||
d   t#        |	      t#        |      d:S c c}w c c}w c c}w );Nzcandidate rootrM   rR  zcandidate artifactsrW  r\  rS  rT  rU  rV  zcandidate inventory differszcandidate artifactr   r   r   r  zcandidate manifest is invalidrP  rQ  zcandidate digest differsr   r   r$   r7  rX  rY  zcandidate checkpoint differsr  r)   zcandidate source differsz!provider candidate digest differsr   c              3  &   K   | ]  }|v  
 y wr"   r   )r~   rp   	pyprojects     r   r   zverify.<locals>.<genexpr>  s     F/Eeu	!/Er   zsource entry points differzcandidate wheel differsr(  r)  c              3  &   K   | ]  }|v  
 y wr"   r   )r~   rR   r   s     r   r   zverify.<locals>.<genexpr>  s8       n  am  Y]  @D  HT  @T  amr   zcandidate wheel members differc              3  d   K   | ]'  }j                  |      j                  |      k7   ) y wr"   )r   )r~   r)   source_hasheswheel_member_hashess     r   r   zverify.<locals>.<genexpr>  s0     
ePd""4(M,=,=d,CCPds   -0zcandidate wheel source differsr.  ra   rN  r-  zcandidate gate receipt differsr1  zrepository status driftrO  r8  r   r2  zprofile baseline driftr/  r0  zhistorical evidence driftz1dualcoach-provider-auth-candidate-verification-v1)r  ra   rP  r   rZ  r[  )r>   rL  r6   r;   r   r   r   r   r   r   r;  popr:  r$   r   r   rd  r*   rK   ADMIN_MEMBERry   r'   r   r=  r   r   anyWHEEL_SOURCE_MEMBERSrk   r   r   )rI   ri   r   r   r   r   rR  r   r)   manifest_pathrn  rm  rp  rp   actual_source
admin_path
wheel_pathr(  rE  rk  rj  r   r   rt  rw  rx  s                         @@@@r   re  re    sU    d,ug6{"Ii!6@((**::''++++H $8#:;;*UG4 44Mzz-1171CDHh%h)?6)I<==,,6=Kk3'6)H2E+F++UY]YbYb  iK  LW  KX  gY  ZY788(3H$%T$??JJT[J\]J#!,$%78%0%? )(3$,-G$H  ;<<OWXhOijOie\*c%-.@AOiMj!122788l*J"#'@AVAVAX'YY@AA..9979KIF/EFF9::HW-f566J:(7"3H"==677)*5G\(7#I..&79K2LPXY`PabrPs2s{~  n  am  n  |n=>>LSTG53uV}-uX>GTFNO_F`aF`USv'x8F`aM

ePd
ee=>>zz477BBGBTUYYZbcgmmq|  ~B  Eb  ~b  rc  go  p  g@  AI  gJ  rJ=>>00<<>,zBZZ677(Hx(50N856w??6.CY]ef  ^A  BJ  ^K  DK  PT  Wx  Px  OD  OD  OF  JX  OX566,]<M_IxH>??8x  YB  PC  DC899E!,$%78%0%?#J/ = k Uas   Q 5QQ
c                    t        j                  | |t         j                         |g|j                  d      D ]0  }| |j	                  |      z  }|j                  t        |             2 y )N)copy_functionrN   )rb  copytreecopy2rY   rP   r  r0   )r>  destinationr)   source_paths       r   _copy_tree_exactr    sY    
OOFKv||D6{0056t//<<

4$% 7r    c           	        t        j                  d d      j                  ddt        j                  |       dt        j                  |      d      }|dk7  r3t        j
                         }t        |t        j                  |            y )NT)	use_errnoi<  i   r   )ctypesCDLLsyscallr   r   	get_errnor   strerror)leftrightrj   errors       r   _rename_exchanger  !  ss    [[.66
D
E	F {  "eR[[/00 r    c                `   t        | j                  d      d d      D ]g  }|j                         r"|j                         s|j	                  d       5|j                         sF|j                         rW|j	                  d       i | j	                  d       t        j                  |        y )NrN   c                ,    t        | j                        S r"   )rn   partsr   s    r   rS   z_remove_tree.<locals>.<lambda>0  s    #ekk:Jr    T)rT   reverser   r   )rX   rY   r=   r3   r  r4   rb  rmtree)r)   rR   s     r   _remove_treer  /  sv    tzz#,JTXY;;=!2JJu\\^DOO$5JJu	 Z
 	JJu
MM$r    c                 0    t        j                         dz  S )NzW.local/state/dualcoach-provider-auth-deployment/latest-deployment-receipt.redacted.json)r   homer   r    r   deployment_receipt_pathr  9  s    99;rrrr    c           	     b   | j                   j                         }t        || j                  j                         | j                  j                         | j
                  j                         | j                  j                         | j                  j                               }t        j                  |dz  j                  d            }| j
                  j                         }|dz  }|dz  }|d   d   }t        |      |k7  rt        d	      t        j                         d
z  }|dz  t        |d         z  dz  }	|	j                   j#                  ddd       |	j%                         s|	j'                         rt)        d      t+        ||	       |	j-                  d       |d|d    z  }
|
j%                         s|
j'                         rt)        d      t+        ||
       t        |
      |k7  rt        d      t/        ||
       	 t        |      }||k7  rt        d      t1        |
       i dt4        ddd|d   d|d   dt7        |dz        d|d   d   ddd d!d"d#d$d#d%|d   d&   d't9        |      d(t;        |      d)t;        |      d*t        |	      d+|d,   |d-   |d.   |d   d   d/}t=               }t?        |tA        |      d0z   d1       i |t        |      |d'   d2S # t2        $ r. |
j%                         r|j%                         rt/        ||
        w xY w)3Nr]  rW  r   r   rj  checkin_clir*  r[   z'profile package drift before deploymentz/.local/state/dualcoach-provider-auth-deploymentbackupsrP  r   Tr   z deployment backup already existsrM   z.checkin_cli.deploy-z!deployment staging already existszdeployment staging differsz deployed profile package differsr  ra   rN  r   rZ  r[  r   r$   r   r   r   Fr   r   r   source_package_tree_digestr+  deployed_package_tree_digestsource_package_entry_countdeployed_package_entry_countbackup_pathwheel_source_equalityr  r  r  )r  r  r  r[  rO  r   )deployment_receiptr  )!r   r^  re  ri   r   r   r   r   r   r   r   r\   r6   r   r  r:  r   r   r   r3   ra  r  r  r  r  BaseExceptionDEPLOYMENT_SCHEMAr*   r^   rn   r  r	  r   )rf  rI   verifiedrn  r   rj  activer  r   backupstagingdeployed_entriesr   receipt_paths                 r   deployr  =  s   >>!!#Ddt'>'>'@PTPbPbPjPjPlvz  wC  wC  wK  wK  wM  ae  aw  aw  a  a  aA  SW  Sg  Sg  So  So  Sq  rHzz4";;FFPWFXYHll""$G+%I&F/0;NF~-FGGIIKKKEYX.E%F!GG-WF
MMUD4@}}&++-@AAVV$
LL0:Q1R0STTG~~7--/ABBVW%G.9::VW%'/~- !CDDW
#& 	 *A!B 	H%78	
 	$[8Q1Q%R 	)(3 	 	E 	"1 	! 	%h/@&ABV&W 	'7G(H 	%c.&9 	',<(= 	s6{  	 +34Q+R(01K(L+34Q+R$W-h7	"
!G. +,L,	' 2U :EB Jh  Jc,.?ah  jH  bI  J  J;  >>VW-s   &K7 77L.c                    t        j                         } | j                  dd      }t        j                  d      }|j                  dt        d       |j                  dt        d       |j                  d	t        d       |j                  d
t        d       |j                  dt        d       |j                  d|g      }|j                  dt        d       |j                  dt        d       |j                  dt        d       |j                  d|g      }|j                  dt        d       |j                  d|g      }|j                  dt        d       | j                         S )Nrs   T)destrequiredF)add_helpz--repository)typer  z--evidence-rootz	--profilez--workspace-receiptz--workspace-indexrq  )r   z--wheelz--gate-receiptz--output-parentre  z--candidater  )argparseArgumentParseradd_subparsersadd_argumentr   
add_parser
parse_args)parsercommandscommonseal_parserverify_parserdeploy_parsers         r   r  r  z  s`   $$&F$$)d$CH$$e4F
TDA
)tD
$>
-D4H
+$F%%fvh%?KYTDA-D4H.TDI''6('CM}4$G''6('CM}4$Gr    c            
        t               a	 t        j                  dk(  rt        t              } i t	        | t        j
                  j                         t        j                  j                         t        j                  j                         t        j                  j                         t        j                  j                               dt        |       i}nt        j                  dk(  rt	        t        j                  j                         t        j
                  j                         t        j                  j                         t        j                  j                         t        j                  j                         t        j                  j                               }nt        t              }t-        t/        j0                  |d             y
# t        t        t         t"        t$        t&        t(        j*                  f$ r@}t-        t/        j0                  dt3        |      j4                  dd             Y d }~y	d }~ww xY w)Nrq  r]  candidate_rootre  FAIL)ra   reasonT)r   r2   r   )r  rf  rs   rq  re  ri   r^  r   r   r   r   r:  r   r  r6   ra  r   KeyError	TypeError
ValueErrorr   
BadZipFileprintr   r   r  __name__)rI   rj   r  s      r   mainr    s<   <D
<<6!:D Yt0G0G0IY]YkYkYsYsYu  @D  @L  @L  @T  @T  @V  jn  j@  j@  jH  jH  jJ  \`  \p  \p  \x  \x  \z  {  Y  }M  OR  SW  OX  YF\\X%DNN224AXAXAZjnj|j|  kE  kE  kG  QU  Q]  Q]  Qe  Qe  Qg  {  {Q  {Q  {Y  {Y  {[  mq  mA  mA  mI  mI  mK  LFD\F 
$**Vt
,-	 OWh	:W^WiWij djjFd5k6J6JKW[\]s   F+G 2I

6II
__main__)r   objectreturnrF   )r   rF   r  r:  )r)   r   r  r:  )r)   r   r  intr"   )r)   r   r8   r:  r9   zset[int] | Noner  None)r)   r   r8   r:  r9   set[int]r  r  )rI   r   rJ   r:  r  dict[str, object])rI   r   r  list[dict[str, object]])r[   r  r  r:  )ri   r   r  rF   )r   rF   r  r  )rx   rF   r  r:  )r   r   r  z)tuple[list[dict[str, object]], list[str]])r)   r   r   r:  r9   r  r  r  )r   r   r  bool)r   r   r  r  )r   r   r   r   r   r   r  z1tuple[dict[str, object], list[dict[str, object]]])r   )r)   r   r   rF   r  r  r  r  )r>  r  r   r   r?  r  r@  r  rA  r  rB  r  rC  r  rD  r:  rE  r  rF  r:  ra   rF   ri   r   r  r  )rI   r   r  z	set[Path])rf  argparse.Namespacer  r   )rI   r   ri   r   r   r   r   r   r   r   r   r   r  r  )r>  r   r  r   r  r  )r  r   r  r   r  r  )r)   r   r  r  )r  r   )rf  r  r  r  )r  r  )r  r  )C__doc__
__future__r   r  r  r#   r   r   rb  r,   re   sysr   r   pathlibr   typingr   r   r   r;  rd  r  rv   rw   r   r_  rz  CONTROLLER_MEMBERr  CODEX_RUNTIME_MEMBERr|  r   r=  r   r   r   r$   r*   r0   r;   r>   rK   r\   r^   rk   rq   ry   r   r   r   r   r   r	  rJ  rL  rq  re  r  r  r  r  r  r  r  r  
SystemExitr   r    r   <module>r     sA   #     	    
       
0E K 
/-	 6J 2 / 	    g-%.<D2&	A		!/d]8(G#G G +	G
 -G ,G 1G $G G  G G G G GT@=@P
P P 	P
 P P P Pf&1s:Jz($ z
TV
 r    