chainlesschain 0.166.90 → 0.166.92

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (222) hide show
  1. package/README.md +15 -13
  2. package/package.json +4 -4
  3. package/src/assets/linux-subreaper/linux-arm64/manifest.json +1 -1
  4. package/src/assets/linux-subreaper/linux-x64/manifest.json +1 -1
  5. package/src/assets/web-panel/assets/{AIOps-CZzXRe1-.js → AIOps-C74YzqwJ.js} +1 -1
  6. package/src/assets/web-panel/assets/{ActionButton-_AZfbW1Q.js → ActionButton-TFef1hOE.js} +1 -1
  7. package/src/assets/web-panel/assets/{Analytics-CzaUx_wv.js → Analytics-CYsWpkkU.js} +3 -3
  8. package/src/assets/web-panel/assets/{AppLayout-xHEeeD-m.js → AppLayout-CFf9kjwu.js} +4 -4
  9. package/src/assets/web-panel/assets/{Artifacts-DmTbtudE.js → Artifacts-TQqa94YO.js} +1 -1
  10. package/src/assets/web-panel/assets/{Audit-Cn4ng4fo.js → Audit-B79ayqfS.js} +1 -1
  11. package/src/assets/web-panel/assets/{BackgroundAgents-DLUY1VD2.js → BackgroundAgents-pjkHfLP9.js} +1 -1
  12. package/src/assets/web-panel/assets/{Backup-B2v--wB6.js → Backup-CE6A-t_r.js} +1 -1
  13. package/src/assets/web-panel/assets/{BaseInput-Bgih7yAv.js → BaseInput-CwcgWMBY.js} +1 -1
  14. package/src/assets/web-panel/assets/{Chat-1MiiA3yA.js → Chat-BIkDNesY.js} +6 -6
  15. package/src/assets/web-panel/assets/{ChatBubbleRenderer-CPLynmbb.js → ChatBubbleRenderer-DgaokYts.js} +1 -1
  16. package/src/assets/web-panel/assets/{Checkbox-DsyBa_NO.js → Checkbox-MbypIy5V.js} +1 -1
  17. package/src/assets/web-panel/assets/{Codegen-B7WCFx9H.js → Codegen-DiFHWDnt.js} +1 -1
  18. package/src/assets/web-panel/assets/{Col-D2x4GBGm.js → Col-BNMlYMso.js} +1 -1
  19. package/src/assets/web-panel/assets/{Community-Rnwg9nea.js → Community-B3HVyHOX.js} +1 -1
  20. package/src/assets/web-panel/assets/{Compact-BPczlrRh.js → Compact-C7hlAubb.js} +1 -1
  21. package/src/assets/web-panel/assets/{Compliance-Br1L_wGU.js → Compliance-PaXZu6sE.js} +1 -1
  22. package/src/assets/web-panel/assets/{Cowork-DlsWB_oS.js → Cowork-BGiojbm-.js} +2 -2
  23. package/src/assets/web-panel/assets/{Cron-BWo_KGpG.js → Cron-Bmr-1QAx.js} +2 -2
  24. package/src/assets/web-panel/assets/{Crosschain-Cug7N8ge.js → Crosschain-BwUvWCVd.js} +1 -1
  25. package/src/assets/web-panel/assets/{DID-CMbyOZJN.js → DID-k_4QZocW.js} +2 -2
  26. package/src/assets/web-panel/assets/{Dashboard-C4dl_UaE.js → Dashboard-_ieRo2C5.js} +2 -2
  27. package/src/assets/web-panel/assets/{Dropdown-CBrC7M-9.js → Dropdown-DYHh6T27.js} +1 -1
  28. package/src/assets/web-panel/assets/{EmailListRenderer-DTq7tU4b.js → EmailListRenderer-BNlQcWQX.js} +1 -1
  29. package/src/assets/web-panel/assets/{EvolutionSettings-DWP3csxS.js → EvolutionSettings-DIkZ6U2D.js} +1 -1
  30. package/src/assets/web-panel/assets/{FamilyGuardDashboard-DZl7zuv_.js → FamilyGuardDashboard-Dq7qSr0P.js} +1 -1
  31. package/src/assets/web-panel/assets/{Federation-W-GSlVK5.js → Federation-C64e3Cbx.js} +1 -1
  32. package/src/assets/web-panel/assets/{FormItemContext-DMB7xYFV.js → FormItemContext-D-GE2vUa.js} +1 -1
  33. package/src/assets/web-panel/assets/{GenericCardRenderer-DNv8GEoq.js → GenericCardRenderer-DO3B2gis.js} +1 -1
  34. package/src/assets/web-panel/assets/{Git-BZ0Bbzw6.js → Git-0ETirIQH.js} +2 -2
  35. package/src/assets/web-panel/assets/{Governance-BNEdcOM5.js → Governance-C9fnRygX.js} +1 -1
  36. package/src/assets/web-panel/assets/{Inference-C8249gIz.js → Inference-CLJ9RTsK.js} +1 -1
  37. package/src/assets/web-panel/assets/{KnowledgeGraph-ngzebU3e.js → KnowledgeGraph-D3C_GxrN.js} +1 -1
  38. package/src/assets/web-panel/assets/{Logs-CP15th-f.js → Logs-C5ctGbkN.js} +2 -2
  39. package/src/assets/web-panel/assets/MarkdownRenderer-Ce-eWK3j.js +1 -0
  40. package/src/assets/web-panel/assets/{Marketplace-CaH59OsY.js → Marketplace-GF_t6hJ_.js} +1 -1
  41. package/src/assets/web-panel/assets/{McpTools-C07vnJev.js → McpTools-BGsGzgQs.js} +3 -3
  42. package/src/assets/web-panel/assets/{Memory-CqAOkVAS.js → Memory-CcrY2A0j.js} +2 -2
  43. package/src/assets/web-panel/assets/{MobileBridge-qp7mZimq.js → MobileBridge-Bi4T0RlS.js} +1 -1
  44. package/src/assets/web-panel/assets/{MobileProjects-DKhbqvTw.js → MobileProjects-DvjEGyvf.js} +1 -1
  45. package/src/assets/web-panel/assets/{Mtc-CRYCnWXv.js → Mtc-DL77Vf-k.js} +4 -4
  46. package/src/assets/web-panel/assets/{MtcAudit-Z08IrKws.js → MtcAudit-CDy_Uswb.js} +4 -4
  47. package/src/assets/web-panel/assets/{Multisig-BWdatUnH.js → Multisig-DL0BAO_c.js} +3 -3
  48. package/src/assets/web-panel/assets/{NLProgramming-BKWiCZ_m.js → NLProgramming-B-woh5IR.js} +1 -1
  49. package/src/assets/web-panel/assets/{Notes-Bgpzk3sm.js → Notes-CEFVCxk7.js} +3 -3
  50. package/src/assets/web-panel/assets/{NotificationSettings-DvtZEktR.js → NotificationSettings-BqPPMuAP.js} +1 -1
  51. package/src/assets/web-panel/assets/{OrderTableRenderer-CBcy0szc.js → OrderTableRenderer-GUKQ1xwp.js} +1 -1
  52. package/src/assets/web-panel/assets/{Organization-DRRL6vW1.js → Organization-B1gX8jlr.js} +4 -4
  53. package/src/assets/web-panel/assets/{Overflow-COmfB8Ns.js → Overflow-CeMxuUZy.js} +1 -1
  54. package/src/assets/web-panel/assets/{P2P-BqMq_DSa.js → P2P-B5aIRWwJ.js} +2 -2
  55. package/src/assets/web-panel/assets/{PdhVaultBrowser-BX7iNvle.js → PdhVaultBrowser-6rYgejd4.js} +4 -4
  56. package/src/assets/web-panel/assets/{Permissions-DzYkjmV_.js → Permissions-CqCp2SIl.js} +4 -4
  57. package/src/assets/web-panel/assets/{PersonalDataHub-BBTcxBbN.js → PersonalDataHub-BsA7DJWW.js} +4 -4
  58. package/src/assets/web-panel/assets/{Pipeline-eRkYFSbO.js → Pipeline-CiW6HeZh.js} +1 -1
  59. package/src/assets/web-panel/assets/{Privacy-Ch7IFKBh.js → Privacy-DckUOLYq.js} +1 -1
  60. package/src/assets/web-panel/assets/{ProjectInit-Ci8EcBYg.js → ProjectInit-CZppOOYR.js} +2 -2
  61. package/src/assets/web-panel/assets/{ProjectSettings-B4lYHFbI.js → ProjectSettings-B9QPzhDU.js} +2 -2
  62. package/src/assets/web-panel/assets/{Projects-zkE5cCo_.js → Projects-BErjjGha.js} +1 -1
  63. package/src/assets/web-panel/assets/{Providers-BKDVD3_e.js → Providers-DehU6Qiz.js} +1 -1
  64. package/src/assets/web-panel/assets/{QrScannerModal-BromrHlf.js → QrScannerModal-E1SUvv1m.js} +1 -1
  65. package/src/assets/web-panel/assets/{QuickAsk-CCgoY1gR.js → QuickAsk-COWFxyH3.js} +1 -1
  66. package/src/assets/web-panel/assets/{Recommend-DCPZvpq7.js → Recommend-D26pWKxX.js} +1 -1
  67. package/src/assets/web-panel/assets/{RemoteSession-DPnFP8HU.js → RemoteSession-DCOIaId3.js} +3 -3
  68. package/src/assets/web-panel/assets/{Reputation-l6r8ytAs.js → Reputation-DT_AHGAR.js} +1 -1
  69. package/src/assets/web-panel/assets/{Row-ke9Mk1cx.js → Row-B50S-1nl.js} +1 -1
  70. package/src/assets/web-panel/assets/{RssFeed-DQOEzUEn.js → RssFeed-BaBnHg3Q.js} +2 -2
  71. package/src/assets/web-panel/assets/{Search-BqgA0aUz.js → Search-BVdnLuuS.js} +1 -1
  72. package/src/assets/web-panel/assets/{Security-FeGD_jqV.js → Security-BnacH74J.js} +3 -3
  73. package/src/assets/web-panel/assets/{Services-4kiYYAjZ.js → Services-CxM08Zch.js} +2 -2
  74. package/src/assets/web-panel/assets/{Skeleton-BbU8Xegs.js → Skeleton-DE7CIc1N.js} +1 -1
  75. package/src/assets/web-panel/assets/{Skills-Dl2bUMUL.js → Skills-CGI0SJmf.js} +1 -1
  76. package/src/assets/web-panel/assets/{Sla-xRGALeaZ.js → Sla-DpEzPcqc.js} +1 -1
  77. package/src/assets/web-panel/assets/{SpeechSettings-DZfd4RDm.js → SpeechSettings-CTmnmMHn.js} +1 -1
  78. package/src/assets/web-panel/assets/{SyncSettings-BRtCV9Ga.js → SyncSettings-Dxgrd9hd.js} +2 -2
  79. package/src/assets/web-panel/assets/{Tasks-DVRQklfG.js → Tasks-CW4slS0A.js} +1 -1
  80. package/src/assets/web-panel/assets/{Templates-BbhE5jt5.js → Templates-DxvGWDgB.js} +1 -1
  81. package/src/assets/web-panel/assets/{Tenant-qXPDNKbK.js → Tenant-_Q0o2tNK.js} +1 -1
  82. package/src/assets/web-panel/assets/{Terminal-CV48Ks7E.js → Terminal-BTZn8pow.js} +2 -2
  83. package/src/assets/web-panel/assets/{TimelineRenderer-BLGfJIDr.js → TimelineRenderer-CauL0KFe.js} +1 -1
  84. package/src/assets/web-panel/assets/{Tokens-7G9H6Hrt.js → Tokens-CDoM2qeT.js} +1 -1
  85. package/src/assets/web-panel/assets/{Trigger--F64N11F.js → Trigger-B-QYGEU7.js} +1 -1
  86. package/src/assets/web-panel/assets/{Trust-Cq1r-D_y.js → Trust-BD6XJHT-.js} +1 -1
  87. package/src/assets/web-panel/assets/{UkeySign-Dqyu4RVh.js → UkeySign-x4TFwCy0.js} +1 -1
  88. package/src/assets/web-panel/assets/{VideoEditing-DuFmWH_B.js → VideoEditing-t3imBK_0.js} +1 -1
  89. package/src/assets/web-panel/assets/{Wallet-C3mg7EWP.js → Wallet-BCfkWwNC.js} +4 -4
  90. package/src/assets/web-panel/assets/{WebAuthn-CDK-Aj_X.js → WebAuthn-WH314Mdm.js} +5 -5
  91. package/src/assets/web-panel/assets/{WorkflowEditor--K7K-T1F.js → WorkflowEditor-jUlcjrUg.js} +1 -1
  92. package/src/assets/web-panel/assets/{chat-BQDcS6VP.js → chat-Dg3VASTL.js} +1 -1
  93. package/src/assets/web-panel/assets/{colors-BKxJL2-T.js → colors-BNvmBRKE.js} +1 -1
  94. package/src/assets/web-panel/assets/{compact-item-CFjQAMbY.js → compact-item-BGOfoqf4.js} +1 -1
  95. package/src/assets/web-panel/assets/{createContext-DbgCsdQd.js → createContext-BNQeqKAs.js} +1 -1
  96. package/src/assets/web-panel/assets/devWarning-B7_ypN1G.js +1 -0
  97. package/src/assets/web-panel/assets/{hasIn-BhkaOBNv.js → hasIn-Bg3AjCrq.js} +1 -1
  98. package/src/assets/web-panel/assets/{index-DvWWFJHJ.js → index--I3UF5t1.js} +1 -1
  99. package/src/assets/web-panel/assets/{index-DJ2OiRvh.js → index-2D04Zltx.js} +3 -3
  100. package/src/assets/web-panel/assets/{index-BuWPqSGT.js → index-60AnjUTX.js} +1 -1
  101. package/src/assets/web-panel/assets/{index-D2Zb-Kd1.js → index-7QJUWemf.js} +1 -1
  102. package/src/assets/web-panel/assets/{index-C0DzhUOX.js → index-B--0QM0S.js} +1 -1
  103. package/src/assets/web-panel/assets/index-B-jSKJK6.js +1 -0
  104. package/src/assets/web-panel/assets/{index-COGy6wXn.js → index-B0mgngoB.js} +1 -1
  105. package/src/assets/web-panel/assets/{index-bMX8BBLE.js → index-BBCMulQ-.js} +1 -1
  106. package/src/assets/web-panel/assets/{index-CE506mgj.js → index-BSNhW95G.js} +1 -1
  107. package/src/assets/web-panel/assets/{index-CoOu7sdP.js → index-B_JmInC0.js} +1 -1
  108. package/src/assets/web-panel/assets/{index-B4LlAJqc.js → index-BaPvEvB4.js} +1 -1
  109. package/src/assets/web-panel/assets/{index-CRtUDiXx.js → index-Bkz1tgFR.js} +1 -1
  110. package/src/assets/web-panel/assets/{index-Du_SxxBY.js → index-BmTacaQV.js} +1 -1
  111. package/src/assets/web-panel/assets/{index-CSUDlsIr.js → index-CCFZN66A.js} +1 -1
  112. package/src/assets/web-panel/assets/{index-3uR0ThJO.js → index-COol3xfA.js} +1 -1
  113. package/src/assets/web-panel/assets/{index-DmYK9Tqt.js → index-CY8cRKHR.js} +1 -1
  114. package/src/assets/web-panel/assets/{index-T9ka3Xj3.js → index-Cbp-wp-U.js} +1 -1
  115. package/src/assets/web-panel/assets/{index-CB4oHynY.js → index-Co_LnCWD.js} +1 -1
  116. package/src/assets/web-panel/assets/{index-DEwHywz9.js → index-Cx2EXRfr.js} +1 -1
  117. package/src/assets/web-panel/assets/{index-CUs7XpUO.js → index-D-mSvCQK.js} +1 -1
  118. package/src/assets/web-panel/assets/{index-BRqlCTrz.js → index-D072oLjp.js} +1 -1
  119. package/src/assets/web-panel/assets/{index-sKfUUldY.js → index-D6UqK83L.js} +1 -1
  120. package/src/assets/web-panel/assets/{index-Dhfa_BIl.js → index-DF_FKSVH.js} +1 -1
  121. package/src/assets/web-panel/assets/{index-D9sVcw6v.js → index-DLwEXRrb.js} +1 -1
  122. package/src/assets/web-panel/assets/{index-3djsY75k.js → index-DO0VlNtc.js} +1 -1
  123. package/src/assets/web-panel/assets/{index-BfGGsAU7.js → index-DS04wRll.js} +1 -1
  124. package/src/assets/web-panel/assets/{index-Dn2QSsuI.js → index-DYn5DnDk.js} +1 -1
  125. package/src/assets/web-panel/assets/{index-D-Yh3-1z.js → index-D_O2ZjPk.js} +1 -1
  126. package/src/assets/web-panel/assets/{index-BNjYPJNU.js → index-DcCnO0RU.js} +1 -1
  127. package/src/assets/web-panel/assets/{index-DP1NrM9J.js → index-Dkp-okWa.js} +1 -1
  128. package/src/assets/web-panel/assets/{index-DdcrixaQ.js → index-OUFoxUgH.js} +1 -1
  129. package/src/assets/web-panel/assets/index-P4FXZJqI.js +1 -0
  130. package/src/assets/web-panel/assets/{index-7BY44UEv.js → index-Wo0f2iqb.js} +1 -1
  131. package/src/assets/web-panel/assets/{index-DjmVlpap.js → index-ZD5Kd8tx.js} +1 -1
  132. package/src/assets/web-panel/assets/{index-3YutaXnp.js → index-fOwii3LP.js} +1 -1
  133. package/src/assets/web-panel/assets/{index-aPdVzagA.js → index-hG7jXGEW.js} +1 -1
  134. package/src/assets/web-panel/assets/{index-De7daEnc.js → index-pVdQieac.js} +1 -1
  135. package/src/assets/web-panel/assets/{index-CJoXgJ2N.js → index-uH2LnAs_.js} +1 -1
  136. package/src/assets/web-panel/assets/{index-DFt48Z-x.js → index-xzaUx19r.js} +1 -1
  137. package/src/assets/web-panel/assets/{initDefaultProps-wrqabmui.js → initDefaultProps-B8PN9AxJ.js} +1 -1
  138. package/src/assets/web-panel/assets/{motion-BoyB3ilP.js → motion-BHivfw5Q.js} +1 -1
  139. package/src/assets/web-panel/assets/{move-Cq31cSFE.js → move-B0QU5nDd.js} +1 -1
  140. package/src/assets/web-panel/assets/{mtc-parser-BkxNt-8H.js → mtc-parser-DRwRM3PE.js} +1 -1
  141. package/src/assets/web-panel/assets/{omit-DofGni53.js → omit-SHt2rV2p.js} +1 -1
  142. package/src/assets/web-panel/assets/{pickAttrs-BnluLL16.js → pickAttrs-CcmDlEb2.js} +1 -1
  143. package/src/assets/web-panel/assets/{placementArrow-C-yegJSP.js → placementArrow-DYatmXDS.js} +1 -1
  144. package/src/assets/web-panel/assets/{responsiveObserve-CD3ziNhu.js → responsiveObserve-B7qrsXq5.js} +1 -1
  145. package/src/assets/web-panel/assets/{slide-ToZO4gQ1.js → slide-BRGhlOWd.js} +1 -1
  146. package/src/assets/web-panel/assets/{statusUtils-DFVmDmVl.js → statusUtils-CT-7NXsQ.js} +1 -1
  147. package/src/assets/web-panel/assets/{styleChecker-De0Y8g1O.js → styleChecker-rZdw_Yyp.js} +1 -1
  148. package/src/assets/web-panel/assets/{useFlexGapSupport-wBKIYFKX.js → useFlexGapSupport-D8YNIP4P.js} +1 -1
  149. package/src/assets/web-panel/assets/{useFs-CP9nmUMJ.js → useFs-B8pt0Gu-.js} +1 -1
  150. package/src/assets/web-panel/assets/{usePersonalDataHub-vFGrVDyp.js → usePersonalDataHub-VMmYM1tt.js} +1 -1
  151. package/src/assets/web-panel/assets/{vnode-BcBIjvjH.js → vnode-UNDuoPoq.js} +1 -1
  152. package/src/assets/web-panel/assets/{zoom-DnXDAQxA.js → zoom-dN-u667S.js} +1 -1
  153. package/src/assets/web-panel/index.html +1 -1
  154. package/src/command-help-index.json +1 -1
  155. package/src/commands/agent-process-ownership.js +121 -0
  156. package/src/commands/agent.js +2 -0
  157. package/src/commands/hub.js +86 -9
  158. package/src/data/changelog.json +54 -2
  159. package/src/lib/audit-logger.js +46 -20
  160. package/src/lib/checkpoint-restore-saga.js +11 -1
  161. package/src/lib/eval/verify01-host-evidence.js +36 -3
  162. package/src/lib/evolution/evolution-artifact-ports.js +26 -0
  163. package/src/lib/evolution/evolution-eval-cohort-enrollment.js +713 -47
  164. package/src/lib/evolution/evolution-eval-gate.js +146 -0
  165. package/src/lib/evolution/evolution-eval-launch-admission.js +168 -90
  166. package/src/lib/evolution/evolution-eval-ledger-capture.js +50 -0
  167. package/src/lib/evolution/evolution-eval-readonly-audit.js +106 -0
  168. package/src/lib/evolution/evolution-ledger-file-backend.js +20 -0
  169. package/src/lib/evolution/evolution-ledger-ports.js +59 -27
  170. package/src/lib/evolution/evolution-ledger-v2-journal.js +55 -18
  171. package/src/lib/evolution/evolution-workbench-file-resources.js +19 -1
  172. package/src/lib/evolution/rrsi-cohort-registration.js +275 -0
  173. package/src/lib/evolution/rrsi-contracts.js +742 -0
  174. package/src/lib/evolution/rrsi-data.js +196 -0
  175. package/src/lib/evolution/rrsi-evaluation-adapter.js +275 -0
  176. package/src/lib/evolution/rrsi-evaluation-variants.js +267 -0
  177. package/src/lib/evolution/rrsi-group-statistics.js +553 -0
  178. package/src/lib/evolution/rrsi-history-ledger-adapter.js +3261 -0
  179. package/src/lib/evolution/rrsi-native-batch-evidence.js +520 -0
  180. package/src/lib/evolution/rrsi-native-eval-row-collector.js +538 -0
  181. package/src/lib/evolution/rrsi-native-evaluation-batch.js +547 -0
  182. package/src/lib/evolution/rrsi-native-evaluation-plan.js +431 -0
  183. package/src/lib/evolution/rrsi-native-group-statistics-plan.js +121 -0
  184. package/src/lib/evolution/rrsi-native-group-statistics.js +482 -0
  185. package/src/lib/evolution/rrsi-native-quality-receipt-contracts.js +321 -0
  186. package/src/lib/evolution/rrsi-native-quality-receipt.js +256 -0
  187. package/src/lib/evolution/rrsi-native-statistics-protocol.js +330 -0
  188. package/src/lib/evolution/rrsi-parent-binding.js +290 -0
  189. package/src/lib/evolution/rrsi-pm-execution-bridge.js +500 -0
  190. package/src/lib/evolution/rrsi-pm-training-mapping.js +134 -0
  191. package/src/lib/evolution/rrsi-preparation-contracts.js +213 -0
  192. package/src/lib/evolution/rrsi-registry-history-binding.js +193 -0
  193. package/src/lib/evolution/rrsi-registry-store-policy.js +1191 -0
  194. package/src/lib/evolution/rrsi-runtime-composition.js +79 -0
  195. package/src/lib/evolution/rrsi-selector.js +434 -0
  196. package/src/lib/evolution/rrsi-statistics-simulation.js +354 -0
  197. package/src/lib/evolution/skill-candidate-registry.js +216 -29
  198. package/src/lib/evolution/skill-registry-maintenance.js +80 -0
  199. package/src/lib/evolution/skill-registry-writer-control.js +138 -0
  200. package/src/lib/evolution/skill-release-registry.js +399 -169
  201. package/src/lib/formal-quality-eval-runtime.js +2 -14
  202. package/src/lib/goal-store.js +225 -16
  203. package/src/lib/process-execution-broker/index.js +91 -1
  204. package/src/lib/process-execution-broker/platform-sandbox.js +42 -0
  205. package/src/lib/process-execution-broker/windows-native-evaluator-capabilities.js +757 -0
  206. package/src/lib/process-execution-broker/windows-native-evaluator.js +316 -0
  207. package/src/lib/process-execution-broker/windows-sandbox-helper.dll +0 -0
  208. package/src/lib/process-execution-broker/windows-sandbox-helper.exe +0 -0
  209. package/src/lib/process-execution-broker/windows-sandbox.cs +383 -11
  210. package/src/lib/record-replay/skill-recorder.js +38 -3
  211. package/src/lib/scheduler-kernel/authority-resolver.js +12 -163
  212. package/src/lib/scheduler-kernel/contract.js +27 -414
  213. package/src/lib/scheduler-kernel/runtime.js +21 -823
  214. package/src/lib/scheduler-kernel/service.js +11 -328
  215. package/src/lib/scheduler-kernel/source-locator-path.js +7 -142
  216. package/src/lib/scheduler-kernel/store.js +67 -5931
  217. package/src/lib/secure-fs.js +16 -1314
  218. package/src/lib/with-file-lock.js +122 -20
  219. package/src/assets/web-panel/assets/MarkdownRenderer-CW3B3JDq.js +0 -1
  220. package/src/assets/web-panel/assets/devWarning-DlIv9Mbc.js +0 -1
  221. package/src/assets/web-panel/assets/index-BC972Grv.js +0 -1
  222. package/src/assets/web-panel/assets/index-CVifyQqL.js +0 -1
