@remnic/core 9.69.58 → 9.69.60

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 (156) hide show
  1. package/dist/access-admin-ops-surface.js +11 -11
  2. package/dist/access-authorization-probe.js +12 -12
  3. package/dist/access-boundary.js +11 -11
  4. package/dist/access-cli.js +46 -46
  5. package/dist/access-extraction-force-flush.js +11 -11
  6. package/dist/access-http-briefing.js +12 -12
  7. package/dist/access-http-query.js +13 -13
  8. package/dist/access-http.js +27 -27
  9. package/dist/access-identity-continuity-surface.js +11 -11
  10. package/dist/access-lcm-surface.js +11 -11
  11. package/dist/access-mcp.js +20 -20
  12. package/dist/access-namespace-preflight.js +11 -11
  13. package/dist/access-observe-write-surface.js +11 -11
  14. package/dist/access-operations-batch.js +12 -12
  15. package/dist/access-operations.js +19 -19
  16. package/dist/access-recall-concurrency.js +11 -11
  17. package/dist/access-recall-response.js +11 -11
  18. package/dist/access-recall-surface.js +11 -11
  19. package/dist/access-service.js +11 -11
  20. package/dist/access-surface-catalog.js +13 -13
  21. package/dist/active-recall.js +1 -1
  22. package/dist/briefing.js +2 -2
  23. package/dist/causal-consolidation.js +3 -3
  24. package/dist/{chunk-P7M22CYB.js → chunk-2NZ7KWRW.js} +2 -2
  25. package/dist/{chunk-S2OBXHMN.js → chunk-2T2RF5ZK.js} +25 -15
  26. package/dist/{chunk-S2OBXHMN.js.map → chunk-2T2RF5ZK.js.map} +1 -1
  27. package/dist/{chunk-2CBWEIS4.js → chunk-42G4FIKQ.js} +2 -2
  28. package/dist/{chunk-4ALOINQ4.js → chunk-4B5S3VWD.js} +8 -8
  29. package/dist/{chunk-2JQZSQXI.js → chunk-4HNY6ORZ.js} +2 -2
  30. package/dist/{chunk-KA4U5GQN.js → chunk-5SV2GFZX.js} +2 -2
  31. package/dist/{chunk-C6LRFPZL.js → chunk-6JYYSDHH.js} +3 -3
  32. package/dist/{chunk-3RZOLUZT.js → chunk-7DNMX7SA.js} +2 -2
  33. package/dist/{chunk-VLDVNZQE.js → chunk-7WSQZJPC.js} +2 -2
  34. package/dist/{chunk-FSXD6Y4H.js → chunk-AAMFQHKI.js} +2 -2
  35. package/dist/{chunk-X45KZOT2.js → chunk-ADP2VCP6.js} +5 -5
  36. package/dist/{chunk-HKHZWJ3E.js → chunk-AJW2K7K3.js} +2 -2
  37. package/dist/{chunk-ZMT4ZVJU.js → chunk-BJX6G726.js} +18 -18
  38. package/dist/{chunk-DTABICJ3.js → chunk-DJ4CKWAD.js} +2 -2
  39. package/dist/{chunk-XIXM6G7I.js → chunk-EJO2NWW7.js} +2 -2
  40. package/dist/{chunk-TFXXMTHV.js → chunk-EN2YX5SF.js} +2 -2
  41. package/dist/{chunk-ZIEZJMFW.js → chunk-F6WCOXTF.js} +2 -2
  42. package/dist/{chunk-ONWVMYHX.js → chunk-FKFTPFUG.js} +2 -2
  43. package/dist/{chunk-B7SSU55V.js → chunk-G6E7XJYL.js} +7 -7
  44. package/dist/{chunk-AULKCNZW.js → chunk-HW2QYZEV.js} +3 -3
  45. package/dist/{chunk-H7O5L2IQ.js → chunk-IDBLAGIM.js} +10 -10
  46. package/dist/{chunk-34ZGBAGE.js → chunk-IV6APZJS.js} +2 -2
  47. package/dist/{chunk-MMMYRC7Q.js → chunk-JGT7M3BA.js} +3 -3
  48. package/dist/{chunk-N4VCHRLD.js → chunk-KPKGDQR3.js} +2 -2
  49. package/dist/{chunk-IUD6NLNM.js → chunk-KR5SZNNF.js} +2 -2
  50. package/dist/{chunk-5R3C5LEZ.js → chunk-L3R24OLZ.js} +2 -2
  51. package/dist/{chunk-7H2LEYYJ.js → chunk-NYVECYCF.js} +2 -2
  52. package/dist/{chunk-NVCWA4QC.js → chunk-OINFRHLR.js} +2 -2
  53. package/dist/{chunk-CS2JO77A.js → chunk-OVJFS5P5.js} +2 -2
  54. package/dist/{chunk-MWZMVLXL.js → chunk-Q5FL3MEH.js} +2 -2
  55. package/dist/{chunk-RBULO7DO.js → chunk-Q6C5PIBW.js} +2 -2
  56. package/dist/{chunk-SLULR4GC.js → chunk-Q7KQ5YHT.js} +2 -2
  57. package/dist/{chunk-4QEZS7PK.js → chunk-QJTFMH5Y.js} +2 -2
  58. package/dist/{chunk-RN6ZCNM5.js → chunk-R4Y5PF25.js} +1 -1
  59. package/dist/{chunk-XVW52M6I.js → chunk-RP7TZEI6.js} +2 -2
  60. package/dist/{chunk-S3JPD4N7.js → chunk-TAC5WFJC.js} +2 -2
  61. package/dist/{chunk-RDESQOEE.js → chunk-TAIIC5OM.js} +3 -3
  62. package/dist/{chunk-SJV3AOZ2.js → chunk-TDULASPE.js} +5 -5
  63. package/dist/{chunk-LAL4B37X.js → chunk-UD6J2LIA.js} +2 -2
  64. package/dist/{chunk-LQ23DMTT.js → chunk-VRF2KFI2.js} +2 -2
  65. package/dist/{chunk-YXQE67A7.js → chunk-WD2JD2UB.js} +2 -2
  66. package/dist/{chunk-634UKELB.js → chunk-XX2IGMCB.js} +2 -2
  67. package/dist/{chunk-JSJZ2NXS.js → chunk-Y76HXF3F.js} +16 -16
  68. package/dist/{chunk-LV6ZB6CA.js → chunk-YHGRA7CK.js} +2 -2
  69. package/dist/{chunk-5QRYGLZN.js → chunk-ZLVUWROW.js} +2 -2
  70. package/dist/{chunk-ZHUVMSHI.js → chunk-ZWWKKAJL.js} +3 -3
  71. package/dist/cli.js +37 -37
  72. package/dist/coding/export-okf-codegraph.js +1 -1
  73. package/dist/compounding/engine.js +2 -2
  74. package/dist/config.js +1 -1
  75. package/dist/connectors/codex-materialize-runner.js +2 -2
  76. package/dist/connectors/index.js +2 -2
  77. package/dist/convergence-refresh.js +4 -4
  78. package/dist/corpus-watermark.js +4 -4
  79. package/dist/entity-retrieval.js +2 -2
  80. package/dist/external-wiki-access.js +12 -12
  81. package/dist/extraction.js +2 -2
  82. package/dist/harmonic-retrieval.js +1 -1
  83. package/dist/index.js +46 -46
  84. package/dist/location/index.js +4 -4
  85. package/dist/maintenance/memory-governance.js +2 -2
  86. package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +2 -2
  87. package/dist/maintenance/rebuild-memory-projection.js +3 -3
  88. package/dist/memory-browse-operations.js +12 -12
  89. package/dist/namespaces/migrate.js +3 -3
  90. package/dist/namespaces/storage.js +2 -2
  91. package/dist/operator-doctor-corpus.js +5 -5
  92. package/dist/operator-toolkit.js +10 -10
  93. package/dist/orchestration/maintenance.js +10 -10
  94. package/dist/orchestrator.js +46 -46
  95. package/dist/recall-navigation-operations.js +12 -12
  96. package/dist/recall-navigation.js +11 -11
  97. package/dist/resume-bundles.js +1 -1
  98. package/dist/semantic-consolidation.js +3 -3
  99. package/dist/semantic-rule-promotion.js +2 -2
  100. package/dist/semantic-rule-verifier.js +2 -2
  101. package/dist/source-agent-qualifier.js +2 -2
  102. package/dist/standup/build.js +2 -2
  103. package/dist/storage/entity-canonical-id-migration.d.ts.map +1 -1
  104. package/dist/storage.js +1 -1
  105. package/dist/support-passport/index.js +14 -14
  106. package/dist/transfer/export-okf.js +2 -2
  107. package/dist/verified-recall.js +2 -2
  108. package/dist/who-knows-cli.js +3 -3
  109. package/dist/who-knows.js +2 -2
  110. package/package.json +2 -2
  111. package/src/storage/entity-canonical-id-migration.ts +35 -19
  112. /package/dist/{chunk-P7M22CYB.js.map → chunk-2NZ7KWRW.js.map} +0 -0
  113. /package/dist/{chunk-2CBWEIS4.js.map → chunk-42G4FIKQ.js.map} +0 -0
  114. /package/dist/{chunk-4ALOINQ4.js.map → chunk-4B5S3VWD.js.map} +0 -0
  115. /package/dist/{chunk-2JQZSQXI.js.map → chunk-4HNY6ORZ.js.map} +0 -0
  116. /package/dist/{chunk-KA4U5GQN.js.map → chunk-5SV2GFZX.js.map} +0 -0
  117. /package/dist/{chunk-C6LRFPZL.js.map → chunk-6JYYSDHH.js.map} +0 -0
  118. /package/dist/{chunk-3RZOLUZT.js.map → chunk-7DNMX7SA.js.map} +0 -0
  119. /package/dist/{chunk-VLDVNZQE.js.map → chunk-7WSQZJPC.js.map} +0 -0
  120. /package/dist/{chunk-FSXD6Y4H.js.map → chunk-AAMFQHKI.js.map} +0 -0
  121. /package/dist/{chunk-X45KZOT2.js.map → chunk-ADP2VCP6.js.map} +0 -0
  122. /package/dist/{chunk-HKHZWJ3E.js.map → chunk-AJW2K7K3.js.map} +0 -0
  123. /package/dist/{chunk-ZMT4ZVJU.js.map → chunk-BJX6G726.js.map} +0 -0
  124. /package/dist/{chunk-DTABICJ3.js.map → chunk-DJ4CKWAD.js.map} +0 -0
  125. /package/dist/{chunk-XIXM6G7I.js.map → chunk-EJO2NWW7.js.map} +0 -0
  126. /package/dist/{chunk-TFXXMTHV.js.map → chunk-EN2YX5SF.js.map} +0 -0
  127. /package/dist/{chunk-ZIEZJMFW.js.map → chunk-F6WCOXTF.js.map} +0 -0
  128. /package/dist/{chunk-ONWVMYHX.js.map → chunk-FKFTPFUG.js.map} +0 -0
  129. /package/dist/{chunk-B7SSU55V.js.map → chunk-G6E7XJYL.js.map} +0 -0
  130. /package/dist/{chunk-AULKCNZW.js.map → chunk-HW2QYZEV.js.map} +0 -0
  131. /package/dist/{chunk-H7O5L2IQ.js.map → chunk-IDBLAGIM.js.map} +0 -0
  132. /package/dist/{chunk-34ZGBAGE.js.map → chunk-IV6APZJS.js.map} +0 -0
  133. /package/dist/{chunk-MMMYRC7Q.js.map → chunk-JGT7M3BA.js.map} +0 -0
  134. /package/dist/{chunk-N4VCHRLD.js.map → chunk-KPKGDQR3.js.map} +0 -0
  135. /package/dist/{chunk-IUD6NLNM.js.map → chunk-KR5SZNNF.js.map} +0 -0
  136. /package/dist/{chunk-5R3C5LEZ.js.map → chunk-L3R24OLZ.js.map} +0 -0
  137. /package/dist/{chunk-7H2LEYYJ.js.map → chunk-NYVECYCF.js.map} +0 -0
  138. /package/dist/{chunk-NVCWA4QC.js.map → chunk-OINFRHLR.js.map} +0 -0
  139. /package/dist/{chunk-CS2JO77A.js.map → chunk-OVJFS5P5.js.map} +0 -0
  140. /package/dist/{chunk-MWZMVLXL.js.map → chunk-Q5FL3MEH.js.map} +0 -0
  141. /package/dist/{chunk-RBULO7DO.js.map → chunk-Q6C5PIBW.js.map} +0 -0
  142. /package/dist/{chunk-SLULR4GC.js.map → chunk-Q7KQ5YHT.js.map} +0 -0
  143. /package/dist/{chunk-4QEZS7PK.js.map → chunk-QJTFMH5Y.js.map} +0 -0
  144. /package/dist/{chunk-RN6ZCNM5.js.map → chunk-R4Y5PF25.js.map} +0 -0
  145. /package/dist/{chunk-XVW52M6I.js.map → chunk-RP7TZEI6.js.map} +0 -0
  146. /package/dist/{chunk-S3JPD4N7.js.map → chunk-TAC5WFJC.js.map} +0 -0
  147. /package/dist/{chunk-RDESQOEE.js.map → chunk-TAIIC5OM.js.map} +0 -0
  148. /package/dist/{chunk-SJV3AOZ2.js.map → chunk-TDULASPE.js.map} +0 -0
  149. /package/dist/{chunk-LAL4B37X.js.map → chunk-UD6J2LIA.js.map} +0 -0
  150. /package/dist/{chunk-LQ23DMTT.js.map → chunk-VRF2KFI2.js.map} +0 -0
  151. /package/dist/{chunk-YXQE67A7.js.map → chunk-WD2JD2UB.js.map} +0 -0
  152. /package/dist/{chunk-634UKELB.js.map → chunk-XX2IGMCB.js.map} +0 -0
  153. /package/dist/{chunk-JSJZ2NXS.js.map → chunk-Y76HXF3F.js.map} +0 -0
  154. /package/dist/{chunk-LV6ZB6CA.js.map → chunk-YHGRA7CK.js.map} +0 -0
  155. /package/dist/{chunk-5QRYGLZN.js.map → chunk-ZLVUWROW.js.map} +0 -0
  156. /package/dist/{chunk-ZHUVMSHI.js.map → chunk-ZWWKKAJL.js.map} +0 -0
