
    yj(                       U d Z ddlmZ ddlZddlZddlZddlZddlZddlZddl	m
Z
  e
e      j                         j                  Zej                  d   Zedz  Zedz  Zedz  Zd	Zd
ZdZdZg dZg dZedz  ddfedz  ddfedz  ddf e
d      ddf e
d      ddf e
d      ddfgZedz  Zdd d!d"d#d$d%d&d'd(d)d*d+d,Zed-z  Zd.d/d0d1d2d3d4d5d6Zd7Zd8Z g Z!d9e"d:<   d@dAd;Z#dBd<Z$dCd=Z%dCd>Z&e'd?k(  r ejP                   e%              yy)Da  Lint the Task26 v6 Golden Path and Recovery Runbook pair (runbook-rebind task st_01a0054e).

v6 linter: carries all v3 checks forward (v1-v3 runbooks are preserved byte-identical and checked by
their own linters) and adds the v4 groups: path-existence (on-disk hash/mode/ownership verification),
no-secret (raw token and unapproved IDs absent), obsolete-path-negative (session-file references only
inside prohibition statements), and archive-CLI (exact verifier command with the actual seal path).
    )annotationsN)Path   z!task26-golden-path-2e0894ea-v6.mdz&task26-recovery-runbook-2e0894ea-v6.mdzrunbook-binding-receipt-v6.json@2e0894eac92bc396cc4723bf1f18ebc653b95018dd41574df435941c235da925@af4a9d0a1ffffb6eb7551c1d6dc2b32853ca6d024332a4f8f5702bbf992f141b@7ace03c6dad33d2fc3ef223621cbca68a150fde8429932138e252fb8498ac582
