@remnic/core 9.63.2 → 9.63.4

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 (124) hide show
  1. package/dist/access-admin-ops-surface.d.ts +4 -4
  2. package/dist/access-admin-ops-surface.js +1 -1
  3. package/dist/access-authorization-probe.d.ts +4 -4
  4. package/dist/access-authorization-probe.js +2 -2
  5. package/dist/access-boundary.d.ts +4 -4
  6. package/dist/access-boundary.js +1 -1
  7. package/dist/access-cli.js +19 -18
  8. package/dist/access-cli.js.map +1 -1
  9. package/dist/access-extraction-force-flush.d.ts +4 -4
  10. package/dist/access-extraction-force-flush.js +1 -1
  11. package/dist/access-http-lcm-compaction.d.ts +4 -4
  12. package/dist/access-http-lifecycle-flush.d.ts +4 -4
  13. package/dist/access-http-offline-stream.d.ts +4 -4
  14. package/dist/access-http-query.d.ts +13 -1
  15. package/dist/access-http-query.js +5 -2
  16. package/dist/access-http.d.ts +5 -5
  17. package/dist/access-http.js +12 -11
  18. package/dist/access-identity-continuity-surface.d.ts +3 -3
  19. package/dist/access-identity-continuity-surface.js +1 -1
  20. package/dist/access-lcm-surface.d.ts +4 -4
  21. package/dist/access-lcm-surface.js +1 -1
  22. package/dist/access-mcp.d.ts +4 -4
  23. package/dist/access-mcp.js +6 -6
  24. package/dist/access-namespace-preflight.js +1 -1
  25. package/dist/access-observe-write-surface.d.ts +4 -4
  26. package/dist/access-observe-write-surface.js +1 -1
  27. package/dist/access-offline-manifest.d.ts +3 -3
  28. package/dist/access-operations-batch.js +2 -2
  29. package/dist/access-operations.d.ts +4 -4
  30. package/dist/access-operations.js +5 -5
  31. package/dist/access-recall-concurrency.d.ts +4 -4
  32. package/dist/access-recall-concurrency.js +1 -1
  33. package/dist/access-recall-response.d.ts +4 -4
  34. package/dist/access-recall-response.js +1 -1
  35. package/dist/access-recall-surface.d.ts +4 -4
  36. package/dist/access-recall-surface.js +1 -1
  37. package/dist/{access-service-DBpEnlzA.d.ts → access-service-D-bi3r01.d.ts} +2 -8
  38. package/dist/access-service-helpers.d.ts +4 -4
  39. package/dist/access-service.d.ts +4 -4
  40. package/dist/access-service.js +1 -1
  41. package/dist/access-surface-catalog.d.ts +4 -4
  42. package/dist/access-surface-catalog.js +3 -3
  43. package/dist/bootstrap.d.ts +3 -3
  44. package/dist/buffer.js +1 -1
  45. package/dist/{catalog-CyYTf_ok.d.ts → catalog-BYIHQw1l.d.ts} +2 -10
  46. package/dist/{chunk-JJ7JW62R.js → chunk-2JL7WPXL.js} +1 -11
  47. package/dist/chunk-2JL7WPXL.js.map +1 -0
  48. package/dist/{chunk-AJSZ2EK6.js → chunk-3USQWITL.js} +2 -2
  49. package/dist/{chunk-RYGJGXL6.js → chunk-4EDAHS6D.js} +2 -2
  50. package/dist/{chunk-5W5N7XJZ.js → chunk-A4HXWNST.js} +19 -752
  51. package/dist/chunk-A4HXWNST.js.map +1 -0
  52. package/dist/{chunk-KWN6NOHQ.js → chunk-BXOZALJ6.js} +2 -2
  53. package/dist/{chunk-6F2UMP4H.js → chunk-CKWOMJDY.js} +2 -2
  54. package/dist/{chunk-MR5HWQHS.js → chunk-DFEYRCG2.js} +2 -2
  55. package/dist/{chunk-6UZR7KEK.js → chunk-DQV3LUQL.js} +7 -1
  56. package/dist/chunk-DQV3LUQL.js.map +1 -0
  57. package/dist/{chunk-EJQXDKYK.js → chunk-EJCN5ATI.js} +3 -3
  58. package/dist/{chunk-TRPX6F2G.js → chunk-GNKY5JEP.js} +10 -13
  59. package/dist/chunk-GNKY5JEP.js.map +1 -0
  60. package/dist/{chunk-XZPSBGHA.js → chunk-ISFUFLFM.js} +2 -2
  61. package/dist/{chunk-4NMVX5U7.js → chunk-JSH2TV34.js} +2 -2
  62. package/dist/{chunk-R74NCKEY.js → chunk-LNFYISZ6.js} +2 -2
  63. package/dist/{chunk-6ZYQ36IB.js → chunk-MRJ43KSG.js} +15 -2
  64. package/dist/chunk-MRJ43KSG.js.map +1 -0
  65. package/dist/{chunk-IM56VPKO.js → chunk-OR7KEGLR.js} +2 -2
  66. package/dist/{chunk-A73QHOZP.js → chunk-QOMUE4FS.js} +2 -2
  67. package/dist/chunk-RSLRGRBJ.js +727 -0
  68. package/dist/chunk-RSLRGRBJ.js.map +1 -0
  69. package/dist/{chunk-44KHFMCM.js → chunk-VG6DC2GO.js} +32 -17
  70. package/dist/{chunk-44KHFMCM.js.map → chunk-VG6DC2GO.js.map} +1 -1
  71. package/dist/{chunk-5UFQCU6M.js → chunk-ZUZD2DRV.js} +5 -5
  72. package/dist/{cli-DJwNNDL1.d.ts → cli-DEoABKXH.d.ts} +2 -2
  73. package/dist/cli.d.ts +5 -5
  74. package/dist/cli.js +15 -14
  75. package/dist/explicit-capture.d.ts +3 -3
  76. package/dist/external-wiki-access.d.ts +4 -4
  77. package/dist/external-wiki-access.js +2 -2
  78. package/dist/external-wiki-mcp-tools.d.ts +4 -4
  79. package/dist/index.d.ts +8 -8
  80. package/dist/index.js +21 -20
  81. package/dist/{maintenance-uJb74j64.d.ts → maintenance-N5ur13Al.d.ts} +1 -1
  82. package/dist/mcp-memory-inspector-app.d.ts +4 -4
  83. package/dist/namespaces/migrate.d.ts +1 -1
  84. package/dist/namespaces/storage.d.ts +1 -1
  85. package/dist/operator-toolkit.js +3 -2
  86. package/dist/orchestration/maintenance.d.ts +2 -2
  87. package/dist/orchestration/maintenance.js +3 -2
  88. package/dist/{orchestrator-CFi-5JSR.d.ts → orchestrator-ByLrpav4.d.ts} +2 -2
  89. package/dist/orchestrator.d.ts +3 -3
  90. package/dist/orchestrator.js +19 -18
  91. package/dist/{public-http-43z1YT-k.d.ts → public-http-DusietP2.d.ts} +1 -1
  92. package/dist/support-passport/index.d.ts +7 -7
  93. package/dist/support-passport/index.js +4 -4
  94. package/package.json +2 -2
  95. package/src/access-http-query.ts +12 -0
  96. package/src/access-http.test.ts +32 -0
  97. package/src/access-http.ts +3 -7
  98. package/src/admin/admin-surfaces.test.ts +5 -10
  99. package/src/admin/admin-surfaces.ts +0 -16
  100. package/src/binary-lifecycle/pipeline.test.ts +1 -1
  101. package/src/binary-lifecycle/pipeline.ts +23 -9
  102. package/src/buffer.ts +6 -0
  103. package/src/maintenance/namespace-planner.ts +0 -2
  104. package/src/namespaces/catalog.test.ts +53 -8
  105. package/src/namespaces/catalog.ts +5 -37
  106. package/src/orchestration/turn-ingestion-snapshot.test.ts +167 -0
  107. package/src/orchestration/turn-ingestion.ts +2 -1
  108. package/dist/chunk-5W5N7XJZ.js.map +0 -1
  109. package/dist/chunk-6UZR7KEK.js.map +0 -1
  110. package/dist/chunk-6ZYQ36IB.js.map +0 -1
  111. package/dist/chunk-JJ7JW62R.js.map +0 -1
  112. package/dist/chunk-TRPX6F2G.js.map +0 -1
  113. /package/dist/{chunk-AJSZ2EK6.js.map → chunk-3USQWITL.js.map} +0 -0
  114. /package/dist/{chunk-RYGJGXL6.js.map → chunk-4EDAHS6D.js.map} +0 -0
  115. /package/dist/{chunk-KWN6NOHQ.js.map → chunk-BXOZALJ6.js.map} +0 -0
  116. /package/dist/{chunk-6F2UMP4H.js.map → chunk-CKWOMJDY.js.map} +0 -0
  117. /package/dist/{chunk-MR5HWQHS.js.map → chunk-DFEYRCG2.js.map} +0 -0
  118. /package/dist/{chunk-EJQXDKYK.js.map → chunk-EJCN5ATI.js.map} +0 -0
  119. /package/dist/{chunk-XZPSBGHA.js.map → chunk-ISFUFLFM.js.map} +0 -0
  120. /package/dist/{chunk-4NMVX5U7.js.map → chunk-JSH2TV34.js.map} +0 -0
  121. /package/dist/{chunk-R74NCKEY.js.map → chunk-LNFYISZ6.js.map} +0 -0
  122. /package/dist/{chunk-IM56VPKO.js.map → chunk-OR7KEGLR.js.map} +0 -0
  123. /package/dist/{chunk-A73QHOZP.js.map → chunk-QOMUE4FS.js.map} +0 -0
  124. /package/dist/{chunk-5UFQCU6M.js.map → chunk-ZUZD2DRV.js.map} +0 -0