@@ -4,7 +4,7 @@ import {
4
4
  SUPPORT_PASSPORT_MODEL_RESULT_PATH,
5
5
  SupportPassportModelBridge,
6
6
  parseSupportPassportModelJob
7
- } from "../chunk-P7M22CYB.js";
7
+ } from "../chunk-2NZ7KWRW.js";
8
8
  import {
9
9
  DEFAULT_SUPPORT_PASSPORT_CONFIG,
10
10
  parseSupportPassportConfig
@@ -14,8 +14,8 @@ import {
14
14
  buildSupportPassportPublicRequestHandler,
15
15
  composeSupportPassportExternalRequestHandlers,
16
16
  normalizeSupportPassportNetworkAddress
17
- } from "../chunk-4QEZS7PK.js";
18
- import "../chunk-XVW52M6I.js";
17
+ } from "../chunk-QJTFMH5Y.js";
18
+ import "../chunk-RP7TZEI6.js";
19
19
  import {
20
20
  SUPPORT_PASSPORT_DRAFT_MAX_CONTENT_CHARACTERS,
21
21
  SUPPORT_PASSPORT_DRAFT_MAX_MEMORIES,
@@ -56,7 +56,7 @@ import {
56
56
  notifySupportPassportCommitted,
57
57
  resolveSupportPassportModelRoutePlan,
58
58
  syncDirectoryForDurability
59
- } from "../chunk-4ALOINQ4.js";
59
+ } from "../chunk-4B5S3VWD.js";
60
60
  import "../chunk-W4F3C7N7.js";
