chainlesschain 0.166.92 → 0.166.93

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 (174) hide show
  1. package/package.json +3 -3
  2. package/src/assets/linux-subreaper/linux-arm64/manifest.json +1 -1
  3. package/src/assets/linux-subreaper/linux-x64/manifest.json +1 -1
  4. package/src/assets/web-panel/assets/{AIOps-C74YzqwJ.js → AIOps-oo9rE0gh.js} +1 -1
  5. package/src/assets/web-panel/assets/{ActionButton-TFef1hOE.js → ActionButton-CVJVVv4i.js} +1 -1
  6. package/src/assets/web-panel/assets/{Analytics-CYsWpkkU.js → Analytics-CUXuwmia.js} +3 -3
  7. package/src/assets/web-panel/assets/{AppLayout-CFf9kjwu.js → AppLayout-iM4PvCuY.js} +5 -5
  8. package/src/assets/web-panel/assets/{Artifacts-TQqa94YO.js → Artifacts-DKUIJbf9.js} +1 -1
  9. package/src/assets/web-panel/assets/{Audit-B79ayqfS.js → Audit-C4_SzFN2.js} +1 -1
  10. package/src/assets/web-panel/assets/{BackgroundAgents-pjkHfLP9.js → BackgroundAgents-C3427uy-.js} +1 -1
  11. package/src/assets/web-panel/assets/{Backup-CE6A-t_r.js → Backup-BpEQQiog.js} +1 -1
  12. package/src/assets/web-panel/assets/{BaseInput-CwcgWMBY.js → BaseInput-C_exQomZ.js} +1 -1
  13. package/src/assets/web-panel/assets/{Chat-BIkDNesY.js → Chat-DzpkLtWa.js} +6 -6
  14. package/src/assets/web-panel/assets/{ChatBubbleRenderer-DgaokYts.js → ChatBubbleRenderer-DX4XmTWm.js} +1 -1
  15. package/src/assets/web-panel/assets/{Checkbox-MbypIy5V.js → Checkbox-CxAC1CU8.js} +1 -1
  16. package/src/assets/web-panel/assets/{Codegen-DiFHWDnt.js → Codegen-wDFAGCLp.js} +1 -1
  17. package/src/assets/web-panel/assets/{Col-BNMlYMso.js → Col-BvwirhMf.js} +1 -1
  18. package/src/assets/web-panel/assets/{Community-B3HVyHOX.js → Community-BJuA7paY.js} +1 -1
  19. package/src/assets/web-panel/assets/{Compact-C7hlAubb.js → Compact-DzV35_u2.js} +1 -1
  20. package/src/assets/web-panel/assets/{Compliance-PaXZu6sE.js → Compliance-CIDPPvr9.js} +1 -1
  21. package/src/assets/web-panel/assets/{Cowork-BGiojbm-.js → Cowork-DyTMxP3N.js} +3 -3
  22. package/src/assets/web-panel/assets/{Cron-Bmr-1QAx.js → Cron-PcNLjMFx.js} +2 -2
  23. package/src/assets/web-panel/assets/{Crosschain-BwUvWCVd.js → Crosschain-B_O7ck6Z.js} +1 -1
  24. package/src/assets/web-panel/assets/{DID-k_4QZocW.js → DID-CII35Me1.js} +2 -2
  25. package/src/assets/web-panel/assets/{Dashboard-_ieRo2C5.js → Dashboard-DU56fkNz.js} +2 -2
  26. package/src/assets/web-panel/assets/{Dropdown-DYHh6T27.js → Dropdown-DHC8HVeJ.js} +1 -1
  27. package/src/assets/web-panel/assets/{EmailListRenderer-BNlQcWQX.js → EmailListRenderer-oUOHFNsD.js} +1 -1
  28. package/src/assets/web-panel/assets/{EvolutionSettings-DIkZ6U2D.js → EvolutionSettings-D7RCAWNl.js} +1 -1
  29. package/src/assets/web-panel/assets/{FamilyGuardDashboard-Dq7qSr0P.js → FamilyGuardDashboard-CGONPZxC.js} +1 -1
  30. package/src/assets/web-panel/assets/{Federation-C64e3Cbx.js → Federation-BbDlPWcl.js} +1 -1
  31. package/src/assets/web-panel/assets/{FormItemContext-D-GE2vUa.js → FormItemContext-BBJbFQQT.js} +1 -1
  32. package/src/assets/web-panel/assets/{GenericCardRenderer-DO3B2gis.js → GenericCardRenderer-iuxAero4.js} +1 -1
  33. package/src/assets/web-panel/assets/{Git-0ETirIQH.js → Git-Dw0prdY5.js} +2 -2
  34. package/src/assets/web-panel/assets/{Governance-C9fnRygX.js → Governance-DOGqi_uV.js} +1 -1
  35. package/src/assets/web-panel/assets/{Inference-CLJ9RTsK.js → Inference-BY5oUGGj.js} +1 -1
  36. package/src/assets/web-panel/assets/{KnowledgeGraph-D3C_GxrN.js → KnowledgeGraph-CcE2EVYX.js} +1 -1
  37. package/src/assets/web-panel/assets/{Logs-C5ctGbkN.js → Logs-DyfN4R5w.js} +2 -2
  38. package/src/assets/web-panel/assets/MarkdownRenderer-Bj62Aq0M.js +1 -0
  39. package/src/assets/web-panel/assets/{Marketplace-GF_t6hJ_.js → Marketplace-CuuuAXUh.js} +1 -1
  40. package/src/assets/web-panel/assets/{McpTools-BGsGzgQs.js → McpTools-948Fithv.js} +2 -2
  41. package/src/assets/web-panel/assets/{Memory-CcrY2A0j.js → Memory-D4PINvyy.js} +2 -2
  42. package/src/assets/web-panel/assets/{MobileBridge-Bi4T0RlS.js → MobileBridge-ECKMaLzX.js} +1 -1
  43. package/src/assets/web-panel/assets/{MobileProjects-DvjEGyvf.js → MobileProjects-CB5MAcvD.js} +1 -1
  44. package/src/assets/web-panel/assets/{Mtc-DL77Vf-k.js → Mtc-BRzIM3HJ.js} +4 -4
  45. package/src/assets/web-panel/assets/{MtcAudit-CDy_Uswb.js → MtcAudit-CGeAXJGn.js} +2 -2
  46. package/src/assets/web-panel/assets/{Multisig-DL0BAO_c.js → Multisig-C_qJ-8K-.js} +3 -3
  47. package/src/assets/web-panel/assets/{NLProgramming-B-woh5IR.js → NLProgramming-DAEyCn7T.js} +1 -1
  48. package/src/assets/web-panel/assets/{Notes-CEFVCxk7.js → Notes-DmD3MEec.js} +3 -3
  49. package/src/assets/web-panel/assets/{NotificationSettings-BqPPMuAP.js → NotificationSettings-Cv4Q3VC9.js} +1 -1
  50. package/src/assets/web-panel/assets/OrderTableRenderer-BNlpaFjH.js +1 -0
  51. package/src/assets/web-panel/assets/{Organization-B1gX8jlr.js → Organization-DqAFdz6p.js} +2 -2
  52. package/src/assets/web-panel/assets/{Overflow-CeMxuUZy.js → Overflow-8Ye9cIcE.js} +1 -1
  53. package/src/assets/web-panel/assets/{P2P-B5aIRWwJ.js → P2P-755SfHoJ.js} +2 -2
  54. package/src/assets/web-panel/assets/{PdhVaultBrowser-6rYgejd4.js → PdhVaultBrowser-CgZLiucX.js} +4 -4
  55. package/src/assets/web-panel/assets/{Permissions-CqCp2SIl.js → Permissions-C-vFF_rL.js} +3 -3
  56. package/src/assets/web-panel/assets/{PersonalDataHub-BsA7DJWW.js → PersonalDataHub-Diz1oXM3.js} +5 -5
  57. package/src/assets/web-panel/assets/{Pipeline-CiW6HeZh.js → Pipeline-D4kIzsZG.js} +1 -1
  58. package/src/assets/web-panel/assets/{Privacy-DckUOLYq.js → Privacy-QKLkSAUH.js} +1 -1
  59. package/src/assets/web-panel/assets/{ProjectInit-CZppOOYR.js → ProjectInit-I0S9o_RT.js} +2 -2
  60. package/src/assets/web-panel/assets/{ProjectSettings-B9QPzhDU.js → ProjectSettings-DdgV3-Ho.js} +2 -2
  61. package/src/assets/web-panel/assets/{Projects-BErjjGha.js → Projects-BJHHegtj.js} +1 -1
  62. package/src/assets/web-panel/assets/{Providers-DehU6Qiz.js → Providers-uVa1zfbS.js} +1 -1
  63. package/src/assets/web-panel/assets/{QrScannerModal-E1SUvv1m.js → QrScannerModal-YLVpOChR.js} +1 -1
  64. package/src/assets/web-panel/assets/{QuickAsk-COWFxyH3.js → QuickAsk-535AYH61.js} +1 -1
  65. package/src/assets/web-panel/assets/{Recommend-D26pWKxX.js → Recommend-C_P6eNSw.js} +1 -1
  66. package/src/assets/web-panel/assets/{RemoteSession-DCOIaId3.js → RemoteSession-EXH1SbNj.js} +2 -2
  67. package/src/assets/web-panel/assets/{Reputation-DT_AHGAR.js → Reputation-Cxc7d3eU.js} +1 -1
  68. package/src/assets/web-panel/assets/{Row-B50S-1nl.js → Row-EDqJy-wS.js} +1 -1
  69. package/src/assets/web-panel/assets/{RssFeed-BaBnHg3Q.js → RssFeed-C03Xeg9_.js} +2 -2
  70. package/src/assets/web-panel/assets/{Search-BVdnLuuS.js → Search-DsIga9DK.js} +1 -1
  71. package/src/assets/web-panel/assets/{Security-BnacH74J.js → Security-DgArMFc-.js} +3 -3
  72. package/src/assets/web-panel/assets/{Services-CxM08Zch.js → Services-MooDpHBP.js} +2 -2
  73. package/src/assets/web-panel/assets/{Skeleton-DE7CIc1N.js → Skeleton-B10P1Dr6.js} +1 -1
  74. package/src/assets/web-panel/assets/{Skills-CGI0SJmf.js → Skills-DHLHEkLl.js} +1 -1
  75. package/src/assets/web-panel/assets/{Sla-DpEzPcqc.js → Sla-D4RT7d4g.js} +1 -1
  76. package/src/assets/web-panel/assets/{SpeechSettings-CTmnmMHn.js → SpeechSettings-D8u6F-LV.js} +1 -1
  77. package/src/assets/web-panel/assets/{SyncSettings-Dxgrd9hd.js → SyncSettings-4nvNzRq8.js} +2 -2
  78. package/src/assets/web-panel/assets/{Tasks-CW4slS0A.js → Tasks-CmCb8zNO.js} +1 -1
  79. package/src/assets/web-panel/assets/{Templates-DxvGWDgB.js → Templates-CzESIa21.js} +1 -1
  80. package/src/assets/web-panel/assets/{Tenant-_Q0o2tNK.js → Tenant-Ch_N3p4d.js} +1 -1
  81. package/src/assets/web-panel/assets/{Terminal-BTZn8pow.js → Terminal-BZccUf_X.js} +2 -2
  82. package/src/assets/web-panel/assets/{TimelineRenderer-CauL0KFe.js → TimelineRenderer-FrKcNy_3.js} +1 -1
  83. package/src/assets/web-panel/assets/{Tokens-CDoM2qeT.js → Tokens-4xvLpXfD.js} +1 -1
  84. package/src/assets/web-panel/assets/{Trigger-B-QYGEU7.js → Trigger-84UjyxXd.js} +1 -1
  85. package/src/assets/web-panel/assets/{Trust-BD6XJHT-.js → Trust-M6UtHnji.js} +1 -1
  86. package/src/assets/web-panel/assets/{UkeySign-x4TFwCy0.js → UkeySign-L_xEgtCg.js} +1 -1
  87. package/src/assets/web-panel/assets/{VideoEditing-t3imBK_0.js → VideoEditing-BLJCX9ru.js} +1 -1
  88. package/src/assets/web-panel/assets/{Wallet-BCfkWwNC.js → Wallet-DwL6uJCj.js} +4 -4
  89. package/src/assets/web-panel/assets/{WebAuthn-WH314Mdm.js → WebAuthn-Bmn9pdzz.js} +5 -5
  90. package/src/assets/web-panel/assets/{WorkflowEditor-jUlcjrUg.js → WorkflowEditor-DSsZ5xG1.js} +1 -1
  91. package/src/assets/web-panel/assets/{chat-Dg3VASTL.js → chat--FGNUaa8.js} +1 -1
  92. package/src/assets/web-panel/assets/{colors-BNvmBRKE.js → colors-DeuwNdqX.js} +1 -1
  93. package/src/assets/web-panel/assets/{compact-item-BGOfoqf4.js → compact-item-I4XKxRFU.js} +1 -1
  94. package/src/assets/web-panel/assets/{createContext-BNQeqKAs.js → createContext-RoD2p5Ba.js} +1 -1
  95. package/src/assets/web-panel/assets/devWarning-ctnml4IW.js +1 -0
  96. package/src/assets/web-panel/assets/{hasIn-Bg3AjCrq.js → hasIn-BsvyddUM.js} +1 -1
  97. package/src/assets/web-panel/assets/{index-D6UqK83L.js → index-0tRU1Sv-.js} +1 -1
  98. package/src/assets/web-panel/assets/{index-uH2LnAs_.js → index-4xHc2WjT.js} +1 -1
  99. package/src/assets/web-panel/assets/{index-xzaUx19r.js → index-B8-eGLN9.js} +1 -1
  100. package/src/assets/web-panel/assets/{index-DYn5DnDk.js → index-BS_uqSTa.js} +1 -1
  101. package/src/assets/web-panel/assets/{index-DO0VlNtc.js → index-BYEVBlCl.js} +1 -1
  102. package/src/assets/web-panel/assets/{index-DF_FKSVH.js → index-BcBM065G.js} +1 -1
  103. package/src/assets/web-panel/assets/{index-CY8cRKHR.js → index-BnrL4s-3.js} +1 -1
  104. package/src/assets/web-panel/assets/{index-COol3xfA.js → index-BrZPb0On.js} +1 -1
  105. package/src/assets/web-panel/assets/index-C7PN8mh1.js +1 -0
  106. package/src/assets/web-panel/assets/{index-BBCMulQ-.js → index-CBazK4-7.js} +1 -1
  107. package/src/assets/web-panel/assets/{index-OUFoxUgH.js → index-CPS3zv1c.js} +1 -1
  108. package/src/assets/web-panel/assets/{index-60AnjUTX.js → index-CSrZiiAs.js} +1 -1
  109. package/src/assets/web-panel/assets/{index-D072oLjp.js → index-CVwZMt9Z.js} +1 -1
  110. package/src/assets/web-panel/assets/{index-D_O2ZjPk.js → index-CdgKZYgm.js} +1 -1
  111. package/src/assets/web-panel/assets/{index-DcCnO0RU.js → index-CesTu01s.js} +1 -1
  112. package/src/assets/web-panel/assets/{index-7QJUWemf.js → index-CiHlSuMl.js} +1 -1
  113. package/src/assets/web-panel/assets/{index-DS04wRll.js → index-CsLVac9n.js} +1 -1
  114. package/src/assets/web-panel/assets/{index-Dkp-okWa.js → index-D1ONyBTW.js} +1 -1
  115. package/src/assets/web-panel/assets/{index-BmTacaQV.js → index-D4IZsKbF.js} +1 -1
  116. package/src/assets/web-panel/assets/{index-BaPvEvB4.js → index-D4P4vpmv.js} +1 -1
  117. package/src/assets/web-panel/assets/{index-Co_LnCWD.js → index-D6J8dz7X.js} +1 -1
  118. package/src/assets/web-panel/assets/{index--I3UF5t1.js → index-DChy2sHE.js} +1 -1
  119. package/src/assets/web-panel/assets/{index-B0mgngoB.js → index-DKUCl_Lk.js} +1 -1
  120. package/src/assets/web-panel/assets/{index-Cx2EXRfr.js → index-DRluW3_r.js} +1 -1
  121. package/src/assets/web-panel/assets/{index-B_JmInC0.js → index-DWUmhNO-.js} +1 -1
  122. package/src/assets/web-panel/assets/{index-DLwEXRrb.js → index-DXnpVGG3.js} +1 -1
  123. package/src/assets/web-panel/assets/{index-fOwii3LP.js → index-DYOpAS6-.js} +1 -1
  124. package/src/assets/web-panel/assets/{index-ZD5Kd8tx.js → index-DiH-3cR2.js} +1 -1
  125. package/src/assets/web-panel/assets/{index-D-mSvCQK.js → index-DlEfwgzr.js} +1 -1
  126. package/src/assets/web-panel/assets/index-KnbBJAO-.js +1 -0
  127. package/src/assets/web-panel/assets/{index-B--0QM0S.js → index-R4St_zjR.js} +1 -1
  128. package/src/assets/web-panel/assets/{index-CCFZN66A.js → index-ScgoDU9V.js} +1 -1
  129. package/src/assets/web-panel/assets/{index-BSNhW95G.js → index-UWdT_lty.js} +1 -1
  130. package/src/assets/web-panel/assets/{index-Cbp-wp-U.js → index-VAlor744.js} +1 -1
  131. package/src/assets/web-panel/assets/{index-Bkz1tgFR.js → index-Wco_uvRo.js} +1 -1
  132. package/src/assets/web-panel/assets/{index-pVdQieac.js → index-ZgFED_Zd.js} +1 -1
  133. package/src/assets/web-panel/assets/{index-2D04Zltx.js → index-jaHeti4i.js} +3 -3
  134. package/src/assets/web-panel/assets/{index-hG7jXGEW.js → index-rJDabtw4.js} +1 -1
  135. package/src/assets/web-panel/assets/{index-Wo0f2iqb.js → index-vRiGKIP0.js} +1 -1
  136. package/src/assets/web-panel/assets/{initDefaultProps-B8PN9AxJ.js → initDefaultProps-BHT0PacY.js} +1 -1
  137. package/src/assets/web-panel/assets/{motion-BHivfw5Q.js → motion-CBYsMtsC.js} +1 -1
  138. package/src/assets/web-panel/assets/{move-B0QU5nDd.js → move-DnHfFV4K.js} +1 -1
  139. package/src/assets/web-panel/assets/{mtc-parser-DRwRM3PE.js → mtc-parser-DfGkRYrx.js} +1 -1
  140. package/src/assets/web-panel/assets/{omit-SHt2rV2p.js → omit-SjLcPQA9.js} +1 -1
  141. package/src/assets/web-panel/assets/{pickAttrs-CcmDlEb2.js → pickAttrs-CCZHF4ep.js} +1 -1
  142. package/src/assets/web-panel/assets/{placementArrow-DYatmXDS.js → placementArrow-DjCGn2sJ.js} +1 -1
  143. package/src/assets/web-panel/assets/{responsiveObserve-B7qrsXq5.js → responsiveObserve-BCFCl2on.js} +1 -1
  144. package/src/assets/web-panel/assets/{slide-BRGhlOWd.js → slide-DsfmuIZu.js} +1 -1
  145. package/src/assets/web-panel/assets/{statusUtils-CT-7NXsQ.js → statusUtils-hPKuJUia.js} +1 -1
  146. package/src/assets/web-panel/assets/{styleChecker-rZdw_Yyp.js → styleChecker-DOXKH7Kf.js} +1 -1
  147. package/src/assets/web-panel/assets/{useFlexGapSupport-D8YNIP4P.js → useFlexGapSupport-B_G7yqio.js} +1 -1
  148. package/src/assets/web-panel/assets/{useFs-B8pt0Gu-.js → useFs-BXOTOm2l.js} +1 -1
  149. package/src/assets/web-panel/assets/{usePersonalDataHub-VMmYM1tt.js → usePersonalDataHub-CRvie3g7.js} +1 -1
  150. package/src/assets/web-panel/assets/{vnode-UNDuoPoq.js → vnode-D9_zMmww.js} +1 -1
  151. package/src/assets/web-panel/assets/{zoom-dN-u667S.js → zoom-C4tW03qI.js} +1 -1
  152. package/src/assets/web-panel/index.html +1 -1
  153. package/src/data/changelog.json +13 -0
  154. package/src/lib/artifact-store.js +51 -3
  155. package/src/lib/bounded-artifact-file-read.js +131 -0
  156. package/src/lib/evolution/evolution-artifact-ports.js +209 -129
  157. package/src/lib/evolution/rrsi-history-ledger-adapter.js +25 -0
  158. package/src/lib/evolution/rrsi-installation-route-contracts.js +275 -0
  159. package/src/lib/evolution/rrsi-installation-route-reader.js +282 -0
  160. package/src/lib/evolution/rrsi-observed-text-index.js +978 -0
  161. package/src/lib/evolution/rrsi-registry-runtime-policy.js +648 -0
  162. package/src/lib/evolution/rrsi-registry-store-policy.js +95 -15
  163. package/src/lib/evolution/rrsi-tenant-index-anchor-contracts.js +223 -0
  164. package/src/lib/evolution/rrsi-tenant-index-anchor-history.js +157 -0
  165. package/src/lib/evolution/skill-release-registry.js +20 -5
  166. package/src/lib/process-execution-broker/windows-native-evaluator-capabilities.js +291 -30
  167. package/src/lib/remote-read-loop-guard.js +227 -24
  168. package/src/lib/task-progress-tracker.js +6 -1
  169. package/src/runtime/agent-core.js +71 -23
  170. package/src/assets/web-panel/assets/MarkdownRenderer-Ce-eWK3j.js +0 -1
  171. package/src/assets/web-panel/assets/OrderTableRenderer-GUKQ1xwp.js +0 -1
  172. package/src/assets/web-panel/assets/devWarning-B7_ypN1G.js +0 -1
  173. package/src/assets/web-panel/assets/index-B-jSKJK6.js +0 -1
  174. package/src/assets/web-panel/assets/index-P4FXZJqI.js +0 -1