@@ -0,0 +1,538 @@
1
+ /** Read-only native row collection; signed declarations are not execution proofs. */
2
+ import { isProxy } from "node:util/types";
3
+ import {
4
+ isEvolutionEvalReceiptVerifier,
5
+ verifyEvolutionEvalReceipt,
6
+ verifyEvolutionEvalResultEvidence,
7
+ assertEvolutionEvalReceiptSetFreshness,
8
+ } from "./evolution-eval-gate.js";
9
+ import {
10
+ RRSI_EVAL_COHORT_ENROLLMENT_SCHEMA,
11
+ resolveEvolutionEvalCohortEnrollment,
12
+ resolveEvolutionEvalCohortReconciliation,
13
+ assertRrsiEvalCohortHistoryComposition,
14
+ createRrsiEvalCohortReadonlyAudit,
15
+ resolveRrsiEvalCohortFromReadonlyAudit,
16
+ assertRrsiEvalCohortReadonlyAuditUnchanged,
17
+ } from "./evolution-eval-cohort-enrollment.js";
18
+ import { buildRrsiNativeEvaluationPlan } from "./rrsi-native-evaluation-plan.js";
19
+ import {
20
+ snapshotRrsiVariantContexts,
21
+ buildRrsiEvaluationVariantMapping,
22
+ } from "./rrsi-evaluation-variants.js";
23
+ import {
24
+ snapshotRrsiData,
25
+ rrsiExact,
26
+ rrsiCanonical,
27
+ rrsiHash,
28
+ rrsiEnvelope,
29
+ rrsiFail,
30
+ } from "./rrsi-data.js";
31
+
32
+ export const RRSI_NATIVE_ROW_EVIDENCE_SCHEMA =
33
+ "chainlesschain.rrsi-native-eval-row-evidence/v1";
34
+ export const RRSI_NATIVE_ROW_EVIDENCE_V2_SCHEMA =
35
+ "chainlesschain.rrsi-native-eval-row-evidence/v2";
36
+ export const RRSI_NATIVE_COHORT_ROWS_SCHEMA =
37
+ "chainlesschain.rrsi-native-eval-cohort-rows/v1";
38
+ export const RRSI_NATIVE_COHORT_ROWS_V2_SCHEMA =
39
+ "chainlesschain.rrsi-native-eval-cohort-rows/v2";
40
+ const COLLECTORS = new WeakMap();
41
+ const COHORTS = new WeakMap();
42
+ const AUDIT_KEYS = new WeakMap();
43
+
44
+ function ownFields(input, keys, label) {
45
+ if (
46
+ !input ||
47
+ typeof input !== "object" ||
48
+ isProxy(input) ||
49
+ Object.getPrototypeOf(input) !== Object.prototype ||
50
+ Reflect.ownKeys(input).length !== keys.length
51
+ )
52
+ rrsiFail(`${label} requires plain own fields`);
53
+ return Object.fromEntries(
54
+ keys.map((key) => {
55
+ const field = Object.getOwnPropertyDescriptor(input, key);
56
+ if (!field?.enumerable || !("value" in field))
57
+ rrsiFail(`${label} cannot use accessors`);
58
+ return [key, field.value];
59
+ }),
60
+ );
61
+ }
62
+
63
+ function same(a, b, label) {
64
+ if (rrsiCanonical(a) !== rrsiCanonical(b)) rrsiFail(`${label} differs`);
65
+ }
66
+
67
+ /** Private suites stay in the collector. Callers cannot choose expected run bindings. */
68
+ export function createRrsiNativeEvalRowCollector(input) {
69
+ const options = ownFields(
70
+ input,
71
+ ["cohortAuthority", "receiptVerifier", "planContext", "cohortId"],
72
+ "native row collector composition",
73
+ );
74
+ if (!isEvolutionEvalReceiptVerifier(options.receiptVerifier))
75
+ rrsiFail("native rows require a branded final Eval verifier");
76
+ const lookup = snapshotRrsiData({ cohortId: options.cohortId });
77
+ const enrollment = resolveEvolutionEvalCohortEnrollment(
78
+ options.cohortAuthority,
79
+ lookup,
80
+ );
81
+ if (enrollment.evidence.schema !== RRSI_EVAL_COHORT_ENROLLMENT_SCHEMA)
82
+ rrsiFail("native rows require RRSI cohort enrollment v2");
83
+ const statisticsRegistration =
84
+ enrollment.evidence.manifest.statisticsRegistration ?? null;
85
+ same(
86
+ enrollment.evidence.plan.statisticsRegistration ?? null,
87
+ statisticsRegistration,
88
+ "native enrollment statistics bindings",
89
+ );
90
+ const plan = buildRrsiNativeEvaluationPlan(options.planContext);
91
+ if (
92
+ plan.nativeEvaluationPlanDigest !==
93
+ enrollment.evidence.plan.nativeEvaluationPlanDigest
94
+ )
95
+ rrsiFail("native row context differs from signed measurement graph");
96
+ const evaluationCase = plan.cases.find((entry) =>
97
+ entry.slots.some((slot) => slot.cohortId === lookup.cohortId),
98
+ );
99
+ if (!evaluationCase) rrsiFail("native cohort is outside the frozen graph");
100
+ const rawVariants = Object.getOwnPropertyDescriptor(
101
+ options.planContext,
102
+ "variants",
103
+ ).value;
104
+ const source = snapshotRrsiVariantContexts(rawVariants).find(
105
+ (variant) => variant.variant === evaluationCase.variant,
106
+ );
107
+ const mapping = buildRrsiEvaluationVariantMapping(source);
108
+ if (mapping.variantMappingDigest !== evaluationCase.variantMappingDigest)
109
+ rrsiFail("native row variant differs from the frozen mapping");
110
+ const role = mapping.roles.find(
111
+ (entry) => entry.role === evaluationCase.role,
112
+ );
113
+ const slots = enrollment.evidence.slots.map((registered) => {
114
+ const slot = evaluationCase.slots.find(
115
+ (slot) => slot.slotId === registered.slotId,
116
+ );
117
+ const binding = enrollment.evidence.manifest.childBindings.find(
118
+ (child) => child.slotId === registered.slotId,
119
+ );
120
+ const cell = evaluationCase.nativePlan.cells.find(
121
+ (cell) => cell.cellId === registered.slotId,
122
+ );
123
+ if (!slot || !binding || !cell)
124
+ rrsiFail("native cohort omits a frozen target slot");
125
+ same(slot.expectedContext, binding.expectedContext, "native run context");
126
+ return { slot, binding, cell };
127
+ });
128
+ if (slots.length !== evaluationCase.slots.length)
129
+ rrsiFail("native cohort changes the complete target denominator");
130
+ const collector = Object.freeze({
131
+ schema: "chainlesschain.rrsi-native-eval-row-collector/v1",
132
+ cohortId: lookup.cohortId,
133
+ });
134
+ COLLECTORS.set(collector, {
135
+ authority: options.cohortAuthority,
136
+ verifier: options.receiptVerifier,
137
+ lookup,
138
+ enrollment,
139
+ statisticsRegistration,
140
+ plan,
141
+ evaluationCase,
142
+ role,
143
+ slots,
144
+ suite: source.suites[evaluationCase.role],
145
+ policy: source.context.policies[evaluationCase.role],
146
+ });
147
+ return collector;
148
+ }
149
+
150
+ function expectedReceipt(slot, cell, admission) {
151
+ const context = slot.expectedContext;
152
+ return {
153
+ runId: admission.runId,
154
+ runNonce: admission.runNonce,
155
+ suiteDigest: context.suiteDigest,
156
+ policyDigest: context.policyDigest,
157
+ evaluationAuthorityRoot: context.evaluationAuthorityRoot,
158
+ targetEnvironmentRef: context.targetEnvironmentRef,
159
+ evaluationContextDigest: slot.evaluationContextDigest,
160
+ candidateId: context.candidateId,
161
+ baselineId: context.baselineId,
162
+ environmentDigest: context.environmentDigest,
163
+ tenantId: context.tenantId,
164
+ provenanceAudience: cell.provenanceAudience,
165
+ trainerAuthority: cell.trainerAuthority,
166
+ trainerRevision: cell.trainerRevision,
167
+ };
168
+ }
169
+
170
+ function mappedRows(state, evidence) {
171
+ const tasks = new Map(
172
+ state.role.mappings.map((task) => [task.pmTaskDigest, task]),
173
+ );
174
+ return ["validation", "test"].flatMap((split) =>
175
+ ["baseline", "candidate"].flatMap((nativeArm) => {
176
+ const arm = state.evaluationCase[`${nativeArm}Arm`];
177
+ return evidence[split][nativeArm].map((row) => {
178
+ const task = tasks.get(row.taskDigest);
179
+ if (!task || task.split !== split)
180
+ rrsiFail("signed native row has a foreign task source");
181
+ return {
182
+ rrsiTaskId: task.rrsiTaskId,
183
+ rrsiPartition: task.rrsiPartition,
184
+ pmTaskDigest: row.taskDigest,
185
+ basePmTaskDigest: task.basePmTaskDigest,
186
+ seed: row.seed,
187
+ arm,
188
+ reportedPass: row.pass,
189
+ strictPass:
190
+ row.pass &&
191
+ row.securityViolations === 0 &&
192
+ row.permissionViolations === 0,
193
+ qualityScore: row.qualityScore,
194
+ securityViolations: row.securityViolations,
195
+ permissionViolations: row.permissionViolations,
196
+ metrics: row.metrics,
197
+ executionDigest: row.executionDigest,
198
+ gradeDigest: row.gradeDigest,
199
+ safetyDigest: row.safetyDigest,
200
+ outputArtifactDigest: row.outputArtifactDigest,
201
+ subjectBindingDigest: row.subjectBindingDigest,
202
+ subjectReservationDigest: row.subjectReservationDigest,
203
+ rowDigest: rrsiHash("chainlesschain.rrsi-native-signed-row/v1", row),
204
+ };
205
+ });
206
+ }),
207
+ );
208
+ }
209
+
210
+ export const RRSI_NATIVE_ROW_CLAIM_FIELDS = Object.freeze([
211
+ "executionDigest",
212
+ "gradeDigest",
213
+ "safetyDigest",
214
+ "subjectBindingDigest",
215
+ "subjectReservationDigest",
216
+ ]);
217
+
218
+ function assertUniqueClaims(rows, seen) {
219
+ for (const row of rows)
220
+ for (const field of RRSI_NATIVE_ROW_CLAIM_FIELDS) {
221
+ if (seen[field].has(row[field]))
222
+ rrsiFail(`native cohort repeats an underlying ${field} claim`);
223
+ seen[field].add(row[field]);
224
+ }
225
+ }
226
+
227
+ /** Every enrolled slot is presented, including explicit missing receipts/rows. */
228
+ export async function collectRrsiNativeEvalCohortEvidence(collector, input) {
229
+ const state = COLLECTORS.get(collector);
230
+ if (!state) rrsiFail("a branded native row collector is required");
231
+ const raw = ownFields(input, ["slots"], "native cohort receipt source").slots;
232
+ if (
233
+ !raw ||
234
+ isProxy(raw) ||
235
+ !Array.isArray(raw) ||
236
+ Object.getPrototypeOf(raw) !== Array.prototype ||
237
+ raw.length !== state.slots.length ||
238
+ Reflect.ownKeys(raw).length !== raw.length + 1
239
+ )
240
+ rrsiFail("native row source must cover every enrolled target slot");
241
+ // Capture each chunk independently before any await; never enlarge the data
242
+ // bounds or clip targets merely because several valid chunks share a cohort.
243
+ const source = {
244
+ slots: Array.from({ length: raw.length }, (_, position) => {
245
+ const field = Object.getOwnPropertyDescriptor(raw, String(position));
246
+ if (!field?.enumerable || !("value" in field))
247
+ rrsiFail("native row source slots cannot use accessors");
248
+ return snapshotRrsiData(field.value);
249
+ }),
250
+ };
251
+ for (const [index, entry] of source.slots.entries()) {
252
+ rrsiExact(
253
+ entry,
254
+ ["slotId", "receipt", "resultEvidence"],
255
+ "native row source slot",
256
+ );
257
+ if (entry.slotId !== state.slots[index].slot.slotId)
258
+ rrsiFail("native row source differs from enrolled target order");
259
+ if (entry.receipt === null && entry.resultEvidence !== null)
260
+ rrsiFail("missing native receipt cannot carry substituted rows");
261
+ }
262
+ const audit = createRrsiEvalCohortReadonlyAudit(state.authority);
263
+ const audited = await resolveRrsiEvalCohortFromReadonlyAudit(
264
+ state.authority,
265
+ state.lookup,
266
+ audit,
267
+ );
268
+ const enrollment = audited.enrollment;
269
+ same(enrollment, state.enrollment, "native enrollment readback");
270
+ const sealed = audited.reconciliation;
271
+ const admissions = new Map(
272
+ sealed.inventory.admissions.map((entry) => [entry.slotId, entry]),
273
+ );
274
+ const blocks = new Map();
275
+ const index = [];
276
+ const claims = Object.fromEntries(
277
+ RRSI_NATIVE_ROW_CLAIM_FIELDS.map((field) => [field, new Set()]),
278
+ );
279
+ const receipts = [];
280
+ for (const [position, entry] of source.slots.entries()) {
281
+ const { slot, cell, binding } = state.slots[position];
282
+ const admission = admissions.get(slot.slotId);
283
+ if (admission && admission.requestDigest !== slot.requestDigest)
284
+ rrsiFail("native admission differs from the original launch request");
285
+ let rows = null;
286
+ if (entry.receipt !== null) {
287
+ if (!admission) rrsiFail("signed native receipt has no sealed admission");
288
+ const expected = expectedReceipt(slot, cell, admission);
289
+ if (
290
+ entry.receipt.trainingPartitionDigest !==
291
+ state.role.pmTrainingPartitionDigest
292
+ )
293
+ rrsiFail("signed native receipt changes the training partition");
294
+ if (entry.receipt.confidenceZ !== state.policy.confidenceZ)
295
+ rrsiFail(
296
+ "signed native receipt changes the frozen confidence parameter",
297
+ );
298
+ same(
299
+ entry.receipt.splitCounts,
300
+ state.role.splitCounts,
301
+ "signed native split denominator",
302
+ );
303
+ if (entry.resultEvidence !== null) {
304
+ const verified = await verifyEvolutionEvalResultEvidence(
305
+ state.verifier,
306
+ {
307
+ receipt: entry.receipt,
308
+ resultEvidence: entry.resultEvidence,
309
+ suite: state.suite,
310
+ policy: state.policy,
311
+ },
312
+ expected,
313
+ );
314
+ rows = mappedRows(state, verified);
315
+ assertUniqueClaims(rows, claims);
316
+ } else {
317
+ await verifyEvolutionEvalReceipt(
318
+ state.verifier,
319
+ entry.receipt,
320
+ expected,
321
+ );
322
+ }
323
+ receipts.push(entry.receipt);
324
+ }
325
+ const status =
326
+ entry.receipt === null
327
+ ? admission
328
+ ? "receipt-unavailable"
329
+ : "unadmitted"
330
+ : rows === null
331
+ ? entry.receipt.validation === null || entry.receipt.test === null
332
+ ? "signed-terminal-no-rows"
333
+ : "signed-receipt-rows-unavailable"
334
+ : "signed-rows";
335
+ const block = rrsiEnvelope(
336
+ state.statisticsRegistration
337
+ ? RRSI_NATIVE_ROW_EVIDENCE_V2_SCHEMA
338
+ : RRSI_NATIVE_ROW_EVIDENCE_SCHEMA,
339
+ "rowEvidenceDigest",
340
+ {
341
+ campaignRootDigest: enrollment.evidence.plan.campaignRootDigest,
342
+ batchDigest: enrollment.evidence.plan.batchDigest,
343
+ nativeEvaluationPlanDigest: state.plan.nativeEvaluationPlanDigest,
344
+ enrollmentDigest: enrollment.enrollmentDigest,
345
+ sealDigest: sealed.sealDigest,
346
+ cohortId: state.lookup.cohortId,
347
+ childId: binding.childId,
348
+ slotId: slot.slotId,
349
+ nativePlanDigest: slot.nativePlanDigest,
350
+ evaluationContextDigest: slot.evaluationContextDigest,
351
+ variantMappingDigest: state.evaluationCase.variantMappingDigest,
352
+ recipeDigest: state.evaluationCase.recipeDigest,
353
+ role: state.evaluationCase.role,
354
+ variant: state.evaluationCase.variant,
355
+ pairId: state.evaluationCase.pairId,
356
+ runtimeId: cell.runtimeId,
357
+ targetEnvironmentRef: cell.targetEnvironmentRef,
358
+ versions: state.plan.versions,
359
+ lifecycleDigests: state.plan.lifecycleDigests,
360
+ reservationDigestsByArm: binding.reservationDigestsByArm,
361
+ plannedObservationsPerArmByPartition:
362
+ slot.plannedObservationsPerArmByPartition,
363
+ admissionDigest: admission?.admissionDigest ?? null,
364
+ runId: admission?.runId ?? null,
365
+ runNonce: admission?.runNonce ?? null,
366
+ finalReceiptDigest: entry.receipt?.receiptDigest ?? null,
367
+ receiptIssuedAt: entry.receipt?.issuedAt ?? null,
368
+ receiptExpiresAt: entry.receipt?.expiresAt ?? null,
369
+ resultEvidenceDigest: entry.resultEvidence?.evidenceDigest ?? null,
370
+ originalNativeGateDecision: entry.receipt?.decision ?? null,
371
+ originalNativeGateReasonCodes: entry.receipt?.reasonCodes ?? null,
372
+ signedUsage: entry.receipt?.usage ?? null,
373
+ status,
374
+ rows,
375
+ finalReceiptAuthenticated: entry.receipt !== null,
376
+ finalReceiptRowsAuthenticated: rows !== null,
377
+ admissionInventoryAuthenticated: true,
378
+ frozenLifecycleReferencesBound: true,
379
+ armLifecycleVerified: false,
380
+ recipeExecutionVerified: false,
381
+ sourceProvenanceVerified: false,
382
+ underlyingExecutionReceiptsReverified: false,
383
+ completeLifecycleCostVerified: false,
384
+ cleanupReverified: false,
385
+ qualityVerdictVerified: false,
386
+ ...(state.statisticsRegistration
387
+ ? {
388
+ statisticsRegistration: state.statisticsRegistration,
389
+ preObservationRegistrationVerified: true,
390
+ controlledHistoryRegistrationOrderVerified: true,
391
+ underlyingObservationTimeVerified: false,
392
+ }
393
+ : {}),
394
+ },
395
+ );
396
+ snapshotRrsiData(block);
397
+ blocks.set(slot.slotId, block);
398
+ index.push({
399
+ slotId: slot.slotId,
400
+ childId: binding.childId,
401
+ status,
402
+ rowEvidenceDigest: block.rowEvidenceDigest,
403
+ finalReceiptDigest: block.finalReceiptDigest,
404
+ originalNativeGateDecision: block.originalNativeGateDecision,
405
+ });
406
+ }
407
+ const finalSeal = (
408
+ await resolveRrsiEvalCohortFromReadonlyAudit(
409
+ state.authority,
410
+ state.lookup,
411
+ audit,
412
+ )
413
+ ).reconciliation;
414
+ same(
415
+ sealed,
416
+ finalSeal,
417
+ "sealed native inventory during signature verification",
418
+ );
419
+ const result = rrsiEnvelope(
420
+ state.statisticsRegistration
421
+ ? RRSI_NATIVE_COHORT_ROWS_V2_SCHEMA
422
+ : RRSI_NATIVE_COHORT_ROWS_SCHEMA,
423
+ "cohortRowsDigest",
424
+ {
425
+ cohortId: state.lookup.cohortId,
426
+ batchDigest: enrollment.evidence.plan.batchDigest,
427
+ nativeEvaluationPlanDigest: state.plan.nativeEvaluationPlanDigest,
428
+ campaignRootDigest: enrollment.evidence.plan.campaignRootDigest,
429
+ enrollmentDigest: enrollment.enrollmentDigest,
430
+ sealDigest: sealed.sealDigest,
431
+ role: state.evaluationCase.role,
432
+ variant: state.evaluationCase.variant,
433
+ pairId: state.evaluationCase.pairId,
434
+ allCohortIds: enrollment.evidence.manifest.allCohortIds,
435
+ plannedObservationsPerArmByPartition:
436
+ sealed.plannedObservationsPerArmByPartition,
437
+ slots: index,
438
+ completeSignedRows: index.every((slot) => slot.status === "signed-rows"),
439
+ admissionInventoryAuthenticated: true,
440
+ originalNativeGateDecisionsPreserved: true,
441
+ fullCohortSlotDenominatorRetained: true,
442
+ batchTriangleCompletenessVerified: false,
443
+ underlyingExecutionClaimsUniqueWithinCohort: true,
444
+ crossCohortExecutionClaimsVerified: false,
445
+ receiptFreshnessCheckedBeforePublication: true,
446
+ sourceProvenanceVerified: false,
447
+ statisticalProtocolValidated: false,
448
+ qualityVerdictVerified: false,
449
+ ...(state.statisticsRegistration
450
+ ? {
451
+ statisticsRegistration: state.statisticsRegistration,
452
+ preObservationRegistrationVerified: true,
453
+ controlledHistoryRegistrationOrderVerified: true,
454
+ underlyingObservationTimeVerified: false,
455
+ }
456
+ : {}),
457
+ },
458
+ );
459
+ snapshotRrsiData(result);
460
+ assertRrsiEvalCohortReadonlyAuditUnchanged(audit);
461
+ const freshness = assertEvolutionEvalReceiptSetFreshness(
462
+ state.verifier,
463
+ receipts,
464
+ );
465
+ if (!AUDIT_KEYS.has(state.authority))
466
+ AUDIT_KEYS.set(state.authority, Object.freeze({}));
467
+ COHORTS.set(
468
+ result,
469
+ Object.freeze({
470
+ evidence: result,
471
+ freshness,
472
+ auditKey: AUDIT_KEYS.get(state.authority),
473
+ createReadonlyAudit(ledgerAudit) {
474
+ return createRrsiEvalCohortReadonlyAudit(state.authority, ledgerAudit);
475
+ },
476
+ receiptVerifier: state.verifier,
477
+ validityWindows: Object.freeze(
478
+ receipts.map((receipt) =>
479
+ Object.freeze({
480
+ issuedAt: receipt.issuedAt,
481
+ expiresAt: receipt.expiresAt,
482
+ }),
483
+ ),
484
+ ),
485
+ async assertCurrentInventory(historyAdapter, session = null) {
486
+ assertRrsiEvalCohortHistoryComposition(state.authority, historyAdapter);
487
+ if (session) {
488
+ // This verifies the pending snapshot only. The enclosing batch must
489
+ // finish its shared audit with assertUnchanged before publication.
490
+ const audited = await resolveRrsiEvalCohortFromReadonlyAudit(
491
+ state.authority,
492
+ state.lookup,
493
+ session,
494
+ );
495
+ same(
496
+ audited.enrollment,
497
+ enrollment,
498
+ "native enrollment during batch census",
499
+ );
500
+ same(
501
+ audited.reconciliation,
502
+ sealed,
503
+ "sealed native inventory during batch census",
504
+ );
505
+ return audited.reconciliation;
506
+ }
507
+ same(
508
+ resolveEvolutionEvalCohortEnrollment(state.authority, state.lookup),
509
+ enrollment,
510
+ "native enrollment during batch census",
511
+ );
512
+ const current = await resolveEvolutionEvalCohortReconciliation(
513
+ state.authority,
514
+ state.lookup,
515
+ );
516
+ same(current, sealed, "sealed native inventory during batch census");
517
+ return current;
518
+ },
519
+ assertCurrentFreshness() {
520
+ return assertEvolutionEvalReceiptSetFreshness(state.verifier, receipts);
521
+ },
522
+ childEvidence(slotId) {
523
+ const child = blocks.get(slotId);
524
+ if (!child) rrsiFail("native child is outside the collected cohort");
525
+ return child;
526
+ },
527
+ }),
528
+ );
529
+ return result;
530
+ }
531
+
532
+ /** JSON exports need fresh verification; only live collected chunks carry this brand. */
533
+ export function captureRrsiNativeEvalCohortEvidence(value) {
534
+ const captured = COHORTS.get(value);
535
+ if (!captured)
536
+ rrsiFail("a live branded native cohort row result is required");
537
+ return captured;
538
+ }