@@ -3,10 +3,10 @@ import {
3
3
  blendGraphExpandedRecallScore,
4
4
  graphPathRelativeToStorage,
5
5
  mergeGraphExpandedResults
6
- } from "./chunk-44KHFMCM.js";
6
+ } from "./chunk-VG6DC2GO.js";
7
7
  import "./chunk-Y7COCXY2.js";
8
- import "./chunk-KWN6NOHQ.js";
9
- import "./chunk-R74NCKEY.js";
8
+ import "./chunk-BXOZALJ6.js";
9
+ import "./chunk-LNFYISZ6.js";
10
10
  import "./chunk-I74SUMNI.js";
11
11
  import "./chunk-ILNPU5W5.js";
12
12
  import "./chunk-7HYPN2GC.js";
@@ -101,7 +101,7 @@ import "./chunk-PYIR4SSB.js";
101
101
  import "./chunk-DFEODULB.js";
102
102
  import "./chunk-FKJVEW6O.js";
103
103
  import "./chunk-3I4FUAVJ.js";
104
- import "./chunk-5UFQCU6M.js";
104
+ import "./chunk-ZUZD2DRV.js";
105
105
  import "./chunk-MMACM5G2.js";
106
106
  import "./chunk-54BGIBCR.js";
107
107
  import "./chunk-H4CKS5B2.js";
@@ -142,8 +142,8 @@ import "./chunk-AM4T6CHX.js";
142
142
  import "./chunk-7DRSWPUV.js";
143
143
  import "./chunk-3T74IZB3.js";
144
144
  import "./chunk-2LA3H54D.js";
145
- import "./chunk-6F2UMP4H.js";
146
- import "./chunk-5W5N7XJZ.js";
145
+ import "./chunk-CKWOMJDY.js";
146
+ import "./chunk-RSLRGRBJ.js";
147
147
  import "./chunk-KFY3SGN7.js";
148
148
  import "./chunk-CMTINOFS.js";
149
149
  import "./chunk-B2OOJCUX.js";
@@ -166,7 +166,7 @@ import "./chunk-ACPCA4NO.js";
166
166
  import "./chunk-OKTXM5H4.js";
167
167
  import "./chunk-2ASAS3CQ.js";
168
168
  import "./chunk-NOB2T2FC.js";
169
- import "./chunk-6UZR7KEK.js";
169
+ import "./chunk-DQV3LUQL.js";
170
170
  import "./chunk-PADG72LJ.js";
171
171
  import "./chunk-5JMAGU26.js";
172
172
  import "./chunk-MYVPLJOO.js";
@@ -196,7 +196,7 @@ import "./chunk-KFZY2OFH.js";
196
196
  import "./chunk-QW27DOHG.js";
197
197
  import "./chunk-C6WMSXCJ.js";
198
198
  import "./chunk-KD3QD3A5.js";
199
- import "./chunk-TRPX6F2G.js";
199
+ import "./chunk-GNKY5JEP.js";
200
200
  import "./chunk-V7IZKJI3.js";
201
201
  import "./chunk-SEDEKFYQ.js";
202
202
  import "./chunk-2QSZNTDO.js";