@@ -15,11 +15,43 @@ import { types as utilTypes } from "node:util";
15
15
  import { ArtifactStore } from "../artifact-store.js";
16
16
  import { artifactPhysicalIdentity as physicalIdentity } from "./evolution-artifact-identity.js";
17
17
  import { withEvolutionFileIdentity } from "./evolution-file-identity.js";
18
+ import { readBoundedDescriptor } from "./bounded-descriptor-read.js";
19
+ import { readBoundedArtifactFile } from "../bounded-artifact-file-read.js";
18
20
  import {
19
21
  EVOLUTION_ARTIFACT_REF_SCHEMA,
20
22
  EVOLUTION_ARTIFACT_RESOLUTION_SCHEMA,
21
23
  } from "./evolution-ledger.js";
22
24
 
25
+ const ARTIFACT_STORE_DIRECTORY_BOUNDARIES = new WeakMap();
26
+ // Only the shared identity helper's directory opens use this adapter. A POSIX
27
+ // directory/FIFO swap must fail before reaching a potentially blocking open.
28
+ const INDEX_DIRECTORY_FS = Object.freeze({
29
+ constants: fs.constants,
30
+ realpathSync: fs.realpathSync,
31
+ lstatSync: (...args) => fs.lstatSync(...args),
32
+ fstatSync: (...args) => fs.fstatSync(...args),
33
+ closeSync: (...args) => fs.closeSync(...args),
34
+ openSync: (target, flags) =>
35
+ fs.openSync(
36
+ target,
37
+ flags | (fs.constants.O_NONBLOCK || 0) | (fs.constants.O_DIRECTORY || 0),
38
+ ),
39
+ });
40
+ const INDEX_STAT_FIELDS = Object.freeze([
41
+ "dev",
42
+ "ino",
43
+ "mode",
44
+ "uid",
45
+ "gid",
46
+ "nlink",
47
+ "size",
48
+ "mtimeNs",
49
+ "ctimeNs",
50
+ ]);
51
+ const INDEX_MUTATION_FIELDS = Object.freeze(
52
+ INDEX_STAT_FIELDS.filter((name) => name !== "dev" && name !== "ino"),
53
+ );
54
+
23
55
  export const EVOLUTION_DURABLE_ARTIFACT_RECORD_SCHEMA =
