@snoai/memory 0.0.0-stage → 1.0.0

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 (478) hide show
  1. package/LICENSE +176 -0
  2. package/README.md +7 -2
  3. package/config/b-profile-section-registry.json +118 -0
  4. package/config/llm/compiled/2026-05-19T230932Z/manifest.json +25 -0
  5. package/config/llm/compiled/2026-05-19T230932Z/registry-root.json +67 -0
  6. package/config/llm/compiled/2026-05-19T230932Z/resolved/mem_claw/openai_gpt_5_nano.json +5 -0
  7. package/config/llm/compiled/2026-05-19T230932Z/resolved/mem_claw/openrouter_auto.json +5 -0
  8. package/config/llm/compiled/2026-05-19T230932Z/resolved/mem_claw/sno_ai_extract.json +5 -0
  9. package/config/llm/compiled/2026-05-19T230932Z/source/mem_claw/openai_gpt_5_nano.mda +24 -0
  10. package/config/llm/compiled/2026-05-19T230932Z/source/mem_claw/openrouter_auto.mda +24 -0
  11. package/config/llm/compiled/2026-05-19T230932Z/source/mem_claw/sno_ai_extract.mda +24 -0
  12. package/config/llm/compiled/2026-07-21T001311Z/manifest.json +43 -0
  13. package/config/llm/compiled/2026-07-21T001311Z/registry-root.json +97 -0
  14. package/config/llm/compiled/2026-07-21T001311Z/resolved/mem_claw/openai_gpt_5_nano.json +5 -0
  15. package/config/llm/compiled/2026-07-21T001311Z/resolved/mem_claw/openrouter_auto.json +5 -0
  16. package/config/llm/compiled/2026-07-21T001311Z/resolved/mem_claw/sno_ai_extract.json +5 -0
  17. package/config/llm/compiled/2026-07-21T001311Z/resolved/mem_claw/sno_conflict_verdict.json +10 -0
  18. package/config/llm/compiled/2026-07-21T001311Z/resolved/mem_claw/sno_extract_chat.json +10 -0
  19. package/config/llm/compiled/2026-07-21T001311Z/resolved/mem_claw/sno_extract_profile.json +10 -0
  20. package/config/llm/compiled/2026-07-21T001311Z/source/mem_claw/openai_gpt_5_nano.mda +24 -0
  21. package/config/llm/compiled/2026-07-21T001311Z/source/mem_claw/openrouter_auto.mda +24 -0
  22. package/config/llm/compiled/2026-07-21T001311Z/source/mem_claw/sno_ai_extract.mda +24 -0
  23. package/config/llm/compiled/2026-07-21T001311Z/source/mem_claw/sno_conflict_verdict.mda +27 -0
  24. package/config/llm/compiled/2026-07-21T001311Z/source/mem_claw/sno_extract_chat.mda +27 -0
  25. package/config/llm/compiled/2026-07-21T001311Z/source/mem_claw/sno_extract_profile.mda +27 -0
  26. package/config/llm/compiled/2026-08-29T060335Z/manifest.json +43 -0
  27. package/config/llm/compiled/2026-08-29T060335Z/registry-root.json +97 -0
  28. package/config/llm/compiled/2026-08-29T060335Z/resolved/mem_claw/openai_gpt_5_nano.json +5 -0
  29. package/config/llm/compiled/2026-08-29T060335Z/resolved/mem_claw/openrouter_auto.json +5 -0
  30. package/config/llm/compiled/2026-08-29T060335Z/resolved/mem_claw/sno_ai_extract.json +5 -0
  31. package/config/llm/compiled/2026-08-29T060335Z/resolved/mem_claw/sno_conflict_verdict.json +10 -0
  32. package/config/llm/compiled/2026-08-29T060335Z/resolved/mem_claw/sno_extract_chat.json +10 -0
  33. package/config/llm/compiled/2026-08-29T060335Z/resolved/mem_claw/sno_extract_profile.json +10 -0
  34. package/config/llm/compiled/2026-08-29T060335Z/source/mem_claw/openai_gpt_5_nano.mda +24 -0
  35. package/config/llm/compiled/2026-08-29T060335Z/source/mem_claw/openrouter_auto.mda +24 -0
  36. package/config/llm/compiled/2026-08-29T060335Z/source/mem_claw/sno_ai_extract.mda +24 -0
  37. package/config/llm/compiled/2026-08-29T060335Z/source/mem_claw/sno_conflict_verdict.mda +27 -0
  38. package/config/llm/compiled/2026-08-29T060335Z/source/mem_claw/sno_extract_chat.mda +27 -0
  39. package/config/llm/compiled/2026-08-29T060335Z/source/mem_claw/sno_extract_profile.mda +27 -0
  40. package/config/llm/compiled/2026-09-04T004828Z/manifest.json +43 -0
  41. package/config/llm/compiled/2026-09-04T004828Z/registry-root.json +97 -0
  42. package/config/llm/compiled/2026-09-04T004828Z/resolved/mem_claw/openai_gpt_5_nano.json +5 -0
  43. package/config/llm/compiled/2026-09-04T004828Z/resolved/mem_claw/openrouter_auto.json +5 -0
  44. package/config/llm/compiled/2026-09-04T004828Z/resolved/mem_claw/sno_ai_extract.json +5 -0
  45. package/config/llm/compiled/2026-09-04T004828Z/resolved/mem_claw/sno_conflict_verdict.json +10 -0
  46. package/config/llm/compiled/2026-09-04T004828Z/resolved/mem_claw/sno_extract_chat.json +10 -0
  47. package/config/llm/compiled/2026-09-04T004828Z/resolved/mem_claw/sno_extract_profile.json +10 -0
  48. package/config/llm/compiled/2026-09-04T004828Z/source/mem_claw/openai_gpt_5_nano.mda +24 -0
  49. package/config/llm/compiled/2026-09-04T004828Z/source/mem_claw/openrouter_auto.mda +24 -0
  50. package/config/llm/compiled/2026-09-04T004828Z/source/mem_claw/sno_ai_extract.mda +24 -0
  51. package/config/llm/compiled/2026-09-04T004828Z/source/mem_claw/sno_conflict_verdict.mda +27 -0
  52. package/config/llm/compiled/2026-09-04T004828Z/source/mem_claw/sno_extract_chat.mda +27 -0
  53. package/config/llm/compiled/2026-09-04T004828Z/source/mem_claw/sno_extract_profile.mda +27 -0
  54. package/config/llm/current.json +4 -0
  55. package/config/llm/source/mem_claw/openai_gpt_5_nano.mda +24 -0
  56. package/config/llm/source/mem_claw/openrouter_auto.mda +24 -0
  57. package/config/llm/source/mem_claw/sno_ai_extract.mda +24 -0
  58. package/config/llm/source/mem_claw/sno_conflict_verdict.mda +27 -0
  59. package/config/llm/source/mem_claw/sno_extract_chat.mda +27 -0
  60. package/config/llm/source/mem_claw/sno_extract_profile.mda +27 -0
  61. package/config/llm.trust.json +37 -0
  62. package/dist/_types-CUKHSRkS.d.ts +103 -0
  63. package/dist/access-tracker-CSc21GtV.d.ts +110 -0
  64. package/dist/adapter-DMEmCTKo.d.ts +69 -0
  65. package/dist/adapter-XaRHZWZ2.js +333 -0
  66. package/dist/agent-llm-port-5oXgBpzJ.d.ts +53 -0
  67. package/dist/all-resources-BQK2ugjB.js +6379 -0
  68. package/dist/all-resources-Dij6l5h0.d.ts +18 -0
  69. package/dist/ambient-learning-text-normalizer-CxjATmMp.js +170 -0
  70. package/dist/ambient-learning-text-normalizer-_fH3LeuK.d.ts +10 -0
  71. package/dist/atomic-extraction-reply-BJ9XV_9s.js +863 -0
  72. package/dist/atomic-extraction-skill-CcXmuCqL.js +56 -0
  73. package/dist/atomic-memory-extraction-BpOUWPJM.d.ts +327 -0
  74. package/dist/atomic-memory-extraction-sdNf1-B1.js +3605 -0
  75. package/dist/b-profile-section-dictionary-provider-BHkoNqgk.js +1812 -0
  76. package/dist/b-profile-section-dictionary-provider-BxbksLj3.d.ts +62 -0
  77. package/dist/best-effort-BPZSzKk0.d.ts +9 -0
  78. package/dist/calendar-instruction-CzqZbAPG.js +194 -0
  79. package/dist/capture-policy-detector-CHz5GOPA.d.ts +53 -0
  80. package/dist/capture-policy-detector-DaMfy9CZ.js +357 -0
  81. package/dist/classifier-C96uH9OF.d.ts +272 -0
  82. package/dist/client.d.ts +34 -0
  83. package/dist/client.js +305 -0
  84. package/dist/coding-skin.d.ts +51 -0
  85. package/dist/coding-skin.js +55 -0
  86. package/dist/config-tSrvLXgV.js +2577 -0
  87. package/dist/connection-DAbzki8K.d.ts +391 -0
  88. package/dist/connection-DliCOBB2.js +297 -0
  89. package/dist/daily-log-generator-CH_KuWHs.js +469 -0
  90. package/dist/daily-log-generator-CsQPHl4A.d.ts +73 -0
  91. package/dist/daily-spend-estimator-DiwzBlo1.d.ts +8 -0
  92. package/dist/data-bootstrap-CYniFp8b.js +172 -0
  93. package/dist/data-bootstrap-CcJUwkqf.d.ts +30 -0
  94. package/dist/data-paths-C7sNdqvP.d.ts +22 -0
  95. package/dist/derived-suppression-cache-C7bGARc0.d.ts +36 -0
  96. package/dist/diagnostic-encoder.d.ts +6 -0
  97. package/dist/diagnostic-encoder.js +29 -0
  98. package/dist/embedding-provider-client-Q_hJonK9.js +294 -0
  99. package/dist/embedding-provider-client-vynZMuit.d.ts +94 -0
  100. package/dist/entry-metadata-parser-BIVSMCIk.js +20 -0
  101. package/dist/error-D-wb-rZw.js +23 -0
  102. package/dist/error-signals-D8_3vYu4.d.ts +28 -0
  103. package/dist/error-signals-lMH2uAdV.js +134 -0
  104. package/dist/errors-CeVRxf9V.d.ts +49 -0
  105. package/dist/extraction-text-sanitizer-B_AhIecT.d.ts +32 -0
  106. package/dist/i18n-text-DbD6Qify.d.ts +13 -0
  107. package/dist/index-BsMap4It.d.ts +650 -0
  108. package/dist/index-DL8AVj0Z.d.ts +571 -0
  109. package/dist/index-DQ7VL6d3.d.ts +350 -0
  110. package/dist/index.d.ts +65 -0
  111. package/dist/index.js +1201 -0
  112. package/dist/intent-analyzer-B5XVrWwe.d.ts +28 -0
  113. package/dist/internal/config/index.d.ts +2 -0
  114. package/dist/internal/config/index.js +581 -0
  115. package/dist/internal/config/plugin-config-schema.d.ts +2 -0
  116. package/dist/internal/config/plugin-config-schema.js +2 -0
  117. package/dist/internal/config/product-mode.d.ts +2 -0
  118. package/dist/internal/config/product-mode.js +36 -0
  119. package/dist/internal/config/settings.d.ts +2 -0
  120. package/dist/internal/config/settings.js +265 -0
  121. package/dist/internal/config/skill-categories.d.ts +4 -0
  122. package/dist/internal/config/skill-categories.js +68 -0
  123. package/dist/internal/config/skin-defaults.d.ts +6 -0
  124. package/dist/internal/config/skin-defaults.js +6 -0
  125. package/dist/internal/contract/discovery.d.ts +10 -0
  126. package/dist/internal/contract/discovery.js +53 -0
  127. package/dist/internal/contract/profile.d.ts +2 -0
  128. package/dist/internal/contract/profile.js +44 -0
  129. package/dist/internal/contract/routes.d.ts +2 -0
  130. package/dist/internal/contract/routes.js +61 -0
  131. package/dist/internal/engine/bindings/memory-cli-shared.d.ts +47 -0
  132. package/dist/internal/engine/bindings/memory-cli-shared.js +84 -0
  133. package/dist/internal/engine/bindings/memory-forget-tool.d.ts +5 -0
  134. package/dist/internal/engine/bindings/memory-forget-tool.js +66 -0
  135. package/dist/internal/engine/bindings/memory-list-tool.d.ts +5 -0
  136. package/dist/internal/engine/bindings/memory-list-tool.js +57 -0
  137. package/dist/internal/engine/bindings/memory-recall-tool.d.ts +10 -0
  138. package/dist/internal/engine/bindings/memory-recall-tool.js +283 -0
  139. package/dist/internal/engine/bindings/memory-reflection-resolve-tool.d.ts +5 -0
  140. package/dist/internal/engine/bindings/memory-reflection-resolve-tool.js +150 -0
  141. package/dist/internal/engine/bindings/memory-stats-tool.d.ts +5 -0
  142. package/dist/internal/engine/bindings/memory-stats-tool.js +43 -0
  143. package/dist/internal/engine/bindings/memory-store-tool.d.ts +5 -0
  144. package/dist/internal/engine/bindings/memory-store-tool.js +165 -0
  145. package/dist/internal/engine/bindings/memory-tool-access.d.ts +16 -0
  146. package/dist/internal/engine/bindings/memory-tool-access.js +46 -0
  147. package/dist/internal/engine/bindings/memory-tool-formatting.d.ts +62 -0
  148. package/dist/internal/engine/bindings/memory-tool-formatting.js +106 -0
  149. package/dist/internal/engine/bindings/memory-tool-results.d.ts +8 -0
  150. package/dist/internal/engine/bindings/memory-tool-results.js +41 -0
  151. package/dist/internal/engine/bindings/memory-tool-schemas.d.ts +109 -0
  152. package/dist/internal/engine/bindings/memory-tool-schemas.js +75 -0
  153. package/dist/internal/engine/bindings/memory-update-tool.d.ts +5 -0
  154. package/dist/internal/engine/bindings/memory-update-tool.js +127 -0
  155. package/dist/internal/engine/bindings/sno-station-mem-ambient-learning-hook.d.ts +14 -0
  156. package/dist/internal/engine/bindings/sno-station-mem-ambient-learning-hook.js +248 -0
  157. package/dist/internal/engine/bindings/sno-station-mem-auto-recall-hook.d.ts +12 -0
  158. package/dist/internal/engine/bindings/sno-station-mem-auto-recall-hook.js +324 -0
  159. package/dist/internal/engine/bindings/sno-station-mem-hook-types.d.ts +56 -0
  160. package/dist/internal/engine/bindings/sno-station-mem-hook-types.js +1 -0
  161. package/dist/internal/engine/bindings/sno-station-mem-insight-distill-factory.d.ts +14 -0
  162. package/dist/internal/engine/bindings/sno-station-mem-insight-distill-factory.js +119 -0
  163. package/dist/internal/engine/bindings/sno-station-mem-message-transcript.d.ts +52 -0
  164. package/dist/internal/engine/bindings/sno-station-mem-message-transcript.js +145 -0
  165. package/dist/internal/engine/bindings/sno-station-mem-reset-hook.d.ts +10 -0
  166. package/dist/internal/engine/bindings/sno-station-mem-reset-hook.js +9 -0
  167. package/dist/internal/engine/bindings/sno-station-mem-runtime-mode.d.ts +37 -0
  168. package/dist/internal/engine/bindings/sno-station-mem-runtime-mode.js +105 -0
  169. package/dist/internal/engine/bindings/sno-station-mem-session-state.d.ts +10 -0
  170. package/dist/internal/engine/bindings/sno-station-mem-session-state.js +27 -0
  171. package/dist/internal/engine/eval/trace.d.ts +2 -0
  172. package/dist/internal/engine/eval/trace.js +151 -0
  173. package/dist/internal/engine/extraction/ambient-learning-text-normalizer.d.ts +2 -0
  174. package/dist/internal/engine/extraction/ambient-learning-text-normalizer.js +2 -0
  175. package/dist/internal/engine/extraction/atomic-memory-extraction.d.ts +2 -0
  176. package/dist/internal/engine/extraction/atomic-memory-extraction.js +2 -0
  177. package/dist/internal/engine/extraction/b-profile-section-dictionary-provider.d.ts +2 -0
  178. package/dist/internal/engine/extraction/b-profile-section-dictionary-provider.js +2 -0
  179. package/dist/internal/engine/extraction/b-profile-section-rekey.d.ts +49 -0
  180. package/dist/internal/engine/extraction/b-profile-section-rekey.js +730 -0
  181. package/dist/internal/engine/extraction/capture-policy-detector.d.ts +2 -0
  182. package/dist/internal/engine/extraction/capture-policy-detector.js +2 -0
  183. package/dist/internal/engine/extraction/embedding-provider-client.d.ts +2 -0
  184. package/dist/internal/engine/extraction/embedding-provider-client.js +2 -0
  185. package/dist/internal/engine/extraction/extraction-text-sanitizer.d.ts +2 -0
  186. package/dist/internal/engine/extraction/extraction-text-sanitizer.js +114 -0
  187. package/dist/internal/engine/extraction/memory-metadata-codec.d.ts +3 -0
  188. package/dist/internal/engine/extraction/memory-metadata-codec.js +2 -0
  189. package/dist/internal/engine/extraction/memory-temporality-classifier.d.ts +2 -0
  190. package/dist/internal/engine/extraction/memory-temporality-classifier.js +2 -0
  191. package/dist/internal/engine/i18n/all-resources.d.ts +2 -0
  192. package/dist/internal/engine/i18n/all-resources.js +2 -0
  193. package/dist/internal/engine/i18n/locales.d.ts +2 -0
  194. package/dist/internal/engine/i18n/locales.js +19 -0
  195. package/dist/internal/engine/i18n/res/_types.d.ts +2 -0
  196. package/dist/internal/engine/i18n/res/_types.js +11 -0
  197. package/dist/internal/engine/observability/adapter.d.ts +2 -0
  198. package/dist/internal/engine/observability/adapter.js +2 -0
  199. package/dist/internal/engine/observability/best-effort.d.ts +2 -0
  200. package/dist/internal/engine/observability/best-effort.js +41 -0
  201. package/dist/internal/engine/observability/early-diagnostics.js +2 -0
  202. package/dist/internal/engine/observability/memory-snapshot.d.ts +2 -0
  203. package/dist/internal/engine/observability/memory-snapshot.js +44 -0
  204. package/dist/internal/engine/observability/observable-embedder.d.ts +2 -0
  205. package/dist/internal/engine/observability/observable-embedder.js +43 -0
  206. package/dist/internal/engine/observability/observable-llm-client.d.ts +2 -0
  207. package/dist/internal/engine/observability/observable-llm-client.js +98 -0
  208. package/dist/internal/engine/observability/observable-memory-store.d.ts +2 -0
  209. package/dist/internal/engine/observability/observable-memory-store.js +701 -0
  210. package/dist/internal/engine/observability/observable-retriever.d.ts +2 -0
  211. package/dist/internal/engine/observability/observable-retriever.js +95 -0
  212. package/dist/internal/engine/observability/runtime-diagnostics.d.ts +13 -0
  213. package/dist/internal/engine/observability/runtime-diagnostics.js +96 -0
  214. package/dist/internal/engine/observability/session-registry.d.ts +2 -0
  215. package/dist/internal/engine/observability/session-registry.js +58 -0
  216. package/dist/internal/engine/observability/version-metadata.d.ts +7 -0
  217. package/dist/internal/engine/observability/version-metadata.js +59 -0
  218. package/dist/internal/engine/operations/daily-spend-estimator.d.ts +2 -0
  219. package/dist/internal/engine/operations/daily-spend-estimator.js +97 -0
  220. package/dist/internal/engine/operations/learning-file-maintenance.d.ts +2 -0
  221. package/dist/internal/engine/operations/learning-file-maintenance.js +255 -0
  222. package/dist/internal/engine/operations/memory-tier-promoter.d.ts +2 -0
  223. package/dist/internal/engine/operations/memory-tier-promoter.js +95 -0
  224. package/dist/internal/engine/operations/runtime-audit-log.d.ts +3 -0
  225. package/dist/internal/engine/operations/runtime-audit-log.js +3 -0
  226. package/dist/internal/engine/provider/canonical-memory-corpus.d.ts +38 -0
  227. package/dist/internal/engine/provider/canonical-memory-corpus.js +253 -0
  228. package/dist/internal/engine/provider/provider-registration.d.ts +39 -0
  229. package/dist/internal/engine/provider/provider-registration.js +2 -0
  230. package/dist/internal/engine/provider/provider-row-renderer.d.ts +7 -0
  231. package/dist/internal/engine/provider/provider-row-renderer.js +53 -0
  232. package/dist/internal/engine/provider/provider-types.d.ts +2 -0
  233. package/dist/internal/engine/provider/provider-types.js +1 -0
  234. package/dist/internal/engine/reflection/daily-log-generator.d.ts +2 -0
  235. package/dist/internal/engine/reflection/daily-log-generator.js +2 -0
  236. package/dist/internal/engine/reflection/reflection-command-hooks.d.ts +2 -0
  237. package/dist/internal/engine/reflection/reflection-command-hooks.js +2 -0
  238. package/dist/internal/engine/reflection/reflection-deps.d.ts +2 -0
  239. package/dist/internal/engine/reflection/reflection-deps.js +1 -0
  240. package/dist/internal/engine/reflection/reflection-embedded-generator.d.ts +2 -0
  241. package/dist/internal/engine/reflection/reflection-embedded-generator.js +2 -0
  242. package/dist/internal/engine/reflection/reflection-injection-hooks.d.ts +2 -0
  243. package/dist/internal/engine/reflection/reflection-injection-hooks.js +219 -0
  244. package/dist/internal/engine/reflection/reflection-lifecycle-hooks.d.ts +2 -0
  245. package/dist/internal/engine/reflection/reflection-lifecycle-hooks.js +63 -0
  246. package/dist/internal/engine/reflection/strategy-hook-runner.d.ts +4 -0
  247. package/dist/internal/engine/reflection/strategy-hook-runner.js +3 -0
  248. package/dist/internal/engine/rem/classifier.d.ts +2 -0
  249. package/dist/internal/engine/rem/classifier.js +180 -0
  250. package/dist/internal/engine/rem/index.d.ts +4 -0
  251. package/dist/internal/engine/rem/index.js +2551 -0
  252. package/dist/internal/engine/rem/types.d.ts +2 -0
  253. package/dist/internal/engine/rem/types.js +40 -0
  254. package/dist/internal/engine/retrieval/access-tracker.d.ts +2 -0
  255. package/dist/internal/engine/retrieval/access-tracker.js +314 -0
  256. package/dist/internal/engine/retrieval/intent-analyzer.d.ts +2 -0
  257. package/dist/internal/engine/retrieval/intent-analyzer.js +27 -0
  258. package/dist/internal/engine/retrieval/retrieval-gate.d.ts +2 -0
  259. package/dist/internal/engine/retrieval/retrieval-gate.js +47 -0
  260. package/dist/internal/engine/retrieval/retriever.d.ts +2 -0
  261. package/dist/internal/engine/retrieval/retriever.js +2 -0
  262. package/dist/internal/engine/security/memory-scope-policy.d.ts +2 -0
  263. package/dist/internal/engine/security/memory-scope-policy.js +2 -0
  264. package/dist/internal/engine/security/redact.d.ts +2 -0
  265. package/dist/internal/engine/security/redact.js +34 -0
  266. package/dist/internal/engine/security/scopes.d.ts +3 -0
  267. package/dist/internal/engine/security/scopes.js +3 -0
  268. package/dist/internal/engine/shared/errors.d.ts +2 -0
  269. package/dist/internal/engine/shared/errors.js +66 -0
  270. package/dist/internal/engine/shared/i18n-text.d.ts +2 -0
  271. package/dist/internal/engine/shared/i18n-text.js +58 -0
  272. package/dist/internal/engine/shared/iso-date-time.d.ts +16 -0
  273. package/dist/internal/engine/shared/iso-date-time.js +40 -0
  274. package/dist/internal/engine/shared/lru.d.ts +2 -0
  275. package/dist/internal/engine/shared/lru.js +30 -0
  276. package/dist/internal/engine/shared/memory-kind-policy.d.ts +2 -0
  277. package/dist/internal/engine/shared/memory-kind-policy.js +64 -0
  278. package/dist/internal/engine/shared/paths.d.ts +3 -0
  279. package/dist/internal/engine/shared/paths.js +2 -0
  280. package/dist/internal/engine/shared/types.d.ts +3 -0
  281. package/dist/internal/engine/shared/types.js +25 -0
  282. package/dist/internal/engine/shared/utils.d.ts +2 -0
  283. package/dist/internal/engine/shared/utils.js +175 -0
  284. package/dist/internal/engine/telemetry/memory-telemetry-api.d.ts +134 -0
  285. package/dist/internal/engine/telemetry/memory-telemetry-api.js +730 -0
  286. package/dist/internal/engine/telemetry/memory-telemetry-observability.d.ts +24 -0
  287. package/dist/internal/engine/telemetry/memory-telemetry-observability.js +133 -0
  288. package/dist/internal/engine/telemetry/memory-telemetry-outbox.d.ts +2 -0
  289. package/dist/internal/engine/telemetry/memory-telemetry-outbox.js +443 -0
  290. package/dist/internal/engine/telemetry/memory-telemetry-types.d.ts +2 -0
  291. package/dist/internal/engine/telemetry/memory-telemetry-types.js +21 -0
  292. package/dist/internal/engine/telemetry/observe-ledger.d.ts +30 -0
  293. package/dist/internal/engine/telemetry/observe-ledger.js +111 -0
  294. package/dist/internal/model/agent-llm-port.d.ts +2 -0
  295. package/dist/internal/model/agent-llm-port.js +1 -0
  296. package/dist/internal/model/llm-client.d.ts +3 -0
  297. package/dist/internal/model/llm-client.js +3 -0
  298. package/dist/internal/model/llm-failure.d.ts +26 -0
  299. package/dist/internal/model/llm-failure.js +63 -0
  300. package/dist/internal/model/llm-mode-routing.d.ts +22 -0
  301. package/dist/internal/model/llm-mode-routing.js +37 -0
  302. package/dist/internal/store/atomic-memory-cutover-sql.d.ts +13 -0
  303. package/dist/internal/store/atomic-memory-cutover-sql.js +237 -0
  304. package/dist/internal/store/connection.d.ts +2 -0
  305. package/dist/internal/store/connection.js +2 -0
  306. package/dist/internal/store/data-bootstrap.d.ts +2 -0
  307. package/dist/internal/store/data-bootstrap.js +2 -0
  308. package/dist/internal/store/data-paths.d.ts +2 -0
  309. package/dist/internal/store/data-paths.js +65 -0
  310. package/dist/internal/store/maintenance.d.ts +75 -0
  311. package/dist/internal/store/maintenance.js +1401 -0
  312. package/dist/internal/store/memory-kinds-cutover-migrator.d.ts +28 -0
  313. package/dist/internal/store/memory-kinds-cutover-migrator.js +415 -0
  314. package/dist/internal/store/migrations.d.ts +27 -0
  315. package/dist/internal/store/migrations.js +201 -0
  316. package/dist/internal/store/sqlite-runtime.d.ts +2 -0
  317. package/dist/internal/store/sqlite-runtime.js +109 -0
  318. package/dist/internal/store/store.d.ts +3 -0
  319. package/dist/internal/store/store.js +2 -0
  320. package/dist/learning-file-maintenance-9b-Ut6Kv.d.ts +30 -0
  321. package/dist/llm-client-B7Xoxqou.js +1378 -0
  322. package/dist/llm-client-DOTSGzhe.d.ts +51 -0
  323. package/dist/locales-JxGmkG6t.d.ts +7 -0
  324. package/dist/log-site-catalog.generated-B9WYdnAM.js +2321 -0
  325. package/dist/log-site-catalog.json +1 -0
  326. package/dist/lru-DyoaTyIs.d.ts +14 -0
  327. package/dist/memdump.d.ts +52 -0
  328. package/dist/memdump.js +163 -0
  329. package/dist/memory-entry-projector-DHo8jH10.js +1015 -0
  330. package/dist/memory-kind-policy-LKt0u3gy.d.ts +23 -0
  331. package/dist/memory-metadata-codec-C3oQd47V.d.ts +68 -0
  332. package/dist/memory-metadata-codec-DL1sbJiN.js +577 -0
  333. package/dist/memory-runtime-BZtREuwW.js +19459 -0
  334. package/dist/memory-scope-policy-1gg5QlWZ.d.ts +67 -0
  335. package/dist/memory-scope-policy-DICSCURA.js +283 -0
  336. package/dist/memory-snapshot-3e44ND2i.d.ts +16 -0
  337. package/dist/memory-source-order-BtrIxaIt.js +134 -0
  338. package/dist/memory-store-base-XRA4S9Xl.d.ts +1095 -0
  339. package/dist/memory-store-shared-DeIDkhLj.js +158 -0
  340. package/dist/memory-store-write-validation-B_hDG2zf.js +243 -0
  341. package/dist/memory-telemetry-incidents-BWA9kcZx.js +8 -0
  342. package/dist/memory-telemetry-metadata-CA7W8tK6.js +77 -0
  343. package/dist/memory-telemetry-outbox-ddTdImt7.d.ts +74 -0
  344. package/dist/memory-telemetry-receipts-MAJecvXQ.d.ts +34 -0
  345. package/dist/memory-telemetry-receipts-YsxbwOAf.js +91 -0
  346. package/dist/memory-telemetry-types-CufVmrCs.d.ts +14 -0
  347. package/dist/memory-temporality-classifier-CEdRTN5J.d.ts +43 -0
  348. package/dist/memory-temporality-classifier-CKiTAHXe.js +184 -0
  349. package/dist/memory-tier-promoter-DbTpahkP.d.ts +43 -0
  350. package/dist/memory-tool-dependencies-CLODycUw.js +19 -0
  351. package/dist/memory-tool-dependencies-N69chrQc.d.ts +14 -0
  352. package/dist/model-call-table-CspopkBg.js +563 -0
  353. package/dist/model-reply-text-CKopStP2.js +334 -0
  354. package/dist/observable-embedder-DQnNgf9O.d.ts +17 -0
  355. package/dist/observable-llm-client-uwqPADpN.d.ts +21 -0
  356. package/dist/observable-memory-store-BaZKbhgq.d.ts +73 -0
  357. package/dist/observable-retriever-Dt_NUxAA.d.ts +23 -0
  358. package/dist/operation-cancellation-CTKWwNHk.js +81 -0
  359. package/dist/paths-qVF-5uBq.d.ts +1 -0
  360. package/dist/plugin-config-schema-C0UUbOmG.d.ts +413 -0
  361. package/dist/plugin-config-schema-YJLyIIcJ.js +361 -0
  362. package/dist/profile-TWPJ_myr.d.ts +13 -0
  363. package/dist/profile-section-writer-hIphqpUY.js +2149 -0
  364. package/dist/provider-registration-CF1tg8Xy.js +721 -0
  365. package/dist/provider-runtime-types-DFhtdA6d.d.ts +134 -0
  366. package/dist/provider-types-CZGm6v88.d.ts +23 -0
  367. package/dist/redact-BTIZcHQL.d.ts +5 -0
  368. package/dist/reflection-command-hooks-BeQiJI9-.js +644 -0
  369. package/dist/reflection-command-hooks-C1Vxgb-O.d.ts +32 -0
  370. package/dist/reflection-deps-RpLPFrSc.d.ts +19 -0
  371. package/dist/reflection-embedded-generator-CDUhgV96.js +130 -0
  372. package/dist/reflection-embedded-generator-CxOex5xK.d.ts +14 -0
  373. package/dist/reflection-injection-hooks-DfUgqu8f.d.ts +43 -0
  374. package/dist/reflection-lifecycle-hooks-Ct5HBdSG.d.ts +27 -0
  375. package/dist/relation-dictionary-Cev1kyLe.js +4248 -0
  376. package/dist/release-download.d.ts +8 -0
  377. package/dist/release-download.js +32 -0
  378. package/dist/relevant-memories-context-m8nuFZcM.js +23 -0
  379. package/dist/rem-batch-executor-Cbm5gfSe.js +31644 -0
  380. package/dist/rem-batch-executor-bc0IFlp2.js +2 -0
  381. package/dist/rem-consumer-retrieval-CRpvG8KS.js +246 -0
  382. package/dist/rem-trigger-BTxkcjgT.js +729 -0
  383. package/dist/resolver-Dy-hnjCR.js +103 -0
  384. package/dist/results-C3ZLroMb.js +140 -0
  385. package/dist/retrieval-gate-Bx2Zg7jD.d.ts +31 -0
  386. package/dist/retriever-CygHBazG.js +1757 -0
  387. package/dist/retriever-Ruk3zp7_.d.ts +469 -0
  388. package/dist/rolldown-runtime-D7D4PA-g.js +13 -0
  389. package/dist/routes-Ce7SQKec.js +59 -0
  390. package/dist/runtime-audit-log-BCeujlEp.js +430 -0
  391. package/dist/runtime-audit-log-zpQiR9HT.d.ts +149 -0
  392. package/dist/scopes-CSOn6zdd.js +71 -0
  393. package/dist/scopes-CtrY-YQ3.d.ts +23 -0
  394. package/dist/server-BPAY4NTG.js +1410 -0
  395. package/dist/session-registry-DBoE7AvZ.d.ts +14 -0
  396. package/dist/sidecar/main.d.ts +1 -0
  397. package/dist/sidecar/main.js +56 -0
  398. package/dist/signed-registry-constants-Bv0fgZ8Q.d.ts +12 -0
  399. package/dist/signed-registry-constants-yq3DlG3B.js +82 -0
  400. package/dist/sno-station-mem-runtime-dependencies-Bu-MiqPX.d.ts +31 -0
  401. package/dist/sno-station-mem-runtime-dependencies-DjLOhB45.js +30 -0
  402. package/dist/sqlite-runtime-L_ywirTm.d.ts +58 -0
  403. package/dist/store-2pM0-dZg.d.ts +27 -0
  404. package/dist/store-DzpZBMEm.js +5830 -0
  405. package/dist/strategy-hook-runner-gBtU47tX.d.ts +16 -0
  406. package/dist/strategy-hook-runner-zmdIYOmQ.js +110 -0
  407. package/dist/token-counter-BD1f48Km.js +73 -0
  408. package/dist/trace-1t1n_wUm.d.ts +86 -0
  409. package/dist/types-DxKqU60b.d.ts +477 -0
  410. package/dist/types-pVomjzqR.d.ts +132 -0
  411. package/dist/unplaced-candidate-migration-CbQHzcEM.js +940 -0
  412. package/dist/utils-Ctb9aevJ.d.ts +34 -0
  413. package/drizzle/0000_initial.sql +10 -0
  414. package/drizzle/0001_virtual_tables.sql +34 -0
  415. package/drizzle/0002_add_indexes.sql +11 -0
  416. package/drizzle/0003_content_hash_lookup_index.sql +2 -0
  417. package/drizzle/0004_chunk_swap.sql +60 -0
  418. package/drizzle/0005_drop_legacy_vec_fts.sql +10 -0
  419. package/drizzle/0006_fts_simple.sql +45 -0
  420. package/drizzle/0007_restore_simple_fts.sql +40 -0
  421. package/drizzle/0008_widen_memory_hash_unique_index.sql +4 -0
  422. package/drizzle/0009_memory_telemetry.sql +109 -0
  423. package/drizzle/0010_provider_mappings.sql +27 -0
  424. package/drizzle/0011_db_optimization.sql +82 -0
  425. package/drizzle/0012_b_profile_lanes.sql +9 -0
  426. package/drizzle/0013_extraction_timestamps.sql +6 -0
  427. package/drizzle/0014_extraction_timestamp_source.sql +3 -0
  428. package/drizzle/0015_task_lifecycle_state.sql +101 -0
  429. package/drizzle/0016_task_lifecycle_legacy_migration.sql +144 -0
  430. package/drizzle/0017_unplaced_candidates.sql +15 -0
  431. package/drizzle/0018_rem_batch_chassis.sql +71 -0
  432. package/drizzle/0019_profile_recovery_entries.sql +17 -0
  433. package/drizzle/0020_rem_scan_retry_progress.down.sql +14 -0
  434. package/drizzle/0020_rem_scan_retry_progress.sql +24 -0
  435. package/drizzle/0021_rem_two_facet_storage.down.sql +14 -0
  436. package/drizzle/0021_rem_two_facet_storage.sql +42 -0
  437. package/drizzle/0022_rem_facet_chunk_versions.down.sql +4 -0
  438. package/drizzle/0022_rem_facet_chunk_versions.sql +4 -0
  439. package/drizzle/0023_rem_defect_ledger.sql +40 -0
  440. package/drizzle/0024_rem_unbuilt_foundations.down.sql +13 -0
  441. package/drizzle/0024_rem_unbuilt_foundations.sql +65 -0
  442. package/drizzle/0025_rem_journal_operation_constraint.sql +28 -0
  443. package/drizzle/0026_rem_journal_detail.sql +1 -0
  444. package/drizzle/0027_legacy_nodix_namespace.sql +3 -0
  445. package/drizzle/0028_memory_timezone.sql +23 -0
  446. package/drizzle/0029_rem_write_hash_symmetry.sql +17 -0
  447. package/drizzle/0030_atomic_memory_additive.sql +105 -0
  448. package/drizzle/0031_atomic_extraction_ledger.sql +23 -0
  449. package/drizzle/0032_atomic_memory_entities.sql +12 -0
  450. package/drizzle/0033_todo_own_store.sql +99 -0
  451. package/drizzle/meta/0000_snapshot.json +87 -0
  452. package/drizzle/meta/_journal.json +244 -0
  453. package/generated/rem-operations.json +1 -0
  454. package/package.json +126 -4
  455. package/scripts/download-simple-tokenizer.mjs +254 -0
  456. package/settings.default.json +243 -0
  457. package/skills/extract-atomic-memory/SKILL.md +298 -0
  458. package/skills/extract-atomic-memory/references/account-for-turns.md +9 -0
  459. package/skills/extract-atomic-memory/references/calendar-meaning.md +64 -0
  460. package/skills/extract-atomic-memory/references/capture.md +120 -0
  461. package/skills/extract-atomic-memory/references/enrichment.md +92 -0
  462. package/skills/extract-atomic-memory/references/missing-durable-half.md +6 -0
  463. package/skills/extract-atomic-memory/references/progress-classification.md +21 -0
  464. package/skills/extract-atomic-memory/references/resolve-subject.md +19 -0
  465. package/skills/extract-atomic-memory/references/surrounding-context.md +10 -0
  466. package/skills/extract-atomic-memory/references/user-subject-guard.md +29 -0
  467. package/skills/judge-group-closure/SKILL.md +25 -0
  468. package/skills/judge-rem-memory-updates/SKILL.md +56 -0
  469. package/skills/judge-rem-memory-updates/agents/openai.yaml +4 -0
  470. package/skills/judge-retired-position/SKILL.md +25 -0
  471. package/skills/judge-task-lifecycle/SKILL.md +45 -0
  472. package/skills/key-state-attribute/SKILL.md +16 -0
  473. package/skills/resolve-entity-identity/SKILL.md +24 -0
  474. package/skills/resolve-relative-time/SKILL.md +22 -0
  475. package/sqlite-extensions/LICENSE-simple-tokenizer +28 -0
  476. package/sqlite-extensions/LICENSE-sqlite-vec +21 -0
  477. package/sqlite-extensions/linux-arm64/vec0.so +0 -0
  478. package/sqlite-extensions/linux-x64/vec0.so +0 -0
