@noy-db/hub 0.2.0-pre.4 → 0.2.0-pre.6

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 (282) hide show
  1. package/dist/aggregate/index.cjs.map +1 -1
  2. package/dist/aggregate/index.js +4 -4
  3. package/dist/attestation/index.cjs.map +1 -1
  4. package/dist/attestation/index.d.cts +4 -4
  5. package/dist/attestation/index.d.ts +4 -4
  6. package/dist/attestation/index.js +6 -6
  7. package/dist/blobs/index.cjs.map +1 -1
  8. package/dist/blobs/index.d.cts +5 -5
  9. package/dist/blobs/index.d.ts +5 -5
  10. package/dist/blobs/index.js +5 -5
  11. package/dist/bundle/index.cjs +496 -344
  12. package/dist/bundle/index.cjs.map +1 -1
  13. package/dist/bundle/index.d.cts +17 -17
  14. package/dist/bundle/index.d.ts +17 -17
  15. package/dist/bundle/index.js +10 -10
  16. package/dist/bundle/index.js.map +1 -1
  17. package/dist/{chunk-YL2DR3HY.js → chunk-25WFLKOH.js} +2 -2
  18. package/dist/chunk-25WFLKOH.js.map +1 -0
  19. package/dist/{chunk-EMEX37ZN.js → chunk-2GMRNNI3.js} +3 -3
  20. package/dist/chunk-2GMRNNI3.js.map +1 -0
  21. package/dist/{chunk-NGSPBLLE.js → chunk-34XGYMQT.js} +3 -3
  22. package/dist/chunk-34XGYMQT.js.map +1 -0
  23. package/dist/{chunk-FXQYZNOW.js → chunk-5OVIFUQE.js} +1 -1
  24. package/dist/chunk-5OVIFUQE.js.map +1 -0
  25. package/dist/{chunk-P6256WTJ.js → chunk-5QPF2MJ5.js} +3 -3
  26. package/dist/chunk-5QPF2MJ5.js.map +1 -0
  27. package/dist/{chunk-5ZGZ6HIZ.js → chunk-5VMTAX4Y.js} +2 -2
  28. package/dist/{chunk-74JEQFMT.js → chunk-6A4AMQ2H.js} +5 -5
  29. package/dist/chunk-6A4AMQ2H.js.map +1 -0
  30. package/dist/{chunk-YDLAFP36.js → chunk-6HJ2ZALB.js} +1 -1
  31. package/dist/chunk-6HJ2ZALB.js.map +1 -0
  32. package/dist/{chunk-GDTCGIPX.js → chunk-7TX7HN42.js} +2 -2
  33. package/dist/chunk-7TX7HN42.js.map +1 -0
  34. package/dist/{chunk-EPK6A3WJ.js → chunk-A3JMGXPG.js} +2 -2
  35. package/dist/chunk-A3JMGXPG.js.map +1 -0
  36. package/dist/{chunk-75QDHSE4.js → chunk-A4JNVBPF.js} +5 -5
  37. package/dist/{chunk-IS5HWQO7.js → chunk-ARZAHCCF.js} +3 -3
  38. package/dist/{chunk-4OQWR46B.js → chunk-CCC25PA7.js} +5 -5
  39. package/dist/{chunk-NSLTPGEN.js → chunk-CGJFCT3X.js} +2 -2
  40. package/dist/{chunk-YK72A4IT.js → chunk-CKH247ZR.js} +4 -4
  41. package/dist/{chunk-HGZ7DC5H.js → chunk-DFCINPB5.js} +2 -2
  42. package/dist/chunk-DFCINPB5.js.map +1 -0
  43. package/dist/{chunk-4X2S7PBF.js → chunk-E225X5CQ.js} +3 -3
  44. package/dist/chunk-E225X5CQ.js.map +1 -0
  45. package/dist/{chunk-5YHWBPOT.js → chunk-ED3E3OLO.js} +2 -2
  46. package/dist/{chunk-UOF74WQY.js → chunk-EKTOYEZ3.js} +2 -2
  47. package/dist/{chunk-SAVQ6E2O.js → chunk-G26QAQNI.js} +2 -2
  48. package/dist/{chunk-YMYK7US4.js → chunk-HIELMTUK.js} +2 -2
  49. package/dist/{chunk-MRIBLZL3.js → chunk-ICH4AIGL.js} +1 -1
  50. package/dist/chunk-ICH4AIGL.js.map +1 -0
  51. package/dist/{chunk-KMI2NBBF.js → chunk-JICBEFBT.js} +181 -6
  52. package/dist/chunk-JICBEFBT.js.map +1 -0
  53. package/dist/{chunk-LOL725S4.js → chunk-JSYTGEX4.js} +3 -3
  54. package/dist/{chunk-FBMXWVGP.js → chunk-KGFV72WK.js} +5 -5
  55. package/dist/{chunk-GVXBHCZ2.js → chunk-LJO6Q3X6.js} +5 -5
  56. package/dist/chunk-LJO6Q3X6.js.map +1 -0
  57. package/dist/{chunk-ZC2AAE6J.js → chunk-LWFQYT4N.js} +2 -2
  58. package/dist/chunk-LWFQYT4N.js.map +1 -0
  59. package/dist/{chunk-K5PVGKE4.js → chunk-MDIC4FAU.js} +2 -2
  60. package/dist/{chunk-ZUMGGHRB.js → chunk-OPD3PZOG.js} +4 -4
  61. package/dist/{chunk-LS3JLEIB.js → chunk-PS5G6A3Y.js} +4 -4
  62. package/dist/{chunk-KYKMKLJ6.js → chunk-PX3MJ6RB.js} +3 -3
  63. package/dist/{chunk-FCDO7UAO.js → chunk-R4LTCI6O.js} +2 -2
  64. package/dist/{chunk-BFI3RS42.js → chunk-R7JTYCRX.js} +2 -2
  65. package/dist/chunk-R7JTYCRX.js.map +1 -0
  66. package/dist/{chunk-WRLHNG6H.js → chunk-RIHZBSWJ.js} +4 -4
  67. package/dist/chunk-RIHZBSWJ.js.map +1 -0
  68. package/dist/{chunk-UVPGJXVO.js → chunk-SGSHQ4PH.js} +5 -5
  69. package/dist/{chunk-TLFUDXVV.js → chunk-T6MTNGBM.js} +5 -5
  70. package/dist/chunk-T6MTNGBM.js.map +1 -0
  71. package/dist/{chunk-6S3LLAQ5.js → chunk-TNBIWSQ7.js} +2 -2
  72. package/dist/{chunk-GD3BGKAR.js → chunk-UGVDIOY7.js} +2 -2
  73. package/dist/{chunk-T6HQMVML.js → chunk-W277AG6N.js} +411 -308
  74. package/dist/chunk-W277AG6N.js.map +1 -0
  75. package/dist/{chunk-FS7A4XNF.js → chunk-WEA4TDTJ.js} +3 -3
  76. package/dist/{chunk-4UBOTYP5.js → chunk-XDW37COG.js} +5 -5
  77. package/dist/chunk-XDW37COG.js.map +1 -0
  78. package/dist/{chunk-QAU5HM6Q.js → chunk-XVJFFGTG.js} +3 -3
  79. package/dist/{chunk-2EYC3WDT.js → chunk-Y3P5DEMZ.js} +6 -6
  80. package/dist/chunk-Y3P5DEMZ.js.map +1 -0
  81. package/dist/{chunk-G7PAZ3TD.js → chunk-YEHUEUNP.js} +4 -4
  82. package/dist/chunk-YEHUEUNP.js.map +1 -0
  83. package/dist/{chunk-2XLVPKXG.js → chunk-YJ46RFCD.js} +2 -2
  84. package/dist/{chunk-NCO2JGKK.js → chunk-Z6FNBOTC.js} +1 -1
  85. package/dist/chunk-Z6FNBOTC.js.map +1 -0
  86. package/dist/{chunk-GAUBWHAF.js → chunk-ZQMYB56Z.js} +4 -4
  87. package/dist/consent/index.cjs.map +1 -1
  88. package/dist/consent/index.d.cts +5 -5
  89. package/dist/consent/index.d.ts +5 -5
  90. package/dist/consent/index.js +3 -3
  91. package/dist/{crypto-H2Y3DDFW.js → crypto-5UDZZL26.js} +3 -3
  92. package/dist/{delegation-QSC7G5QC.js → delegation-42LO4WFO.js} +5 -5
  93. package/dist/derivations/index.cjs +1 -1
  94. package/dist/derivations/index.cjs.map +1 -1
  95. package/dist/derivations/index.d.cts +8 -8
  96. package/dist/derivations/index.d.ts +8 -8
  97. package/dist/derivations/index.js +4 -4
  98. package/dist/{dev-unlock-Cf2B7Kih.d.ts → dev-unlock-Cvo-xCQC.d.ts} +1 -1
  99. package/dist/{dev-unlock-De3mjQWv.d.cts → dev-unlock-Dy1qVpkL.d.cts} +1 -1
  100. package/dist/executor-AWCHQ2KN.js +8 -0
  101. package/dist/executor-RWICJI7J.js +11 -0
  102. package/dist/executor-SOLEQVUB.js +8 -0
  103. package/dist/{fanout-sidecar-NRBWSLRK.js → fanout-sidecar-EVICRM46.js} +2 -2
  104. package/dist/fanout-sidecar-EVICRM46.js.map +1 -0
  105. package/dist/guards/index.cjs +1 -1
  106. package/dist/guards/index.cjs.map +1 -1
  107. package/dist/guards/index.d.cts +6 -6
  108. package/dist/guards/index.d.ts +6 -6
  109. package/dist/guards/index.js +4 -4
  110. package/dist/{hash-gVn_uKhp.d.ts → hash-BAlWR4WD.d.ts} +1 -1
  111. package/dist/{hash-vBCB0-Ps.d.cts → hash-BgEQklQc.d.cts} +1 -1
  112. package/dist/history/index.cjs.map +1 -1
  113. package/dist/history/index.d.cts +6 -6
  114. package/dist/history/index.d.ts +6 -6
  115. package/dist/history/index.js +6 -6
  116. package/dist/i18n/index.cjs +75 -10
  117. package/dist/i18n/index.cjs.map +1 -1
  118. package/dist/i18n/index.d.cts +5 -5
  119. package/dist/i18n/index.d.ts +5 -5
  120. package/dist/i18n/index.js +16 -14
  121. package/dist/{index-DVkvrgpm.d.cts → index-5I0MZ0jQ.d.cts} +12 -12
  122. package/dist/{index-BF1B2HB9.d.ts → index-fIPPh5dg.d.ts} +12 -12
  123. package/dist/index.cjs +538 -378
  124. package/dist/index.cjs.map +1 -1
  125. package/dist/index.d.cts +20 -22
  126. package/dist/index.d.ts +20 -22
  127. package/dist/index.js +50 -52
  128. package/dist/index.js.map +1 -1
  129. package/dist/indexing/index.cjs +1 -1
  130. package/dist/indexing/index.cjs.map +1 -1
  131. package/dist/indexing/index.d.cts +3 -3
  132. package/dist/indexing/index.d.ts +3 -3
  133. package/dist/indexing/index.js +4 -4
  134. package/dist/issue-IODMTPME.js +12 -0
  135. package/dist/{lazy-builder-Rpd-V3jP.d.ts → lazy-builder-D1MyR1qH.d.ts} +2 -2
  136. package/dist/{lazy-builder-C-rPfWG0.d.cts → lazy-builder-DXlSCNCJ.d.cts} +2 -2
  137. package/dist/{ledger-WOEJUYTP.js → ledger-UX4QIHWI.js} +6 -6
  138. package/dist/materialized-views/index.cjs.map +1 -1
  139. package/dist/materialized-views/index.d.cts +18 -18
  140. package/dist/materialized-views/index.d.ts +18 -18
  141. package/dist/materialized-views/index.js +7 -7
  142. package/dist/noydb-FY2666NY.js +34 -0
  143. package/dist/overlay-views/index.cjs +1 -1
  144. package/dist/overlay-views/index.cjs.map +1 -1
  145. package/dist/overlay-views/index.d.cts +8 -8
  146. package/dist/overlay-views/index.d.ts +8 -8
  147. package/dist/overlay-views/index.js +4 -4
  148. package/dist/periods/index.cjs.map +1 -1
  149. package/dist/periods/index.d.cts +5 -5
  150. package/dist/periods/index.d.ts +5 -5
  151. package/dist/periods/index.js +6 -6
  152. package/dist/{predicate-Dnu81tsS.d.cts → predicate-B0IKeBXx.d.cts} +1 -1
  153. package/dist/{predicate-Dnu81tsS.d.ts → predicate-B0IKeBXx.d.ts} +1 -1
  154. package/dist/{public-envelope-OHQ5UZFM.js → public-envelope-YKHKP74C.js} +4 -4
  155. package/dist/query/index.cjs +2 -2
  156. package/dist/query/index.cjs.map +1 -1
  157. package/dist/query/index.d.cts +2 -2
  158. package/dist/query/index.d.ts +2 -2
  159. package/dist/query/index.js +6 -6
  160. package/dist/registry-446I2NMN.js +8 -0
  161. package/dist/{registry-CDHASH73.js → registry-4NEW7LQY.js} +3 -3
  162. package/dist/registry-524KJZG4.js +8 -0
  163. package/dist/registry-DKEXOJVO.js +7 -0
  164. package/dist/{revoke-7JOVLZFD.js → revoke-R5NIQ74J.js} +6 -6
  165. package/dist/session/index.cjs.map +1 -1
  166. package/dist/session/index.d.cts +6 -6
  167. package/dist/session/index.d.ts +6 -6
  168. package/dist/session/index.js +3 -3
  169. package/dist/shadow/index.cjs.map +1 -1
  170. package/dist/shadow/index.d.cts +5 -5
  171. package/dist/shadow/index.d.ts +5 -5
  172. package/dist/shadow/index.js +2 -2
  173. package/dist/{signer-M4K5HBLD.js → signer-WGDJNWSU.js} +5 -5
  174. package/dist/{stale-PAGCS4K5.js → stale-74WGLVZ2.js} +2 -2
  175. package/dist/store/index.cjs.map +1 -1
  176. package/dist/store/index.d.cts +5 -5
  177. package/dist/store/index.d.ts +5 -5
  178. package/dist/store/index.js +2 -2
  179. package/dist/sync/index.cjs.map +1 -1
  180. package/dist/sync/index.d.cts +4 -4
  181. package/dist/sync/index.d.ts +4 -4
  182. package/dist/sync/index.js +4 -4
  183. package/dist/team/index.cjs +1 -1
  184. package/dist/team/index.cjs.map +1 -1
  185. package/dist/team/index.d.cts +5 -5
  186. package/dist/team/index.d.ts +5 -5
  187. package/dist/team/index.js +8 -8
  188. package/dist/tx/index.cjs +2 -2
  189. package/dist/tx/index.cjs.map +1 -1
  190. package/dist/tx/index.d.cts +5 -5
  191. package/dist/tx/index.d.ts +5 -5
  192. package/dist/tx/index.js +3 -3
  193. package/dist/tx/index.js.map +1 -1
  194. package/dist/{types-CSLcfytP.d.cts → types-DVlvNn2c.d.cts} +362 -307
  195. package/dist/{types-D9eB0Rvh.d.ts → types-DlnZh1_i.d.ts} +362 -307
  196. package/dist/{ulid-CiM2OAeM.d.ts → ulid-CzPONlhG.d.ts} +19 -19
  197. package/dist/{ulid-CG2YvAbg.d.cts → ulid-r98nkjVd.d.cts} +19 -19
  198. package/dist/util/index.cjs.map +1 -1
  199. package/dist/util/index.js +1 -1
  200. package/dist/{with-derivation-Bzpj6UTv.d.ts → with-derivation-B98shCV8.d.ts} +1 -1
  201. package/dist/{with-derivation-DWajFh4K.d.cts → with-derivation-BMQ9pIHe.d.cts} +1 -1
  202. package/dist/{with-guard-DF_Ul3DT.d.cts → with-guard-DUnC3JDN.d.cts} +1 -1
  203. package/dist/{with-guard-DR7U-l4v.d.ts → with-guard-DmT50nVG.d.ts} +1 -1
  204. package/dist/{with-materialized-view-qtoJ3xKJ.d.ts → with-materialized-view-Bp_M3sNG.d.ts} +2 -2
  205. package/dist/{with-materialized-view-_piodoIz.d.cts → with-materialized-view-eMTZ65_J.d.cts} +2 -2
  206. package/dist/{with-overlayed-view-DFaRfgMr.d.ts → with-overlayed-view-BoY6PB3n.d.cts} +2 -2
  207. package/dist/{with-overlayed-view-DwzCKxn2.d.cts → with-overlayed-view-zzSnRQmS.d.ts} +2 -2
  208. package/package.json +3 -3
  209. package/dist/chunk-2EYC3WDT.js.map +0 -1
  210. package/dist/chunk-4UBOTYP5.js.map +0 -1
  211. package/dist/chunk-4X2S7PBF.js.map +0 -1
  212. package/dist/chunk-74JEQFMT.js.map +0 -1
  213. package/dist/chunk-A6SWRXUQ.js +0 -118
  214. package/dist/chunk-A6SWRXUQ.js.map +0 -1
  215. package/dist/chunk-BFI3RS42.js.map +0 -1
  216. package/dist/chunk-EMEX37ZN.js.map +0 -1
  217. package/dist/chunk-EPK6A3WJ.js.map +0 -1
  218. package/dist/chunk-FXQYZNOW.js.map +0 -1
  219. package/dist/chunk-G7PAZ3TD.js.map +0 -1
  220. package/dist/chunk-GDTCGIPX.js.map +0 -1
  221. package/dist/chunk-GVXBHCZ2.js.map +0 -1
  222. package/dist/chunk-HGZ7DC5H.js.map +0 -1
  223. package/dist/chunk-KMI2NBBF.js.map +0 -1
  224. package/dist/chunk-MRIBLZL3.js.map +0 -1
  225. package/dist/chunk-NCO2JGKK.js.map +0 -1
  226. package/dist/chunk-NGSPBLLE.js.map +0 -1
  227. package/dist/chunk-P6256WTJ.js.map +0 -1
  228. package/dist/chunk-T6HQMVML.js.map +0 -1
  229. package/dist/chunk-TLFUDXVV.js.map +0 -1
  230. package/dist/chunk-WRLHNG6H.js.map +0 -1
  231. package/dist/chunk-YDLAFP36.js.map +0 -1
  232. package/dist/chunk-YL2DR3HY.js.map +0 -1
  233. package/dist/chunk-ZC2AAE6J.js.map +0 -1
  234. package/dist/executor-BZKFZVRC.js +0 -8
  235. package/dist/executor-GFZFDQXV.js +0 -8
  236. package/dist/executor-KT2IOZVP.js +0 -11
  237. package/dist/fanout-sidecar-NRBWSLRK.js.map +0 -1
  238. package/dist/issue-BAJ7ZB4S.js +0 -12
  239. package/dist/noydb-XNQSKXGO.js +0 -34
  240. package/dist/registry-2IEARCGT.js +0 -7
  241. package/dist/registry-EMGLZGR6.js +0 -8
  242. package/dist/registry-NQALYR77.js +0 -8
  243. /package/dist/{chunk-5ZGZ6HIZ.js.map → chunk-5VMTAX4Y.js.map} +0 -0
  244. /package/dist/{chunk-75QDHSE4.js.map → chunk-A4JNVBPF.js.map} +0 -0
  245. /package/dist/{chunk-IS5HWQO7.js.map → chunk-ARZAHCCF.js.map} +0 -0
  246. /package/dist/{chunk-4OQWR46B.js.map → chunk-CCC25PA7.js.map} +0 -0
  247. /package/dist/{chunk-NSLTPGEN.js.map → chunk-CGJFCT3X.js.map} +0 -0
  248. /package/dist/{chunk-YK72A4IT.js.map → chunk-CKH247ZR.js.map} +0 -0
  249. /package/dist/{chunk-5YHWBPOT.js.map → chunk-ED3E3OLO.js.map} +0 -0
  250. /package/dist/{chunk-UOF74WQY.js.map → chunk-EKTOYEZ3.js.map} +0 -0
  251. /package/dist/{chunk-SAVQ6E2O.js.map → chunk-G26QAQNI.js.map} +0 -0
  252. /package/dist/{chunk-YMYK7US4.js.map → chunk-HIELMTUK.js.map} +0 -0
  253. /package/dist/{chunk-LOL725S4.js.map → chunk-JSYTGEX4.js.map} +0 -0
  254. /package/dist/{chunk-FBMXWVGP.js.map → chunk-KGFV72WK.js.map} +0 -0
  255. /package/dist/{chunk-K5PVGKE4.js.map → chunk-MDIC4FAU.js.map} +0 -0
  256. /package/dist/{chunk-ZUMGGHRB.js.map → chunk-OPD3PZOG.js.map} +0 -0
  257. /package/dist/{chunk-LS3JLEIB.js.map → chunk-PS5G6A3Y.js.map} +0 -0
  258. /package/dist/{chunk-KYKMKLJ6.js.map → chunk-PX3MJ6RB.js.map} +0 -0
  259. /package/dist/{chunk-FCDO7UAO.js.map → chunk-R4LTCI6O.js.map} +0 -0
  260. /package/dist/{chunk-UVPGJXVO.js.map → chunk-SGSHQ4PH.js.map} +0 -0
  261. /package/dist/{chunk-6S3LLAQ5.js.map → chunk-TNBIWSQ7.js.map} +0 -0
  262. /package/dist/{chunk-GD3BGKAR.js.map → chunk-UGVDIOY7.js.map} +0 -0
  263. /package/dist/{chunk-FS7A4XNF.js.map → chunk-WEA4TDTJ.js.map} +0 -0
  264. /package/dist/{chunk-QAU5HM6Q.js.map → chunk-XVJFFGTG.js.map} +0 -0
  265. /package/dist/{chunk-2XLVPKXG.js.map → chunk-YJ46RFCD.js.map} +0 -0
  266. /package/dist/{chunk-GAUBWHAF.js.map → chunk-ZQMYB56Z.js.map} +0 -0
  267. /package/dist/{crypto-H2Y3DDFW.js.map → crypto-5UDZZL26.js.map} +0 -0
  268. /package/dist/{delegation-QSC7G5QC.js.map → delegation-42LO4WFO.js.map} +0 -0
  269. /package/dist/{executor-BZKFZVRC.js.map → executor-AWCHQ2KN.js.map} +0 -0
  270. /package/dist/{executor-GFZFDQXV.js.map → executor-RWICJI7J.js.map} +0 -0
  271. /package/dist/{executor-KT2IOZVP.js.map → executor-SOLEQVUB.js.map} +0 -0
  272. /package/dist/{issue-BAJ7ZB4S.js.map → issue-IODMTPME.js.map} +0 -0
  273. /package/dist/{ledger-WOEJUYTP.js.map → ledger-UX4QIHWI.js.map} +0 -0
  274. /package/dist/{noydb-XNQSKXGO.js.map → noydb-FY2666NY.js.map} +0 -0
  275. /package/dist/{public-envelope-OHQ5UZFM.js.map → public-envelope-YKHKP74C.js.map} +0 -0
  276. /package/dist/{registry-2IEARCGT.js.map → registry-446I2NMN.js.map} +0 -0
  277. /package/dist/{registry-CDHASH73.js.map → registry-4NEW7LQY.js.map} +0 -0
  278. /package/dist/{registry-EMGLZGR6.js.map → registry-524KJZG4.js.map} +0 -0
  279. /package/dist/{registry-NQALYR77.js.map → registry-DKEXOJVO.js.map} +0 -0
  280. /package/dist/{revoke-7JOVLZFD.js.map → revoke-R5NIQ74J.js.map} +0 -0
  281. /package/dist/{signer-M4K5HBLD.js.map → signer-WGDJNWSU.js.map} +0 -0
  282. /package/dist/{stale-PAGCS4K5.js.map → stale-74WGLVZ2.js.map} +0 -0
