@remnic/core 9.3.733 → 9.3.735

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 (304) hide show
  1. package/dist/access-boundary.d.ts +13 -11
  2. package/dist/access-boundary.js +9 -9
  3. package/dist/access-cli.js +26 -24
  4. package/dist/access-cli.js.map +1 -1
  5. package/dist/access-http.d.ts +13 -11
  6. package/dist/access-http.js +14 -14
  7. package/dist/access-mcp.d.ts +13 -11
  8. package/dist/access-mcp.js +13 -13
  9. package/dist/access-operations-batch.js +11 -11
  10. package/dist/access-operations.d.ts +13 -11
  11. package/dist/access-operations.js +12 -12
  12. package/dist/access-schema.d.ts +4 -4
  13. package/dist/{access-service-Byoe3HsT.d.ts → access-service-CVx7mmvK.d.ts} +4 -4
  14. package/dist/access-service.d.ts +13 -11
  15. package/dist/access-service.js +8 -8
  16. package/dist/access-surface-catalog.d.ts +13 -11
  17. package/dist/action-confidence.d.ts +1 -1
  18. package/dist/active-memory-bridge.d.ts +1 -1
  19. package/dist/active-memory-bridge.js +3 -2
  20. package/dist/active-recall.d.ts +1 -1
  21. package/dist/behavior-learner.d.ts +1 -1
  22. package/dist/behavior-signals.d.ts +1 -1
  23. package/dist/bootstrap.d.ts +12 -10
  24. package/dist/briefing.d.ts +1 -1
  25. package/dist/buffer-surprise-report.d.ts +1 -1
  26. package/dist/buffer.d.ts +1 -1
  27. package/dist/calibration.d.ts +1 -1
  28. package/dist/capabilities.d.ts +196 -2
  29. package/dist/capabilities.js +21 -3
  30. package/dist/{catalog-DM1nk7cM.d.ts → catalog-BVhDEUhT.d.ts} +2 -2
  31. package/dist/causal-behavior.d.ts +1 -1
  32. package/dist/causal-consolidation.d.ts +1 -1
  33. package/dist/causal-trajectory-graph.d.ts +1 -1
  34. package/dist/{chunk-CX77GNMB.js → chunk-2T2N7ISV.js} +6 -3
  35. package/dist/chunk-2T2N7ISV.js.map +1 -0
  36. package/dist/{chunk-HHNSLPX7.js → chunk-5BOQNB2K.js} +10 -9
  37. package/dist/chunk-5BOQNB2K.js.map +1 -0
  38. package/dist/{chunk-QZHF4BWN.js → chunk-AAIHDIMD.js} +6 -6
  39. package/dist/{chunk-H3MB3F62.js → chunk-AB2E5DCN.js} +4 -3
  40. package/dist/chunk-AB2E5DCN.js.map +1 -0
  41. package/dist/{chunk-KSJCXXOU.js → chunk-AE7NTZ75.js} +6 -3
  42. package/dist/chunk-AE7NTZ75.js.map +1 -0
  43. package/dist/{chunk-OTQE66IX.js → chunk-AESC5OQJ.js} +6 -3
  44. package/dist/chunk-AESC5OQJ.js.map +1 -0
  45. package/dist/{chunk-FFUCCKPN.js → chunk-BXPG5AVX.js} +10 -7
  46. package/dist/chunk-BXPG5AVX.js.map +1 -0
  47. package/dist/{chunk-P3VJCTVE.js → chunk-CHJIWG2H.js} +4 -3
  48. package/dist/chunk-CHJIWG2H.js.map +1 -0
  49. package/dist/{chunk-FYWUNVFZ.js → chunk-E4LYJ7PY.js} +6 -6
  50. package/dist/{chunk-NIZQH6AU.js → chunk-FF36YNKY.js} +8 -7
  51. package/dist/chunk-FF36YNKY.js.map +1 -0
  52. package/dist/{chunk-OUITHS6V.js → chunk-FLCYY5JX.js} +801 -711
  53. package/dist/chunk-FLCYY5JX.js.map +1 -0
  54. package/dist/{chunk-PLBIPT6I.js → chunk-FLPKEMSO.js} +7 -4
  55. package/dist/chunk-FLPKEMSO.js.map +1 -0
  56. package/dist/{chunk-6TUWSUUD.js → chunk-G54IDCD3.js} +59 -53
  57. package/dist/chunk-G54IDCD3.js.map +1 -0
  58. package/dist/{chunk-J6BH2OBA.js → chunk-GB2FZOWB.js} +8 -5
  59. package/dist/chunk-GB2FZOWB.js.map +1 -0
  60. package/dist/{chunk-CGPHMNL4.js → chunk-GYICIICQ.js} +10 -6
  61. package/dist/chunk-GYICIICQ.js.map +1 -0
  62. package/dist/{chunk-DKT3X5C3.js → chunk-HFXZIF3V.js} +7 -4
  63. package/dist/chunk-HFXZIF3V.js.map +1 -0
  64. package/dist/{chunk-646B5ERJ.js → chunk-HLPYL6LC.js} +71 -65
  65. package/dist/chunk-HLPYL6LC.js.map +1 -0
  66. package/dist/{chunk-ZVHRSR2R.js → chunk-IPI45Q4S.js} +6 -3
  67. package/dist/chunk-IPI45Q4S.js.map +1 -0
  68. package/dist/{chunk-24D66MMN.js → chunk-IX4L7E5G.js} +7 -4
  69. package/dist/chunk-IX4L7E5G.js.map +1 -0
  70. package/dist/{chunk-SYX73XD7.js → chunk-IXGXALRV.js} +10 -7
  71. package/dist/chunk-IXGXALRV.js.map +1 -0
  72. package/dist/{chunk-ESF7TRYJ.js → chunk-JWDE7OVJ.js} +79 -2
  73. package/dist/chunk-JWDE7OVJ.js.map +1 -0
  74. package/dist/{chunk-GGL34GCW.js → chunk-K3Y2SJTN.js} +7 -4
  75. package/dist/chunk-K3Y2SJTN.js.map +1 -0
  76. package/dist/{chunk-PMAQRUN4.js → chunk-NDKW67ER.js} +5 -2
  77. package/dist/chunk-NDKW67ER.js.map +1 -0
  78. package/dist/{chunk-ZQUAVZNG.js → chunk-NNJKEAP2.js} +7 -4
  79. package/dist/chunk-NNJKEAP2.js.map +1 -0
  80. package/dist/{chunk-UZYLX7M6.js → chunk-OYHYBHHI.js} +9 -6
  81. package/dist/chunk-OYHYBHHI.js.map +1 -0
  82. package/dist/{chunk-NOU77OHX.js → chunk-P6VLG7KE.js} +2 -2
  83. package/dist/{chunk-O4ZIBPIW.js → chunk-QNTLWH3T.js} +3 -3
  84. package/dist/{chunk-LUCARK4W.js → chunk-UO6MPN77.js} +37 -35
  85. package/dist/chunk-UO6MPN77.js.map +1 -0
  86. package/dist/{chunk-HJWQJUKQ.js → chunk-VOEVVIP3.js} +3 -3
  87. package/dist/{chunk-KQYGNGON.js → chunk-ZBZ4XULO.js} +6 -3
  88. package/dist/chunk-ZBZ4XULO.js.map +1 -0
  89. package/dist/{cli-Dt-tuiYH.d.ts → cli-Cx5Mxwk7.d.ts} +3 -3
  90. package/dist/cli.d.ts +14 -12
  91. package/dist/cli.js +20 -20
  92. package/dist/compounding/engine.d.ts +3 -2
  93. package/dist/compounding/engine.js +2 -1
  94. package/dist/compounding/preference-consolidator.d.ts +1 -1
  95. package/dist/compression-optimizer.d.ts +1 -1
  96. package/dist/config.d.ts +1 -1
  97. package/dist/connectors/codex-materialize-runner.d.ts +1 -1
  98. package/dist/connectors/codex-materialize.d.ts +1 -1
  99. package/dist/connectors/index.d.ts +1 -1
  100. package/dist/consolidation-provenance-check.d.ts +1 -1
  101. package/dist/consolidation-undo.d.ts +1 -1
  102. package/dist/contradiction/index.d.ts +2 -2
  103. package/dist/contradiction/index.js +2 -1
  104. package/dist/{contradiction-scan-HWGEOUDS.js → contradiction-scan-2B4AE4TI.js} +3 -2
  105. package/dist/conversation-index/backend.d.ts +1 -1
  106. package/dist/conversation-index/chunker.d.ts +1 -1
  107. package/dist/conversation-index/faiss-adapter.d.ts +1 -1
  108. package/dist/conversation-index/indexer.d.ts +1 -1
  109. package/dist/conversation-index/search.d.ts +1 -1
  110. package/dist/day-summary.d.ts +1 -1
  111. package/dist/delinearize.d.ts +1 -1
  112. package/dist/direct-answer-wiring.d.ts +1 -1
  113. package/dist/direct-answer.d.ts +1 -1
  114. package/dist/embedding-fallback.d.ts +1 -1
  115. package/dist/embedding-fallback.js +2 -2
  116. package/dist/enrichment/index.d.ts +1 -1
  117. package/dist/entity-retrieval.d.ts +1 -1
  118. package/dist/entity-retrieval.js +2 -1
  119. package/dist/entity-schema.d.ts +1 -1
  120. package/dist/explicit-capture.d.ts +12 -10
  121. package/dist/explicit-capture.js +2 -1
  122. package/dist/extraction-faithfulness.d.ts +1 -1
  123. package/dist/extraction-judge-telemetry.d.ts +1 -1
  124. package/dist/extraction-judge-training.d.ts +1 -1
  125. package/dist/extraction-judge.d.ts +1 -1
  126. package/dist/extraction.d.ts +1 -1
  127. package/dist/extraction.js +3 -3
  128. package/dist/fallback-llm.d.ts +1 -1
  129. package/dist/{first-start-migration-OOR57AYR.js → first-start-migration-2RQYDIZ7.js} +10 -8
  130. package/dist/first-start-migration-2RQYDIZ7.js.map +1 -0
  131. package/dist/graph-dashboard-diff.d.ts +1 -1
  132. package/dist/graph-dashboard-key.d.ts +1 -1
  133. package/dist/graph-dashboard-parser.d.ts +1 -1
  134. package/dist/graph-edge-reinforcement.d.ts +1 -1
  135. package/dist/graph-snapshot.d.ts +1 -1
  136. package/dist/graph.d.ts +1 -1
  137. package/dist/identity-continuity.d.ts +1 -1
  138. package/dist/importance.d.ts +1 -1
  139. package/dist/index.d.ts +12 -12
  140. package/dist/index.js +44 -44
  141. package/dist/intent.d.ts +1 -1
  142. package/dist/lcm/engine.d.ts +1 -1
  143. package/dist/lcm/index.d.ts +1 -1
  144. package/dist/lcm/tools.d.ts +1 -1
  145. package/dist/lifecycle.d.ts +1 -1
  146. package/dist/live-connectors-runner.d.ts +1 -1
  147. package/dist/local-llm.d.ts +1 -1
  148. package/dist/local-llm.js +2 -1
  149. package/dist/local-model-endpoint.d.ts +1 -1
  150. package/dist/maintenance/memory-governance.d.ts +1 -1
  151. package/dist/mcp-memory-inspector-app.d.ts +13 -11
  152. package/dist/memory-action-policy.d.ts +1 -1
  153. package/dist/memory-cache.d.ts +1 -1
  154. package/dist/memory-lifecycle-ledger-utils.d.ts +1 -1
  155. package/dist/memory-projection-store.d.ts +1 -1
  156. package/dist/memory-provenance.d.ts +1 -1
  157. package/dist/memory-worth-outcomes.d.ts +1 -1
  158. package/dist/models-json.d.ts +1 -1
  159. package/dist/namespaces/migrate.d.ts +2 -2
  160. package/dist/namespaces/migrate.js +6 -6
  161. package/dist/namespaces/principal.d.ts +1 -1
  162. package/dist/namespaces/principal.js +2 -1
  163. package/dist/namespaces/search.d.ts +1 -1
  164. package/dist/namespaces/search.js +4 -4
  165. package/dist/namespaces/storage.d.ts +2 -2
  166. package/dist/namespaces/storage.js +2 -1
  167. package/dist/native-knowledge.d.ts +1 -1
  168. package/dist/operator-toolkit.d.ts +1 -1
  169. package/dist/operator-toolkit.js +11 -11
  170. package/dist/orchestration/compression-guideline-coordinator.d.ts +1 -1
  171. package/dist/orchestration/compression-guideline-coordinator.js +2 -1
  172. package/dist/orchestration/maintenance.d.ts +2 -2
  173. package/dist/orchestration/maintenance.js +6 -5
  174. package/dist/{orchestrator-B4KjaOtY.d.ts → orchestrator-oF0cceBX.d.ts} +143 -18
  175. package/dist/orchestrator.d.ts +8 -6
  176. package/dist/orchestrator.js +21 -19
  177. package/dist/patterns-cli.d.ts +1 -1
  178. package/dist/policy-runtime.d.ts +1 -1
  179. package/dist/provenance.d.ts +1 -1
  180. package/dist/qmd-recall-cache.d.ts +1 -1
  181. package/dist/qmd.d.ts +1 -1
  182. package/dist/recall-disclosure-escalation.d.ts +1 -1
  183. package/dist/recall-explain-renderer.d.ts +1 -1
  184. package/dist/recall-planner-llm.d.ts +1 -1
  185. package/dist/recall-state.d.ts +1 -1
  186. package/dist/recall-tag-filter.d.ts +1 -1
  187. package/dist/recall-xray-cli.d.ts +1 -1
  188. package/dist/recall-xray-renderer.d.ts +1 -1
  189. package/dist/recall-xray.d.ts +1 -1
  190. package/dist/resolve-auth-token.d.ts +1 -1
  191. package/dist/retrieval-agents.d.ts +1 -1
  192. package/dist/retrieval-tiers.d.ts +1 -1
  193. package/dist/routing/engine.d.ts +1 -1
  194. package/dist/routing/store.d.ts +1 -1
  195. package/dist/schemas.d.ts +2 -2
  196. package/dist/search/embed-helper.d.ts +1 -1
  197. package/dist/search/embed-helper.js +2 -2
  198. package/dist/search/factory.d.ts +1 -1
  199. package/dist/search/factory.js +3 -3
  200. package/dist/search/index.d.ts +1 -1
  201. package/dist/search/index.js +3 -3
  202. package/dist/search/lancedb-backend.d.ts +1 -1
  203. package/dist/search/meilisearch-backend.d.ts +1 -1
  204. package/dist/search/noop-backend.d.ts +1 -1
  205. package/dist/search/orama-backend.d.ts +1 -1
  206. package/dist/search/port.d.ts +1 -1
  207. package/dist/search/remote-backend.d.ts +1 -1
  208. package/dist/{semantic-SLAa_prH.d.ts → semantic-DJR8_DMQ.d.ts} +1 -1
  209. package/dist/{semantic-consolidation-CstTvHPo.d.ts → semantic-consolidation-DKGbufYO.d.ts} +1 -1
  210. package/dist/semantic-consolidation.d.ts +2 -2
  211. package/dist/semantic-rule-verifier.d.ts +1 -1
  212. package/dist/session-observer-bands.d.ts +1 -1
  213. package/dist/session-observer-state.d.ts +1 -1
  214. package/dist/shared-context/manager.d.ts +3 -3
  215. package/dist/signal.d.ts +1 -1
  216. package/dist/storage.d.ts +1 -1
  217. package/dist/summarizer.d.ts +1 -1
  218. package/dist/summarizer.js +3 -2
  219. package/dist/summary-snapshot.d.ts +1 -1
  220. package/dist/temporal-supersession.d.ts +1 -1
  221. package/dist/temporal-validity.d.ts +1 -1
  222. package/dist/threading.d.ts +1 -1
  223. package/dist/tier-migration.d.ts +1 -1
  224. package/dist/tier-routing.d.ts +1 -1
  225. package/dist/{tier-stats-3LYQ3VV5.js → tier-stats-KPDIISG7.js} +8 -4
  226. package/dist/tier-stats-KPDIISG7.js.map +1 -0
  227. package/dist/topics.d.ts +1 -1
  228. package/dist/transcript.d.ts +1 -1
  229. package/dist/transfer/types.d.ts +30 -30
  230. package/dist/trust-score-stage.d.ts +1 -1
  231. package/dist/trust-score.d.ts +1 -1
  232. package/dist/{types-VkxElCHR.d.ts → types-C7UCxpuO.d.ts} +1 -1
  233. package/dist/types.d.ts +1 -1
  234. package/dist/utility-runtime.d.ts +1 -1
  235. package/package.json +2 -2
  236. package/src/access-service.ts +61 -56
  237. package/src/active-memory-bridge.ts +2 -1
  238. package/src/admin/admin-surfaces.ts +2 -1
  239. package/src/capabilities.test.ts +375 -0
  240. package/src/capabilities.ts +403 -0
  241. package/src/cli/creation-ledger-commands.ts +2 -2
  242. package/src/cli/research-status-commands.ts +13 -13
  243. package/src/cli.ts +29 -25
  244. package/src/compounding/engine.ts +4 -3
  245. package/src/contradiction/contradiction-scan.ts +4 -3
  246. package/src/embedding-fallback.ts +5 -2
  247. package/src/entity-retrieval.ts +3 -2
  248. package/src/explicit-capture.ts +2 -1
  249. package/src/extraction.ts +6 -3
  250. package/src/local-llm.ts +4 -3
  251. package/src/maintenance/first-start-migration.ts +8 -5
  252. package/src/maintenance/namespace-maintenance-fanout.ts +2 -1
  253. package/src/maintenance/namespace-planner.ts +4 -3
  254. package/src/maintenance/tier-stats.ts +4 -3
  255. package/src/namespaces/catalog.ts +2 -1
  256. package/src/namespaces/migrate.ts +2 -1
  257. package/src/namespaces/principal.ts +6 -5
  258. package/src/namespaces/scope-profiles.ts +2 -1
  259. package/src/namespaces/search.ts +2 -1
  260. package/src/namespaces/storage.ts +4 -3
  261. package/src/operator-toolkit.ts +27 -26
  262. package/src/orchestration/compression-guideline-coordinator.ts +7 -6
  263. package/src/orchestration/lifecycle-policy-coordinator.ts +504 -0
  264. package/src/orchestration/maintenance.ts +8 -4
  265. package/src/orchestration/semantic-consolidation-coordinator.ts +454 -0
  266. package/src/orchestration/tier-migration-coordinator.ts +5 -4
  267. package/src/orchestrator.ts +106 -800
  268. package/src/scopes/scope-plan.ts +3 -2
  269. package/src/search/embed-helper.ts +5 -2
  270. package/src/search/factory.ts +9 -6
  271. package/src/summarizer.ts +3 -2
  272. package/dist/chunk-24D66MMN.js.map +0 -1
  273. package/dist/chunk-646B5ERJ.js.map +0 -1
  274. package/dist/chunk-6TUWSUUD.js.map +0 -1
  275. package/dist/chunk-CGPHMNL4.js.map +0 -1
  276. package/dist/chunk-CX77GNMB.js.map +0 -1
  277. package/dist/chunk-DKT3X5C3.js.map +0 -1
  278. package/dist/chunk-ESF7TRYJ.js.map +0 -1
  279. package/dist/chunk-FFUCCKPN.js.map +0 -1
  280. package/dist/chunk-GGL34GCW.js.map +0 -1
  281. package/dist/chunk-H3MB3F62.js.map +0 -1
  282. package/dist/chunk-HHNSLPX7.js.map +0 -1
  283. package/dist/chunk-J6BH2OBA.js.map +0 -1
  284. package/dist/chunk-KQYGNGON.js.map +0 -1
  285. package/dist/chunk-KSJCXXOU.js.map +0 -1
  286. package/dist/chunk-LUCARK4W.js.map +0 -1
  287. package/dist/chunk-NIZQH6AU.js.map +0 -1
  288. package/dist/chunk-OTQE66IX.js.map +0 -1
  289. package/dist/chunk-OUITHS6V.js.map +0 -1
  290. package/dist/chunk-P3VJCTVE.js.map +0 -1
  291. package/dist/chunk-PLBIPT6I.js.map +0 -1
  292. package/dist/chunk-PMAQRUN4.js.map +0 -1
  293. package/dist/chunk-SYX73XD7.js.map +0 -1
  294. package/dist/chunk-UZYLX7M6.js.map +0 -1
  295. package/dist/chunk-ZQUAVZNG.js.map +0 -1
  296. package/dist/chunk-ZVHRSR2R.js.map +0 -1
  297. package/dist/first-start-migration-OOR57AYR.js.map +0 -1
  298. package/dist/tier-stats-3LYQ3VV5.js.map +0 -1
  299. /package/dist/{chunk-QZHF4BWN.js.map → chunk-AAIHDIMD.js.map} +0 -0
  300. /package/dist/{chunk-FYWUNVFZ.js.map → chunk-E4LYJ7PY.js.map} +0 -0
  301. /package/dist/{chunk-NOU77OHX.js.map → chunk-P6VLG7KE.js.map} +0 -0
  302. /package/dist/{chunk-O4ZIBPIW.js.map → chunk-QNTLWH3T.js.map} +0 -0
  303. /package/dist/{chunk-HJWQJUKQ.js.map → chunk-VOEVVIP3.js.map} +0 -0
  304. /package/dist/{contradiction-scan-HWGEOUDS.js.map → contradiction-scan-2B4AE4TI.js.map} +0 -0