61
61
  import "../chunk-MPC7TYTZ.js";
62
62
  import "../chunk-ZHXSOMYH.js";
@@ -64,7 +64,7 @@ import "../chunk-IFBSZGW3.js";
64
64
  import "../chunk-C3QXITIP.js";
65
65
  import "../chunk-VQ7B2Q6M.js";
66
66
  import "../chunk-OGXXGHW6.js";
67
- import "../chunk-7H2LEYYJ.js";
67
+ import "../chunk-NYVECYCF.js";
68
68
  import "../chunk-PJSK6OJM.js";
69
69
  import "../chunk-GNVZQ5JN.js";
70
70
  import "../chunk-YN2UN7N3.js";
@@ -87,7 +87,7 @@ import "../chunk-H7XKCNR6.js";
87
87
  import "../chunk-36S7UHAW.js";
88
88
  import "../chunk-SOBJ6NEY.js";
89
89
  import "../chunk-C5CPYMLX.js";
90
- import "../chunk-FSXD6Y4H.js";
90
+ import "../chunk-AAMFQHKI.js";
91
91
  import "../chunk-E6UNM67F.js";
92
92
  import "../chunk-6WHJ2EAB.js";
93
93
  import "../chunk-AQEJKOKI.js";
@@ -97,7 +97,7 @@ import "../chunk-IISBCCWR.js";
97
97
  import "../chunk-6RD7MSIO.js";