@@ -1,8 +1,8 @@
1
- import { I as IndexStrategy, d as LazyQuery } from './lazy-builder-Rpd-V3jP.js';
1
+ import { I as IndexStrategy, d as LazyQuery } from './lazy-builder-D1MyR1qH.js';
2
2
  import { b as AggregateSpec, A as AggregateStrategy } from './strategy-DSTrsZ8t.js';
3
3
  import { C as CrdtStrategy, a as CrdtMode, b as CrdtState } from './strategy-BSxFXGzb.js';
4
- import { N as NoydbError, Q as Query, ar as RefRegistry, ao as RefDescriptor, a2 as JoinableSource, at as RefViolation, au as ScanBuilder } from './index-BF1B2HB9.js';
5
- import { F as FieldClause, I as IndexDef, C as CollectionIndexes } from './predicate-Dnu81tsS.js';
4
+ import { N as NoydbError, Q as Query, ar as RefRegistry, ao as RefDescriptor, a2 as JoinableSource, at as RefViolation, au as ScanBuilder } from './index-fIPPh5dg.js';
5
+ import { F as FieldClause, I as IndexDef, C as CollectionIndexes } from './predicate-B0IKeBXx.js';
6
6
  import { AttestationFieldSchema, RevocationList } from '@noy-db/attestation';
7
7
 
8
8
  /**
@@ -797,7 +797,7 @@ interface LedgerEntry {
797
797
  * below for the structured payload.
798
798
  *
799
799
  * `'lifecycle'` records a non-data audit event (e.g. partition
800
- * handover, #226) — `collection`/`id` are empty and the event detail
800
+ * handover) — `collection`/`id` are empty and the event detail
801
801
  * lives in `reason` (e.g. `'partition-handed-over:<sealId>'`). Like
802
802
  * `amendment`, it carries no data envelope, so `verifyBackupIntegrity`
803
803
  * skips it in the data cross-check (it still participates in the
@@ -828,8 +828,8 @@ interface LedgerEntry {
828
828
  */
829
829
  readonly payloadHash: string;
830
830
  /**
831
- * Optional human-readable tag describing why this mutation happened
832
- * (#1). Threaded through `collection.put(_, _, { reason })`. Common
831
+ * Optional human-readable tag describing why this mutation happened.
832
+ * Threaded through `collection.put(_, _, { reason })`. Common
833
833
  * values include `'import:csv'`, `'import:json'`, `'import:xlsx'` from
834
834
  * `as-*` ImportPlan.apply(), but consumers can use any string for
835
835
  * domain-specific audit filtering. Auto-strip via `canonicalJson` —
@@ -1106,8 +1106,8 @@ interface AppendInput {
1106
1106
  */
1107
1107
  amendment?: LedgerEntry['amendment'];
1108
1108
  /**
1109
- * Optional human-readable tag describing why this mutation happened
1110
- * (#1). Threaded from `collection.put(_, _, { reason })`.
1109
+ * Optional human-readable tag describing why this mutation happened.
1110
+ * Threaded from `collection.put(_, _, { reason })`.
1111
1111
  * Carried verbatim onto the resulting ledger entry's `reason` field;
1112
1112
  * omitted from canonical JSON when undefined.
1113
1113
  */