@@ -5,8 +5,26 @@ import { parseConfig } from "./config.js";
5
5
  import {
6
6
  resolveCapabilities,
7
7
  resolveAccessSetupCapabilities,
8
+ resolveNamespaceCapabilities,
9
+ resolveQmdCapabilities,
10
+ resolveIdentityContinuityCapabilities,
11
+ resolveLocalLlmCapabilities,
12
+ resolveSecurityCapabilities,
13
+ resolveEvalCapabilities,
14
+ resolveUtilityLearningCapabilities,
15
+ resolveObjectiveStateCapabilities,
16
+ resolveCompressionCapabilities,
8
17
  type CapabilitySet,
9
18
  type AccessSetupCapabilitySet,
19
+ type NamespaceCapabilitySet,
20
+ type QmdCapabilitySet,
21
+ type IdentityContinuityCapabilitySet,
22
+ type LocalLlmCapabilitySet,
23
+ type SecurityCapabilitySet,
24
+ type EvalCapabilitySet,
25
+ type UtilityLearningCapabilitySet,
26
+ type ObjectiveStateCapabilitySet,
27
+ type CompressionCapabilitySet,
10
28
  } from "./capabilities.js";
11
29
 
12
30
  /**
@@ -646,3 +664,360 @@ test("resolveCreationMemoryCapabilities matches pre-migration config reads (pari
646
664
  }
647
665
  }
648
666
  });
667
+
668
+ // ---------------------------------------------------------------------------
669
+ // Namespace capability set parity tests (issue #1523 batch 5).
670
+ //
671
+ // Guard: resolveNamespaceCapabilities(config).namespaces must always equal
672
+ // config.namespacesEnabled. The flag is a non-optional boolean so no default
673
+ // coercion is needed.
674
+ // ---------------------------------------------------------------------------
675
+
676
+ test("resolveNamespaceCapabilities: namespaces === config.namespacesEnabled (parity)", () => {
677
+ const cases = [
678
+ { label: "on", overrides: { namespacesEnabled: true } },
679
+ { label: "off", overrides: { namespacesEnabled: false } },
680
+ ];
681
+
682
+ for (const { label, overrides } of cases) {
683
+ const config = parseConfig(overrides);
684
+ const caps = resolveNamespaceCapabilities(config);
685
+ assert.equal(
686
+ caps.namespaces,
687
+ config.namespacesEnabled,
688
+ `[${label}] caps.namespaces must equal config.namespacesEnabled`,
689
+ );
690
+ }
691
+ });
692
+
693
+ test("resolveNamespaceCapabilities: result is frozen", () => {
694
+ const config = parseConfig({ namespacesEnabled: true });
695
+ const caps = resolveNamespaceCapabilities(config);
696
+ assert.ok(Object.isFrozen(caps), "NamespaceCapabilitySet must be frozen");
697
+ });
698
+
699
+ // ---------------------------------------------------------------------------
700
+ // QmdCapabilitySet — gate-parity tests (issue #1523 batch 6).
701
+ //
702
+ // Same invariant: every caps field must project from its `<field>Enabled`
703
+ // config flag. All twelve flags are required booleans on PluginConfig (defaults
704
+ // resolved at the parse boundary), so the projection is pure passthrough.
705
+ // ---------------------------------------------------------------------------
706
+
707
+ const QMD_FIELD_TO_FLAG: Record<keyof QmdCapabilitySet, string> = {
708
+ qmd: "qmdEnabled",
709
+ qmdTierMigration: "qmdTierMigrationEnabled",
710
+ qmdTierAutoBackfill: "qmdTierAutoBackfillEnabled",
711
+ qmdAutoEmbed: "qmdAutoEmbedEnabled",
712
+ qmdMaintenance: "qmdMaintenanceEnabled",
713
+ qmdColdTier: "qmdColdTierEnabled",
714
+ qmdDaemon: "qmdDaemonEnabled",
715
+ qmdTierParityGraph: "qmdTierParityGraphEnabled",
716
+ qmdQueryRerank: "qmdQueryRerankEnabled",
717
+ qmdIntentHints: "qmdIntentHintsEnabled",
718
+ qmdExplain: "qmdExplainEnabled",
719
+ qmdAutoUpgrade: "qmdAutoUpgradeEnabled",
720
+ };
721
+
722
+ const QMD_FIELDS = Object.keys(QMD_FIELD_TO_FLAG) as Array<keyof QmdCapabilitySet>;
723
+
724
+ test("resolveQmdCapabilities projects every field from its flag (true variant)", () => {
725
+ const overrides: Record<string, boolean> = {};
726
+ for (const flag of Object.values(QMD_FIELD_TO_FLAG)) overrides[flag] = true;
727
+ const config = parseConfig(overrides);
728
+ const caps = resolveQmdCapabilities(config);
729
+
730
+ for (const field of QMD_FIELDS) {
731
+ const flag = QMD_FIELD_TO_FLAG[field];
732
+ assert.equal(caps[field], true, `caps.${field} must be true when ${flag}=true`);
733
+ }
734
+ });
735
+
736
+ test("resolveQmdCapabilities projects every field from its flag (false variant)", () => {
737
+ const overrides: Record<string, boolean> = {};
738
+ for (const flag of Object.values(QMD_FIELD_TO_FLAG)) overrides[flag] = false;
739
+ const config = parseConfig(overrides);
740
+ const caps = resolveQmdCapabilities(config);
741
+
742
+ for (const field of QMD_FIELDS) {
743
+ const flag = QMD_FIELD_TO_FLAG[field];
744
+ assert.equal(caps[field], false, `caps.${field} must be false when ${flag}=false`);
745
+ }
746
+ });
747
+
748
+ test("resolveQmdCapabilities returns a frozen object", () => {
749
+ const config = parseConfig({});
750
+ const caps = resolveQmdCapabilities(config);
751
+ assert.equal(Object.isFrozen(caps), true);
752
+ });
753
+
754
+ test("resolveQmdCapabilities matches pre-migration config reads (parity contract)", () => {
755
+ const cases: Record<string, Record<string, boolean>> = {
756
+ "all-off": Object.fromEntries(Object.values(QMD_FIELD_TO_FLAG).map((f) => [f, false])),
757
+ "all-on": Object.fromEntries(Object.values(QMD_FIELD_TO_FLAG).map((f) => [f, true])),
758
+ "qmd-on-rest-off": {
759
+ ...Object.fromEntries(Object.values(QMD_FIELD_TO_FLAG).map((f) => [f, false])),
760
+ qmdEnabled: true,
761
+ },
762
+ "tiers-on-qmd-off": {
763
+ ...Object.fromEntries(Object.values(QMD_FIELD_TO_FLAG).map((f) => [f, false])),
764
+ qmdTierMigrationEnabled: true,
765
+ qmdColdTierEnabled: true,
766
+ },
767
+ };
768
+
769
+ for (const [label, overrides] of Object.entries(cases)) {
770
+ const config = parseConfig(overrides);
771
+ const caps = resolveQmdCapabilities(config);
772
+
773
+ for (const field of QMD_FIELDS) {
774
+ const flag = QMD_FIELD_TO_FLAG[field];
775
+ assert.equal(
776
+ caps[field],
777
+ (config as unknown as Record<string, boolean>)[flag],
778
+ `[${label}] caps.${field} must equal config.${flag}`,
779
+ );
780
+ }
781
+ }
782
+ });
783
+
784
+ // ---------------------------------------------------------------------------
785
+ // IdentityContinuityCapabilitySet — gate-parity tests (issue #1523 batch 6).
786
+ // ---------------------------------------------------------------------------
787
+
788
+ test("resolveIdentityContinuityCapabilities: identityContinuity === config.identityContinuityEnabled (parity)", () => {
789
+ const cases = [
790
+ { label: "on", overrides: { identityContinuityEnabled: true } },
791
+ { label: "off", overrides: { identityContinuityEnabled: false } },
792
+ ];
793
+
794
+ for (const { label, overrides } of cases) {
795
+ const config = parseConfig(overrides);
796
+ const caps = resolveIdentityContinuityCapabilities(config);
797
+ assert.equal(
798
+ caps.identityContinuity,
799
+ config.identityContinuityEnabled,
800
+ `[${label}] caps.identityContinuity must equal config.identityContinuityEnabled`,
801
+ );
802
+ }
803
+ });
804
+
805
+ test("resolveIdentityContinuityCapabilities: result is frozen", () => {
806
+ const config = parseConfig({ identityContinuityEnabled: true });
807
+ const caps = resolveIdentityContinuityCapabilities(config);
808
+ assert.ok(Object.isFrozen(caps), "IdentityContinuityCapabilitySet must be frozen");
809
+ });
810
+
811
+ // ---------------------------------------------------------------------------
812
+ // LocalLlmCapabilitySet — gate-parity tests (issue #1523 batch 6).
813
+ // ---------------------------------------------------------------------------
814
+
815
+ test("resolveLocalLlmCapabilities: localLlm === config.localLlmEnabled (parity)", () => {
816
+ const cases = [
817
+ { label: "on", overrides: { localLlmEnabled: true } },
818
+ { label: "off", overrides: { localLlmEnabled: false } },
819
+ ];
820
+
821
+ for (const { label, overrides } of cases) {
822
+ const config = parseConfig(overrides);
823
+ const caps = resolveLocalLlmCapabilities(config);
824
+ assert.equal(
825
+ caps.localLlm,
826
+ config.localLlmEnabled,
827
+ `[${label}] caps.localLlm must equal config.localLlmEnabled`,
828
+ );
829
+ }
830
+ });
831
+
832
+ test("resolveLocalLlmCapabilities: result is frozen", () => {
833
+ const config = parseConfig({ localLlmEnabled: true });
834
+ const caps = resolveLocalLlmCapabilities(config);
835
+ assert.ok(Object.isFrozen(caps), "LocalLlmCapabilitySet must be frozen");
836
+ });
837
+
838
+ // ---------------------------------------------------------------------------
839
+ // SecurityCapabilitySet — gate-parity tests (issue #1523 batch 7).
840
+ // ---------------------------------------------------------------------------
841
+
842
+ const SECURITY_FIELD_TO_FLAG: Record<keyof SecurityCapabilitySet, string> = {
843
+ trustZones: "trustZonesEnabled",
844
+ quarantinePromotion: "quarantinePromotionEnabled",
845
+ memoryPoisoningDefense: "memoryPoisoningDefenseEnabled",
846
+ trustZoneRecall: "trustZoneRecallEnabled",
847
+ };
848
+
849
+ const SECURITY_FIELDS = Object.keys(SECURITY_FIELD_TO_FLAG) as Array<keyof SecurityCapabilitySet>;
850
+
851
+ test("resolveSecurityCapabilities projects every field from its flag (true variant)", () => {
852
+ const overrides: Record<string, boolean> = {};
853
+ for (const flag of Object.values(SECURITY_FIELD_TO_FLAG)) overrides[flag] = true;
854
+ const config = parseConfig(overrides);
855
+ const caps = resolveSecurityCapabilities(config);
856
+ for (const field of SECURITY_FIELDS) {
857
+ assert.equal(caps[field], true, `${field} must be true`);
858
+ }
859
+ });
860
+
861
+ test("resolveSecurityCapabilities projects every field from its flag (false variant)", () => {
862
+ const overrides: Record<string, boolean> = {};
863
+ for (const flag of Object.values(SECURITY_FIELD_TO_FLAG)) overrides[flag] = false;
864
+ const config = parseConfig(overrides);
865
+ const caps = resolveSecurityCapabilities(config);
866
+ for (const field of SECURITY_FIELDS) {
867
+ assert.equal(caps[field], false, `${field} must be false`);
868
+ }
869
+ });
870
+
871
+ test("resolveSecurityCapabilities returns a frozen object", () => {
872
+ const caps = resolveSecurityCapabilities(parseConfig({}));
873
+ assert.equal(Object.isFrozen(caps), true, "SecurityCapabilitySet must be frozen");
874
+ });
875
+
876
+ // ---------------------------------------------------------------------------
877
+ // EvalCapabilitySet — gate-parity tests (issue #1523 batch 7).
878
+ // ---------------------------------------------------------------------------
879
+
880
+ const EVAL_FIELD_TO_FLAG: Record<keyof EvalCapabilitySet, string> = {
881
+ evalHarness: "evalHarnessEnabled",
882
+ evalShadowMode: "evalShadowModeEnabled",
883
+ benchmarkBaselineSnapshots: "benchmarkBaselineSnapshotsEnabled",
884
+ benchmarkDeltaReporter: "benchmarkDeltaReporterEnabled",
885
+ memoryRedTeamBench: "memoryRedTeamBenchEnabled",
886
+ };
887
+
888
+ const EVAL_FIELDS = Object.keys(EVAL_FIELD_TO_FLAG) as Array<keyof EvalCapabilitySet>;
889
+
890
+ test("resolveEvalCapabilities projects every field from its flag (true variant)", () => {
891
+ const overrides: Record<string, boolean> = {};
892
+ for (const flag of Object.values(EVAL_FIELD_TO_FLAG)) overrides[flag] = true;
893
+ const config = parseConfig(overrides);
894
+ const caps = resolveEvalCapabilities(config);
895
+ for (const field of EVAL_FIELDS) {
896
+ assert.equal(caps[field], true, `${field} must be true`);
897
+ }
898
+ });
899
+
900
+ test("resolveEvalCapabilities projects every field from its flag (false variant)", () => {
901
+ const overrides: Record<string, boolean> = {};
902
+ for (const flag of Object.values(EVAL_FIELD_TO_FLAG)) overrides[flag] = false;
903
+ const config = parseConfig(overrides);
904
+ const caps = resolveEvalCapabilities(config);
905
+ for (const field of EVAL_FIELDS) {
906
+ assert.equal(caps[field], false, `${field} must be false`);
907
+ }
908
+ });
909
+
910
+ test("resolveEvalCapabilities returns a frozen object", () => {
911
+ const caps = resolveEvalCapabilities(parseConfig({}));
912
+ assert.equal(Object.isFrozen(caps), true, "EvalCapabilitySet must be frozen");
913
+ });
914
+
915
+ // ---------------------------------------------------------------------------
916
+ // UtilityLearningCapabilitySet — gate-parity tests (issue #1523 batch 7).
917
+ // ---------------------------------------------------------------------------
918
+
919
+ const UTILITY_FIELD_TO_FLAG: Record<keyof UtilityLearningCapabilitySet, string> = {
920
+ memoryUtilityLearning: "memoryUtilityLearningEnabled",
921
+ promotionByOutcome: "promotionByOutcomeEnabled",
922
+ };
923
+
924
+ const UTILITY_FIELDS = Object.keys(UTILITY_FIELD_TO_FLAG) as Array<keyof UtilityLearningCapabilitySet>;
925
+
926
+ test("resolveUtilityLearningCapabilities projects every field from its flag (true variant)", () => {
927
+ const overrides: Record<string, boolean> = {};
928
+ for (const flag of Object.values(UTILITY_FIELD_TO_FLAG)) overrides[flag] = true;
929
+ const config = parseConfig(overrides);
930
+ const caps = resolveUtilityLearningCapabilities(config);
931
+ for (const field of UTILITY_FIELDS) {
932
+ assert.equal(caps[field], true, `${field} must be true`);
933
+ }
934
+ });
935
+
936
+ test("resolveUtilityLearningCapabilities projects every field from its flag (false variant)", () => {
937
+ const overrides: Record<string, boolean> = {};
938
+ for (const flag of Object.values(UTILITY_FIELD_TO_FLAG)) overrides[flag] = false;
939
+ const config = parseConfig(overrides);
940
+ const caps = resolveUtilityLearningCapabilities(config);
941
+ for (const field of UTILITY_FIELDS) {
942
+ assert.equal(caps[field], false, `${field} must be false`);
943
+ }
944
+ });
945
+
946
+ test("resolveUtilityLearningCapabilities returns a frozen object", () => {
947
+ const caps = resolveUtilityLearningCapabilities(parseConfig({}));
948
+ assert.equal(Object.isFrozen(caps), true, "UtilityLearningCapabilitySet must be frozen");
949
+ });
950
+
951
+ // ---------------------------------------------------------------------------
952
+ // ObjectiveStateCapabilitySet — gate-parity tests (issue #1523 batch 7).
953
+ // ---------------------------------------------------------------------------
954
+
955
+ const OBJECTIVE_FIELD_TO_FLAG: Record<keyof ObjectiveStateCapabilitySet, string> = {
956
+ objectiveStateMemory: "objectiveStateMemoryEnabled",
957
+ objectiveStateSnapshotWrites: "objectiveStateSnapshotWritesEnabled",
958
+ objectiveStateRecall: "objectiveStateRecallEnabled",
959
+ };
960
+
961
+ const OBJECTIVE_FIELDS = Object.keys(OBJECTIVE_FIELD_TO_FLAG) as Array<keyof ObjectiveStateCapabilitySet>;
962
+
963
+ test("resolveObjectiveStateCapabilities projects every field from its flag (true variant)", () => {
964
+ const overrides: Record<string, boolean> = {};
965
+ for (const flag of Object.values(OBJECTIVE_FIELD_TO_FLAG)) overrides[flag] = true;
966
+ const config = parseConfig(overrides);
967
+ const caps = resolveObjectiveStateCapabilities(config);
968
+ for (const field of OBJECTIVE_FIELDS) {
969
+ assert.equal(caps[field], true, `${field} must be true`);
970
+ }
971
+ });
972
+
973
+ test("resolveObjectiveStateCapabilities projects every field from its flag (false variant)", () => {
974
+ const overrides: Record<string, boolean> = {};
975
+ for (const flag of Object.values(OBJECTIVE_FIELD_TO_FLAG)) overrides[flag] = false;
976
+ const config = parseConfig(overrides);
977
+ const caps = resolveObjectiveStateCapabilities(config);
978
+ for (const field of OBJECTIVE_FIELDS) {
979
+ assert.equal(caps[field], false, `${field} must be false`);
980
+ }
981
+ });
982
+
983
+ test("resolveObjectiveStateCapabilities returns a frozen object", () => {
984
+ const caps = resolveObjectiveStateCapabilities(parseConfig({}));
985
+ assert.equal(Object.isFrozen(caps), true, "ObjectiveStateCapabilitySet must be frozen");
986
+ });
987
+
988
+ // ---------------------------------------------------------------------------
989
+ // CompressionCapabilitySet — gate-parity tests (issue #1523 batch 7).
990
+ // ---------------------------------------------------------------------------
991
+
992
+ const COMPRESSION_FIELD_TO_FLAG: Record<keyof CompressionCapabilitySet, string> = {
993
+ compressionGuidelineLearning: "compressionGuidelineLearningEnabled",
994
+ compressionGuidelineSemanticRefinement: "compressionGuidelineSemanticRefinementEnabled",
995
+ contextCompressionActions: "contextCompressionActionsEnabled",
996
+ };
997
+
998
+ const COMPRESSION_FIELDS = Object.keys(COMPRESSION_FIELD_TO_FLAG) as Array<keyof CompressionCapabilitySet>;
999
+
1000
+ test("resolveCompressionCapabilities projects every field from its flag (true variant)", () => {
1001
+ const overrides: Record<string, boolean> = {};
1002
+ for (const flag of Object.values(COMPRESSION_FIELD_TO_FLAG)) overrides[flag] = true;
1003
+ const config = parseConfig(overrides);
1004
+ const caps = resolveCompressionCapabilities(config);
1005
+ for (const field of COMPRESSION_FIELDS) {
1006
+ assert.equal(caps[field], true, `${field} must be true`);
1007
+ }
1008
+ });
1009
+
1010
+ test("resolveCompressionCapabilities projects every field from its flag (false variant)", () => {
1011
+ const overrides: Record<string, boolean> = {};
1012
+ for (const flag of Object.values(COMPRESSION_FIELD_TO_FLAG)) overrides[flag] = false;
1013
+ const config = parseConfig(overrides);
1014
+ const caps = resolveCompressionCapabilities(config);
1015
+ for (const field of COMPRESSION_FIELDS) {
1016
+ assert.equal(caps[field], false, `${field} must be false`);
1017
+ }
1018
+ });
1019
+
1020
+ test("resolveCompressionCapabilities returns a frozen object", () => {
1021
+ const caps = resolveCompressionCapabilities(parseConfig({}));
1022
+ assert.equal(Object.isFrozen(caps), true, "CompressionCapabilitySet must be frozen");
1023
+ });