8527916639)I@b852482350129dd025f0c4c79539e04a71c4758c9ec336e2c5bcda44676791f6@cd9e080ab886d503a205e7a7335eb23942b161daeaa2028a6e8f63492a99ba68@8278dde4efa8bcd366fce873ccc07f651818275238b67452b9e6cb93c67afd6d@6aeaaab42e0030b0f626037d7b9ef6661ec93fb57fd991c843967c1fc695905c@16acf1b355715379ad526433803353e1f34c418e9560fc1466f3f77f951df919@7d163cb01708869d617efeadd852f7e6ec4f963a94c50d19b104cc849483c171@f9a46172386333a0067f43695fb1429a043a606f04baceb06e8c59b90c36235c@0e9b4b1f0449d8351602598fead3ef01b8616e230c147e44db79667284ceae49@83c95abb4b07f30fae0d996a7148c92b2db4600f6f3da2aadaf50a7ff62c71fc@847548932b42210416fcfc302574e523778f12aecd2614ac28a95af6602c8dcc@c7fc477141259087e8e9dd6520b2066eda3bab20dc6e2f625942431b6830c187@c9a6bb0fea893d90956249264277481039a522021001495f07a2a28ec6280e0d@8732bbac3bccb5b235597b7841190c31bf39f8644cd70c79a5dbad2334fd8994@23845bda574c085e16b6d316e5e84e54b3bc6db3a8803c6b3b93ed7c4b86b049@145515d5e110dcebb94fcaa554bcee29544b3a75dcfe058fae944ea3b70042b2@8b03fa714304b34a7f19dc9b077d8fbd54e7f7bc46232bf8d5bc65ae7b873ff5@7b6a1aa54b58d6e7e6733a963772e220a903ffae5a3e0e6d089283af13e097db@cb06310270868da5dfc3c1d292b0ccedd5f3021d0f211576449c96649fa4730b@90fcb04be789fd519d6bb83f9ba659927721e9d272594de84329c42c3529ed18@d8d818cdfd2a22b088064b216136bfdee050b096a5b7fdcc9fb6f5958312dd05@fab6322753cccca614e1ee83bf5221013185662a74c86f5d19563e38f0fc0d2b@769db2bd5c39e405176ecb438d05ad0f10c538ee53c6c7849e809123f91ecb88@78d7474df421f26ec4d106fa378270f60e57178553c3423fad717698c0fd5b22@e6888d62915b4b57b22b2769ebf46a7a1ee57d0d4ad7c4d5c1502bffc895ebdf@bd051dda8666ce9e014ec79c58acd4d7b8df2c27fad01a7a78c76e46c3388baf@4128cece087f3f4eb84c3917207299fae6bd1ac9971d7e4e8676549106bb7c20@8a290b11cac5b6957c772366abe875c7f635b8a3e7956a665471ffaa90b6c495@2fc323f8b00c18f21598f717fb6a19a7e342b7786909e59adcf4bc3955bcef99@776e90301a63dce8912bf8a4110cd037f833c3a0e875a3ddd1289c0c9ee2ac9e@12b97aa72e2df86719dbb7b80b477237d590aaaea81a9f812f321a1566936528@29db87f2855c4804dbbc69244e68d9fb9f51808f7f7759fb592ed68f5f090185@28ff72fdb7925cbdcd8e7dd7e8c058bcca42cab3377c34078164766197ed6968@597a37e4912d729b3b5f6022bccff6dc12a73b024128805980f5ab1ade4fb83d@d2879b128573a9d75a55958d2fa3e1a24be1636f0a7a20affe8f2ef9b94dfd33@a8191eed20ca75abcb03c33ac0c0b915cd810249466e816c6a1a55ba154af188@f5d51008f1e8c8ee102df930fa68c7945a3276a249187adc7b7f6ba4b1e8e134@3eca06827bfd62a4f07498bf7fed54e3b2b47a9f62e1f5b81701d1453e88806e@cc0e4b697633150f3626daa8cf5bb4825bc96243f1a3dfadb6c9f540cad9906c@6ab725042cbed536d8a8f3faee29e431470617f21d83c795e19574a27fcd032f@1f55b8f967c6564113574d41bf1c15ce977d35c38b5687f1623ba37f235a7bdb@f4f2d2347b4b68a080b9c437a813accbef8c4bcc471cbf21d67ffff31e56f89b@633d5c25ce70cb9ab5d19c434122b14b46fb7108962ab6e453ce6ab3ede1848f@6024c26ccae3cad7fcf46a77bca8607d73293a92ddb3dcf8fa5a278361869f1d@ff230719eb5a69ae821bb0a4d58356d59b2803c490d692659a197e22083793c7@e62691493d2a75c312dd248a07bbc52f7f1d98d4acd701b824bbaf5edf8bdd3a@32a379d855c6e5af978bd9886e3bf49c616c7c20f1c1d5f100c19d8adfc5eb4a@ae2f5f9046c06f8f0b42693be5aa0d9c31cada8024ae1e5ab8ba19a3cf10f6fc@f93106b16643227e2ef9dec67a5bbd497e1d353e779da62287898a087071af87@0b46e887fc12c45f12814f4ef025c10101ed36e5df0ac35f70abb1862c0c1db2@28420d4aa8fc1ee1298c9fe93a69e47aa187c0d2777ca672fb603cfbebc569cf9eb1b5ae7004dac90bd0afb968de185a@154f588c89758c6ca6a1e06cc39ce9489d5c3ff8ace94e10e71cce919252bcca@d0aacf0f4bdbb7c04e12769947c498ee869248972b36f099800a3d3c27c0a3a8@b41060dea28eb3bbb83217068f5218d5df2c879dba00e73c9ca4e577a6049dad@849791bc3b31145a691b8ef4defacba72aeb5de0fca12427988ec1ddd4e9fffa@b48e2b49f0939316e7e4368c940492d1b8a94863da7e5c8141f7f67a1fe08efb@58ed20c6f12887c10d6bf4fb388dded7c1eec9b30ec7f6bffa7c67e7e237b2c8@68d98bca346296eacbe4c2cef9a105072314ba542728b043bbff319b6b19b466@7d637a2587079fc94c28e2866d4f337e97fea102e50f37542299e9611c226489@763aa448fc0220a237fe3a29ebfbd01c6d9ec2855c3db90ac12f157a7a0f2e0d@b9bd1a93af4969692d23a3e4632825d0c72c02842732bad0447d9b8ce8ce3fdb@6fe4e7375bf1ff51ca6fc0850f9adcb6d8baef2b9e6bbce8116ef1044a9ecf06@23e673309b4d7cdd1eed77ae8126e58100270f9e4d13ca1093b01c4b1667543e@a6991e5203ac84f91d8a1c46d32de51c9ac56d63b2906e86583d33c946756bb0@3ecf6cf7f3384a3a03701f4f565edf6a571a82b53fabd3e8de36ea8648189221@26219f277a95d6f001d1055de72287c60bbf3605602d7725ae571aceb436bad1@6281af7400d166acc4fae18af7fbaa401890eb7ef49607967398118d488f09b4@475b72cb29ec28f085efdd1af5382f61b70db460aec861c52bc350c43dbe175b@6ca2fcdbe1c516a68281be941ebe7a2101f0b70fbf95bdff38b7817e1630cee1@d128cb14884551bb9f21562c5111e3685ddb40c0bf023af85f7427855ee70d5c)z4python -m hermes_cli\.nutrition_readiness --customerzrequest-generation --customerzrecord-generationz$customer_admin --registry \S+ createz#customer_admin --registry \S+ resetz$customer_admin --registry \S+ deletez.customer_admin --registry \S+ set-next-checkinzdisable <[^>]*> --reasonz1/home/cube/\.hermes/profiles/dualcoachtest/\.venvz0/etc/systemd/system/hermes-gateway-dualcoachtestzdry-run, verify, executezgateway/cron/scheduler\.pyz telegram_customer_onboarding\.pyeff71467z-exit `?2`?,? stdout JSON `?status`? == `?PASSz.(?<!retained-)archive-verifier-permission-sealzTelegram auth files underapi_idz%telegram_nutrition_onboarding_e2e\.py)scripts/telegram_nutrition_onboarding_e2e"task26-invite-harness-st_01a0056a/zinvite_harness\.pyzC.omo/evidence/task26/retained-archive-verifier-permission-seal.jsonr)      z0.omo/evidence/task26/verify_retained_archives.pyr'   @  z;.omo/evidence/task26/retained-archive-schema-inventory.jsonr(   ./home/cube/.hermes/profiles/dualcoachtest/.envr@     z5/home/cube/.hermes/profiles/dualcoachtest/config.yamlr9   D/home/cube/.config/systemd/user/hermes-gateway-dualcoachtest.servicer:   :.omo/evidence/task26/task26-lifecycle-observer-st_01a005b4)rE   rX   )rF   rZ   )rG   rZ   )rH   rZ   )rI   rZ   )rJ   rZ   )rK   rZ   )rL   rZ   )rM   rZ   )rN   rZ   )rO   rZ   )rP   rZ   )rQ   rZ   )zlifecycle_observer.pyzpermission-seal.jsonzmanifest.schema.jsonzlive-arm-manifest.jsonz"verification-receipt.redacted.jsonzartifact-hashes.sha256EXACT_COMMANDS.mdzruntime-manifest.template.jsonztest_lifecycle_observer.pyztest-results.txtzruff.txtzcompile.txtzlive-arm-only.redacted.json9.omo/evidence/task26/task26-invite-harness-st_01a0056a-v2)r   rX   )@bb3ae896f8dd1a51d2f9df425f3afdc2bf72f73877163b6941a2bba2ee44b4adrX   )r   rZ   )@6a4249d263db04bea1432ad2393150ed77d3243a1365ed8dbe1eed5c0261df9erZ   )@82099d8a3658a494c3cf13558e43fe7846e7e826cfcdec6c10515f05a697752drZ   )@ad6cd01cfb85aa4183cea5067fab4a507cbae2a8418223c4f160b9253cf388e0rZ   )r   rZ   )r   rZ   )zinvite_harness_v2.pyzindependent_verify_v2.pyzpermission-seal-v2.jsonzschema-v2.jsonOPERATIONS-v2.mdzhashes-v2.jsonz%verification-receipt-v2.redacted.jsonztest_invite_harness_v2.py)auth_39664143z.session-journalz.local/share/hermes/telegram)neverobsoleteprohibit	forbiddenabsentdeletedzlist[dict[str, object]]resultsc                H    t         j                  | t        |      |d       y )N)checkokdetail)rk   appendbool)namern   ro   s      S.omo/evidence/task26/task26-runbook-rebind-2e0894ea-st_01a0054e/lint_runbooks_v6.pyrm   rm      s    NNTbVDE    c                d    t        j                  | j                               j                         S N)hashlibsha256
read_bytes	hexdigest)paths    rs   	sha256_ofr|      s!    >>$//+,6688rt   c                 |*  %& t        dt        j                         xr t        j                         t        j                   dt        j                          t        j                         rt        j                         s
t               S t        j                  d      %t        j                  d      &d%fd&ffD ]  \  } }t        |  dt        |v        t        |  dt        |v        t        |  d	t        |v        t        |  d
t        |v        t        |  d|j                  t              |j                  d      z   dk\  |j                  t              |j                  d      z           t        |  dd|v xr d|v         t        D ]  }t        d|d d  |%v xs |&v |        t        D ]U  }d%fd&ffD ]H  \  } }t        j                  ||      }t        |  d|d d  |d u |r|j!                  d      d d nd       J W d}t        d%j                  |      dk\  xr d%j#                         v        t        d&j                  |      dk\         g d}|D ]  }t        d|d d  |%v         |D cg c]	  }|&v s| }	}t        d|	 d |	        d!D ]$  }
t        d"|
 |
