@remnic/core 10.0.50 → 10.0.52

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 (272) hide show
  1. package/dist/access-admin-ops-surface.js +22 -22
  2. package/dist/access-authorization-probe.js +23 -23
  3. package/dist/access-boundary.d.ts +6 -1
  4. package/dist/access-boundary.d.ts.map +1 -1
  5. package/dist/access-boundary.js +22 -22
  6. package/dist/access-cli.js +68 -68
  7. package/dist/access-errors.d.ts.map +1 -1
  8. package/dist/access-errors.js +1 -1
  9. package/dist/access-extraction-force-flush.js +22 -22
  10. package/dist/access-http-briefing.js +23 -23
  11. package/dist/access-http-query.js +24 -24
  12. package/dist/access-http.js +42 -42
  13. package/dist/access-identity-continuity-surface.js +22 -22
  14. package/dist/access-lcm-surface.js +22 -22
  15. package/dist/access-mcp.js +32 -32
  16. package/dist/access-memory-search-fanout.js +2 -2
  17. package/dist/access-namespace-preflight.js +22 -22
  18. package/dist/access-observe-write-category.js +2 -2
  19. package/dist/access-observe-write-surface.js +22 -22
  20. package/dist/access-offline-manifest.js +2 -2
  21. package/dist/access-operations-batch.js +23 -23
  22. package/dist/access-operations.js +30 -30
  23. package/dist/access-recall-concurrency.js +22 -22
  24. package/dist/access-recall-diagnostics.js +2 -2
  25. package/dist/access-recall-response.js +22 -22
  26. package/dist/access-recall-surface.js +22 -22
  27. package/dist/access-schema.d.ts +245 -773
  28. package/dist/access-schema.d.ts.map +1 -1
  29. package/dist/access-schema.js +1 -1
  30. package/dist/access-service.js +22 -22
  31. package/dist/access-surface-catalog.js +24 -24
  32. package/dist/access-token-capabilities.js +2 -2
  33. package/dist/active-recall.js +5 -5
  34. package/dist/briefing.js +3 -3
  35. package/dist/causal-consolidation.js +4 -4
  36. package/dist/{chunk-7YVER7ZO.js → chunk-2EXF6IIB.js} +2 -2
  37. package/dist/{chunk-HPNXS6W6.js → chunk-2ONKXEC7.js} +3 -3
  38. package/dist/{chunk-DMKTOCC7.js → chunk-2S6JADBB.js} +2 -2
  39. package/dist/{chunk-ZSEFGDCI.js → chunk-2TGIKMMZ.js} +2 -2
  40. package/dist/{chunk-Q3PNQYAC.js → chunk-44EUCSG4.js} +2 -2
  41. package/dist/{chunk-PJCVI44H.js → chunk-4FM35YIA.js} +3 -3
  42. package/dist/{chunk-M6TP6UYD.js → chunk-6ZAU7LAR.js} +2 -2
  43. package/dist/{chunk-SJTSWG2Z.js → chunk-72CBJ5VP.js} +3 -3
  44. package/dist/{chunk-EKYWZYZJ.js → chunk-75BK4XGV.js} +17 -17
  45. package/dist/{chunk-HKOMHP6D.js → chunk-A6JDT6QF.js} +2 -2
  46. package/dist/{chunk-TFWJXWL6.js → chunk-AHGOOZUC.js} +2 -2
  47. package/dist/{chunk-A7AISUJI.js → chunk-AJG2TAMR.js} +2 -2
  48. package/dist/{chunk-VCOMACR6.js → chunk-AZLD4CKG.js} +19 -19
  49. package/dist/{chunk-GXVXBYRA.js → chunk-B35EQQ7L.js} +3 -3
  50. package/dist/{chunk-E6UNM67F.js → chunk-B6SPPYGJ.js} +2 -2
  51. package/dist/{chunk-TXKQBQYW.js → chunk-CK6GCGMX.js} +3 -3
  52. package/dist/{chunk-NPLM7AFU.js → chunk-DF6ZF2BN.js} +3 -3
  53. package/dist/{chunk-6ZQX3R66.js → chunk-DJFULNXK.js} +4 -4
  54. package/dist/{chunk-JBWD3J5U.js → chunk-DQOGZZJA.js} +3 -3
  55. package/dist/{chunk-K5QQXVG6.js → chunk-EC2KVA27.js} +7 -7
  56. package/dist/{chunk-N74WJ7B2.js → chunk-EZS6QJNC.js} +2 -2
  57. package/dist/{chunk-MWURUSRE.js → chunk-FNNGWN3O.js} +2 -2
  58. package/dist/{chunk-5FUDSK6Z.js → chunk-FT75AQ74.js} +3 -3
  59. package/dist/{chunk-ZMO2S5RT.js → chunk-G6A3SGCE.js} +3 -3
  60. package/dist/chunk-G6A3SGCE.js.map +1 -0
  61. package/dist/{chunk-IMKOJVD4.js → chunk-GBGU5OZP.js} +52 -51
  62. package/dist/chunk-GBGU5OZP.js.map +1 -0
  63. package/dist/{chunk-5X2H3X4J.js → chunk-GE3ZX6YK.js} +2 -2
  64. package/dist/{chunk-UNOAVHV4.js → chunk-HCIRR3BA.js} +3 -3
  65. package/dist/{chunk-MLNXATFG.js → chunk-HEF4BRMT.js} +3 -3
  66. package/dist/{chunk-Z5277JWF.js → chunk-HQUYENKK.js} +7 -10
  67. package/dist/chunk-HQUYENKK.js.map +1 -0
  68. package/dist/{chunk-6UDLN4IA.js → chunk-I6ORDT54.js} +2 -2
  69. package/dist/{chunk-M4HRYLOA.js → chunk-IUQXRRJB.js} +3 -3
  70. package/dist/{chunk-GQIYL7OD.js → chunk-JIJAWTRK.js} +3 -3
  71. package/dist/{chunk-4KS4IHKH.js → chunk-JX3E4XCW.js} +2 -2
  72. package/dist/{chunk-ZFNXJEUG.js → chunk-KAJYSO3U.js} +2 -2
  73. package/dist/{chunk-QS765SBL.js → chunk-KETS5A62.js} +2 -2
  74. package/dist/{chunk-N7FNCE7F.js → chunk-KIWO4327.js} +2 -2
  75. package/dist/{chunk-FC3ZFEXF.js → chunk-KJ3MDX4V.js} +2 -2
  76. package/dist/{chunk-BNJAVRNJ.js → chunk-L3EFYRYK.js} +8 -8
  77. package/dist/{chunk-3MUKQQ7A.js → chunk-LGEH473S.js} +24 -29
  78. package/dist/chunk-LGEH473S.js.map +1 -0
  79. package/dist/{chunk-P7OVFGMU.js → chunk-LMB47UM6.js} +2 -2
  80. package/dist/{chunk-7SAE6T36.js → chunk-LWMLBVGB.js} +2 -2
  81. package/dist/{chunk-ZNRTHYYW.js → chunk-MC7PXJDP.js} +7 -7
  82. package/dist/{chunk-M2DOJBH7.js → chunk-MUNYUSBU.js} +2 -2
  83. package/dist/{chunk-LMMBV7QC.js → chunk-OCRLJJOV.js} +4 -4
  84. package/dist/{chunk-7J6A5MV2.js → chunk-ON77FQXH.js} +2 -2
  85. package/dist/{chunk-WV4UYDP6.js → chunk-POJRFSJM.js} +3 -3
  86. package/dist/{chunk-LKRXGOQW.js → chunk-QA3Y2O6H.js} +2 -2
  87. package/dist/{chunk-23ZLN5X6.js → chunk-QT5MGENX.js} +14 -6
  88. package/dist/chunk-QT5MGENX.js.map +1 -0
  89. package/dist/{chunk-YECEEJUU.js → chunk-RA7YRL6H.js} +2 -2
  90. package/dist/{chunk-UALXWWGN.js → chunk-RJDYDF5K.js} +4 -4
  91. package/dist/{chunk-WXJC2L66.js → chunk-ROAKLYOL.js} +2 -2
  92. package/dist/{chunk-NWIT3U2N.js → chunk-S5CQI2KF.js} +2 -2
  93. package/dist/{chunk-P6P35FY4.js → chunk-SDESKFKT.js} +2 -2
  94. package/dist/{chunk-UXGXJUZ5.js → chunk-SFRBUBUZ.js} +7 -7
  95. package/dist/{chunk-CRN3EPE2.js → chunk-SHNM7RIT.js} +3 -3
  96. package/dist/{chunk-XC3H7KON.js → chunk-SPTPBKZX.js} +2 -2
  97. package/dist/{chunk-IUYXCTA7.js → chunk-TC55M5PO.js} +2 -2
  98. package/dist/{chunk-EWBXMGXR.js → chunk-UCLJTGP3.js} +2 -2
  99. package/dist/{chunk-UZVQFGAY.js → chunk-UM3ZLT2X.js} +206 -165
  100. package/dist/chunk-UM3ZLT2X.js.map +1 -0
  101. package/dist/{chunk-754XN6LX.js → chunk-V27FK6D6.js} +2 -2
  102. package/dist/{chunk-LIBVANOF.js → chunk-V6Z4NAJZ.js} +2 -2
  103. package/dist/{chunk-XTXWR6KQ.js → chunk-VUMWVYMR.js} +7 -7
  104. package/dist/{chunk-ZSMA67FV.js → chunk-WY66J4PI.js} +2 -2
  105. package/dist/{chunk-5G53JSRO.js → chunk-XWJUFER3.js} +3 -3
  106. package/dist/{chunk-NSP5PIQH.js → chunk-Y3T5KQCR.js} +2 -2
  107. package/dist/{chunk-QTDZ2NYC.js → chunk-Y77FXULH.js} +2 -2
  108. package/dist/{chunk-IG747LRN.js → chunk-YO2JEX2Z.js} +2 -2
  109. package/dist/{chunk-KW5YZELC.js → chunk-ZKK3VMWU.js} +2 -2
  110. package/dist/cli.js +55 -55
  111. package/dist/coding/export-okf-codegraph.js +2 -2
  112. package/dist/compounding/engine.js +4 -4
  113. package/dist/config.js +5 -5
  114. package/dist/connectors/codex-materialize-runner.js +3 -3
  115. package/dist/connectors/index.js +7 -7
  116. package/dist/convergence-refresh.js +5 -5
  117. package/dist/corpus-watermark.js +7 -7
  118. package/dist/deep-recall-config.js +2 -2
  119. package/dist/deep-recall-http-glue.js +4 -4
  120. package/dist/{entity-canonical-id-migration-ZBNRGUNV.js → entity-canonical-id-migration-F3JVG6K6.js} +2 -2
  121. package/dist/entity-retrieval.js +3 -3
  122. package/dist/external-wiki-access.js +23 -23
  123. package/dist/extraction-span-wire.d.ts.map +1 -1
  124. package/dist/extraction-span-wire.js +1 -1
  125. package/dist/extraction.js +11 -11
  126. package/dist/harmonic-retrieval.js +3 -3
  127. package/dist/index.js +68 -68
  128. package/dist/location/index.js +6 -6
  129. package/dist/maintenance/memory-governance.js +3 -3
  130. package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +3 -3
  131. package/dist/maintenance/rebuild-memory-projection-runner.js +5 -5
  132. package/dist/maintenance/rebuild-memory-projection.js +4 -4
  133. package/dist/memory-browse-http-glue.js +2 -2
  134. package/dist/memory-browse-operations.js +23 -23
  135. package/dist/namespaces/migrate.js +4 -4
  136. package/dist/namespaces/storage.js +3 -3
  137. package/dist/offline-sync-impression-drain.js +2 -2
  138. package/dist/operator-doctor-corpus.js +10 -10
  139. package/dist/operator-doctor-replica.js +4 -4
  140. package/dist/operator-toolkit.js +17 -17
  141. package/dist/orchestration/extraction-persist-deps.d.ts +2 -0
  142. package/dist/orchestration/extraction-persist-deps.d.ts.map +1 -1
  143. package/dist/orchestration/extraction-persist-promotion.d.ts +40 -10
  144. package/dist/orchestration/extraction-persist-promotion.d.ts.map +1 -1
  145. package/dist/orchestration/extraction-persist.d.ts.map +1 -1
  146. package/dist/orchestration/maintenance.js +15 -15
  147. package/dist/orchestrator.d.ts.map +1 -1
  148. package/dist/orchestrator.js +68 -68
  149. package/dist/recall-navigation-http-glue.js +2 -2
  150. package/dist/recall-navigation-operations.js +23 -23
  151. package/dist/recall-navigation.js +22 -22
  152. package/dist/relay/mission.d.ts +731 -3403
  153. package/dist/relay/mission.d.ts.map +1 -1
  154. package/dist/replica-divergence.js +3 -3
  155. package/dist/resume-bundles.js +6 -6
  156. package/dist/schemas.d.ts +346 -1771
  157. package/dist/schemas.d.ts.map +1 -1
  158. package/dist/semantic-consolidation.js +4 -4
  159. package/dist/semantic-rule-promotion.js +3 -3
  160. package/dist/semantic-rule-verifier.js +3 -3
  161. package/dist/shared-context/manager.d.ts +13 -33
  162. package/dist/shared-context/manager.d.ts.map +1 -1
  163. package/dist/source-agent-qualifier.js +9 -9
  164. package/dist/standup/build.js +4 -4
  165. package/dist/storage.js +2 -2
  166. package/dist/support-passport/access-operations.d.ts +51 -51
  167. package/dist/support-passport/contracts.d.ts +85 -126
  168. package/dist/support-passport/contracts.d.ts.map +1 -1
  169. package/dist/support-passport/generated-batch.d.ts +3 -17
  170. package/dist/support-passport/generated-batch.d.ts.map +1 -1
  171. package/dist/support-passport/grant-contracts.d.ts +75 -381
  172. package/dist/support-passport/grant-contracts.d.ts.map +1 -1
  173. package/dist/support-passport/index.js +25 -25
  174. package/dist/support-passport/model-audit.d.ts +17 -82
  175. package/dist/support-passport/model-audit.d.ts.map +1 -1
  176. package/dist/support-passport/model-bridge.d.ts +12 -51
  177. package/dist/support-passport/model-bridge.d.ts.map +1 -1
  178. package/dist/support-passport/model-contracts.d.ts +53 -192
  179. package/dist/support-passport/model-contracts.d.ts.map +1 -1
  180. package/dist/tokens.js +3 -3
  181. package/dist/transfer/export-okf.js +3 -3
  182. package/dist/transfer/types.d.ts +32 -737
  183. package/dist/transfer/types.d.ts.map +1 -1
  184. package/dist/verified-recall.js +3 -3
  185. package/dist/who-knows-cli.js +5 -5
  186. package/dist/who-knows.js +4 -4
  187. package/package.json +3 -4
  188. package/src/access-boundary.test.ts +14 -0
  189. package/src/access-boundary.ts +48 -42
  190. package/src/access-category-alias.test.ts +9 -7
  191. package/src/access-errors.test.ts +21 -9
  192. package/src/access-errors.ts +45 -31
  193. package/src/access-http.test.ts +1 -1
  194. package/src/access-schema.ts +13 -17
  195. package/src/extraction-scope-source-agent.test.ts +6 -6
  196. package/src/extraction-span-wire.test.ts +28 -0
  197. package/src/extraction-span-wire.ts +34 -6
  198. package/src/orchestration/extraction-persist-deps.ts +3 -0
  199. package/src/orchestration/extraction-persist-promotion.ts +104 -16
  200. package/src/orchestration/extraction-persist.ts +66 -77
  201. package/src/orchestrator-entity-write-failure.test.ts +370 -0
  202. package/src/orchestrator.ts +1 -0
  203. package/src/storage/entity-canonical-id-migration.ts +2 -2
  204. package/dist/chunk-23ZLN5X6.js.map +0 -1
  205. package/dist/chunk-3MUKQQ7A.js.map +0 -1
  206. package/dist/chunk-IMKOJVD4.js.map +0 -1
  207. package/dist/chunk-UZVQFGAY.js.map +0 -1
  208. package/dist/chunk-Z5277JWF.js.map +0 -1
  209. package/dist/chunk-ZMO2S5RT.js.map +0 -1
  210. /package/dist/{chunk-7YVER7ZO.js.map → chunk-2EXF6IIB.js.map} +0 -0
  211. /package/dist/{chunk-HPNXS6W6.js.map → chunk-2ONKXEC7.js.map} +0 -0
  212. /package/dist/{chunk-DMKTOCC7.js.map → chunk-2S6JADBB.js.map} +0 -0
  213. /package/dist/{chunk-ZSEFGDCI.js.map → chunk-2TGIKMMZ.js.map} +0 -0
  214. /package/dist/{chunk-Q3PNQYAC.js.map → chunk-44EUCSG4.js.map} +0 -0
  215. /package/dist/{chunk-PJCVI44H.js.map → chunk-4FM35YIA.js.map} +0 -0
  216. /package/dist/{chunk-M6TP6UYD.js.map → chunk-6ZAU7LAR.js.map} +0 -0
  217. /package/dist/{chunk-SJTSWG2Z.js.map → chunk-72CBJ5VP.js.map} +0 -0
  218. /package/dist/{chunk-EKYWZYZJ.js.map → chunk-75BK4XGV.js.map} +0 -0
  219. /package/dist/{chunk-HKOMHP6D.js.map → chunk-A6JDT6QF.js.map} +0 -0
  220. /package/dist/{chunk-TFWJXWL6.js.map → chunk-AHGOOZUC.js.map} +0 -0
  221. /package/dist/{chunk-A7AISUJI.js.map → chunk-AJG2TAMR.js.map} +0 -0
  222. /package/dist/{chunk-VCOMACR6.js.map → chunk-AZLD4CKG.js.map} +0 -0
  223. /package/dist/{chunk-GXVXBYRA.js.map → chunk-B35EQQ7L.js.map} +0 -0
  224. /package/dist/{chunk-E6UNM67F.js.map → chunk-B6SPPYGJ.js.map} +0 -0
  225. /package/dist/{chunk-TXKQBQYW.js.map → chunk-CK6GCGMX.js.map} +0 -0
  226. /package/dist/{chunk-NPLM7AFU.js.map → chunk-DF6ZF2BN.js.map} +0 -0
  227. /package/dist/{chunk-6ZQX3R66.js.map → chunk-DJFULNXK.js.map} +0 -0
  228. /package/dist/{chunk-JBWD3J5U.js.map → chunk-DQOGZZJA.js.map} +0 -0
  229. /package/dist/{chunk-K5QQXVG6.js.map → chunk-EC2KVA27.js.map} +0 -0
  230. /package/dist/{chunk-N74WJ7B2.js.map → chunk-EZS6QJNC.js.map} +0 -0
  231. /package/dist/{chunk-MWURUSRE.js.map → chunk-FNNGWN3O.js.map} +0 -0
  232. /package/dist/{chunk-5FUDSK6Z.js.map → chunk-FT75AQ74.js.map} +0 -0
  233. /package/dist/{chunk-5X2H3X4J.js.map → chunk-GE3ZX6YK.js.map} +0 -0
  234. /package/dist/{chunk-UNOAVHV4.js.map → chunk-HCIRR3BA.js.map} +0 -0
  235. /package/dist/{chunk-MLNXATFG.js.map → chunk-HEF4BRMT.js.map} +0 -0
  236. /package/dist/{chunk-6UDLN4IA.js.map → chunk-I6ORDT54.js.map} +0 -0
  237. /package/dist/{chunk-M4HRYLOA.js.map → chunk-IUQXRRJB.js.map} +0 -0
  238. /package/dist/{chunk-GQIYL7OD.js.map → chunk-JIJAWTRK.js.map} +0 -0
  239. /package/dist/{chunk-4KS4IHKH.js.map → chunk-JX3E4XCW.js.map} +0 -0
  240. /package/dist/{chunk-ZFNXJEUG.js.map → chunk-KAJYSO3U.js.map} +0 -0
  241. /package/dist/{chunk-QS765SBL.js.map → chunk-KETS5A62.js.map} +0 -0
  242. /package/dist/{chunk-N7FNCE7F.js.map → chunk-KIWO4327.js.map} +0 -0
  243. /package/dist/{chunk-FC3ZFEXF.js.map → chunk-KJ3MDX4V.js.map} +0 -0
  244. /package/dist/{chunk-BNJAVRNJ.js.map → chunk-L3EFYRYK.js.map} +0 -0
  245. /package/dist/{chunk-P7OVFGMU.js.map → chunk-LMB47UM6.js.map} +0 -0
  246. /package/dist/{chunk-7SAE6T36.js.map → chunk-LWMLBVGB.js.map} +0 -0
  247. /package/dist/{chunk-ZNRTHYYW.js.map → chunk-MC7PXJDP.js.map} +0 -0
  248. /package/dist/{chunk-M2DOJBH7.js.map → chunk-MUNYUSBU.js.map} +0 -0
  249. /package/dist/{chunk-LMMBV7QC.js.map → chunk-OCRLJJOV.js.map} +0 -0
  250. /package/dist/{chunk-7J6A5MV2.js.map → chunk-ON77FQXH.js.map} +0 -0
  251. /package/dist/{chunk-WV4UYDP6.js.map → chunk-POJRFSJM.js.map} +0 -0
  252. /package/dist/{chunk-LKRXGOQW.js.map → chunk-QA3Y2O6H.js.map} +0 -0
  253. /package/dist/{chunk-YECEEJUU.js.map → chunk-RA7YRL6H.js.map} +0 -0
  254. /package/dist/{chunk-UALXWWGN.js.map → chunk-RJDYDF5K.js.map} +0 -0
  255. /package/dist/{chunk-WXJC2L66.js.map → chunk-ROAKLYOL.js.map} +0 -0
  256. /package/dist/{chunk-NWIT3U2N.js.map → chunk-S5CQI2KF.js.map} +0 -0
  257. /package/dist/{chunk-P6P35FY4.js.map → chunk-SDESKFKT.js.map} +0 -0
  258. /package/dist/{chunk-UXGXJUZ5.js.map → chunk-SFRBUBUZ.js.map} +0 -0
  259. /package/dist/{chunk-CRN3EPE2.js.map → chunk-SHNM7RIT.js.map} +0 -0
  260. /package/dist/{chunk-XC3H7KON.js.map → chunk-SPTPBKZX.js.map} +0 -0
  261. /package/dist/{chunk-IUYXCTA7.js.map → chunk-TC55M5PO.js.map} +0 -0
  262. /package/dist/{chunk-EWBXMGXR.js.map → chunk-UCLJTGP3.js.map} +0 -0
  263. /package/dist/{chunk-754XN6LX.js.map → chunk-V27FK6D6.js.map} +0 -0
  264. /package/dist/{chunk-LIBVANOF.js.map → chunk-V6Z4NAJZ.js.map} +0 -0
  265. /package/dist/{chunk-XTXWR6KQ.js.map → chunk-VUMWVYMR.js.map} +0 -0
  266. /package/dist/{chunk-ZSMA67FV.js.map → chunk-WY66J4PI.js.map} +0 -0
  267. /package/dist/{chunk-5G53JSRO.js.map → chunk-XWJUFER3.js.map} +0 -0
  268. /package/dist/{chunk-NSP5PIQH.js.map → chunk-Y3T5KQCR.js.map} +0 -0
  269. /package/dist/{chunk-QTDZ2NYC.js.map → chunk-Y77FXULH.js.map} +0 -0
  270. /package/dist/{chunk-IG747LRN.js.map → chunk-YO2JEX2Z.js.map} +0 -0
  271. /package/dist/{chunk-KW5YZELC.js.map → chunk-ZKK3VMWU.js.map} +0 -0
  272. /package/dist/{entity-canonical-id-migration-ZBNRGUNV.js.map → entity-canonical-id-migration-F3JVG6K6.js.map} +0 -0