@@ -207,20 +207,21 @@ import "./chunk-TB6CBZ5V.js";
207
207
  import "./chunk-J64TK33U.js";
208
208
  import "./chunk-7RXCMVFQ.js";
209
209
  import "./chunk-3HSRWJTC.js";
210
- import "./chunk-4NMVX5U7.js";
211
- import "./chunk-XZPSBGHA.js";
212
- import "./chunk-6ZYQ36IB.js";
213
- import "./chunk-IM56VPKO.js";
210
+ import "./chunk-JSH2TV34.js";
211
+ import "./chunk-ISFUFLFM.js";
212
+ import "./chunk-MRJ43KSG.js";
213
+ import "./chunk-A4HXWNST.js";
214
+ import "./chunk-OR7KEGLR.js";
214
215
  import "./chunk-HIEWDJ2O.js";
215
216
  import "./chunk-A5KNZSNA.js";
216
217
  import "./chunk-D24OXEPB.js";
217
- import "./chunk-EJQXDKYK.js";
218
- import "./chunk-MR5HWQHS.js";
219
- import "./chunk-A73QHOZP.js";
218
+ import "./chunk-EJCN5ATI.js";
219
+ import "./chunk-DFEYRCG2.js";
220
+ import "./chunk-QOMUE4FS.js";
220
221
  import "./chunk-7T4TOGMS.js";
221
222
  import "./chunk-7YQ6ESEA.js";
222
223
  import "./chunk-CIAI24TQ.js";
223
- import "./chunk-AJSZ2EK6.js";
224
+ import "./chunk-3USQWITL.js";
224
225
  import "./chunk-LTBKKSCX.js";
225
226
  import "./chunk-EQWEIIKQ.js";
226
227
  import "./chunk-7BY7V4YX.js";
@@ -235,12 +236,12 @@ import "./chunk-GZ3R6XOE.js";
235
236
  import "./chunk-CK5KOVHW.js";
236
237
  import "./chunk-DJUKBGAD.js";
237
238
  import "./chunk-G73MCJKL.js";
238
- import "./chunk-RYGJGXL6.js";
239
+ import "./chunk-4EDAHS6D.js";
239
240
  import {
240
241
  filterRecallCandidates,
241
242
  hasIdentityRecoveryIntent,
242
243
  resolveEffectiveIdentityInjectionMode
243
- } from "./chunk-JJ7JW62R.js";
244
+ } from "./chunk-2JL7WPXL.js";
244
245
  import "./chunk-GDASG7NC.js";
245
246
  import "./chunk-GDB4J2H3.js";
246
247
  import "./chunk-QYN5PXDZ.js";
@@ -1,5 +1,5 @@
1
1
  import { IncomingMessage, ServerResponse } from 'node:http';
2
- import { f as EngramAccessService } from './access-service-DBpEnlzA.js';
2
+ import { f as EngramAccessService } from './access-service-D-bi3r01.js';
3
3
 