%v       t        d#|
 |
&v       & d%fd&ffD ]_  \  } }t        |  d$|j%                         j'                  d%             t        |  d&d'|v xr d(|v        t        |  d)d*|v xr d+|v        a t        d,d-%v xr d.%v        t        d/d0%v xr
 d1%v xr d2%v        t        d3d4&v        t        d5d6&v        t        d7d8&v        t)        d9 %j+                         D        d      }t        d:t-        |             t        d;d<|j#                         v       t        d=d>|v xr d?|j#                         v        t        d@dA|v        t)        dB %j+                         D        d      }t        dCt-        |             t        dDd<|j#                         v xr dE|v        d%fd&ffD ]0  \  } }t        |  dFdG|v xr t        j                  dH|      d u        2 t        dIdJ&v xr dK&v        g dL}|D cg c]  }%j/                  |       }}t        dMt1        dN |D              dO|        t        dP|t3        |      k(  dO|        t        dQdR&v        t        dSdT%v        t        dUdV%v xr dV&v        t        dWdX%v xs dY&v        t        dZd[%v        t        d\d]%v xr d^%v        t        d_d`&v        t        dadb&v        t        dct        j4                  dd%      D cg c]  }|j7                          c}%j/                  de      t9        df      z   gk(         t        dgdh%v        t        didj%v        t        dkdl%v        t        dmde%v        t        dndo&v        t        dpdq%v xr dr%v        t        dsdt%v xr du%v        t        dvdw%v        t        dxdy%v        t        dzd{%v        t        d|d}%v        t        d~d%v        t        dd%v xs d%v        t        dd%j;                  dd      v        t        dd%v xr d%v        t        dd%v        t<        D ]  \  }}}d|j                  d d  }|j                         st        |dd       8|j?                         }tA        jB                  |jD                         xr/ tA        jF                  |jD                        xr tI        |      |k(  }|&|xr" tA        jJ                  |jD                        |k(  }|xr! |jL                  tO        jP                         k(  }t        ||dtS        tA        jJ                  |jD                                       tU        d{      j                  d      }t        dd|v        t        dd|v        t        dd|v       t        jV                  d      }t        d|j                  %      d u        t        d|j                  &      d u        tU        d      j                  d      }t        jX                  d|      }t        dt9        |      dk(  xrJ t9        |d         dk(  xr7 t[        j\                  |d   j_                               ja                         dk(         |r"t        d|d   %v       t        d|d   &v       d%fd&ffD ]\  \  } }|j+                         D cg c]   dv rtc        fdtd        D              s" }}t        |  d| t9        |       d       ^ d%fd&ffD ]p  \  } }|j+                         D cg c]4  tc        fdtf        D              rtc        fdtd        D              s6 }}t        |  d| t9        |       d       r t        dd%v        d}t        d|&v        t        dd&v        t        dd%v xr d%v xr
 d%v xr d%v        t        dd%v        t        dd%v        t        dd%v xr d%v        t        dd%v xs d%v        t        dd%v        t        dd%v        t        dt1        %fddD                     t        ddŉ%v        t        ddǉ&v        t        dd&v        th        jk                         xr4 tA        jJ                  th        jA                         jD                        dk(  }i }tl        jo                         D ]  \  }\  }}th        |z  }|j                         sd}&|j?                         }tS        tA        jJ                  |jD                              ||<   |xrA tA        jF                  |jD                        xr  tA        jB                  |jD                         }|xr2 |jL                  tO        jP                         k(  xr |jp                  dk(  }|xr2 tA        jJ                  |jD                        |k(  xr tI        |      |k(  } t        d|ts        |             t        dts        th        ju                  tv                    dk(         t        ddΉ%v        t        dt1        %fdЄdD                     t        ddӉ%v xr dԉ%v        t        dt1        %fdքdD                     t        ddى%v xr
 dډ%v xr dۉ%v        t        dd݉%v xr
 dމ%v xr d߉%v        t        dd%v xr
 d%v xr d%v        t        dd%v xr
 d%v xr d%v        t        dd%v xr d%v        t        dt1        %fddD                     t        dt1        %fddD                     t        dd%v xr d%v        t        dd%v xr
 d%v xr d%v        t        dd%v xr d%v xr d%v xr
 d%v xr d%v        t        dd%vxr d&v       t        d d%vxr d&v       t        dd̉&v xr d&v xr d&v        t        dt1        &fddD                     tx        jk                         xr4 tA        jJ                  tx        jA                         jD                        dk(  } i }!tz        jo                         D ]  \  }\  }}tx        |z  }|j                         sd} &|j?                         }tS        tA        jJ                  |jD                              |!|<   | xrA tA        jF                  |jD                        xr  tA        jB                  |jD                         } | xr2 |jL                  tO        jP                         k(  xr |jp                  dk(  } | xr2 tA        jJ                  |jD                        |k(  xr tI        |      |k(  }  t        d| ts        |!             t        d	ts        tx        ju                  tv                    d
k(         t        dt1        %fddD                     t        dd%v xr  d%v xr d%v xr d%v xr d%v xr d%v        t        dd%v xr d%v        t        dd%v xr d%v xr d%v        t        dd%v xr d%v xr d&v        t        dd %v xr d!%v        t        d"d#%v xr d$&v        t        d%d%v xr d&&v        t        d'd(%v xr d)%v xr d*%v xr d+%v xr d,%v        t        d-d.%v xr d/%v xr d0%v xr d1%v        t        d2d3%v xr d4%v        t        d5d%j/                  d6      cxk  xr- %j/                  d7      cxk  xr %j/                  d8      k  nc        t        d9d:%vxr d:&v       t        d;d<%vxr d<&v       t        d=d&v xr d>&v xr d?&v        t        d@dA&v xr dB&v        t|        j                         r	 t        j                  t|        j                  d            }"|"t        dCdD       t        dE|"j                  dF      dGk(         t        dH|"j                  dI      t        k(         t        dJ|"j                  dK      t        k(         t        dL|"j                  dM      t        k(         t        dN|"j                  dO      t        k(         t        j                  |"      }$t        dPdQ|$v xr dR|$v xr dS|$v        t        dTdU|$v xr dV|$v xr dW|$v        t        dXdY|$v        t        dZd[|$v        t        d\t-        |"j                  d]                   t        d^|"j                  d_i       j                  d`      d'k(         t        da|"j                  d_i       j                  db      dck(         t        dd|"j                  d_i       j                  de              t               S t        dfdDdg       t               S c c}w c c}w c c}w c c}w c c}w # t~        j                  $ r$}#d }"t        dCdts        |#             Y d }#~#Zd }#~#ww xY w(h  Nzfile-pair-existsz, utf-8encodinggprcz-candidate-full-hashz-wheel-hashz
-plan-hashz	-actor-idz-candidate-mentions>=82e0894ea   z-version-markerv6z
2026-08-15zpin-z-stale-absent:$   r   P    @19ed0e6047f0a4d7650c47a7413ee0298a243f768a63bcb8fb9cffe44d140a1azgp-stale-candidate-superseded   	supersedezrc-stale-candidate-superseded)	task22_dm_rehearsaltask26_synthetic_rehearsaltask26_same_actor_rehearsalzcb_2NQV5sbkN-M6awycJH7X5gcb_6S6RABpDgZ165V02A7qEzwcb_9yTz0oNwdU8s8hradru8BAcb_rmDnfrqA6gkmjoQEdwxu0gwizard_995f04a3b8bc256fa13ff4073f44a18ea620d963zgp-forbidden-id-   zrc-forbidden-id-overlap-scanz	overlap: )z<link>z<token>z<nonce>TBDplaceholderFIXMEzgp-no-placeholder-zrc-no-placeholder-z-headingz# z-has-verdict-languagePASSFAILz-private-evidence-modes600700zgp-evidence-pins-verifier-exit0zExit `0`zverifier-input.jsonzgp-deadlines-tablez120 secondsz600 secondsz
90 secondszrc-supported-command-tablez'| Interface | Supported command shape |zrc-void-interface-sectionzVoid interfaceszrc-abort-matrixzAbort decision matrixc              3  D   K   | ]  }|j                  d       s|  yw)z| G8 |N
startswith.0lns     rs   	<genexpr>zmain.<locals>.<genexpr>   s     L2BMM(4KB     zgp-g8-row-foundzgp-g8-no-absence-demandri   zgp-g8-holder-checkflockzno active holderzgp-g8-scope-checkapproved_clear_scopesc              3  D   K   | ]  }|j                  d       s|  yw)z| G15 |Nr   r   s     rs   r   zmain.<locals>.<genexpr>   s     N/BR]]95MR/r   zgp-g15-row-foundzgp-g15-lock-absentzgateway.lockz-no-manual-lock-deletionzmanual `gateway.lock` deletionz8\brm [^\n]*gateway\.lock|delete (the )?lock file by handzrc-lock-disposal-rulez0Any other deletion of the lock file is forbiddenzsealed pre-reset)zPre-reset armzPre-reset execute and verifyz%Invite harness `dry-run` and `verify`Exact-wheel deploymentzObserve before prepare/Startz
Lifecycle:zDisable and service stopzCleanup execute and verifyzgp-ordering-chain-completec              3  &   K   | ]	  }|d kD    yw)r   N )r   ps     rs   r   zmain.<locals>.<genexpr>  s     +E9aAE9s   zpositions: zgp-ordering-chain-orderedzgp-mode-order-cleanupz"`dry-run` -> `execute` -> `verify`zgp-approval-literal-phrasez-'TASK26_ARCHIVE_FIRST_PROFILE_RESET_APPROVED'zgp-cleanup-approval-phrase.TASK26_POST_LIFECYCLE_ARCHIVE_CLEANUP_APPROVEDzgp-one-preparezinvite_prepare_maximum` is 1zone-prepare maximumzgp-one-startzaccepted_start_claim_maximum: 1zgp-one-deliveryzexactly one customer DMz%exactly one `adaptive_plan_delivered`zrc-no-recovery-shortcutszrecovery shortcutzrc-expire-modezinvite_harness_v2.py expirezgp-no-open-gatesz\bOPEN\bzNo gate is OPENzNo gate is zgp-b3-closedz(B3 closed)zgp-g12-closedz(G12 closed)zgp-b6-closedz(B6 closed)zgp-decision-completezrc-matrix-decision-completezno row is blockedzgp-readiness-cli-correctz(checkin_cli.readiness_cli --profile-rootz--customer-keyzgp-activate-cli-correctzcustomer_admin --registryz--checklist-evidencezgp-disable-cli-correctzdisable <customer_key>zgp-venv-correctz./home/cube/projects/richard/hermes-agent/.venvzgp-unit-path-correctr[   zgp-generation-event-drivenzno generation CLIzgp-hermes-home-bindingz5HERMES_HOME=/home/cube/.hermes/profiles/dualcoachtestzgp-digest-domain-clarificationzdifferent digest domainzdifferent domainzgp-pre-reset-commandz&reset_controller.py' execute --profile
 zgp-cleanup-commandszcleanup_controller.py' dry-runzcleanup_controller.py' verifyzgp-harness-commandsz*"$PY" -B "$D/invite_harness_v2.py" dry-runzpath-(   Fmissingzmode zpath-unit-execstart-profilez--profile dualcoachtestzpath-unit-hermes-home-exactzCEnvironment="HERMES_HOME=/home/cube/.hermes/profiles/dualcoachtest"zpath-unit-no-token-envTELEGRAM_BOT_TOKENz\b\d{8,12}:[A-Za-z0-9_-]{35}\bzgp-no-secret-token-patternzrc-no-secret-token-patternrY   z*(?m)^\s*TELEGRAM_BOT_TOKEN\s*=\s*(\S+)\s*$zenv-exactly-one-token.   rA   zgp-raw-token-absentzrc-raw-token-absent39664143c              3  B   K   | ]  }|j                         v   y wrv   lowerr   kr   s     rs   r   zmain.<locals>.<genexpr>B  s     4bNaQ"((*_Na   z-no-unapproved-api-idz linesc              3  &   K   | ]  }|v  
 y wrv   r   )r   nr   s     rs   r   zmain.<locals>.<genexpr>H  s     8'7!a2g'7   c              3  B   K   | ]  }|j                         v   y wrv   r   r   s     rs   r   zmain.<locals>.<genexpr>I  s     H4Gq1