24
56
  "chainlesschain.evolution-durable-artifact-record/v1";
25
57
  export const EVOLUTION_ARTIFACT_ENVELOPE_CORE_SCHEMA =
@@ -84,6 +116,10 @@ export const EVOLUTION_ARTIFACT_LEDGER_RETENTION_TYPES = Object.freeze([
84
116
  "evolution-run-event",
85
117
  "rrsi-history-event",
86
118
  "skill-registry-store-policy",
119
+ "skill-registry-runtime-policy",
120
+ "rrsi-observed-text-chunk",
121
+ "rrsi-observed-text-manifest",
122
+ "rrsi-content-restriction-event",
87
123
  "pm-exploration-recovery-snapshot",
88
124
  "pm-exploration-provider-settlement",
89
125
  "evolution-eval-child-evidence",
@@ -144,6 +180,10 @@ export const EVOLUTION_ARTIFACT_TYPES = Object.freeze([
144
180
  "evolution-run-event",
145
181
  "rrsi-history-event",
146
182
  "skill-registry-store-policy",
183
+ "skill-registry-runtime-policy",
184
+ "rrsi-observed-text-chunk",
185
+ "rrsi-observed-text-manifest",
186
+ "rrsi-content-restriction-event",
147
187
  "pm-exploration-recovery-snapshot",
148
188
  "pm-exploration-provider-settlement",
149
189
  "evolution-eval-child-evidence",
@@ -402,6 +442,10 @@ const LEDGER_RETENTION_PURPOSES_BY_TYPE = new Map([
402
442
  ["evolution-run-event", new Set(["evolution-ledger"])],
403
443
  ["rrsi-history-event", new Set(["evolution-ledger"])],
404
444
  ["skill-registry-store-policy", new Set(["evolution-ledger"])],
445
+ ["skill-registry-runtime-policy", new Set(["evolution-ledger"])],
446
+ ["rrsi-observed-text-chunk", new Set(["evolution-ledger"])],
447
+ ["rrsi-observed-text-manifest", new Set(["evolution-ledger"])],
448
+ ["rrsi-content-restriction-event", new Set(["evolution-ledger"])],
405
449
  ["pm-exploration-recovery-snapshot", new Set(["evolution-ledger"])],
406
450
  ["pm-exploration-provider-settlement", new Set(["evolution-ledger"])],
407
451
  ["evolution-eval-child-evidence", new Set(["evolution-ledger"])],
@@ -1117,7 +1161,12 @@ function inspectPhysicalDirectory(directory, label) {
1117
1161
  let stat;
1118
1162
  let realPath;
1119
1163
  try {
1120
- stat = fs.lstatSync(directory);
1164
+ stat = fs.lstatSync(directory, { bigint: true });
1165
+ if (typeof stat.dev !== "bigint" || typeof stat.ino !== "bigint")
1166
+ throw artifactError(
1167
+ EVOLUTION_ARTIFACT_INTEGRITY_FAILED_CODE,
1168
+ `${label} requires full-precision directory stat fields`,
1169
+ );
1121
1170
  assertDirectory(stat, label);
1122
1171
  realPath = physicalRealpath(directory);
1123
1172
  } catch (cause) {
@@ -1141,8 +1190,11 @@ function inspectPhysicalDirectory(directory, label) {
1141
1190
  }
1142
1191
 
1143
1192
  function inspectPhysicalIndex(indexPath, rootRealPath) {
1144
- return withEvolutionFileIdentity(fs, indexPath, (samePathHandle) =>
1145
- inspectPhysicalIndexWithIdentity(indexPath, rootRealPath, samePathHandle),
1193
+ return withEvolutionFileIdentity(
1194
+ INDEX_DIRECTORY_FS,
1195
+ indexPath,
1196
+ (samePathHandle) =>
1197
+ inspectPhysicalIndexWithIdentity(indexPath, rootRealPath, samePathHandle),
1146
1198
  );
1147
1199
  }
1148
1200
 
@@ -1155,8 +1207,8 @@ function inspectPhysicalIndexWithIdentity(
1155
1207
  let realPath;
1156
1208
  let descriptor = null;
1157
1209
  try {
1158
- pathStat = fs.lstatSync(indexPath);
1159
- assertRegularSingleLink(pathStat, "ArtifactStore index");
1210
+ pathStat = fs.lstatSync(indexPath, { bigint: true });
1211
+ assertIndexStat(pathStat, "ArtifactStore index");
1160
1212
  realPath = physicalRealpath(indexPath);
1161
1213
  if (
1162
1214
  !samePath(realPath, indexPath) ||
@@ -1169,16 +1221,36 @@ function inspectPhysicalIndexWithIdentity(
1169
1221
  }
1170
1222
  descriptor = fs.openSync(
1171
1223
  indexPath,
1172
- fs.constants.O_RDONLY | Number(fs.constants.O_NOFOLLOW || 0),
1224
+ fs.constants.O_RDONLY |
1225
+ Number(fs.constants.O_NOFOLLOW || 0) |
1226
+ Number(fs.constants.O_NONBLOCK || 0),
1173
1227
  );
1174
- const descriptorStat = fs.fstatSync(descriptor);
1175
- assertRegularSingleLink(descriptorStat, "ArtifactStore index descriptor");
1176
- if (!samePathHandle(pathStat, descriptorStat)) {
1228
+ const descriptorStat = fs.fstatSync(descriptor, { bigint: true });
1229
+ assertIndexStat(descriptorStat, "ArtifactStore index descriptor");
1230
+ if (
1231
+ !samePathHandle(pathStat, descriptorStat) ||
1232
+ !sameIndexMutationMetadata(pathStat, descriptorStat)
1233
+ ) {
1177
1234
  throw artifactError(
1178
1235
  EVOLUTION_ARTIFACT_INTEGRITY_FAILED_CODE,
1179
1236
  "ArtifactStore index pathname and descriptor identities differ",
1180
1237
  );
1181
1238
  }
1239
+ const afterPathStat = fs.lstatSync(indexPath, { bigint: true });
1240
+ const afterDescriptorStat = fs.fstatSync(descriptor, { bigint: true });
1241
+ assertIndexStat(afterPathStat, "ArtifactStore index");
1242
+ assertIndexStat(afterDescriptorStat, "ArtifactStore index descriptor");
1243
+ if (
1244
+ !sameIndexStat(pathStat, afterPathStat) ||
1245
+ !sameIndexStat(descriptorStat, afterDescriptorStat) ||
1246
+ !samePathHandle(afterPathStat, afterDescriptorStat) ||
1247
+ !sameIndexMutationMetadata(afterPathStat, afterDescriptorStat) ||
1248
+ !samePath(physicalRealpath(indexPath), realPath)
1249
+ )
1250
+ throw artifactError(
1251
+ EVOLUTION_ARTIFACT_INTEGRITY_FAILED_CODE,
1252
+ "ArtifactStore index changed while its identity was captured",
1253
+ );
1182
1254
  } catch (cause) {
1183
1255
  if (isEvolutionArtifactPortError(cause)) throw cause;
1184
1256
  throw artifactError(
@@ -1273,16 +1345,6 @@ function attestCapturedDirectory(directory, realPath, identity, label) {
1273
1345
  }
1274
1346
  }
1275
1347
 
1276
- function sameFileIdentity(left, right) {
1277
- return (
1278
- left.dev === right.dev &&
1279
- left.ino === right.ino &&
1280
- left.size === right.size &&
1281
- left.mtimeMs === right.mtimeMs &&
1282
- left.ctimeMs === right.ctimeMs
1283
- );
1284
- }
1285
-
1286
1348
  function assertRegularSingleLink(stat, label) {
1287
1349
  if (
1288
1350
  !stat ||
@@ -1298,6 +1360,35 @@ function assertRegularSingleLink(stat, label) {
1298
1360
  }
1299
1361
  }
1300
1362
 
1363
+ function assertIndexStat(stat, label) {
1364
+ if (INDEX_STAT_FIELDS.some((name) => typeof stat?.[name] !== "bigint"))
1365
+ throw artifactError(
1366
+ EVOLUTION_ARTIFACT_INTEGRITY_FAILED_CODE,
1367
+ `${label} requires full-precision index stat fields`,
1368
+ );
1369
+ assertRegularSingleLink(stat, label);
1370
+ if (stat.size < 0n || stat.size > BigInt(EVOLUTION_ARTIFACT_MAX_INDEX_BYTES))
1371
+ throw artifactError(
1372
+ EVOLUTION_ARTIFACT_INTEGRITY_FAILED_CODE,
1373
+ `${label} exceeds its bounded snapshot size`,
1374
+ );
1375
+ }
1376
+
1377
+ function sameIndexMutationMetadata(left, right) {
1378
+ return (
1379
+ INDEX_MUTATION_FIELDS.every((name) => left[name] === right[name]) &&
1380
+ physicalIdentity(left).birthtimeMs === physicalIdentity(right).birthtimeMs
1381
+ );
1382
+ }
1383
+
1384
+ function sameIndexStat(left, right) {
1385
+ return (
1386
+ left.dev === right.dev &&
1387
+ left.ino === right.ino &&
1388
+ sameIndexMutationMetadata(left, right)
1389
+ );
1390
+ }
1391
+
1301
1392
  function attestStoreDirectories(layout) {
1302
1393
  attestCapturedDirectory(
1303
1394
  layout.rootDir,
@@ -1420,8 +1511,11 @@ function parseTrustedIndexBytes(bytes) {
1420
1511
  }
1421
1512
 
1422
1513
  function readTrustedIndexSnapshot(layout) {
1423
- return withEvolutionFileIdentity(fs, layout.indexPath, (samePathHandle) =>
1424
- readTrustedIndexSnapshotWithIdentity(layout, samePathHandle),
1514
+ return withEvolutionFileIdentity(
1515
+ INDEX_DIRECTORY_FS,
1516
+ layout.indexPath,
1517
+ (samePathHandle) =>
1518
+ readTrustedIndexSnapshotWithIdentity(layout, samePathHandle),
1425
1519
  );
1426
1520
  }
1427
1521
 
@@ -1434,8 +1528,8 @@ function readTrustedIndexSnapshotWithIdentity(layout, samePathHandle) {
1434
1528
  let bytes;
1435
1529
  let indexRealPath;
1436
1530
  try {
1437
- beforePathStat = fs.lstatSync(layout.indexPath);
1438
- assertRegularSingleLink(beforePathStat, "ArtifactStore index");
1531
+ beforePathStat = fs.lstatSync(layout.indexPath, { bigint: true });
1532
+ assertIndexStat(beforePathStat, "ArtifactStore index");
1439
1533
  if (!samePhysicalIdentity(beforePathStat, layout.indexIdentity)) {
1440
1534
  throw artifactError(
1441
1535
  EVOLUTION_ARTIFACT_INTEGRITY_FAILED_CODE,
@@ -1455,27 +1549,32 @@ function readTrustedIndexSnapshotWithIdentity(layout, samePathHandle) {
1455
1549
  }
1456
1550
  descriptor = fs.openSync(
1457
1551
  layout.indexPath,
1458
- fs.constants.O_RDONLY | Number(fs.constants.O_NOFOLLOW || 0),
1459
- );
1460
- beforeDescriptorStat = fs.fstatSync(descriptor);
1461
- assertRegularSingleLink(
1462
- beforeDescriptorStat,
1463
- "ArtifactStore index descriptor",
1552
+ fs.constants.O_RDONLY |
1553
+ Number(fs.constants.O_NOFOLLOW || 0) |
1554
+ Number(fs.constants.O_NONBLOCK || 0),
1464
1555
  );
1556
+ beforeDescriptorStat = fs.fstatSync(descriptor, { bigint: true });
1557
+ assertIndexStat(beforeDescriptorStat, "ArtifactStore index descriptor");
1465
1558
  if (
1466
1559
  !samePathHandle(beforePathStat, beforeDescriptorStat) ||
1467
- beforeDescriptorStat.size > EVOLUTION_ARTIFACT_MAX_INDEX_BYTES
1560
+ !sameIndexMutationMetadata(beforePathStat, beforeDescriptorStat)
1468
1561
  ) {
1469
1562
  throw artifactError(
1470
1563
  EVOLUTION_ARTIFACT_INTEGRITY_FAILED_CODE,
1471
1564
  "ArtifactStore index descriptor is replaced or oversized",
1472
1565
  );
1473
1566
  }
1474
- bytes = fs.readFileSync(descriptor);
1475
- afterDescriptorStat = fs.fstatSync(descriptor);
1567
+ bytes = readBoundedDescriptor(
1568
+ fs,
1569
+ descriptor,
1570
+ Number(beforeDescriptorStat.size),
1571
+ EVOLUTION_ARTIFACT_MAX_INDEX_BYTES,
1572
+ );
1573
+ afterDescriptorStat = fs.fstatSync(descriptor, { bigint: true });
1574
+ assertIndexStat(afterDescriptorStat, "ArtifactStore index descriptor");
1476
1575
  if (
1477
- !sameFileIdentity(beforeDescriptorStat, afterDescriptorStat) ||
1478
- bytes.length !== beforeDescriptorStat.size
1576
+ !sameIndexStat(beforeDescriptorStat, afterDescriptorStat) ||
1577
+ BigInt(bytes.length) !== beforeDescriptorStat.size
1479
1578
  ) {
1480
1579
  throw artifactError(
1481
1580
  EVOLUTION_ARTIFACT_INTEGRITY_FAILED_CODE,
@@ -1494,10 +1593,10 @@ function readTrustedIndexSnapshotWithIdentity(layout, samePathHandle) {
1494
1593
  }
1495
1594
  let afterPathStat;
1496
1595
  try {
1497
- afterPathStat = fs.lstatSync(layout.indexPath);
1498
- assertRegularSingleLink(afterPathStat, "ArtifactStore index");
1596
+ afterPathStat = fs.lstatSync(layout.indexPath, { bigint: true });
1597
+ assertIndexStat(afterPathStat, "ArtifactStore index");
1499
1598
  if (
1500
- !sameFileIdentity(beforePathStat, afterPathStat) ||
1599
+ !sameIndexStat(beforePathStat, afterPathStat) ||
1501
1600
  !samePhysicalIdentity(afterPathStat, layout.indexIdentity) ||
1502
1601
  !samePath(physicalRealpath(layout.indexPath), indexRealPath)
1503
1602
  ) {
@@ -2017,6 +2116,42 @@ export class EvolutionArtifactPorts {
2017
2116
  throw new TypeError("EvolutionArtifactPorts now must be a function");
2018
2117
  }
2019
2118
  this.#now = Object.freeze((...args) => now(...args));
2119
+ const layout = this.#store.layout;
2120
+ const directoryBoundary = deepFreeze({
2121
+ schema: "chainlesschain.evolution-artifact-store-directory-boundary/v1",
2122
+ artifactTenantId: this.#tenantId,
2123
+ audience: this.#audience,
2124
+ root: { path: layout.rootRealPath, identity: layout.rootIdentity },
2125
+ files: { path: layout.filesRealPath, identity: layout.filesIdentity },
2126
+ scope: "root-and-files-directories",
2127
+ indexLocation: layout.indexRealPath,
2128
+ indexFileIdentityVerified: false,
2129
+ indexContentsVerified: false,
2130
+ artifactInventoryVerified: false,
2131
+ independentVolumeIdentityVerified: false,
2132
+ fullPhysicalStorageGraphVerified: false,
2133
+ rootAuthorityVerified: false,
2134
+ generationProvenanceVerified: false,
2135
+ tenantWideIndexAuthorityVerified: false,
2136
+ grantsMutationOrPromotionAuthority: false,
2137
+ });
2138
+ const recheck = (...args) => {
2139
+ if (args.length)
2140
+ throw artifactError(
2141
+ EVOLUTION_ARTIFACT_INVALID_CODE,
2142
+ "artifact directory boundary takes no replacement context",
2143
+ );
2144
+ attestStoreDirectories(layout);
2145
+ return directoryBoundary;
2146
+ };
2147
+ recheck();
2148
+ ARTIFACT_STORE_DIRECTORY_BOUNDARIES.set(
2149
+ this,
2150
+ Object.freeze({
2151
+ descriptor: directoryBoundary,
2152
+ recheck: Object.freeze(recheck),
2153
+ }),
2154
+ );
2020
2155
  Object.freeze(this);
2021
2156
  }
2022
2157
 
@@ -2362,26 +2497,6 @@ export class EvolutionArtifactPorts {
2362
2497
  }
2363
2498
 
2364
2499
  #readStoredBytes(entry, normalizedEntry, expectedDigest) {
2365
- const expectedPath = path.resolve(
2366
- this.#store.layout.filesDir,
2367
- normalizedEntry.file,
2368
- );
2369
- return withEvolutionFileIdentity(fs, expectedPath, (samePathHandle) =>
2370
- this.#readStoredBytesWithIdentity(
2371
- entry,
2372
- normalizedEntry,
2373
- expectedDigest,
2374
- samePathHandle,
2375
- ),
2376
- );
2377
- }
2378
-
2379
- #readStoredBytesWithIdentity(
2380
- entry,
2381
- normalizedEntry,
2382
- expectedDigest,
2383
- samePathHandle,
2384
- ) {
2385
2500
  attestStoreDirectories(this.#store.layout);
2386
2501
  const expectedHex = expectedDigest.slice("sha256:".length);
2387
2502
  let storedPath;
@@ -2413,9 +2528,13 @@ export class EvolutionArtifactPorts {
2413
2528
  );
2414
2529
  }
2415
2530
 
2531
+ const readBounds = Object.freeze({
2532
+ expectedSize: normalizedEntry.size,
2533
+ maximumBytes: EVOLUTION_ARTIFACT_MAX_CANONICAL_BYTES,
2534
+ });
2416
2535
  let integrityBefore;
2417
2536
  try {
2418
- integrityBefore = this.#store.verifyIntegrity(entry);
2537
+ integrityBefore = this.#store.verifyIntegrity(entry, readBounds);
2419
2538
  } catch (cause) {
2420
2539
  throw artifactError(
2421
2540
  EVOLUTION_ARTIFACT_INTEGRITY_FAILED_CODE,
@@ -2425,53 +2544,13 @@ export class EvolutionArtifactPorts {
2425
2544
  }
2426
2545
  validateIntegrityResult(integrityBefore, expectedHex);
2427
2546
 
2428
- let rootRealPath;
2429
- let beforePathStat;
2430
- let targetRealPath;
2431
- let descriptor = null;
2432
- let beforeDescriptorStat;
2433
- let afterDescriptorStat;
2434
2547
  let bytes;
2435
2548
  try {
2436
- rootRealPath = physicalRealpath(filesRoot);
2437
- if (!samePath(rootRealPath, this.#store.layout.filesRealPath)) {
2438
- throw artifactError(
2439
- EVOLUTION_ARTIFACT_INTEGRITY_FAILED_CODE,
2440
- "ArtifactStore files root physical identity changed before byte read",
2441
- );
2442
- }
2443
- beforePathStat = fs.lstatSync(resolvedStoredPath);
2444
- assertRegularSingleLink(beforePathStat, "stored artifact path");
2445
- targetRealPath = physicalRealpath(resolvedStoredPath);
2446
- if (!isContained(rootRealPath, targetRealPath)) {
2447
- throw artifactError(
2448
- EVOLUTION_ARTIFACT_INTEGRITY_FAILED_CODE,
2449
- "stored artifact realpath escapes the captured files root",
2450
- );
2451
- }
2452
- descriptor = fs.openSync(
2549
+ bytes = readBoundedArtifactFile(
2453
2550
  resolvedStoredPath,
2454
- fs.constants.O_RDONLY | Number(fs.constants.O_NOFOLLOW || 0),
2455
- );
2456
- beforeDescriptorStat = fs.fstatSync(descriptor);
2457
- assertRegularSingleLink(
2458
- beforeDescriptorStat,
2459
- "stored artifact descriptor",
2551
+ readBounds.expectedSize,
2552
+ readBounds.maximumBytes,
2460
2553
  );
2461
- if (!samePathHandle(beforePathStat, beforeDescriptorStat)) {
2462
- throw artifactError(
2463
- EVOLUTION_ARTIFACT_INTEGRITY_FAILED_CODE,
2464
- "stored artifact pathname and descriptor identities differ",
2465
- );
2466
- }
2467
- bytes = fs.readFileSync(descriptor);
2468
- afterDescriptorStat = fs.fstatSync(descriptor);
2469
- if (!sameFileIdentity(beforeDescriptorStat, afterDescriptorStat)) {
2470
- throw artifactError(
2471
- EVOLUTION_ARTIFACT_INTEGRITY_FAILED_CODE,
2472
- "stored artifact changed while it was read",
2473
- );
2474
- }
2475
2554
  } catch (cause) {
2476
2555
  if (isEvolutionArtifactPortError(cause)) throw cause;
2477
2556
  throw artifactError(
@@ -2479,33 +2558,6 @@ export class EvolutionArtifactPorts {
2479
2558
  "stored artifact could not be opened safely",
2480
2559
  { cause },
2481
2560
  );
2482
- } finally {
2483
- if (descriptor !== null) fs.closeSync(descriptor);
2484
- }
2485
- let afterPathStat;
2486
- try {
2487
- afterPathStat = fs.lstatSync(resolvedStoredPath);
2488
- assertRegularSingleLink(afterPathStat, "stored artifact path");
2489
- if (!sameFileIdentity(beforePathStat, afterPathStat)) {
2490
- throw artifactError(
2491
- EVOLUTION_ARTIFACT_INTEGRITY_FAILED_CODE,
2492
- "stored artifact pathname changed during readback",
2493
- );
2494
- }
2495
- const afterRealPath = physicalRealpath(resolvedStoredPath);
2496
- if (!samePath(targetRealPath, afterRealPath)) {
2497
- throw artifactError(
2498
- EVOLUTION_ARTIFACT_INTEGRITY_FAILED_CODE,
2499
- "stored artifact realpath changed during readback",
2500
- );
2501
- }
2502
- } catch (cause) {
2503
- if (isEvolutionArtifactPortError(cause)) throw cause;
2504
- throw artifactError(
2505
- EVOLUTION_ARTIFACT_INTEGRITY_FAILED_CODE,
2506
- "stored artifact could not be re-attested",
2507
- { cause },
2508
- );
2509
2561
  }
2510
2562
  if (
2511
2563
  bytes.length !== normalizedEntry.size ||
@@ -2518,7 +2570,7 @@ export class EvolutionArtifactPorts {
2518
2570
  }
2519
2571
  let integrityAfter;
2520
2572
  try {
2521
- integrityAfter = this.#store.verifyIntegrity(entry);
2573
+ integrityAfter = this.#store.verifyIntegrity(entry, readBounds);
2522
2574
  } catch (cause) {
2523
2575
  throw artifactError(
2524
2576
  EVOLUTION_ARTIFACT_INTEGRITY_FAILED_CODE,
@@ -3617,4 +3669,32 @@ export function captureEvolutionLedgerArtifactResolverBinding(value) {
3617
3669
  return binding;
3618
3670
  }
3619
3671
 
3672
+ /** Original root/files directory capture only; never an installer or tenant grant. */
3673
+ export function captureEvolutionArtifactStoreDirectoryBoundary(value) {
3674
+ if (arguments.length !== 1)
3675
+ throw new TypeError(
3676
+ "artifact directory boundary capture takes exactly one original ports object",
3677
+ );
3678
+ rejectProxy(value, "EvolutionArtifactPorts directory boundary");
3679
+ if (
3680
+ !value ||
3681
+ Object.getPrototypeOf(value) !== EvolutionArtifactPorts.prototype ||
3682
+ !hasStablePrototype(
3683
+ value,
3684
+ EvolutionArtifactPorts.prototype,
3685
+ "EvolutionArtifactPorts directory boundary",
3686
+ )
3687
+ )
3688
+ throw new TypeError(
3689
+ "a genuine EvolutionArtifactPorts directory boundary is required",
3690
+ );
3691
+ const boundary = ARTIFACT_STORE_DIRECTORY_BOUNDARIES.get(value);
3692
+ if (!boundary)
3693
+ throw new TypeError(
3694
+ "a genuine EvolutionArtifactPorts directory boundary is required",
3695
+ );
3696
+ boundary.recheck();
3697
+ return boundary;
3698
+ }
3699
+
3620
3700
  Object.freeze(EvolutionArtifactPorts.prototype);
@@ -3230,6 +3230,31 @@ export function createRrsiHistoryLedgerAdapter(input) {
3230
3230
  artifactPorts: options.artifactPorts,
3231
3231
  ledgerArtifactResolver: options.ledgerArtifactResolver,
3232
3232
  resolveCampaignRoot: adapter.resolveCampaignRoot,
3233
+ resolvePreparation(executionId) {
3234
+ rrsiId(executionId, "preparation execution ID");
3235
+ return withHistoryLock(() => {
3236
+ const { state } = load();
3237
+ const entry = state.reservations.get(executionId);
3238
+ if (!entry || !isRrsiPreparationReservation(entry.reservation))
3239
+ rrsiFail("preparation execution is not registered");
3240
+ const operation = [...state.operations.values()].find(
3241
+ (value) =>
3242
+ value.record.kind === "reserve-preparation" &&
3243
+ value.record.payload.executionId === executionId,
3244
+ );
3245
+ if (!operation) rrsiFail("preparation registration is missing");
3246
+ return freezeRrsiData({
3247
+ descriptor,
3248
+ identity: state.identity,
3249
+ reservation: entry.reservation,
3250
+ registrationRecord: historyRegistrationRecord(operation),
3251
+ status: entry.status,
3252
+ dispatched: entry.dispatched,
3253
+ historyAuthenticated: true,
3254
+ sourceDerivationVerified: false,
3255
+ });
3256
+ });
3257
+ },
3233
3258
  resolveNativeBatch: adapter.resolveNativeBatch,
3234
3259
  resolveNativeStatisticsScope: adapter.resolveNativeStatisticsScope,
3235
3260
  assertNativeFreshChild(response, expectedBindings) {