+
    „WÝjÎ  ã                   óh   € R t ^ RIHtHt ^ RIHtHt ^ RIHt ]]3t	R t
R tR tR tR tR	 tR
 tR# )zHTranscript mutation guards evaluated on the receipt's writer connection.)Ú_ENDED_ROW_SQLÚ_ended_by_compression)Ú!SessionCompressionInProgressErrorÚSessionTurnLeaseLostError)ÚRuntimeStoreErrorc                óZ   € \        V \        4      p\        RV'       d   RR7      # RR7      # )z¦The client-facing refusal for one of ``MUTATION_GUARD_REFUSALS``. A held compression lock
is named in ``field``: Stop does not end it, so clients say to wait instead.Úsession_busyÚcompressionN)Úfield)Ú
isinstancer   r   )ÚexcÚcompressings   & ÚPC:\Users\johnn\AppData\Local\hermes\hermes-agent\hermes_state_mutation_guards.pyÚbusy_refusalr      s)   € ô ˜SÔ"CÓD€KÜ˜^ÇK°=ÔZÐZÐUYÔZÐZó    c                ó&  € V F…  pV P                  RV34      P                  4       pV P                  RV34      P                  4       p. VOVO Uu0 uF  qU^ ,          kK  	  ppRV9   d   \        R4      hV'       g   K|  \        R4      h	  R# u upi )aT  Refuse while a turn is running (or its outcome is unknown) on any of ``session_ids``.
Queued admissions are allowed: a follower waits on the logical owner and simply runs
against whatever physical target the mutation publishes. Workers have no queued state
(registered/running/unknown are all live), so any non-terminal worker is executing.zcSELECT status FROM session_admissions WHERE target_session_id=? AND status IN ('started','unknown')úhSELECT status FROM worker_executions WHERE session_id=? AND status IN ('registered','running','unknown')ÚunknownÚunknown_executionr   N)ÚexecuteÚfetchallr   )ÚconnÚsession_idsÚsidÚ
admissionsÚworkersÚrowÚstatess   &&     r   Úrequire_not_executingr      sÅ   € ó
 ˆØ—\‘\ð  #Hð  KNð  JPó  Q÷  Zñ  Zó  \ˆ
Ø—,‘,ð   Jð  MPð  LRó  S÷  \ñ  \ó  ^ˆØ$; jÐ$;°7Ñ$;Ó<Ñ$;˜S�a—&�&Ñ$;ˆÐ<Ø˜ÔÜ#Ð$7Ó8Ð8ß‰6Ü# NÓ3Ð3ó ùò =s   ÁBc                 óœ   € \        VP                  \        V34      P                  4       4      '       d   R # V P	                  WR RRR7       R # )NT)Úreject_active_turn_leaseÚreject_active_compression_lock)r   r   r   ÚfetchoneÚ_check_transcript_write_guards)Údbr   r   s   &&&r   Ú_require_transcript_unleasedr%   "   sE   € ô ˜TŸ\™\¬.¸3¸&ÓA×JÑJÓL×MÒMÙØ×%Ñ% d°Ø!%Àdð &ö Lr   c                óF   € \        W4       V F  p\        WV4       K  	  R# )zðFence for writes that publish a new physical target (reset, compress, model):
refuse executing/unknown work and live transcript leases, never a queued follower,
which waits on the logical owner and runs against whatever target is published.N)r   r%   )r$   r   r   r   s   &&& r   Úrequire_target_advanceabler'   +   s    € ô ˜$Ô,ÛˆÜ$ R¨sÖ3ó r   c                 ó>  € V F‘  pVP                  R V34      P                  4       pVP                  RV34      P                  4       p. VOVO Uu0 uF  qf^ ,          kK  	  ppRV9   d   \        R4      hV'       d   \        R4      h\        WV4       K“  	  R# u upi )zlSELECT status FROM session_admissions WHERE target_session_id=? AND status IN ('queued','started','unknown')r   r   r   r   N)r   r   r   r%   )r$   r   r   r   r   r   r   r   s   &&&     r   Úrequire_idler)   4   sË   € ÛˆØ—\‘\ð  #Qð  TWð  SYó  Z÷  cñ  có  eˆ
Ø—,‘,ð   Jð  MPð  LRó  S÷  \ñ  \ó  ^ˆØ$; jÐ$;°7Ñ$;Ó<Ñ$;˜S�a—&�&Ñ$;ˆÐ<Ø˜ÔÜ#Ð$7Ó8Ð8ßÜ# NÓ3Ð3Ü$ R¨sÖ3ó ùò =s   ÁBc                óÆ   € ^ RI Hp V! RR4      pV P                  RV,           R,           V,           W34      P                  4       pV Uu. uF  qU^ ,          NK  	  up# u upi )aÐ  One both-direction compression step from *sid*: its continuation children and its
compression parent. Fork markers are matched against the edge's parent id (the
``_non_continuation_child_sql`` rule), never by presence: a continuation copies its parent's
``model_config``, so an inherited ``_branched_from``/``_delegate_from`` naming an older row
does not make it a fork, and a delegate's continuation published by a canonical ``compress``
carries no marker at all.)Ú_non_continuation_child_sqlzchild.z	parent.idz”SELECT child.id FROM sessions parent JOIN sessions child ON child.parent_session_id=parent.id WHERE parent.id=? AND parent.end_reason='compression'
z› UNION SELECT parent.id FROM sessions child JOIN sessions parent ON parent.id=child.parent_session_id WHERE child.id=? AND parent.end_reason='compression'
)Úhermes_state_commonr+   r   r   )r   r   r+   ÚedgeÚrowsr   s   &&    r   Ú_continuation_edgesr/   @   s‚   € õ @Ù& x°Ó=€DØ�<‰<ð	BØDHõ	IðAõ	Að DHõ	Hð KNÈó	U÷ V^ÑU]ÓU_ð	 	ñ
 #Ó#™d�s��FˆF™dÑ#Ð#ùÒ#s   Á