?4Gr   z-obsolete-only-in-prohibitionzgp-g14-prohibits-session-fileszBnever create, copy, restore, or require the obsolete session fileszverify_retained_archives.py .omo/evidence/task26/retained-archive-schema-inventory.json --permission-seal .omo/evidence/task26/retained-archive-verifier-permission-seal.jsonzrc-archive-cli-exactzrc-archive-cli-exitcodeszexit 0 = PASS, exit 1 = FAILzgp-archive-seal-pins28ff72fd12b97aa729db87f2597a37e4zgp-g14-row-bot-apiz| G14 | Bot API authorityzgp-g14-section-12z$### 1.2 Bot API authority predicateszgp-g14-token-proofz)exactly one nonempty `TELEGRAM_BOT_TOKEN`z	length 46zgp-g14-loaded-source-equalityzLoaded/source equalityzloaded/source equalityzgp-g14-topic-zeroztopic_id `0`zgp-g14-review-topic-59ztopic_id `59`zgp-g14-five-modulesc              3  &   K   | ]  }|v  
 y wrv   r   )r   hr   s     rs   r   zmain.<locals>.<genexpr>]  s!      %M 7LQ"W 7Lr   )r,   r-   rB   rC   rD   zgp-g14-zero-obsolete-scanzZero obsolete-path referenceszrc-g14-matrix-rowzG| Bot API authority G14 | all Golden Path Section 1.2 predicates hold |zrc-g14-prohibitioni  z"g13-observer-files-exist-hash-modezg13-root-exactr\   zg13-harness-pinrE   z5g13-permission-schema-manifest-verification-inventoryc              3  &   K   | ]  }|v  
 y wrv   r   r   itemr   s     rs   r   zmain.<locals>.<genexpr>w  s"      G _VZtrz _r   )rF   rG   rH   rI   rJ   zg13-exact-commands-pinrK   r]   zg13-three-modesc              3  &   K   | ]  }|v  
 y wrv   r   )r   moder   s     rs   r   zmain.<locals>.<genexpr>  s      o8n8nr   )zsubscribe-outboxz