@@ -10,7 +10,7 @@ import {
10
10
  } from "./chunk-EKUI7I2X.js";
11
11
  import {
12
12
  StorageManager
13
- } from "./chunk-GQIYL7OD.js";
13
+ } from "./chunk-JIJAWTRK.js";
14
14
  import {
15
15
  normalizeEntityName
16
16
  } from "./chunk-YXZG5TVN.js";
@@ -974,4 +974,4 @@ export {
974
974
  resolveBriefingSaveDir,
975
975
  briefingFilename
976
976
  };
977
- //# sourceMappingURL=chunk-HKOMHP6D.js.map
977
+ //# sourceMappingURL=chunk-A6JDT6QF.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  StorageManager
3
- } from "./chunk-GQIYL7OD.js";
3
+ } from "./chunk-JIJAWTRK.js";
4
4
  import {
5
5
  keyring_exports,
6
6
  secureStoreDir
@@ -416,4 +416,4 @@ export {
416
416
  resolveNamespaceStorageRoot,
417
417
  NamespaceStorageRouter
418
418
  };
419
- //# sourceMappingURL=chunk-TFWJXWL6.js.map
419
+ //# sourceMappingURL=chunk-AHGOOZUC.js.map
@@ -4,7 +4,7 @@ import {
4
4
  } from "./chunk-PQVCH2AE.js";
5
5
  import {
6
6
  EngramAccessInputError
7
- } from "./chunk-3MUKQQ7A.js";
7
+ } from "./chunk-LGEH473S.js";
8
8
 