4
4
  declare const SUPPORT_PASSPORT_PUBLIC_HTTP_ROUTES: readonly [{
5
5
  readonly method: "GET";
@@ -1,9 +1,9 @@
1
- import { S as SupportPassportExternalRequestHandler } from '../public-http-43z1YT-k.js';
2
- export { a as SUPPORT_PASSPORT_PUBLIC_HTTP_ROUTES, b as SupportPassportPublicHandlerOptions, c as buildSupportPassportPublicRequestHandler, d as composeSupportPassportExternalRequestHandlers, n as normalizeSupportPassportNetworkAddress } from '../public-http-43z1YT-k.js';
1
+ import { S as SupportPassportExternalRequestHandler } from '../public-http-DusietP2.js';
2
+ export { a as SUPPORT_PASSPORT_PUBLIC_HTTP_ROUTES, b as SupportPassportPublicHandlerOptions, c as buildSupportPassportPublicRequestHandler, d as composeSupportPassportExternalRequestHandlers, n as normalizeSupportPassportNetworkAddress } from '../public-http-DusietP2.js';
3
3
  import { OfflineSyncExcludeFile } from '../offline-sync-file-io.js';
4
4
  import { M as MemoryFile, c3 as SupportPassportConfig } from '../types-DWHOxlZP.js';
5
- import { $ as SupportPassportCard, a6 as SupportPassportCardServiceDependencies, av as SupportPassportManualDraftInput, ah as SupportPassportDraftCard, aT as SupportPassportOwnerScope, aX as SupportPassportReplaceCardInput, a3 as SupportPassportCardMutationInput, ap as SupportPassportGrantCardRef, ar as SupportPassportGrantState, aa as SupportPassportCreateGrantInput, af as SupportPassportCreatedGrant, aR as SupportPassportOwnerGrant, aZ as SupportPassportRevokeGrantInput, aV as SupportPassportPublicGuide, aK as SupportPassportModelRoute, az as SupportPassportModelAdapter, aD as SupportPassportModelAuditSink, Y as SupportPassportAnswerOutput } from '../access-service-DBpEnlzA.js';
6
- export { S as SUPPORT_PASSPORT_CARD_CATEGORIES, N as SUPPORT_PASSPORT_CARD_STATUSES, O as SUPPORT_PASSPORT_DRAFT_MAX_CONTENT_CHARACTERS, Q as SUPPORT_PASSPORT_DRAFT_MAX_MEMORIES, R as SUPPORT_PASSPORT_NOT_IN_GUIDE_ANSWER, T as SUPPORT_PASSPORT_SOURCE_MEMORY_ID_MAX_LENGTH, U as SupportPassportAccessSurface, V as SupportPassportAccessSurfaceDependencies, W as SupportPassportAnswerModelInput, X as SupportPassportAnswerModelInputSchema, Z as SupportPassportAnswerOutputSchema, _ as SupportPassportAnswerResult, a0 as SupportPassportCardCategory, a1 as SupportPassportCardCategorySchema, a2 as SupportPassportCardListSchema, a4 as SupportPassportCardMutationInputSchema, a5 as SupportPassportCardSchema, a7 as SupportPassportCardStatus, a8 as SupportPassportCardStatusSchema, a9 as SupportPassportCardTitleSchema, ab as SupportPassportCreateGrantInputSchema, ac as SupportPassportCreateGrantRequest, ad as SupportPassportCreateGrantRequestSchema, ae as SupportPassportCreateGrantResult, ag as SupportPassportCreatedGrantSchema, ai as SupportPassportDraftCardSchema, aj as SupportPassportDraftModelInput, ak as SupportPassportDraftModelInputSchema, al as SupportPassportDraftOutputSchema, am as SupportPassportDraftResult, an as SupportPassportError, ao as SupportPassportErrorCode, aq as SupportPassportGrantCardRefSchema, as as SupportPassportGrantStateSchema, at as SupportPassportListCardsInputSchema, au as SupportPassportListGrantsInputSchema, aw as SupportPassportManualDraftInputSchema, ax as SupportPassportMemoryIdSchema, ay as SupportPassportMemoryPreview, aA as SupportPassportModelAdapterOptions, aB as SupportPassportModelAuditRecord, aC as SupportPassportModelAuditRecordSchema, aE as SupportPassportModelAuditStore, aF as SupportPassportModelCallError, aG as SupportPassportModelClients, aH as SupportPassportModelFailureMetadata, aI as SupportPassportModelMessage, aJ as SupportPassportModelResultMetadata, aL as SupportPassportModelRouteKind, aM as SupportPassportModelRouteResult, aN as SupportPassportModelUsage, aO as SupportPassportNamespaceSchema, aP as SupportPassportOwnerCreateGrantRequest, aQ as SupportPassportOwnerCreateGrantRequestSchema, aS as SupportPassportOwnerGrantSchema, aU as SupportPassportPublicCardSchema, aW as SupportPassportPublicGuideSchema, aY as SupportPassportReplaceCardInputSchema, a_ as SupportPassportRevokeGrantInputSchema, a$ as SupportPassportRevokeGrantResult, b0 as SupportPassportSourceMemoryIdSchema, b1 as acceptsSupportPassportModelResponse, b2 as buildSupportPassportDirectGatewayConfig, b4 as computeSupportPassportCardRevision, b5 as createSupportPassportModelAdapter, b7 as hashSupportPassportAuditValues, b8 as resolveSupportPassportModelRoutePlan } from '../access-service-DBpEnlzA.js';
5
+ import { $ as SupportPassportCard, a6 as SupportPassportCardServiceDependencies, av as SupportPassportManualDraftInput, ah as SupportPassportDraftCard, aT as SupportPassportOwnerScope, aX as SupportPassportReplaceCardInput, a3 as SupportPassportCardMutationInput, ap as SupportPassportGrantCardRef, ar as SupportPassportGrantState, aa as SupportPassportCreateGrantInput, af as SupportPassportCreatedGrant, aR as SupportPassportOwnerGrant, aZ as SupportPassportRevokeGrantInput, aV as SupportPassportPublicGuide, aK as SupportPassportModelRoute, az as SupportPassportModelAdapter, aD as SupportPassportModelAuditSink, Y as SupportPassportAnswerOutput } from '../access-service-D-bi3r01.js';
6
+ export { S as SUPPORT_PASSPORT_CARD_CATEGORIES, N as SUPPORT_PASSPORT_CARD_STATUSES, O as SUPPORT_PASSPORT_DRAFT_MAX_CONTENT_CHARACTERS, Q as SUPPORT_PASSPORT_DRAFT_MAX_MEMORIES, R as SUPPORT_PASSPORT_NOT_IN_GUIDE_ANSWER, T as SUPPORT_PASSPORT_SOURCE_MEMORY_ID_MAX_LENGTH, U as SupportPassportAccessSurface, V as SupportPassportAccessSurfaceDependencies, W as SupportPassportAnswerModelInput, X as SupportPassportAnswerModelInputSchema, Z as SupportPassportAnswerOutputSchema, _ as SupportPassportAnswerResult, a0 as SupportPassportCardCategory, a1 as SupportPassportCardCategorySchema, a2 as SupportPassportCardListSchema, a4 as SupportPassportCardMutationInputSchema, a5 as SupportPassportCardSchema, a7 as SupportPassportCardStatus, a8 as SupportPassportCardStatusSchema, a9 as SupportPassportCardTitleSchema, ab as SupportPassportCreateGrantInputSchema, ac as SupportPassportCreateGrantRequest, ad as SupportPassportCreateGrantRequestSchema, ae as SupportPassportCreateGrantResult, ag as SupportPassportCreatedGrantSchema, ai as SupportPassportDraftCardSchema, aj as SupportPassportDraftModelInput, ak as SupportPassportDraftModelInputSchema, al as SupportPassportDraftOutputSchema, am as SupportPassportDraftResult, an as SupportPassportError, ao as SupportPassportErrorCode, aq as SupportPassportGrantCardRefSchema, as as SupportPassportGrantStateSchema, at as SupportPassportListCardsInputSchema, au as SupportPassportListGrantsInputSchema, aw as SupportPassportManualDraftInputSchema, ax as SupportPassportMemoryIdSchema, ay as SupportPassportMemoryPreview, aA as SupportPassportModelAdapterOptions, aB as SupportPassportModelAuditRecord, aC as SupportPassportModelAuditRecordSchema, aE as SupportPassportModelAuditStore, aF as SupportPassportModelCallError, aG as SupportPassportModelClients, aH as SupportPassportModelFailureMetadata, aI as SupportPassportModelMessage, aJ as SupportPassportModelResultMetadata, aL as SupportPassportModelRouteKind, aM as SupportPassportModelRouteResult, aN as SupportPassportModelUsage, aO as SupportPassportNamespaceSchema, aP as SupportPassportOwnerCreateGrantRequest, aQ as SupportPassportOwnerCreateGrantRequestSchema, aS as SupportPassportOwnerGrantSchema, aU as SupportPassportPublicCardSchema, aW as SupportPassportPublicGuideSchema, aY as SupportPassportReplaceCardInputSchema, a_ as SupportPassportRevokeGrantInputSchema, a$ as SupportPassportRevokeGrantResult, b0 as SupportPassportSourceMemoryIdSchema, b1 as acceptsSupportPassportModelResponse, b2 as buildSupportPassportDirectGatewayConfig, b4 as computeSupportPassportCardRevision, b5 as createSupportPassportModelAdapter, b7 as hashSupportPassportAuditValues, b8 as resolveSupportPassportModelRoutePlan } from '../access-service-D-bi3r01.js';
7
7
  import { S as StorageManager } from '../storage-BVAVitkO.js';
8
8
  import { FileHandle } from 'node:fs/promises';
9
9
  import { withHeldFileLock } from '../utils/serialize-mutations.js';
@@ -16,7 +16,7 @@ import '../external-wiki-config.js';
16
16
  import '../contradiction-config.js';
17
17
  import '../graph-path-scoring-config.js';
18
18
  import '../types-continuity.js';
19
- import '../catalog-CyYTf_ok.js';
19
+ import '../catalog-BYIHQw1l.js';
20
20
  import '../access-namespace-preflight-yO4LMGFH.js';
21
21
  import '../access-token-capabilities.js';
22
22
  import 'node:async_hooks';
@@ -33,7 +33,7 @@ import '../access-health-types.js';
33
33
  import '../corpus-watermark.js';
34
34
  import '../replica-divergence.js';
35
35
  import '../resolve-auth-token.js';
36
- import '../orchestrator-CFi-5JSR.js';
36
+ import '../orchestrator-ByLrpav4.js';
37
37
  import '../briefing.js';
38
38
  import '../corpus-read-cancellation.js';
39
39
  import '../artifact-search.js';
@@ -55,7 +55,7 @@ import '../resolve-provider-secret.js';
55
55
  import '../transcript.js';
56
56
  import '../session-integrity.js';
57
57
  import '../summarizer.js';
58
- import '../maintenance-uJb74j64.js';
58
+ import '../maintenance-N5ur13Al.js';
59
59
  import '../namespaces/search.js';
60
60
  import '../compounding/engine.js';
61
61
  import '../shared-context/manager.js';
@@ -4,7 +4,7 @@ import {
4
4
  SUPPORT_PASSPORT_MODEL_RESULT_PATH,
5
5
  SupportPassportModelBridge,
6
6
  parseSupportPassportModelJob
7
- } from "../chunk-KWN6NOHQ.js";
7
+ } from "../chunk-BXOZALJ6.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-XZPSBGHA.js";
18
- import "../chunk-MR5HWQHS.js";
17
+ } from "../chunk-ISFUFLFM.js";
18
+ import "../chunk-DFEYRCG2.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-JJ7JW62R.js";
59
+ } from "../chunk-2JL7WPXL.js";
60
60
  import "../chunk-GDASG7NC.js";
