@graphrefly/graphrefly 0.43.0 → 0.44.0

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 (279) hide show
  1. package/dist/{cascading-CH-_VwG9.d.cts → cascading-BglDkMdX.d.cts} +2 -2
  2. package/dist/{cascading-OgKQZjsa.d.ts → cascading-MFgxu7Yo.d.ts} +2 -2
  3. package/dist/{chunk-KVV66NN2.js → chunk-2T7U5EU6.js} +1 -1
  4. package/dist/chunk-5M4CCMMD.js +45 -0
  5. package/dist/{chunk-I7IGYPSL.js → chunk-5XJ6B66J.js} +1 -1
  6. package/dist/{chunk-OFZG3TB3.js → chunk-6X7AFUJV.js} +1 -1
  7. package/dist/{chunk-EBW4V6JN.js → chunk-7K6PWTDQ.js} +1 -1
  8. package/dist/{chunk-D27JNOLZ.js → chunk-7LIAPXJB.js} +1 -1
  9. package/dist/{chunk-CLD3F4R5.js → chunk-7WPU3UHQ.js} +1 -1
  10. package/dist/{chunk-NNKJUORL.js → chunk-A5WCQ5NO.js} +1 -1
  11. package/dist/chunk-APPIWSGD.js +84 -0
  12. package/dist/{chunk-TZQPPQEQ.js → chunk-BEZWM2SY.js} +1 -1
  13. package/dist/{chunk-K2Q24F5T.js → chunk-CB676TKJ.js} +1 -1
  14. package/dist/{chunk-SUWT3ZON.js → chunk-CE6TI2TL.js} +1 -1
  15. package/dist/{chunk-VOPGGIL7.js → chunk-CLVB32RD.js} +1 -1
  16. package/dist/{chunk-V5A7M7RJ.js → chunk-CRVT7D2P.js} +1 -1
  17. package/dist/chunk-D7GPHKFH.js +1 -0
  18. package/dist/{chunk-OCKEEPRJ.js → chunk-DHRX7JX4.js} +1 -1
  19. package/dist/chunk-FZMYDOWV.js +1 -0
  20. package/dist/{chunk-35JTVPOX.js → chunk-GHBWHMRZ.js} +1 -1
  21. package/dist/{chunk-KGKJCHEK.js → chunk-GLERH466.js} +1 -1
  22. package/dist/{chunk-TPKQW72B.js → chunk-HIDYF36O.js} +1 -1
  23. package/dist/chunk-HITNVN6B.js +3 -0
  24. package/dist/{chunk-P6C4WHZO.js → chunk-HY4DJBA7.js} +1 -1
  25. package/dist/chunk-KZIEYVXN.js +1 -0
  26. package/dist/{chunk-O2BLLH7M.js → chunk-N4MQX6JU.js} +1 -1
  27. package/dist/{chunk-4YAN45KM.js → chunk-N7FHEL4D.js} +1 -1
  28. package/dist/chunk-NTEURFZH.js +1 -0
  29. package/dist/{chunk-OYJKFY7V.js → chunk-OIVP6KFV.js} +1 -1
  30. package/dist/{chunk-Q4U3A3L5.js → chunk-OPHBU3LG.js} +1 -1
  31. package/dist/{chunk-PT7W5FCD.js → chunk-OYQOZP2F.js} +1 -1
  32. package/dist/{chunk-6HOSXQKF.js → chunk-PTZK576G.js} +1 -1
  33. package/dist/{chunk-S3EEIPO7.js → chunk-ST7UXLWR.js} +1 -1
  34. package/dist/chunk-SVY7VUYU.js +1 -0
  35. package/dist/{chunk-QYVXF7GW.js → chunk-TK3NWWD4.js} +1 -1
  36. package/dist/chunk-UNGSTR4X.js +61 -0
  37. package/dist/{chunk-VQ4A6T2A.js → chunk-VV4N5P64.js} +1 -1
  38. package/dist/{chunk-FDQGFWLF.js → chunk-W3I423PS.js} +1 -1
  39. package/dist/{chunk-XG62INFA.js → chunk-WJR24TAG.js} +1 -1
  40. package/dist/{chunk-F3IGTWCQ.js → chunk-XTGKMHSW.js} +1 -1
  41. package/dist/{chunk-JQFH2DV6.js → chunk-YBB7ZGTY.js} +1 -1
  42. package/dist/{chunk-CUNIRONA.js → chunk-Z4NPUARF.js} +1 -1
  43. package/dist/{chunk-KRH66M4O.js → chunk-ZGNQRPDT.js} +1 -1
  44. package/dist/{chunk-JNWRYDJN.js → chunk-ZKPSFFKU.js} +1 -1
  45. package/dist/{chunk-FG4TKHMC.js → chunk-ZLV5SQSX.js} +1 -1
  46. package/dist/compat/index.cjs +5 -5
  47. package/dist/compat/index.d.cts +16 -16
  48. package/dist/compat/index.d.ts +16 -16
  49. package/dist/compat/index.js +1 -1
  50. package/dist/compat/jotai/index.cjs +1 -1
  51. package/dist/compat/jotai/index.d.cts +2 -2
  52. package/dist/compat/jotai/index.d.ts +2 -2
  53. package/dist/compat/jotai/index.js +1 -1
  54. package/dist/compat/nanostores/index.cjs +1 -1
  55. package/dist/compat/nanostores/index.d.cts +2 -2
  56. package/dist/compat/nanostores/index.d.ts +2 -2
  57. package/dist/compat/nanostores/index.js +1 -1
  58. package/dist/compat/nestjs/index.cjs +5 -5
  59. package/dist/compat/nestjs/index.d.cts +8 -8
  60. package/dist/compat/nestjs/index.d.ts +8 -8
  61. package/dist/compat/nestjs/index.js +1 -1
  62. package/dist/compat/react/index.d.cts +2 -2
  63. package/dist/compat/react/index.d.ts +2 -2
  64. package/dist/compat/solid/index.d.cts +2 -2
  65. package/dist/compat/solid/index.d.ts +2 -2
  66. package/dist/compat/svelte/index.d.cts +2 -2
  67. package/dist/compat/svelte/index.d.ts +2 -2
  68. package/dist/compat/vue/index.d.cts +2 -2
  69. package/dist/compat/vue/index.d.ts +2 -2
  70. package/dist/compat/zustand/index.cjs +3 -3
  71. package/dist/compat/zustand/index.d.cts +4 -4
  72. package/dist/compat/zustand/index.d.ts +4 -4
  73. package/dist/compat/zustand/index.js +1 -1
  74. package/dist/core/index.cjs +1 -1
  75. package/dist/core/index.d.cts +3 -4
  76. package/dist/core/index.d.ts +3 -4
  77. package/dist/core/index.js +1 -1
  78. package/dist/{decay-CdEBmDIs.d.ts → decay-BvOWTZ00.d.ts} +2 -2
  79. package/dist/{decay-2ZukgQ4o.d.cts → decay-CFlLvXUT.d.cts} +2 -2
  80. package/dist/extra/browser.cjs +1 -1
  81. package/dist/extra/browser.d.cts +1 -1
  82. package/dist/extra/browser.d.ts +1 -1
  83. package/dist/extra/browser.js +1 -1
  84. package/dist/extra/index.cjs +15 -15
  85. package/dist/extra/index.d.cts +10 -10
  86. package/dist/extra/index.d.ts +10 -10
  87. package/dist/extra/index.js +1 -1
  88. package/dist/extra/node.cjs +2 -2
  89. package/dist/extra/node.d.cts +1 -1
  90. package/dist/extra/node.d.ts +1 -1
  91. package/dist/extra/node.js +1 -1
  92. package/dist/extra/operators.cjs +1 -1
  93. package/dist/extra/operators.d.cts +9 -1
  94. package/dist/extra/operators.d.ts +9 -1
  95. package/dist/extra/operators.js +1 -1
  96. package/dist/extra/reactive.cjs +1 -1
  97. package/dist/extra/reactive.d.cts +3 -3
  98. package/dist/extra/reactive.d.ts +3 -3
  99. package/dist/extra/reactive.js +1 -1
  100. package/dist/extra/render/index.d.cts +3 -3
  101. package/dist/extra/render/index.d.ts +3 -3
  102. package/dist/extra/sources.cjs +3 -3
  103. package/dist/extra/sources.d.cts +1 -1
  104. package/dist/extra/sources.d.ts +1 -1
  105. package/dist/extra/sources.js +1 -1
  106. package/dist/extra/storage-browser.cjs +1 -1
  107. package/dist/extra/storage-browser.d.cts +1 -1
  108. package/dist/extra/storage-browser.d.ts +1 -1
  109. package/dist/extra/storage-browser.js +1 -1
  110. package/dist/{fallback-Ctlj2tMY.d.cts → fallback-74oxi34l.d.cts} +1 -1
  111. package/dist/{fallback-CqYVLL6X.d.ts → fallback-DUyyBTBK.d.ts} +1 -1
  112. package/dist/graph/index.cjs +7 -7
  113. package/dist/graph/index.d.cts +5 -5
  114. package/dist/graph/index.d.ts +5 -5
  115. package/dist/graph/index.js +1 -1
  116. package/dist/{graph-C4SHb3Ly.d.cts → graph-CWvEUQAq.d.cts} +196 -3
  117. package/dist/{graph-7VguS7a4.d.ts → graph-D9LFnda9.d.ts} +196 -3
  118. package/dist/{index-O7fucFrU.d.cts → index-5k1T6jl0.d.cts} +9 -9
  119. package/dist/{index-DyR7eU5S.d.cts → index-9770hRuQ.d.cts} +4 -4
  120. package/dist/{index-COD1kVoS.d.cts → index-B-_tFaqV.d.cts} +4 -4
  121. package/dist/{index-CLon-IWF.d.cts → index-B17QddL1.d.cts} +4 -4
  122. package/dist/{index-B-i4_g3k.d.ts → index-B1F8Enjf.d.ts} +61 -8
  123. package/dist/{index-DBevwHj_.d.ts → index-B5S8ULbU.d.ts} +3 -3
  124. package/dist/{index-Dgs8zcj7.d.ts → index-B8YnZpIR.d.ts} +2 -2
  125. package/dist/{index-DSZ3ZCHF.d.ts → index-BHskSB8v.d.ts} +28 -17
  126. package/dist/{index-CDXc9zKM.d.cts → index-BIYAkbAi.d.cts} +1 -1
  127. package/dist/{index-C9kSENB4.d.cts → index-BQSKmbuG.d.cts} +1 -1
  128. package/dist/{index-tJoTcnHh.d.cts → index-BaQaY_IQ.d.cts} +2 -2
  129. package/dist/{index-CJK1JkYy.d.ts → index-BmZXHqkE.d.ts} +1 -1
  130. package/dist/{index-K0_0eR8g.d.ts → index-BoJ5JHxI.d.ts} +3 -3
  131. package/dist/{index-JZUPJIJy.d.ts → index-BocU7pqs.d.ts} +4 -4
  132. package/dist/{index-ChOyVLKm.d.cts → index-BrPrLl4e.d.cts} +1 -1
  133. package/dist/{index-BiX1Nkgx.d.cts → index-BxNs2HB9.d.cts} +22 -8
  134. package/dist/{index-Bf7eqeSF.d.ts → index-Byu-OpX_.d.ts} +2 -2
  135. package/dist/{index-BoLv_OfD.d.cts → index-C1T3d7V-.d.cts} +61 -8
  136. package/dist/{index-BTQtTb_H.d.cts → index-C5ri2Axc.d.cts} +3 -3
  137. package/dist/{index-z96luz5O.d.cts → index-C5stwKcw.d.cts} +1 -1
  138. package/dist/{index-D4Y1cMG0.d.ts → index-C9l6OEBL.d.ts} +1 -1
  139. package/dist/{index-CCq87F7t.d.ts → index-CBBLl_rc.d.ts} +1 -1
  140. package/dist/{index-cm1GNcWE.d.ts → index-CBGUK09R.d.ts} +4 -4
  141. package/dist/{index-0rKFCVFp.d.cts → index-CC-AvFTy.d.cts} +3 -3
  142. package/dist/{index-C59mYFKp.d.ts → index-CJF1URuX.d.ts} +9 -9
  143. package/dist/{index-BJX94aud.d.cts → index-CK29LV56.d.cts} +1 -1
  144. package/dist/{index-BP8a88zx.d.ts → index-CMh5Rz1y.d.ts} +4 -4
  145. package/dist/{index-CvrqGfNS.d.ts → index-CPQlGA29.d.ts} +1 -1
  146. package/dist/{index-D-AEQVLo.d.ts → index-CR8QpwX8.d.ts} +49 -24
  147. package/dist/{index-Du7u1lSf.d.cts → index-CS0LTlB8.d.cts} +4 -4
  148. package/dist/{index-Bc41FuHp.d.cts → index-CSOmP7xT.d.cts} +2 -2
  149. package/dist/{index-BsT7F2et.d.ts → index-CYq8vAyV.d.ts} +2 -2
  150. package/dist/{index-CPT7C_f1.d.ts → index-CZ3r5Rxp.d.ts} +4 -4
  151. package/dist/{index-BojK2fwH.d.cts → index-CasX6Pfq.d.cts} +68 -9
  152. package/dist/{index-BG0BN3PB.d.ts → index-CdAlHFEt.d.ts} +1 -1
  153. package/dist/{index-wAzD9yVj.d.ts → index-CdTelp1M.d.ts} +8 -4
  154. package/dist/{index-CQG3D1cp.d.ts → index-CeFiHtAg.d.ts} +4 -4
  155. package/dist/{index-RV_yDjOX.d.cts → index-Cj3WohTd.d.cts} +8 -4
  156. package/dist/{index-BAOD98JD.d.cts → index-Climxqsu.d.cts} +4 -4
  157. package/dist/{index-O16yXPK4.d.cts → index-Co7uli2l.d.cts} +28 -17
  158. package/dist/{index-DIOoAZUX.d.ts → index-CviRnE4K.d.ts} +1 -1
  159. package/dist/{index-Dhc7a7Xo.d.cts → index-Cwv0KWcU.d.cts} +2 -2
  160. package/dist/{index-Dn-wI9g4.d.ts → index-CzLVrjxn.d.ts} +2 -2
  161. package/dist/{index-C9pjcz3l.d.cts → index-D0aciIex.d.cts} +3 -3
  162. package/dist/{index-DwigL4lY.d.ts → index-DHen9Klo.d.ts} +22 -8
  163. package/dist/{index-BwLvVVsy.d.cts → index-DV_1YuVk.d.cts} +40 -8
  164. package/dist/{index-BdGtBX-X.d.cts → index-Dc4AYqrJ.d.cts} +3 -3
  165. package/dist/{index-Dmqp7KjD.d.ts → index-Dgl1HpPn.d.ts} +1 -1
  166. package/dist/{index-CAC_rNzm.d.ts → index-DisjX8a-.d.ts} +40 -8
  167. package/dist/{index-B5iz82A3.d.cts → index-UPSiS-X7.d.cts} +49 -24
  168. package/dist/{index-CZQXo5tH.d.ts → index-Yq60JP3s.d.ts} +3 -3
  169. package/dist/{index-f5IivDUX.d.cts → index-ZVQhLa2i.d.cts} +1 -1
  170. package/dist/{index-hHcaFlJX.d.cts → index-_6ODbuOu.d.cts} +1 -1
  171. package/dist/{index-BVpm6noz.d.cts → index-hcDJ8PSI.d.cts} +1 -1
  172. package/dist/{index-DBHK8O6H.d.ts → index-nozs3fFC.d.ts} +3 -3
  173. package/dist/{index-Dh_HJ82K.d.ts → index-p09KSrTN.d.ts} +68 -9
  174. package/dist/{index-C7O6r5fV.d.ts → index-sqkqlb1p.d.ts} +1 -1
  175. package/dist/{index-CZjOhcBy.d.cts → index-tRCxuAXF.d.cts} +2 -2
  176. package/dist/index.cjs +48 -48
  177. package/dist/index.d.cts +42 -43
  178. package/dist/index.d.ts +42 -43
  179. package/dist/index.js +1 -1
  180. package/dist/{node-ClS5yC-B.d.cts → node-kK3CvTrR.d.cts} +1 -1
  181. package/dist/{node-ClS5yC-B.d.ts → node-kK3CvTrR.d.ts} +1 -1
  182. package/dist/{observable-BsBzUrcI.d.ts → observable-DWjNfLvC.d.ts} +1 -1
  183. package/dist/{observable-DLGPPtb8.d.cts → observable-e3eiPPFy.d.cts} +1 -1
  184. package/dist/patterns/ai/browser.cjs +5 -5
  185. package/dist/patterns/ai/browser.d.cts +4 -4
  186. package/dist/patterns/ai/browser.d.ts +4 -4
  187. package/dist/patterns/ai/browser.js +1 -1
  188. package/dist/patterns/ai/index.cjs +16 -16
  189. package/dist/patterns/ai/index.d.cts +16 -17
  190. package/dist/patterns/ai/index.d.ts +16 -17
  191. package/dist/patterns/ai/index.js +1 -1
  192. package/dist/patterns/ai/node.cjs +1 -1
  193. package/dist/patterns/ai/node.d.cts +4 -4
  194. package/dist/patterns/ai/node.d.ts +4 -4
  195. package/dist/patterns/ai/node.js +1 -1
  196. package/dist/patterns/cqrs/index.cjs +3 -3
  197. package/dist/patterns/cqrs/index.d.cts +6 -6
  198. package/dist/patterns/cqrs/index.d.ts +6 -6
  199. package/dist/patterns/cqrs/index.js +1 -1
  200. package/dist/patterns/demo-shell/index.cjs +5 -5
  201. package/dist/patterns/demo-shell/index.d.cts +5 -5
  202. package/dist/patterns/demo-shell/index.d.ts +5 -5
  203. package/dist/patterns/demo-shell/index.js +1 -1
  204. package/dist/patterns/domain-templates/index.cjs +3 -3
  205. package/dist/patterns/domain-templates/index.d.cts +4 -4
  206. package/dist/patterns/domain-templates/index.d.ts +4 -4
  207. package/dist/patterns/domain-templates/index.js +1 -1
  208. package/dist/patterns/graphspec/index.cjs +16 -16
  209. package/dist/patterns/graphspec/index.d.cts +5 -5
  210. package/dist/patterns/graphspec/index.d.ts +5 -5
  211. package/dist/patterns/graphspec/index.js +1 -1
  212. package/dist/patterns/harness/index.cjs +9 -9
  213. package/dist/patterns/harness/index.d.cts +10 -11
  214. package/dist/patterns/harness/index.d.ts +10 -11
  215. package/dist/patterns/harness/index.js +1 -1
  216. package/dist/patterns/inspect/index.cjs +3 -3
  217. package/dist/patterns/inspect/index.d.cts +7 -7
  218. package/dist/patterns/inspect/index.d.ts +7 -7
  219. package/dist/patterns/inspect/index.js +1 -1
  220. package/dist/patterns/job-queue/index.cjs +3 -3
  221. package/dist/patterns/job-queue/index.d.cts +6 -6
  222. package/dist/patterns/job-queue/index.d.ts +6 -6
  223. package/dist/patterns/job-queue/index.js +1 -1
  224. package/dist/patterns/memory/index.cjs +3 -3
  225. package/dist/patterns/memory/index.d.cts +6 -6
  226. package/dist/patterns/memory/index.d.ts +6 -6
  227. package/dist/patterns/memory/index.js +1 -1
  228. package/dist/patterns/messaging/index.cjs +3 -3
  229. package/dist/patterns/messaging/index.d.cts +5 -5
  230. package/dist/patterns/messaging/index.d.ts +5 -5
  231. package/dist/patterns/messaging/index.js +1 -1
  232. package/dist/patterns/orchestration/index.cjs +3 -3
  233. package/dist/patterns/orchestration/index.d.cts +6 -7
  234. package/dist/patterns/orchestration/index.d.ts +6 -7
  235. package/dist/patterns/orchestration/index.js +1 -1
  236. package/dist/patterns/process/index.cjs +3 -1
  237. package/dist/patterns/process/index.d.cts +7 -7
  238. package/dist/patterns/process/index.d.ts +7 -7
  239. package/dist/patterns/process/index.js +1 -1
  240. package/dist/patterns/reactive-layout/index.cjs +4 -4
  241. package/dist/patterns/reactive-layout/index.d.cts +5 -5
  242. package/dist/patterns/reactive-layout/index.d.ts +5 -5
  243. package/dist/patterns/reactive-layout/index.js +1 -1
  244. package/dist/patterns/reduction/index.cjs +3 -3
  245. package/dist/patterns/reduction/index.d.cts +4 -4
  246. package/dist/patterns/reduction/index.d.ts +4 -4
  247. package/dist/patterns/reduction/index.js +1 -1
  248. package/dist/patterns/surface/index.cjs +10 -10
  249. package/dist/patterns/surface/index.d.cts +6 -6
  250. package/dist/patterns/surface/index.d.ts +6 -6
  251. package/dist/patterns/surface/index.js +1 -1
  252. package/dist/{pipeline-graph-DPqKDk59.d.cts → pipeline-graph-CIKhynsF.d.cts} +11 -6
  253. package/dist/{pipeline-graph-loP57TBA.d.ts → pipeline-graph-Sgj0gCwn.d.ts} +11 -6
  254. package/dist/{reactive-layout-v7KPvxoc.d.ts → reactive-layout-DOTs9P3X.d.ts} +2 -2
  255. package/dist/{reactive-layout-Dsvob4zD.d.cts → reactive-layout-DgctbqZo.d.cts} +2 -2
  256. package/dist/{reactive-log-BezYsbA_.d.ts → reactive-log-BKALbfal.d.ts} +1 -1
  257. package/dist/{reactive-log-B00laMSQ.d.cts → reactive-log-DIGdYqQ6.d.cts} +1 -1
  258. package/dist/{reactive-map-48mnZ-nu.d.cts → reactive-map-CEFGp8TK.d.cts} +1 -1
  259. package/dist/{reactive-map-BVVPdvmi.d.ts → reactive-map-DS_SIAxv.d.ts} +1 -1
  260. package/dist/resilience-6LYQJAC5.js +1 -0
  261. package/dist/{sugar-DLwvMr3F.d.ts → sugar-DQjFmVqb.d.cts} +178 -2
  262. package/dist/{sugar-DyVGtczU.d.cts → sugar-fhLIE7TT.d.ts} +178 -2
  263. package/dist/{topology-tree-BSdfSwMi.d.cts → topology-tree-Bcz27hpF.d.cts} +1 -1
  264. package/dist/{topology-tree-BNGvuG82.d.ts → topology-tree-xvaD0fOX.d.ts} +1 -1
  265. package/dist/{types-B1jDWVsM.d.cts → types-C0_yquda.d.cts} +1 -1
  266. package/dist/{types-DkzUUs0H.d.ts → types-CWFysE9E.d.ts} +1 -1
  267. package/package.json +1 -1
  268. package/dist/chunk-3XDYJRYU.js +0 -1
  269. package/dist/chunk-4I45FVQS.js +0 -1
  270. package/dist/chunk-626TESAC.js +0 -3
  271. package/dist/chunk-INQD2KRQ.js +0 -1
  272. package/dist/chunk-LYCLF26R.js +0 -1
  273. package/dist/chunk-NON4NLIC.js +0 -45
  274. package/dist/chunk-QE4IGY7I.js +0 -61
  275. package/dist/chunk-VNC3TMVY.js +0 -1
  276. package/dist/chunk-Y4NI3X7O.js +0 -84
  277. package/dist/meta-BgVAsg9j.d.ts +0 -102
  278. package/dist/meta-vE8bxW1E.d.cts +0 -102
  279. package/dist/resilience-YIWPK4YC.js +0 -1