9
9
  // src/deep-recall-config.ts
10
10
  var DEEP_RECALL_CONFIG_DEFAULTS = {
@@ -100,4 +100,4 @@ export {
100
100
  parseDeepRecallMaxSteps,
101
101
  resolveEffectiveDeepRecallConfig
102
102
  };
103
- //# sourceMappingURL=chunk-A7AISUJI.js.map
103
+ //# sourceMappingURL=chunk-AJG2TAMR.js.map
@@ -34,7 +34,7 @@ import {
34
34
  import {
35
35
  exportOkfBundle,
36
36
  parseIncludeStatus
37
- } from "./chunk-7YVER7ZO.js";
37
+ } from "./chunk-2EXF6IIB.js";
38
38
  import {
39
39
  RoutingRulesStore
40
40
  } from "./chunk-TBUEE7XF.js";
@@ -58,7 +58,7 @@ import {
58
58
  } from "./chunk-EDR6CVWZ.js";
59
59
  import {
60
60
  rebuildMemoryLifecycleLedger
61
- } from "./chunk-N74WJ7B2.js";
61
+ } from "./chunk-EZS6QJNC.js";
62
62
  import {
63
63
  rebuildObservations
64
64
  } from "./chunk-WHCD4Z3D.js";
@@ -79,7 +79,7 @@ import {
79
79
  } from "./chunk-I7TR2OCU.js";
80
80
  import {
81
81
  searchVerifiedEpisodes
82
- } from "./chunk-WXJC2L66.js";
82
+ } from "./chunk-ROAKLYOL.js";
83
83
  import {
84
84
  getUtilityLearningStatus,
85
85
  learnUtilityPromotionWeights
@@ -93,15 +93,15 @@ import {
93
93
  } from "./chunk-R7WYAXPO.js";
94
94
  import {
95
95
  promoteSemanticRuleFromMemory
96
- } from "./chunk-M2DOJBH7.js";
96
+ } from "./chunk-MUNYUSBU.js";
97
97
  import {
98
98
  searchVerifiedSemanticRules
99
- } from "./chunk-XC3H7KON.js";
99
+ } from "./chunk-SPTPBKZX.js";
100
100
  import {
101
101
  buildResumeBundleFromState,
102
102
  getResumeBundleStatus,
103
103
  recordResumeBundle
104
- } from "./chunk-7J6A5MV2.js";
104
+ } from "./chunk-ON77FQXH.js";
105
105
  import {
106
106
  getWorkProductLedgerStatus,
107
107
  recordWorkProductLedgerEntry,
@@ -134,7 +134,7 @@ import {
134
134
  runOperatorInventory,
135
135
  runOperatorRepair,
136
136
  runOperatorSetup
137
- } from "./chunk-BNJAVRNJ.js";
137
+ } from "./chunk-L3EFYRYK.js";
138
138
  import {
139
139
  analyzeSessionIntegrity,
140
140
  applySessionRepair,
@@ -176,7 +176,7 @@ import {
176
176
  rebuildMemoryProjection,
177
177
  repairMemoryProjection,
178
178
  verifyMemoryProjection
179
- } from "./chunk-JBWD3J5U.js";
179
+ } from "./chunk-DQOGZZJA.js";
180
180
  import {
181
181
  buildConnectorRowsFromDefinitions,
182
182
  parseConnectorsListOptions,
@@ -197,7 +197,7 @@ import {
197
197
  } from "./chunk-6TBIWIAG.js";
198
198
  import {
199
199
  parseConfig
200
- } from "./chunk-QTDZ2NYC.js";
200
+ } from "./chunk-Y77FXULH.js";
201
201
  import {
202
202
  applyManagedRegion,
203
203
  expandVaultTemplateTokens,
@@ -210,7 +210,7 @@ import {
210
210
  import {
211
211
  EngramAccessHttpServer,
212
212
  MeetingsInputError
213
- } from "./chunk-EKYWZYZJ.js";
213
+ } from "./chunk-75BK4XGV.js";
214
214
  import {
215
215
  WearablesInputError
216
216
  } from "./chunk-V7IZKJI3.js";
@@ -220,10 +220,10 @@ import {
220
220
  loadChatSession,
221
221
  processChatMessage,
222
222
  sessionBelongsToPrincipal
223
- } from "./chunk-UXGXJUZ5.js";
223
+ } from "./chunk-SFRBUBUZ.js";
224
224
  import {
225
225
  EngramAccessService
226
- } from "./chunk-IMKOJVD4.js";
226
+ } from "./chunk-GBGU5OZP.js";
227
227
  import {
228
228
  WorkStorage
229
229
  } from "./chunk-MPC7TYTZ.js";
@@ -243,7 +243,7 @@ import {
243
243
  } from "./chunk-WUL6LDJ4.js";
244
244
  import {
245
245
  readAggregateExtractionWatermark
246
- } from "./chunk-5FUDSK6Z.js";
246
+ } from "./chunk-FT75AQ74.js";
247
247
  import {
248
248
  getObjectiveStateStoreStatus
249
249
  } from "./chunk-4RNBLLZR.js";
@@ -252,7 +252,7 @@ import {
252
252
  } from "./chunk-5DVOBBTV.js";
253
253
  import {
254
254
  searchHarmonicRetrieval
255
- } from "./chunk-ZSMA67FV.js";
255
+ } from "./chunk-WY66J4PI.js";
256
256
  import {
257
257
  getCueAnchorStoreStatus
258
258
  } from "./chunk-LXATZLSC.js";
@@ -261,12 +261,12 @@ import {
261
261
  readMemoryGovernanceRunArtifact,
262
262
  restoreMemoryGovernanceRun,
263
263
  runMemoryGovernance
264
- } from "./chunk-M6TP6UYD.js";
264
+ } from "./chunk-6ZAU7LAR.js";
265
265
  import {
266
266
  listNamespaces,
267
267
  runNamespaceMigration,
268
268
  verifyNamespaces
269
- } from "./chunk-YECEEJUU.js";
269
+ } from "./chunk-RA7YRL6H.js";
270
270
  import {
271
271
  resolveNamespaceChildRoot
272
272
  } from "./chunk-3UXOZBHV.js";
@@ -283,7 +283,7 @@ import {
283
283
  } from "./chunk-AWD36R4D.js";
284
284
  import {
285
285
  parseDeepRecallMaxSteps
286
- } from "./chunk-A7AISUJI.js";
286
+ } from "./chunk-AJG2TAMR.js";
287
287
  import {
288
288
  SKILL_FILE_NAME,
289
289
  SKILL_IMPORT_SOURCE,
@@ -303,7 +303,7 @@ import {
303
303
  } from "./chunk-NRGQ5HJO.js";
304
304
  import {
305
305
  meetingIdDate
306
- } from "./chunk-GQIYL7OD.js";
306
+ } from "./chunk-JIJAWTRK.js";
307
307
  import {
308
308
  isValidTranscriptDate
309
309
  } from "./chunk-UHVXE24Y.js";
@@ -10140,4 +10140,4 @@ export {
10140
10140
  listMemoryMarkdownFilePaths,
10141
10141
  registerCli
10142
10142
  };
10143
- //# sourceMappingURL=chunk-VCOMACR6.js.map
10143
+ //# sourceMappingURL=chunk-AZLD4CKG.js.map
@@ -8,11 +8,11 @@ import {
8
8
  } from "./chunk-WR5POHQ3.js";
9
9
  import {
10
10
  resolveDefaultNamespaceRoot
11
- } from "./chunk-TFWJXWL6.js";
11
+ } from "./chunk-AHGOOZUC.js";
12
12
  import {
13
13
  StorageManager,
14
14
  readRawMemoryDocument
15
- } from "./chunk-GQIYL7OD.js";
15
+ } from "./chunk-JIJAWTRK.js";
16
16
  import {
17
17
  parseContinuityImprovementLoops
18
18
  } from "./chunk-LDXUBPMO.js";
@@ -1869,4 +1869,4 @@ export {
1869
1869
  defaultTierMigrationCycleBudget,
1870
1870
  CompoundingEngine
1871
1871
  };
1872
- //# sourceMappingURL=chunk-GXVXBYRA.js.map
1872
+ //# sourceMappingURL=chunk-B35EQQ7L.js.map
@@ -8,7 +8,7 @@ import {
8
8
  capabilityAllowsNamespace,
9
9
  isCapabilityRestricted,
10
10
  isValidNamespaceValue
11
- } from "./chunk-IG747LRN.js";
11
+ } from "./chunk-YO2JEX2Z.js";
12
12
 
13
13
  // src/replica-divergence.ts
14
14
  var DEFAULT_MAX_CONCURRENT_PEER_FETCHES = 4;
@@ -429,4 +429,4 @@ export {
429
429
  gateReportByCensus,
430
430
  ReplicaDivergenceMonitor
431
431
  };
432
- //# sourceMappingURL=chunk-E6UNM67F.js.map
432
+ //# sourceMappingURL=chunk-B6SPPYGJ.js.map
@@ -3,7 +3,7 @@ import {
3
3
  headerConnector,
4
4
  renderExtractionConversation,
5
5
  resolveSourceConnector
6
- } from "./chunk-M4HRYLOA.js";
6
+ } from "./chunk-IUQXRRJB.js";
7
7
  import {
8
8
  normalizeReasoningTrace
9
9
  } from "./chunk-54V4BZWP.js";
@@ -13,7 +13,7 @@ import {
13
13
  import {
14
14
  extractionProviderJsonSchema,
15
15
  extractionProviderResponseFormat
16
- } from "./chunk-23ZLN5X6.js";
16
+ } from "./chunk-QT5MGENX.js";
17
17
  import {
18
18
  ConsolidationResultSchema,
19
19
  DaySummaryResultSchema,
@@ -2441,4 +2441,4 @@ export {
2441
2441
  shouldEnableLocalExtractionThinking,
2442
2442
  ExtractionEngine
2443
2443
  };
2444
- //# sourceMappingURL=chunk-TXKQBQYW.js.map
2444
+ //# sourceMappingURL=chunk-CK6GCGMX.js.map
@@ -1,13 +1,13 @@
1
1
  import {
2
2
  parseFrontmatter
3
- } from "./chunk-GQIYL7OD.js";
3
+ } from "./chunk-JIJAWTRK.js";
4
4
  import {
5
5
  activityDigestPath,
6
6
  isValidActivityDate
7
7
  } from "./chunk-353C5UNV.js";