audit-tailzwatch-deliverieszg13-arm-and-barrier-clizarm-only --profilezmulti-observer --profilez
--ready-fdzg13-exact-timeoutsz--timeout 120z--timeout 600zbounded by a monotonic timeoutzg13-ready-before-triggerzbefore any triggerzstatus: READYznames all three observerszg13-event-driveninotifyzevent-drivenztransition.revision_afterzg13-negative-no-sleep-pollznever sleeps, pollszno sleep, pollingz+g13-negative-no-telegram-cursor-drop-replayc              3  &   K   | ]  }|v  
 y wrv   r   r   s     rs   r   zmain.<locals>.<genexpr>  s#       =T  USDTRZ  USr   )raw Telegramcursorszdrops updateszreplays eventszg13-runtime-manifest-pinsc              3  &   K   | ]  }|v  
 y wrv   r   r   s     rs   r   zmain.<locals>.<genexpr>  s#       +o  Cn$42:  Cnr   )zobserver-manifest.jsonznew session
generationcustomertransactiondraftzdelivery IDszg13-receipts-privatezowner-held 0600 receiptsz0700 run evidence directoryzg13-arm-only-unchangedzlive arm-only proof is PASS	identicalrR   zg13-quality-resultstests9RuffLSPcompilezlive-arm-onlyzg13-no-missing-watcherz$telegram_nutrition_onboarding_e2e.pyz"g13-no-legacy-subscription-commandrU   zg13-rc-root-and-orderz/multi-observer READY barrier before any triggerz're-arm from `transition.revision_after`zg13-rc-negative-pathsc              3  &   K   | ]  }|v  
 y wrv   r   )r   r   r   s     rs   r   zmain.<locals>.<genexpr>  s     &>~dtrz>~r   )zno sleeppollr   cursordropreplayzg12-v2-files-exist-hash-modezg12-v2-root-exactr^   zg12-v2-pinsc              3  &   K   | ]  }|v  
 y wrv   r   r   s     rs   r   zmain.<locals>.<genexpr>  s       5DTRZ 5r   )r   r   r`   ra   r_   r   rb   zg12-v2-exact-operationsrc   z)"$PY" -B "$D/invite_harness_v2.py" verifyz*"$PY" -B "$D/invite_harness_v2.py" preparez*"$PY" -B "$D/invite_harness_v2.py" observez)"$PY" -B "$D/invite_harness_v2.py" expirezg12-v2-absent-ledger-baselineRESET_BOUND_LEDGER_ABSENTz1bootstrap ledger and `data/onboarding` are absentzg12-v2-candidate-initializerzRoomBootstrapStore.__init__zcandidate wheel'sz)never manually initialize an empty ledgerzg12-v2-stable-parent-racez$stable owner-held 0700 `data` parentz$remains absent at the watch boundaryracezg12-v2-one-createz*exactly one candidate initializer creationzsecond creation eventzg12-v2-one-generation1-preparedz,exactly one generation `1`, state `PREPARED`z+exactly generation `1` and state `PREPARED`zg12-v2-no-manual-initz$manually initializes an empty ledgerzg12-v2-qualityz14 harness tests PASSz	Ruff PASSzcompile PASSzLSP errors 0z
10/10 PASSzg12-v2-live-dry-verifyzBoth must report `PASS`z`RESET_BOUND_LEDGER_ABSENT`z`mutations: 0`z`ready_for_one_invite: true`zg12-v2-live-profile-unchanged@4ea2ee60dcc6725c3b8aeca2f4893aa73a7a137ec0d274b813d0383d97787e3ezbefore and afterzg12-v2-wheel-before-preparer   z### 5.1z## 6. One invite preparationzg12-v2-no-old-rootrV   zg12-v2-no-old-executablezinvite_harness.pyzg12-v2-rc-baselinezInvite harness v2zv2 root onlyzg12-v2-rc-negativez%no manual empty-ledger initializationzstable `data` parent watchzreceipt-valid-jsonTzreceipt-schemaschemaz!task26-runbook-binding-receipt-v6zreceipt-candidate	candidatezreceipt-wheelwheel_sha256zreceipt-planplan_sha256zreceipt-actoractorzreceipt-supersedes-v5@3c6a0f24124142fc1b03c350a357d5530aa1a561c4b332e2e6c29a0de74c87e2@e2fbff811e5b0caf4551010c1a47d640bba17febffb951f0525b6ff4dccd71d3@2fb0019a8d9e46cc197f72685a89fc54ca5fb98a52840f41ade5d51f76d86736zreceipt-supersedes-v4@e0979931fb863d957403f71305d33470697813c5e740622b6b05a23a65c76359@f539460f91096cfe32140dd6d5b5a940ff38a13ad67bf6d83302f6732aa719a1@2a00bb6d8103086e729ac5c36041d0e7d602a1c660c21eda20463ea8de1b78e7zreceipt-supersedes-v3r5   zreceipt-supersedes-v2r3   zreceipt-self-hash-presentself_sha256zreceipt-verdictverdicttask_verdictzreceipt-ready-tokenreadiness_tokenREADY_FOR_ONE_INVITE_EXECUTIONzreceipt-no-open-blockersopen_blockerszreceipt-presentz skip: receipt written after lint)Drm   GPexistsRCrr   report	read_text	CANDIDATEWHEELPLANACTORcountPINSSTALE_PATTERNSresearchgroupr   lstripr   next
splitlinesrq   findallsortedfinditerstartlenreplacePATH_CHECKSlstatstatS_ISLNKst_modeS_ISREGr|   S_IMODEst_uidosgetuidoctr   r   findallrw   rx   encoderz   anyPROHIBITION_MARKERSOBSOLETE_NEEDLESOBSERVER_ROOTis_dirOBSERVER_FILESitemsst_nlinkstrrelative_toREPOINVITE_ROOTINVITE_FILESRECEIPTjsonloadsJSONDecodeErrorgetdumps)'labeltextpinpatmstale_candidateforbidden_idsfidfoverlapwordg8_lineg15_linechainc	positionsr{   want_sha	want_moderr   strn   	unit_texttoken_patternenv_rawr   	bad_linesbad	exact_cliobserver_files_okobserved_modesinfo	invite_okinvite_modesdataexcdumpedr   r   s'                            `           @@rs   mainrJ     s   	
biik9biikbggYb	;RSIIKBIIKx	w	'B	w	'B r
T2J/t+,i4.?@{#Ud]3z"DDL1y!5D=1-.

90E

S]H^0^bc0cI&J)??@	C')N,$:NO 0 S!WIr	 6SBY<  !2Jr
3KE4		#t$AUG>#cr(4a4iTUCR[]^ 4  YO	
)288O+D+I+gk]_]e]e]gNgh	
)288O+D+IJLM  Sb
+SBY7 '3-Q17q-G3	
(g+7)7LMO"4&)4r>:"4&)4r>: P
 r