@@ -1,5 +1,5 @@
1
- import { A as Actor, n as GraphReFlyConfig, V as VersioningLevel, N as Node, M as Messages, K as NodeSink } from './node-ClS5yC-B.cjs';
2
- import { D as DescribeNodeOutput, a as DescribeDetail, b as DescribeField } from './meta-vE8bxW1E.cjs';
1
+ import { A as Actor, l as GraphReFlyConfig, V as VersioningLevel, N as Node, M as Messages, K as NodeSink } from './node-kK3CvTrR.cjs';
2
+ import { D as DescribeNodeOutput, a as DerivedFn, E as EffectFn, c as DescribeDetail, d as DescribeField } from './sugar-DQjFmVqb.cjs';
3
3
  import { StorageHandle } from './extra/storage-core.cjs';
4
4
  import { SnapshotStorageTier } from './extra/storage-tiers.cjs';
5
5
 
@@ -334,6 +334,73 @@ interface GraphOptions {
334
334
  factoryArgs?: unknown;
335
335
  [key: string]: unknown;
336
336
  }
337
+ /**
338
+ * Options for {@link Graph.derived}. Forwarded to the underlying
339
+ * {@link derived} primitive plus graph-level extras.
340
+ *
341
+ * - `keepAlive: true` — installs an internal subscription so the node
342
+ * stays activated and `.cache` stays current for **external consumers**
343
+ * (UI render, debug snapshot, audit log) with no real subscriber. The
344
+ * subscription self-prunes on the node's terminal (`COMPLETE` / `ERROR`
345
+ * / `TEARDOWN`) and is also drained by {@link Graph.destroy}, so
346
+ * repeated `graph.remove(name)` cycles do not accumulate stale
347
+ * disposers.
348
+ *
349
+ * **Do not read `node.cache` from inside another reactive fn** (spec
350
+ * §5.12) — declare the node as a real dep instead. `keepAlive` is a
351
+ * convenience for *external* read patterns, not a shortcut around the
352
+ * message protocol.
353
+ * - `signal` — when aborted, removes this node from the graph via
354
+ * {@link Graph.remove}, which sends `[[TEARDOWN]]` and drains cleanup
355
+ * hooks. Already-aborted signals trigger removal synchronously.
356
+ * - `equals`, `initial`, `meta` — pass-through to {@link NodeOptions}.
357
+ * - `annotation` — forwarded to {@link Graph.add} (see `graph.trace`).
358
+ */
359
+ interface GraphDerivedOptions<T> {
360
+ equals?: (a: T, b: T) => boolean;
361
+ initial?: T | null;
362
+ keepAlive?: boolean;
363
+ signal?: AbortSignal;
364
+ meta?: Record<string, unknown>;
365
+ annotation?: string;
366
+ }
367
+ /**
368
+ * Options for {@link Graph.effect}.
369
+ *
370
+ * - `signal` — when aborted, removes this node from the graph via
371
+ * {@link Graph.remove} (fires the effect's `deactivate` cleanup).
372
+ * - `meta` / `annotation` — same forwarding shape as
373
+ * {@link GraphDerivedOptions}.
374
+ */
375
+ interface GraphEffectOptions {
376
+ signal?: AbortSignal;
377
+ meta?: Record<string, unknown>;
378
+ annotation?: string;
379
+ }
380
+ /**
381
+ * Options for {@link Graph.produce}.
382
+ *
383
+ * - `signal` — forwarded to the underlying {@link fromAny} for in-flight
384
+ * cancellation of `Promise` / `AsyncIterable` sources, AND triggers
385
+ * {@link Graph.remove} when aborted so the graph topology reflects the
386
+ * cancellation.
387
+ * - `equals` / `meta` / `annotation` — same forwarding shape as
388
+ * {@link GraphDerivedOptions}.
389
+ */
390
+ interface GraphProduceOptions<T> {
391
+ equals?: (a: T, b: T) => boolean;
392
+ signal?: AbortSignal;
393
+ meta?: Record<string, unknown>;
394
+ annotation?: string;
395
+ }
396
+ /**
397
+ * Source shapes accepted by {@link Graph.produce}. Excludes `Node<T>` —
398
+ * Node→Node passthrough is rejected at the boundary because `fromAny`
399
+ * passes Nodes through verbatim, which would silently drop `meta`/`equals`
400
+ * options and bypass the `add()` registration's name semantics. For
401
+ * Node→Node, use {@link Graph.derived} with `keepAlive: true` instead.
402
+ */
403
+ type GraphProduceInput<T> = PromiseLike<T> | AsyncIterable<T> | Iterable<T> | T;
337
404
  /** Filter for {@link Graph.describe} — object-style partial match or predicate. */