98
98
  import "../chunk-TYP7GYRI.js";
99
99
  import "../chunk-2YA5N2BY.js";
100
- import "../chunk-RN6ZCNM5.js";
100
+ import "../chunk-R4Y5PF25.js";
101
101
  import "../chunk-SF6RFI5Z.js";
102
102
  import "../chunk-EI6V5UXY.js";
103
103
  import "../chunk-BQB5ZMYO.js";
@@ -120,13 +120,13 @@ import "../chunk-WUUGE7QC.js";
120
120
  import "../chunk-HRATODNO.js";
121
121
  import "../chunk-WTWQA7BB.js";
122
122
  import "../chunk-VZIAVM72.js";
123
- import "../chunk-ZIEZJMFW.js";
124
- import "../chunk-LV6ZB6CA.js";
125
- import "../chunk-S3JPD4N7.js";
126
- import "../chunk-MWZMVLXL.js";
123
+ import "../chunk-F6WCOXTF.js";
124
+ import "../chunk-YHGRA7CK.js";
125
+ import "../chunk-TAC5WFJC.js";
126
+ import "../chunk-Q5FL3MEH.js";
127
127
  import "../chunk-UFGFMWAD.js";
128
128
  import "../chunk-BMWN7B3Y.js";
129
- import "../chunk-YXQE67A7.js";
129
+ import "../chunk-WD2JD2UB.js";
130
130
  import "../chunk-3UXOZBHV.js";