61
61
  import "../chunk-GDB4J2H3.js";
62
62
  import "../chunk-QYN5PXDZ.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@remnic/core",
3
- "version": "9.63.2",
3
+ "version": "9.63.4",
4
4
  "description": "Framework-agnostic Remnic memory engine — orchestrator, storage, extraction, search, trust zones",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -3156,7 +3156,7 @@
3156
3156
  "core"
3157
3157
  ],
3158
3158
  "peerDependencies": {
3159
- "@remnic/coding-graph": "^9.63.2"
3159
+ "@remnic/coding-graph": "^9.63.4"
3160
3160
  },
3161
3161
  "peerDependenciesMeta": {
3162
3162
  "@remnic/coding-graph": {
@@ -1,4 +1,5 @@
1
1
  import { EngramAccessInputError } from "./access-service.js";
2
+ import { isNamespaceKind, type NamespaceKind } from "./namespaces/catalog.js";
2
3
 
3
4
  /** Optional string field from a JSON body: absent/null/"" → undefined. */
4
5
  export function optionalQueryString(value: unknown, label: string): string | undefined {
@@ -23,3 +24,14 @@ export function positiveIntQueryParam(value: string | null, label: string): numb
23
24
  }
24
25
  return parsed;
25
26
  }
27
+
28
+ /** Optional namespace-kind query param; rejects dead or unknown kinds. */
29
+ export function optionalNamespaceKindQueryParam(value: string | null): NamespaceKind | undefined {
30
+ if (value === null || value.length === 0) return undefined;
31
+ if (!isNamespaceKind(value)) {
32
+ throw new EngramAccessInputError(
33
+ "kind must be one of: default, shared, project, branch, team-project, explicit",
34
+ );
35
+ }
36
+ return value;
37
+ }
@@ -728,6 +728,38 @@ test("HTTP admin dashboard endpoints require bearer authentication and apply con
728
728
  }
729
729
  });
730
730
 