8
8
  import {
9
9
  EngramAccessInputError
10
- } from "./chunk-3MUKQQ7A.js";
10
+ } from "./chunk-LGEH473S.js";
11
11
 
12
12
  // src/standup/build.ts
13
13
  import { readdirSync, readFileSync } from "fs";
@@ -199,4 +199,4 @@ export {
199
199
  buildStandup,
200
200
  standupHelp
201
201
  };
202
- //# sourceMappingURL=chunk-NPLM7AFU.js.map
202
+ //# sourceMappingURL=chunk-DF6ZF2BN.js.map
@@ -1,12 +1,12 @@
1
1
  import {
2
2
  parseDeepRecallMaxSteps
3
- } from "./chunk-A7AISUJI.js";
3
+ } from "./chunk-AJG2TAMR.js";
4
4
  import {
5
5
  deepRecallRequestSchema
6
- } from "./chunk-Z5277JWF.js";
6
+ } from "./chunk-HQUYENKK.js";
7
7
  import {
8
8
  EngramAccessInputError
9
- } from "./chunk-3MUKQQ7A.js";
9
+ } from "./chunk-LGEH473S.js";
10
10
 
11
11
  // src/deep-recall-http-glue.ts
12
12
  async function respondDeepRecall(req, res, respondJson, readJsonBody, service, scopeFor, abortSignal) {
@@ -40,4 +40,4 @@ async function respondDeepRecall(req, res, respondJson, readJsonBody, service, s
40
40
  export {
41
41
  respondDeepRecall
42
42
  };
43
- //# sourceMappingURL=chunk-6ZQX3R66.js.map
43
+ //# sourceMappingURL=chunk-DJFULNXK.js.map
@@ -7,10 +7,10 @@ import {
7
7
  import {
8
8
  listMemoryGovernanceRuns,
9
9
  readMemoryGovernanceRunArtifact
10
- } from "./chunk-M6TP6UYD.js";
10
+ } from "./chunk-6ZAU7LAR.js";
11
11
  import {
12
12
  StorageManager
13
- } from "./chunk-GQIYL7OD.js";
13
+ } from "./chunk-JIJAWTRK.js";
14
14
  import {
15
15
  normalizeProjectionPreview,
16
16
  normalizeProjectionTags
@@ -1156,4 +1156,4 @@ export {
1156
1156
  verifyMemoryProjection,
1157
1157
  repairMemoryProjection
1158
1158
  };
1159
- //# sourceMappingURL=chunk-JBWD3J5U.js.map
1159
+ //# sourceMappingURL=chunk-DQOGZZJA.js.map
@@ -9,26 +9,26 @@ import {
9
9
  } from "./chunk-666A3MOW.js";
10
10
  import {
11
11
  PROJECTION_REBUILD_RUNNER_FLAG
12
- } from "./chunk-7SAE6T36.js";
12
+ } from "./chunk-LWMLBVGB.js";
13
13
  import {
14
14
  startLocationAutoSync
15
- } from "./chunk-ZFNXJEUG.js";
15
+ } from "./chunk-KAJYSO3U.js";
16
16
  import {
17
17
  CompoundingEngine,
18
18
  isIsoWeekId,
19
19
  msUntilNextIsoWeek,
20
20
  previousIsoWeekId
21
- } from "./chunk-GXVXBYRA.js";
21
+ } from "./chunk-B35EQQ7L.js";
22
22
  import {
23
23
  rebuildMemoryLifecycleLedger
24
- } from "./chunk-N74WJ7B2.js";
24
+ } from "./chunk-EZS6QJNC.js";
25
25
  import {
26
26
  planNamespaceMaintenance,
27
27
  runNamespaceMaintenanceBatchPlan
28
- } from "./chunk-SJTSWG2Z.js";
28
+ } from "./chunk-72CBJ5VP.js";
29
29
  import {
30
30
  rebuildMemoryProjection
31
- } from "./chunk-JBWD3J5U.js";
31
+ } from "./chunk-DQOGZZJA.js";
32
32
  import {
33
33
  DEFAULT_TIMELINE_CATEGORIES,
34
34
  TIMELINE_RESERVED_IDLE,
@@ -2793,4 +2793,4 @@ export {
2793
2793
  ActivitySyncScheduler,
2794
2794
  MaintenanceScheduler
2795
2795
  };
2796
- //# sourceMappingURL=chunk-K5QQXVG6.js.map
2796
+ //# sourceMappingURL=chunk-EC2KVA27.js.map
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-KJTKLXTH.js";
4
4
  import {
5
5
  StorageManager
6
- } from "./chunk-GQIYL7OD.js";
6
+ } from "./chunk-JIJAWTRK.js";
7
7
  import {
8
8
  assertInjectedStorageRooted
9
9
  } from "./chunk-QIMGULGN.js";
@@ -260,4 +260,4 @@ export {
260
260
  backupExistingLedger,
261
261
  rebuildMemoryLifecycleLedger
262
262
  };
263
- //# sourceMappingURL=chunk-N74WJ7B2.js.map
263
+ //# sourceMappingURL=chunk-EZS6QJNC.js.map
@@ -34,7 +34,7 @@ import {
34
34
  } from "./chunk-NVKO5YKP.js";
35
35
  import {
36
36
  compareEntityTimestamps
37
- } from "./chunk-GQIYL7OD.js";
37
+ } from "./chunk-JIJAWTRK.js";
38
38
  import {
39
39
  normalizeEntityText,
40
40
  resolveRequestedEntitySectionKeys
@@ -927,4 +927,4 @@ export {
927
927
  entityIndexVersion,
928
928
  entityRecentTranscriptLookbackHours
929
929
  };
930
- //# sourceMappingURL=chunk-MWURUSRE.js.map
930
+ //# sourceMappingURL=chunk-FNNGWN3O.js.map
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  resolveCorpusNamespaceRoots
3
- } from "./chunk-PJCVI44H.js";
3
+ } from "./chunk-4FM35YIA.js";
4
4
  import {
5
5
  capabilityAllowsNamespace
6
- } from "./chunk-IG747LRN.js";
6
+ } from "./chunk-YO2JEX2Z.js";
7
7
  import {
8
8
  normalizeNamespaceIdentity
9
9
  } from "./chunk-VUFL7X3H.js";