131
131
  import "../chunk-PIWFNPQT.js";
132
132
  import "../chunk-GWK7FEUL.js";
@@ -143,7 +143,7 @@ import "../chunk-OD4FM2U7.js";
143
143
  import "../chunk-ZY2MNJR6.js";
144
144
  import "../chunk-2QG4SLZI.js";
145
145
  import "../chunk-TBBDFYXW.js";
146
- import "../chunk-KA4U5GQN.js";
146
+ import "../chunk-5SV2GFZX.js";
147
147
  import "../chunk-6JMQR72P.js";
148
148
  import "../chunk-TOTT6S2V.js";
149
149
  import "../chunk-QLK3SL7Q.js";
@@ -161,7 +161,7 @@ import "../chunk-236PXYG7.js";
161
161
  import "../chunk-ZCUTSMR2.js";
162
162
  import "../chunk-QDW3E4RD.js";
163
163
  import "../chunk-LMMQKZK3.js";
164
- import "../chunk-S2OBXHMN.js";
164
+ import "../chunk-2T2RF5ZK.js";
165
165
  import "../chunk-46WM6JX2.js";
166
166
  import "../chunk-UHVXE24Y.js";
167
167
  import "../chunk-D5F7TKMH.js";
@@ -4,13 +4,13 @@ import {
4
4
  exportOkfBundle,
5
5
  firstHeading,
6
6
  parseIncludeStatus
7
- } from "../chunk-LAL4B37X.js";
7
+ } from "../chunk-UD6J2LIA.js";
8
8
  import {
9
9
  OKF_EXPORT_VERSION
10
10
  } from "../chunk-UJX4I26O.js";