T2J/tx $++-":":4"@A,-v~/P&D.Q./$1P5D=Q 0 

+Z2-=-]BW[]B]^	
 3 b8K bP\`bPbc	
&(QUW(WX	
%'8B'>?	
4:; LLbQG	
T']+	
#XW]]_%DE	
7 2 \7IW]]_7\]	
6'ABN"--/NPRSH	
d8n-	
HNN,< < [S[A[\r
T2J/t/02RVZ2Z 3g))WY]^bff	h 0 

!#UY[#[ $' B&(GE &++UUI+	
&+E9+E(EU^T_G`a	
%yF94E'EU^T_G`a	
!#G2#MN	
&(W[](]^	
&(X\^(^ )A
:b
@B	
:b@_DY]_D_`	.;rAB	
6"<nAhlnAno	
$&9R&?@	
9R?@	
"++k22NO2NQqwwy2NO77$%M(::
;< =	.-2-.	/>R/0	.-2-.	
 "3r"9:	
')<)BC	
$&PTV&V&q[koq[qr	
#%@B%F%gKaegKgh	
"$<$BC	
MQSST	
 "hln"no	
&(;r(AB	
"$[_a$ab	
*,E,K,gOaegOgh	
 "JbjjY]_bNc"cd	
!AR!G!qLkoqLqr	
!MQS!ST &1[!h	tyy"~&'{{}$y)ZZ\,,rzz**hRZZ0HhYW[_`hMh ?bjj1Y>B.RYY"))+-dB%DLL$< =>?@ &1 \])W)- 	
')Bi)OP	
')n* 	
"$8	$IJ JJ@AM	
&(<(<R(@D(HI	
&(<(<R(@D(HICDNNX_N`G


@'JA	
!3q6Q; $M3qt9? $M
..1
'
1
1
3
LMN 	#QqT^4#QqT^4r
T2J/t"&//"3 d"3B"b(4bNa4b1b "3	 d,-9}Y@PPV>WX 0 r
T2J/t OO- J-b8'788H4GHH - J 	453w3s8*F@ST	 0
 

*,p- iI	
 )r/2	
$&D&JK	
 *"2 #zR7G #JZ\L\ #B  

 ;r AB	
EKL	
 Kr Q gVaegVgh	
)+Cr+I+kMeikMkl	
~34	
"Or$9:	
 %M 7L %M "M N 

%'F"'LM	
hlnno	
 dhj jk &,,.hDLLASASAUA]A]4^bg4g%'N'5';';'=##xt#{{} %zz|"4<<#=>t-o$,,t||2LoUYUaUabfbnbnUoQo-c$++2LcQUQ^Q^bcQc-y$,,t||2LPY2Yy^ghl^mqy^y (> 

.0A3~CVW	
C 9 9$ ?@  EA  A  B	
_ceef	
A3 G _ G D  

"$fjl$l %$

#%	
S o8n oop	
#%9R%?%{D^bdDd%{iuy{i{|	
2 5 z/R:O zTtxzTz{	
$&:b&@  'A_XZEZ  'A_z  A  `A  B	
i2ol.B2FlKfjlKlm	
&(=(C(aH[_aHab	
7  =T  US  =T  :T  U	
%s  +o  Cn  +o  (o  p	
 "<"B"jGdhjGjk	
"$AR$G  %kK[]L]  %k  ce  ik  ck  l	
R!~FbL!~Ub[!~U^bdUd!~ix|~i~	
"$JRT$T  %JY  HJ  ZJ  K	
.0[ce0e  1`  kV  ^`  k`  a	
!#_ce#e $v
;r
A$vFosuFuw	
!3&>~&#  A ""$Zk6F6F6H6P6P)QUZ)ZI#%L'3'9'9';##xT!{{}Izz|#dll4<<6P2Q\$/_$,,t||"<_T\\RVR^R^E_A_	S$++"<SRSAS	i$,,t||"<	"IiiX\oaiNi	 (< 

()S5FG	
s;#:#:4#@A  FA   A  B	-  5    

#%72%= &<
6"
<&<
5
;&< 7"
<&< 7"
<	&<
 6
;= 

)+F"+L ,D
=
CE	
(*G2*M +Z

#+Z(SWY(Y[	
%'MQS'S (H
0B
6(H;AR<I	
KrQ  (
!R
')	
+-[_a-a .>
72
=?	
!#NRT#T $7
0B
68	
3r9 OkR>O O
B
O#1R#7O<HB<NP	
"$=$C %/
'2
-%/2Bb2H%/
(B
.0 

)+mqs+s ,#

"$	
'RWW5M-N  *NQSQXQXYbQc  *Nfhfmfm  oM  gN  *N  O	
 DB N  !BSw  @B  TB  C	
$&9&C&eH[ceHef	
 ;r A !FY]_F_ !
B
 	
 G2 M tRnrtRtu ~~	9::g///ABD &-"DHHX$6:]$]^%txx'<	'IJ/488N#;u#DE.$((="9T"AB/488G#4#=>ZZ%F)+mqw+w ,_TX^^,_TX^^` )+mqw+w ,_TX^^,_TX^^` )+mqw+wx)+mqw+wx-tDHH]4K/LM#TXXi%<%@%@%PTZ%Z[')R)@)D)DEV)W[{){|,$((9b2I2M2Mo2^.^_ 8O 	'IJ8OM 4D , PfdJJ ## 	9D&s3x88	9sJ   
	AS+AS+AS0=AS5
%AS:<9AS?J3)AT TAT;TAT6T6AT;c            	        t         D  cg c]
  } | d   r	|  }} t         D ]  } | d   r	t        d| d    d| d           ! t        dz  }|j                  t	        j
                  t         t        t               t        |      dd	      d
z   d       t        |sdnd dt        t               t        |      z
   dt        t                d|j                          |sdS dS c c} w )Nrn   zFAIL rm   z: ro   zlint-results-v6.json)checkstotalfailed   )indentr   r~   r   r   r   z (/z checks) -> r   r   )rk   printBASE
write_textr$  r(  r  rr   )rrN  outs      rs   r   r     s     0A$aF0wE!G*R(}56  '
'CNN4::3w<),V6>?ACGHRY  [	6Vv.bWF1K0LAcRYl^[ghkhphpgq
rs1!! 1s
   
C$C$__main__)r   )rr   r  rn   rq   ro   r  returnNone)r{   r   rX  r  )rX  int))__doc__
__future__r   rw   r$  r  r   r  syspathlibr   __file__resolveparentrS  parentsr   r   r   r#  r   r   r   r   r   r   r	  r  r  r!  r"  r  r  rk   __annotations__rm   r|   rJ  r   __name__exitr   rt   rs   <module>rf     s   #   	 	  
 H~&&||A	//	44
2
2N	JIIV6 
QQGP	>>GP	IIGP	
:;GP	
ABGP	
PQGO SShggi*uid&q"mc[^#n PPg kjaca-x!l	 Y Y #%	  %F9jZ		" zCHHTV rt   