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,431 @@
1
+ /** Complete preregistered native measurement graph. No dispatch or billing authority. */
2
+ import { isProxy } from "node:util/types";
3
+ import { verifySkillTargetMatrixEvalPlan } from "./skill-target-matrix-eval.js";
4
+ import {
5
+ verifySkillDependencyLock,
6
+ verifySkillRuntimeManifest,
7
+ verifySkillTargetMatrix,
8
+ } from "./skill-execution-manifest.js";
9
+ import {
10
+ computeEvolutionEvalLaunchRequestDigest,
11
+ computeEvolutionEvalContextDigest,
12
+ } from "./evolution-eval-gate.js";
13
+ import { verifyRrsiEvaluationMapping } from "./rrsi-evaluation-adapter.js";
14
+ import {
15
+ buildRrsiEvaluationVariantMapping,
16
+ assertRrsiVariantSetInputIsolation,
17
+ snapshotRrsiVariantContexts,
18
+ } from "./rrsi-evaluation-variants.js";
19
+ import {
20
+ snapshotRrsiData,
21
+ rrsiExact,
22
+ rrsiDigest,
23
+ rrsiCanonical,
24
+ rrsiHash,
25
+ rrsiEnvelope,
26
+ rrsiFail,
27
+ } from "./rrsi-data.js";
28
+
29
+ export const RRSI_NATIVE_EVALUATION_PLAN_SCHEMA =
30
+ "chainlesschain.rrsi-native-evaluation-plan/v1";
31
+ const PAIRS = [
32
+ { id: "rrsi-vs-rsi", candidateArm: "rrsi", baselineArm: "rsi" },
33
+ { id: "rrsi-vs-baseline", candidateArm: "rrsi", baselineArm: "baseline" },
34
+ { id: "rsi-vs-baseline", candidateArm: "rsi", baselineArm: "baseline" },
35
+ ];
36
+ const STAGES = { selection: ["selection"], generalization: ["gate", "audit"] };
37
+ const keyOf = (row) => JSON.stringify([row.role, row.variant, row.pairId]);
38
+
39
+ function ownInputs(input) {
40
+ const keys = [
41
+ "context",
42
+ "mapping",
43
+ "variants",
44
+ "nativeCases",
45
+ "stage",
46
+ "lifecycleDigests",
47
+ "executionContract",
48
+ ];
49
+ if (
50
+ !input ||
51
+ typeof input !== "object" ||
52
+ isProxy(input) ||
53
+ Object.getPrototypeOf(input) !== Object.prototype ||
54
+ Reflect.ownKeys(input).length !== keys.length
55
+ )
56
+ rrsiFail("native evaluation plan requires plain own fields");
57
+ return Object.fromEntries(
58
+ keys.map((key) => {
59
+ const field = Object.getOwnPropertyDescriptor(input, key);
60
+ if (!field?.enumerable || !("value" in field))
61
+ rrsiFail("native evaluation plan cannot use accessors");
62
+ return [key, field.value];
63
+ }),
64
+ );
65
+ }
66
+
67
+ export function buildRrsiNativeEvaluationPlan(input) {
68
+ const ports = ownInputs(input);
69
+ const context = snapshotRrsiData(ports.context);
70
+ const base = verifyRrsiEvaluationMapping(ports.mapping, context);
71
+ const campaign = context.campaign;
72
+ if (typeof ports.stage !== "string" || !Object.hasOwn(STAGES, ports.stage))
73
+ rrsiFail("unknown native evaluation stage");
74
+ if (campaign.candidateKind !== "skill")
75
+ rrsiFail(
76
+ "native Skill matrix cannot authenticate a Memory-policy experiment",
77
+ );
78
+ // Native manifest normalizers legitimately use null-prototype JSON objects.
79
+ // Capture outer own fields, then let their original strict validators copy
80
+ // every nested value; never stringify unverified input to bridge prototypes.
81
+ const rawExecution = ports.executionContract;
82
+ const executionKeys = ["dependencyLock", "runtimeManifest", "targetMatrix"];
83
+ if (
84
+ !rawExecution ||
85
+ typeof rawExecution !== "object" ||
86
+ isProxy(rawExecution) ||
87
+ Object.getPrototypeOf(rawExecution) !== Object.prototype ||
88
+ Reflect.ownKeys(rawExecution).length !== executionKeys.length
89
+ )
90
+ rrsiFail("native execution contract requires plain own fields");
91
+ const execution = Object.fromEntries(
92
+ executionKeys.map((key) => {
93
+ const field = Object.getOwnPropertyDescriptor(rawExecution, key);
94
+ if (!field?.enumerable || !("value" in field))
95
+ rrsiFail("native execution contract cannot use accessors");
96
+ return [key, field.value];
97
+ }),
98
+ );
99
+ const dependencyLock = verifySkillDependencyLock(execution.dependencyLock);
100
+ const runtimeManifest = verifySkillRuntimeManifest(execution.runtimeManifest);
101
+ if (
102
+ !execution.targetMatrix ||
103
+ typeof execution.targetMatrix !== "object" ||
104
+ isProxy(execution.targetMatrix)
105
+ )
106
+ rrsiFail("native target matrix requires own data fields");
107
+ const nativeRoot = Object.getOwnPropertyDescriptor(
108
+ execution.targetMatrix,
109
+ "targetMatrixRoot",
110
+ );
111
+ const nativeCells = Object.getOwnPropertyDescriptor(
112
+ execution.targetMatrix,
113
+ "cells",
114
+ );
115
+ if (
116
+ !nativeRoot ||
117
+ !("value" in nativeRoot) ||
118
+ !nativeCells ||
119
+ !("value" in nativeCells)
120
+ )
121
+ rrsiFail("native target matrix cannot use accessors");
122
+ const targetMatrix = verifySkillTargetMatrix(execution.targetMatrix, {
123
+ dependencyLock,
124
+ runtimeManifest,
125
+ expectedTargetMatrixRoot: nativeRoot.value,
126
+ expectedEnvironmentBindings: nativeCells.value,
127
+ });
128
+ if (targetMatrix.tenantId !== campaign.tenantId)
129
+ rrsiFail("native execution contract belongs to another tenant");
130
+ if (
131
+ campaign.experiment.comparisons.some(
132
+ (id) => !PAIRS.some((pair) => pair.id === id),
133
+ )
134
+ )
135
+ rrsiFail("native design cannot silently discard a registered comparison");
136
+ const lifecycles = snapshotRrsiData(ports.lifecycleDigests);
137
+ rrsiExact(
138
+ lifecycles,
139
+ campaign.experiment.arms,
140
+ "frozen arm lifecycle references",
141
+ );
142
+ for (const arm of campaign.experiment.arms)
143
+ rrsiDigest(lifecycles[arm], `${arm} lifecycle digest`);
144
+ const sources = snapshotRrsiVariantContexts(ports.variants);
145
+ // Each individual derivation and the aggregate must be checked before launch.
146
+ const variantMappings = sources.map(buildRrsiEvaluationVariantMapping);
147
+ const expectedVariants = [
148
+ "clean",
149
+ ...campaign.experiment.perturbations,
150
+ ].sort();
151
+ if (
152
+ rrsiCanonical(variantMappings.map((mapping) => mapping.variant).sort()) !==
153
+ rrsiCanonical(expectedVariants) ||
154
+ variantMappings.some(
155
+ (mapping) =>
156
+ mapping.evaluationMappingDigest !== base.evaluationMappingDigest,
157
+ )
158
+ )
159
+ rrsiFail(
160
+ "native plan must include exactly all frozen variants of this mapping",
161
+ );
162
+ assertRrsiVariantSetInputIsolation(sources);
163
+ const byVariant = new Map(
164
+ variantMappings.map((mapping) => [mapping.variant, mapping]),
165
+ );
166
+ const nativeCases = snapshotRrsiData(ports.nativeCases);
167
+ const roles = STAGES[ports.stage];
168
+ if (
169
+ !Array.isArray(nativeCases) ||
170
+ nativeCases.length !== roles.length * expectedVariants.length * PAIRS.length
171
+ )
172
+ rrsiFail("native plan omits part of the triangle measurement denominator");
173
+ const seen = new Set(),
174
+ invocationIds = new Set(),
175
+ invocationNonces = new Set();
176
+ const candidateContents = new Map(),
177
+ planDigests = new Set();
178
+ let parentIdentity = null,
179
+ targetIdentity = null;
180
+ const observations = Object.fromEntries(
181
+ campaign.experiment.arms.map((arm) => [arm, 0]),
182
+ );
183
+ const partitions = new Set();
184
+ const compiled = nativeCases
185
+ .map((entry) => {
186
+ rrsiExact(
187
+ entry,
188
+ ["role", "variant", "pairId", "plan"],
189
+ "native evaluation case",
190
+ );
191
+ const pair = PAIRS.find((pair) => pair.id === entry.pairId);
192
+ const variant = byVariant.get(entry.variant);
193
+ if (
194
+ !roles.includes(entry.role) ||
195
+ !pair ||
196
+ !variant ||
197
+ seen.has(keyOf(entry))
198
+ )
199
+ rrsiFail("native measurement case is foreign or duplicated");
200
+ seen.add(keyOf(entry));
201
+ const nativePlan = verifySkillTargetMatrixEvalPlan(entry.plan);
202
+ if (
203
+ nativePlan.dependencyLockDigest !==
204
+ dependencyLock.dependencyLockDigest ||
205
+ nativePlan.runtimeManifestDigest !==
206
+ runtimeManifest.runtimeManifestDigest ||
207
+ nativePlan.targetMatrixRoot !== targetMatrix.targetMatrixRoot ||
208
+ nativePlan.cells.length !== targetMatrix.cells.length ||
209
+ nativePlan.cells.some((cell, index) =>
210
+ [
211
+ "cellId",
212
+ "runtimeId",
213
+ "targetEnvironmentRef",
214
+ "environmentDigest",
215
+ ].some((key) => cell[key] !== targetMatrix.cells[index][key]),
216
+ )
217
+ )
218
+ rrsiFail(
219
+ "native plan changes the complete declared target matrix or execution contract",
220
+ );
221
+ if (planDigests.has(nativePlan.planDigest))
222
+ rrsiFail("native variants cannot reuse the same original plan");
223
+ planDigests.add(nativePlan.planDigest);
224
+ const role = variant.roles.find((role) => role.role === entry.role);
225
+ if (
226
+ nativePlan.tenantId !== campaign.tenantId ||
227
+ nativePlan.skillName !== campaign.goalId ||
228
+ nativePlan.candidateId !== base.versions[pair.candidateArm] ||
229
+ nativePlan.baselineId !== base.versions[pair.baselineArm]
230
+ )
231
+ rrsiFail(
232
+ "native plan changes the frozen tenant, target or arm artifact",
233
+ );
234
+ if (
235
+ pair.baselineArm === "baseline" &&
236
+ nativePlan.baselineReleaseDigest !== campaign.parentReleaseDigest
237
+ )
238
+ rrsiFail("native stable baseline changes the parent release");
239
+ if (
240
+ candidateContents.has(pair.candidateArm) &&
241
+ candidateContents.get(pair.candidateArm) !==
242
+ nativePlan.candidateContentDigest
243
+ )
244
+ rrsiFail("native cases change the same candidate's content");
245
+ candidateContents.set(
246
+ pair.candidateArm,
247
+ nativePlan.candidateContentDigest,
248
+ );
249
+ const parent = {
250
+ contentDigest: nativePlan.expectedActiveContentDigest,
251
+ revision: nativePlan.expectedActiveRevision,
252
+ dependencyLockDigest: nativePlan.dependencyLockDigest,
253
+ runtimeManifestDigest: nativePlan.runtimeManifestDigest,
254
+ targetMatrixRoot: nativePlan.targetMatrixRoot,
255
+ };
256
+ parentIdentity ??= parent;
257
+ if (rrsiCanonical(parent) !== rrsiCanonical(parentIdentity))
258
+ rrsiFail("native cases disagree on parent, execution or target scope");
259
+ const targets = nativePlan.cells
260
+ .map((cell) => [
261
+ cell.cellId,
262
+ cell.runtimeId,
263
+ cell.targetEnvironmentRef,
264
+ cell.environmentDigest,
265
+ ])
266
+ .sort((a, b) =>
267
+ rrsiCanonical(a) < rrsiCanonical(b)
268
+ ? -1
269
+ : rrsiCanonical(a) > rrsiCanonical(b)
270
+ ? 1
271
+ : 0,
272
+ );
273
+ targetIdentity ??= targets;
274
+ if (rrsiCanonical(targets) !== rrsiCanonical(targetIdentity))
275
+ rrsiFail("native cases do not cover the same frozen target matrix");
276
+ const counts = {};
277
+ for (const task of role.mappings.filter(
278
+ (task) => task.split !== "training",
279
+ )) {
280
+ counts[task.rrsiPartition] =
281
+ (counts[task.rrsiPartition] ?? 0) + campaign.experiment.seeds.length;
282
+ partitions.add(task.rrsiPartition);
283
+ }
284
+ const cohortId = `rrsi-eval.${rrsiHash(
285
+ "chainlesschain.rrsi-native-cohort-identity/v1",
286
+ {
287
+ campaignDigest: campaign.campaignDigest,
288
+ stage: ports.stage,
289
+ role: entry.role,
290
+ variant: entry.variant,
291
+ pairId: entry.pairId,
292
+ nativePlanDigest: nativePlan.planDigest,
293
+ },
294
+ ).slice(7)}`;
295
+ const slots = nativePlan.cells.map((cell) => {
296
+ if (
297
+ cell.suiteDigest !== role.suiteDigest ||
298
+ cell.policyDigest !== role.policyDigest ||
299
+ cell.environmentDigest !== campaign.execution.environmentDigest
300
+ )
301
+ rrsiFail(
302
+ "native cell changes the variant Suite, policy or environment",
303
+ );
304
+ if (
305
+ invocationIds.has(cell.invocationId) ||
306
+ invocationNonces.has(cell.invocationNonce)
307
+ )
308
+ rrsiFail("native attempts reuse an invocation identity");
309
+ invocationIds.add(cell.invocationId);
310
+ invocationNonces.add(cell.invocationNonce);
311
+ const evaluationContext = {
312
+ planDigest: nativePlan.planDigest,
313
+ targetMatrixRoot: nativePlan.targetMatrixRoot,
314
+ cellId: cell.cellId,
315
+ runtimeId: cell.runtimeId,
316
+ };
317
+ const request = {
318
+ suiteRef: cell.suiteRef,
319
+ candidateId: nativePlan.candidateId,
320
+ baselineId: nativePlan.baselineId,
321
+ targetEnvironmentRef: cell.targetEnvironmentRef,
322
+ evaluationContext,
323
+ };
324
+ const expectedContext = {
325
+ ...evaluationContext,
326
+ tenantId: nativePlan.tenantId,
327
+ targetEnvironmentRef: cell.targetEnvironmentRef,
328
+ environmentDigest: cell.environmentDigest,
329
+ candidateId: nativePlan.candidateId,
330
+ baselineId: nativePlan.baselineId,
331
+ suiteDigest: cell.suiteDigest,
332
+ policyDigest: cell.policyDigest,
333
+ evaluationAuthorityRoot: cell.evaluationAuthorityRoot,
334
+ };
335
+ const planned = Object.values(counts).reduce(
336
+ (sum, count) => sum + count,
337
+ 0,
338
+ );
339
+ observations[pair.baselineArm] += planned;
340
+ observations[pair.candidateArm] += planned;
341
+ return {
342
+ cohortId,
343
+ slotId: cell.cellId,
344
+ nativePlanDigest: nativePlan.planDigest,
345
+ request,
346
+ requestDigest: computeEvolutionEvalLaunchRequestDigest(request),
347
+ expectedContext,
348
+ evaluationContextDigest:
349
+ computeEvolutionEvalContextDigest(expectedContext),
350
+ plannedObservationsPerArmByPartition: counts,
351
+ pmTrainingPartitionDigest: role.pmTrainingPartitionDigest,
352
+ };
353
+ });
354
+ return {
355
+ role: entry.role,
356
+ variant: entry.variant,
357
+ pairId: entry.pairId,
358
+ candidateArm: pair.candidateArm,
359
+ baselineArm: pair.baselineArm,
360
+ contributesToConfirmatoryArmMeans: true,
361
+ isRegisteredContrast: campaign.experiment.comparisons.includes(pair.id),
362
+ variantMappingDigest: variant.variantMappingDigest,
363
+ recipeDigest: variant.recipeDigest,
364
+ nativePlan,
365
+ slots,
366
+ };
367
+ })
368
+ .sort((a, b) => (keyOf(a) < keyOf(b) ? -1 : 1));
369
+ if (new Set(Object.values(observations)).size !== 1)
370
+ rrsiFail("native triangle does not balance planned arm observations");
371
+ const budget =
372
+ ports.stage === "selection"
373
+ ? campaign.budget.selectionPerExploringArm
374
+ : campaign.budget.finalEvaluationPerArm;
375
+ if (Object.values(observations).some((count) => count > budget.maxExecutions))
376
+ rrsiFail(
377
+ "frozen RRSI budget cannot cover complete native actor observations",
378
+ "CC_RRSI_BUDGET_EXCEEDED",
379
+ );
380
+ const result = rrsiEnvelope(
381
+ RRSI_NATIVE_EVALUATION_PLAN_SCHEMA,
382
+ "nativeEvaluationPlanDigest",
383
+ {
384
+ campaignDigest: campaign.campaignDigest,
385
+ evaluationMappingDigest: base.evaluationMappingDigest,
386
+ parentReleaseDigest: campaign.parentReleaseDigest,
387
+ anchorReleaseDigest: campaign.anchorReleaseDigest,
388
+ stage: ports.stage,
389
+ versions: base.versions,
390
+ lifecycleDigests: lifecycles,
391
+ seeds: campaign.experiment.seeds,
392
+ variants: expectedVariants,
393
+ parentIdentity,
394
+ targetIdentity,
395
+ cases: compiled,
396
+ plannedActorObservationsByArm: observations,
397
+ hypothesisCount:
398
+ campaign.experiment.comparisons.length *
399
+ expectedVariants.length *
400
+ partitions.size *
401
+ targetIdentity.length,
402
+ estimand:
403
+ "frozen-triangle-arm-task-means-then-source-component-deltas/v1",
404
+ repeatedObservationsDoNotAddIndependentComponents: true,
405
+ preservesOriginalNativeGateQualityAndEfficiencyRequirements: true,
406
+ nativePlansReplacedWithRrsiDigests: false,
407
+ declaredTargetMatrixComplete: true,
408
+ targetMatrixAuthorityVerified: false,
409
+ fullRequestCostGraphVerified: false,
410
+ billingComplete: false,
411
+ lifecycleProvenanceVerified: false,
412
+ recipeExecutionVerified: false,
413
+ sourceProvenanceVerified: false,
414
+ nativePlanAuthoritiesVerified: false,
415
+ admissionInventoryVerified: false,
416
+ statisticalProtocolValidated: false,
417
+ },
418
+ );
419
+ // Reject oversized graphs before returning an artifact that could not be
420
+ // independently reopened with the same RRSI data limits. Never trim cells.
421
+ snapshotRrsiData(result);
422
+ return result;
423
+ }
424
+
425
+ /** Independent contextual readback; a JSON plan never grants a launch capability. */
426
+ export function verifyRrsiNativeEvaluationPlan(plan, context) {
427
+ const rebuilt = buildRrsiNativeEvaluationPlan(context);
428
+ if (rrsiCanonical(snapshotRrsiData(plan)) !== rrsiCanonical(rebuilt))
429
+ rrsiFail("native RRSI plan differs from the frozen measurement graph");
430
+ return rebuilt;
431
+ }
@@ -0,0 +1,121 @@
1
+ /** Pure native statistical plans. Structural declarations never prove preregistration. */
2
+ import { isProxy } from "node:util/types";
3
+ import { verifyRrsiCampaign } from "./rrsi-contracts.js";
4
+ import { normalizeRrsiNativeEvaluationBatch } from "./rrsi-native-evaluation-batch.js";
5
+ import { buildRrsiGroupStatisticsPlan } from "./rrsi-group-statistics.js";
6
+ import {
7
+ snapshotRrsiData,
8
+ rrsiCanonical,
9
+ rrsiEnvelope,
10
+ rrsiFail,
11
+ } from "./rrsi-data.js";
12
+
13
+ export const RRSI_NATIVE_GROUP_STATISTICS_PLAN_SCHEMA =
14
+ "chainlesschain.rrsi-native-group-statistics-plan/v2";
15
+ const MAX_RESAMPLE_OPERATIONS = 50_000_000;
16
+ const compare = (a, b) => (a < b ? -1 : a > b ? 1 : 0);
17
+
18
+ function fields(input, names, label) {
19
+ if (
20
+ !input ||
21
+ isProxy(input) ||
22
+ Object.getPrototypeOf(input) !== Object.prototype ||
23
+ Reflect.ownKeys(input).length !== names.length
24
+ )
25
+ rrsiFail(`${label} requires plain own fields`);
26
+ return Object.fromEntries(
27
+ names.map((name) => {
28
+ const field = Object.getOwnPropertyDescriptor(input, name);
29
+ if (!field?.enumerable || !("value" in field))
30
+ rrsiFail(`${label} cannot use accessors`);
31
+ return [name, field.value];
32
+ }),
33
+ );
34
+ }
35
+
36
+ /** Build before reservation; this structural plan does not prove preregistration. */
37
+ export function buildRrsiNativeGroupStatisticsPlan(input) {
38
+ const options = fields(
39
+ input,
40
+ ["campaign", "batch"],
41
+ "native statistics plan",
42
+ );
43
+ const campaign = verifyRrsiCampaign(options.campaign);
44
+ const batch = normalizeRrsiNativeEvaluationBatch(options.batch, campaign);
45
+ if (campaign.experiment.bootstrapSamples > 1_000_000)
46
+ rrsiFail("native statistical protocol exceeds the interval kernel bound");
47
+ const base = buildRrsiGroupStatisticsPlan({
48
+ campaign,
49
+ stage: batch.stage,
50
+ versions: batch.versions,
51
+ });
52
+ // Reuse the original source components and weights. Targets and replicas
53
+ // enlarge the frozen observation family, never the independent population.
54
+ const targets = batch.targetIdentity
55
+ .map(([slotId, runtimeId, targetEnvironmentRef, environmentDigest]) => ({
56
+ slotId,
57
+ runtimeId,
58
+ targetEnvironmentRef,
59
+ environmentDigest,
60
+ }))
61
+ .sort((a, b) => compare(a.slotId, b.slotId));
62
+ const hypothesisCount = base.hypothesisCount * targets.length;
63
+ const alphaPerHypothesis = base.familyAlpha / hypothesisCount;
64
+ const tailReplicates = (base.bootstrapSamples * alphaPerHypothesis) / 2;
65
+ const resampleOperations = base.resampleOperations * targets.length;
66
+ if (resampleOperations > MAX_RESAMPLE_OPERATIONS)
67
+ rrsiFail(
68
+ "complete native statistical family exceeds resampling operation limit",
69
+ "CC_RRSI_BUDGET_EXCEEDED",
70
+ );
71
+ const plan = rrsiEnvelope(
72
+ RRSI_NATIVE_GROUP_STATISTICS_PLAN_SCHEMA,
73
+ "statisticsPlanDigest",
74
+ {
75
+ campaignDigest: campaign.campaignDigest,
76
+ batchDigest: batch.batchDigest,
77
+ nativeEvaluationPlanDigest: batch.nativeEvaluationPlanDigest,
78
+ parentReleaseDigest: campaign.parentReleaseDigest,
79
+ stage: batch.stage,
80
+ versions: batch.versions,
81
+ lifecycleDigests: batch.lifecycleDigests,
82
+ targetMatrixRoot: batch.parentIdentity.targetMatrixRoot,
83
+ seeds: base.seeds,
84
+ variants: base.variants,
85
+ comparisons: base.comparisons,
86
+ pools: base.pools,
87
+ targets,
88
+ fixedPairReplicasPerTaskSeedArm: 2,
89
+ aggregationMethod:
90
+ "mean-fixed-pair-replicas-then-seeds-then-task-weighted-source-components/v2",
91
+ successDefinition:
92
+ "reported-pass-and-zero-security-and-permission-violations/v2",
93
+ manualRemediationMeasured: false,
94
+ familyAlpha: base.familyAlpha,
95
+ hypothesisCount,
96
+ alphaPerHypothesis,
97
+ bootstrapSamples: base.bootstrapSamples,
98
+ bootstrapTailReplicates: tailReplicates,
99
+ bootstrapTailResolutionSufficient: tailReplicates >= 25,
100
+ randomnessCommitment: base.randomnessCommitment,
101
+ resamplingUnit: base.resamplingUnit,
102
+ bootstrapMethod: base.bootstrapMethod,
103
+ boundedMethod: base.boundedMethod,
104
+ minimumIndependentGroups: base.minimumIndependentGroups,
105
+ stoppingRule: base.stoppingRule,
106
+ resampleOperations,
107
+ preObservationRegistrationVerified: false,
108
+ sourceIndependenceVerified: false,
109
+ perturbationSemanticsVerified: false,
110
+ },
111
+ );
112
+ snapshotRrsiData(plan);
113
+ return plan;
114
+ }
115
+
116
+ export function verifyRrsiNativeGroupStatisticsPlan(plan, context) {
117
+ const rebuilt = buildRrsiNativeGroupStatisticsPlan(context);
118
+ if (rrsiCanonical(snapshotRrsiData(plan)) !== rrsiCanonical(rebuilt))
119
+ rrsiFail("native statistics plan or frozen protocol differs");
120
+ return rebuilt;
121
+ }