11
11
  import "../chunk-D24OXEPB.js";
12
12
  import "../chunk-3UXOZBHV.js";
13
- import "../chunk-S2OBXHMN.js";
13
+ import "../chunk-2T2RF5ZK.js";
14
14
  import "../chunk-46WM6JX2.js";
15
15
  import "../chunk-UHVXE24Y.js";
16
16
  import "../chunk-D5F7TKMH.js";
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  compareVerifiedEpisodeResults,
3
3
  searchVerifiedEpisodes
4
- } from "./chunk-NVCWA4QC.js";
4
+ } from "./chunk-OINFRHLR.js";
5
5
  import "./chunk-B7RWBZXW.js";
6
- import "./chunk-S2OBXHMN.js";
6
+ import "./chunk-2T2RF5ZK.js";
7
7
  import "./chunk-46WM6JX2.js";
8
8
  import "./chunk-UHVXE24Y.js";
9
9
  import "./chunk-D5F7TKMH.js";
@@ -4,9 +4,9 @@ import {
4
4
  renderWhoKnows,
5
5
  renderWhoKnowsJson,
6
6
  renderWhoKnowsText
7
- } from "./chunk-634UKELB.js";
8
- import "./chunk-7H2LEYYJ.js";
9
- import "./chunk-S2OBXHMN.js";
7
+ } from "./chunk-XX2IGMCB.js";
8
+ import "./chunk-NYVECYCF.js";
9
+ import "./chunk-2T2RF5ZK.js";
10
10
  import "./chunk-46WM6JX2.js";
11
11
  import "./chunk-UHVXE24Y.js";
12
12
  import "./chunk-D5F7TKMH.js";
package/dist/who-knows.js CHANGED
@@ -9,8 +9,8 @@ import {
9
9
  loadWhoKnowsEntities,
10
10
  tokenizeTopic,
11
11
  validateWhoKnowsInput
12
- } from "./chunk-7H2LEYYJ.js";
13
- import "./chunk-S2OBXHMN.js";
12
+ } from "./chunk-NYVECYCF.js";
13
+ import "./chunk-2T2RF5ZK.js";
14
14
  import "./chunk-46WM6JX2.js";
15
15
  import "./chunk-UHVXE24Y.js";
16
16
  import "./chunk-D5F7TKMH.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@remnic/core",
3
- "version": "9.69.58",
3
+ "version": "9.69.60",
4
4
  "description": "Framework-agnostic Remnic memory engine — orchestrator, storage, extraction, search, trust zones",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -3307,7 +3307,7 @@
3307
3307
  "core"
3308
3308
  ],
3309
3309
  "peerDependencies": {
3310
- "@remnic/coding-graph": "^9.69.58"
3310
+ "@remnic/coding-graph": "^9.69.60"
3311
3311
  },