@@ -0,0 +1,144 @@
1
+ ALTER TABLE `nodix_active_task_evidence` RENAME TO `nodix_active_task_evidence_v15`;
2
+ --> statement-breakpoint
3
+ ALTER TABLE `nodix_active_task_transitions` RENAME TO `nodix_active_task_transitions_v15`;
4
+ --> statement-breakpoint
5
+ ALTER TABLE `nodix_active_task_revisions` RENAME TO `nodix_active_task_revisions_v15`;
6
+ --> statement-breakpoint
7
+ ALTER TABLE `nodix_active_task_instances` RENAME TO `nodix_active_task_instances_v15`;
8
+ --> statement-breakpoint
9
+ CREATE TABLE `nodix_active_task_instances` (
10
+ `project_id` text NOT NULL,
11
+ `active_task_id` text NOT NULL,
12
+ `opening_command_id` text,
13
+ `canonical_tuple_json` text NOT NULL,
14
+ `identity_state` text NOT NULL CHECK (`identity_state` IN ('normal', 'unresolved')),
15
+ `status` text NOT NULL CHECK (`status` IN ('active', 'completed', 'removed')),
16
+ `created_at_ms` integer NOT NULL,
17
+ `terminal_at_ms` integer,
18
+ `legacy_row_locators_json` text,
19
+ `preserved_lifecycle_events_json` text,
20
+ `provenance_json` text,
21
+ `binding_evidence_json` text,
22
+ PRIMARY KEY (`project_id`, `active_task_id`),
23
+ UNIQUE (`project_id`, `opening_command_id`),
24
+ FOREIGN KEY (`project_id`, `opening_command_id`)
25
+ REFERENCES `nodix_task_lifecycle_commands` (`project_id`, `command_id`)
26
+ ) WITHOUT ROWID;
27
+ --> statement-breakpoint
28
+ INSERT INTO `nodix_active_task_instances`(
29
+ `project_id`, `active_task_id`, `opening_command_id`, `canonical_tuple_json`,
30
+ `identity_state`, `status`, `created_at_ms`, `terminal_at_ms`
31
+ )
32
+ SELECT
33
+ `project_id`, `active_task_id`, `opening_command_id`, `canonical_tuple_json`,
34
+ `identity_state`, `status`, `created_at_ms`, `terminal_at_ms`
35
+ FROM `nodix_active_task_instances_v15`;
36
+ --> statement-breakpoint
37
+ CREATE TABLE `nodix_active_task_revisions` (
38
+ `project_id` text NOT NULL,
39
+ `active_task_revision_id` text NOT NULL,
40
+ `active_task_id` text NOT NULL,
41
+ `creating_command_id` text,
42
+ `canonical_tuple_json` text NOT NULL,
43
+ `description` text NOT NULL,
44
+ `occurrence_anchors_json` text NOT NULL,
45
+ `revision_details_json` text NOT NULL,
46
+ `created_at_ms` integer NOT NULL,
47
+ `is_current` integer NOT NULL CHECK (`is_current` IN (0, 1)),
48
+ `legacy_row_locator` text,
49
+ PRIMARY KEY (`project_id`, `active_task_revision_id`),
50
+ UNIQUE (`project_id`, `active_task_id`, `creating_command_id`),
51
+ FOREIGN KEY (`project_id`, `active_task_id`)
52
+ REFERENCES `nodix_active_task_instances` (`project_id`, `active_task_id`),
53
+ FOREIGN KEY (`project_id`, `creating_command_id`)
54
+ REFERENCES `nodix_task_lifecycle_commands` (`project_id`, `command_id`)
55
+ ) WITHOUT ROWID;
56
+ --> statement-breakpoint
57
+ INSERT INTO `nodix_active_task_revisions`(
58
+ `project_id`, `active_task_revision_id`, `active_task_id`, `creating_command_id`,
59
+ `canonical_tuple_json`, `description`, `occurrence_anchors_json`,
60
+ `revision_details_json`, `created_at_ms`, `is_current`
61
+ )
62
+ SELECT
63
+ `project_id`, `active_task_revision_id`, `active_task_id`, `creating_command_id`,
64
+ `canonical_tuple_json`, `description`, `occurrence_anchors_json`,
65
+ `revision_details_json`, `created_at_ms`, `is_current`
66
+ FROM `nodix_active_task_revisions_v15`;
67
+ --> statement-breakpoint
68
+ CREATE TABLE `nodix_active_task_transitions` (
69
+ `project_id` text NOT NULL,
70
+ `command_id` text NOT NULL,
71
+ `active_task_id` text NOT NULL,
72
+ `transition_kind` text NOT NULL CHECK (`transition_kind` IN ('open', 'refine', 'complete', 'remove')),
73
+ `from_status` text CHECK (`from_status` IS NULL OR `from_status` IN ('active', 'completed', 'removed')),
74
+ `to_status` text NOT NULL CHECK (`to_status` IN ('active', 'completed', 'removed')),
75
+ `effective_at_ms` integer NOT NULL,
76
+ PRIMARY KEY (`project_id`, `command_id`),
77
+ FOREIGN KEY (`project_id`, `command_id`)
78
+ REFERENCES `nodix_task_lifecycle_commands` (`project_id`, `command_id`),
79
+ FOREIGN KEY (`project_id`, `active_task_id`)
80
+ REFERENCES `nodix_active_task_instances` (`project_id`, `active_task_id`)
81
+ ) WITHOUT ROWID;
82
+ --> statement-breakpoint
83
+ CREATE TABLE `nodix_active_task_evidence` (
84
+ `project_id` text NOT NULL,
85
+ `command_id` text NOT NULL,
86
+ `active_task_id` text,
87
+ `evidence_memory_id` text,
88
+ `source_assertion_json` text NOT NULL,
89
+ `outcome` text NOT NULL,
90
+ `diagnostics_json` text NOT NULL,
91
+ `linked_at_ms` integer NOT NULL,
92
+ PRIMARY KEY (`project_id`, `command_id`),
93
+ FOREIGN KEY (`project_id`, `command_id`)
94
+ REFERENCES `nodix_task_lifecycle_commands` (`project_id`, `command_id`),
95
+ FOREIGN KEY (`project_id`, `active_task_id`)
96
+ REFERENCES `nodix_active_task_instances` (`project_id`, `active_task_id`)
97
+ ) WITHOUT ROWID;
98
+ --> statement-breakpoint
99
+ INSERT INTO `nodix_active_task_transitions`
100
+ SELECT * FROM `nodix_active_task_transitions_v15`;
101
+ --> statement-breakpoint
102
+ INSERT INTO `nodix_active_task_evidence`
103
+ SELECT * FROM `nodix_active_task_evidence_v15`;
104
+ --> statement-breakpoint
105
+ DROP TABLE `nodix_active_task_transitions_v15`;
106
+ --> statement-breakpoint
107
+ DROP TABLE `nodix_active_task_evidence_v15`;
108
+ --> statement-breakpoint
109
+ DROP TABLE `nodix_active_task_revisions_v15`;
110
+ --> statement-breakpoint
111
+ DROP TABLE `nodix_active_task_instances_v15`;
112
+ --> statement-breakpoint
113
+ CREATE UNIQUE INDEX `nodix_idx_active_task_current_revision`
114
+ ON `nodix_active_task_revisions` (`project_id`, `active_task_id`)
115
+ WHERE `is_current` = 1;
116
+ --> statement-breakpoint
117
+ CREATE TABLE `nodix_active_task_migration_evidence` (
118
+ `project_id` text NOT NULL,
119
+ `legacy_row_locator` text NOT NULL,
120
+ `active_task_id` text NOT NULL,
121
+ `command_id` text,
122
+ `source_row_json` text NOT NULL,
123
+ `revision_role` text NOT NULL CHECK (`revision_role` IN ('current', 'terminal_non_current', 'evidence_only')),
124
+ `preserved_unbound` integer NOT NULL CHECK (`preserved_unbound` IN (0, 1)),
125
+ PRIMARY KEY (`project_id`, `legacy_row_locator`),
126
+ FOREIGN KEY (`project_id`, `active_task_id`)
127
+ REFERENCES `nodix_active_task_instances` (`project_id`, `active_task_id`),
128
+ FOREIGN KEY (`project_id`, `command_id`)
129
+ REFERENCES `nodix_task_lifecycle_commands` (`project_id`, `command_id`)
130
+ ) WITHOUT ROWID;
131
+ --> statement-breakpoint
132
+ CREATE TABLE `nodix_active_task_migration_manifests` (
133
+ `manifest_id` text NOT NULL PRIMARY KEY,
134
+ `manifest_hash` text NOT NULL,
135
+ `input_store_hash` text NOT NULL,
136
+ `state_hash` text NOT NULL,
137
+ `applied_at_ms` integer NOT NULL
138
+ ) WITHOUT ROWID;
139
+ --> statement-breakpoint
140
+ CREATE INDEX `nodix_idx_active_task_instances_projection`
141
+ ON `nodix_active_task_instances` (`project_id`, `status`, `created_at_ms`, `active_task_id`);
142
+ --> statement-breakpoint
143
+ CREATE INDEX `nodix_idx_active_task_evidence_instance`
144
+ ON `nodix_active_task_evidence` (`project_id`, `active_task_id`);
@@ -0,0 +1,15 @@
1
+ CREATE TABLE `nodix_unplaced_memory_candidates` (
2
+ `id` text PRIMARY KEY NOT NULL,
3
+ `project_id` text NOT NULL,
4
+ `category` text NOT NULL,
5
+ `text` text NOT NULL,
6
+ `raw_candidate_json` text NOT NULL,
7
+ `disposition_reason` text NOT NULL,
8
+ `dispositioned_at_ms` integer NOT NULL,
9
+ `session_key` text,
10
+ `dedupe_hash` text NOT NULL
11
+ );
12
+ --> statement-breakpoint
13
+ CREATE INDEX `nodix_idx_unplaced_project_reason` ON `nodix_unplaced_memory_candidates` (`project_id`,`disposition_reason`);
14
+ --> statement-breakpoint
15
+ CREATE UNIQUE INDEX `nodix_idx_unplaced_dedupe` ON `nodix_unplaced_memory_candidates` (`project_id`,`dedupe_hash`);
@@ -0,0 +1,71 @@
1
+ CREATE TABLE IF NOT EXISTS `nodix_rem_relation_ledger` (
2
+ `row_id` text PRIMARY KEY NOT NULL,
3
+ `content_hash` text NOT NULL,
4
+ `state` text NOT NULL CHECK (`state` IN ('transition', 'stale-current', 'pure-negation')),
5
+ `owner` text DEFAULT 'none' NOT NULL CHECK (`owner` IN ('restate', 'verdict', 'none')),
6
+ `claim_ts` text,
7
+ `classified_at` text NOT NULL
8
+ );
9
+ --> statement-breakpoint
10
+ CREATE TABLE IF NOT EXISTS `nodix_rem_scan_generations` (
11
+ `generation_id` text PRIMARY KEY NOT NULL,
12
+ `corpus_snapshot_hash` text NOT NULL,
13
+ `pairing_config_hash` text NOT NULL,
14
+ `max_llm_calls` integer NOT NULL CHECK (`max_llm_calls` >= 0),
15
+ `max_tokens` integer NOT NULL CHECK (`max_tokens` >= 0),
16
+ `llm_calls_used` integer DEFAULT 0 NOT NULL,
17
+ `tokens_used` integer DEFAULT 0 NOT NULL,
18
+ `pending_stages_json` text DEFAULT '[]' NOT NULL
19
+ );
20
+ --> statement-breakpoint
21
+ CREATE TABLE IF NOT EXISTS `nodix_rem_scan_pairs` (
22
+ `generation_id` text NOT NULL,
23
+ `pair_id` text NOT NULL,
24
+ `left_row_id` text NOT NULL,
25
+ `right_row_id` text NOT NULL,
26
+ `sort_key` text NOT NULL,
27
+ `claim_state` text DEFAULT 'unvisited' NOT NULL
28
+ CHECK (`claim_state` IN ('unvisited', 'claimed', 'done')),
29
+ `invocation_id` text,
30
+ `claimed_at` text,
31
+ `checkpoint` text,
32
+ `verdict` text,
33
+ `actions_applied` integer DEFAULT 0 NOT NULL CHECK (`actions_applied` IN (0, 1)),
34
+ `budget_reserved` integer DEFAULT 0 NOT NULL CHECK (`budget_reserved` IN (0, 1)),
35
+ `reserved_tokens` integer DEFAULT 0 NOT NULL CHECK (`reserved_tokens` >= 0),
36
+ PRIMARY KEY (`generation_id`, `pair_id`),
37
+ FOREIGN KEY (`generation_id`) REFERENCES `nodix_rem_scan_generations`(`generation_id`)
38
+ );
39
+ --> statement-breakpoint
40
+ CREATE INDEX IF NOT EXISTS `rem_scan_pairs_cursor`
41
+ ON `nodix_rem_scan_pairs` (`generation_id`, `claim_state`, `sort_key`, `pair_id`);
42
+ --> statement-breakpoint
43
+ CREATE TABLE IF NOT EXISTS `nodix_rem_journal` (
44
+ `sequence` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
45
+ `job_id` text NOT NULL,
46
+ `job_type` text NOT NULL CHECK (`job_type` IN ('rem-verdict', 'rem-restate')),
47
+ `stage` text NOT NULL,
48
+ `outcome` text NOT NULL
49
+ CHECK (`outcome` IN ('done', 'failed', 'disabled', 'pending', 'refused')),
50
+ `pairs_scanned` integer DEFAULT 0 NOT NULL,
51
+ `verdicts` integer DEFAULT 0 NOT NULL,
52
+ `actions_applied` integer DEFAULT 0 NOT NULL,
53
+ `reason` text,
54
+ CHECK (`outcome` NOT IN ('failed', 'refused') OR length(trim(`reason`)) > 0)
55
+ );
56
+ --> statement-breakpoint
57
+ CREATE INDEX IF NOT EXISTS `rem_journal_job_sequence` ON `nodix_rem_journal` (`job_id`, `sequence`);
58
+ --> statement-breakpoint
59
+ CREATE TABLE IF NOT EXISTS `nodix_rem_recovery_history` (
60
+ `recovery_handle` text PRIMARY KEY NOT NULL,
61
+ `row_id` text NOT NULL,
62
+ `operation_kind` text NOT NULL CHECK (`operation_kind` IN ('lane', 'text-version', 'mark')),
63
+ `prior_row_image` text NOT NULL,
64
+ `prior_content_hash` text NOT NULL,
65
+ `expected_post_hash` text NOT NULL,
66
+ `reason` text NOT NULL CHECK (length(trim(`reason`)) > 0),
67
+ `mutation_ts` text NOT NULL,
68
+ `restored_at` text
69
+ );
70
+ --> statement-breakpoint
71
+ CREATE INDEX IF NOT EXISTS `rem_recovery_history_row` ON `nodix_rem_recovery_history` (`row_id`);
@@ -0,0 +1,17 @@
1
+ CREATE TABLE `nodix_profile_recovery_entries` (
2
+ `entry_id` text PRIMARY KEY NOT NULL,
3
+ `mutation_attempt_id` text NOT NULL,
4
+ `removed_row_id` text NOT NULL,
5
+ `project_id` text NOT NULL,
6
+ `profile_fact_id` text NOT NULL,
7
+ `section_name` text NOT NULL,
8
+ `removed_value` text NOT NULL,
9
+ `removed_at_ms` integer NOT NULL,
10
+ FOREIGN KEY (`removed_row_id`) REFERENCES `nodix_memories`(`id`) ON UPDATE no action ON DELETE cascade
11
+ );
12
+ --> statement-breakpoint
13
+ CREATE INDEX `nodix_idx_profile_recovery_lineage`
14
+ ON `nodix_profile_recovery_entries` (`project_id`, `profile_fact_id`, `removed_at_ms`);
15
+ --> statement-breakpoint
16
+ CREATE INDEX `nodix_idx_profile_recovery_attempt`
17
+ ON `nodix_profile_recovery_entries` (`mutation_attempt_id`);
@@ -0,0 +1,14 @@
1
+ -- Schema rollback: removes the retry columns so the paired forward migration can run again.
2
+ DROP INDEX `rem_scan_pairs_progress`;
3
+ --> statement-breakpoint
4
+ DROP TABLE `nodix_rem_scan_invocations`;
5
+ --> statement-breakpoint
6
+ ALTER TABLE `nodix_rem_scan_pairs` DROP COLUMN `inherited_from_generation_id`;
7
+ --> statement-breakpoint
8
+ ALTER TABLE `nodix_rem_scan_pairs` DROP COLUMN `refusal_reason`;
9
+ --> statement-breakpoint
10
+ ALTER TABLE `nodix_rem_scan_pairs` DROP COLUMN `progress_state`;
11
+ --> statement-breakpoint
12
+ ALTER TABLE `nodix_rem_scan_pairs` DROP COLUMN `attempt_count`;
13
+ --> statement-breakpoint
14
+ ALTER TABLE `nodix_rem_scan_pairs` DROP COLUMN `budget_invocation_id`;
@@ -0,0 +1,24 @@
1
+ ALTER TABLE `nodix_rem_scan_pairs` ADD COLUMN `budget_invocation_id` text;
2
+ --> statement-breakpoint
3
+ ALTER TABLE `nodix_rem_scan_pairs` ADD COLUMN `attempt_count` integer DEFAULT 0 NOT NULL
4
+ CHECK (`attempt_count` >= 0);
5
+ --> statement-breakpoint
6
+ ALTER TABLE `nodix_rem_scan_pairs` ADD COLUMN `progress_state` text DEFAULT 'pending' NOT NULL
7
+ CHECK (`progress_state` IN ('pending', 'refused', 'closed', 'exhausted'));
8
+ --> statement-breakpoint
9
+ ALTER TABLE `nodix_rem_scan_pairs` ADD COLUMN `refusal_reason` text;
10
+ --> statement-breakpoint
11
+ ALTER TABLE `nodix_rem_scan_pairs` ADD COLUMN `inherited_from_generation_id` text;
12
+ --> statement-breakpoint
13
+ CREATE INDEX IF NOT EXISTS `rem_scan_pairs_progress`
14
+ ON `nodix_rem_scan_pairs` (`generation_id`, `progress_state`, `sort_key`, `pair_id`);
15
+ --> statement-breakpoint
16
+ CREATE TABLE IF NOT EXISTS `nodix_rem_scan_invocations` (
17
+ `generation_id` text NOT NULL,
18
+ `invocation_id` text NOT NULL,
19
+ `llm_calls_used` integer DEFAULT 0 NOT NULL,
20
+ `tokens_used` integer DEFAULT 0 NOT NULL,
21
+ `created_at` text NOT NULL,
22
+ PRIMARY KEY (`generation_id`, `invocation_id`),
23
+ FOREIGN KEY (`generation_id`) REFERENCES `nodix_rem_scan_generations`(`generation_id`)
24
+ );
@@ -0,0 +1,14 @@
1
+ -- Destructive schema rollback: discards all facet text and facet recovery snapshots.
2
+ -- A later forward migration rebuilds current facets from primary-row text and silently loses
3
+ -- every applied current-state rewrite. Use only before any such rewrite or with an external backup.
4
+ DROP TABLE IF EXISTS `nodix_rem_facet_recovery`;
5
+ --> statement-breakpoint
6
+ DROP INDEX IF EXISTS `rem_memory_facets_by_facet`;
7
+ --> statement-breakpoint
8
+ DROP TRIGGER IF EXISTS `rem_memory_facets_after_insert`;
9
+ --> statement-breakpoint
10
+ DROP TRIGGER IF EXISTS `rem_memory_facets_after_text_update`;
11
+ --> statement-breakpoint
12
+ DROP TABLE IF EXISTS `nodix_rem_memory_facets`;
13
+ --> statement-breakpoint
14
+ ALTER TABLE `nodix_memory_chunks` DROP COLUMN `facet`;
@@ -0,0 +1,42 @@
1
+ CREATE TABLE IF NOT EXISTS `nodix_rem_memory_facets` (
2
+ `memory_id` text NOT NULL,
3
+ `facet` text NOT NULL CHECK (`facet` IN ('current', 'history')),
4
+ `text` text NOT NULL,
5
+ `updated_at_ms` integer NOT NULL,
6
+ PRIMARY KEY (`memory_id`, `facet`),
7
+ FOREIGN KEY (`memory_id`) REFERENCES `nodix_memories`(`id`) ON DELETE CASCADE
8
+ );
9
+ --> statement-breakpoint
10
+ INSERT OR IGNORE INTO `nodix_rem_memory_facets` (`memory_id`, `facet`, `text`, `updated_at_ms`)
11
+ SELECT `id`, 'current', `text`, `timestamp` FROM `nodix_memories`;
12
+ --> statement-breakpoint
13
+ CREATE TRIGGER IF NOT EXISTS `rem_memory_facets_after_insert`
14
+ AFTER INSERT ON `nodix_memories`
15
+ BEGIN
16
+ INSERT INTO `nodix_rem_memory_facets` (`memory_id`, `facet`, `text`, `updated_at_ms`)
17
+ VALUES (NEW.`id`, 'current', NEW.`text`, NEW.`timestamp`);
18
+ END;
19
+ --> statement-breakpoint
20
+ CREATE TRIGGER IF NOT EXISTS `rem_memory_facets_after_text_update`
21
+ AFTER UPDATE OF `text` ON `nodix_memories`
22
+ BEGIN
23
+ INSERT INTO `nodix_rem_memory_facets` (`memory_id`, `facet`, `text`, `updated_at_ms`)
24
+ VALUES (NEW.`id`, 'current', NEW.`text`, NEW.`timestamp`)
25
+ ON CONFLICT(`memory_id`, `facet`) DO UPDATE SET
26
+ `text` = excluded.`text`, `updated_at_ms` = excluded.`updated_at_ms`;
27
+ END;
28
+ --> statement-breakpoint
29
+ CREATE INDEX IF NOT EXISTS `rem_memory_facets_by_facet`
30
+ ON `nodix_rem_memory_facets` (`facet`, `memory_id`);
31
+ --> statement-breakpoint
32
+ ALTER TABLE `nodix_memory_chunks`
33
+ ADD COLUMN `facet` text NOT NULL DEFAULT 'current' CHECK (`facet` IN ('current', 'history'));
34
+ --> statement-breakpoint
35
+ CREATE TABLE IF NOT EXISTS `nodix_rem_facet_recovery` (
36
+ `recovery_handle` text PRIMARY KEY,
37
+ `prior_facets_json` text NOT NULL,
38
+ `prior_chunk_facets_json` text NOT NULL,
39
+ `expected_facets_json` text NOT NULL,
40
+ `expected_chunk_facets_json` text NOT NULL,
41
+ FOREIGN KEY (`recovery_handle`) REFERENCES `nodix_rem_recovery_history`(`recovery_handle`)
42
+ );
@@ -0,0 +1,4 @@
1
+ DROP INDEX IF EXISTS `nodix_idx_memory_chunks_memory_facet`;
2
+ --> statement-breakpoint
3
+ CREATE UNIQUE INDEX `nodix_idx_memory_chunks_memory`
4
+ ON `nodix_memory_chunks` (`memory_id`, `chunk_index`);
@@ -0,0 +1,4 @@
1
+ DROP INDEX IF EXISTS `nodix_idx_memory_chunks_memory`;
2
+ --> statement-breakpoint
3
+ CREATE UNIQUE INDEX IF NOT EXISTS `nodix_idx_memory_chunks_memory_facet`
4
+ ON `nodix_memory_chunks` (`memory_id`, `facet`, `chunk_index`);
@@ -0,0 +1,40 @@
1
+ CREATE TABLE IF NOT EXISTS `nodix_rem_pair_stage_budgets` (
2
+ `generation_id` text NOT NULL,
3
+ `pair_id` text NOT NULL,
4
+ `stage` text NOT NULL,
5
+ `invocation_id` text NOT NULL,
6
+ `reserved_tokens` integer NOT NULL CHECK (`reserved_tokens` >= 0),
7
+ `idempotency_key` text NOT NULL,
8
+ PRIMARY KEY (`generation_id`, `pair_id`, `stage`),
9
+ FOREIGN KEY (`generation_id`, `pair_id`) REFERENCES `nodix_rem_scan_pairs`(`generation_id`, `pair_id`),
10
+ FOREIGN KEY (`generation_id`, `invocation_id`) REFERENCES `nodix_rem_scan_invocations`(`generation_id`, `invocation_id`)
11
+ );
12
+ --> statement-breakpoint
13
+ CREATE TABLE IF NOT EXISTS `nodix_rem_journal_next` (
14
+ `sequence` integer PRIMARY KEY AUTOINCREMENT,
15
+ `job_id` text NOT NULL,
16
+ `job_type` text NOT NULL CHECK (`job_type` IN ('rem-verdict', 'rem-restate')),
17
+ `stage` text NOT NULL,
18
+ `outcome` text NOT NULL CHECK (`outcome` IN ('done', 'failed', 'disabled', 'pending', 'refused', 'no-action')),
19
+ `pairs_scanned` integer NOT NULL DEFAULT 0,
20
+ `verdicts` integer NOT NULL DEFAULT 0,
21
+ `actions_applied` integer NOT NULL DEFAULT 0,
22
+ `reason` text,
23
+ `row_id` text,
24
+ `pair_id` text,
25
+ CHECK (`outcome` NOT IN ('failed', 'refused') OR length(trim(`reason`)) > 0)
26
+ );
27
+ --> statement-breakpoint
28
+ INSERT INTO `nodix_rem_journal_next`(
29
+ `sequence`, `job_id`, `job_type`, `stage`, `outcome`, `pairs_scanned`, `verdicts`,
30
+ `actions_applied`, `reason`
31
+ )
32
+ SELECT `sequence`, `job_id`, `job_type`, `stage`, `outcome`, `pairs_scanned`, `verdicts`,
33
+ `actions_applied`, `reason`
34
+ FROM `nodix_rem_journal`;
35
+ --> statement-breakpoint
36
+ DROP TABLE `nodix_rem_journal`;
37
+ --> statement-breakpoint
38
+ ALTER TABLE `nodix_rem_journal_next` RENAME TO `nodix_rem_journal`;
39
+ --> statement-breakpoint
40
+ CREATE INDEX IF NOT EXISTS `rem_journal_job_sequence` ON `nodix_rem_journal` (`job_id`, `sequence`);
@@ -0,0 +1,13 @@
1
+ DROP TABLE IF EXISTS `nodix_rem_verdict_observations`;
2
+ --> statement-breakpoint
3
+ DROP TABLE IF EXISTS `nodix_rem_batch_summaries`;
4
+ --> statement-breakpoint
5
+ DROP TABLE IF EXISTS `nodix_rem_generation_transitions`;
6
+ --> statement-breakpoint
7
+ DROP TABLE IF EXISTS `nodix_rem_census_rows`;
8
+ --> statement-breakpoint
9
+ DROP INDEX IF EXISTS `rem_write_attempts_outcome`;
10
+ --> statement-breakpoint
11
+ DROP TABLE IF EXISTS `nodix_rem_write_attempts`;
12
+ --> statement-breakpoint
13
+ DROP TABLE IF EXISTS `nodix_rem_write_verdicts`;
@@ -0,0 +1,65 @@
1
+ CREATE TABLE IF NOT EXISTS `nodix_rem_write_verdicts` (
2
+ `evidence_id` text PRIMARY KEY NOT NULL,
3
+ `winner_row_id` text NOT NULL,
4
+ `loser_row_id` text NOT NULL,
5
+ `target_row_id` text NOT NULL,
6
+ `retired_fact_atoms_json` text NOT NULL,
7
+ `recorded_at` text NOT NULL
8
+ );
9
+ --> statement-breakpoint
10
+ CREATE TABLE IF NOT EXISTS `nodix_rem_write_attempts` (
11
+ `attempt_id` text PRIMARY KEY NOT NULL,
12
+ `job_id` text NOT NULL,
13
+ `stage` text NOT NULL,
14
+ `row_id` text NOT NULL,
15
+ `writer` text NOT NULL,
16
+ `attempt_ordinal` integer NOT NULL CHECK (`attempt_ordinal` > 0),
17
+ `outcome` text NOT NULL CHECK (`outcome` IN ('pending', 'succeeded', 'failed', 'refused', 'degraded')),
18
+ `reason_code` text,
19
+ `pre_write_content_sha256` text NOT NULL,
20
+ `proposed_text_sha256` text NOT NULL,
21
+ `evidence_id` text NOT NULL,
22
+ `configuration_sha256` text NOT NULL,
23
+ `post_write_content_sha256` text,
24
+ `opened_at` text NOT NULL,
25
+ `closed_at` text
26
+ );
27
+ --> statement-breakpoint
28
+ CREATE INDEX IF NOT EXISTS `rem_write_attempts_outcome` ON `nodix_rem_write_attempts` (`outcome`, `opened_at`);
29
+ --> statement-breakpoint
30
+ CREATE TABLE IF NOT EXISTS `nodix_rem_census_rows` (
31
+ `row_id` text PRIMARY KEY NOT NULL,
32
+ `write_identity_sha256` text,
33
+ `candidate_set_sha256` text,
34
+ `generation_id` text,
35
+ `corpus_sha256` text,
36
+ `embedder_sha256` text,
37
+ `configuration_sha256` text
38
+ );
39
+ --> statement-breakpoint
40
+ CREATE TABLE IF NOT EXISTS `nodix_rem_generation_transitions` (
41
+ `sequence` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
42
+ `outgoing_generation_id` text NOT NULL,
43
+ `incoming_generation_id` text NOT NULL,
44
+ `recorded_at` text NOT NULL
45
+ );
46
+ --> statement-breakpoint
47
+ CREATE TABLE IF NOT EXISTS `nodix_rem_batch_summaries` (
48
+ `batch_id` text PRIMARY KEY NOT NULL,
49
+ `generation_id` text UNIQUE,
50
+ `calls` integer NOT NULL DEFAULT 0,
51
+ `tokens` integer NOT NULL DEFAULT 0,
52
+ `pairCount` integer NOT NULL DEFAULT 0,
53
+ `closeCount` integer NOT NULL DEFAULT 0,
54
+ `refusalCount` integer NOT NULL DEFAULT 0,
55
+ `verdict_distribution_json` text NOT NULL DEFAULT '{}',
56
+ `pre_truncation_count` integer,
57
+ `emitted_count` integer
58
+ );
59
+ --> statement-breakpoint
60
+ CREATE TABLE IF NOT EXISTS `nodix_rem_verdict_observations` (
61
+ `pair_id` text PRIMARY KEY NOT NULL,
62
+ `audit_kind` text NOT NULL CHECK (`audit_kind` IN ('VERDICT', 'SAMPLE')),
63
+ `persisted_verdict` text,
64
+ `raw_value` text NOT NULL
65
+ );
@@ -0,0 +1,28 @@
1
+ CREATE TABLE `nodix_rem_journal_next` (
2
+ `sequence` integer PRIMARY KEY AUTOINCREMENT,
3
+ `job_id` text NOT NULL,
4
+ `job_type` text NOT NULL,
5
+ `stage` text NOT NULL,
6
+ `outcome` text NOT NULL CHECK (`outcome` IN ('done', 'failed', 'disabled', 'pending', 'refused', 'no-action')),
7
+ `row_id` text,
8
+ `pair_id` text,
9
+ `pairs_scanned` integer NOT NULL DEFAULT 0,
10
+ `verdicts` integer NOT NULL DEFAULT 0,
11
+ `actions_applied` integer NOT NULL DEFAULT 0,
12
+ `reason` text,
13
+ CHECK (`outcome` NOT IN ('failed', 'refused') OR length(trim(`reason`)) > 0)
14
+ );
15
+ --> statement-breakpoint
16
+ INSERT INTO `nodix_rem_journal_next`(
17
+ `sequence`, `job_id`, `job_type`, `stage`, `outcome`, `row_id`, `pair_id`,
18
+ `pairs_scanned`, `verdicts`, `actions_applied`, `reason`
19
+ )
20
+ SELECT `sequence`, `job_id`, `job_type`, `stage`, `outcome`, `row_id`, `pair_id`,
21
+ `pairs_scanned`, `verdicts`, `actions_applied`, `reason`
22
+ FROM `nodix_rem_journal`;
23
+ --> statement-breakpoint
24
+ DROP TABLE `nodix_rem_journal`;
25
+ --> statement-breakpoint
26
+ ALTER TABLE `nodix_rem_journal_next` RENAME TO `nodix_rem_journal`;
27
+ --> statement-breakpoint
28
+ CREATE INDEX `rem_journal_job_sequence` ON `nodix_rem_journal` (`job_id`, `sequence`);
@@ -0,0 +1 @@
1
+ ALTER TABLE `nodix_rem_journal` ADD COLUMN `detail` text;
@@ -0,0 +1,3 @@
1
+ -- The runtime migration entry point performs the conditional object rename before
2
+ -- Drizzle records this marker. Static SQLite SQL cannot conditionally ALTER TABLE.
3
+ SELECT 1;
@@ -0,0 +1,23 @@
1
+ ALTER TABLE nodix_memories
2
+ ADD COLUMN timezone TEXT NOT NULL DEFAULT '__missing_timezone__';
3
+ --> statement-breakpoint
4
+
5
+ UPDATE nodix_memories
6
+ SET timezone = 'UTC'
7
+ WHERE timezone = '__missing_timezone__';
8
+ --> statement-breakpoint
9
+
10
+ CREATE TRIGGER nodix_memories_timezone_required_before_insert
11
+ BEFORE INSERT ON nodix_memories
12
+ WHEN NEW.timezone = '__missing_timezone__' OR trim(NEW.timezone) = ''
13
+ BEGIN
14
+ SELECT RAISE(ABORT, 'timezone is required');
15
+ END;
16
+ --> statement-breakpoint
17
+
18
+ CREATE TRIGGER nodix_memories_timezone_required_before_update
19
+ BEFORE UPDATE OF timezone ON nodix_memories
20
+ WHEN NEW.timezone = '__missing_timezone__' OR trim(NEW.timezone) = ''
21
+ BEGIN
22
+ SELECT RAISE(ABORT, 'timezone is required');
23
+ END;
@@ -0,0 +1,17 @@
1
+ -- The recovery record's expected_post_hash and the verified-write guard's post-write hash were
2
+ -- computed in two packages over two different column sets. Adding the memories.timezone column
3
+ -- made them disagree, so every REM text-version write refused AFTER its transaction had already
4
+ -- committed. The field list is now pinned in one place and stamped with its version: rows written
5
+ -- before this migration carry version 1, whose hash nothing can recompute, and readers branch on
6
+ -- the version instead of comparing against a value that can never match.
7
+ ALTER TABLE nodix_rem_recovery_history
8
+ ADD COLUMN row_hash_version INTEGER NOT NULL DEFAULT 1;
9
+ --> statement-breakpoint
10
+
11
+ -- Crash recovery decided whether a committed write had landed by comparing the row's content_hash
12
+ -- (text AND metadata) against proposed_text_sha256 (text only). A REM update always writes
13
+ -- rem_update_* metadata, so those two never matched and a write that had committed was recorded as
14
+ -- failed forever. The expected content hash is now stamped on the attempt inside the same
15
+ -- transaction that performs the write, so a crash cannot leave them disagreeing.
16
+ ALTER TABLE nodix_rem_write_attempts
17
+ ADD COLUMN expected_post_content_sha256 TEXT;
@@ -0,0 +1,105 @@
1
+ ALTER TABLE nodix_memories ADD COLUMN subject TEXT;
2
+ --> statement-breakpoint
3
+ ALTER TABLE nodix_memories ADD COLUMN attribute TEXT;
4
+ --> statement-breakpoint
5
+ ALTER TABLE nodix_memories ADD COLUMN valid_from INTEGER;
6
+ --> statement-breakpoint
7
+ ALTER TABLE nodix_memories ADD COLUMN valid_until INTEGER;
8
+ --> statement-breakpoint
9
+ ALTER TABLE nodix_memories ADD COLUMN maturity TEXT;
10
+ --> statement-breakpoint
11
+ ALTER TABLE nodix_memories ADD COLUMN source TEXT;
12
+ --> statement-breakpoint
13
+ ALTER TABLE nodix_memories ADD COLUMN extractor_version TEXT;
14
+ --> statement-breakpoint
15
+
16
+ CREATE INDEX nodix_idx_memories_project_subject_attribute
17
+ ON nodix_memories(project_id, subject, attribute);
18
+ --> statement-breakpoint
19
+ CREATE INDEX nodix_idx_memories_project_valid_time
20
+ ON nodix_memories(project_id, valid_from, valid_until);
21
+ --> statement-breakpoint
22
+ CREATE INDEX nodix_idx_memories_project_maturity
23
+ ON nodix_memories(project_id, maturity);
24
+ --> statement-breakpoint
25
+ CREATE INDEX nodix_idx_memories_project_source
26
+ ON nodix_memories(project_id, source);
27
+ --> statement-breakpoint
28
+ CREATE INDEX nodix_idx_memories_project_extractor_version
29
+ ON nodix_memories(project_id, extractor_version);
30
+ --> statement-breakpoint
31
+ CREATE INDEX nodix_idx_memories_project_derived_from
32
+ ON nodix_memories(project_id, derived_from);
33
+ --> statement-breakpoint
34
+ CREATE INDEX nodix_idx_memories_project_importance
35
+ ON nodix_memories(project_id, importance);
36
+ --> statement-breakpoint
37
+
38
+ CREATE TABLE nodix_memory_relations (
39
+ source_card_id TEXT NOT NULL REFERENCES nodix_memories(id) ON DELETE CASCADE,
40
+ subject TEXT NOT NULL,
41
+ predicate TEXT NOT NULL CHECK (predicate IN (
42
+ 'IS_A',
43
+ 'WORKS_ON',
44
+ 'NEEDS',
45
+ 'PREFERS',
46
+ 'FORBIDS',
47
+ 'USES',
48
+ 'DEPENDS_ON',
49
+ 'CAUSED',
50
+ 'FIXED_BY',
51
+ 'DECIDED',
52
+ 'SUPERSEDES',
53
+ 'GOVERNED_BY',
54
+ 'OWNED_BY',
55
+ 'MEMBER_OF',
56
+ 'LOCATED_AT',
57
+ 'HAS_SKILL',
58
+ 'INTERESTED_IN',
59
+ 'HAS_ACCOUNT',
60
+ 'HAS_OCCUPATION',
61
+ 'HAS_METRIC',
62
+ 'WORKS_AT',
63
+ 'ATTENDED',
64
+ 'MENTIONS'
65
+ )),
66
+ object TEXT NOT NULL,
67
+ created_at INTEGER NOT NULL,
68
+ UNIQUE(source_card_id, subject, predicate, object)
69
+ );
70
+ --> statement-breakpoint
71
+ CREATE INDEX nodix_idx_memory_relations_subject
72
+ ON nodix_memory_relations(subject);
73
+ --> statement-breakpoint
74
+ CREATE INDEX nodix_idx_memory_relations_object
75
+ ON nodix_memory_relations(object);
76
+ --> statement-breakpoint
77
+
78
+ CREATE TABLE nodix_memory_suppressions (
79
+ project_id TEXT NOT NULL,
80
+ subject TEXT,
81
+ attribute TEXT,
82
+ content_hash TEXT,
83
+ created_at INTEGER NOT NULL,
84
+ CHECK (
85
+ (
86
+ subject IS NOT NULL AND length(trim(subject)) > 0
87
+ AND attribute IS NOT NULL AND length(trim(attribute)) > 0
88
+ AND content_hash IS NULL
89
+ )
90
+ OR
91
+ (
92
+ subject IS NULL
93
+ AND attribute IS NULL
94
+ AND content_hash IS NOT NULL AND length(trim(content_hash)) > 0
95
+ )
96
+ )
97
+ );
98
+ --> statement-breakpoint
99
+ CREATE UNIQUE INDEX nodix_idx_memory_suppressions_key
100
+ ON nodix_memory_suppressions(project_id, subject, attribute)
101
+ WHERE subject IS NOT NULL AND attribute IS NOT NULL;
102
+ --> statement-breakpoint
103
+ CREATE UNIQUE INDEX nodix_idx_memory_suppressions_content
104
+ ON nodix_memory_suppressions(project_id, content_hash)
105
+ WHERE content_hash IS NOT NULL;