@@ -1769,17 +1769,34 @@ declare function validateI18nTextValue(value: unknown, field: string, descriptor
1769
1769
  */
1770
1770
  declare function resolveI18nText(value: Record<string, string>, locale: string, fallback?: string | readonly string[], field?: string): string | Record<string, string>;
1771
1771
  /**
1772
- * Apply locale resolution to a single record, in-place over a copy.
1772
+ * Return all leaf values at `path`, expanding `[].` array wildcards.
1773
+ *
1774
+ * - `'name'` → `[obj.name]`
1775
+ * - `'address.lineOne'` → `[obj.address.lineOne]`
1776
+ * - `'contacts[].title'` → `[obj.contacts[0].title, obj.contacts[1].title, …]`
1777
+ *
1778
+ * Returns an empty array when the path does not resolve (missing key,
1779
+ * wrong type, etc.). Used by `enforceI18nOnPut` to validate nested fields.
1780
+ */
1781
+ declare function getAtPath(obj: Record<string, unknown>, path: string): unknown[];
1782
+ /**
1783
+ * Mutate `obj` in-place, setting `value` at the nested `path`.
1784
+ * Supports dot notation (`'address.lineOne'`) but not array wildcards —
1785
+ * auto-translate on `contacts[].title` style paths is not supported.
1786
+ */
1787
+ declare function setAtPathInPlace(obj: Record<string, unknown>, path: string, value: unknown): void;
1788
+ /**
1789
+ * Apply locale resolution to a single record, returning a new copy.
1773
1790
  *
1774
1791
  * For each field registered as an `i18nText` descriptor:
1775
1792
  * - If `locale === 'raw'`, the field value is left as the stored map.
1776
1793
  * - Otherwise, the field value is replaced with the resolved string.
1777
1794
  *
1778
- * Records that are not plain objects (null, array, primitives) are
1779
- * returned unchanged.
1795
+ * Field paths support dot notation (`'address.lineOne'`) and array
1796
+ * wildcards (`'contacts[].title'`). Top-level fields work as before.
1780
1797
  *
1781
1798
  * @param record The decrypted record.
1782
- * @param i18nFields Map of field name → `I18nTextDescriptor`.
1799
+ * @param i18nFields Map of field path → `I18nTextDescriptor`.
1783
1800
  * @param locale The requested locale (or `'raw'`).
1784
1801
  * @param fallback Fallback chain (optional).
1785
1802
  */
@@ -1848,7 +1865,6 @@ interface PassphrasePolicy {
1848
1865
  * double-space). For non-space-delimited word semantics, use
1849
1866
  * {@link customValidator} instead.
1850
1867
  *
1851
- * Added in pre.8 (#31).
1852
1868
  */
1853
1869
  readonly pattern?: RegExp;
1854
1870
  /**
@@ -1866,7 +1882,6 @@ interface PassphrasePolicy {
1866
1882
  * {@link assertStrongPassphrase} dispatches on — `ok: true` accepts;
1867
1883
  * `ok: false` throws `WeakPassphraseError` with the supplied reason.
1868
1884
  *
1869
- * Added in pre.8 (#31).
1870
1885
  */
1871
1886
  readonly customValidator?: (phrase: string) => PassphraseValidationResult;
1872
1887
  }
@@ -1983,7 +1998,7 @@ interface UnlockedKeyring {
1983
1998
  * - Unencrypted mode (no KEK exists)
1984
1999
  * - Tier-3 PIN quick-resume (`@noy-db/on-pin`)
1985
2000
  * - Wrap-DEKs tier-2 unlock (`@noy-db/on-password`'s
1986
- * `verifyPasswordSlot` after #26 Path C)
2001
+ * `verifyPasswordSlot`)
1987
2002
  * - Session-state restore (`session/session.ts`)
1988
2003
  * - Dev-unlock fixture (`session/dev-unlock.ts`)
1989
2004
  *
@@ -1992,9 +2007,8 @@ interface UnlockedKeyring {
1992
2007
  * null-check and throw a clear error if absent — re-authenticate
1993
2008
  * at tier 1 first to recover the KEK.
1994
2009
  *
1995
- * Tightened from `CryptoKey` to `CryptoKey | null` in pre.8 (#41).
1996
- * The runtime contract has always allowed null; the type now
1997
- * matches reality.
2010
+ * Tightened from `CryptoKey` to `CryptoKey | null`; the runtime
2011
+ * contract has always allowed null, the type now matches reality.
1998
2012
  */
1999
2013
  readonly kek: CryptoKey | null;
2000
2014
  readonly salt: Uint8Array;
@@ -2015,7 +2029,7 @@ interface UnlockedKeyring {
2015
2029
  /**
2016
2030
  * Tier-2 authenticator slots — readonly snapshot loaded from the
2017
2031
  * keyring file. Mutations go through `enrollAuthenticator` /
2018
- * `removeAuthenticator` (issue #11), which write back via
2032
+ * `removeAuthenticator`, which write back via
2019
2033
  * `persistKeyring`. Always defined; loads with an empty array for
2020
2034
  * keyrings written before the multi-slot extension landed.
2021
2035
  */
@@ -2068,7 +2082,6 @@ declare function revoke(adapter: NoydbStore, vault: string, callerKeyring: Unloc
2068
2082
  * @throws `PermissionDeniedError` when the role hierarchy rejects.
2069
2083
  * @throws `ValidationError` when the diff is empty (nothing to update).
2070
2084
  *
2071
- * @see #54
2072
2085
  */
2073
2086
  declare function updateKeyringIdentity(adapter: NoydbStore, vault: string, callerKeyring: UnlockedKeyring, options: UpdateUserOptions): Promise<void>;
2074
2087
  /**
@@ -2163,7 +2176,7 @@ interface ListUsersOptions {
2163
2176
  * `userEnvelopeDek` is the vault's `_users` collection DEK
2164
2177
  * (`vault.getDEK('_users')`); used to decrypt every envelope.
2165
2178
  *
2166
- * `callerRole` (#122) drives the directory-visibility checks:
2179
+ * `callerRole` drives the directory-visibility checks:
2167
2180
  *
2168
2181
  * - When the vault's `_meta/directory` document has `enabled: false`,
2169
2182
  * only `owner` and `admin` callers may enumerate; anyone else gets
@@ -2173,7 +2186,7 @@ interface ListUsersOptions {
2173
2186
  * `{ includeHidden: true }` to see them; lower roles passing that
2174
2187
  * option get `PermissionDeniedError`.
2175
2188
  *
2176
- * Honest caveat (#122): these filters are a UX hint, not a security
2189
+ * Honest caveat: these filters are a UX hint, not a security
2177
2190
  * boundary. The keyring file is still listed at `_keyring/*` and the
2178
2191
  * envelope ciphertext at `_users/*`. A caller with direct store access
2179
2192
  * — or a caller that calls this function with `callerRole: 'owner'`
@@ -2550,7 +2563,7 @@ interface I18nStrategy {
2550
2563
  }
2551
2564
 
2552
2565
  /**
2553
- * Observable write-queue (#227, M12 Slice 1).
2566
+ * Observable write-queue.
2554
2567
  *
2555
2568
  * Tracks outstanding in-flight *logical* writes (a full Collection.put /
2556
2569
  * delete, including ledger + cache + derivation + MV dispatch — not just
@@ -2597,7 +2610,7 @@ declare class WriteQueueTracker implements WriteQueue {
2597
2610
  }
2598
2611
 
2599
2612
  /**
2600
- * Hub-level write lifecycle hooks (#230). `onBeforeWrite` may abort (throw);
2613
+ * Hub-level write lifecycle hooks. `onBeforeWrite` may abort (throw);
2601
2614
  * `onAfterWrite` is awaited and its errors are warned, not thrown. A
2602
2615
  * re-entrancy flag suppresses nested firing so a handler that writes can't
2603
2616
  * loop. Held on the Noydb instance, threaded into every Collection.
@@ -2616,15 +2629,15 @@ interface WriteEvent {
2616
2629
  readonly txId: string;
2617
2630
  }
2618
2631
  type WriteHook = (event: WriteEvent) => void | Promise<void>;
2619
- type Unsubscribe$2 = () => void;
2632
+ type Unsubscribe$3 = () => void;
2620
2633
  declare class WriteHookRegistry {
2621
2634
  #private;
2622
2635
  /** True while handlers are running — used by the write path to skip nested firing. */
2623
2636
  get suppressed(): boolean;
2624
2637
  /** True when any hook is registered (cheap gate for the write path). */
2625
2638
  get hasHandlers(): boolean;
2626
- onBeforeWrite(handler: WriteHook): Unsubscribe$2;
2627
- onAfterWrite(handler: WriteHook): Unsubscribe$2;
2639
+ onBeforeWrite(handler: WriteHook): Unsubscribe$3;
2640
+ onAfterWrite(handler: WriteHook): Unsubscribe$3;
2628
2641
  /** Run before-hooks (awaited, in order). A throw propagates and aborts the write. */
2629
2642
  runBefore(event: WriteEvent): Promise<void>;
2630
2643
  /** Run after-hooks (awaited, in order). Per-handler errors are warned, not thrown. */
@@ -2632,7 +2645,113 @@ declare class WriteHookRegistry {
2632
2645
  }
2633
2646
 
2634
2647
  /**
2635
- * Schema-update strategy framework types (#245, M12 §3a).
2648
+ * Generic per-instance **observe** bus. Observe-class
2649
+ * subsystems (devtools inspector, audit, sync-dirty notification) register
2650
+ * handlers against named lifecycle points instead of the kernel naming each
2651
+ * subsystem. Mirrors the registry pattern of {@link WriteHookRegistry} but is
2652
+ * internal and keyed by lifecycle point.
2653
+ *
2654
+ * OBSERVE SEMANTICS: handlers react to a write that already happened. A
2655
+ * handler throw is warned, not propagated — it can never abort a write. Write-
2656
+ * *gating* subsystems (guards, periods) need a throw-propagating gate bus.
2657
+ * Add observe points by extending {@link LifecycleEventMap}. Write-*gating*
2658
+ * subsystems use the sibling gate API on this same class
2659
+ * (`registerGate`/`dispatchGate`, throw-propagating); see {@link GateEventMap}.
2660
+ *
2661
+ * @module
2662
+ */
2663
+
2664
+ /** Typed map of OBSERVE lifecycle point → event payload. Extend by adding keys. */
2665
+ interface LifecycleEventMap {
2666
+ afterPut: WriteEvent;
2667
+ afterDelete: WriteEvent;
2668
+ }
2669
+ type LifecyclePoint = keyof LifecycleEventMap;
2670
+ type BusHandler<P extends LifecyclePoint> = (event: LifecycleEventMap[P]) => void | Promise<void>;
2671
+ type Unsubscribe$2 = () => void;
2672
+ /** Payload for a `beforePut` gate — carries the data guards and periods need to validate or reject a write. */
2673
+ interface GatePutEvent {
2674
+ readonly op: 'create' | 'update';
2675
+ readonly vault: string;
2676
+ readonly collection: string;
2677
+ readonly docId: string;
2678
+ /** The record about to be written (pre schema-validation). */
2679
+ readonly incoming: unknown;
2680
+ /** Decrypted prior record, or null on create / when prior is unreadable. */
2681
+ readonly existing: unknown;
2682
+ /** Prior envelope version, or 0 when none. */
2683
+ readonly existingVersion: number;
2684
+ /** Prior envelope timestamp (`_ts` ISO string), or undefined when none — periods compares against this. */
2685
+ readonly existingTs: string | undefined;
2686
+ readonly userId: string;
2687
+ readonly role: Role;
2688
+ }
2689
+ /** Payload for a `beforeDelete` gate. Like {@link GatePutEvent} without `incoming`. */
2690
+ interface GateDeleteEvent {
2691
+ readonly vault: string;
2692
+ readonly collection: string;
2693
+ readonly docId: string;
2694
+ /** True for system-internal (housekeeping) deletes — handlers branch on this. */
2695
+ readonly internal: boolean;
2696
+ readonly existing: unknown;
2697
+ readonly existingVersion: number;
2698
+ readonly existingTs: string | undefined;
2699
+ readonly userId: string;
2700
+ readonly role: Role;
2701
+ }
2702
+ /** Typed map of GATE lifecycle point → event payload. Extend by adding keys. */
2703
+ interface GateEventMap {
2704
+ beforePut: GatePutEvent;
2705
+ beforeDelete: GateDeleteEvent;
2706
+ }
2707
+ type GatePoint = keyof GateEventMap;
2708
+ type GateHandler<P extends GatePoint> = (event: GateEventMap[P]) => void | Promise<void>;
2709
+ declare class SubsystemBus {
2710
+ #private;
2711
+ /** Register a handler for an observe point. Returns an unsubscribe fn. */
2712
+ register<P extends LifecyclePoint>(point: P, handler: BusHandler<P>): Unsubscribe$2;
2713
+ /** Cheap gate for the write path — true when any handler is registered for the point. */
2714
+ hasHandlers(point: LifecyclePoint): boolean;
2715
+ /**
2716
+ * True while one or more dispatches are in flight. Backed by a depth counter
2717
+ * so that two concurrent async dispatches (`Promise.all([put('a'), put('b')])`
2718
+ * each captured `busAfterPut=true` at their respective put() tops while depth
2719
+ * was 0) both proceed independently — the counter stays > 0 until BOTH finish,
2720
+ * so any nested write attempted by a handler still sees `dispatching === true`
2721
+ * and is suppressed by the write-path gate in `collection.ts`
2722
+ * (`busAfterPut = hasHandlers('afterPut') && !dispatching`). Re-entrancy
2723
+ * suppression lives exclusively on that write-path gate; concurrent independent
2724
+ * dispatches must not drop each other's events.
2725
+ */
2726
+ get dispatching(): boolean;
2727
+ /**
2728
+ * Dispatch in registration order, awaited. Per-handler errors are warned, not
2729
+ * thrown — an observe handler must never abort a completed write. A
2730
+ * re-entrancy guard suppresses nested firing so a handler that itself writes
2731
+ * cannot loop (same rationale as WriteHookRegistry.#suppressed).
2732
+ */
2733
+ dispatch<P extends LifecyclePoint>(point: P, event: LifecycleEventMap[P]): Promise<void>;
2734
+ /** Register a write-gating handler. A throw from the handler ABORTS the write. Returns an unsubscribe fn. */
2735
+ registerGate<P extends GatePoint>(point: P, handler: GateHandler<P>): Unsubscribe$2;
2736
+ /** Cheap gate for the write path — true when any gate handler is registered for the point. */
2737
+ hasGateHandlers(point: GatePoint): boolean;
2738
+ /**
2739
+ * Run gate handlers in registration order, awaited. Unlike `dispatch`
2740
+ * (observe), a handler throw is NOT swallowed — it PROPAGATES, aborting the
2741
+ * write before it reaches the store. The first throw stops the remaining
2742
+ * handlers (fail-fast). This is the seam guards/periods migrate onto.
2743
+ *
2744
+ * Note: gate handlers are validators that read, not write. A gate handler
2745
+ * that writes back into the same collection would re-enter the write path
2746
+ * and re-dispatch this point; loop-suppression for that case is deferred to
2747
+ * the migration slice (contract: gate handlers must not perform writes that
2748
+ * re-trigger their own point).
2749
+ */
2750
+ dispatchGate<P extends GatePoint>(point: P, event: GateEventMap[P]): Promise<void>;
2751
+ }
2752
+
2753
+ /**
2754
+ * Schema-update strategy framework types (M12 §3a).
2636
2755
  *
2637
2756
  * The hub core detects a schema change (SchemaDelta) and dispatches it
2638
2757
  * through a collection's ordered strategy list. Strategies decide what
@@ -2661,13 +2780,13 @@ interface SchemaDelta {
2661
2780
  interface UpdateContext {
2662
2781
  readonly collection: string;
2663
2782
  }
2664
- /** Bulk transform run by the coordinatedCutover strategy (#232). */
2783
+ /** Bulk transform run by the coordinatedCutover strategy. */
2665
2784
  type TransformFn = (doc: Record<string, unknown>) => Record<string, unknown>;
2666
2785
  /**
2667
2786
  * A strategy's verdict on a detected schema change.
2668
2787
  * - `allow` — no objection; the dispatcher falls through to the next strategy.
2669
2788
  * - `reject` — terminal: refuse the change; `error` is thrown at the write path.
2670
- * - `cutover` — terminal: run a coordinated drain-barrier (handled by #232).
2789
+ * - `cutover` — terminal: run a coordinated drain-barrier (handled by coordinatedCutover).
2671
2790
  * New terminal actions may be added without breaking existing strategies.
2672
2791
  */
2673
2792
  type UpdateDecision = {
@@ -2686,7 +2805,7 @@ interface SchemaUpdateStrategy {
2686
2805
  }
2687
2806
 
2688
2807
  /**
2689
- * Per-collection write gate (#245). Holds the (async) update decision
2808
+ * Per-collection write gate. Holds the (async) update decision
2690
2809
  * computed at registration; `Collection.put`/`delete` await it before
2691
2810
  * writing and throw the strategy's rejection error.
2692
2811
  *
@@ -2703,7 +2822,7 @@ declare class SchemaUpdateGate {
2703
2822
  }
2704
2823
 
2705
2824
  /**
2706
- * Schema-fence document (#232). Vault-level generation counter + drain
2825
+ * Schema-fence document. Vault-level generation counter + drain
2707
2826
  * state, stored at `_meta/schema-fence` using the plaintext-envelope
2708
2827
  * pattern of `_meta/policy` (no PII — a counter + a state enum).
2709
2828
  */
@@ -2715,7 +2834,7 @@ interface FenceDoc {
2715
2834
  }
2716
2835
 
2717
2836
  /**
2718
- * Vault-level schema-fence controller (#232).
2837
+ * Vault-level schema-fence controller.
2719
2838
  *
2720
2839
  * Owns the open-time generation snapshot, the pending-cutover registry,
2721
2840
  * and the cutover orchestration. 3a: single-client (the caller is the
@@ -3313,7 +3432,7 @@ declare class SyncEngine {
3313
3432
  }
3314
3433
 
3315
3434
  /**
3316
- * **Wrap-DEKs primitive (#44)** — a single canonical shape for the
3435
+ * **Wrap-DEKs primitive** — a single canonical shape for the
3317
3436
  * pattern of "serialize a DEK set, encrypt it under a credential-derived
3318
3437
  * AES-GCM key." Used by:
3319
3438
  *
@@ -3331,7 +3450,7 @@ declare class SyncEngine {
3331
3450
  * `PIN_PBKDF2_ITERATIONS` and the threat-model rationale in its
3332
3451
  * module docstring.
3333
3452
  *
3334
- * Before #44, the same crypto lived in two places: `mintPaperRecoveryEntry`
3453
+ * Previously, the same crypto lived in two places: `mintPaperRecoveryEntry`
3335
3454
  * (in `team/recovery.ts`) and `enrollPasswordAuthenticator` (in
3336
3455
  * `@noy-db/on-password`). Both functions did identical work — PBKDF2
3337
3456
  * the credential, AES-GCM-encrypt the JSON-serialized DEK set — but
@@ -3358,7 +3477,7 @@ declare class SyncEngine {
3358
3477
  * Composition: `PaperRecoveryEntry extends WrappedDeksBlob` plus
3359
3478
  * `{ codeId, enrolledAt }`. `KeyringAuthenticatorWrappingDEKs`
3360
3479
  * carries the same three fields with `salt` stored in `meta` for
3361
- * slot-format back-compat (#44 defers moving it to top-level).
3480
+ * slot-format back-compat (defers moving it to top-level).
3362
3481
  */
3363
3482
  interface WrappedDeksBlob {
3364
3483
  /** Base64 PBKDF2 salt for the credential-derived wrapping key. */
@@ -3415,9 +3534,9 @@ interface ShamirRecoveryProvider {
3415
3534
  }
3416
3535
 
3417
3536
  /**
3418
- * Recovery profile persistence + dispatch — issue #10.
3537
+ * Recovery profile persistence + dispatch.
3419
3538
  *
3420
- * v0.1.0-pre.5 wires the **paper** profile end-to-end through
3539
+ * Wires the **paper** profile end-to-end through
3421
3540
  * `@noy-db/on-recovery`. The other three profiles (Shamir,
3422
3541
  * multi-channel, admin-mediated) ship the API surface and throw
3423
3542
  * {@link RecoveryProfileNotImplementedError} during use; per-profile
@@ -3454,7 +3573,7 @@ interface ShamirRecoveryProvider {
3454
3573
  * PBKDF2-derived key), and it sidesteps the non-extractable-KEK
3455
3574
  * constraint cleanly.
3456
3575
  *
3457
- * Type-level composition (#44): `PaperRecoveryEntry extends
3576
+ * Type-level composition: `PaperRecoveryEntry extends
3458
3577
  * WrappedDeksBlob` — the three crypto fields (`salt`, `iv`,
3459
3578
  * `wrappedDeks`) come from the shared primitive; `codeId` and
3460
3579
  * `enrolledAt` are paper-recovery's own metadata. Wire format
@@ -3568,7 +3687,7 @@ declare function unwrapDeksFromShamirEntry(provider: ShamirRecoveryProvider, ent
3568
3687
  * {@link savePaperRecoveryEntries}). The recovery flow unwraps the
3569
3688
  * DEK set, then mints a fresh KEK from the user's new passphrase.
3570
3689
  *
3571
- * Thin wrapper over {@link mintWrappedDeksBlob} (#44) — the crypto
3690
+ * Thin wrapper over {@link mintWrappedDeksBlob} — the crypto
3572
3691
  * lives in the shared primitive; this function just adds paper-
3573
3692
  * recovery's own metadata (`codeId`, `enrolledAt`).
3574
3693
  *
@@ -3583,14 +3702,14 @@ declare function mintPaperRecoveryEntry(deks: Map<string, CryptoKey>, code: stri
3583
3702
  * Decrypt a recovery entry to recover the raw DEK set. Used by the
3584
3703
  * `recoverPassphrase` flow after the user's code has been parsed.
3585
3704
  *
3586
- * Thin wrapper over {@link unwrapDeksFromBlob} (#44).
3705
+ * Thin wrapper over {@link unwrapDeksFromBlob}.
3587
3706
  *
3588
3707
  * @throws when the code does not match the entry (AES-GCM auth tag fail).
3589
3708
  */
3590
3709
  declare function unwrapDeksFromPaperEntry(entry: PaperRecoveryEntry, code: string): Promise<Map<string, CryptoKey>>;
3591
3710
 
3592
3711
  /**
3593
- * Tier-2 authenticator slot management — issue #11.
3712
+ * Tier-2 authenticator slot management.
3594
3713
  *
3595
3714
  * Each slot independently wraps the SAME KEK under a method-specific
3596
3715
  * derived key (LUKS pattern). Enrolling adds a slot; removing drops
@@ -3640,15 +3759,14 @@ type EnrollAuthenticatorOptions = EnrollAuthenticatorWrappingKEKOptions | Enroll
3640
3759
  */
3641
3760
  declare function enrollAuthenticator(store: NoydbStore, vault: string, keyring: UnlockedKeyring, options: EnrollAuthenticatorOptions): Promise<UnlockedKeyring>;
3642
3761
  /**
3643
- * Caller payload for {@link updateAuthenticator} (#55). Mutates only
3762
+ * Caller payload for {@link updateAuthenticator}. Mutates only
3644
3763
  * `meta` — the slot's id, method, and wrap material are immutable
3645
3764
  * through this primitive, preserving the anti-slot-swap guard.
3646
3765
  *
3647
3766
  * `meta` is **merged** at the top level: keys absent from the patch
3648
3767
  * are preserved, keys present overwrite. To clear a meta key, pass
3649
- * `null` for that key explicitly. (Same semantics as #57's
3650
- * `UserApi.updateMe`, scoped to this top-level merge no recursion
3651
- * into nested meta values.)
3768
+ * `null` for that key explicitly. (Same top-level merge semantics as
3769
+ * `UserApi.updateMe`, non-recursive meta is a flat label bag.)
3652
3770
  */
3653
3771
  interface UpdateAuthenticatorOptions {
3654
3772
  readonly meta?: Record<string, unknown>;
@@ -3670,7 +3788,6 @@ interface UpdateAuthenticatorOptions {
3670
3788
  * @throws `NoAccessError` when no slot with the given id exists.
3671
3789
  * @throws `ValidationError` when no patch field is provided.
3672
3790
  *
3673
- * @see #55
3674
3791
  */
3675
3792
  declare function updateAuthenticator(store: NoydbStore, vault: string, keyring: UnlockedKeyring, slotId: string, options: UpdateAuthenticatorOptions): Promise<UnlockedKeyring>;
3676
3793
  /**
@@ -3687,7 +3804,7 @@ declare function findAuthenticator(keyring: UnlockedKeyring, slotId: string): Ke
3687
3804
 
3688
3805
  /**
3689
3806
  * Tier-1 change flows — `rotatePassphrase` (user remembers old) and
3690
- * `recoverPassphrase` (user supplies a recovery proof). Issue #10.
3807
+ * `recoverPassphrase` (user supplies a recovery proof).
3691
3808
  *
3692
3809
  * The two flows share the post-verification half — fresh salt, fresh
3693
3810
  * KEK, rewrap every DEK — and differ only in how they re-derive the
@@ -3753,10 +3870,9 @@ interface RotatePassphraseInput {
3753
3870
  * Map of slot id → re-enrolment ceremony. Slots whose id appears
3754
3871
  * here are PRESERVED across rotation (the ceremony re-derives the
3755
3872
  * method-specific wrapping under the new keyring); slots whose id
3756
- * is absent are DROPPED (the pre-#29 behavior).
3873
+ * is absent are DROPPED (the pre-slot-ceremony behavior).
3757
3874
  *
3758
- * Without this map, `rotatePassphrase` retains the pre-pre.8
3759
- * behavior of wiping every tier-2 slot. Consumers building a
3875
+ * Without this map, `rotatePassphrase` wipes every tier-2 slot. Consumers building a
3760
3876
  * "rotate without losing my biometric" flow supply ceremonies for
3761
3877
  * each slot they want to keep.
3762
3878
  *
@@ -3764,7 +3880,7 @@ interface RotatePassphraseInput {
3764
3880
  * state. Callers wrap individual ceremonies in try/catch + return
3765
3881
  * a sentinel if they want graceful degradation per slot.
3766
3882
  *
3767
- * Added in pre.8 (#29).
3883
+ * Added when slot-ceremony rewrapping landed.
3768
3884
  */
3769
3885
  readonly slotCeremonies?: {
3770
3886
  readonly [slotId: string]: SlotRewrapCeremony;
@@ -3775,10 +3891,10 @@ interface RotatePassphraseInput {
3775
3891
  * under a freshly-derived KEK from `newPassphrase`, and persist.
3776
3892
  *
3777
3893
  * Tier-2 authenticator slots are dropped UNLESS the caller supplies
3778
- * a `slotCeremonies` map (#29) — each ceremony re-derives its
3894
+ * a `slotCeremonies` map — each ceremony re-derives its
3779
3895
  * method-specific wrapping under the new keyring, and hub persists
3780
3896
  * the rewrapped slots atomically with the rotation. Slots whose id
3781
- * isn't in the map are still dropped (pre-pre.8 behavior).
3897
+ * isn't in the map are still dropped.
3782
3898
  *
3783
3899
  * @throws `InvalidKeyError` if `oldPassphrase` does not unwrap the keyring.
3784
3900
  * @throws `WeakPassphraseError` if `newPassphrase` fails the strength rule.
@@ -3789,7 +3905,7 @@ declare function rotatePassphrase(store: NoydbStore, vault: string, userId: stri
3789
3905
  /**
3790
3906
  * Caller payload for {@link recoverPassphrase}.
3791
3907
  *
3792
- * As of #196 slice 1, `paper` and `shamir` are wired end-to-end.
3908
+ * `paper` and `shamir` are wired end-to-end.
3793
3909
  * The remaining two profiles (`multi-channel`, `admin-mediated`)
3794
3910
  * stay outside the union and throw
3795
3911
  * {@link RecoveryProfileNotImplementedError} at the runtime guard
@@ -3819,7 +3935,7 @@ interface RecoverPassphraseInput {
3819
3935
  * After a successful paper-recovery, replace ALL remaining recovery
3820
3936
  * entries with freshly-minted ones. Defaults to `true` (defensive).
3821
3937
  *
3822
- * Rationale (issue #36): the user just demonstrated they had access
3938
+ * Rationale: the user just demonstrated they had access
3823
3939
  * to AT LEAST one code. The remaining codes from the same printed
3824
3940
  * sheet may also be compromised — photographed, leaked via a
3825
3941
  * screen-share slip, or in the hands of whoever stole the sheet.
@@ -3869,7 +3985,7 @@ interface RecoverPassphraseResult {
3869
3985
  readonly newCodes: readonly string[];
3870
3986
  }
3871
3987
  /**
3872
- * Input for {@link Noydb.rotateRecovery} (#121) — deliberate
3988
+ * Input for {@link Noydb.rotateRecovery} — deliberate
3873
3989
  * recovery-credential regeneration when the user knows their
3874
3990
  * passphrase but wants a fresh sheet (paper) or fresh shares
3875
3991
  * (shamir). Symmetric to {@link RotatePassphraseInput}.
@@ -3920,7 +4036,7 @@ interface EnrollRecoveryResult {
3920
4036
  }
3921
4037
  /**
3922
4038
  * Input shape for {@link Noydb.enrollRecovery} and
3923
- * {@link Noydb.openVaultAndEnrollRecovery} (#195). Discriminated
4039
+ * {@link Noydb.openVaultAndEnrollRecovery}. Discriminated
3924
4040
  * union over recovery profiles.
3925
4041
  *
3926
4042
  * - `paper`: caller pre-mints entries (typically via
@@ -3946,9 +4062,8 @@ type RecoveryEnrollmentInput = {
3946
4062
  readonly entryId?: string;
3947
4063
  };
3948
4064
  /**
3949
- * Reset the user's passphrase using a recovery proof. v0.1.0-pre.5
3950
- * supports the `'paper'` profile via `@noy-db/on-recovery` entries
3951
- * persisted in `_meta/recovery-paper`. The other three profiles throw
4065
+ * Reset the user's passphrase using a recovery proof.
4066
+ * Supports `'paper'` and `'shamir'` profiles. The other profiles throw
3952
4067
  * {@link RecoveryProfileNotImplementedError}.
3953
4068
  *
3954
4069
  * On success, the used recovery entry is burned (deleted from the
@@ -3957,7 +4072,7 @@ type RecoveryEnrollmentInput = {
3957
4072
  declare function recoverPassphrase(provider: ShamirRecoveryProvider | undefined, store: NoydbStore, vault: string, userId: string, input: RecoverPassphraseInput): Promise<UnlockedKeyring>;
3958
4073
 
3959
4074
  /**
3960
- * Atomic peer-recovery primitive — issues #33 + #34.
4075
+ * Atomic peer-recovery primitive.
3961
4076
  *
3962
4077
  * `recoverUser` is a SEPARATE operation from `revoke + grant`. It
3963
4078
  * exists because peer-recovery has different semantics than account
@@ -3986,7 +4101,7 @@ declare function recoverPassphrase(provider: ShamirRecoveryProvider | undefined,
3986
4101
  *
3987
4102
  * Caller must be at least as privileged as the target. The hub
3988
4103
  * `db.recoverUser` method gates this with the `peer-recover-user`
3989
- * policy gate (#33's factor-proof requirement); the function below
4104
+ * policy gate (the `peer-recover-user` factor-proof requirement); the function below
3990
4105
  * enforces only the role + anti-privilege-escalation invariants.
3991
4106
  *
3992
4107
  * @module
@@ -4142,7 +4257,7 @@ declare function validatePublicEnvelopeInput(input: SetPublicEnvelopeInput, sche
4142
4257
  declare function isPublicEnvelope(x: unknown): x is PublicEnvelope;
4143
4258
 
4144
4259
  /**
4145
- * Multi-tab coordination (#228a): primary/secondary election (Web Locks)
4260
+ * Multi-tab coordination: primary/secondary election (Web Locks)
4146
4261
  * + presence heartbeat (BroadcastChannel). Browser-only; opt-in; no-op
4147
4262
  * when the APIs are absent. The lock/channel interfaces are hub-local
4148
4263
  * (structurally compatible with @noy-db/by-peer + @noy-db/by-tabs, but
@@ -4186,20 +4301,20 @@ interface TabCoordinationOptions {
4186
4301
  */
4187
4302
  readonly closeChannelOnDispose?: boolean;
4188
4303
  /**
4189
- * Also propagate committed writes to other tabs (#228b). Default true:
4304
+ * Also propagate committed writes to other tabs. Default true:
4190
4305
  * when tab coordination is enabled and a channel is available, a write in
4191
4306
  * one tab refreshes that document in every other tab. Set false to opt out.
4192
4307
  */
4193
4308
  readonly propagateWrites?: boolean;
4194
4309
  /**
4195
- * Channel for write propagation (#228b) — distinct from the presence
4310
+ * Channel for write propagation — distinct from the presence
4196
4311
  * channel. Default: an inline BroadcastChannel on `noydb:tab-writes`.
4197
4312
  */
4198
4313
  readonly writeChannel?: TabChannel;
4199
4314
  }
4200
4315
 
4201
4316
  /**
4202
- * Per-vault tier-3 (PIN / quick-resume) state — issue #11.
4317
+ * Per-vault tier-3 (PIN / quick-resume) state.
4203
4318
  *
4204
4319
  * The hub holds a `PinResumeState`-shaped record in memory, keyed by
4205
4320
  * vault. `enrollUnlock` populates it; `unlockViaPin` consumes it via
@@ -4315,7 +4430,7 @@ interface StagedOp {
4315
4430
  expectedVersion?: number;
4316
4431
  /**
4317
4432
  * Optional human-readable tag forwarded to the resulting ledger
4318
- * entry's `reason` field (#1). Set by callers via
4433
+ * entry's `reason` field. Set by callers via
4319
4434
  * `tx.vault(v).collection(c).put(id, record, { reason })`.
4320
4435
  */
4321
4436
  reason?: string;
@@ -4347,7 +4462,7 @@ interface AmendmentTxOptions {
4347
4462
  * facade; its `put`/`delete`/`get` calls stage ops against the tx.
4348
4463
  */
4349
4464
  declare class TxContext {
4350
- /** Stable id for this transaction; shared by all writes it performs (#230). */
4465
+ /** Stable id for this transaction; shared by all writes it performs. */
4351
4466
  readonly txId: string;
4352
4467
  /** @internal */
4353
4468
  readonly _ops: StagedOp[];
@@ -4357,7 +4472,7 @@ declare class TxContext {
4357
4472
  * restore prior state via `revertExecuted`. Side-effect writes (e.g.
4358
4473
  * recursive derivation outputs fired inside `Collection.put`) are
4359
4474
  * appended here in execution order so they roll back alongside the
4360
- * main staged ops (#133).
4475
+ * main staged ops.
4361
4476
  */
4362
4477
  readonly _executed: ExecutedOp[];
4363
4478
  /** @internal */
@@ -4429,12 +4544,12 @@ declare class TxCollection<T> {
4429
4544
  * in `noydb.ts`. `Collection.putManyAtomic` runs its own Phase 2 loop
4430
4545
  * but shares the `_activeTxContext` mechanism (and the `revertExecuted`
4431
4546
  * helper) so nested side-effect derivation writes get registered for
4432
- * revert alongside the bulk-put source ops (#133).
4547
+ * revert alongside the bulk-put source ops.
4433
4548
  */
4434
4549
  declare function runTransaction<T>(db: Noydb, fn: (tx: TxContext) => Promise<T> | T, options?: AmendmentTxOptions): Promise<T>;
4435
4550
 
4436
4551
  /**
4437
- * Dry-run transactions (#231). Runs the tx body to STAGE ops, then builds
4552
+ * Dry-run transactions. Runs the tx body to STAGE ops, then builds
4438
4553
  * the directly-affected diff (before = current committed via collection.get,
4439
4554
  * after = staged record) and collects guard violations — without executing
4440
4555
  * phase 2. No adapter writes, no write-hooks, no commit. MV/derivation
@@ -4462,7 +4577,7 @@ interface DryRunResult {
4462
4577
  }
4463
4578
 
4464
4579
  /**
4465
- * Policy gate DSL types — issue #9.
4580
+ * Policy gate DSL types.
4466
4581
  *
4467
4582
  * Sensitive operations (rotate the passphrase, enroll an authenticator,
4468
4583
  * export plaintext, grant a user, …) are gated by a typed policy
@@ -4496,12 +4611,10 @@ interface DryRunResult {
4496
4611
  * devices — policies can require ANY of them or insist on a count of 2
4497
4612
  * to force a mix.
4498
4613
  *
4499
- * Added in pre.8 (#30): `webauthn-platform`, `password`, `pin` —
4500
- * previously consumers with no off-device infrastructure (no TOTP,
4501
- * no email-OTP, paper recovery not enrolled) had to disable the
4502
- * factor requirement entirely on `rotate-passphrase`. Now they can
4503
- * pin "any second factor I have wired" without losing the freshness
4504
- * guarantee.
4614
+ * `webauthn-platform`, `password`, `pin` — for consumers with no
4615
+ * off-device infrastructure (no TOTP, no email-OTP, paper recovery not
4616
+ * enrolled) who want to require "any second factor I have wired"
4617
+ * without losing the freshness guarantee.
4505
4618
  */
4506
4619
  type FactorKind = 'totp' | 'email-otp' | 'recovery' | 'shamir' | 'webauthn-roaming' | 'webauthn-platform' | 'password' | 'pin';
4507
4620
  /**
@@ -4545,7 +4658,7 @@ interface GatePolicy {
4545
4658
  type BuiltInGateName = 'rotate-passphrase' | 'recover-passphrase' | 'enroll-authenticator' | 'remove-authenticator'
4546
4659
  /**
4547
4660
  * Authorize a deliberate paper-recovery-code regeneration —
4548
- * `db.rotateRecovery` (#121). Symmetric to `rotate-passphrase` for
4661
+ * `db.rotateRecovery`. Symmetric to `rotate-passphrase` for
4549
4662
  * the case where the user remembers their passphrase but wants a
4550
4663
  * fresh sheet (lost the printout, suspect compromise of the off-site
4551
4664
  * copy). PERSONAL allows tier-1; STRICT requires an off-device
@@ -4555,19 +4668,19 @@ type BuiltInGateName = 'rotate-passphrase' | 'recover-passphrase' | 'enroll-auth
4555
4668
  | 'rotate-recovery'
4556
4669
  /**
4557
4670
  * Authorize a meta-only mutation on an existing authenticator slot —
4558
- * `db.updateAuthenticator` (#55). The slot's wrap material, id, and
4671
+ * `db.updateAuthenticator`. The slot's wrap material, id, and
4559
4672
  * method are immutable through this gate; only the `meta` blob
4560
4673
  * (nicknames, method-specific labels) can change. Anti-slot-swap
4561
4674
  * guard is preserved structurally regardless of this gate's
4562
4675
  * settings.
4563
4676
  */
4564
4677
  | 'update-authenticator' | 'rotate-unlock' | 'enroll-user' | 'revoke-user' | 'export-bundle' | 'export-plaintext' | 'view-user-auth'
4565
- /** Authorize a write to one's own user envelope (#22). */
4678
+ /** Authorize a write to one's own user envelope. */
4566
4679
  | 'edit-own-profile'
4567
- /** Authorize reading other principals' user envelopes (#22). */
4680
+ /** Authorize reading other principals' user envelopes. */
4568
4681
  | 'view-team-profiles'
4569
4682
  /**
4570
- * Authorize an atomic peer-recovery — `db.recoverUser` (#33, #34).
4683
+ * Authorize an atomic peer-recovery — `db.recoverUser`.
4571
4684
  * Distinct from `revoke-user` because peer-recovery is intentional
4572
4685
  * re-issuance of someone's keyring under a temp passphrase, NOT
4573
4686
  * removal. Allows owner→owner natively (matches the threat model:
@@ -4577,7 +4690,7 @@ type BuiltInGateName = 'rotate-passphrase' | 'recover-passphrase' | 'enroll-auth
4577
4690
  */
4578
4691
  | 'peer-recover-user'
4579
4692
  /**
4580
- * Authorize a post-grant identity mutation — `db.updateUser` (#54).
4693
+ * Authorize a post-grant identity mutation — `db.updateUser`.
4581
4694
  * Covers `role`, `displayName`, `permissions` changes on an existing
4582
4695
  * keyring. Pure plaintext-header rewrite — no DEKs touched, no KEK
4583
4696
  * required. The role-elevation guard inside the implementation
@@ -4590,7 +4703,7 @@ type GateName = BuiltInGateName | `app:${string}`;
4590
4703
  /**
4591
4704
  * Top-level policy object. Persisted at `_meta/policy` once at vault
4592
4705
  * creation. The `passphrase` block configures the strength rules
4593
- * applied at every passphrase ingress (issue #7); `gates` configures
4706
+ * applied at every passphrase ingress; `gates` configures
4594
4707
  * the action-level requirements.
4595
4708
  */
4596
4709
  interface VaultPolicy {
@@ -4614,7 +4727,7 @@ interface FactorProof {
4614
4727
  * `db.recoverUser`, `db.enrollUnlock`, `db.describeUserAuth`,
4615
4728
  * `db.describeAllUsersAuth`.
4616
4729
  *
4617
- * Pre-#89 this type was inlined at every call site as
4730
+ * Previously this type was inlined at every call site as
4618
4731
  * `{ factors?: ReadonlyArray<FactorProof>; sharedDevice?: boolean }`
4619
4732
  * and parameter names alternated between `factors` and `presented`.
4620
4733
  * Now exported so consumers can name their helpers and so the param
@@ -4634,13 +4747,14 @@ declare class Noydb {
4634
4747
  private readonly emitter;
4635
4748
  private readonly writeQueueTracker;
4636
4749
  private readonly writeHooks;
4750
+ private readonly subsystemBus;
4637
4751
  private readonly clientId;
4638
4752
  private readonly vaultCache;
4639
4753
  private readonly keyringCache;
4640
4754
  private readonly syncEngines;
4641
4755
  /**
4642
4756
  * Per-vault active session tier — defaults to `1` after a passphrase
4643
- * unlock; tier-2 / tier-3 unlocks (issue #11) downgrade it. Used by
4757
+ * unlock; tier-2 / tier-3 unlocks downgrade it. Used by
4644
4758
  * {@link checkGate} to evaluate `gate.minTier`.
4645
4759
  */
4646
4760
  private readonly activeTier;
@@ -4650,14 +4764,14 @@ declare class Noydb {
4650
4764
  */
4651
4765
  private readonly policyCache;
4652
4766
  /**
4653
- * One-shot bypass for the managed-mode strong-recovery check (#195).
4767
+ * One-shot bypass for the managed-mode strong-recovery check.
4654
4768
  * Set true by {@link openVaultAndEnrollRecovery} for the duration of
4655
4769
  * the bootstrap window so the keyring can be created before the
4656
4770
  * strong recovery is enrolled. Always cleared (try/finally).
4657
4771
  * @internal
4658
4772
  */
4659
4773
  private _skipNextManagedRecoveryCheck;
4660
- /** Per-vault tier-3 (PIN / quick-resume) state — issue #11. */
4774
+ /** Per-vault tier-3 (PIN / quick-resume) state. */
4661
4775
  private readonly quickUnlock;
4662
4776
  /**
4663
4777
  * Resolved public-envelope schema. Lazily computed once from
@@ -4667,9 +4781,9 @@ declare class Noydb {
4667
4781
  private readonly publicEnvelopeSchema;
4668
4782
  private closed;
4669
4783
  private sessionTimer;
4670
- /** Same-device multi-tab coordinator (#228); created on `enableTabCoordination()`. */
4784
+ /** Same-device multi-tab coordinator; created on `enableTabCoordination()`. */
4671
4785
  private tabCoordinator;
4672
- /** Cross-tab write relay (#228b); created on `enableTabCoordination()`. */
4786
+ /** Cross-tab write relay; created on `enableTabCoordination()`. */
4673
4787
  private writeRelay;
4674
4788
  /** Per-vault policy enforcers. */
4675
4789
  private readonly policyEnforcers;
@@ -4682,8 +4796,8 @@ declare class Noydb {
4682
4796
  * the same function's `finally` block. Side-effect writes triggered
4683
4797
  * during a staged op's `Collection.put` (today: eager derivation
4684
4798
  * outputs) register their pre-write envelope on `_executed` here so
4685
- * a mid-batch failure rolls them back alongside the main staged ops
4686
- * (#133). `null` outside of Phase 2.
4799
+ * a mid-batch failure rolls them back alongside the main staged ops.
4800
+ * `null` outside of Phase 2.
4687
4801
  * @internal
4688
4802
  */
4689
4803
  private _activeTxContext;
@@ -4786,8 +4900,6 @@ declare class Noydb {
4786
4900
  * @throws `NoAccessError` when no keyring exists for the target.
4787
4901
  * @throws `PermissionDeniedError` when the role hierarchy rejects.
4788
4902
  * @throws `ValidationError` when no field is provided.
4789
- *
4790
- * @see #54
4791
4903
  */
4792
4904
  updateUser(vault: string, options: UpdateUserOptions, factors?: FactorProofBundle): Promise<void>;
4793
4905
  /**
@@ -4975,7 +5087,7 @@ declare class Noydb {
4975
5087
  */
4976
5088
  transaction<T>(options: AmendmentTxOptions, fn: (tx: TxContext) => Promise<T> | T): Promise<T>;
4977
5089
  /**
4978
- * Dry-run a transaction (#231): run the body to stage ops, then return
5090
+ * Dry-run a transaction: run the body to stage ops, then return
4979
5091
  * the directly-affected diff + collected guard violations WITHOUT
4980
5092
  * committing (no adapter writes, no write hooks). MV/derivation cascade
4981
5093
  * is not simulated. Requires `withTransactions()`.
@@ -5003,7 +5115,7 @@ declare class Noydb {
5003
5115
  * Phase 2. `Collection.dispatchDerivations` consults this so a
5004
5116
  * recursive derived-output write inside `Collection.put` can register
5005
5117
  * its envelope onto `ctx._executed` and roll back with the main
5006
- * staged ops on mid-batch failure (#133).
5118
+ * staged ops on mid-batch failure.
5007
5119
  *
5008
5120
  * @internal
5009
5121
  */
@@ -5028,7 +5140,7 @@ declare class Noydb {
5028
5140
  * `Collection.putManyAtomic` (via `derivationSource.createTxContext`)
5029
5141
  * to publish an active context for the duration of its bulk-atomic
5030
5142
  * Phase 2 loop, so recursive derivation-output writes register on
5031
- * `ctx._executed` and roll back together with the source ops (#133).
5143
+ * `ctx._executed` and roll back together with the source ops.
5032
5144
  *
5033
5145
  * @internal
5034
5146
  */
@@ -5064,19 +5176,19 @@ declare class Noydb {
5064
5176
  */
5065
5177
  get _writeQueueTracker(): WriteQueueTracker;
5066
5178
  /**
5067
- * Register a hook that runs before each write (#230). Awaited; a throw
5179
+ * Register a hook that runs before each write. Awaited; a throw
5068
5180
  * aborts the write. Returns an unsubscribe function.
5069
5181
  */
5070
- onBeforeWrite(handler: WriteHook): Unsubscribe$2;
5182
+ onBeforeWrite(handler: WriteHook): Unsubscribe$3;
5071
5183
  /**
5072
- * Register a hook that runs after each committed write (#230). Awaited;
5184
+ * Register a hook that runs after each committed write. Awaited;
5073
5185
  * a handler error is warned, never rolled back. Returns an unsubscribe fn.
5074
5186
  */
5075
- onAfterWrite(handler: WriteHook): Unsubscribe$2;
5076
- /** Subscribe to cross-tab write conflicts (#228c). Returns an unsubscribe. */
5077
- onWriteConflict(fn: (c: WriteConflict) => void): Unsubscribe$2;
5187
+ onAfterWrite(handler: WriteHook): Unsubscribe$3;
5188
+ /** Subscribe to cross-tab write conflicts. Returns an unsubscribe. */
5189
+ onWriteConflict(fn: (c: WriteConflict) => void): Unsubscribe$3;
5078
5190
  /**
5079
- * Enable same-device multi-tab coordination (#228): primary/secondary
5191
+ * Enable same-device multi-tab coordination: primary/secondary
5080
5192
  * election + presence. Browser-only — a graceful no-op (role 'unknown')
5081
5193
  * when Web Locks / BroadcastChannel are unavailable and nothing is
5082
5194
  * injected. Idempotent; returns a disposer.
@@ -5087,11 +5199,13 @@ declare class Noydb {
5087
5199
  private disableTabCoordination;
5088
5200
  get tabRole(): TabRole;
5089
5201
  activeTabs(): TabPresence[];
5090
- onTabRoleChange(fn: (r: TabRole) => void): Unsubscribe$2;
5091
- onActiveTabsChange(fn: (t: TabPresence[]) => void): Unsubscribe$2;
5202
+ onTabRoleChange(fn: (r: TabRole) => void): Unsubscribe$3;
5203
+ onActiveTabsChange(fn: (t: TabPresence[]) => void): Unsubscribe$3;
5092
5204
  /** @internal The write-hook registry, threaded into each Collection. */
5093
5205
  get _writeHooks(): WriteHookRegistry;
5094
- /** @internal Stable per-instance id for schema-cutover coordination (#232). */
5206
+ /** @internal The observe bus, threaded into every Collection. */
5207
+ get _subsystemBus(): SubsystemBus;
5208
+ /** @internal Stable per-instance id for schema-cutover coordination. */
5095
5209
  get _clientId(): string;
5096
5210
  /**
5097
5211
  * Soft-lock a single vault: clear its in-memory keyring, DEKs, vault
@@ -5109,10 +5223,6 @@ declare class Noydb {
5109
5223
  * survives lock; nothing about it changes when DEKs are scrubbed).
5110
5224
  *
5111
5225
  * No-op when `vault` is not currently in cache (idempotent).
5112
- *
5113
- * Unblocks vLannaAi/niwat#33.
5114
- *
5115
- * @see #17
5116
5226
  */
5117
5227
  lockVault(vault: string): void;
5118
5228
  close(): void;
@@ -5146,7 +5256,7 @@ declare class Noydb {
5146
5256
  */
5147
5257
  updatePolicy(vault: string, override: Partial<VaultPolicy>): Promise<VaultPolicy>;
5148
5258
  /**
5149
- * Read the current vault-level user-directory toggle (#122). Returns
5259
+ * Read the current vault-level user-directory toggle. Returns
5150
5260
  * the default-on shape (`{ enabled: true }`) when no `_meta/directory`
5151
5261
  * document has been persisted yet.
5152
5262
  *
@@ -5154,7 +5264,7 @@ declare class Noydb {
5154
5264
  */
5155
5265
  getDirectoryEnabled(vault: string): Promise<boolean>;
5156
5266
  /**
5157
- * Toggle the vault's user-directory listing on or off (#122).
5267
+ * Toggle the vault's user-directory listing on or off.
5158
5268
  * Owner-only. When disabled, `listUsersWithEnvelopes()` throws
5159
5269
  * {@link import('./errors.js').DirectoryDisabledError} for callers
5160
5270
  * whose role is neither `owner` nor `admin`.
@@ -5186,7 +5296,7 @@ declare class Noydb {
5186
5296
  *
5187
5297
  * Two enforcement modes:
5188
5298
  *
5189
- * 1. **Managed-mode mandatory strong-recovery (#195).** When
5299
+ * 1. **Managed-mode mandatory strong-recovery.** When
5190
5300
  * `passphraseMode === 'managed'`, the vault MUST have at least
5191
5301
  * one **strong** recovery profile (Shamir today). Paper alone is
5192
5302
  * rejected because under managed mode the user has no memorized
@@ -5206,7 +5316,7 @@ declare class Noydb {
5206
5316
  */
5207
5317
  private assertRecoveryEnrolled;
5208
5318
  /**
5209
- * Internal accessor used by tier-2/tier-3 unlock paths (issue #11)
5319
+ * Internal accessor used by tier-2/tier-3 unlock paths
5210
5320
  * to mark the active session tier.
5211
5321
  * @internal
5212
5322
  */
@@ -5230,7 +5340,7 @@ declare class Noydb {
5230
5340
  * `remove-authenticator`.
5231
5341
  */
5232
5342
  removeAuthenticator(vault: string, slotId: string, factors?: FactorProofBundle): Promise<void>;
5233
- /** Read the slot list for a vault. Internal — `describeAuthConfig` (#13) consumes this. */
5343
+ /** Read the slot list for a vault. Internal — `describeAuthConfig` consumes this. */
5234
5344
  listAuthenticators(vault: string): Promise<ReadonlyArray<KeyringAuthenticator>>;
5235
5345
  /**
5236
5346
  * Mutate the `meta` blob on an existing authenticator slot — slot
@@ -5239,7 +5349,7 @@ declare class Noydb {
5239
5349
  * are immutable through this method. Anti-slot-swap is structural,
5240
5350
  * not gate-driven.
5241
5351
  *
5242
- * `meta` patch semantics (#57-aligned):
5352
+ * `meta` patch semantics (top-level merge):
5243
5353
  * - Top-level merge — absent keys preserved
5244
5354
  * - `null` value — delete that meta key
5245
5355
  * - Other values — replace verbatim
@@ -5257,12 +5367,10 @@ declare class Noydb {
5257
5367
  *
5258
5368
  * @throws `NoAccessError` when no slot with the given id exists.
5259
5369
  * @throws `ValidationError` when no patch field is provided.
5260
- *
5261
- * @see #55
5262
5370
  */
5263
5371
  updateAuthenticator(vault: string, slotId: string, options: UpdateAuthenticatorOptions, factors?: FactorProofBundle): Promise<void>;
5264
5372
  /**
5265
- * Native WebAuthn enrollment using the **real** internal keyring (#16).
5373
+ * Native WebAuthn enrollment using the **real** internal keyring.
5266
5374
  *
5267
5375
  * Why this exists: when a consumer is using `createNoydb({ secret })`,
5268
5376
  * they cannot reach the live `UnlockedKeyring` to feed it to
@@ -5305,8 +5413,6 @@ declare class Noydb {
5305
5413
  * a server-side allowlist).
5306
5414
  *
5307
5415
  * Gated by `enroll-authenticator` like `enrollAuthenticator()` itself.
5308
- *
5309
- * @see #16
5310
5416
  */
5311
5417
  enrollWebAuthn(vault: string, ceremony: (keyring: UnlockedKeyring) => Promise<EnrollAuthenticatorOptions>, factors?: FactorProofBundle): Promise<{
5312
5418
  credentialId: string;
@@ -5317,8 +5423,6 @@ declare class Noydb {
5317
5423
  * deciding when a new device prompt should appear. Identity is
5318
5424
  * `id` + `enrolled_at`; the `meta.credentialId` (base64) is used by
5319
5425
  * `allowCredentials` at unlock time.
5320
- *
5321
- * @see #16
5322
5426
  */
5323
5427
  listWebAuthnSlots(vault: string): Promise<ReadonlyArray<{
5324
5428
  id: string;
@@ -5382,8 +5486,7 @@ declare class Noydb {
5382
5486
  *
5383
5487
  * Tier-2 authenticator slots are dropped — each slot wraps the old
5384
5488
  * KEK and would need its derivation key to be re-presented. Re-enrol
5385
- * via `db.enrollAuthenticator` after rotation. Tracked as a
5386
- * v0.1.0-pre.5 limitation.
5489
+ * via `db.enrollAuthenticator` after rotation.
5387
5490
  *
5388
5491
  * @throws `WeakPassphraseError` on a weak new phrase.
5389
5492
  * @throws `PolicyDeniedError` when the gate denies (missing factor, …).
@@ -5392,14 +5495,14 @@ declare class Noydb {
5392
5495
  rotatePassphrase(vault: string, input: RotatePassphraseInput, factors?: FactorProofBundle): Promise<void>;
5393
5496
  /**
5394
5497
  * Reset the passphrase using a recovery proof (user forgot the old).
5395
- * v0.1.0-pre.5 supports the `'paper'` profile end-to-end; the
5396
- * other three profiles throw {@link RecoveryProfileNotImplementedError}.
5498
+ * Currently supports the `'paper'` profile end-to-end; the
5499
+ * other profiles throw {@link RecoveryProfileNotImplementedError}.
5397
5500
  *
5398
5501
  * Burns the used recovery entry on success.
5399
5502
  */
5400
5503
  recoverPassphrase(vault: string, input: RecoverPassphraseInput, factors?: FactorProofBundle): Promise<RecoverPassphraseResult>;
5401
5504
  /**
5402
- * Deliberate paper-recovery-code regeneration (#121). User knows their
5505
+ * Deliberate paper-recovery-code regeneration. User knows their
5403
5506
  * passphrase but wants a fresh sheet — they lost the printout or
5404
5507
  * suspect compromise of the off-site copy.
5405
5508
  *
@@ -5409,7 +5512,7 @@ declare class Noydb {
5409
5512
  *
5410
5513
  * Gated by the `rotate-recovery` policy gate:
5411
5514
  * - PERSONAL_POLICY: `{ minTier: 1 }` — knowing the passphrase
5412
- * suffices, matching the pre-#121 low-level flow's bar.
5515
+ * suffices, matching the lower-level flow's bar.
5413
5516
  * - STRICT_POLICY: `{ minTier: 1, factors: [{ anyOf: ['totp',
5414
5517
  * 'email-otp', 'webauthn-roaming'] }] }` — rotation is an
5415
5518
  * off-site-trust event; require an off-device factor so a
@@ -5445,7 +5548,7 @@ declare class Noydb {
5445
5548
  private rotateRecoveryPaper;
5446
5549
  private rotateRecoveryShamir;
5447
5550
  /**
5448
- * **Atomic create-and-enroll for managed-mode vaults (#195).**
5551
+ * **Atomic create-and-enroll for managed-mode vaults.**
5449
5552
  *
5450
5553
  * Bootstraps a managed-mode vault and enrolls strong recovery in
5451
5554
  * a single ceremony. Under `passphraseMode: 'managed'`, every
@@ -5490,7 +5593,7 @@ declare class Noydb {
5490
5593
  readonly recoveryEnrollments: ReadonlyArray<EnrollRecoveryResult>;
5491
5594
  }>;
5492
5595
  /**
5493
- * **Recovery flow under managed-passphrase mode (#195).**
5596
+ * **Recovery flow under managed-passphrase mode.**
5494
5597
  *
5495
5598
  * Replaces the sealed passphrase of a managed-mode vault with a
5496
5599
  * fresh 256-bit random, sealed under the configured
@@ -5507,7 +5610,7 @@ declare class Noydb {
5507
5610
  * 5. Drop the keyring cache so the next operation re-derives.
5508
5611
  *
5509
5612
  * The vault's strong-recovery enrollment is preserved across
5510
- * recovery (Shamir entries are not burned on use — see #196).
5613
+ * recovery (Shamir entries are not burned on use).
5511
5614
  *
5512
5615
  * @throws ValidationError if the Noydb instance is not in managed mode.
5513
5616
  */
@@ -5517,7 +5620,7 @@ declare class Noydb {
5517
5620
  }): Promise<void>;
5518
5621
  /**
5519
5622
  * Atomic peer-recovery — re-wraps an EXISTING user's keyring under
5520
- * a fresh temp passphrase in a single store write. Closes #34's
5623
+ * a fresh temp passphrase in a single store write. Closes the
5521
5624
  * partial-failure window (the previous compose-from-primitives
5522
5625
  * pattern was `db.revoke + db.grant`, two writes — if the issuer
5523
5626
  * cancelled between them the target was locked out entirely).
@@ -5527,7 +5630,7 @@ declare class Noydb {
5527
5630
  * - Same `userId`, role, permissions, capabilities preserved.
5528
5631
  * - DEKs unchanged → every other principal in the vault keeps
5529
5632
  * access. No key rotation.
5530
- * - Allows owner→owner natively (#33). The existing
5633
+ * - Allows owner→owner natively. The existing
5531
5634
  * `db.revoke` retains its block — peer-recovery is a separate,
5532
5635
  * intentionally-named operation.
5533
5636
  * - Tier-2 slots dropped (they wrap the old KEK).
@@ -5556,11 +5659,10 @@ declare class Noydb {
5556
5659
  * @throws `PrivilegeEscalationError` when the caller lacks a DEK
5557
5660
  * the target previously had access to.
5558
5661
  *
5559
- * @see #33 #34 — the issues this method closes.
5560
5662
  */
5561
5663
  recoverUser(vault: string, options: RecoverUserOptions, factors?: FactorProofBundle): Promise<void>;
5562
5664
  /**
5563
- * Persist a recovery enrollment. v0.1.0-pre.5 accepts the `'paper'`
5665
+ * Persist a recovery enrollment. Accepts the `'paper'`
5564
5666
  * profile.
5565
5667
  *
5566
5668
  * The hub wraps the user's DEK set (not the KEK) under a code-derived
@@ -5580,7 +5682,7 @@ declare class Noydb {
5580
5682
  * showCodesToUser(codes)
5581
5683
  * ```
5582
5684
  *
5583
- * As of pre.8, `@noy-db/on-recovery`'s `generateRecoveryCodeSet`
5685
+ * `@noy-db/on-recovery`'s `generateRecoveryCodeSet`
5584
5686
  * delegates to `mintPaperRecoveryEntry` internally — its output is
5585
5687
  * fed directly to this API. Pick whichever fits your code-gen layer:
5586
5688
  *
@@ -5591,7 +5693,7 @@ declare class Noydb {
5591
5693
  * ```
5592
5694
  */
5593
5695
  enrollRecovery(vault: string, enrollment: RecoveryEnrollmentInput): Promise<EnrollRecoveryResult>;
5594
- /** Read the persisted recovery entries (paper + Shamir). Used by `describeAuthConfig` (#13). */
5696
+ /** Read the persisted recovery entries (paper + Shamir). Used by `describeAuthConfig`. */
5595
5697
  listRecoveryEntries(vault: string): Promise<{
5596
5698
  paper: ReadonlyArray<PaperRecoveryEntry>;
5597
5699
  shamir: ReadonlyArray<ShamirRecoveryEntry>;
@@ -5619,11 +5721,11 @@ declare class Noydb {
5619
5721
  /** Drop the tier-3 state for a vault — explicit logout. */
5620
5722
  clearQuickUnlock(vault: string): void;
5621
5723
  /**
5622
- * Public accessor for the unlocked keyring of a vault — issue #28.
5724
+ * Public accessor for the unlocked keyring of a vault.
5623
5725
  *
5624
5726
  * Returns a **defensive shallow copy** so consumers can read the DEK
5625
5727
  * map and authenticator list without the risk of mutating the hub's
5626
- * internal cache (#88). Internal hub code paths use a live reference
5728
+ * internal cache. Internal hub code paths use a live reference
5627
5729
  * via `getKeyringInternal`; ceremonies and external consumers always
5628
5730
  * get a snapshot.
5629
5731
  *
@@ -5864,8 +5966,8 @@ interface GuardStrategy<T extends Record<string, unknown>> {
5864
5966
  * })
5865
5967
  * ```
5866
5968
  *
5867
- * Also skipped on system-internal deletes (derivation tombstones from
5868
- * #144, MV refresh from Dim 14 v2) — those use `_internalDelete`
5969
+ * Also skipped on system-internal deletes (derivation tombstones,
5970
+ * MV refresh from Dim 14 v2) — those use `_internalDelete`
5869
5971
  * which bypasses every user-facing delete hook. Housekeeping ops are
5870
5972
  * NOT user-initiated and should not trip user invariants.
5871
5973
  *
@@ -5924,14 +6026,14 @@ interface RecordOutputSpec {
5924
6026
  * `undefined`) for this output key. The executor interprets that as
5925
6027
  * "no output for this invocation": a previously-emitted output at
5926
6028
  * the same id is deleted (mirroring the empty-group / empty-aggregate
5927
- * semantics flagged in #142); a never-emitted output is a silent
6029
+ * semantics for empty groups); a never-emitted output is a silent
5928
6030
  * no-op. When `false` (default), returning `null` throws
5929
6031
  * `DerivationOutputShapeError` — same as v1.
5930
6032
  */
5931
6033
  optional?: boolean;
5932
6034
  }
5933
6035
  /**
5934
- * Array-shape output (#200) — one source row produces a variable-length
6036
+ * Array-shape output — one source row produces a variable-length
5935
6037
  * list of output rows, each with its own id (from the `key` extractor).
5936
6038
  *
5937
6039
  * On every source-row change, the dispatcher diffs the previously
@@ -6154,7 +6256,7 @@ interface MaterializedViewStrategy<TRow extends Record<string, unknown>> {
6154
6256
  */
6155
6257
  query?: (db: MVQueryContext) => Query<TRow>;
6156
6258
  /**
6157
- * UNION-form sources (#165): an explicit list of sibling collections
6259
+ * UNION-form sources: an explicit list of sibling collections
6158
6260
  * that contribute rows to a single MV. Each arm's `map` projects a
6159
6261
  * source row into the MV's unified row shape; the mapped streams are
6160
6262
  * concatenated, then {@link groupBy} + {@link aggregate} run on the
@@ -6170,7 +6272,7 @@ interface MaterializedViewStrategy<TRow extends Record<string, unknown>> {
6170
6272
  */
6171
6273
  unionSources?: ReadonlyArray<UnionSource<TRow>>;
6172
6274
  /**
6173
- * Group-key field(s) for UNION mode (#165). Applied to the
6275
+ * Group-key field(s) for UNION mode. Applied to the
6174
6276
  * concatenated mapped-row stream from {@link unionSources} before
6175
6277
  * {@link aggregate} runs. Accepts a single field name or a tuple of
6176
6278
  * field names for multi-key grouping (same shape as
@@ -6182,7 +6284,7 @@ interface MaterializedViewStrategy<TRow extends Record<string, unknown>> {
6182
6284
  */
6183
6285
  groupBy?: string | ReadonlyArray<string>;
6184
6286
  /**
6185
- * Aggregation spec for UNION mode (#165). Applied per-group after
6287
+ * Aggregation spec for UNION mode. Applied per-group after
6186
6288
  * {@link groupBy} buckets the concatenated mapped-row stream from
6187
6289
  * {@link unionSources}. Same shape as the `AggregateSpec` passed to
6188
6290
  * `Query.aggregate()`.
@@ -6193,11 +6295,11 @@ interface MaterializedViewStrategy<TRow extends Record<string, unknown>> {
6193
6295
  /**
6194
6296
  * Pure function from a materialized row → stable id used in the
6195
6297
  * output collection. Required — explicit always beats default-with-pitfalls
6196
- * (see niwat-review of #149 round 1 for the slash-collision rationale).
6298
+ * (explicit always beats default-with-pitfalls; see the slash-collision rationale).
6197
6299
  */
6198
6300
  rowKey: (row: TRow) => string;
6199
6301
  /**
6200
- * Explicit source collections (#152). Required when `query()` returns
6302
+ * Explicit source collections. Required when `query()` returns
6201
6303
  * an `Aggregation` or `GroupedAggregation` rather than a `Query<T>`
6202
6304
  * — the dependency analyzer can't introspect through `groupBy().aggregate()`
6203
6305
  * back to the source. Optional for plain `Query<T>` results — the
@@ -6207,7 +6309,7 @@ interface MaterializedViewStrategy<TRow extends Record<string, unknown>> {
6207
6309
  */
6208
6310
  sources?: ReadonlyArray<string>;
6209
6311
  /**
6210
- * Declared deterministic predicates (#153). Each entry pairs a
6312
+ * Declared deterministic predicates. Each entry pairs a
6211
6313
  * consumer-stable `hash` with a function. The `query()` callback's
6212
6314
  * Query<T> can invoke them via `.wherePredicate(name, ctx?)`. The
6213
6315
  * predicate's `hash` + a canonical-JSON hash of `ctx` both fold
@@ -6244,8 +6346,8 @@ interface MaterializedViewStrategy<TRow extends Record<string, unknown>> {
6244
6346
  *
6245
6347
  * - `'delete'` (default) — tombstone the prior MV row via
6246
6348
  * `Collection._internalDelete` (system housekeeping bypasses user
6247
- * `onDelete` guards on the output collection — see PR #148's
6248
- * composition fix).
6349
+ * `onDelete` guards on the output collection — the housekeeping
6350
+ * bypass composition fix).
6249
6351
  * - `'keep'` — leave the prior MV row in place. Useful when zero
6250
6352
  * is a meaningful state.
6251
6353
  */
@@ -6253,7 +6355,7 @@ interface MaterializedViewStrategy<TRow extends Record<string, unknown>> {
6253
6355
  /**
6254
6356
  * `true` re-throws on any row-write failure → composes with
6255
6357
  * `withTransactions` to roll back the source-write atomically via
6256
- * `revertExecuted` (#133). Default `false` (failed rows are
6358
+ * `revertExecuted`. Default `false` (failed rows are
6257
6359
  * isolated; other rows commit).
6258
6360
  */
6259
6361
  strict?: boolean;
@@ -6287,7 +6389,7 @@ interface RegisteredMV {
6287
6389
  * Top-level FieldClauses on the partition field, captured at
6288
6390
  * registration time. Used by the cycle detector to resolve
6289
6391
  * same-collection-as-source edges via the partition-discriminator
6290
- * check (#152). Empty when `spec.output?.partition` is undefined.
6392
+ * check. Empty when `spec.output?.partition` is undefined.
6291
6393
  */
6292
6394
  readonly partitionClauses: readonly FieldClause[];
6293
6395
  }
@@ -6339,7 +6441,7 @@ declare class MaterializedViewRegistry {
6339
6441
  }
6340
6442
 
6341
6443
  /**
6342
- * Read-shadow overlay primitive (#154, MV v2 spec § Composition with
6444
+ * Read-shadow overlay primitive (MV v2 spec § Composition with
6343
6445
  * operator-editable lifecycle). Binds an MV's read-only base output
6344
6446
  * to a separate user-writable overlay collection; reads merge via a
6345
6447
  * single shadow predicate, writes route to the overlay.
@@ -6442,7 +6544,7 @@ declare class GuardRegistry {
6442
6544
  register<T extends Record<string, unknown>>(spec: GuardStrategy<T>): void;
6443
6545
  /** All guards registered against `collection` in registration order. */
6444
6546
  guardsFor(collection: string): ReadonlyArray<AnyGuard>;
6445
- /** Per-collection guard counts, for introspection (#229). */
6547
+ /** Per-collection guard counts, for introspection. */
6446
6548
  summary(): {
6447
6549
  collection: string;
6448
6550
  count: number;
@@ -6883,7 +6985,7 @@ declare function magicLinkGrantRecordId(token: string, index: number): string;
6883
6985
  declare function isMagicLinkGrantExpired(payload: MagicLinkGrantPayload, now?: Date): boolean;
6884
6986
 
6885
6987
  /**
6886
- * Type surface for the user-list visibility subsystem (#122).
6988
+ * Type surface for the user-list visibility subsystem.
6887
6989
  *
6888
6990
  * Two complementary flags:
6889
6991
  * - {@link DirectoryConfig} — vault-level "is the directory listing
@@ -6934,7 +7036,7 @@ interface UserVisibility {
6934
7036
  * own keyringId. **Own-only write rule** is structural — no method
6935
7037
  * exists to write someone else's envelope.
6936
7038
  * - Read-anyone: `get` / `list` — read other principals' envelopes
6937
- * (subject to `view-team-profiles` policy gate, wired in #22).
7039
+ * (subject to `view-team-profiles` policy gate).
6938
7040
  * - Reactive: `subscribe` / `live` — in-process event emission on local
6939
7041
  * writes. Cross-instance updates land via the team/sync engine and
6940
7042
  * surface to subscribers when the sync diff replays through this API.
@@ -6954,7 +7056,7 @@ type DeepPartial<T> = T extends object ? {
6954
7056
  } : T;
6955
7057
  /**
6956
7058
  * Recursive partial with `null` allowed at every level — used by
6957
- * `updateMe` (#57) to express deletion intent in addition to merge.
7059
+ * `updateMe` to express deletion intent in addition to merge.
6958
7060
  *
6959
7061
  * Semantics inside `updateMe`:
6960
7062
  * - `undefined` (or absent key) — skip; source value preserved
@@ -6963,8 +7065,8 @@ type DeepPartial<T> = T extends object ? {
6963
7065
  * replace for primitives / arrays)
6964
7066
  *
6965
7067
  * Matches lodash `_.merge` behavior on `null` and Firestore's
6966
- * `FieldValue.delete()` semantics. Loosened from `DeepPartial<T>` per
6967
- * #57; consumers wanting the original "merge-only" surface can keep
7068
+ * `FieldValue.delete()` semantics. Loosened from `DeepPartial<T>`.
7069
+ * Consumers wanting the original "merge-only" surface can keep
6968
7070
  * importing `DeepPartial` and avoid passing `null`.
6969
7071
  */
6970
7072
  type DeepPartialOrNull<T> = T extends object ? {
@@ -7036,7 +7138,7 @@ declare class UserApi {
7036
7138
  * the envelope on first call. Optimistic-concurrency safe — a stale
7037
7139
  * `_v` (parallel writer on another device) throws `ConflictError`.
7038
7140
  *
7039
- * Patch semantics (#57):
7141
+ * Patch semantics:
7040
7142
  * - `undefined` (or omitted key) — skip; existing value preserved
7041
7143
  * - `null` — delete the field from the merged result
7042
7144
  * - any other value — overwrite (deep-merge for plain objects,
@@ -7190,7 +7292,7 @@ interface PersistedSchemaEnvelope {
7190
7292
  * @module
7191
7293
  */
7192
7294
 
7193
- /** Flat snapshot of a vault's registered schema (#229). */
7295
+ /** Flat snapshot of a vault's registered schema. */
7194
7296
  interface SchemaIntrospection {
7195
7297
  readonly collections: ReadonlyArray<{
7196
7298
  name: string;
@@ -7367,23 +7469,23 @@ declare class Vault {
7367
7469
  * `null` for vaults that never register any guard strategy. The
7368
7470
  * runtime class is dynamic-imported on demand so consumers that
7369
7471
  * never use guards don't pull `GuardRegistry`/`GuardExecutor` into
7370
- * their bundle (#130).
7472
+ * their bundle.
7371
7473
  */
7372
7474
  private guardRegistry;
7373
7475
  /**
7374
7476
  * Per-vault derivation registry. Same lazy-load contract as
7375
7477
  * `guardRegistry` — `null` until `_initDerivations()` runs with at
7376
- * least one strategy handle. See #130 for the bundle motivation.
7478
+ * least one strategy handle.
7377
7479
  */
7378
7480
  private derivationRegistry;
7379
7481
  /**
7380
- * Per-vault materialized-view registry (#143/#150). Same lazy-load
7482
+ * Per-vault materialized-view registry. Same lazy-load
7381
7483
  * contract as `derivationRegistry` — `null` until
7382
7484
  * `_initMaterializedViews()` runs with at least one MV handle.
7383
7485
  */
7384
7486
  private materializedViewRegistry;
7385
7487
  /**
7386
- * Per-vault overlay registry (#154). Same lazy-load contract as
7488
+ * Per-vault overlay registry. Same lazy-load contract as
7387
7489
  * `materializedViewRegistry` — `null` until `_initOverlayedViews()`
7388
7490
  * runs with at least one handle.
7389
7491
  */
@@ -7404,7 +7506,7 @@ declare class Vault {
7404
7506
  * target this vault session's keyringId. There is no method to write
7405
7507
  * another principal's envelope (own-only write rule, structural).
7406
7508
  * - Read-anyone: `get(keyringId)`, `list()` — read other principals'
7407
- * envelopes, subject to the `view-team-profiles` policy gate (#22).
7509
+ * envelopes, subject to the `view-team-profiles` policy gate.
7408
7510
  * - Reactive: `subscribe(id, cb)`, `live(id)` — fire on local writes.
7409
7511
  *
7410
7512
  * @see docs/superpowers/specs/2026-05-05-user-envelope-design.md
@@ -7424,7 +7526,7 @@ declare class Vault {
7424
7526
  */
7425
7527
  private readonly reloadKeyring;
7426
7528
  private readonly collectionCache;
7427
- /** #232 — vault-level schema cutover fence/controller. */
7529
+ /** Vault-level schema cutover fence/controller. */
7428
7530
  readonly schemaFence: SchemaFenceController;
7429
7531
  /**
7430
7532
  * per-collection `blobFields` retention/TTL config.
@@ -7498,8 +7600,7 @@ declare class Vault {
7498
7600
  * Cache of closed/opened accounting periods.
7499
7601
  * Populated on first `closePeriod` / `openPeriod` / `listPeriods` /
7500
7602
  * per-collection write call. Kept in memory as an ordered list (by
7501
- * `closedAt`) so the `periodGuard` hook runs synchronously against
7502
- * each collection's put/delete path.
7603
+ * `closedAt`) so period checks run fast when the gate bus fires.
7503
7604
  *
7504
7605
  * Sentinel `null` means "not yet loaded" — the first consumer
7505
7606
  * triggers a one-time `loadPeriods()` pass. Every subsequent
@@ -7659,7 +7760,7 @@ declare class Vault {
7659
7760
  */
7660
7761
  persistJsonSchema?: boolean;
7661
7762
  /**
7662
- * Ordered schema-update strategies (#245). On a detected schema
7763
+ * Ordered schema-update strategies. On a detected schema
7663
7764
  * change, evaluated in order; the first non-`allow` decision wins.
7664
7765
  * A `reject` is enforced at the write path (`put`/`delete` throw).
7665
7766
  * Requires `persistJsonSchema: true` (detection needs the baseline).
@@ -7675,7 +7776,7 @@ declare class Vault {
7675
7776
  */
7676
7777
  _drainPendingSchemaWrites(): Promise<void>;
7677
7778
  /**
7678
- * Run a coordinated schema cutover (#232). Drains pending writes, waits
7779
+ * Run a coordinated schema cutover. Drains pending writes, waits
7679
7780
  * for the active client set to quiesce (the ack-barrier), applies every
7680
7781
  * pending collection transform in bulk, bumps the vault schema generation,
7681
7782
  * and clears the fence. Returns the count of collections migrated.
@@ -7687,15 +7788,15 @@ declare class Vault {
7687
7788
  migrated: number;
7688
7789
  }>;
7689
7790
  /**
7690
- * #228b — refresh a loaded collection's view of one document from a peer
7791
+ * Refresh a loaded collection's view of one document from a peer
7691
7792
  * tab's broadcast. No-op when the collection isn't loaded in this tab
7692
- * (it will read fresh on next open). Mirrors #runCutoverTransform's guard.
7793
+ * (it will read fresh on next open). Mirrors `#runCutoverTransform`'s guard.
7693
7794
  */
7694
7795
  _applyRemoteWrite(collectionName: string, docId: string, action: 'put' | 'delete'): Promise<void>;
7695
7796
  /**
7696
- * #228c — for a detected conflict: capture this tab's clobbered record,
7797
+ * For a detected conflict: capture this tab's clobbered record,
7697
7798
  * read the common ancestor from history, converge the cache to the store's
7698
- * authoritative value (the (b) re-read), and return all three for the
7799
+ * authoritative value (the re-read), and return all three for the
7699
7800
  * WriteConflict payload. Returns null when the collection isn't loaded.
7700
7801
  */
7701
7802
  _captureAndConverge(collectionName: string, docId: string, action: 'put' | 'delete', baseV: number): Promise<{
@@ -7703,11 +7804,11 @@ declare class Vault {
7703
7804
  remote: unknown;
7704
7805
  base: unknown;
7705
7806
  } | null>;
7706
- /** Recover a stuck cutover fence (#232) — reset to normal without bumping. */
7807
+ /** Recover a stuck cutover fence — reset to normal without bumping. */
7707
7808
  abortSchemaCutover(): Promise<void>;
7708
- /** Current schema-cutover fence state for this vault (#232/#233). Thin live read. */
7809
+ /** Current schema-cutover fence state for this vault. Thin live read. */
7709
7810
  schemaFenceState(): Promise<FenceDoc>;
7710
- /** @internal Start the per-client heartbeat + fence watcher once a cutover is registered (#232). */
7811
+ /** @internal Start the per-client heartbeat + fence watcher once a cutover is registered. */
7711
7812
  _ensureFenceCoordination(): void;
7712
7813
  /** @internal Stop the heartbeat/watcher (vault lock/close). */
7713
7814
  _stopFenceCoordination(): void;
@@ -8023,7 +8124,7 @@ declare class Vault {
8023
8124
  * Dynamic-imports `GuardRegistry` + `ReadOnlyVaultFacade` and seeds
8024
8125
  * the registry with the supplied strategy handles. No-op when the
8025
8126
  * handles array is empty — keeps the guard subsystem out of the
8026
- * floor bundle for consumers that don't use guards (#130).
8127
+ * floor bundle for consumers that don't use guards.
8027
8128
  *
8028
8129
  * The read-only facade is eagerly instantiated here so the sync
8029
8130
  * accessor `_getReadOnlyFacade()` (called from the tx amendment
@@ -8031,10 +8132,9 @@ declare class Vault {
8031
8132
  */
8032
8133
  _initGuards(handles: ReadonlyArray<GuardStrategyHandleAny>): Promise<void>;
8033
8134
  /**
8034
- * @internal — Collection.put calls into this. Returns `null` for
8035
- * vaults that never registered any guard strategy. Callers MUST
8036
- * gate on null (the existing `if (this.guardSource)` branches in
8037
- * `Collection` already do this transitively).
8135
+ * @internal — The gate handler in Noydb.#registerGuardGate calls into
8136
+ * this. Returns `null` for vaults that never registered any guard
8137
+ * strategy. Callers MUST gate on null.
8038
8138
  */
8039
8139
  _getGuardRegistry(): GuardRegistry | null;
8040
8140
  /**
@@ -8043,7 +8143,7 @@ declare class Vault {
8043
8143
  * derivation strategies (async because `strategyHash` computation
8044
8144
  * goes through `crypto.subtle.digest`). No-op when the handles
8045
8145
  * array is empty — keeps the derivation subsystem out of the floor
8046
- * bundle for consumers that don't use derivations (#130). Throws
8146
+ * bundle for consumers that don't use derivations. Throws
8047
8147
  * `DerivationCycleError` if a cycle is detected after registration.
8048
8148
  */
8049
8149
  _initDerivations(handles: ReadonlyArray<DerivationStrategyHandle>): Promise<void>;
@@ -8058,7 +8158,7 @@ declare class Vault {
8058
8158
  * MV spec (which invokes its `query()` once for dependency
8059
8159
  * analysis), then runs the unified cycle detection across the MV +
8060
8160
  * derivation graphs. No-op when the handles array is empty — keeps
8061
- * the MV subsystem out of the floor bundle (mirrors v1 #130).
8161
+ * the MV subsystem out of the floor bundle (mirrors the derivation lazy-import pattern).
8062
8162
  * Throws `MaterializedViewCycleError` if a cycle is detected.
8063
8163
  */
8064
8164
  _initMaterializedViews(handles: ReadonlyArray<MaterializedViewStrategyHandle>): Promise<void>;
@@ -8080,13 +8180,13 @@ declare class Vault {
8080
8180
  */
8081
8181
  _getOverlayedViewRegistry(): OverlayedViewRegistry | null;
8082
8182
  /**
8083
- * Manual re-materialize for a single registered MV (#151). Useful
8183
+ * Manual re-materialize for a single registered MV. Useful
8084
8184
  * for `refresh: 'manual'` MVs (whose consumer drives refreshes
8085
8185
  * externally), for stale-bit recovery on vault re-open, and as the
8086
8186
  * explicit bulk-recompute escape hatch after a strategy change.
8087
8187
  *
8088
- * Returns `{ written, deleted, failed }`. `deleted` is always 0 in
8089
- * foundation + this sub-issue — tombstoning lands in #152.
8188
+ * Returns `{ written, deleted, failed }`. `deleted` is always 0
8189
+ * when tombstoning is not enabled.
8090
8190
  *
8091
8191
  * Throws if `name` is not a registered MV.
8092
8192
  */
@@ -8109,20 +8209,17 @@ declare class Vault {
8109
8209
  /**
8110
8210
  * @internal — exposed for `runTransaction({ amendment: true })` so
8111
8211
  * the amendment invariant runner can pass the SAME read-only vault
8112
- * facade that the per-record `Collection.put` guard hook uses
8113
- * (`guardSource.readOnlyVault()` above). Eagerly instantiated by
8114
- * `_initGuards()` so this accessor stays synchronous; returns
8115
- * `null` for vaults that never registered any guard (amendments
8116
- * require at least one guard, so the caller should never see null).
8212
+ * facade that the gate handler in Noydb.#registerGuardGate uses.
8213
+ * Eagerly instantiated by `_initGuards()` so this accessor stays
8214
+ * synchronous; returns `null` for vaults that never registered any
8215
+ * guard (amendments require at least one guard, so the caller should
8216
+ * never see null).
8117
8217
  */
8118
8218
  _getReadOnlyFacade(): ReadOnlyVaultFacade | null;
8119
8219
  /**
8120
- * Internal lazy-allocator for the read-only facade. Used by the
8121
- * per-collection `guardSource.readOnlyVault` callback when guards
8122
- * ARE configured but `_initGuards()` raced with the first guard
8123
- * invocation (theoretically impossible — `Noydb.openVault` awaits
8124
- * `_initGuards` before returning — but we keep the defensive lazy
8125
- * path so the closure's contract stays "always returns a facade").
8220
+ * Internal lazy-allocator for the read-only facade. Used as a
8221
+ * defensive fallback; in practice `_initGuards()` eagerly
8222
+ * instantiates this, so the lazy path is a no-op.
8126
8223
  */
8127
8224
  private _ensureReadOnlyFacade;
8128
8225
  /**
@@ -8329,7 +8426,7 @@ declare class Vault {
8329
8426
  listPeriods(): Promise<readonly PeriodRecord[]>;
8330
8427
  /** Look up a single period by name. Returns `null` if not found. */
8331
8428
  getPeriod(name: string): Promise<PeriodRecord | null>;
8332
- /** @internal — periodGuard callback installed on every Collection. */
8429
+ /** @internal — called by the gate bus before put/delete. */
8333
8430
  _assertTsWritable(existing: {
8334
8431
  ts: string | null;
8335
8432
  record: Record<string, unknown> | null;
@@ -8360,7 +8457,7 @@ declare class Vault {
8360
8457
  */
8361
8458
  dumpSchema(opts?: DumpSchemaOptions): Promise<VaultSchemaSnapshot>;
8362
8459
  /**
8363
- * Lightweight read of the vault's registered schema (#229): collections
8460
+ * Lightweight read of the vault's registered schema: collections
8364
8461
  * (+ doc counts), guards, materialized views, schema-update strategies,
8365
8462
  * and the unlocked user's grants. Cheap — one `adapter.list` per
8366
8463
  * collection, no decryption. For a full snapshot + stats use dumpSchema().
@@ -8854,6 +8951,7 @@ declare class Collection<T> {
8854
8951
  private readonly schemaUpdateGate;
8855
8952
  private readonly schemaFence;
8856
8953
  private readonly writeHooks;
8954
+ private readonly subsystemBus;
8857
8955
  private readonly activeTxId;
8858
8956
  private readonly getDEK;
8859
8957
  private readonly onDirty;
@@ -9035,42 +9133,14 @@ declare class Collection<T> {
9035
9133
  private readonly syncAdapter;
9036
9134
  /** — consent-audit hook, no-op when no scope is active. */
9037
9135
  private readonly onAccess;
9038
- /**
9039
- * accounting-period write guard. Called BEFORE any
9040
- * adapter write with:
9041
- * - `existing` — the prior envelope's `_ts` and decrypted record
9042
- * (or `null` if no prior envelope exists)
9043
- * - `incoming` — the record being written (or `null` for delete)
9044
- *
9045
- * Throws `PeriodClosedError` if either side falls inside a closed
9046
- * period. Installed by Vault; no-op when no period has been closed.
9047
- * Async so the Vault can lazy-load the period list from the
9048
- * adapter on first use.
9049
- */
9050
- private readonly periodGuard;
9051
- /**
9052
- * Optional back-reference to the owning vault's guard registry + a
9053
- * read-only vault facade. When present, `Collection.put` and
9054
- * `Collection.delete` consult the registry for guards declared
9055
- * against this collection and run their `check` + `frozenFields`
9056
- * before the adapter write. Absent in unit tests that construct
9057
- * a Collection directly; production code always sets it via
9058
- * `Vault.collection()`.
9059
- *
9060
- * Typed structurally rather than as `Vault` to avoid a circular
9061
- * import (mirrors the `refEnforcer` / `joinResolver` pattern).
9062
- */
9063
- private readonly guardSource;
9064
9136
  /**
9065
9137
  * Vault-internal hook for derivation dispatch. When set,
9066
9138
  * `Collection.put` consults the registry after the source-write
9067
9139
  * commits and writes derived outputs through `getCollection(name).put`.
9068
- * Same structural-interface pattern as `guardSource` to avoid a
9069
- * circular Vault import.
9070
9140
  */
9071
9141
  private readonly derivationSource;
9072
9142
  /**
9073
- * Vault-internal hook for materialized-view dispatch (#143/#150).
9143
+ * Vault-internal hook for materialized-view dispatch.
9074
9144
  * Parallel to `derivationSource` — when set, `Collection.put` fires
9075
9145
  * `MaterializedViewRegistry.onSourceWrite` after the source-write
9076
9146
  * commits + after `dispatchDerivations` has run.
@@ -9123,19 +9193,21 @@ declare class Collection<T> {
9123
9193
  encrypted: boolean;
9124
9194
  emitter: NoydbEventEmitter;
9125
9195
  /**
9126
- * Vault-level in-flight write tracker (#227). When present,
9196
+ * Vault-level in-flight write tracker. When present,
9127
9197
  * `put`/`delete` run inside `writeQueue.track()` so `hub.writeQueue`
9128
9198
  * reflects outstanding writes. Optional so direct Collection
9129
9199
  * construction in tests still works untracked.
9130
9200
  */
9131
9201
  writeQueue?: WriteQueueTracker | undefined;
9132
- /** #245 — per-collection schema-update gate; `put`/`delete` await it. */
9202
+ /** Per-collection schema-update gate; `put`/`delete` await it. */
9133
9203
  schemaUpdateGate?: SchemaUpdateGate | undefined;
9134
- /** #232 — vault-level fence controller; `put`/`delete` consult it. */
9204
+ /** Vault-level fence controller; `put`/`delete` consult it. */
9135
9205
  schemaFence?: SchemaFenceController | undefined;
9136
- /** #230 — hub-level write-hook registry; fired around put/delete. */
9206
+ /** Hub-level write-hook registry; fired around put/delete. */
9137
9207
  writeHooks?: WriteHookRegistry | undefined;
9138
- /** #230 active transaction id supplier (null outside a transaction). */
9208
+ /** The observe bus, threaded from Noydb. */
9209
+ subsystemBus?: SubsystemBus | undefined;
9210
+ /** Active transaction id supplier (null outside a transaction). */
9139
9211
  activeTxId?: (() => string | null) | undefined;
9140
9212
  getDEK: (collectionName: string) => Promise<CryptoKey>;
9141
9213
  historyConfig?: HistoryConfig | undefined;
@@ -9340,33 +9412,19 @@ declare class Collection<T> {
9340
9412
  * to the ledger.
9341
9413
  */
9342
9414
  onCrossTierAccess?: ((event: CrossTierAccessEvent) => void) | undefined;
9343
- periodGuard?: (existing: {
9344
- ts: string | null;
9345
- record: Record<string, unknown> | null;
9346
- } | null, incoming: Record<string, unknown> | null) => Promise<void>;
9347
9415
  /**
9348
- * Optional back-reference to the owning vault's guard registry +
9349
- * read-only facade. When present, put/delete consult registered
9350
- * guards for this collection. Same structural-interface pattern
9351
- * as `refEnforcer` to avoid a circular Vault import.
9352
- */
9353
- guardSource?: {
9354
- registry(): GuardRegistry;
9355
- readOnlyVault(): ReadOnlyVaultFacade$1;
9356
- } | undefined;
9357
9416
  /**
9358
9417
  * Optional back-reference to the owning vault's derivation
9359
9418
  * registry + collection accessor. When present, successful
9360
9419
  * `put()` dispatches registered derivation strategies for the
9361
- * source collection. Same structural-interface pattern as
9362
- * `guardSource` to avoid a circular Vault import.
9420
+ * source collection.
9363
9421
  */
9364
9422
  derivationSource?: {
9365
9423
  registry(): DerivationRegistry;
9366
9424
  getCollection(name: string): Collection<Record<string, unknown>>;
9367
9425
  /**
9368
9426
  * Read-only vault facade handed to `derive(source, ctx)` so a
9369
- * derivation can fetch sibling records (#147). Same shape and
9427
+ * derivation can fetch sibling records. Same shape and
9370
9428
  * instance the guards subsystem uses for `check(incoming, ctx)`.
9371
9429
  */
9372
9430
  getReadOnlyFacade(): ReadOnlyVaultFacade$1;
@@ -9375,13 +9433,13 @@ declare class Collection<T> {
9375
9433
  * transaction context, or `null` when no transaction is running.
9376
9434
  * `dispatchDerivations` consults this so a recursive derived-output
9377
9435
  * write can register its pre-write envelope onto `ctx._executed`
9378
- * and roll back alongside the source op on mid-batch failure (#133).
9436
+ * and roll back alongside the source op on mid-batch failure.
9379
9437
  */
9380
9438
  getActiveTxContext(): TxContext | null;
9381
9439
  /**
9382
9440
  * Construct a transient TxContext bound to the owning Noydb. Used
9383
9441
  * by `Collection.putManyAtomic` to publish an active context for
9384
- * its Phase 2 loop (#133).
9442
+ * its Phase 2 loop.
9385
9443
  */
9386
9444
  createTxContext(): TxContext;
9387
9445
  /** Publish a TxContext for the duration of a bulk-atomic loop. */
@@ -9390,7 +9448,7 @@ declare class Collection<T> {
9390
9448
  clearActiveTxContext(ctx: TxContext): void;
9391
9449
  } | undefined;
9392
9450
  /**
9393
- * Vault-internal hook for materialized-view dispatch (#143/#150).
9451
+ * Vault-internal hook for materialized-view dispatch.
9394
9452
  * Parallel to `derivationSource`. When set, `Collection.put` fires
9395
9453
  * registered MV `onSourceWrite` after the standard derivation
9396
9454
  * dispatch.
@@ -9453,14 +9511,14 @@ declare class Collection<T> {
9453
9511
  }): PresenceHandle<P>;
9454
9512
  /**
9455
9513
  * Create or update a record. Runs inside the hub's write-queue tracker
9456
- * (#227) so `hub.writeQueue.pending` reflects this write.
9514
+ * so `hub.writeQueue.pending` reflects this write.
9457
9515
  *
9458
9516
  * @param id Record identifier.
9459
9517
  * @param record The record body (validated by the collection's schema
9460
9518
  * if one was attached at `vault.collection(...)` time).
9461
9519
  * @param options Optional metadata for audit + import workflows.
9462
9520
  * `reason` is stamped onto the resulting ledger entry
9463
- * (see #1) so audit consumers can filter via
9521
+ * so audit consumers can filter via
9464
9522
  * `entries.filter(e => e.reason?.startsWith('import:'))`.
9465
9523
  */
9466
9524
  put(id: string, record: T, options?: {
@@ -9472,7 +9530,7 @@ declare class Collection<T> {
9472
9530
  * Fire registered MV strategies whose dependency set includes this
9473
9531
  * collection. Eager-mode MVs re-materialize inline via
9474
9532
  * `MaterializedViewExecutor.refresh`; lazy / manual modes are
9475
- * no-ops in the foundation (subtask #150) wired in #151.
9533
+ * no-ops in the foundation; wired in the lazy-mode implementation.
9476
9534
  *
9477
9535
  * Skips entirely when the record being written is itself an
9478
9536
  * MV-emitted row (carries `_materializedFrom`) — defensive guard
@@ -9495,11 +9553,11 @@ declare class Collection<T> {
9495
9553
  private dispatchDerivations;
9496
9554
  /**
9497
9555
  * Delete a record by ID. Runs inside the hub's write-queue tracker
9498
- * (#227) so `hub.writeQueue.pending` reflects this write.
9556
+ * so `hub.writeQueue.pending` reflects this write.
9499
9557
  */
9500
9558
  delete(id: string): Promise<void>;
9501
9559
  /**
9502
- * @internal #232 — bulk-rewrite every record through a cutover transform.
9560
+ * @internal — bulk-rewrite every record through a cutover transform.
9503
9561
  * Raw adapter path (bypasses the write gate + guards — the transform is
9504
9562
  * trusted and runs only during the `migrating` phase). Bumps each
9505
9563
  * record's `_v` and appends a ledger `op:'migration'` entry.
@@ -9509,8 +9567,7 @@ declare class Collection<T> {
9509
9567
  private deleteInternal;
9510
9568
  /**
9511
9569
  * @internal — system-internal delete that bypasses user-facing
9512
- * delete hooks (`onDelete`, accounting-period guard, FK ref
9513
- * enforcer). Used by derivation tombstones (#144) and MV refresh
9570
+ * delete hooks (`onDelete`, FK ref enforcer). Used by derivation tombstones and MV refresh
9514
9571
  * (Dim 14 v2) — system housekeeping shouldn't trip user invariants
9515
9572
  * registered against the output collection. The ledger entry and
9516
9573
  * history snapshot still fire so backup integrity and time-travel
@@ -9522,7 +9579,7 @@ declare class Collection<T> {
9522
9579
  *
9523
9580
  * When a `txCtx` is supplied, the prior envelope is captured and
9524
9581
  * pushed onto `txCtx._executed` BEFORE the delete fires — mirrors
9525
- * the #133 rollback hardening for puts. Callers outside a
9582
+ * the rollback hardening for puts. Callers outside a
9526
9583
  * multi-record transaction pass `null` and skip the tracking.
9527
9584
  *
9528
9585
  * Amendment composition: if `_internalDelete` runs while a vault's
@@ -9549,7 +9606,7 @@ declare class Collection<T> {
9549
9606
  private _doDelete;
9550
9607
  /**
9551
9608
  * Cascade deletes of array-shape derived rows when a source row is
9552
- * deleted (#200). Reads each registered strategy's fanout sidecar
9609
+ * deleted. Reads each registered strategy's fanout sidecar
9553
9610
  * for this source id, deletes every listed derived row, then
9554
9611
  * deletes the sidecar itself.
9555
9612
  *
@@ -9560,8 +9617,8 @@ declare class Collection<T> {
9560
9617
  */
9561
9618
  private dispatchArrayDerivationsOnDelete;
9562
9619
  /**
9563
- * Mirror of {@link dispatchMaterializedViews} for the delete path
9564
- * (#181). No record content is available (it's gone), so the
9620
+ * Mirror of {@link dispatchMaterializedViews} for the delete path.
9621
+ * No record content is available (it's gone), so the
9565
9622
  * `_materializedFrom` skip used by the put-side dispatch doesn't
9566
9623
  * apply here — instead, the recursion guard is the `internal` gate
9567
9624
  * at the `_doDelete` call site above.
@@ -9643,7 +9700,7 @@ declare class Collection<T> {
9643
9700
  * the filtered records directly (the API). Prefer the chainable
9644
9701
  * form for new code.
9645
9702
  *
9646
- * **Lazy-MV gap (#157):** `query()` is synchronous and does NOT
9703
+ * **Lazy-MV gap:** `query()` is synchronous and does NOT
9647
9704
  * trigger lazy materialized-view resolve-on-read. If this
9648
9705
  * collection is a lazy MV's output and the MV is currently stale,
9649
9706
  * `query().toArray()` returns the pre-stale snapshot. To force a
@@ -9804,7 +9861,7 @@ declare class Collection<T> {
9804
9861
  * .aggregate({ total: sum('amount'), n: count() })
9805
9862
  * ```
9806
9863
  *
9807
- * **Lazy-MV gap (#157):** `scan()` is synchronous-build and does
9864
+ * **Lazy-MV gap:** `scan()` is synchronous-build and does
9808
9865
  * NOT trigger lazy materialized-view resolve-on-read. For lazy
9809
9866
  * MVs, call `list()` (which DOES resolve) or `vault.refreshView(name)`
9810
9867
  * before scanning. Same shape as the `query()` limitation.
@@ -9844,13 +9901,13 @@ declare class Collection<T> {
9844
9901
  */
9845
9902
  _invalidateCacheEntry(id: string): Promise<void>;
9846
9903
  /**
9847
- * #228b — apply a peer tab's committed write to THIS tab's in-memory view:
9904
+ * Apply a peer tab's committed write to THIS tab's in-memory view:
9848
9905
  * re-read the (already-persisted) envelope from the shared store + refresh
9849
9906
  * cache/indexes, then emit a `change` event so reactive consumers re-render.
9850
9907
  * Never writes to the store and never fires write hooks, so it cannot loop.
9851
9908
  */
9852
9909
  _applyRemoteChange(id: string, action: 'put' | 'delete'): Promise<void>;
9853
- /** @internal #228c — the current in-memory record without a store read (for conflict capture). */
9910
+ /** @internal — the current in-memory record without a store read (for conflict capture). */
9854
9911
  _peekCached(id: string): T | null;
9855
9912
  private ensureHydrated;
9856
9913
  /** Hydrate from a pre-loaded snapshot (used by Vault). */
@@ -10408,7 +10465,7 @@ interface SessionStrategy {
10408
10465
  }
10409
10466
 
10410
10467
  /**
10411
- * Managed-passphrase mode — issue #14, rubber-hose-resistant vaults.
10468
+ * Managed-passphrase mode — rubber-hose-resistant vaults.
10412
10469
  *
10413
10470
  * A vault mode where the passphrase is machine-generated and never
10414
10471
  * exposed to the user, sealed under a developer-provided
@@ -10447,9 +10504,9 @@ interface SessionStrategy {
10447
10504
  * Returns the plaintext passphrase string that the rest of the
10448
10505
  * `createNoydb` keyring path consumes.
10449
10506
  *
10450
- * Slice 1 of #14. Deferred to follow-ups:
10507
+ * Deferred to follow-ups:
10451
10508
  * - Block `rotate-passphrase` policy gate under managed mode.
10452
- * - Mandatory strong-recovery enforcement (depends on #10).
10509
+ * - Mandatory strong-recovery enforcement.
10453
10510
  * - Recovery flow under managed mode (generates fresh sealed phrase).
10454
10511
  *
10455
10512
  * @see docs/subsystems/session-tiers.md → Managed-passphrase mode
@@ -10609,12 +10666,12 @@ interface SealedPassphrase {
10609
10666
  *
10610
10667
  * v1 shape (this release): `{ v: 1, _noydb_sealed: 1, pid, payload }`.
10611
10668
  *
10612
- * Legacy shape (pre.14, pre.15): `{ _noydb_sealed: 1, providerId, sealed }`
10669
+ * Legacy shape (earlier releases): `{ _noydb_sealed: 1, providerId, sealed }`
10613
10670
  * — accepted on read for backwards compatibility; never produced on
10614
10671
  * write going forward.
10615
10672
  */
10616
10673
  interface SealedEnvelope {
10617
- /** Envelope schema version. v1 is the shape shipped in pre.16. */
10674
+ /** Envelope schema version. v1 is the current shape. */
10618
10675
  readonly v: 1;
10619
10676
  /** Magic marker for forensics + legacy-shape detection. */
10620
10677
  readonly _noydb_sealed: 1;
@@ -10628,9 +10685,9 @@ interface SealedEnvelope {
10628
10685
  * in-memory {@link SealedPassphrase} representation. Accepts both:
10629
10686
  *
10630
10687
  * 1. v1 wire format `{ v: 1, _noydb_sealed: 1, pid, payload }` —
10631
- * the shape produced from pre.16 onward.
10688
+ * the current shape.
10632
10689
  * 2. Legacy wire format `{ _noydb_sealed: 1, providerId, sealed }` —
10633
- * the shape produced in pre.14/pre.15. Read-only; never written
10690
+ * read-only; never written
10634
10691
  * going forward.
10635
10692
  *
10636
10693
  * Returns `undefined` for any input that doesn't match either shape,
@@ -11015,9 +11072,9 @@ interface ImportCapability {
11015
11072
  */
11016
11073
  type VaultPolicyOnDisk = Record<string, unknown>;
11017
11074
  /**
11018
- * Recovery profile enrolled at vault creation (issue #10).
11075
+ * Recovery profile enrolled at vault creation.
11019
11076
  *
11020
- * - `paper` — `on-recovery` codes (the only end-to-end profile in v0.1.0-pre.5).
11077
+ * - `paper` — `on-recovery` codes (the standard end-to-end profile).
11021
11078
  * - `shamir` / `multi-channel` / `admin-mediated` — API surface ships;
11022
11079
  * per-profile dispatch lands in follow-up issues. Calling
11023
11080
  * `db.recoverPassphrase` against these throws
@@ -11080,7 +11137,7 @@ interface KeyringAuthenticatorBase {
11080
11137
  * extractable KEK from its own credential — WebAuthn (PRF-derived
11081
11138
  * wrapping key) and split-key OIDC.
11082
11139
  *
11083
- * `wrapKind` is optional/absent on slots written before pre.8 — those
11140
+ * `wrapKind` is optional/absent on older slots — those
11084
11141
  * legacy slots are treated as wrap-KEK by default at unlock time.
11085
11142
  */
11086
11143
  interface KeyringAuthenticatorWrappingKEK extends KeyringAuthenticatorBase {
@@ -11143,11 +11200,11 @@ interface KeyringFile {
11143
11200
  readonly granted_by: string;
11144
11201
  /**
11145
11202
  * Passphrase canary — base64 AES-KW-wrapped form of a known constant
11146
- * 256-bit value, wrapped under the keyring's KEK (#113).
11203
+ * 256-bit value, wrapped under the keyring's KEK.
11147
11204
  *
11148
- * Optional: pre-#113 keyrings load with no canary and fall back to
11149
- * the multi-DEK corruption heuristic from #82. Keyrings written after
11150
- * #113 carry one and let `loadKeyring` distinguish wrong-passphrase
11205
+ * Optional: older keyrings load with no canary and fall back to
11206
+ * the multi-DEK corruption heuristic. Newer keyrings
11207
+ * carry one and let `loadKeyring` distinguish wrong-passphrase
11151
11208
  * from corruption even when ALL DEKs (including a single-DEK keyring's
11152
11209
  * sole DEK) are corrupted.
11153
11210
  *
@@ -11370,7 +11427,7 @@ interface Conflict {
11370
11427
  readonly resolve?: (winner: EncryptedEnvelope | null) => void;
11371
11428
  }
11372
11429
  /**
11373
- * #228c — a same-device cross-tab write conflict: another tab overwrote a
11430
+ * A same-device cross-tab write conflict: another tab overwrote a
11374
11431
  * document this tab had written, having diverged from an older base. Records
11375
11432
  * are decrypted (cross-tab handlers reconcile in plaintext). `base` is the
11376
11433
  * common ancestor from history, or null when history is unavailable.
@@ -11473,8 +11530,8 @@ interface NoydbEventMap {
11473
11530
  'change': ChangeEvent;
11474
11531
  'error': Error;
11475
11532
  /**
11476
- * Same-instance signal that this vault's schema-fence state changed
11477
- * (#232). For UI integration (#233). Cross-client coordination goes
11533
+ * Same-instance signal that this vault's schema-fence state changed.
11534
+ * For UI integration. Cross-client coordination goes
11478
11535
  * through the store, not this event.
11479
11536
  */
11480
11537
  'schema:fence-changed': {
@@ -11580,7 +11637,7 @@ interface GrantOptions {
11580
11637
  readonly initialProfile?: unknown;
11581
11638
  }
11582
11639
  /**
11583
- * Caller payload for `db.updateUser` (#54). Mutate one or more
11640
+ * Caller payload for `db.updateUser`. Mutate one or more
11584
11641
  * identity fields on an existing keyring without rotating any keys.
11585
11642
  *
11586
11643
  * `role`, `displayName`, and `permissions` live in the plaintext header
@@ -11594,7 +11651,7 @@ interface GrantOptions {
11594
11651
  * `null` on `displayName` clears the field (stored as the empty string;
11595
11652
  * UI consumers typically render the empty case by falling back to the
11596
11653
  * user id). `undefined` / absent leaves the field untouched. Mirrors
11597
- * the `null`-as-clear convention `UserApi.updateMe` uses (#57).
11654
+ * the `null`-as-clear convention `UserApi.updateMe` uses.
11598
11655
  *
11599
11656
  * `permissions`, however, is a **full replacement** at the map level —
11600
11657
  * passing `{ invoices: 'rw' }` REPLACES the entire permissions map,
@@ -11608,8 +11665,6 @@ interface GrantOptions {
11608
11665
  * do anything. Non-admin callers (operator/viewer/client) cannot call
11609
11666
  * `db.updateUser` at all — for self-displayName changes, use
11610
11667
  * `vault.user.updateMe` (the user-envelope API).
11611
- *
11612
- * @see #54
11613
11668
  */
11614
11669
  interface UpdateUserOptions {
11615
11670
  readonly userId: string;
@@ -12201,7 +12256,7 @@ interface NoydbOptions {
12201
12256
  */
12202
12257
  readonly derivationStrategies?: ReadonlyArray<DerivationStrategyHandle>;
12203
12258
  /**
12204
- * Optional materialized-view strategies (#143, foundation in #150).
12259
+ * Optional materialized-view strategies.
12205
12260
  * Each handle returned by `withMaterializedView()` from
12206
12261
  * `@noy-db/hub/materialized-views`. The vault runs unified cycle
12207
12262
  * detection across the MV + derivation graphs at `openVault`; a
@@ -12209,7 +12264,7 @@ interface NoydbOptions {
12209
12264
  */
12210
12265
  readonly materializedViewStrategies?: ReadonlyArray<MaterializedViewStrategyHandle>;
12211
12266
  /**
12212
- * Optional overlay strategies (#154). Each handle returned by
12267
+ * Optional overlay strategies. Each handle returned by
12213
12268
  * `withOverlayedView()` from `@noy-db/hub/overlay-views`. The vault
12214
12269
  * validates name uniqueness + base concreteness + overlay
12215
12270
  * availability at `openVault`; a clash throws one of the
@@ -12262,7 +12317,7 @@ interface NoydbOptions {
12262
12317
  */
12263
12318
  readonly getKeyring?: (vault: string) => Promise<UnlockedKeyring>;
12264
12319
  /**
12265
- * Passphrase mode (#14). Default `'standard'`.
12320
+ * Passphrase mode. Default `'standard'`.
12266
12321
  *
12267
12322
  * - `'standard'` — the legacy flow. `secret` supplies the
12268
12323
  * plaintext passphrase, the user knows it, and the policy gate
@@ -12323,14 +12378,14 @@ interface NoydbOptions {
12323
12378
  readonly sessionPolicy?: SessionPolicy;
12324
12379
  /**
12325
12380
  * Validate passphrase strength against the phrase format
12326
- * (`@noy-db/hub` issue #7) on first-time keyring creation. When
12381
+ * on first-time keyring creation. When
12327
12382
  * `true`, weak phrases throw {@link WeakPassphraseError} from
12328
12383
  * `createNoydb()` / `db.rotatePassphrase()`. Default: `false` for
12329
- * back-compat in v0.1.x; planned to flip to `true` at v1.0.
12384
+ * back-compat; planned to flip to `true` in a future major release.
12330
12385
  */
12331
12386
  readonly validatePassphrase?: boolean;
12332
12387
  /**
12333
- * Vault-level policy gate document (issue #9). When present, the hub
12388
+ * Vault-level policy gate document. When present, the hub
12334
12389
  * persists the merged policy at `_meta/policy` on first-time vault
12335
12390
  * creation and gates sensitive operations (`db.rotatePassphrase`,
12336
12391
  * `db.export*`, …) against it. Omitted ⇒ the engine uses
@@ -12346,14 +12401,14 @@ interface NoydbOptions {
12346
12401
  */
12347
12402
  readonly policy?: VaultPolicy;
12348
12403
  /**
12349
- * Mandatory recovery profile enrollment (issue #10). Vaults with
12404
+ * Mandatory recovery profile enrollment. Vaults with
12350
12405
  * `recover-passphrase` enabled MUST register at least one profile
12351
12406
  * before being production-ready, otherwise `createNoydb()` throws
12352
12407
  * {@link RecoveryNotEnrolledError}. Set
12353
12408
  * `policy.gates['recover-passphrase'].enabled = false` to
12354
12409
  * deliberately opt out of recovery (passphrase loss = data loss).
12355
12410
  *
12356
- * v0.1.0-pre.5 supports the `'paper'` profile end-to-end. Other
12411
+ * The `'paper'` profile is supported end-to-end. Other
12357
12412
  * profiles ship the API shape and throw
12358
12413
  * {@link RecoveryProfileNotImplementedError} during use.
12359
12414
  */
@@ -12361,9 +12416,9 @@ interface NoydbOptions {
12361
12416
  /**
12362
12417
  * When `true`, `createNoydb` rejects vaults with no recovery
12363
12418
  * entries persisted (per the spec's mandatory-enrollment
12364
- * requirement). Default `false` for v0.1.x back-compat; planned to
12365
- * flip to `true` at v1.0. Apps in regulated environments should
12366
- * turn this on now.
12419
+ * requirement). Default `false` for back-compat; planned to
12420
+ * flip to `true` in a future major release. Apps in regulated
12421
+ * environments should turn this on now.
12367
12422
  */
12368
12423
  readonly requireRecovery?: boolean;
12369
12424
  /**
@@ -12490,4 +12545,4 @@ interface DeleteManyResult {
12490
12545
  }>;
12491
12546
  }
12492
12547
 
12493
- export { type ConsentAuditEntry as $, type BlobObject as A, type BlobStrategy as B, type BlobPutOptions as C, DICT_COLLECTION_PREFIX as D, type BlobResponseOptions as E, BlobSet as F, type BlobStrategyOpenArgs as G, type CompactRunOptions as H, type I18nStrategy as I, type CompactionContext as J, type CompactionResult as K, DEFAULT_CHUNK_SIZE as L, EXPORT_AUDIT_COLLECTION as M, ExportBlobsAbortedError as N, type ExportBlobsAuditEntry as O, PolicyEnforcer as P, type ExportBlobsHandle as Q, type ExportBlobsOptions as R, type SessionStrategy as S, type ExportedBlob as T, type SlotInfo as U, type SlotRecord as V, type VersionRecord as W, createExportBlobsHandle as X, runCompaction as Y, type ConsentStrategy as Z, CONSENT_AUDIT_COLLECTION as _, type DictEntry as a, VaultInstant as a$, type ConsentAuditFilter as a0, type ConsentContext as a1, type ConsentOp as a2, loadConsentEntries as a3, writeConsentEntry as a4, type PeriodsStrategy as a5, type CarryForwardContext as a6, type ClosePeriodOptions as a7, type OpenPeriodOptions as a8, PERIODS_COLLECTION as a9, type DerivationStrategyHandle as aA, type DerivedFromMeta as aB, type OutputSpec as aC, type RecordOutputSpec as aD, type MaterializedViewStrategy as aE, type MaterializedViewStrategyHandle as aF, type OverlayedViewStrategy as aG, Collection as aH, OverlayedViewRegistry as aI, type OverlayedViewStrategyHandle as aJ, type SyncStrategy as aK, type Role as aL, type UnlockedKeyring as aM, type HistoryStrategy as aN, type NoydbStore as aO, type HistoryOptions as aP, type EncryptedEnvelope as aQ, type PruneOptions as aR, type AppendInput as aS, type ChangeType as aT, CollectionInstant as aU, type DiffEntry as aV, type JsonPatch as aW, type JsonPatchOp as aX, type LedgerEntry as aY, LedgerStore as aZ, type VaultEngine as a_, type PeriodRecord as aa, type ReadOnlyCollection as ab, appendPeriodLedgerEntry as ac, assertTsWritable as ad, chainAnchor as ae, loadPeriods as af, validatePeriodName as ag, type GuardStrategy as ah, type GuardChange as ai, type GuardContext as aj, GuardRegistry as ak, type GuardStrategyHandle as al, ReadOnlyVaultFacade as am, type ShadowStrategy as an, CollectionFrame as ao, VaultFrame as ap, type TxStrategy as aq, type AmendmentTxOptions as ar, TxCollection as as, TxContext as at, TxVault as au, runTransaction as av, type DerivationStrategy as aw, type DerivationContext as ax, type ArrayOutputSpec as ay, DerivationRegistry as az, type DictKeyDescriptor as b, type EnrollAuthenticatorOptions as b$, type VerifyResult as b0, applyPatch as b1, canonicalJson as b2, computePatch as b3, diff as b4, formatDiff as b5, hashEntry as b6, paddedIndex as b7, parseIndex as b8, sha256Hex as b9, type AccessibleVault as bA, type AffectedDocument as bB, BUNDLE_STORE_POLICY as bC, type BuiltInGateName as bD, type CacheOptions as bE, type CacheStats as bF, type ChangeEvent as bG, type CollectionChangeEvent as bH, type CollectionConflictResolver as bI, type CollectionDescriptor as bJ, type CollectionStats as bK, type Conflict as bL, type ConflictPolicy as bM, type ConflictStrategy as bN, type CrossTierAccessEvent as bO, DEFAULT_PUBLIC_ENVELOPE_SCHEMA as bP, DELEGATIONS_COLLECTION as bQ, type DeepPartial as bR, type DeepPartialOrNull as bS, type DelegationToken as bT, type DeleteManyResult as bU, type DerivationDescriptor as bV, type DirtyEntry as bW, type DryRunResult as bX, type DumpSchemaOptions as bY, ELEVATION_AUDIT_COLLECTION as bZ, ElevatedHandle as b_, type PublicEnvelope as ba, type SealingKeyProvider as bb, type BundleRecipient as bc, type RecipientSealer as bd, type RecipientHint as be, Vault as bf, type RecoveryEnrollmentInput as bg, type ShamirRecoveryProvider as bh, type MVQueryContext as bi, type RegisteredMV as bj, MaterializedViewRegistry as bk, type MaterializedFromMeta as bl, type MaterializedViewOutput as bm, type UnionSource as bn, type UserEnvelope as bo, type GateName as bp, type GatePolicy as bq, type VaultPolicy as br, type ActiveTier as bs, type FactorProof as bt, type SchemaUpdateStrategy as bu, type TransformFn as bv, type PersistedSchemaEnvelope as bw, type UpdateDecision as bx, type DirectoryConfig as by, type UserVisibility as bz, DictionaryHandle as c, type PlaintextTranslatorContext as c$, type EnrollAuthenticatorWrappingDEKsOptions as c0, type EnrollAuthenticatorWrappingKEKOptions as c1, type EnrollRecoveryResult as c2, type ExportCapability as c3, type ExportChunk as c4, type ExportFormat as c5, type ExportStreamOptions as c6, type FactorKind as c7, type FactorProofBundle as c8, type FactorRequirement as c9, type LruOptions as cA, type LruStats as cB, MAGIC_LINK_CONTENT_INFO_PREFIX as cC, MAGIC_LINK_GRANTS_COLLECTION as cD, MAGIC_LINK_KEK_INFO_PREFIX as cE, type MagicLinkGrantPayload as cF, type MagicLinkGrantRecord as cG, type MaterializedViewDescriptor as cH, MemoryRecipientSealer as cI, MemorySealingKeyProvider as cJ, NOYDB_BACKUP_VERSION as cK, NOYDB_FORMAT_VERSION as cL, NOYDB_KEYRING_VERSION as cM, NOYDB_SYNC_VERSION as cN, Noydb as cO, type NoydbBundleStore as cP, type NoydbEventMap as cQ, type NoydbOptions as cR, type OverlayViewDescriptor as cS, PUBLIC_ENVELOPE_FIELDS as cT, type PaperRecoveryDoc as cU, type PaperRecoveryEntry as cV, type PassphrasePolicy as cW, type PassphraseValidationResult as cX, type Permission as cY, type Permissions as cZ, type PersistedSchemaKind as c_, type FenceDoc as ca, type FenceState as cb, type FieldChange as cc, type FieldDescriptor as cd, type FieldSource as ce, type GhostRecord as cf, type GrantOptions as cg, type GuardViolation as ch, type HistoryConfig as ci, type HistoryEntry as cj, INDEXED_STORE_POLICY as ck, type ImportCapability as cl, type InferOutput as cm, type InternalCollectionStats as cn, type IssueDelegationOptions as co, type IssueMagicLinkGrantOptions as cp, type KeyringAuthenticator as cq, type KeyringAuthenticatorWrappingDEKs as cr, type KeyringAuthenticatorWrappingKEK as cs, type KeyringFile as ct, type ListAccessibleVaultsOptions as cu, type ListPageResult as cv, type ListUsersOptions as cw, type LiveUserEnvelope as cx, type LocaleReadOptions as cy, Lru as cz, type DictionaryOptions as d, type TabRole as d$, type PlaintextTranslatorFn as d0, PresenceHandle as d1, type PresencePeer as d2, type PublicEnvelopeField as d3, type PublicEnvelopeSchema as d4, type PublicEnvelopeText as d5, type PullMode as d6, type PullOptions as d7, type PullPolicy as d8, type PullResult as d9, type SealedPassphrase as dA, type SessionPolicy as dB, type SetPublicEnvelopeInput as dC, type ShamirRecoveryDoc as dD, type ShamirRecoveryEntry as dE, type SlotRewrapCeremony as dF, type SlotRewrapContext as dG, type StandardSchemaV1 as dH, type StandardSchemaV1Issue as dI, type StandardSchemaV1SyncResult as dJ, type StoreAuth as dK, type StoreAuthKind as dL, type StoreCapabilities as dM, SyncEngine as dN, type SyncMetadata as dO, type SyncPolicy as dP, SyncScheduler as dQ, type SyncSchedulerStatus as dR, type SyncStatus as dS, type SyncTarget as dT, type SyncTargetRole as dU, SyncTransaction as dV, type SyncTransactionResult as dW, type TabChannel as dX, type TabCoordinationOptions as dY, type TabLockManager as dZ, type TabPresence as d_, type PushMode as da, type PushOptions as db, type PushPolicy as dc, type PushResult as dd, type PutManyItemOptions as de, type PutManyOptions as df, type PutManyResult as dg, type QueryAcrossOptions as dh, type QueryAcrossResult as di, type QuickUnlockState as dj, QuickUnlockStore as dk, type ReAuthOperation as dl, type RecoverPassphraseInput as dm, type RecoverPassphraseResult as dn, type RecoverUserOptions as dp, type RecoveryProof as dq, type ResolvedPublicEnvelopeSchema as dr, type RevokeOptions as ds, type RotatePassphraseInput as dt, type RotateRecoveryOptions as du, type RotateRecoveryResult as dv, SEALED_PASSPHRASE_RECORD_ID as dw, type SchemaDelta as dx, type SchemaIntrospection as dy, type SealedEnvelope as dz, type I18nTextDescriptor as e, savePaperRecoveryEntries as e$, type TierMode as e0, type TranslatorAuditEntry as e1, type TxOp as e2, USER_ENVELOPE_COLLECTION as e3, USER_ENVELOPE_MAX_BYTES as e4, type Unsubscribe as e5, type UpdateAuthenticatorOptions as e6, type UpdateContext as e7, type UpdateUserOptions as e8, UserApi as e9, findAuthenticator as eA, hasExportCapability as eB, hasImportCapability as eC, hasRecoveryEnrolled as eD, isMagicLinkGrantExpired as eE, isPublicEnvelope as eF, issueDelegation as eG, recoverPassphrase as eH, rotatePassphrase as eI, listMagicLinkGrants as eJ, listUsers as eK, listUsersWithEnvelopes as eL, loadActiveDelegations as eM, loadPaperRecoveryEntries as eN, loadSealedPassphrase as eO, loadShamirRecoveryEntries as eP, magicLinkGrantRecordId as eQ, mintPaperRecoveryEntry as eR, mintShamirRecoveryEntry as eS, mintWrappedDeksBlob as eT, parseSealedEnvelope as eU, readMagicLinkGrantRecord as eV, recoverUser as eW, removeAuthenticator as eX, resolveSchema as eY, revokeDelegation as eZ, revokeMagicLinkGrant as e_, type UserEnvelopeCheckGate as ea, UserEnvelopeOversizedError as eb, type UserEnvelopePresented as ec, type UserInfo as ed, type VaultBackup as ee, type VaultPolicyOnDisk as ef, type VaultSchemaSnapshot as eg, type VaultSnapshot as eh, type WarningRules as ei, WeakPassphraseError as ej, type WeakPassphraseReason as ek, type WrappedDeksBlob as el, type WriteConflict as em, type WriteEvent as en, type WriteHook as eo, type WriteQueue as ep, assertStrongPassphrase as eq, buildRecipientKeyringFile as er, burnPaperRecoveryEntry as es, createNoydb as et, createStore as eu, deriveMagicLinkContentKey as ev, enrollAuthenticator as ew, estimateEntropy as ex, evaluateExportCapability as ey, evaluateImportCapability as ez, type I18nTextOptions as f, saveSealedPassphrase as f0, saveShamirRecoveryEntries as f1, unwrapDeksFromBlob as f2, unwrapDeksFromPaperEntry as f3, unwrapDeksFromShamirEntry as f4, unwrapMagicLinkGrant as f5, validatePassphrase as f6, validatePublicEnvelopeInput as f7, validateSchemaInput as f8, validateSchemaOutput as f9, writeMagicLinkGrant as fa, changeSecret as fb, createOwnerKeyring as fc, ensureCollectionDEK as fd, grant as fe, loadKeyring as ff, persistKeyring as fg, revoke as fh, updateAuthenticator as fi, updateKeyringIdentity as fj, applyI18nLocale as g, dictCollectionName as h, dictKey as i, i18nText as j, isDictCollectionName as k, isDictKeyDescriptor as l, isI18nTextDescriptor as m, createEnforcer as n, validateSessionPolicy as o, BLOB_CHUNKS_COLLECTION as p, BLOB_COLLECTION as q, resolveI18nText as r, BLOB_EVICTION_AUDIT_COLLECTION as s, BLOB_INDEX_COLLECTION as t, BLOB_SLOTS_PREFIX as u, validateI18nTextValue as v, BLOB_VERSIONS_PREFIX as w, type BlobEvictionEntry as x, type BlobFieldPolicy as y, type BlobFieldsConfig as z };
12548
+ export { type ConsentStrategy as $, type BlobFieldPolicy as A, type BlobStrategy as B, type BlobFieldsConfig as C, DICT_COLLECTION_PREFIX as D, type BlobObject as E, type BlobPutOptions as F, type BlobResponseOptions as G, BlobSet as H, type I18nStrategy as I, type BlobStrategyOpenArgs as J, type CompactRunOptions as K, type CompactionContext as L, type CompactionResult as M, DEFAULT_CHUNK_SIZE as N, EXPORT_AUDIT_COLLECTION as O, PolicyEnforcer as P, ExportBlobsAbortedError as Q, type ExportBlobsAuditEntry as R, type SessionStrategy as S, type ExportBlobsHandle as T, type ExportBlobsOptions as U, type ExportedBlob as V, type SlotInfo as W, type SlotRecord as X, type VersionRecord as Y, createExportBlobsHandle as Z, runCompaction as _, type DictEntry as a, LedgerStore as a$, CONSENT_AUDIT_COLLECTION as a0, type ConsentAuditEntry as a1, type ConsentAuditFilter as a2, type ConsentContext as a3, type ConsentOp as a4, loadConsentEntries as a5, writeConsentEntry as a6, type PeriodsStrategy as a7, type CarryForwardContext as a8, type ClosePeriodOptions as a9, type ArrayOutputSpec as aA, DerivationRegistry as aB, type DerivationStrategyHandle as aC, type DerivedFromMeta as aD, type OutputSpec as aE, type RecordOutputSpec as aF, type MaterializedViewStrategy as aG, type MaterializedViewStrategyHandle as aH, type OverlayedViewStrategy as aI, Collection as aJ, OverlayedViewRegistry as aK, type OverlayedViewStrategyHandle as aL, type SyncStrategy as aM, type Role as aN, type UnlockedKeyring as aO, type HistoryStrategy as aP, type NoydbStore as aQ, type HistoryOptions as aR, type EncryptedEnvelope as aS, type PruneOptions as aT, type AppendInput as aU, type ChangeType as aV, CollectionInstant as aW, type DiffEntry as aX, type JsonPatch as aY, type JsonPatchOp as aZ, type LedgerEntry as a_, type OpenPeriodOptions as aa, PERIODS_COLLECTION as ab, type PeriodRecord as ac, type ReadOnlyCollection as ad, appendPeriodLedgerEntry as ae, assertTsWritable as af, chainAnchor as ag, loadPeriods as ah, validatePeriodName as ai, type GuardStrategy as aj, type GuardChange as ak, type GuardContext as al, GuardRegistry as am, type GuardStrategyHandle as an, ReadOnlyVaultFacade as ao, type ShadowStrategy as ap, CollectionFrame as aq, VaultFrame as ar, type TxStrategy as as, type AmendmentTxOptions as at, TxCollection as au, TxContext as av, TxVault as aw, runTransaction as ax, type DerivationStrategy as ay, type DerivationContext as az, type DictKeyDescriptor as b, ELEVATION_AUDIT_COLLECTION as b$, type VaultEngine as b0, VaultInstant as b1, type VerifyResult as b2, applyPatch as b3, canonicalJson as b4, computePatch as b5, diff as b6, formatDiff as b7, hashEntry as b8, paddedIndex as b9, type DirectoryConfig as bA, type UserVisibility as bB, type AccessibleVault as bC, type AffectedDocument as bD, BUNDLE_STORE_POLICY as bE, type BuiltInGateName as bF, type CacheOptions as bG, type CacheStats as bH, type ChangeEvent as bI, type CollectionChangeEvent as bJ, type CollectionConflictResolver as bK, type CollectionDescriptor as bL, type CollectionStats as bM, type Conflict as bN, type ConflictPolicy as bO, type ConflictStrategy as bP, type CrossTierAccessEvent as bQ, DEFAULT_PUBLIC_ENVELOPE_SCHEMA as bR, DELEGATIONS_COLLECTION as bS, type DeepPartial as bT, type DeepPartialOrNull as bU, type DelegationToken as bV, type DeleteManyResult as bW, type DerivationDescriptor as bX, type DirtyEntry as bY, type DryRunResult as bZ, type DumpSchemaOptions as b_, parseIndex as ba, sha256Hex as bb, type PublicEnvelope as bc, type SealingKeyProvider as bd, type BundleRecipient as be, type RecipientSealer as bf, type RecipientHint as bg, Vault as bh, type RecoveryEnrollmentInput as bi, type ShamirRecoveryProvider as bj, type MVQueryContext as bk, type RegisteredMV as bl, MaterializedViewRegistry as bm, type MaterializedFromMeta as bn, type MaterializedViewOutput as bo, type UnionSource as bp, type UserEnvelope as bq, type GateName as br, type GatePolicy as bs, type VaultPolicy as bt, type ActiveTier as bu, type FactorProof as bv, type SchemaUpdateStrategy as bw, type TransformFn as bx, type PersistedSchemaEnvelope as by, type UpdateDecision as bz, DictionaryHandle as c, type Permissions as c$, ElevatedHandle as c0, type EnrollAuthenticatorOptions as c1, type EnrollAuthenticatorWrappingDEKsOptions as c2, type EnrollAuthenticatorWrappingKEKOptions as c3, type EnrollRecoveryResult as c4, type ExportCapability as c5, type ExportChunk as c6, type ExportFormat as c7, type ExportStreamOptions as c8, type FactorKind as c9, type LocaleReadOptions as cA, Lru as cB, type LruOptions as cC, type LruStats as cD, MAGIC_LINK_CONTENT_INFO_PREFIX as cE, MAGIC_LINK_GRANTS_COLLECTION as cF, MAGIC_LINK_KEK_INFO_PREFIX as cG, type MagicLinkGrantPayload as cH, type MagicLinkGrantRecord as cI, type MaterializedViewDescriptor as cJ, MemoryRecipientSealer as cK, MemorySealingKeyProvider as cL, NOYDB_BACKUP_VERSION as cM, NOYDB_FORMAT_VERSION as cN, NOYDB_KEYRING_VERSION as cO, NOYDB_SYNC_VERSION as cP, Noydb as cQ, type NoydbBundleStore as cR, type NoydbEventMap as cS, type NoydbOptions as cT, type OverlayViewDescriptor as cU, PUBLIC_ENVELOPE_FIELDS as cV, type PaperRecoveryDoc as cW, type PaperRecoveryEntry as cX, type PassphrasePolicy as cY, type PassphraseValidationResult as cZ, type Permission as c_, type FactorProofBundle as ca, type FactorRequirement as cb, type FenceDoc as cc, type FenceState as cd, type FieldChange as ce, type FieldDescriptor as cf, type FieldSource as cg, type GhostRecord as ch, type GrantOptions as ci, type GuardViolation as cj, type HistoryConfig as ck, type HistoryEntry as cl, INDEXED_STORE_POLICY as cm, type ImportCapability as cn, type InferOutput as co, type InternalCollectionStats as cp, type IssueDelegationOptions as cq, type IssueMagicLinkGrantOptions as cr, type KeyringAuthenticator as cs, type KeyringAuthenticatorWrappingDEKs as ct, type KeyringAuthenticatorWrappingKEK as cu, type KeyringFile as cv, type ListAccessibleVaultsOptions as cw, type ListPageResult as cx, type ListUsersOptions as cy, type LiveUserEnvelope as cz, type DictionaryOptions as d, type TabLockManager as d$, type PersistedSchemaKind as d0, type PlaintextTranslatorContext as d1, type PlaintextTranslatorFn as d2, PresenceHandle as d3, type PresencePeer as d4, type PublicEnvelopeField as d5, type PublicEnvelopeSchema as d6, type PublicEnvelopeText as d7, type PullMode as d8, type PullOptions as d9, type SchemaIntrospection as dA, type SealedEnvelope as dB, type SealedPassphrase as dC, type SessionPolicy as dD, type SetPublicEnvelopeInput as dE, type ShamirRecoveryDoc as dF, type ShamirRecoveryEntry as dG, type SlotRewrapCeremony as dH, type SlotRewrapContext as dI, type StandardSchemaV1 as dJ, type StandardSchemaV1Issue as dK, type StandardSchemaV1SyncResult as dL, type StoreAuth as dM, type StoreAuthKind as dN, type StoreCapabilities as dO, SyncEngine as dP, type SyncMetadata as dQ, type SyncPolicy as dR, SyncScheduler as dS, type SyncSchedulerStatus as dT, type SyncStatus as dU, type SyncTarget as dV, type SyncTargetRole as dW, SyncTransaction as dX, type SyncTransactionResult as dY, type TabChannel as dZ, type TabCoordinationOptions as d_, type PullPolicy as da, type PullResult as db, type PushMode as dc, type PushOptions as dd, type PushPolicy as de, type PushResult as df, type PutManyItemOptions as dg, type PutManyOptions as dh, type PutManyResult as di, type QueryAcrossOptions as dj, type QueryAcrossResult as dk, type QuickUnlockState as dl, QuickUnlockStore as dm, type ReAuthOperation as dn, type RecoverPassphraseInput as dp, type RecoverPassphraseResult as dq, type RecoverUserOptions as dr, type RecoveryProof as ds, type ResolvedPublicEnvelopeSchema as dt, type RevokeOptions as du, type RotatePassphraseInput as dv, type RotateRecoveryOptions as dw, type RotateRecoveryResult as dx, SEALED_PASSPHRASE_RECORD_ID as dy, type SchemaDelta as dz, type I18nTextDescriptor as e, revokeDelegation as e$, type TabPresence as e0, type TabRole as e1, type TierMode as e2, type TranslatorAuditEntry as e3, type TxOp as e4, USER_ENVELOPE_COLLECTION as e5, USER_ENVELOPE_MAX_BYTES as e6, type Unsubscribe as e7, type UpdateAuthenticatorOptions as e8, type UpdateContext as e9, evaluateExportCapability as eA, evaluateImportCapability as eB, findAuthenticator as eC, hasExportCapability as eD, hasImportCapability as eE, hasRecoveryEnrolled as eF, isMagicLinkGrantExpired as eG, isPublicEnvelope as eH, issueDelegation as eI, recoverPassphrase as eJ, rotatePassphrase as eK, listMagicLinkGrants as eL, listUsers as eM, listUsersWithEnvelopes as eN, loadActiveDelegations as eO, loadPaperRecoveryEntries as eP, loadSealedPassphrase as eQ, loadShamirRecoveryEntries as eR, magicLinkGrantRecordId as eS, mintPaperRecoveryEntry as eT, mintShamirRecoveryEntry as eU, mintWrappedDeksBlob as eV, parseSealedEnvelope as eW, readMagicLinkGrantRecord as eX, recoverUser as eY, removeAuthenticator as eZ, resolveSchema as e_, type UpdateUserOptions as ea, UserApi as eb, type UserEnvelopeCheckGate as ec, UserEnvelopeOversizedError as ed, type UserEnvelopePresented as ee, type UserInfo as ef, type VaultBackup as eg, type VaultPolicyOnDisk as eh, type VaultSchemaSnapshot as ei, type VaultSnapshot as ej, type WarningRules as ek, WeakPassphraseError as el, type WeakPassphraseReason as em, type WrappedDeksBlob as en, type WriteConflict as eo, type WriteEvent as ep, type WriteHook as eq, type WriteQueue as er, assertStrongPassphrase as es, buildRecipientKeyringFile as et, burnPaperRecoveryEntry as eu, createNoydb as ev, createStore as ew, deriveMagicLinkContentKey as ex, enrollAuthenticator as ey, estimateEntropy as ez, type I18nTextOptions as f, revokeMagicLinkGrant as f0, savePaperRecoveryEntries as f1, saveSealedPassphrase as f2, saveShamirRecoveryEntries as f3, unwrapDeksFromBlob as f4, unwrapDeksFromPaperEntry as f5, unwrapDeksFromShamirEntry as f6, unwrapMagicLinkGrant as f7, validatePassphrase as f8, validatePublicEnvelopeInput as f9, validateSchemaInput as fa, validateSchemaOutput as fb, writeMagicLinkGrant as fc, changeSecret as fd, createOwnerKeyring as fe, ensureCollectionDEK as ff, grant as fg, loadKeyring as fh, persistKeyring as fi, revoke as fj, updateAuthenticator as fk, updateKeyringIdentity as fl, applyI18nLocale as g, dictCollectionName as h, dictKey as i, getAtPath as j, i18nText as k, isDictCollectionName as l, isDictKeyDescriptor as m, isI18nTextDescriptor as n, createEnforcer as o, validateSessionPolicy as p, BLOB_CHUNKS_COLLECTION as q, resolveI18nText as r, setAtPathInPlace as s, BLOB_COLLECTION as t, BLOB_EVICTION_AUDIT_COLLECTION as u, validateI18nTextValue as v, BLOB_INDEX_COLLECTION as w, BLOB_SLOTS_PREFIX as x, BLOB_VERSIONS_PREFIX as y, type BlobEvictionEntry as z };