338
405
  type DescribeFilter = Partial<Pick<DescribeNodeOutput, "type" | "status">> | {
339
406
  type?: DescribeNodeOutput["type"];
@@ -1035,6 +1102,115 @@ declare class Graph {
1035
1102
  * TEARDOWN and unregisters the node).
1036
1103
  */
1037
1104
  complete(name: string, options?: GraphActorOptions): void;
1105
+ /**
1106
+ * Internal: register a self-pruning keepalive subscription. The sink
1107
+ * watches for terminal messages (`COMPLETE`/`ERROR`/`TEARDOWN`) on `n`
1108
+ * and removes the disposer from `_disposers` when one arrives, so
1109
+ * repeated `graph.remove(name)` cycles do not accumulate stale
1110
+ * disposers (qa B3).
1111
+ */
1112
+ private _registerSelfPruningKeepalive;
1113
+ /**
1114
+ * Internal: wire an `AbortSignal` so its abort triggers
1115
+ * `graph.remove(name)`. Already-aborted signals trigger removal
1116
+ * synchronously. The abort listener is itself registered as a graph
1117
+ * disposer so it gets cleaned up if `destroy()` runs first (qa B4).
1118
+ */
1119
+ private _wireSignalToRemove;
1120
+ /**
1121
+ * Path-based reactive derivation. Resolves each entry in `depPaths` via
1122
+ * {@link Graph.resolve}, builds a {@link derived} node, registers it via
1123
+ * {@link Graph.add}, and returns the registered Node.
1124
+ *
1125
+ * **First-run gate inherited.** fn does not fire until every dep has
1126
+ * delivered at least one real DATA — same gate as `derived()` (spec §2.7,
1127
+ * `partial: false`). A SENTINEL dep holds activation; `null` is a real
1128
+ * DATA value and releases the gate. **Empty `depPaths` is a vacuous
1129
+ * gate** — fn fires once synchronously on first activation. Use this
1130
+ * for one-shot constants only; for async sources prefer
1131
+ * {@link Graph.produce}.
1132
+ *
1133
+ * **`keepAlive: true`** — installs an internal subscription so the node
1134
+ * stays activated and `.cache` stays current for **external consumers**
1135
+ * (UI render, debug snapshot, audit log). The subscription self-prunes
1136
+ * on the node's terminal and is also drained by {@link Graph.destroy}.
1137
+ *
1138
+ * **Do not read `node.cache` from inside another reactive fn** — that
1139
+ * is a §5.12 boundary violation regardless of `keepAlive`. Declare the
1140
+ * node as a real dep instead so the edge appears in `describe()` and
1141
+ * the message protocol carries the value.
1142
+ *
1143
+ * **`signal`** — when aborted, removes this node from the graph.
1144
+ *
1145
+ * @param name - Local registration name (must be unique on this graph).
1146
+ * @param depPaths - `::`-qualified paths resolved at construction time.
1147
+ * @param fn - Pure compute receiving sugar-unwrapped scalar dep values.
1148
+ * @param opts - {@link GraphDerivedOptions}.
1149
+ * @returns The registered `Node<T>`.
1150
+ */
1151
+ derived<T>(name: string, depPaths: readonly string[], fn: DerivedFn<T>, opts?: GraphDerivedOptions<T>): Node<T>;
1152
+ /**
1153
+ * Path-based managed side effect. Resolves each entry in `depPaths`,
1154
+ * builds an {@link effect} node, registers it, and returns the
1155
+ * registered Node. fn does not auto-emit — call `actions.emit(v)` /
1156
+ * `actions.down(msgs)` explicitly to produce downstream messages.
1157
+ *
1158
+ * **Cleanup.** Return a cleanup function (`() => void`) or granular
1159
+ * hooks (`{ beforeRun?, deactivate?, invalidate? }`) — fired on the
1160
+ * matching transition by the underlying primitive (see
1161
+ * {@link NodeFnCleanup}). Graph teardown propagates `[[TEARDOWN]]`
1162
+ * which triggers `deactivate`.
1163
+ *
1164
+ * **`signal`** — when aborted, removes this node from the graph (fires
1165
+ * the effect's `deactivate` cleanup).
1166
+ *
1167
+ * @param name - Local registration name (must be unique on this graph).
1168
+ * @param depPaths - `::`-qualified paths resolved at construction time.
1169
+ * @param fn - Side-effect receiving sugar-unwrapped scalar dep values.
1170
+ * @param opts - {@link GraphEffectOptions}.
1171
+ * @returns The registered `Node<unknown>`.
1172
+ */
1173
+ effect(name: string, depPaths: readonly string[], fn: EffectFn, opts?: GraphEffectOptions): Node<unknown>;
1174
+ /**
1175
+ * Wraps an external/async source as a named graph node via
1176
+ * {@link fromAny}. Accepts {@link GraphProduceInput} shapes:
1177
+ * `Promise`, `AsyncIterable`, `Iterable`, or scalar.
1178
+ *
1179
+ * **Node sources are rejected.** For `Node → Node`, use
1180
+ * {@link Graph.derived} with `keepAlive: true` — `fromAny` would
1181
+ * passthrough a Node verbatim and silently drop `meta`/`equals`
1182
+ * options. The type signature excludes `Node<T>`; a runtime guard
1183
+ * catches casts.
1184
+ *
1185
+ * **`undefined` is rejected.** `undefined` is the global SENTINEL;
1186
+ * emitting it as DATA would corrupt downstream first-run gates.
1187
+ * `null` (a valid DATA value) is accepted.
1188
+ *
1189
+ * **`signal`** — forwarded to {@link fromAny} for in-flight cancel of
1190
+ * Promise/AsyncIterable sources, AND triggers {@link Graph.remove}
1191
+ * when aborted so the topology reflects the cancellation.
1192
+ *
1193
+ * @param name - Local registration name (must be unique on this graph).
1194
+ * @param source - Any {@link GraphProduceInput} shape.
1195
+ * @param opts - {@link GraphProduceOptions}.
1196
+ * @returns The registered `Node<T>`.
1197
+ */
1198
+ produce<T>(name: string, source: GraphProduceInput<T>, opts?: GraphProduceOptions<T>): Node<T>;
1199
+ /**
1200
+ * Atomic multi-mutation. Same semantics as core {@link batch}: DATA and
1201
+ * RESOLVED emissions inside `fn` defer, DIRTY propagates immediately, and
1202
+ * downstream consumers see one coalesced wave (spec §1.3 invariant 7).
1203
+ * Exposed on `Graph` for discoverability and import hygiene — pattern
1204
+ * authors can reach for `graph.batch(...)` without importing `batch` from
1205
+ * the core entry. Shares one global frame with the core import; nesting
1206
+ * either way is supported.
1207
+ *
1208
+ * **Caveat:** if `fn` throws, deferred DATA is discarded but DIRTY
1209
+ * messages already propagated synchronously, leaving downstream nodes
1210
+ * in `dirty` status with stale `.cache`. Catch and emit compensating
1211
+ * INVALIDATE/RESET if you need to recover.
1212
+ */
1213
+ batch(fn: () => void): void;
1038
1214
  /**
1039
1215
  * Returns the full edge list for this graph tree, derived on demand from
1040
1216
  * each registered node's `_deps` (no stored registry). Local-only
@@ -1221,6 +1397,13 @@ declare class Graph {
1221
1397
  * When `reactive: true`, also accepts `name?`.
1222
1398
  */
1223
1399
  explain(from: string | Node<string>, to: string | Node<string>, opts?: {
1400
+ /**
1401
+ * DF13 (2026-04-29) — narrow the static overload to forbid
1402
+ * `reactive: true`. A caller passing `{ reactive: true, ... }`
1403
+ * is steered into the reactive overload instead of falling
1404
+ * through to the implementation signature's union return.
1405
+ */
1406
+ reactive?: false;
1224
1407
  maxDepth?: number | Node<number>;
1225
1408
  findCycle?: boolean | Node<boolean>;
1226
1409
  }): CausalChain;
@@ -1333,7 +1516,17 @@ declare class Graph {
1333
1516
  * stays `true` even if the instance is later reused via {@link add}.
1334
1517
  */
1335
1518
  get destroyed(): boolean;
1336
- /** Clear structure after parent already signaled TEARDOWN through this subtree. */
1519
+ /**
1520
+ * Clear structure after parent already signaled TEARDOWN through this subtree.
1521
+ *
1522
+ * Drains both `_disposers` and `_storageDisposers` to mirror the full
1523
+ * {@link destroy} path — child mounts that registered disposers via
1524
+ * {@link addDisposer} (audit trails, log dispose hooks, off-event
1525
+ * callbacks, attached storage) would otherwise leak when destruction
1526
+ * reaches the subtree via the parent's TEARDOWN cascade rather than a
1527
+ * direct `destroy()` call (EH-2). Disposers run BEFORE structure clear
1528
+ * so cleanups can still resolve node paths if needed.
1529
+ */
1337
1530
  private _destroyClearOnly;
1338
1531
  /**
1339
1532
  * Serializes structure and current values to JSON-shaped data (§3.8). Same
@@ -1,5 +1,5 @@
1
- import { A as Actor, n as GraphReFlyConfig, V as VersioningLevel, N as Node, M as Messages, K as NodeSink } from './node-ClS5yC-B.js';
2
- import { D as DescribeNodeOutput, a as DescribeDetail, b as DescribeField } from './meta-BgVAsg9j.js';
1
+ import { A as Actor, l as GraphReFlyConfig, V as VersioningLevel, N as Node, M as Messages, K as NodeSink } from './node-kK3CvTrR.js';
2
+ import { D as DescribeNodeOutput, a as DerivedFn, E as EffectFn, c as DescribeDetail, d as DescribeField } from './sugar-fhLIE7TT.js';
3
3
  import { StorageHandle } from './extra/storage-core.js';
4
4
  import { SnapshotStorageTier } from './extra/storage-tiers.js';
5
5
 
@@ -334,6 +334,73 @@ interface GraphOptions {
334
334
  factoryArgs?: unknown;
335
335
  [key: string]: unknown;
336
336
  }
337
+ /**
338
+ * Options for {@link Graph.derived}. Forwarded to the underlying
339
+ * {@link derived} primitive plus graph-level extras.
340
+ *
341
+ * - `keepAlive: true` — installs an internal subscription so the node
342
+ * stays activated and `.cache` stays current for **external consumers**
343
+ * (UI render, debug snapshot, audit log) with no real subscriber. The
344
+ * subscription self-prunes on the node's terminal (`COMPLETE` / `ERROR`
345
+ * / `TEARDOWN`) and is also drained by {@link Graph.destroy}, so
346
+ * repeated `graph.remove(name)` cycles do not accumulate stale
347
+ * disposers.
348
+ *
349
+ * **Do not read `node.cache` from inside another reactive fn** (spec
350
+ * §5.12) — declare the node as a real dep instead. `keepAlive` is a
351
+ * convenience for *external* read patterns, not a shortcut around the
352
+ * message protocol.
353
+ * - `signal` — when aborted, removes this node from the graph via
354
+ * {@link Graph.remove}, which sends `[[TEARDOWN]]` and drains cleanup
355
+ * hooks. Already-aborted signals trigger removal synchronously.
356
+ * - `equals`, `initial`, `meta` — pass-through to {@link NodeOptions}.
357
+ * - `annotation` — forwarded to {@link Graph.add} (see `graph.trace`).
358
+ */
359
+ interface GraphDerivedOptions<T> {
360
+ equals?: (a: T, b: T) => boolean;
361
+ initial?: T | null;
362
+ keepAlive?: boolean;
363
+ signal?: AbortSignal;
364
+ meta?: Record<string, unknown>;
365
+ annotation?: string;
366
+ }
367
+ /**
368
+ * Options for {@link Graph.effect}.
369
+ *
370
+ * - `signal` — when aborted, removes this node from the graph via
371
+ * {@link Graph.remove} (fires the effect's `deactivate` cleanup).
372
+ * - `meta` / `annotation` — same forwarding shape as
373
+ * {@link GraphDerivedOptions}.
374
+ */
375
+ interface GraphEffectOptions {
376
+ signal?: AbortSignal;
377
+ meta?: Record<string, unknown>;
378
+ annotation?: string;
379
+ }
380
+ /**
381
+ * Options for {@link Graph.produce}.
382
+ *
383
+ * - `signal` — forwarded to the underlying {@link fromAny} for in-flight
384
+ * cancellation of `Promise` / `AsyncIterable` sources, AND triggers
385
+ * {@link Graph.remove} when aborted so the graph topology reflects the
386
+ * cancellation.
387
+ * - `equals` / `meta` / `annotation` — same forwarding shape as
388
+ * {@link GraphDerivedOptions}.
389
+ */
390
+ interface GraphProduceOptions<T> {
391
+ equals?: (a: T, b: T) => boolean;
392
+ signal?: AbortSignal;
393
+ meta?: Record<string, unknown>;
394
+ annotation?: string;
395
+ }
396
+ /**
397
+ * Source shapes accepted by {@link Graph.produce}. Excludes `Node<T>` —
398
+ * Node→Node passthrough is rejected at the boundary because `fromAny`
399
+ * passes Nodes through verbatim, which would silently drop `meta`/`equals`
400
+ * options and bypass the `add()` registration's name semantics. For
401
+ * Node→Node, use {@link Graph.derived} with `keepAlive: true` instead.
402
+ */
403
+ type GraphProduceInput<T> = PromiseLike<T> | AsyncIterable<T> | Iterable<T> | T;
337
404
  /** Filter for {@link Graph.describe} — object-style partial match or predicate. */
338
405
  type DescribeFilter = Partial<Pick<DescribeNodeOutput, "type" | "status">> | {
339
406
  type?: DescribeNodeOutput["type"];
@@ -1035,6 +1102,115 @@ declare class Graph {
1035
1102
  * TEARDOWN and unregisters the node).
1036
1103
  */
1037
1104
  complete(name: string, options?: GraphActorOptions): void;
1105
+ /**
1106
+ * Internal: register a self-pruning keepalive subscription. The sink
1107
+ * watches for terminal messages (`COMPLETE`/`ERROR`/`TEARDOWN`) on `n`
1108
+ * and removes the disposer from `_disposers` when one arrives, so
1109
+ * repeated `graph.remove(name)` cycles do not accumulate stale
1110
+ * disposers (qa B3).
1111
+ */
1112
+ private _registerSelfPruningKeepalive;
1113
+ /**
1114
+ * Internal: wire an `AbortSignal` so its abort triggers
1115
+ * `graph.remove(name)`. Already-aborted signals trigger removal
1116
+ * synchronously. The abort listener is itself registered as a graph
1117
+ * disposer so it gets cleaned up if `destroy()` runs first (qa B4).
1118
+ */
1119
+ private _wireSignalToRemove;
1120
+ /**
1121
+ * Path-based reactive derivation. Resolves each entry in `depPaths` via
1122
+ * {@link Graph.resolve}, builds a {@link derived} node, registers it via
1123
+ * {@link Graph.add}, and returns the registered Node.
1124
+ *
1125
+ * **First-run gate inherited.** fn does not fire until every dep has
1126
+ * delivered at least one real DATA — same gate as `derived()` (spec §2.7,
1127
+ * `partial: false`). A SENTINEL dep holds activation; `null` is a real
1128
+ * DATA value and releases the gate. **Empty `depPaths` is a vacuous
1129
+ * gate** — fn fires once synchronously on first activation. Use this
1130
+ * for one-shot constants only; for async sources prefer
1131
+ * {@link Graph.produce}.
1132
+ *
1133
+ * **`keepAlive: true`** — installs an internal subscription so the node
1134
+ * stays activated and `.cache` stays current for **external consumers**
1135
+ * (UI render, debug snapshot, audit log). The subscription self-prunes
1136
+ * on the node's terminal and is also drained by {@link Graph.destroy}.
1137
+ *
1138
+ * **Do not read `node.cache` from inside another reactive fn** — that
1139
+ * is a §5.12 boundary violation regardless of `keepAlive`. Declare the
1140
+ * node as a real dep instead so the edge appears in `describe()` and
1141
+ * the message protocol carries the value.
1142
+ *
1143
+ * **`signal`** — when aborted, removes this node from the graph.
1144
+ *
1145
+ * @param name - Local registration name (must be unique on this graph).
1146
+ * @param depPaths - `::`-qualified paths resolved at construction time.
1147
+ * @param fn - Pure compute receiving sugar-unwrapped scalar dep values.
1148
+ * @param opts - {@link GraphDerivedOptions}.
1149
+ * @returns The registered `Node<T>`.
1150
+ */
1151
+ derived<T>(name: string, depPaths: readonly string[], fn: DerivedFn<T>, opts?: GraphDerivedOptions<T>): Node<T>;
1152
+ /**
1153
+ * Path-based managed side effect. Resolves each entry in `depPaths`,
1154
+ * builds an {@link effect} node, registers it, and returns the
1155
+ * registered Node. fn does not auto-emit — call `actions.emit(v)` /
1156
+ * `actions.down(msgs)` explicitly to produce downstream messages.
1157
+ *
1158
+ * **Cleanup.** Return a cleanup function (`() => void`) or granular
1159
+ * hooks (`{ beforeRun?, deactivate?, invalidate? }`) — fired on the
1160
+ * matching transition by the underlying primitive (see
1161
+ * {@link NodeFnCleanup}). Graph teardown propagates `[[TEARDOWN]]`
1162
+ * which triggers `deactivate`.
1163
+ *
1164
+ * **`signal`** — when aborted, removes this node from the graph (fires
1165
+ * the effect's `deactivate` cleanup).
1166
+ *
1167
+ * @param name - Local registration name (must be unique on this graph).
1168
+ * @param depPaths - `::`-qualified paths resolved at construction time.
1169
+ * @param fn - Side-effect receiving sugar-unwrapped scalar dep values.
1170
+ * @param opts - {@link GraphEffectOptions}.
1171
+ * @returns The registered `Node<unknown>`.
1172
+ */
1173
+ effect(name: string, depPaths: readonly string[], fn: EffectFn, opts?: GraphEffectOptions): Node<unknown>;
1174
+ /**
1175
+ * Wraps an external/async source as a named graph node via
1176
+ * {@link fromAny}. Accepts {@link GraphProduceInput} shapes:
1177
+ * `Promise`, `AsyncIterable`, `Iterable`, or scalar.
1178
+ *
1179
+ * **Node sources are rejected.** For `Node → Node`, use
1180
+ * {@link Graph.derived} with `keepAlive: true` — `fromAny` would
1181
+ * passthrough a Node verbatim and silently drop `meta`/`equals`
1182
+ * options. The type signature excludes `Node<T>`; a runtime guard
1183
+ * catches casts.
1184
+ *
1185
+ * **`undefined` is rejected.** `undefined` is the global SENTINEL;
1186
+ * emitting it as DATA would corrupt downstream first-run gates.
1187
+ * `null` (a valid DATA value) is accepted.
1188
+ *
1189
+ * **`signal`** — forwarded to {@link fromAny} for in-flight cancel of
1190
+ * Promise/AsyncIterable sources, AND triggers {@link Graph.remove}
1191
+ * when aborted so the topology reflects the cancellation.
1192
+ *
1193
+ * @param name - Local registration name (must be unique on this graph).
1194
+ * @param source - Any {@link GraphProduceInput} shape.
1195
+ * @param opts - {@link GraphProduceOptions}.
1196
+ * @returns The registered `Node<T>`.
1197
+ */
1198
+ produce<T>(name: string, source: GraphProduceInput<T>, opts?: GraphProduceOptions<T>): Node<T>;
1199
+ /**
1200
+ * Atomic multi-mutation. Same semantics as core {@link batch}: DATA and
1201
+ * RESOLVED emissions inside `fn` defer, DIRTY propagates immediately, and
1202
+ * downstream consumers see one coalesced wave (spec §1.3 invariant 7).
1203
+ * Exposed on `Graph` for discoverability and import hygiene — pattern
1204
+ * authors can reach for `graph.batch(...)` without importing `batch` from
1205
+ * the core entry. Shares one global frame with the core import; nesting
1206
+ * either way is supported.
1207
+ *
1208
+ * **Caveat:** if `fn` throws, deferred DATA is discarded but DIRTY
1209
+ * messages already propagated synchronously, leaving downstream nodes
1210
+ * in `dirty` status with stale `.cache`. Catch and emit compensating
1211
+ * INVALIDATE/RESET if you need to recover.
1212
+ */
1213
+ batch(fn: () => void): void;
1038
1214
  /**
1039
1215
  * Returns the full edge list for this graph tree, derived on demand from
1040
1216
  * each registered node's `_deps` (no stored registry). Local-only
@@ -1221,6 +1397,13 @@ declare class Graph {
1221
1397
  * When `reactive: true`, also accepts `name?`.
1222
1398
  */
1223
1399
  explain(from: string | Node<string>, to: string | Node<string>, opts?: {
1400
+ /**
1401
+ * DF13 (2026-04-29) — narrow the static overload to forbid
1402
+ * `reactive: true`. A caller passing `{ reactive: true, ... }`
1403
+ * is steered into the reactive overload instead of falling
1404
+ * through to the implementation signature's union return.
1405
+ */
1406
+ reactive?: false;
1224
1407
  maxDepth?: number | Node<number>;
1225
1408
  findCycle?: boolean | Node<boolean>;
1226
1409
  }): CausalChain;
@@ -1333,7 +1516,17 @@ declare class Graph {
1333
1516
  * stays `true` even if the instance is later reused via {@link add}.
1334
1517
  */
1335
1518
  get destroyed(): boolean;
1336
- /** Clear structure after parent already signaled TEARDOWN through this subtree. */
1519
+ /**
1520
+ * Clear structure after parent already signaled TEARDOWN through this subtree.
1521
+ *
1522
+ * Drains both `_disposers` and `_storageDisposers` to mirror the full
1523
+ * {@link destroy} path — child mounts that registered disposers via
1524
+ * {@link addDisposer} (audit trails, log dispose hooks, off-event
1525
+ * callbacks, attached storage) would otherwise leak when destruction
1526
+ * reaches the subtree via the parent's TEARDOWN cascade rather than a
1527
+ * direct `destroy()` call (EH-2). Disposers run BEFORE structure clear
1528
+ * so cleanups can still resolve node paths if needed.
1529
+ */
1337
1530
  private _destroyClearOnly;
1338
1531
  /**
1339
1532
  * Serializes structure and current values to JSON-shaped data (§3.8). Same
@@ -1,12 +1,12 @@
1
- import { i as index$2 } from './index-ChOyVLKm.cjs';
2
- import { i as index$3 } from './index-C9kSENB4.cjs';
3
- import { i as index$4 } from './index-BAOD98JD.cjs';
4
- import { i as index$5 } from './index-z96luz5O.cjs';
5
- import { N as Node } from './node-ClS5yC-B.cjs';
6
- import { i as index$6 } from './index-BVpm6noz.cjs';
7
- import { i as index$7 } from './index-hHcaFlJX.cjs';
8
- import { i as index$8 } from './index-BJX94aud.cjs';
9
- import { i as index$9 } from './index-f5IivDUX.cjs';
1
+ import { i as index$2 } from './index-BrPrLl4e.cjs';
2
+ import { i as index$3 } from './index-BQSKmbuG.cjs';
3
+ import { i as index$4 } from './index-Climxqsu.cjs';
4
+ import { i as index$5 } from './index-C5stwKcw.cjs';
5
+ import { N as Node } from './node-kK3CvTrR.cjs';
6
+ import { i as index$6 } from './index-hcDJ8PSI.cjs';
7
+ import { i as index$7 } from './index-_6ODbuOu.cjs';
8
+ import { i as index$8 } from './index-CK29LV56.cjs';
9
+ import { i as index$9 } from './index-ZVQhLa2i.cjs';
10
10
 
11
11
  /**
12
12
  * Options for creating signals.
@@ -1,7 +1,7 @@
1
- import { A as Actor, N as Node, W as PolicyRuleData, o as GuardAction } from './node-ClS5yC-B.cjs';
2
- import { G as Graph, a as GraphOptions, r as GraphPersistSnapshot, b as GraphDescribeOutput, j as GraphDescribeOptions, C as CausalChain, e as DescribeFilter } from './graph-C4SHb3Ly.cjs';
3
- import { T as TopicGraph } from './index-BTQtTb_H.cjs';
4
- import { w as watchTopologyTree } from './topology-tree-BSdfSwMi.cjs';
1
+ import { A as Actor, N as Node, W as PolicyRuleData, m as GuardAction } from './node-kK3CvTrR.cjs';
2
+ import { G as Graph, a as GraphOptions, r as GraphPersistSnapshot, b as GraphDescribeOutput, j as GraphDescribeOptions, C as CausalChain, e as DescribeFilter } from './graph-CWvEUQAq.cjs';
3
+ import { T as TopicGraph } from './index-C5ri2Axc.cjs';
4
+ import { w as watchTopologyTree } from './topology-tree-Bcz27hpF.cjs';
5
5
 
6
6
  /**
7
7
  * Audit, policy enforcement, and compliance export (roadmap §9.2).
@@ -1,8 +1,8 @@
1
- import { N as Node } from './node-ClS5yC-B.cjs';
2
- import { B as BaseAuditRecord } from './index-C9pjcz3l.cjs';
3
- import { a as ReactiveLogBundle } from './reactive-log-B00laMSQ.cjs';
1
+ import { N as Node } from './node-kK3CvTrR.cjs';
2
+ import { B as BaseAuditRecord } from './index-D0aciIex.cjs';
3
+ import { a as ReactiveLogBundle } from './reactive-log-DIGdYqQ6.cjs';
4
4
  import { AppendLogStorageTier } from './extra/storage-tiers.cjs';
5
- import { a as GraphOptions, G as Graph } from './graph-C4SHb3Ly.cjs';
5
+ import { a as GraphOptions, G as Graph } from './graph-CWvEUQAq.cjs';
6
6
 
7
7
  /**
8
8
  * CQRS patterns (roadmap §4.5).
@@ -1,7 +1,7 @@
1
- import { N as Node } from './node-ClS5yC-B.cjs';
2
- import { B as BaseAuditRecord } from './index-C9pjcz3l.cjs';
3
- import { a as ReactiveLogBundle } from './reactive-log-B00laMSQ.cjs';
4
- import { G as Graph } from './graph-C4SHb3Ly.cjs';
1
+ import { N as Node } from './node-kK3CvTrR.cjs';
2
+ import { B as BaseAuditRecord } from './index-D0aciIex.cjs';
3
+ import { a as ReactiveLogBundle } from './reactive-log-DIGdYqQ6.cjs';
4
+ import { G as Graph } from './graph-CWvEUQAq.cjs';
5
5
 
6
6
  /**
7
7
  * Memory patterns (roadmap §4.3) — public-face Phase-4 primitives audited under
@@ -1,4 +1,4 @@
1
- import { N as Node } from './node-ClS5yC-B.js';
1
+ import { N as Node } from './node-kK3CvTrR.js';
2
2
 
3
3
  /**
4
4
  * Backoff strategies for {@link retry} (roadmap §3.1). Delays are in **nanoseconds**.
@@ -227,8 +227,8 @@ type RetryFactoryOptions<T> = RetryOptions & {
227
227
  *
228
228
  * @category extra
229
229
  */
230
- declare function retry<T>(input: Node<T>, opts?: RetryOptions): Node<T>;
231
- declare function retry<T>(input: () => Node<T>, opts?: RetryFactoryOptions<T>): Node<T>;
230
+ declare function retry<T>(input: Node<T>, opts?: NodeOrValue<RetryOptions>): Node<T>;
231
+ declare function retry<T>(input: () => Node<T>, opts?: NodeOrValue<RetryFactoryOptions<T>>): Node<T>;
232
232
  type CircuitState = "closed" | "open" | "half-open";
233
233
  /**
234
234
  * Thrown when {@link withBreaker} is configured with `onOpen: "error"` and the breaker rejects work.
@@ -275,6 +275,13 @@ interface CircuitBreaker {
275
275
  readonly failureCount: number;
276
276
  /** Manually reset to closed state, clearing all counters. */
277
277
  reset(): void;
278
+ /**
279
+ * Release the reactive-options subscription (Tier 6.5 3.2.4, 2026-04-29).
280
+ * No-op when constructed with static options. Call when retiring a
281
+ * breaker whose options came from a `Node<CircuitBreakerOptions>` to
282
+ * avoid leaking the option-Node subscription.
283
+ */
284
+ dispose(): void;
278
285
  }
279
286
  /**
280
287
  * Factory for a synchronous circuit breaker with `closed`, `open`, and `half-open` states.
@@ -282,12 +289,24 @@ interface CircuitBreaker {
282
289
  * Supports escalating cooldown via an optional {@link BackoffStrategy} — each consecutive
283
290
  * open→half-open→open cycle increments the backoff attempt.
284
291
  *
285
- * @param options - Threshold, cooldown, half-open limit, and optional clock override.
292
+ * @param options - Threshold, cooldown, half-open limit, and optional clock
293
+ * override; OR a `Node<CircuitBreakerOptions>` carrying the same shape
294
+ * reactively (Tier 6.5 3.2.4).
286
295
  * @returns {@link CircuitBreaker} instance.
287
296
  *
288
297
  * @remarks
289
298
  * **Timing:** Uses `monotonicNs()` by default (nanoseconds). Override `now` for tests.
290
299
  *
300
+ * **Reactive options (locked semantics, Tier 6.5 3.2.4, 2026-04-29).**
301
+ * When `options` is a `Node<CircuitBreakerOptions>`, the breaker
302
+ * subscribes at construction and re-reads `failureThreshold` /
303
+ * `cooldownNs` / `cooldown` / `halfOpenMax` / `now` on each DATA. **An
304
+ * option swap RESETS the breaker to `"closed"`** with all counters
305
+ * cleared — operators tuning a runaway breaker get a clean baseline.
306
+ * If retaining failure history across re-tunings matters, derive a new
307
+ * breaker per-tuning instead. Call `breaker.dispose()` when retiring to
308
+ * release the option-Node subscription.
309
+ *
291
310
  * @example
292
311
  * ```ts
293
312
  * import { circuitBreaker, exponential, NS_PER_SEC } from "@graphrefly/graphrefly-ts";
@@ -300,7 +319,7 @@ interface CircuitBreaker {
300
319
  *
301
320
  * @category extra
302
321
  */
303
- declare function circuitBreaker(options?: CircuitBreakerOptions): CircuitBreaker;
322
+ declare function circuitBreaker(options?: NodeOrValue<CircuitBreakerOptions>): CircuitBreaker;
304
323
  type WithBreakerBundle<T> = {
305
324
  node: Node<T>;
306
325
  breakerState: Node<CircuitState>;
@@ -525,7 +544,7 @@ type RateLimiterBundle<T> = {
525
544
  *
526
545
  * @category extra
527
546
  */
528
- declare function rateLimiter<T>(source: Node<T>, opts: RateLimiterOptions): RateLimiterBundle<T>;
547
+ declare function rateLimiter<T>(source: Node<T>, opts: NodeOrValue<RateLimiterOptions>): RateLimiterBundle<T>;
529
548
  type StatusValue = "pending" | "running" | "completed" | "errored";
530
549
  type WithStatusBundle<T> = {
531
550
  node: Node<T>;
@@ -557,6 +576,17 @@ type WithStatusBundle<T> = {
557
576
  * appear as edges in `describe()` if no consumer subscribes to them (per
558
577
  * COMPOSITION-GUIDE §1, push-on-subscribe semantics).
559
578
  *
579
+ * **Per-subscribe lifecycle (DF8, 2026-04-29 doc lock).** When the wrapped
580
+ * source is `resubscribable: true` and multiple consumers attach in
581
+ * sequence, each new subscription cycle re-runs the producer fn AND
582
+ * re-emits the initial `pending` + `null` companion DATAs. Downstream
583
+ * subscribers to the `status` / `error` companions see thrash:
584
+ * `pending → running → completed → pending → running …`. This is the
585
+ * intended fresh-cycle semantic (each subscription cycle reports its own
586
+ * lifecycle); consumers that need a "stable" status across cycles should
587
+ * derive a snapshot via a separate `state()` mirror rather than depending
588
+ * on the per-cycle reset.
589
+ *
560
590
  * @example
561
591
  * ```ts
562
592
  * import { withStatus, state } from "@graphrefly/graphrefly-ts";
@@ -583,6 +613,20 @@ declare class TimeoutError extends Error {
583
613
  name: string;
584
614
  constructor(ns: number);
585
615
  }
616
+ /**
617
+ * Either a literal value or a reactive Node carrying it. Mirrors
618
+ * {@link FallbackInput}'s precedent for "options that may be reactive."
619
+ *
620
+ * Used by {@link timeout} / {@link retry} / {@link rateLimiter} /
621
+ * {@link circuitBreaker} / {@link budgetGate} to accept reactive option
622
+ * configurations (Tier 6.5 3.2, 2026-04-29). Each primitive subscribes
623
+ * to the option Node via {@link resolveReactiveOption} and rebinds
624
+ * internal state per its locked swap-semantic rule (see each primitive's
625
+ * JSDoc for the rule).
626
+ *
627
+ * @category extra
628
+ */
629
+ type NodeOrValue<T> = T | Node<T>;
586
630
  /** Inputs accepted by {@link fallback}. */
587
631
  type FallbackInput<T> = T | Node<T> | PromiseLike<T> | AsyncIterable<T>;
588
632
  /**
@@ -626,7 +670,9 @@ declare function fallback<T>(source: Node<T>, fb: FallbackInput<T>, options?: {
626
670
  * the timer. Terminal messages (`COMPLETE`/`ERROR`) cancel the timer.
627
671
  *
628
672
  * @param source - Upstream node.
629
- * @param timeoutNs - Deadline in **nanoseconds** (must be > 0). Internally converted to milliseconds for `setTimeout` scheduling.
673
+ * @param timeoutNs - Deadline in **nanoseconds** (must be > 0), or a
674
+ * `Node<number>` carrying the deadline reactively (Tier 6.5 3.2.1).
675
+ * Internally converted to milliseconds for `setTimeout` scheduling.
630
676
  * @returns Node that errors on timeout.
631
677
  *
632
678
  * @throws {RangeError} when `timeoutNs <= 0`.
@@ -634,6 +680,13 @@ declare function fallback<T>(source: Node<T>, fb: FallbackInput<T>, options?: {
634
680
  * @remarks
635
681
  * **Scheduling:** internally uses {@link ResettableTimer} (raw `setTimeout`) per spec §5.10's resilience-operator carve-out. The deadline is `timeoutNs / NS_PER_MS` ms; sub-millisecond `timeoutNs` values get the same minimum-1ms host-scheduler granularity that `setTimeout` provides.
636
682
  *
683
+ * **Reactive `timeoutNs` (locked semantics, Tier 6.5 3.2.1, 2026-04-29).**
684
+ * When `timeoutNs` is a `Node<number>`, each timer-(re)start reads the
685
+ * latest value. An option swap mid-flight applies to the **next** timer
686
+ * window (no in-flight reset) — the active timer keeps its original
687
+ * deadline; the next DATA-driven `startTimer()` call reads the new
688
+ * value. Static-form callers see no behavior change.
689
+ *
637
690
  * @example
638
691
  * ```ts
639
692
  * import { timeout, never, NS_PER_SEC } from "@graphrefly/graphrefly-ts";
@@ -644,7 +697,7 @@ declare function fallback<T>(source: Node<T>, fb: FallbackInput<T>, options?: {
644
697
  *
645
698
  * @category extra
646
699
  */
647
- declare function timeout<T>(source: Node<T>, timeoutNs: number, options?: {
700
+ declare function timeout<T>(source: Node<T>, timeoutNs: NodeOrValue<number>, options?: {
648
701
  meta?: Record<string, unknown>;
649
702
  }): Node<T>;
650
703