Ac                 ó\  € ^ RI Hp ^ RIp^ RIHp ^ RIHp ^ RIHp ^ RIH	p V0pV! W4      p	VP                  V	4       V P                  RWY,           34      P                  4       p
V
eC   VP                  V
^ ,          4      pV! W4       VP                  VP                  RV.4      4       ^ R	IHp \$        P'                  W�4      p\)        V4      p\+        V4       F¸  p/ pV FL  p\-        V V4       F9  pVV9  g   K  VV9  g   K  V! WV,          V4      '       g   K-  VV,          VV&   K;  	  KN  	  V! W4       F  pVV9  g   K  VP/                  VV4       K   	  V'       g    M1VP                  V4       VP                  V4       \)        V4      pKº  	  V.\1        W�0,
          4      O# )
é    )Ú_collect_delegate_child_idsN)Ú
_CHAIN_CAP)ÚPOLICY_PREFIX)Úvalidate_local_lineage)Úlocal_lineage_ownerz(SELECT value FROM state_meta WHERE key=?Úlineage)Úsame_history_owner)Úhermes_state_sessionsr2   ÚjsonÚhermes_state_compressionr3   Úhermes_state_localr4   Úhermes_state_local_lineager5   r6   Úaddr   r"   ÚloadsÚupdateÚgetÚhermes_state_mutation_bindingr8   ÚdictÚfromkeysÚlistÚranger/   Ú
setdefaultÚsorted)r   Ú
session_idr2   r:   r3   r4   r5   r6   ÚtargetsÚownerÚsavedÚreceiptr8   ÚanchorÚfrontierÚ_Úfoundr   Únxts   &&                 r   Údelete_targetsrS   Q   sy  € ÝAÛÝ3Ý0ÝAÝ6Øˆl€Gñ   Ó1€EØ‡K�K�ÔØ�L‰LÐCØ'Õ/Ð1ó3ß3;±8³:ð 
àÒØ—*‘*˜U 1�XÓ&ˆÙ˜tÔ-Ø�‰�w—{‘{ 9¨z¨lÓ;Ô<õ AÜ�]‰]˜7Ó/€FÜ�G‹}€HÜ�:ÖˆØˆÛˆCÜ*¨4°Ö5�Ø˜gÖ%¨#°UÖ*:Ñ?QÐRVÐ_bÕXcÐeh×?iÔ?iØ!'¨¥�E˜#“Jó 6ñ ñ /¨tÖ>ˆCØ˜'Ö!Ø× Ñ   cÖ*ñ ?÷ ÙØ�‰�eÔØ�‰�uÔÜ˜“;Šñ ð Ð8œ ¨,Õ 6Ó7Ð8Ð8r   N)Ú__doc__r,   r   r   Úhermes_state_errorsr   r   Úhermes_state_runtimer   ÚMUTATION_GUARD_REFUSALSr   r   r%   r'   r)   r/   rS   © r   r   Ú<module>rY      sD   ðÙ Nß Eß \Ý 2ð
 5Ð6WÐXÐ ò[ò4òLò4ò	4ò$ô"/9r   