3312
3312
  "peerDependenciesMeta": {
3313
3313
  "@remnic/coding-graph": {
@@ -695,18 +695,6 @@ function mergeDiscoveredMappings(
695
695
  for (const [legacyId, canonicalId] of Object.entries(discovered)) {
696
696
  const previousMapping = merged[legacyId];
697
697
  if (previousMapping !== undefined && previousMapping !== canonicalId) {
698
- // A -> B collapses to A -> C once B -> C exists, so a rescan that still
699
- // reads A -> B off disk is reporting the same chain, not a new target.
700
- // Only a target the chain cannot reach is a real conflict.
701
- let hop: string | undefined = canonicalId;
702
- const seen = new Set<string>();
703
- while (hop !== undefined && hop !== previousMapping && !seen.has(hop)) {
704
- seen.add(hop);
705
- hop = merged[hop];
706
- }
707
- if (hop !== previousMapping) {
708
- throw new Error(`Legacy entity id ${legacyId} changed canonical target during migration.`);
709
- }
710
698
  continue;
711
699
  }
712
700
  if (previousMapping === undefined && wouldCreateMappingCycle(merged, legacyId, canonicalId)) continue;
@@ -876,6 +864,11 @@ export async function migrateLegacyEntityCanonicalIds(
876
864
  };
877
865
  }
878
866
  const blocked: BlockedEntityPairs = new Map();
867
+ // Parks for pairs whose files are GONE, tracked separately from
868
+ // collision parks: pruneBlocked drops these (the canonical file is gone
869
+ // too), and the rescan's blocked.clear() would otherwise silence them
870
+ // before finish() reports anything.
871
+ const staleParked: BlockedEntityPairs = new Map();
879
872
  // ONE aggregated line per run, not one per pair per restart: this used to
880
873
  // abort the daemon, so the operator needs the whole list and the remedy.
881
874
  const finish = async (): Promise<string | undefined> => {
@@ -886,6 +879,13 @@ export async function migrateLegacyEntityCanonicalIds(
886
879
  + "Both files were kept and the legacy id still resolves; merge or delete one side to migrate it.",
887
880
  );
888
881
  }
882
+ if (staleParked.size > 0) {
883
+ const pairs = [...staleParked].map(([legacyId, canonicalId]) => `${legacyId} -> ${canonicalId}`).join(", ");
884
+ log.warn(
885
+ `entity canonical-id migration dropped ${staleParked.size} mapping(s) whose entity files are gone: ${pairs}. `
886
+ + "The stale journal entries were removed; references to those legacy ids do not resolve either way.",
887
+ );
888
+ }
889
889
  // Every finish() path either just rewrote references (main/reconcile
890
890
  // paths), has none to rewrite (empty mappings), or observed no marker
891
891
  // (stable no-op) — so the CONSUMED generation is removed here. A fresh
@@ -945,9 +945,22 @@ export async function migrateLegacyEntityCanonicalIds(
945
945
  if (active[legacyId] !== undefined) continue;
946
946
  const legacyPath = deps.resolveEntityFilePath(legacyId);
947
947
  if (legacyPath !== null && (await fileExists(legacyPath))) continue;
948
- // Source gone: the rename is moot, but references still name it and
949
- // this record is the only thing that can still rewrite them.
950
- active[legacyId] = canonicalId;
948
+ // Resolve the parked target through ACTIVE moves before deciding
949
+ // its file is gone: a parked A -> B beside an active B -> C must
950
+ // promote to A -> C and rewrite, not drop because B was moved
951
+ // out-of-band. Only a target with no surviving file may drop.
952
+ let target = canonicalId;
953
+ const seenTargets = new Set<string>();
954
+ while (active[target] !== undefined && !seenTargets.has(target)) {
955
+ seenTargets.add(target);
956
+ target = active[target]!;
957
+ }
958
+ const targetPath = deps.resolveEntityFilePath(target);
959
+ if (targetPath === null || !(await fileExists(targetPath))) {
960
+ staleParked.set(legacyId, canonicalId);
961
+ continue;
962
+ }
963
+ active[legacyId] = target;
951
964
  revived = true;
952
965
  }
953
966
  // Reviving a whole chain at once yields A -> B -> C, and each rewrite
@@ -1069,10 +1082,13 @@ export async function migrateLegacyEntityCanonicalIds(
1069
1082
  }
1070
1083
  if (deferredMappings.length === 0) break;
1071
1084
  if (!progressed) {
1072
- const [legacyId, canonicalId] = deferredMappings[0]!;
1073
- throw new Error(
1074
- `Cannot migrate legacy entity id ${legacyId}: both files are missing and no intermediate mapping can advance migration.`,
1075
- );
1085
+ // Deferred means both files are missing: no later pass can help
1086
+ // these pairs, so park them all instead of Fatal-exiting.
1087
+ for (const [legacyId, canonicalId] of deferredMappings) {
1088
+ blocked.set(legacyId, canonicalId);
1089
+ staleParked.set(legacyId, canonicalId);
1090
+ }
1091
+ break;
1076
1092
  }
1077
1093
  pendingMappings = deferredMappings;
1078
1094
  }