731
+ test("HTTP admin namespaces rejects dead kinds and accepts live kinds", async () => {
732
+ const filters: unknown[] = [];
733
+ const service = {
734
+ adminListNamespaces: async (filter: unknown) => {
735
+ filters.push(filter);
736
+ return { enabled: true, entries: [] };
737
+ },
738
+ } as unknown as EngramAccessService;
739
+ const server = new EngramAccessHttpServer({
740
+ service,
741
+ port: 0,
742
+ authToken: "test-token",
743
+ adminConsoleEnabled: false,
744
+ });
745
+ const status = await server.start();
746
+ try {
747
+ const rejected = await fetch(
748
+ `http://127.0.0.1:${status.port}/engram/v1/admin/namespaces?kind=self`,
749
+ { headers: { authorization: "Bearer test-token" } },
750
+ );
751
+ assert.equal(rejected.status, 400);
752
+ const accepted = await fetch(
753
+ `http://127.0.0.1:${status.port}/engram/v1/admin/namespaces?kind=default`,
754
+ { headers: { authorization: "Bearer test-token" } },
755
+ );
756
+ assert.equal(accepted.status, 200);
757
+ assert.deepEqual(filters, [{ kind: "default" }]);
758
+ } finally {
759
+ await server.stop();
760
+ }
761
+ });
762
+
731
763
  test("HTTP coding-context endpoint accepts projectTag shorthand", async () => {
732
764
  const calls: unknown[] = [];
733
765
  const service = {
@@ -22,7 +22,7 @@ import {
22
22
  respondOfflineManifestStream,
23
23
  respondOfflineSnapshotStream,
24
24
  } from "./access-http-offline-stream.js";
25
- import { nonEmptyQueryParam, optionalQueryString, positiveIntQueryParam } from "./access-http-query.js";
25
+ import { nonEmptyQueryParam, optionalNamespaceKindQueryParam, optionalQueryString, positiveIntQueryParam } from "./access-http-query.js";
26
26
  import { CorrectionContractError } from "./correction/correction-contract.js";
27
27
  import { WearablesInputError } from "./wearables/errors.js"; import { respondMeetingsList, respondMeetingsGet, respondMeetingsBuild } from "./meetings/http-glue.js";
28
28
  import { EngramMcpServer, MCP_SUPPORTED_PROTOCOL_VERSIONS } from "./access-mcp.js";
@@ -2988,14 +2988,10 @@ export class EngramAccessHttpServer extends SupportPassportAccessHttpBase {
2988
2988
  return;
2989
2989
  }
2990
2990
  this.requireOperatorToken();
2991
- const kind = parsed.searchParams.get("kind");
2992
- const principal = parsed.searchParams.get("principal");
2993
- const projectId = parsed.searchParams.get("projectId");
2991
+ const kind = optionalNamespaceKindQueryParam(parsed.searchParams.get("kind"));
2994
2992
  const discoveredBy = parsed.searchParams.get("discoveredBy");
2995
2993
  const result = await this.service.adminListNamespaces({
2996
- ...(kind ? { kind: kind as "default" | "self" | "shared" | "project" | "branch" | "team-project" | "explicit" | "legacy" } : {}),
2997
- ...(principal && principal.length > 0 ? { principal } : {}),
2998
- ...(projectId && projectId.length > 0 ? { projectId } : {}),
2994
+ ...(kind ? { kind } : {}),
2999
2995
  ...(discoveredBy
3000
2996
  ? { discoveredBy: discoveredBy as "config" | "write" | "read" | "scan" | "migration" }
3001
2997
  : {}),
@@ -200,20 +200,15 @@ test("listAdminNamespaces lists configured + discovered namespaces and marks sta
200
200
  }
201
201
  });
202
202
 
203
- test("listAdminNamespaces filters by principal", async () => {
203
+ test("listAdminNamespaces filters by kind", async () => {
204
204
  const memoryDir = await makeTempDir();
205
205
  try {
206
- const config = makeConfig({
207
- memoryDir,
208
- namespacePolicies: [
209
- { name: "alice", readPrincipals: ["alice"], writePrincipals: ["alice"] },
210
- { name: "bob", readPrincipals: ["bob"], writePrincipals: ["bob"] },
211
- ],
212
- });
206
+ const config = makeConfig({ memoryDir });
213
207
  const catalog = new NamespaceCatalog(config);
214
208
  await catalog.registerConfiguredNamespaces();
215
- const result = await listAdminNamespaces({ catalog, filter: { principal: "alice" } });
216
- assert.ok(result.entries.every((entry) => entry.principal === "alice"));
209
+ const result = await listAdminNamespaces({ catalog, filter: { kind: "default" } });
210
+ assert.ok(result.entries.length > 0, "default kind filter must return the default namespace");
211
+ assert.ok(result.entries.every((entry) => entry.kind === "default"));
217
212
  } finally {
218
213
  await rm(memoryDir, { recursive: true, force: true });
219
214
  }
@@ -322,8 +322,6 @@ export function inspectScope(options: InspectScopeOptions): ScopeInspection {
322
322
  /** Filters the namespace browser accepts (superset of {@link NamespaceCatalogFilter}). */
323
323
  export interface AdminNamespaceFilter {
324
324
  kind?: NamespaceRecord["kind"];
325
- principal?: string;
326
- projectId?: string;
327
325
  discoveredBy?: NamespaceRecord["discoveredBy"];
328
326
  /** Only namespaces with a write at/after this instant. */
329
327
  writtenSince?: Date;
@@ -336,10 +334,6 @@ export interface AdminNamespaceEntry {
336
334
  namespace: string;
337
335
  identityToken: string;
338
336
  kind: NamespaceRecord["kind"];
339
- principal?: string;
340
- projectId?: string;
341
- branch?: string;
342
- parentNamespace?: string;
343
337
  createdAt: string;
344
338
  lastReadAt?: string;
345
339
  lastWriteAt?: string;
@@ -386,12 +380,6 @@ export async function listAdminNamespaces(options: ListAdminNamespacesOptions):
386
380
 
387
381
  let entries: AdminNamespaceEntry[] = records.map((record) => toAdminEntry(record, staleBefore));
388
382
 
389
- if (filter?.principal) {
390
- entries = entries.filter((entry) => entry.principal === filter.principal);
391
- }
392
- if (filter?.projectId) {
393
- entries = entries.filter((entry) => entry.projectId === filter.projectId);
394
- }
395
383
  if (filter?.staleBefore) {
396
384
  const cutoff = filter.staleBefore.getTime();
397
385
  entries = entries.filter((entry) => {
@@ -411,10 +399,6 @@ function toAdminEntry(record: NamespaceRecord, staleBefore: Date): AdminNamespac
411
399
  namespace: record.namespace,
412
400
  identityToken: record.identityToken,
413
401
  kind: record.kind,
414
- principal: record.principal,
415
- projectId: record.projectId,
416
- branch: record.branch,
417
- parentNamespace: record.parentNamespace,
418
402
  createdAt: record.createdAt,
419
403
  lastReadAt: record.lastReadAt,
420
404
  lastWriteAt: record.lastWriteAt,
@@ -587,7 +587,7 @@ test("binary lifecycle resumes redirects after verification read failures", asyn
587
587
  assert.match(firstResult.errors.join("\n"), /injected verification read failure/);
588
588
  assert.equal(await readFile(notePath, "utf8"), "![img](remote/image.png)");
589
589
  assert.equal(manifest.assets[0]?.status, "error");
590
- assert.equal(typeof manifest.assets[0]?.redirectedAt, "string");
590
+ assert.equal(manifest.assets[0]?.redirectedAt, undefined);
591
591
 
592
592
  const secondResult = await runBinaryLifecyclePipeline(memoryDir, baseConfig, nestedRemoteBackend, noopLogger);
593
593
  manifest = JSON.parse(
@@ -294,11 +294,25 @@ async function stageRedirect(
294
294
  }
295
295
 
296
296
  if (asset.redirectedAt === undefined) {
297
- if (!dryRun) {
298
- asset.status = "mirrored";
297
+ let remoteSeen = false;
298
+ for (const mdPath of mdFiles) {
299
+ try {
300
+ const content = await readMarkdownFile(mdPath);
301
+ if (content.includes(asset.mirroredPath)) {
302
+ remoteSeen = true;
303
+ break;
304
+ }
305
+ } catch {
306
+ // Verify already succeeded; a later read error is not a local ref.
307
+ }
308
+ }
309
+ if (!remoteSeen) {
310
+ if (!dryRun) {
311
+ asset.status = "mirrored";
312
+ }
313
+ log.info(`[binary-lifecycle] preserved mirrored asset without redirected marker: ${asset.originalPath}${dryRun ? " [dry-run]" : ""}`);
314
+ continue;
299
315
  }
300
- log.info(`[binary-lifecycle] preserved mirrored asset without redirected marker: ${asset.originalPath}${dryRun ? " [dry-run]" : ""}`);
301
- continue;
302
316
  }
303
317
 
304
318
  if (!Number.isFinite(new Date(asset.mirroredAt).getTime())) {
@@ -400,9 +414,6 @@ async function stageRedirect(
400
414
  continue;
401
415
  }
402
416
 
403
- const redirectedAt = new Date().toISOString();
404
- asset.redirectedAt = redirectedAt;
405
-
406
417
  const verifyResult = await countRemainingLocalReferences(
407
418
  memoryDir,
408
419
  asset,
@@ -411,7 +422,10 @@ async function stageRedirect(
411
422
  readMarkdownFile,
412
423
  );
413
424
  if (verifyResult.errors.length > 0 || verifyResult.remaining > 0) {
414
- asset.status = "error";
425
+ asset.status = "error";
426
+ // Failed verify must not read as a completed redirect (#2471); this also
427
+ // clears stale stamps written by manifests from before that fix.
428
+ delete asset.redirectedAt;
415
429
  for (const msg of verifyResult.errors) {
416
430
  log.error(`[binary-lifecycle] ${msg}`);
417
431
  errors.push(msg);
@@ -424,7 +438,7 @@ async function stageRedirect(
424
438
  continue;
425
439
  }
426
440
  asset.status = "redirected";
427
- asset.redirectedAt = redirectedAt;
441
+ asset.redirectedAt = new Date().toISOString();
428
442
  redirected++;
429
443
  log.info(`[binary-lifecycle] redirected: ${asset.originalPath}`);
430
444
  }
package/src/buffer.ts CHANGED
@@ -619,6 +619,12 @@ export class SmartBuffer {
619
619
  log.debug(
620
620
  `buffer[${bufferKey}]: ${mutation.turnCountInWindow} turns, signal=${mutation.signalLevel}, decision=${decision}`,
621
621
  );
622
+ if (decision !== "keep_buffering" && extractionTurns === undefined) {
623
+ extractionTurns = [
624
+ ...mutation.retainedTurnsSnapshot,
625
+ ...mutation.activeTurnsSnapshot,
626
+ ];
627
+ }
622
628
  return extractionTurns ? { decision, extractionTurns } : { decision };
623
629
  }
624
630
 
@@ -177,8 +177,6 @@ function candidatePriority(candidate: NamespaceMaintenanceCandidate): number {
177
177
  if (candidate.source === "configured") return 2;
178
178
  if (candidate.kind === "team-project") return 3;
179
179
  if (candidate.kind === "project") return 4;
180
- if (candidate.kind === "self") return 5;
181
- if (candidate.kind === "legacy") return 6;
182
180
  if (candidate.kind === "branch") return 8;
183
181
  return 7;
184
182
  }
@@ -600,15 +600,16 @@ test("catalog quarantines malformed JSONL record fields at the parse boundary",
600
600
 
601
601
  assert.deepEqual(
602
602
  list.map((r) => r.namespace),
603
- ["valid"],
604
- "invalid enum/token/timestamp records must not surface",
603
+ ["bad-kind", "valid"],
604
+ "unknown kinds coerce to explicit; other malformed records stay quarantined",
605
605
  );
606
- assert.equal(list[0]?.identityToken, validToken);
607
- assert.equal(list[0]?.kind, "project");
608
- assert.equal(list[0]?.discoveredBy, "write");
609
- assert.equal(list[0]?.lastReadAt, undefined);
610
- assert.equal(list[0]?.lastWriteAt, undefined);
611
- assert.deepEqual(list[0]?.lastMaintenanceAt, { ok: now });
606
+ assert.equal(list.find((r) => r.namespace === "bad-kind")?.kind, "explicit");
607
+ const valid = list.find((r) => r.namespace === "valid");
608
+ assert.equal(valid?.kind, "project");
609
+ assert.equal(valid?.discoveredBy, "write");
610
+ assert.equal(valid?.lastReadAt, undefined);
611
+ assert.equal(valid?.lastWriteAt, undefined);
612
+ assert.deepEqual(valid?.lastMaintenanceAt, { ok: now });
612
613
  } finally {
613
614
  await rm(memoryDir, { recursive: true, force: true });
614
615
  }
@@ -3952,3 +3953,47 @@ test("#1903 cross-instance compaction never drops another instance's rows", asyn
3952
3953
  await rm(memoryDir, { recursive: true, force: true });
3953
3954
  }
3954
3955
  });
3956
+
3957
+ test("#2469 persisted self/legacy kinds coerce to explicit and drop unused hints", async () => {
3958
+ const memoryDir = await mkMemoryDir();
3959
+ try {
3960
+ const ns = "project-origin-dead-kind";
3961
+ const token = namespaceIdentityToken(ns);
3962
+ const stateDir = path.join(memoryDir, "state");
3963
+ await mkdir(stateDir, { recursive: true });
3964
+ const line = JSON.stringify({
3965
+ namespace: ns,
3966
+ identityToken: token,
3967
+ kind: "self",
3968
+ principal: "unused",
3969
+ projectId: "unused",
3970
+ branch: "unused",
3971
+ parentNamespace: "unused",
3972
+ createdAt: "2026-08-17T00:00:00.000Z",
3973
+ storageDir: path.join(memoryDir, "namespaces", token),
3974
+ discoveredBy: "write",
3975
+ });
3976
+ const legacyLine = JSON.stringify({
3977
+ namespace: "shared",
3978
+ identityToken: namespaceIdentityToken("shared"),
3979
+ kind: "legacy",
3980
+ createdAt: "2026-08-17T00:00:00.000Z",
3981
+ storageDir: path.join(memoryDir, "namespaces", namespaceIdentityToken("shared")),
3982
+ discoveredBy: "config",
3983
+ });
3984
+ await writeFile(path.join(stateDir, "namespaces.jsonl"), `${line}\n${legacyLine}\n`, "utf8");
3985
+
3986
+ const catalog = new NamespaceCatalog(makeConfig(memoryDir));
3987
+ const selfRecord = await catalog.getNamespaceRecord(ns);
3988
+ assert.equal(selfRecord?.kind, "explicit");
3989
+ assert.equal(
3990
+ (selfRecord as { principal?: string } | null)?.principal,
3991
+ undefined,
3992
+ );
3993
+ const legacyRecord = await catalog.getNamespaceRecord("shared");
3994
+ assert.equal(legacyRecord?.kind, "explicit");
3995
+ } finally {
3996
+ await rm(memoryDir, { recursive: true, force: true });
3997
+ }
3998
+ });
3999
+
@@ -59,13 +59,11 @@ import { ALL_CATEGORY_DIRS } from "../utils/category-dir.js";
59
59
 
60
60
  export type NamespaceKind =
61
61
  | "default"
62
- | "self"
63
62
  | "shared"
64
63
  | "project"
65
64
  | "branch"
66
65
  | "team-project"
67
- | "explicit"
68
- | "legacy";
66
+ | "explicit";
69
67
 
70
68
  export type NamespaceDiscoverySource = "config" | "write" | "read" | "scan" | "migration";
71
69
 
@@ -73,10 +71,6 @@ export interface NamespaceRecord {
73
71
  namespace: string;
74
72
  identityToken: string;
75
73
  kind: NamespaceKind;
76
- principal?: string;
77
- projectId?: string;
78
- branch?: string;
79
- parentNamespace?: string;
80
74
  createdAt: string;
81
75
  lastReadAt?: string;
82
76
  lastWriteAt?: string;
@@ -95,10 +89,6 @@ export interface NamespaceCatalogFilter {
95
89
  export interface NamespaceTouchMetadata {
96
90
  discoveredBy?: NamespaceDiscoverySource;
97
91
  kind?: NamespaceKind;
98
- principal?: string;
99
- projectId?: string;
100
- branch?: string;
101
- parentNamespace?: string;
102
92
  /** Explicit storage dir (when the caller already resolved it). */
103
93
  storageDir?: string;
104
94
  /** Override the touch timestamp (mainly for tests / migration replay). */
@@ -129,13 +119,11 @@ export interface NamespaceCatalogRebuildResult {
129
119
 
130
120
  const NAMESPACE_KINDS: readonly NamespaceKind[] = [
131
121
  "default",
132
- "self",
133
122
  "shared",
134
123
  "project",
135
124
  "branch",
136
125
  "team-project",
137
126
  "explicit",
138
- "legacy",
139
127
  ];
140
128
 
141
129
  const NAMESPACE_DISCOVERY_SOURCES: readonly NamespaceDiscoverySource[] = [
@@ -275,7 +263,7 @@ function isValidIsoTimestamp(value: string): boolean {
275
263
  return Number.isFinite(ms);
276
264
  }
277
265
 
278
- function isNamespaceKind(value: unknown): value is NamespaceKind {
266
+ export function isNamespaceKind(value: unknown): value is NamespaceKind {
279
267
  return typeof value === "string" && (NAMESPACE_KINDS as readonly string[]).includes(value);
280
268
  }
281
269
 
@@ -301,8 +289,7 @@ function coerceRecord(value: unknown): NamespaceRecord | null {
301
289
  if (typeof v.storageDir !== "string" || v.storageDir.length === 0) return null;
302
290
  if (typeof v.createdAt !== "string" || v.createdAt.length === 0) return null;
303
291
  if (!isValidIsoTimestamp(v.createdAt)) return null;
304
- const kind = v.kind === undefined ? "explicit" : isNamespaceKind(v.kind) ? v.kind : null;
305
- if (!kind) return null;
292
+ const kind = isNamespaceKind(v.kind) ? v.kind : "explicit";
306
293
  const discoveredBy =
307
294
  v.discoveredBy === undefined
308
295
  ? "scan"
@@ -318,10 +305,6 @@ function coerceRecord(value: unknown): NamespaceRecord | null {
318
305
  storageDir: v.storageDir,
319
306
  discoveredBy,
320
307
  };
321
- if (typeof v.principal === "string") record.principal = v.principal;
322
- if (typeof v.projectId === "string") record.projectId = v.projectId;
323
- if (typeof v.branch === "string") record.branch = v.branch;
324
- if (typeof v.parentNamespace === "string") record.parentNamespace = v.parentNamespace;
325
308
  if (typeof v.lastReadAt === "string" && isValidIsoTimestamp(v.lastReadAt)) {
326
309
  record.lastReadAt = v.lastReadAt;
327
310
  }
@@ -792,12 +775,6 @@ export class NamespaceCatalog {
792
775
  if (kind === "read" && cached.lastReadAt === undefined) return true;
793
776
  if (!metadata) return false;
794
777
  if (metadata.kind !== undefined && metadata.kind !== cached.kind) return true;
795
- if (metadata.principal !== undefined && metadata.principal !== cached.principal) return true;
796
- if (metadata.projectId !== undefined && metadata.projectId !== cached.projectId) return true;
797
- if (metadata.branch !== undefined && metadata.branch !== cached.branch) return true;
798
- if (metadata.parentNamespace !== undefined && metadata.parentNamespace !== cached.parentNamespace) {
799
- return true;
800
- }
801
778
  // A changed storageDir repoints routing/containment for this namespace —
802
779
  // must be observable at once, not held stale by the coalesce window (#1903, Cursor).
803
780
  if (metadata.storageDir !== undefined && metadata.storageDir !== cached.storageDir) return true;
@@ -1399,15 +1376,10 @@ export class NamespaceCatalog {
1399
1376
  (kind === "register" ? "config" : kind === "maintenance" ? "scan" : kind),
1400
1377
  };
1401
1378
 
1402
- // Update mutable fields. storageDir, kind, and the principal/project hints
1403
- // may legitimately change over a namespace's lifetime, so they upsert.
1379
+ // Update mutable fields. storageDir and kind may change over a
1380
+ // namespace's lifetime, so they upsert.
1404
1381
  record.storageDir = storageDir;
1405
1382
  if (metadata?.kind) record.kind = metadata.kind;
1406
- if (metadata?.principal !== undefined) record.principal = metadata.principal;
1407
- if (metadata?.projectId !== undefined) record.projectId = metadata.projectId;
1408
- if (metadata?.branch !== undefined) record.branch = metadata.branch;
1409
- if (metadata?.parentNamespace !== undefined)
1410
- record.parentNamespace = metadata.parentNamespace;
1411
1383
  // PROVENANCE (creation-only, with one upgrade — round 6, codex P2 NBPmT):
1412
1384
  // `discoveredBy` is otherwise preserved for existing records (a routine
1413
1385
  // read/register/resolve never relabels it). The single exception is a real
@@ -2109,10 +2081,6 @@ export class NamespaceCatalog {
2109
2081
  if (prior.lastReadAt) merged.lastReadAt = prior.lastReadAt;
2110
2082
  if (prior.lastWriteAt) merged.lastWriteAt = prior.lastWriteAt;
2111
2083
  if (prior.lastMaintenanceAt) merged.lastMaintenanceAt = { ...prior.lastMaintenanceAt };
2112
- if (prior.principal !== undefined) merged.principal = prior.principal;
2113
- if (prior.projectId !== undefined) merged.projectId = prior.projectId;
2114
- if (prior.branch !== undefined) merged.branch = prior.branch;
2115
- if (prior.parentNamespace !== undefined) merged.parentNamespace = prior.parentNamespace;
2116
2084
  return merged;
2117
2085
  }
2118
2086
  // ── Persistence ──────────────────────────────────────────────────────────