@@ -200,4 +200,4 @@ async function readAggregateExtractionWatermark(options) {
200
200
  export {
201
201
  readAggregateExtractionWatermark
202
202
  };
203
- //# sourceMappingURL=chunk-5FUDSK6Z.js.map
203
+ //# sourceMappingURL=chunk-FT75AQ74.js.map
@@ -57,7 +57,7 @@ var ENTITY_MAPPING_RESCAN_MAX_PASSES = 3;
57
57
  var EntityCanonicalIdMigrationStateSchema = z.object({
58
58
  version: z.literal(ENTITY_CANONICAL_ID_MIGRATION_VERSION),
59
59
  complete: z.boolean(),
60
- mappings: z.record(z.string().min(1)),
60
+ mappings: z.record(z.string(), z.string().min(1)),
61
61
  completionFingerprint: z.string().optional(),
62
62
  /**
63
63
  * Pairs the migration refused to resolve, PARKED rather than dropped.
@@ -66,7 +66,7 @@ var EntityCanonicalIdMigrationStateSchema = z.object({
66
66
  * still naming the legacy id would never be rewritten. Optional so a journal
67
67
  * written by an older build still parses.
68
68
  */
69
- blocked: z.record(z.string().min(1)).optional()
69
+ blocked: z.record(z.string(), z.string().min(1)).optional()
70
70
  });
71
71
  async function fingerprintPath(filePath) {
72
72
  let fileStat;
@@ -891,4 +891,4 @@ export {
891
891
  readSafeEntityEntries,
892
892
  migrateLegacyEntityCanonicalIds
893
893
  };
894
- //# sourceMappingURL=chunk-ZMO2S5RT.js.map
894
+ //# sourceMappingURL=chunk-G6A3SGCE.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/storage/entity-canonical-id-migration.ts"],"sourcesContent":["import { createHash, randomUUID } from \"node:crypto\";\nimport {\n access,\n lstat,\n readFile,\n readdir,\n realpath,\n rename,\n stat as statFile,\n unlink,\n writeFile,\n} from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { lstatSync, readFileSync } from \"node:fs\";\nimport { z } from \"zod\";\nimport { computeSupersessionKey, normalizeSupersessionKey } from \"../temporal-supersession.js\";\nimport type { EntityFile, MemoryFile } from \"../types.js\";\nimport { log } from \"../logger.js\";\nimport { isErrnoCode } from \"../utils/errno.js\";\nimport { withHeldFileLock } from \"../utils/serialize-mutations.js\";\nimport { RECALL_FALLBACK_DIRS } from \"../utils/category-dir.js\";\nimport { assertPathInsideRoot } from \"../utils/path-containment.js\";\nimport { withEntityCanonicalMutationLock } from \"./entity-canonical-id-lock.js\";\nimport { assertSafeEntityId } from \"./entity-id-safety.js\";\nimport { isMalformedEntityRecord } from \"../utils/malformed-entity-record.js\";\nimport {\n isMacOsReplicationJunkBasename,\n warnIgnoredMacOsReplicationJunk,\n} from \"../utils/macos-replication-junk.js\";\n\nimport {\n ENTITY_CANONICAL_ID_MIGRATION_FILE,\n ENTITY_CANONICAL_ID_RECONCILE_CONSUMING_MARKER,\n ENTITY_CANONICAL_ID_RECONCILE_MARKER,\n resolveHistoricalEntityCanonicalId,\n} from \"./entity-canonical-id-references.js\";\n\nconst ENTITY_CANONICAL_ID_MIGRATION_VERSION = 1;\nconst ENTITY_CANONICAL_ID_MIGRATION_LOCK_STALE_MS = 60_000;\nconst ENTITY_CANONICAL_ID_MIGRATION_LOCK_MAX_WAIT_MS = 300_000;\nconst TOMBSTONE_LOCK_STALE_MS = 30_000;\nconst TOMBSTONE_LOCK_MAX_WAIT_MS = 5_000;\nconst MEMORY_REWRITE_MAX_PASSES = 3;\nconst ENTITY_MAPPING_RESCAN_MAX_PASSES = 3;\n\nconst EntityCanonicalIdMigrationStateSchema = z.object({\n version: z.literal(ENTITY_CANONICAL_ID_MIGRATION_VERSION),\n complete: z.boolean(),\n mappings: z.record(z.string(), z.string().min(1)),\n completionFingerprint: z.string().optional(),\n /**\n * Pairs the migration refused to resolve, PARKED rather than dropped.\n * Deleting the record would strand the collision: once an operator removes\n * the legacy file, no later scan can rediscover the mapping, so references\n * still naming the legacy id would never be rewritten. Optional so a journal\n * written by an older build still parses.\n */\n blocked: z.record(z.string(), z.string().min(1)).optional(),\n});\n\ntype EntityCanonicalIdMigrationState = z.infer<typeof EntityCanonicalIdMigrationStateSchema>;\n\nexport interface EntityCanonicalIdMigrationDependencies {\n stateDir: string;\n entitiesDir: string;\n normalizeEntityName(raw: string, type: string): string;\n resolveEntityFilePath(id: string): string | null;\n readStorageSecureFile(filePath: string): Promise<string>;\n writeStorageSecureFile(filePath: string, content: string, forceEncrypt?: boolean): Promise<void>;\n isEncryptedStorageFile(filePath: string): Promise<boolean>;\n snapshotBeforeWrite(filePath: string, trigger: \"write\"): Promise<void>;\n parseEntityFile(content: string): EntityFile;\n serializeEntityFile(entity: EntityFile): string;\n serializeMemoryWithEntityRef(memory: MemoryFile, entityRef: string): string;\n readMemoryByPath(filePath: string): Promise<MemoryFile | null>;\n readAllMemories(): Promise<MemoryFile[]>;\n readAllColdMemories(): Promise<MemoryFile[]>;\n readArchivedMemories(): Promise<MemoryFile[]>;\n validateMemoryScanRoots?(): Promise<void>;\n rewriteProjectedEntityReferences(mappings: Readonly<Record<string, string>>): Promise<void>;\n rewriteProjectedMemoryEntityReference(\n memoryId: string,\n previousEntityRef: string,\n nextEntityRef: string,\n ): Promise<void>;\n invalidateKnowledgeIndexCache(): void;\n invalidateAllMemoriesCache(): void;\n invalidateColdMemoriesCache(): void;\n bumpMemoryStatusVersion(): void;\n readMigrationFingerprint?(): Promise<string>;\n}\n\nasync function fingerprintPath(filePath: string): Promise<string> {\n let fileStat;\n try {\n fileStat = await lstat(filePath);\n } catch (error) {\n if (!isErrnoCode(error, \"ENOENT\")) throw error;\n }\n return fileStat\n ? `${fileStat.dev}:${fileStat.ino}:${fileStat.mtimeMs}:${fileStat.ctimeMs}:${fileStat.size}`\n : \"missing\";\n}\n\nasync function fingerprintEntityEntries(entitiesDir: string): Promise<string> {\n let names: string[];\n try {\n names = (await readdir(entitiesDir))\n .filter((name) => path.extname(name) === \".md\" && !isMacOsReplicationJunkBasename(name))\n .sort();\n } catch (error) {\n if (isErrnoCode(error, \"ENOENT\")) return \"missing\";\n throw error;\n }\n const hash = createHash(\"sha256\");\n for (const name of names) {\n hash.update(`${name.length}:${name}:`);\n try {\n const entry = await lstat(path.join(entitiesDir, name), { bigint: true });\n hash.update(`${entry.dev}:${entry.ino}:${entry.size}:${entry.mtimeNs}:${entry.ctimeNs}`);\n } catch (error) {\n if (!isErrnoCode(error, \"ENOENT\")) throw error;\n hash.update(\"missing\");\n }\n hash.update(\"\\n\");\n }\n return hash.digest(\"hex\");\n}\n\n/**\n * Completion fingerprint for migration inputs only. Entity entry identities\n * catch same-path edits that do not change the directory inode; the cooperative\n * sentinel covers managed writes. Memory-corpus writes stay excluded so plain\n * fact writes do not reopen migration.\n */\nexport async function getFingerprint(\n baseDir: string,\n entitiesDir: string,\n getEntityMutationVersion: () => string,\n): Promise<string> {\n const [\n entityDirectoryFingerprint,\n entityEntriesFingerprint,\n aliasFingerprint,\n reconcileFingerprint,\n consumingFingerprint,\n ] = await Promise.all([\n fingerprintPath(entitiesDir),\n fingerprintEntityEntries(entitiesDir),\n fingerprintPath(path.join(baseDir, \"config\", \"aliases.json\")),\n fingerprintPath(path.join(baseDir, \"state\", ENTITY_CANONICAL_ID_RECONCILE_MARKER)),\n fingerprintPath(path.join(baseDir, \"state\", ENTITY_CANONICAL_ID_RECONCILE_CONSUMING_MARKER)),\n ]);\n return [\n entityDirectoryFingerprint,\n entityEntriesFingerprint,\n aliasFingerprint,\n reconcileFingerprint,\n consumingFingerprint,\n getEntityMutationVersion(),\n ].join(\":\");\n}\n\nexport async function validateRoots(\n baseDir: string,\n entitiesDir: string,\n stateDir: string,\n archiveDir: string,\n): Promise<void> {\n let baseStat;\n try {\n baseStat = await lstat(baseDir);\n } catch (error) {\n if (isErrnoCode(error, \"ENOENT\")) return;\n throw error;\n }\n if (baseStat.isSymbolicLink() || !baseStat.isDirectory()) {\n throw new Error(`Refusing entity canonical-id migration through unsafe memory root: ${baseDir}.`);\n }\n const memoryRoot = await realpath(baseDir);\n const roots = [\n entitiesDir,\n stateDir,\n ...RECALL_FALLBACK_DIRS.map((directory) => path.join(baseDir, directory)),\n path.join(baseDir, \"cold\"),\n archiveDir,\n ];\n for (const root of roots) {\n let rootStat;\n try {\n rootStat = await lstat(root);\n } catch (error) {\n if (isErrnoCode(error, \"ENOENT\")) continue;\n throw error;\n }\n if (rootStat.isSymbolicLink() || !rootStat.isDirectory()) {\n throw new Error(`Refusing entity canonical-id migration through unsafe memory root: ${root}.`);\n }\n assertPathInsideRoot(memoryRoot, await realpath(root), root);\n }\n}\n\nfunction statePath(deps: EntityCanonicalIdMigrationDependencies): string {\n return path.join(deps.stateDir, ENTITY_CANONICAL_ID_MIGRATION_FILE);\n}\n\nasync function assertSafeMigrationStateFile(\n deps: EntityCanonicalIdMigrationDependencies,\n): Promise<void> {\n const migrationStatePath = statePath(deps);\n let fileStat;\n try {\n fileStat = await lstat(migrationStatePath);\n } catch (error) {\n if (isErrnoCode(error, \"ENOENT\")) return;\n throw error;\n }\n if (fileStat.isSymbolicLink() || !fileStat.isFile()) {\n throw new Error(\n `Refusing entity canonical-id migration through unsafe migration state file: ${migrationStatePath}.`,\n );\n }\n const [stateRoot, stateFile] = await Promise.all([\n realpath(deps.stateDir),\n realpath(migrationStatePath),\n ]);\n assertPathInsideRoot(stateRoot, stateFile, migrationStatePath);\n}\nasync function assertSafeTombstoneFile(\n deps: EntityCanonicalIdMigrationDependencies,\n tombstonePath: string,\n): Promise<boolean> {\n let fileStat;\n try {\n fileStat = await lstat(tombstonePath);\n } catch (error) {\n if (isErrnoCode(error, \"ENOENT\")) return false;\n throw error;\n }\n if (fileStat.isSymbolicLink() || !fileStat.isFile()) {\n throw new Error(\n `Refusing entity canonical-id migration through unsafe tombstone ledger: ${tombstonePath}.`,\n );\n }\n const [stateRoot, tombstoneFile] = await Promise.all([\n realpath(deps.stateDir),\n realpath(tombstonePath),\n ]);\n assertPathInsideRoot(stateRoot, tombstoneFile, tombstonePath);\n return true;\n}\n\nfunction lockPath(deps: EntityCanonicalIdMigrationDependencies): string {\n return path.join(deps.stateDir, \"entity-canonical-id-migration.lock\");\n}\n\n\nasync function readState(\n deps: EntityCanonicalIdMigrationDependencies\n): Promise<EntityCanonicalIdMigrationState | null> {\n await assertSafeMigrationStateFile(deps);\n let raw: string;\n try {\n raw = await readFile(statePath(deps), \"utf-8\");\n } catch (error) {\n if (isErrnoCode(error, \"ENOENT\")) return null;\n throw error;\n }\n\n let parsed: unknown;\n try {\n parsed = JSON.parse(raw);\n } catch {\n throw new Error(\"Invalid entity canonical-id migration state.\");\n }\n const result = EntityCanonicalIdMigrationStateSchema.safeParse(parsed);\n if (!result.success) throw new Error(\"Invalid entity canonical-id migration state.\");\n for (const mappings of [result.data.mappings, result.data.blocked ?? {}]) {\n for (const [legacyId, canonicalId] of Object.entries(mappings)) {\n assertSafeEntityId(legacyId);\n assertSafeEntityId(canonicalId);\n }\n }\n return result.data;\n}\n\nasync function writeState(\n deps: EntityCanonicalIdMigrationDependencies,\n state: EntityCanonicalIdMigrationState\n): Promise<void> {\n const destination = statePath(deps);\n const temporary = `${destination}.${process.pid}.${randomUUID()}.tmp`;\n try {\n await writeFile(temporary, `${JSON.stringify(state, null, 2)}\\n`, \"utf-8\");\n await rename(temporary, destination);\n } finally {\n await unlink(temporary).catch(() => undefined);\n }\n}\n\n/**\n * Every journal publish — additive merges, completion markers, prunes —\n * serializes under the entity MUTATION lock (issue #2213 review): entity\n * writers, post-persist repair settles, and tombstone appends revalidate\n * the journal identity under that lock, so an unlocked publish could land\n * inside their resolve→write window and strand the write on a superseded\n * id space.\n */\nasync function publishState(\n deps: EntityCanonicalIdMigrationDependencies,\n state: EntityCanonicalIdMigrationState\n): Promise<void> {\n await withEntityCanonicalMutationLock(deps.stateDir, async () => {\n await writeState(deps, state);\n });\n}\n\nasync function fileExists(filePath: string): Promise<boolean> {\n try {\n await access(filePath);\n return true;\n } catch (error) {\n if (isErrnoCode(error, \"ENOENT\")) return false;\n throw error;\n }\n}\n\nasync function sameFileIdentity(leftPath: string, rightPath: string): Promise<boolean> {\n try {\n const [left, right] = await Promise.all([statFile(leftPath), statFile(rightPath)]);\n return left.dev === right.dev && left.ino === right.ino;\n } catch (error) {\n if (isErrnoCode(error, \"ENOENT\")) return false;\n throw error;\n }\n}\n\nasync function assertNotSymlink(filePath: string, label: string): Promise<void> {\n let stat;\n try {\n stat = await lstat(filePath);\n } catch (error) {\n if (isErrnoCode(error, \"ENOENT\")) return;\n throw error;\n }\n if (stat.isSymbolicLink()) {\n throw new Error(`Refusing entity canonical-id migration through symlink: ${label}.`);\n }\n}\nasync function assertNotMemorySymlink(filePath: string): Promise<void> {\n let stat;\n try {\n stat = await lstat(filePath);\n } catch (error) {\n if (isErrnoCode(error, \"ENOENT\")) return;\n throw error;\n }\n if (stat.isSymbolicLink()) {\n throw new Error(`Refusing entity canonical-id migration through symlinked memory: ${filePath}.`);\n }\n}\nasync function assertEntityContentUnchanged(\n deps: EntityCanonicalIdMigrationDependencies,\n filePath: string,\n expectedContent: string,\n legacyId: string,\n): Promise<void> {\n const latestContent = await deps.readStorageSecureFile(filePath);\n if (latestContent !== expectedContent) {\n throw new Error(`Legacy entity id ${legacyId} changed while migration was running; retry migration.`);\n }\n}\n\n/**\n * Fail-closed entity-entry validation for the startup path: refuses a\n * symlinked or non-directory entities root and any symlinked entry, without\n * taking the migration lock. Exported so `ensureDirectories()` can run it\n * before deferring the migration (#3139) — the same check\n * `migrateLegacyEntityCanonicalIds` performs under the lock.\n */\nexport async function readSafeEntityEntries(entitiesDir: string): Promise<string[]> {\n const rootStat = await lstat(entitiesDir);\n if (rootStat.isSymbolicLink() || !rootStat.isDirectory()) {\n throw new Error(\"Refusing entity canonical-id migration through a symlinked or non-directory entities root.\");\n }\n const entries = await readdir(entitiesDir);\n for (const entry of entries) {\n await assertNotSymlink(path.join(entitiesDir, entry), entry);\n }\n return entries;\n}\n\n/**\n * Legacy ids the migration cannot resolve on its own, mapped to the canonical\n * id they collide with. Two entity files describing one entity is an ORDINARY\n * operator state, and picking a winner would silently drop whichever side lost.\n * So the pair is skipped and reported: reads of the legacy id keep working\n * exactly as they did before the migration ran.\n */\nexport type BlockedEntityPairs = Map<string, string>;\n\ninterface EntityScanNotes {\n junk: Set<string>;\n malformed: Set<string>;\n}\n\nasync function discoverMappings(\n deps: EntityCanonicalIdMigrationDependencies,\n knownMappings: Readonly<Record<string, string>> = {},\n blocked: BlockedEntityPairs = new Map(),\n scanNotes?: EntityScanNotes,\n): Promise<Record<string, string>> {\n const mappings: Record<string, string> = {};\n const canonicalOwners = new Map<string, string[]>();\n // Blocks describe THIS scan of the directory, so they are rebuilt per pass.\n // Accumulating them across a run would let a collision another writer has\n // since resolved keep pruning its now-valid mapping: the entity file gets\n // renamed while the pruned mapping skips the reference rewrite, stranding\n // memories on a filename that no longer exists.\n blocked.clear();\n const entityEntries = await readSafeEntityEntries(deps.entitiesDir);\n for (const entry of entityEntries) {\n // AppleDouble (`._*`) and `.DS_Store` are Finder metadata, not entity\n // files. A real file that cannot be parsed is left in place: this scan\n // runs during directory init, and aborting it took the daemon down.\n // Skipping is the same outcome as the old throw (the file is not\n // rewritten) without refusing to boot. Symlink checks above still run.\n if (isMacOsReplicationJunkBasename(entry)) {\n scanNotes?.junk.add(entry);\n continue;\n }\n if (!entry.endsWith(\".md\")) continue;\n const legacyId = entry.slice(0, -\".md\".length);\n assertSafeEntityId(legacyId);\n const legacyPath = deps.resolveEntityFilePath(legacyId);\n if (legacyPath === null) continue;\n const entityContent = await deps.readStorageSecureFile(legacyPath);\n if (isMalformedEntityRecord(entityContent)) {\n scanNotes?.malformed.add(entry);\n continue;\n }\n const entity = deps.parseEntityFile(entityContent);\n if (!entity.name.trim() || !entity.type.trim()) {\n scanNotes?.malformed.add(entry);\n continue;\n }\n const canonicalId = deps.normalizeEntityName(entity.name, entity.type);\n assertSafeEntityId(canonicalId);\n if (legacyId === canonicalId) continue;\n const canonicalPath = deps.resolveEntityFilePath(canonicalId);\n if (canonicalPath === null) continue;\n const canonicalExists = await fileExists(canonicalPath);\n if (\n canonicalExists\n && await sameFileIdentity(legacyPath, canonicalPath)\n && knownMappings[legacyId] === canonicalId\n ) continue;\n if (canonicalExists) {\n const canonicalContent = await deps.readStorageSecureFile(canonicalPath);\n if (entityContent !== canonicalContent) {\n blocked.set(legacyId, canonicalId);\n continue;\n }\n }\n canonicalOwners.set(canonicalId, [...(canonicalOwners.get(canonicalId) ?? []), legacyId]);\n mappings[legacyId] = canonicalId;\n }\n // A canonical id claimed by more than one legacy file has no non-arbitrary\n // winner, and readdir order is not stable (§6) - so the \"winner\" would differ\n // between hosts reading identical data. Block every claimant instead.\n for (const [canonicalId, claimants] of canonicalOwners) {\n if (claimants.length < 2) continue;\n for (const legacyId of claimants) {\n blocked.set(legacyId, canonicalId);\n delete mappings[legacyId];\n }\n }\n return mappings;\n}\n\nasync function rewriteReferences(\n deps: EntityCanonicalIdMigrationDependencies,\n mappings: Readonly<Record<string, string>>,\n refreshLock: () => Promise<boolean>\n): Promise<{ rewroteColdMemory: boolean }> {\n let rewroteColdMemory = false;\n for (let pass = 0; pass < MEMORY_REWRITE_MAX_PASSES; pass += 1) {\n deps.invalidateAllMemoriesCache();\n deps.invalidateColdMemoriesCache();\n const [hotMemories, coldMemories, archivedMemories] = await Promise.all([\n deps.readAllMemories(),\n deps.readAllColdMemories(),\n deps.readArchivedMemories(),\n ]);\n const seenPaths = new Set<string>();\n let rewroteAny = false;\n for (const memory of [...hotMemories, ...coldMemories, ...archivedMemories]) {\n const memoryPath = path.resolve(memory.path);\n if (seenPaths.has(memoryPath)) continue;\n seenPaths.add(memoryPath);\n const previousEntityRef = memory.frontmatter.entityRef;\n const canonicalId = previousEntityRef ? mappings[previousEntityRef] : undefined;\n if (!previousEntityRef || !canonicalId) continue;\n await assertNotMemorySymlink(memory.path);\n const observedMemoryFingerprint = await fingerprintPath(memory.path);\n if (observedMemoryFingerprint === \"missing\") continue;\n if (!(await refreshLock())) throw new Error(\"Lost entity canonical-id migration lock.\");\n const latestMemory = await deps.readMemoryByPath(memory.path);\n if (!latestMemory) continue;\n const latestMemoryFingerprint = await fingerprintPath(latestMemory.path);\n if (latestMemoryFingerprint !== observedMemoryFingerprint) continue;\n const latestPreviousEntityRef = latestMemory.frontmatter.entityRef;\n const latestCanonicalId = latestPreviousEntityRef ? mappings[latestPreviousEntityRef] : undefined;\n if (!latestPreviousEntityRef || !latestCanonicalId) continue;\n const memoryEncrypted = await deps.isEncryptedStorageFile(latestMemory.path);\n if ((await fingerprintPath(latestMemory.path)) !== latestMemoryFingerprint) continue;\n await deps.snapshotBeforeWrite(latestMemory.path, \"write\");\n if ((await fingerprintPath(latestMemory.path)) !== latestMemoryFingerprint) continue;\n await deps.writeStorageSecureFile(\n latestMemory.path,\n deps.serializeMemoryWithEntityRef(latestMemory, latestCanonicalId),\n memoryEncrypted,\n );\n await deps.rewriteProjectedMemoryEntityReference(\n latestMemory.frontmatter.id,\n latestPreviousEntityRef,\n latestCanonicalId,\n );\n rewroteAny = true;\n rewroteColdMemory ||= latestMemory.path.includes(`${path.sep}cold${path.sep}`);\n }\n if (!rewroteAny) return { rewroteColdMemory };\n }\n throw new Error(\"Memory references changed while entity canonical-id migration was running; retry migration.\");\n}\n\nfunction rewriteTombstoneLine(\n line: string,\n mappings: Readonly<Record<string, string>>,\n normalizedMappings: ReadonlyMap<string, string>,\n): string {\n let parsed: unknown;\n try {\n parsed = JSON.parse(line);\n } catch {\n return line;\n }\n if (!parsed || typeof parsed !== \"object\" || Array.isArray(parsed)) return line;\n\n const tombstone = parsed as Record<string, unknown>;\n let changed = false;\n if (typeof tombstone.entityRef === \"string\") {\n const canonicalId = mappings[tombstone.entityRef];\n if (canonicalId) {\n tombstone.entityRef = canonicalId;\n changed = true;\n }\n }\n if (typeof tombstone.supersessionKey === \"string\") {\n const separator = tombstone.supersessionKey.indexOf(\"::\");\n if (separator < 0) return changed ? JSON.stringify(tombstone) : line;\n const normalizedLegacyId = normalizeSupersessionKey(tombstone.supersessionKey.slice(0, separator));\n const canonicalId = normalizedMappings.get(normalizedLegacyId);\n if (canonicalId) {\n const canonicalKey = computeSupersessionKey(canonicalId, tombstone.supersessionKey.slice(separator + 2));\n if (canonicalKey) {\n tombstone.supersessionKey = canonicalKey;\n changed = true;\n }\n }\n }\n return changed ? JSON.stringify(tombstone) : line;\n}\n\nasync function rewriteTombstoneReferences(\n deps: EntityCanonicalIdMigrationDependencies,\n mappings: Readonly<Record<string, string>>,\n refreshLock: () => Promise<boolean>\n): Promise<void> {\n const tombstonePath = path.join(deps.stateDir, \"tombstones.jsonl\");\n const normalizedMappings = new Map<string, string>();\n for (const [legacyId, canonicalId] of Object.entries(mappings)) {\n const normalizedLegacyId = normalizeSupersessionKey(legacyId);\n if (normalizedLegacyId && !normalizedMappings.has(normalizedLegacyId)) {\n normalizedMappings.set(normalizedLegacyId, canonicalId);\n }\n }\n\n await withHeldFileLock(\n path.join(deps.stateDir, \"tombstones.lock\"),\n {\n staleMs: TOMBSTONE_LOCK_STALE_MS,\n maxWaitMs: TOMBSTONE_LOCK_MAX_WAIT_MS,\n },\n async (acquired, tombstoneLock) => {\n if (!acquired) throw new Error(\"Timed out waiting for active tombstone migration.\");\n if (!(await assertSafeTombstoneFile(deps, tombstonePath))) return;\n const tombstoneEncrypted = await deps.isEncryptedStorageFile(tombstonePath);\n const original = await deps.readStorageSecureFile(tombstonePath);\n let changed = false;\n const rewritten = original\n .split(\"\\n\")\n .map((line) => {\n const next = rewriteTombstoneLine(line, mappings, normalizedMappings);\n changed ||= next !== line;\n return next;\n })\n .join(\"\\n\");\n if (!changed) return;\n if (!(await refreshLock())) throw new Error(\"Lost entity canonical-id migration lock.\");\n if (!(await tombstoneLock.refresh())) throw new Error(\"Lost tombstone migration lock.\");\n await deps.snapshotBeforeWrite(tombstonePath, \"write\");\n await deps.writeStorageSecureFile(tombstonePath, rewritten, tombstoneEncrypted);\n },\n );\n}\n\nasync function rewriteRelationshipTargets(\n deps: EntityCanonicalIdMigrationDependencies,\n mappings: Readonly<Record<string, string>>,\n refreshLock: () => Promise<boolean>\n): Promise<boolean> {\n let rewritten = false;\n const entries = await readSafeEntityEntries(deps.entitiesDir);\n for (const entry of entries) {\n if (!entry.endsWith(\".md\") || isMacOsReplicationJunkBasename(entry)) continue;\n const entityPath = deps.resolveEntityFilePath(entry.slice(0, -\".md\".length));\n if (entityPath === null) continue;\n const observedEntityFingerprint = await fingerprintPath(entityPath);\n if (observedEntityFingerprint === \"missing\") continue;\n const entityRaw = await deps.readStorageSecureFile(entityPath);\n if (isMalformedEntityRecord(entityRaw)) continue;\n const entity = deps.parseEntityFile(entityRaw);\n const relationships = entity.relationships.map((relationship) => {\n const target = mappings[relationship.target];\n return target ? { ...relationship, target } : relationship;\n });\n if (relationships.every((relationship, index) => relationship === entity.relationships[index])) continue;\n const rewroteEntity = await withEntityCanonicalMutationLock(\n deps.stateDir,\n async (refreshEntityLock) => {\n if (!(await refreshLock())) throw new Error(\"Lost entity canonical-id migration lock.\");\n const latestRaw = await deps.readStorageSecureFile(entityPath);\n if (isMalformedEntityRecord(latestRaw)) return false;\n const latestEntity = deps.parseEntityFile(latestRaw);\n if ((await fingerprintPath(entityPath)) !== observedEntityFingerprint) return false;\n const latestRelationships = latestEntity.relationships.map((relationship) => {\n const target = mappings[relationship.target];\n return target ? { ...relationship, target } : relationship;\n });\n if (latestRelationships.every((relationship, index) => relationship === latestEntity.relationships[index])) {\n return false;\n }\n const entityEncrypted = await deps.isEncryptedStorageFile(entityPath);\n if (!(await refreshEntityLock())) throw new Error(\"Lost entity mutation lock.\");\n if ((await fingerprintPath(entityPath)) !== observedEntityFingerprint) return false;\n await deps.snapshotBeforeWrite(entityPath, \"write\");\n if ((await fingerprintPath(entityPath)) !== observedEntityFingerprint) return false;\n await deps.writeStorageSecureFile(\n entityPath,\n deps.serializeEntityFile({ ...latestEntity, relationships: latestRelationships }),\n entityEncrypted,\n );\n return true;\n },\n );\n rewritten ||= rewroteEntity;\n }\n return rewritten;\n}\n\nasync function rewriteKnownReferences(\n deps: EntityCanonicalIdMigrationDependencies,\n mappings: Readonly<Record<string, string>>,\n refreshLock: () => Promise<boolean>,\n): Promise<boolean> {\n await rewriteRelationshipTargets(deps, mappings, refreshLock);\n let rewroteColdMemory = (await rewriteReferences(deps, mappings, refreshLock)).rewroteColdMemory;\n await rewriteTombstoneReferences(deps, mappings, refreshLock);\n await deps.rewriteProjectedEntityReferences(mappings);\n const finalMemoryPass = await rewriteReferences(deps, mappings, refreshLock);\n rewroteColdMemory ||= finalMemoryPass.rewroteColdMemory;\n return rewroteColdMemory;\n}\n\nfunction wouldCreateMappingCycle(\n mappings: Readonly<Record<string, string>>,\n legacyId: string,\n canonicalId: string,\n): boolean {\n let current = canonicalId;\n const seen = new Set<string>();\n while (true) {\n if (current === legacyId) return true;\n if (seen.has(current)) return false;\n seen.add(current);\n const next = mappings[current];\n if (!next || next === current) return false;\n current = next;\n }\n}\n\nfunction rejectMappingCycles(\n existing: Readonly<Record<string, string>>,\n discovered: Readonly<Record<string, string>>,\n): Record<string, string> {\n const accepted: Record<string, string> = {};\n const merged = { ...existing };\n for (const [legacyId, canonicalId] of Object.entries(discovered)) {\n if (\n merged[legacyId] === undefined &&\n wouldCreateMappingCycle(merged, legacyId, canonicalId)\n ) continue;\n accepted[legacyId] = canonicalId;\n merged[legacyId] = canonicalId;\n }\n return accepted;\n}\n\nfunction mergeDiscoveredMappings(\n existing: Readonly<Record<string, string>>,\n discovered: Readonly<Record<string, string>>,\n): Record<string, string> {\n const merged = { ...existing };\n const canonicalOwners = new Map<string, string>();\n for (const [legacyId, canonicalId] of Object.entries(discovered)) {\n const previousMapping = merged[legacyId];\n if (previousMapping !== undefined && previousMapping !== canonicalId) {\n continue;\n }\n if (previousMapping === undefined && wouldCreateMappingCycle(merged, legacyId, canonicalId)) continue;\n const previousOwner = canonicalOwners.get(canonicalId);\n if (previousOwner !== undefined && previousOwner !== legacyId) {\n throw new Error(\n `Cannot migrate legacy entity ids ${previousOwner} and ${legacyId}: both normalize to ${canonicalId}.`,\n );\n }\n merged[legacyId] = canonicalId;\n canonicalOwners.set(canonicalId, legacyId);\n }\n return merged;\n}\nfunction collapseMappings(mappings: Readonly<Record<string, string>>): Record<string, string> {\n const collapsed: Record<string, string> = {};\n for (const legacyId of Object.keys(mappings)) {\n let current = legacyId;\n const seen = new Set<string>();\n while (true) {\n const next = mappings[current];\n if (!next || next === current) break;\n if (seen.has(current)) {\n throw new Error(`Entity canonical-id migration mapping cycle includes ${legacyId}.`);\n }\n seen.add(current);\n current = next;\n }\n if (current !== legacyId) collapsed[legacyId] = current;\n }\n return collapsed;\n}\n\ntype EntityFileMigrationResult = {\n deferred: boolean;\n progressed: boolean;\n /** The pair collided on content; skipped and reported, never migrated. */\n blocked?: boolean;\n};\n\nasync function migrateEntityFilePair(\n deps: EntityCanonicalIdMigrationDependencies,\n legacyId: string,\n canonicalId: string,\n refreshMigrationLock: () => Promise<boolean>,\n): Promise<EntityFileMigrationResult> {\n return withEntityCanonicalMutationLock(deps.stateDir, async (refreshEntityLock) => {\n assertSafeEntityId(legacyId);\n assertSafeEntityId(canonicalId);\n const legacyPath = deps.resolveEntityFilePath(legacyId);\n const canonicalPath = deps.resolveEntityFilePath(canonicalId);\n if (legacyPath === null || canonicalPath === null) {\n throw new Error(\"Invalid entity canonical-id migration path.\");\n }\n await assertNotSymlink(legacyPath, legacyId);\n await assertNotSymlink(canonicalPath, canonicalId);\n const legacyExists = await fileExists(legacyPath);\n const canonicalExists = await fileExists(canonicalPath);\n if (!legacyExists && !canonicalExists) return { deferred: true, progressed: false };\n if (legacyExists && canonicalExists) {\n if (await sameFileIdentity(legacyPath, canonicalPath)) return { deferred: false, progressed: false };\n const [legacyContent, canonicalContent, legacyEncrypted, canonicalEncrypted] = await Promise.all([\n deps.readStorageSecureFile(legacyPath),\n deps.readStorageSecureFile(canonicalPath),\n deps.isEncryptedStorageFile(legacyPath),\n deps.isEncryptedStorageFile(canonicalPath),\n ]);\n if (legacyContent !== canonicalContent) {\n // A mapping persisted by an older build, or a file changed since\n // discovery. Same verdict as discovery: skip the pair, keep both files.\n return { deferred: false, progressed: false, blocked: true };\n }\n if (legacyEncrypted && !canonicalEncrypted) {\n if (!(await refreshMigrationLock()) || !(await refreshEntityLock())) {\n throw new Error(\"Lost entity canonical-id migration lock.\");\n }\n await deps.snapshotBeforeWrite(canonicalPath, \"write\");\n await deps.writeStorageSecureFile(canonicalPath, legacyContent, true);\n if ((await deps.readStorageSecureFile(canonicalPath)) !== legacyContent) {\n throw new Error(`Cannot verify migrated entity id ${canonicalId}.`);\n }\n }\n if (!(await refreshMigrationLock()) || !(await refreshEntityLock())) {\n throw new Error(\"Lost entity canonical-id migration lock.\");\n }\n await deps.snapshotBeforeWrite(legacyPath, \"write\");\n await assertNotSymlink(legacyPath, legacyId);\n await assertEntityContentUnchanged(deps, legacyPath, legacyContent, legacyId);\n await unlink(legacyPath);\n return { deferred: false, progressed: true };\n }\n if (!legacyExists) return { deferred: false, progressed: false };\n if (!(await refreshMigrationLock()) || !(await refreshEntityLock())) {\n throw new Error(\"Lost entity canonical-id migration lock.\");\n }\n const entityEncrypted = await deps.isEncryptedStorageFile(legacyPath);\n const entityContent = await deps.readStorageSecureFile(legacyPath);\n await assertNotSymlink(legacyPath, legacyId);\n await assertEntityContentUnchanged(deps, legacyPath, entityContent, legacyId);\n // A journal entry must not relocate Finder metadata or a record this scan\n // would leave in place. readStorageSecureFile has already decrypted, so\n // the check is on that plaintext. The mapping stays for a later repair.\n if (\n isMacOsReplicationJunkBasename(path.basename(legacyPath))\n || isMalformedEntityRecord(entityContent)\n ) {\n return { deferred: false, progressed: false };\n }\n let canonicalFingerprintAfterWrite: string | null = null;\n try {\n await deps.writeStorageSecureFile(canonicalPath, entityContent, entityEncrypted);\n canonicalFingerprintAfterWrite = await fingerprintPath(canonicalPath);\n if ((await deps.readStorageSecureFile(canonicalPath)) !== entityContent) {\n throw new Error(`Cannot verify migrated entity id ${canonicalId}.`);\n }\n if (!(await refreshMigrationLock()) || !(await refreshEntityLock())) {\n throw new Error(\"Lost entity canonical-id migration lock.\");\n }\n await deps.snapshotBeforeWrite(legacyPath, \"write\");\n await assertNotSymlink(legacyPath, legacyId);\n await assertEntityContentUnchanged(deps, legacyPath, entityContent, legacyId);\n await unlink(legacyPath);\n } catch (error) {\n if (!canonicalExists && canonicalFingerprintAfterWrite !== null) {\n try {\n if ((await fingerprintPath(canonicalPath)) === canonicalFingerprintAfterWrite) {\n await assertNotSymlink(canonicalPath, canonicalId);\n await unlink(canonicalPath);\n }\n } catch {\n // Preserve the migration error when cleanup races another writer.\n }\n }\n throw error;\n }\n return { deferred: false, progressed: true };\n });\n}\n\nexport async function migrateLegacyEntityCanonicalIds(\n deps: EntityCanonicalIdMigrationDependencies,\n): Promise<string | undefined> {\n return withHeldFileLock(\n lockPath(deps),\n {\n staleMs: ENTITY_CANONICAL_ID_MIGRATION_LOCK_STALE_MS,\n maxWaitMs: ENTITY_CANONICAL_ID_MIGRATION_LOCK_MAX_WAIT_MS,\n },\n async (acquired, lock) => {\n if (!acquired) throw new Error(\"Timed out waiting for active entity canonical-id migration.\");\n await deps.validateMemoryScanRoots?.();\n await readSafeEntityEntries(deps.entitiesDir);\n // A raw-byte writer (offline sync, consolidation-undo, governance\n // restore) may have landed memory bytes this process never vetted; the\n // marker requests ONE reference-reconciliation pass (issue #2213). The\n // observed generation is RENAMED aside before the pass so a request made\n // WHILE this run scans creates a fresh marker that survives finish() —\n // and a `.consuming` file left by a crashed run still owes its pass.\n const reconcileMarkerPath = path.join(deps.stateDir, ENTITY_CANONICAL_ID_RECONCILE_MARKER);\n const consumingMarkerPath = path.join(deps.stateDir, ENTITY_CANONICAL_ID_RECONCILE_CONSUMING_MARKER);\n let reconcileRequested = await fileExists(consumingMarkerPath);\n if (await fileExists(reconcileMarkerPath)) {\n try {\n await rename(reconcileMarkerPath, consumingMarkerPath);\n reconcileRequested = true;\n } catch (error) {\n if (!isErrnoCode(error, \"ENOENT\")) throw error;\n }\n }\n let state: EntityCanonicalIdMigrationState = await readState(deps) ?? {\n version: ENTITY_CANONICAL_ID_MIGRATION_VERSION,\n complete: false,\n mappings: {},\n };\n const blocked: BlockedEntityPairs = new Map();\n const scanNotes: EntityScanNotes = { junk: new Set(), malformed: new Set() };\n // Parks for pairs whose files are GONE, tracked separately from\n // collision parks: pruneBlocked drops these (the canonical file is gone\n // too), and the rescan's blocked.clear() would otherwise silence them\n // before finish() reports anything.\n const staleParked: BlockedEntityPairs = new Map();\n // ONE aggregated line per run, not one per pair per restart: this used to\n // abort the daemon, so the operator needs the whole list and the remedy.\n const finish = async (): Promise<string | undefined> => {\n if (blocked.size > 0) {\n const pairs = [...blocked].map(([legacyId, canonicalId]) => `${legacyId} -> ${canonicalId}`).join(\", \");\n log.warn(\n `entity canonical-id migration skipped ${blocked.size} unresolvable pair(s): ${pairs}. `\n + \"Both files were kept and the legacy id still resolves; merge or delete one side to migrate it.\",\n );\n }\n if (staleParked.size > 0) {\n const pairs = [...staleParked].map(([legacyId, canonicalId]) => `${legacyId} -> ${canonicalId}`).join(\", \");\n log.warn(\n `entity canonical-id migration dropped ${staleParked.size} mapping(s) whose entity files are gone: ${pairs}. `\n + \"The stale journal entries were removed; references to those legacy ids do not resolve either way.\",\n );\n }\n warnIgnoredMacOsReplicationJunk(deps.entitiesDir, scanNotes.junk.size, (message) => {\n log.warn(`entity canonical-id migration ${message}`);\n });\n if (scanNotes.malformed.size > 0) {\n const names = [...scanNotes.malformed].sort().join(\", \");\n log.warn(\n `entity canonical-id migration skipped ${scanNotes.malformed.size} malformed entity file(s): ${names}. `\n + \"Each file was left in place; startup continues. Fix or remove the file to migrate it.\",\n );\n }\n // Every finish() path either just rewrote references (main/reconcile\n // paths), has none to rewrite (empty mappings), or observed no marker\n // (stable no-op) — so the CONSUMED generation is removed here. A fresh\n // marker written mid-run is untouched, and a crash before this point\n // leaves `.consuming` set for the next run (the rewrite is idempotent).\n if (reconcileRequested) {\n await unlink(consumingMarkerPath).catch((error: unknown) => {\n if (!isErrnoCode(error, \"ENOENT\")) throw error;\n });\n }\n // A FRESH marker written while this run scanned means bytes landed the\n // pass may not have covered. Withholding the completion fingerprint\n // makes the runner's stability check fail, so it immediately retries —\n // and the retry consumes the fresh generation. ORDER MATTERS: read the\n // fingerprint BEFORE the marker check. A marker landing after the\n // fingerprint read but before the check is caught by the check; one\n // landing after the check is absent from the returned fingerprint, so\n // the live marker mismatches the runner's cached completion and the\n // next ensure() re-invokes. Checking first left a window where the\n // fingerprint could SEAL a marker the check never saw.\n const completionFingerprint = await deps.readMigrationFingerprint?.();\n if (await fileExists(reconcileMarkerPath)) return undefined;\n if (completionFingerprint !== undefined && state.completionFingerprint !== completionFingerprint) {\n state = { ...state, complete: true, completionFingerprint };\n await publishState(deps, state);\n }\n return completionFingerprint;\n };\n /**\n * Drop blocked pairs from the working set. Discovery only refuses to\n * ADD them; a mapping persisted by an earlier run would otherwise still\n * be applied - migrating one claimant and rewriting every reference onto\n * the canonical file, i.e. picking the winner this fix exists to avoid,\n * off stale state rather than what is on disk.\n */\n /** @returns true when a park was promoted back into the mapping set. */\n const pruneBlocked = async (): Promise<boolean> => {\n const current = state;\n if (!current) return false;\n // THIS scan's verdict wins over the journal: normalization can change\n // between runs, so a stale parked target would otherwise be promoted\n // later and rewrite references onto an id that does not exist.\n let revived = false;\n const parked: Record<string, string> = { ...(current.blocked ?? {}) };\n const active: Record<string, string> = {};\n for (const [legacyId, canonicalId] of Object.entries(current.mappings)) {\n if (!blocked.has(legacyId)) active[legacyId] = canonicalId;\n }\n for (const [legacyId, canonicalId] of blocked) parked[legacyId] = canonicalId;\n // A parked pair whose legacy file is gone was resolved by keeping the\n // canonical side. The rename is moot; the reference rewrite is not, and\n // this record is the only thing that can still perform it.\n // A park survives ONLY while this scan re-establishes the collision.\n // Anything else - the scan found a real migration, or found the source\n // needs none (already canonical under a newer normalization) - makes\n // the record obsolete, and keeping it lets a later deletion promote a\n // target the entity never occupied.\n for (const [legacyId, canonicalId] of Object.entries(parked)) {\n if (blocked.has(legacyId)) continue;\n delete parked[legacyId];\n if (active[legacyId] !== undefined) continue;\n const legacyPath = deps.resolveEntityFilePath(legacyId);\n if (legacyPath !== null && (await fileExists(legacyPath))) continue;\n // Resolve the parked target through ACTIVE moves before deciding\n // its file is gone: a parked A -> B beside an active B -> C must\n // promote to A -> C and rewrite, not drop because B was moved\n // out-of-band. Only a target with no surviving file may drop.\n let target = canonicalId;\n const seenTargets = new Set<string>();\n while (active[target] !== undefined && !seenTargets.has(target)) {\n seenTargets.add(target);\n target = active[target]!;\n }\n const targetPath = deps.resolveEntityFilePath(target);\n if (targetPath === null || !(await fileExists(targetPath))) {\n staleParked.set(legacyId, canonicalId);\n continue;\n }\n active[legacyId] = target;\n revived = true;\n }\n // Reviving a whole chain at once yields A -> B -> C, and each rewrite\n // surface makes a different number of passes over it - so collapse\n // transitively before anything consumes the set.\n const collapsed = collapseMappings(active);\n // Parked targets follow ACTIVE moves only: hopping over a still-blocked\n // link would jump to an id the migration has not been allowed to reach.\n for (const [legacyId, canonicalId] of Object.entries(parked)) {\n const moved = collapsed[canonicalId];\n if (moved !== undefined && moved !== legacyId) parked[legacyId] = moved;\n }\n const same = (a: Record<string, string>, b: Record<string, string>): boolean =>\n Object.keys(a).length === Object.keys(b).length\n && Object.entries(a).every(([key, value]) => b[key] === value);\n if (same(collapsed, current.mappings) && same(parked, current.blocked ?? {})) return revived;\n // Parking/removing an active mapping mid-entity-write would land an\n // alias/activity/relationship mutation on a now-unrelated canonical\n // claimant — the reconcile pass rewrites references, it cannot move\n // a misplaced mutation. publishState serializes under the lock.\n state = { ...current, mappings: collapsed, blocked: parked };\n await publishState(deps, state);\n return revived;\n };\n const previousMappings = state.mappings;\n const collapsedMappings = collapseMappings(previousMappings);\n const mappingsChanged =\n Object.keys(collapsedMappings).length !== Object.keys(previousMappings).length\n || Object.entries(collapsedMappings).some(([legacyId, canonicalId]) =>\n previousMappings[legacyId] !== canonicalId\n );\n state = { ...state, mappings: collapsedMappings };\n for (let migrationPass = 0; migrationPass < ENTITY_MAPPING_RESCAN_MAX_PASSES; migrationPass += 1) {\n if (!(await lock.refresh())) throw new Error(\"Lost entity canonical-id migration lock.\");\n const discoveredBefore = rejectMappingCycles(\n state.mappings,\n await discoverMappings(deps, state.mappings, blocked, scanNotes),\n );\n const revivedBefore = await pruneBlocked();\n const mergedBefore = collapseMappings(mergeDiscoveredMappings(state.mappings, discoveredBefore));\n // Stable completed journal → no-op (issue #2213). Retained mappings are\n // read-compat state whose references were already rewritten (to\n // convergence) before `complete: true` was persisted, so re-running\n // `rewriteKnownReferences` here re-read the ENTIRE hot+cold+archived\n // corpus — twice — and invalidated every memory cache on EVERY\n // `ensureDirectories()`. On a write-active daemon that was a\n // self-sustaining hot loop (multi-GB/s of re-reads, caches never warm,\n // recall degraded to the fallback path). A park revived by THIS run's\n // pruneBlocked still owes its reference rewrite: it falls through to\n // the main flow below, which demotes `complete` BEFORE rewriting — so\n // a crash mid-rewrite resumes, which the old in-place rewrite did not.\n if (\n state.complete\n && Object.keys(discoveredBefore).length === 0\n && !mappingsChanged\n && !revivedBefore\n ) {\n // Stable journal, but a raw-byte writer requested reconciliation:\n // run ONE bounded rewrite pass over the retained mappings, then let\n // finish() consume the marker.\n if (reconcileRequested && Object.keys(state.mappings).length > 0) {\n const rewroteColdMemory = await rewriteKnownReferences(\n deps,\n state.mappings,\n () => lock.refresh(),\n );\n deps.invalidateKnowledgeIndexCache();\n deps.invalidateAllMemoriesCache();\n if (rewroteColdMemory) deps.invalidateColdMemoriesCache();\n deps.bumpMemoryStatusVersion();\n }\n return finish();\n }\n if (\n state.complete\n || Object.keys(discoveredBefore).length > 0\n || Object.keys(mergedBefore).length !== Object.keys(state.mappings).length\n ) {\n state = { ...state, complete: false, mappings: mergedBefore };\n await publishState(deps, state);\n }\n if (Object.keys(state.mappings).length === 0) {\n if (!(await lock.refresh())) throw new Error(\"Lost entity canonical-id migration lock.\");\n const discoveredAfter = rejectMappingCycles(\n state.mappings,\n await discoverMappings(deps, state.mappings, blocked, scanNotes),\n );\n // Reconcile before declaring completion: this rescan can resolve a\n // park (another writer removed the legacy file), and completing\n // without promoting it strands its references behind a fingerprint\n // that already reflects the deletion - so no later run revisits it.\n const revivedInRescan = await pruneBlocked();\n if (Object.keys(discoveredAfter).length === 0 && !revivedInRescan) {\n await publishState(deps, { ...state, complete: true });\n return finish();\n }\n state = {\n ...state,\n complete: false,\n mappings: collapseMappings(mergeDiscoveredMappings(state.mappings, discoveredAfter)),\n };\n await publishState(deps, state);\n continue;\n }\n let pendingMappings = Object.entries(state.mappings);\n while (pendingMappings.length > 0) {\n const deferredMappings: Array<[string, string]> = [];\n let progressed = false;\n for (const [legacyId, canonicalId] of pendingMappings) {\n const result = await migrateEntityFilePair(\n deps,\n legacyId,\n canonicalId,\n () => lock.refresh(),\n );\n if (result.blocked) blocked.set(legacyId, canonicalId);\n else if (result.deferred) deferredMappings.push([legacyId, canonicalId]);\n progressed ||= result.progressed;\n }\n if (deferredMappings.length === 0) break;\n if (!progressed) {\n // Deferred means both files are missing: no later pass can help\n // these pairs, so park them all instead of Fatal-exiting.\n for (const [legacyId, canonicalId] of deferredMappings) {\n blocked.set(legacyId, canonicalId);\n staleParked.set(legacyId, canonicalId);\n }\n break;\n }\n pendingMappings = deferredMappings;\n }\n await pruneBlocked();\n\n const rewroteColdMemory = await rewriteKnownReferences(\n deps,\n state.mappings,\n () => lock.refresh(),\n );\n deps.invalidateKnowledgeIndexCache();\n deps.invalidateAllMemoriesCache();\n if (rewroteColdMemory) deps.invalidateColdMemoriesCache();\n deps.bumpMemoryStatusVersion();\n\n if (!(await lock.refresh())) throw new Error(\"Lost entity canonical-id migration lock.\");\n const discoveredAfter = rejectMappingCycles(\n state.mappings,\n await discoverMappings(deps, state.mappings, blocked, scanNotes),\n );\n // A park resolved after the rewrite pass is promoted here, and a\n // promotion still has to be APPLIED. Completing on `discoveredAfter`\n // alone fingerprints the post-deletion corpus, so the runner never\n // retries and those references stay stranded.\n const revivedAfterRewrite = await pruneBlocked();\n if (Object.keys(discoveredAfter).length === 0 && !revivedAfterRewrite) {\n await publishState(deps, { ...state, complete: true });\n return finish();\n }\n state = {\n ...state,\n complete: false,\n mappings: collapseMappings(mergeDiscoveredMappings(state.mappings, discoveredAfter)),\n };\n await publishState(deps, state);\n }\n throw new Error(\"Entity canonical-id migration mappings changed while migration was running; retry migration.\");\n }\n );\n}\n"],"mappings":"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","names":["rewroteColdMemory","discoveredAfter"]}