@dzhechkov/memory 0.2.9 → 0.2.10

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.
@@ -0,0 +1,253 @@
1
+ {
2
+ "manifest": {
3
+ "version": 1,
4
+ "pack": "memory",
5
+ "files": [
6
+ {
7
+ "path": "CHANGELOG.md",
8
+ "sha256": "bbdfa5df5277b9f8a6d30c6f63e70494f54998ab49ce2b60fab55f544f960440"
9
+ },
10
+ {
11
+ "path": "README.md",
12
+ "sha256": "536160fdb176de86b5bf005b640c93a002ee7084c346917c56a5a4d28a16eb37"
13
+ },
14
+ {
15
+ "path": "coverage/coverage-final.json",
16
+ "sha256": "c024d84c706519bcb3128e9fde07b894046af6a523d3945512584d2c8d3f686d"
17
+ },
18
+ {
19
+ "path": "coverage/coverage-summary.json",
20
+ "sha256": "feda9defafb15fc97d6cbc6b8462e87dfd5b029c2dbb1446e0cd0a3a0c8f5de5"
21
+ },
22
+ {
23
+ "path": "dist/backend.d.ts",
24
+ "sha256": "fe8a5ec858b83c2b6a8f7f242e212bb2e59acda775609e27ef37f5146eb5c455"
25
+ },
26
+ {
27
+ "path": "dist/backend.d.ts.map",
28
+ "sha256": "f41fade4e6b8d3dcbb730359683d75cb3de2ff9b83b2c8a8c6cfaee1b6f3b514"
29
+ },
30
+ {
31
+ "path": "dist/backend.js",
32
+ "sha256": "63af272c41a95713da9c544ff91e186e1e215e66ce938b8b046279ae94a8b919"
33
+ },
34
+ {
35
+ "path": "dist/backend.js.map",
36
+ "sha256": "45d1a1632bc5c276514608c3a77615b78c314d9addd632352c60dc565389d74c"
37
+ },
38
+ {
39
+ "path": "dist/bridge.d.ts",
40
+ "sha256": "94ae009717c9829eaa1e1526130592b1b68a86033f82ccb92686d13bc741bbcc"
41
+ },
42
+ {
43
+ "path": "dist/bridge.d.ts.map",
44
+ "sha256": "b29708fe02bd55d36d09e192954a6d648f42097f0870dcd43db3edf83e69512d"
45
+ },
46
+ {
47
+ "path": "dist/bridge.js",
48
+ "sha256": "9ae4a6d5baca14014d2857196af06ea7b6d2cde721707951cdeadad547c79b89"
49
+ },
50
+ {
51
+ "path": "dist/bridge.js.map",
52
+ "sha256": "f767581b00912afc6786cf3791ba561ba3b047cd89ba38e66e6b9ef590bb7b9c"
53
+ },
54
+ {
55
+ "path": "dist/cascade.d.ts",
56
+ "sha256": "0b7c8c4609a418bebc1645b8b253003d978c6353472e2bbdc942074f28923103"
57
+ },
58
+ {
59
+ "path": "dist/cascade.d.ts.map",
60
+ "sha256": "69665ba798f8a935200dd8e0e68276a8c6ed5154bb6a0b0d0cd420d6e0b90ae3"
61
+ },
62
+ {
63
+ "path": "dist/cascade.js",
64
+ "sha256": "9cb0c217388c6b35006cec6ab559b3c541f0420a3a16e07e9d783d5e4a4699ee"
65
+ },
66
+ {
67
+ "path": "dist/cascade.js.map",
68
+ "sha256": "f1783db779e9d3bbbfaafddce954a05a2b90d5bdd5e92afe18592e48d4858516"
69
+ },
70
+ {
71
+ "path": "dist/dreaming.d.ts",
72
+ "sha256": "54aa894782dead661ae22c0febcb3a59d48bb4820bb9e7432857b742cd802276"
73
+ },
74
+ {
75
+ "path": "dist/dreaming.d.ts.map",
76
+ "sha256": "c6e730ce87ac42632ef9eb4bb3a504b3c270eb6e7cf02e327394840f15092826"
77
+ },
78
+ {
79
+ "path": "dist/dreaming.js",
80
+ "sha256": "393e22def63f23eca261f965567ba58ffc90eded8fbc24e6448aa5e828fdbc78"
81
+ },
82
+ {
83
+ "path": "dist/dreaming.js.map",
84
+ "sha256": "6b192b2bb1a73016d0741365c3c44e129f06a616ae9a0e90d12a90af8c3cb0bb"
85
+ },
86
+ {
87
+ "path": "dist/index.d.ts",
88
+ "sha256": "9d855df88b28e860102b42a0b899f7a5a561c3e3d8cf3fc48cb3366a15049c30"
89
+ },
90
+ {
91
+ "path": "dist/index.d.ts.map",
92
+ "sha256": "5a0b747b1858bdaacab8c086a24005ce0ec98d8d4ca60ea42e8c5f79ce9c3719"
93
+ },
94
+ {
95
+ "path": "dist/index.js",
96
+ "sha256": "8b73ac944a586829e8d73e81d9c3c210dc13124067fb5742c953cc4fda1fcba9"
97
+ },
98
+ {
99
+ "path": "dist/index.js.map",
100
+ "sha256": "a86663fb3aeccf123b6b2adbc6a9a4a70da9a3887c75514a49d1bf95837253d3"
101
+ },
102
+ {
103
+ "path": "dist/json-backend.d.ts",
104
+ "sha256": "80d304c83f8a6c0e6b3e91dc02e291cb3e744ee0b7d7bc273b40bd16ad2cb449"
105
+ },
106
+ {
107
+ "path": "dist/json-backend.d.ts.map",
108
+ "sha256": "79f7681f3b05119c6db9d59da05da8598dd82a60cc028e70c3954394e1a1601e"
109
+ },
110
+ {
111
+ "path": "dist/json-backend.js",
112
+ "sha256": "7d0e715ee1e0c93904e15abaec70a17b82333e2f9ac55894f0ca675279454821"
113
+ },
114
+ {
115
+ "path": "dist/json-backend.js.map",
116
+ "sha256": "c34734f7386e902a76d78aeec3930ce5b68796392559e9a22efbc4cc5de90650"
117
+ },
118
+ {
119
+ "path": "dist/reflexion.d.ts",
120
+ "sha256": "01ceaaee37c402a323cd9afa258ac505f9458048c75c40f2d0f9b5465b784a02"
121
+ },
122
+ {
123
+ "path": "dist/reflexion.d.ts.map",
124
+ "sha256": "faf6c875ec80a392ddee2d1a38e4ceca33d1c82477b48488a35de0050818aa0e"
125
+ },
126
+ {
127
+ "path": "dist/reflexion.js",
128
+ "sha256": "97a16866c30a79f6e2e9b0ae43a2d60b3e70c922a78d3325f729e98f8fbbfc0d"
129
+ },
130
+ {
131
+ "path": "dist/reflexion.js.map",
132
+ "sha256": "c784199286137919544d9fbe957cf8405109111a8748e2409555d408e56e05f0"
133
+ },
134
+ {
135
+ "path": "dist/sqlite-backend.d.ts",
136
+ "sha256": "bcee527422ab9692082ad26f6276f47f9bce86ed5279439f67a0823da1b93387"
137
+ },
138
+ {
139
+ "path": "dist/sqlite-backend.d.ts.map",
140
+ "sha256": "1d8187924617dc91f55c23c624d4d4bc7ce82dc6059c33e87cf78c2c3837547b"
141
+ },
142
+ {
143
+ "path": "dist/sqlite-backend.js",
144
+ "sha256": "056c9dd4f11234c2e4a2af906ccbd9022cc3f11c20fdddd2465eca260f93b104"
145
+ },
146
+ {
147
+ "path": "dist/sqlite-backend.js.map",
148
+ "sha256": "a34bdb236db9d469e6c4dde6d50832438aca0d085f47a12a9ad43258a4524e12"
149
+ },
150
+ {
151
+ "path": "dist/sqlite-probe.d.ts",
152
+ "sha256": "6a649e48cbaad5c900e2bb95e11f4a1f4e33dc9dd8165cab290659c37dcdb1d6"
153
+ },
154
+ {
155
+ "path": "dist/sqlite-probe.d.ts.map",
156
+ "sha256": "982ea953e1a80deb38c6c80e1f150f1bd410e97ba83480b7d4f7249e98763562"
157
+ },
158
+ {
159
+ "path": "dist/sqlite-probe.js",
160
+ "sha256": "b6aaa054f32385874b50bcce779d98c33d16dc2fab73a8bf48691b18fdc25e3e"
161
+ },
162
+ {
163
+ "path": "dist/sqlite-probe.js.map",
164
+ "sha256": "083e083ff09058e6802bae5d1415b53d39218a6bf1f31cd6d041e10dbeae9c61"
165
+ },
166
+ {
167
+ "path": "package.json",
168
+ "sha256": "b287a6ceae333b4a88beea011de37eb2fe580841c925d57fa4378c1d7225168d"
169
+ },
170
+ {
171
+ "path": "src/backend.ts",
172
+ "sha256": "77fe67ce082757e38117e8d6a2598d705f6f665a696474608bcfb0f7739ef15e"
173
+ },
174
+ {
175
+ "path": "src/bridge.ts",
176
+ "sha256": "f1fce2221d78a9cae4063e46cd87d2120aeaad5d31d9c3845cb2a01dd420ae6a"
177
+ },
178
+ {
179
+ "path": "src/cascade.ts",
180
+ "sha256": "e34c41de72524417a60a530aa988b33b7be7ebc33a4ac415595f448652882ced"
181
+ },
182
+ {
183
+ "path": "src/dreaming.ts",
184
+ "sha256": "f23084fe7ba68bdf8e913da65c12704a2d2a33ae66e120c712c3c2d59ca83ec8"
185
+ },
186
+ {
187
+ "path": "src/index.ts",
188
+ "sha256": "34c68dbea4be8c8108dd6aff0e49690484894c56f53967e07c92205b8d57ff64"
189
+ },
190
+ {
191
+ "path": "src/json-backend.ts",
192
+ "sha256": "a42aae75c2760818b7f206c194db3328e2d339d455cca0d8b656c1bbb394335c"
193
+ },
194
+ {
195
+ "path": "src/reflexion.ts",
196
+ "sha256": "1e22f854d7f7f216be8b1062f2264be241f3cf46ddd5b0d3b39cd4941c43890c"
197
+ },
198
+ {
199
+ "path": "src/sqlite-backend.ts",
200
+ "sha256": "85159ceb6b5dbd21f66b39a8e522097b363c699986b8209acf90281fb490c7ac"
201
+ },
202
+ {
203
+ "path": "src/sqlite-probe.ts",
204
+ "sha256": "28bc13308f61bc553fc36a9c0efcf382522769de20769f3fcef8c3bbb4734b7e"
205
+ },
206
+ {
207
+ "path": "stryker.config.json",
208
+ "sha256": "2f8f92b4368e876e88113bc49b13a46a705d9ba0f64b6852ae111b48c77fd16f"
209
+ },
210
+ {
211
+ "path": "test/bridge.test.ts",
212
+ "sha256": "4369595f468d204d32bb561a6cc00e096092dcfff0d1693417741c3a0281f647"
213
+ },
214
+ {
215
+ "path": "test/cascade.test.ts",
216
+ "sha256": "c7b429025794a914674b8cace13ccc1c53dae4ac6b4ed16620c75a4c9ab7d8df"
217
+ },
218
+ {
219
+ "path": "test/dreaming.test.ts",
220
+ "sha256": "c189e9313e4c45ea0302ee31f2b5b3952b6e71cc3b9e3d2c3b1dd396db66d58e"
221
+ },
222
+ {
223
+ "path": "test/json-backend.test.ts",
224
+ "sha256": "6914ddc262e515c4763d097871eb8a5ec9a0667b379fa61a214c10f2f26898b3"
225
+ },
226
+ {
227
+ "path": "test/reflexion.test.ts",
228
+ "sha256": "e013324ab5d227c501f5a24944f0caca915b4cafffcc6aacccbe5010685f30a4"
229
+ },
230
+ {
231
+ "path": "test/sqlite-backend.test.ts",
232
+ "sha256": "ce44f28c4607facbf23e0528d1d4c12a7b755fe4eda37ce547081d786e77e44a"
233
+ },
234
+ {
235
+ "path": "test/sqlite-probe.test.ts",
236
+ "sha256": "05320e156305d3e706df5bcc288661e1258abbb827cf86b888351c98696457a5"
237
+ },
238
+ {
239
+ "path": "test/tokenize-unicode.test.ts",
240
+ "sha256": "05d66ccd90004382910ed106f884d3fa99af90cb427501583c0e373d37df3bc4"
241
+ },
242
+ {
243
+ "path": "tsconfig.json",
244
+ "sha256": "e80ef2911c3347a713dc3dca6a5f6034d91e938e58e71345ea920dd9833bcdbb"
245
+ },
246
+ {
247
+ "path": "vitest.config.ts",
248
+ "sha256": "a6ffc6172b50a3a59010f8f8c66e2204e7d298b62a7f2bc5de33cbf39c99899d"
249
+ }
250
+ ]
251
+ },
252
+ "signature": "V5qdESB+Xc5cG1EEDwHhOxdDKy+4zdcQhCGosI/UFANKtYrfowhl6+YViflo3Ps01ApEkhW6SOJwg2cEy3xeDQ=="
253
+ }
package/README.md CHANGED
@@ -28,3 +28,19 @@ are intentionally *not* hard dependencies — see
28
28
  ## Status
29
29
 
30
30
  `0.1.0` — alpha, part of the `extended-a-migration` feature (Phase 7).
31
+
32
+ ## Status
33
+
34
+ `0.2.10` — the lexical tokenizer is Unicode-aware. It split on `[^a-z0-9]+`, so every non-Latin letter
35
+ was a separator and a Cyrillic query produced **zero terms**: the FTS5 branch was skipped, relevance
36
+ degenerated to a constant for every record, and the confidence tie-break decided the order. MEASURED
37
+ 2026-08-21 on a 267-record store — RU top-1 **0/10** against EN **10/10**, while 63% of real recall
38
+ traffic is Cyrillic. The class is now `[^\p{L}\p{N}]+/u` in both backends, and the one-character
39
+ floor counts code points rather than UTF-16 units.
40
+
41
+ No migration is needed: FTS5's own tokenizer always indexed the text correctly — only the query was
42
+ being stripped of its terms on the way out.
43
+
44
+ **Unchanged on purpose:** a query that yields no terms still returns the store. That behaviour is
45
+ pinned by four existing tests which comment it as intended, so it is a contract to be changed by
46
+ decision, not folded into an alphabet fix.
@@ -1 +1 @@
1
- {"version":3,"file":"json-backend.d.ts","sourceRoot":"","sources":["../src/json-backend.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAuB7E,2CAA2C;AAC3C,MAAM,WAAW,sBAAsB;IACrC,uEAAuE;IACvE,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,sFAAsF;AACtF,qBAAa,eAAgB,YAAW,aAAa;IACnD,QAAQ,CAAC,IAAI,eAAe;IAE5B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAmC;IAC3D,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAqB;gBAElC,OAAO,GAAE,sBAA2B;IAIhD,6EAA6E;WAChE,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IAM7D;;;;OAIG;IACH,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,eAAe;IAMlD,GAAG,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAKxC,KAAK,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAIlD,4EAA4E;IAC5E,SAAS,CAAC,KAAK,EAAE,WAAW,GAAG,YAAY,EAAE;IAkB7C,GAAG,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;IAI9B,+CAA+C;IAC/C,OAAO,IAAI,YAAY,EAAE;IAIzB,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKjC,gFAAgF;IAChF,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAI5B,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC;IAIxB;;;;;;;OAOG;IACH,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAerB,qFAAqF;IACrF,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAKrB,gDAAgD;IAChD,QAAQ,IAAI,IAAI;CAMjB"}
1
+ {"version":3,"file":"json-backend.d.ts","sourceRoot":"","sources":["../src/json-backend.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAuC7E,2CAA2C;AAC3C,MAAM,WAAW,sBAAsB;IACrC,uEAAuE;IACvE,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,sFAAsF;AACtF,qBAAa,eAAgB,YAAW,aAAa;IACnD,QAAQ,CAAC,IAAI,eAAe;IAE5B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAmC;IAC3D,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAqB;gBAElC,OAAO,GAAE,sBAA2B;IAIhD,6EAA6E;WAChE,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IAM7D;;;;OAIG;IACH,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,eAAe;IAMlD,GAAG,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAKxC,KAAK,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAIlD,4EAA4E;IAC5E,SAAS,CAAC,KAAK,EAAE,WAAW,GAAG,YAAY,EAAE;IAkB7C,GAAG,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;IAI9B,+CAA+C;IAC/C,OAAO,IAAI,YAAY,EAAE;IAIzB,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKjC,gFAAgF;IAChF,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAI5B,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC;IAIxB;;;;;;;OAOG;IACH,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAerB,qFAAqF;IACrF,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAKrB,gDAAgD;IAChD,QAAQ,IAAI,IAAI;CAMjB"}
@@ -10,12 +10,28 @@
10
10
  import { existsSync, mkdirSync, readFileSync, renameSync, rmSync, writeFileSync } from 'node:fs';
11
11
  import { dirname } from 'node:path';
12
12
  const DEFAULT_LIMIT = 20;
13
- /** Split text into lowercase word tokens of length > 1. */
13
+ /**
14
+ * Split text into lowercase word tokens of length > 1.
15
+ *
16
+ * The class is `\p{L}\p{N}`, not `a-z0-9`. Until 2026-08-21 it was ASCII-only, so every non-Latin
17
+ * letter was a SEPARATOR and a Cyrillic query produced ZERO tokens — the FTS5 branch was then skipped
18
+ * entirely, `relevanceOf` returned 0 for every record, and the sort collapsed onto its confidence
19
+ * tie-break. MEASURED on a 267-record clone of the real brain: RU top-1 0/10 against EN 10/10, while
20
+ * 63% of real recall traffic is Cyrillic. The INDEX was never wrong — FTS5's own tokenizer handles
21
+ * Cyrillic — so nothing on disk needed migrating; only the query was being stripped of its terms.
22
+ *
23
+ * `\p{L}` admits letters and `\p{N}` digits; it does NOT admit `"`, `*`, `(` or any other FTS5
24
+ * operator, which is what keeps the joined terms safe to interpolate into a MATCH expression.
25
+ */
14
26
  function tokenize(text) {
15
27
  return text
16
28
  .toLowerCase()
17
- .split(/[^a-z0-9]+/)
18
- .filter((token) => token.length > 1);
29
+ .split(/[^\p{L}\p{N}]+/u)
30
+ // Count CODE POINTS, not UTF-16 units. `token.length` counts units, so a single astral letter
31
+ // (`𐐀`, one character, two units) would slip past a floor meant to reject one-character words —
32
+ // an accidental threshold change smuggled in by the alphabet change (cross-family review,
33
+ // 2026-08-21). The promise was "the alphabet, not the thresholds"; this keeps it.
34
+ .filter((token) => [...token].length > 1);
19
35
  }
20
36
  /** Count how many query terms appear in a record's text/skillId. */
21
37
  function relevanceOf(record, terms) {
@@ -1 +1 @@
1
- {"version":3,"file":"json-backend.js","sourceRoot":"","sources":["../src/json-backend.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"json-backend.js","sourceRoot":"","sources":["../src/json-backend.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"sqlite-backend.d.ts","sourceRoot":"","sources":["../src/sqlite-backend.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAsF7E,iCAAiC;AACjC,MAAM,WAAW,oBAAoB;IACnC,wCAAwC;IACxC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED;;;;;GAKG;AACH,qBAAa,aAAc,YAAW,aAAa;IACjD,QAAQ,CAAC,IAAI,YAAY;IAEzB,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAM;IACzB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAM;IACjC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAM;IACjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAM;IAC9B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAM;IAChC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAM;IAClC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAkB;IAChD,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAkB;IACrD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAU;gBAEtB,EAAE,EAAE,GAAG;IAyBnB,4DAA4D;IAC5D,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,aAAa;IAW5C,GAAG,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAaxC,KAAK,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAIlD;;;;OAIG;IACH,SAAS,CAAC,KAAK,EAAE,WAAW,GAAG,YAAY,EAAE;IAuD7C,GAAG,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;IAI9B,6CAA6C;IAC7C,OAAO,IAAI,YAAY,EAAE;IAIzB,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKjC,sIAAsI;IACtI,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAI5B,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC;IAIxB,oEAAoE;IACpE,OAAO,CAAC,OAAO,EAAE,SAAS,YAAY,EAAE,GAAG,IAAI;IAiB/C,qCAAqC;IACrC,KAAK,IAAI,IAAI;CAGd"}
1
+ {"version":3,"file":"sqlite-backend.d.ts","sourceRoot":"","sources":["../src/sqlite-backend.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAsG7E,iCAAiC;AACjC,MAAM,WAAW,oBAAoB;IACnC,wCAAwC;IACxC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED;;;;;GAKG;AACH,qBAAa,aAAc,YAAW,aAAa;IACjD,QAAQ,CAAC,IAAI,YAAY;IAEzB,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAM;IACzB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAM;IACjC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAM;IACjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAM;IAC9B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAM;IAChC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAM;IAClC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAkB;IAChD,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAkB;IACrD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAU;gBAEtB,EAAE,EAAE,GAAG;IAyBnB,4DAA4D;IAC5D,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,aAAa;IAW5C,GAAG,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAaxC,KAAK,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAIlD;;;;OAIG;IACH,SAAS,CAAC,KAAK,EAAE,WAAW,GAAG,YAAY,EAAE;IAuD7C,GAAG,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;IAI9B,6CAA6C;IAC7C,OAAO,IAAI,YAAY,EAAE;IAIzB,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKjC,sIAAsI;IACtI,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAI5B,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC;IAIxB,oEAAoE;IACpE,OAAO,CAAC,OAAO,EAAE,SAAS,YAAY,EAAE,GAAG,IAAI;IAiB/C,qCAAqC;IACrC,KAAK,IAAI,IAAI;CAGd"}
@@ -12,12 +12,28 @@ import { mkdirSync } from 'node:fs';
12
12
  import { dirname } from 'node:path';
13
13
  const require = createRequire(import.meta.url);
14
14
  const DEFAULT_LIMIT = 20;
15
- /** Split text into lowercase word tokens of length > 1. */
15
+ /**
16
+ * Split text into lowercase word tokens of length > 1.
17
+ *
18
+ * The class is `\p{L}\p{N}`, not `a-z0-9`. Until 2026-08-21 it was ASCII-only, so every non-Latin
19
+ * letter was a SEPARATOR and a Cyrillic query produced ZERO tokens — the FTS5 branch was then skipped
20
+ * entirely, `relevanceOf` returned 0 for every record, and the sort collapsed onto its confidence
21
+ * tie-break. MEASURED on a 267-record clone of the real brain: RU top-1 0/10 against EN 10/10, while
22
+ * 63% of real recall traffic is Cyrillic. The INDEX was never wrong — FTS5's own tokenizer handles
23
+ * Cyrillic — so nothing on disk needed migrating; only the query was being stripped of its terms.
24
+ *
25
+ * `\p{L}` admits letters and `\p{N}` digits; it does NOT admit `"`, `*`, `(` or any other FTS5
26
+ * operator, which is what keeps the joined terms safe to interpolate into a MATCH expression.
27
+ */
16
28
  function tokenize(text) {
17
29
  return text
18
30
  .toLowerCase()
19
- .split(/[^a-z0-9]+/)
20
- .filter((token) => token.length > 1);
31
+ .split(/[^\p{L}\p{N}]+/u)
32
+ // Count CODE POINTS, not UTF-16 units. `token.length` counts units, so a single astral letter
33
+ // (`𐐀`, one character, two units) would slip past a floor meant to reject one-character words —
34
+ // an accidental threshold change smuggled in by the alphabet change (cross-family review,
35
+ // 2026-08-21). The promise was "the alphabet, not the thresholds"; this keeps it.
36
+ .filter((token) => [...token].length > 1);
21
37
  }
22
38
  /** Count how many query terms appear in a record's text/skillId. */
23
39
  function relevanceOf(record, terms) {
@@ -1 +1 @@
1
- {"version":3,"file":"sqlite-backend.js","sourceRoot":"","sources":["../src/sqlite-backend.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sqlite-backend.js","sourceRoot":"","sources":["../src/sqlite-backend.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dzhechkov/memory",
3
- "version": "0.2.9",
3
+ "version": "0.2.10",
4
4
  "description": "Harness memory layer - backend cascade, Reflexion feedback, and the host-memory bridge.",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -22,7 +22,9 @@
22
22
  "files": [
23
23
  "dist",
24
24
  "src",
25
- "README.md"
25
+ "README.md",
26
+ ".dz-manifest.json",
27
+ "sbom.json"
26
28
  ],
27
29
  "optionalDependencies": {
28
30
  "better-sqlite3": "^11.0.0"
package/sbom.json ADDED
@@ -0,0 +1,623 @@
1
+ {
2
+ "bomFormat": "CycloneDX",
3
+ "specVersion": "1.5",
4
+ "version": 1,
5
+ "metadata": {
6
+ "component": {
7
+ "type": "library",
8
+ "name": "memory"
9
+ }
10
+ },
11
+ "components": [
12
+ {
13
+ "type": "file",
14
+ "name": "CHANGELOG.md",
15
+ "hashes": [
16
+ {
17
+ "alg": "SHA-256",
18
+ "content": "bbdfa5df5277b9f8a6d30c6f63e70494f54998ab49ce2b60fab55f544f960440"
19
+ }
20
+ ]
21
+ },
22
+ {
23
+ "type": "file",
24
+ "name": "README.md",
25
+ "hashes": [
26
+ {
27
+ "alg": "SHA-256",
28
+ "content": "536160fdb176de86b5bf005b640c93a002ee7084c346917c56a5a4d28a16eb37"
29
+ }
30
+ ]
31
+ },
32
+ {
33
+ "type": "file",
34
+ "name": "coverage/coverage-final.json",
35
+ "hashes": [
36
+ {
37
+ "alg": "SHA-256",
38
+ "content": "c024d84c706519bcb3128e9fde07b894046af6a523d3945512584d2c8d3f686d"
39
+ }
40
+ ]
41
+ },
42
+ {
43
+ "type": "file",
44
+ "name": "coverage/coverage-summary.json",
45
+ "hashes": [
46
+ {
47
+ "alg": "SHA-256",
48
+ "content": "feda9defafb15fc97d6cbc6b8462e87dfd5b029c2dbb1446e0cd0a3a0c8f5de5"
49
+ }
50
+ ]
51
+ },
52
+ {
53
+ "type": "file",
54
+ "name": "dist/backend.d.ts",
55
+ "hashes": [
56
+ {
57
+ "alg": "SHA-256",
58
+ "content": "fe8a5ec858b83c2b6a8f7f242e212bb2e59acda775609e27ef37f5146eb5c455"
59
+ }
60
+ ]
61
+ },
62
+ {
63
+ "type": "file",
64
+ "name": "dist/backend.d.ts.map",
65
+ "hashes": [
66
+ {
67
+ "alg": "SHA-256",
68
+ "content": "f41fade4e6b8d3dcbb730359683d75cb3de2ff9b83b2c8a8c6cfaee1b6f3b514"
69
+ }
70
+ ]
71
+ },
72
+ {
73
+ "type": "file",
74
+ "name": "dist/backend.js",
75
+ "hashes": [
76
+ {
77
+ "alg": "SHA-256",
78
+ "content": "63af272c41a95713da9c544ff91e186e1e215e66ce938b8b046279ae94a8b919"
79
+ }
80
+ ]
81
+ },
82
+ {
83
+ "type": "file",
84
+ "name": "dist/backend.js.map",
85
+ "hashes": [
86
+ {
87
+ "alg": "SHA-256",
88
+ "content": "45d1a1632bc5c276514608c3a77615b78c314d9addd632352c60dc565389d74c"
89
+ }
90
+ ]
91
+ },
92
+ {
93
+ "type": "file",
94
+ "name": "dist/bridge.d.ts",
95
+ "hashes": [
96
+ {
97
+ "alg": "SHA-256",
98
+ "content": "94ae009717c9829eaa1e1526130592b1b68a86033f82ccb92686d13bc741bbcc"
99
+ }
100
+ ]
101
+ },
102
+ {
103
+ "type": "file",
104
+ "name": "dist/bridge.d.ts.map",
105
+ "hashes": [
106
+ {
107
+ "alg": "SHA-256",
108
+ "content": "b29708fe02bd55d36d09e192954a6d648f42097f0870dcd43db3edf83e69512d"
109
+ }
110
+ ]
111
+ },
112
+ {
113
+ "type": "file",
114
+ "name": "dist/bridge.js",
115
+ "hashes": [
116
+ {
117
+ "alg": "SHA-256",
118
+ "content": "9ae4a6d5baca14014d2857196af06ea7b6d2cde721707951cdeadad547c79b89"
119
+ }
120
+ ]
121
+ },
122
+ {
123
+ "type": "file",
124
+ "name": "dist/bridge.js.map",
125
+ "hashes": [
126
+ {
127
+ "alg": "SHA-256",
128
+ "content": "f767581b00912afc6786cf3791ba561ba3b047cd89ba38e66e6b9ef590bb7b9c"
129
+ }
130
+ ]
131
+ },
132
+ {
133
+ "type": "file",
134
+ "name": "dist/cascade.d.ts",
135
+ "hashes": [
136
+ {
137
+ "alg": "SHA-256",
138
+ "content": "0b7c8c4609a418bebc1645b8b253003d978c6353472e2bbdc942074f28923103"
139
+ }
140
+ ]
141
+ },
142
+ {
143
+ "type": "file",
144
+ "name": "dist/cascade.d.ts.map",
145
+ "hashes": [
146
+ {
147
+ "alg": "SHA-256",
148
+ "content": "69665ba798f8a935200dd8e0e68276a8c6ed5154bb6a0b0d0cd420d6e0b90ae3"
149
+ }
150
+ ]
151
+ },
152
+ {
153
+ "type": "file",
154
+ "name": "dist/cascade.js",
155
+ "hashes": [
156
+ {
157
+ "alg": "SHA-256",
158
+ "content": "9cb0c217388c6b35006cec6ab559b3c541f0420a3a16e07e9d783d5e4a4699ee"
159
+ }
160
+ ]
161
+ },
162
+ {
163
+ "type": "file",
164
+ "name": "dist/cascade.js.map",
165
+ "hashes": [
166
+ {
167
+ "alg": "SHA-256",
168
+ "content": "f1783db779e9d3bbbfaafddce954a05a2b90d5bdd5e92afe18592e48d4858516"
169
+ }
170
+ ]
171
+ },
172
+ {
173
+ "type": "file",
174
+ "name": "dist/dreaming.d.ts",
175
+ "hashes": [
176
+ {
177
+ "alg": "SHA-256",
178
+ "content": "54aa894782dead661ae22c0febcb3a59d48bb4820bb9e7432857b742cd802276"
179
+ }
180
+ ]
181
+ },
182
+ {
183
+ "type": "file",
184
+ "name": "dist/dreaming.d.ts.map",
185
+ "hashes": [
186
+ {
187
+ "alg": "SHA-256",
188
+ "content": "c6e730ce87ac42632ef9eb4bb3a504b3c270eb6e7cf02e327394840f15092826"
189
+ }
190
+ ]
191
+ },
192
+ {
193
+ "type": "file",
194
+ "name": "dist/dreaming.js",
195
+ "hashes": [
196
+ {
197
+ "alg": "SHA-256",
198
+ "content": "393e22def63f23eca261f965567ba58ffc90eded8fbc24e6448aa5e828fdbc78"
199
+ }
200
+ ]
201
+ },
202
+ {
203
+ "type": "file",
204
+ "name": "dist/dreaming.js.map",
205
+ "hashes": [
206
+ {
207
+ "alg": "SHA-256",
208
+ "content": "6b192b2bb1a73016d0741365c3c44e129f06a616ae9a0e90d12a90af8c3cb0bb"
209
+ }
210
+ ]
211
+ },
212
+ {
213
+ "type": "file",
214
+ "name": "dist/index.d.ts",
215
+ "hashes": [
216
+ {
217
+ "alg": "SHA-256",
218
+ "content": "9d855df88b28e860102b42a0b899f7a5a561c3e3d8cf3fc48cb3366a15049c30"
219
+ }
220
+ ]
221
+ },
222
+ {
223
+ "type": "file",
224
+ "name": "dist/index.d.ts.map",
225
+ "hashes": [
226
+ {
227
+ "alg": "SHA-256",
228
+ "content": "5a0b747b1858bdaacab8c086a24005ce0ec98d8d4ca60ea42e8c5f79ce9c3719"
229
+ }
230
+ ]
231
+ },
232
+ {
233
+ "type": "file",
234
+ "name": "dist/index.js",
235
+ "hashes": [
236
+ {
237
+ "alg": "SHA-256",
238
+ "content": "8b73ac944a586829e8d73e81d9c3c210dc13124067fb5742c953cc4fda1fcba9"
239
+ }
240
+ ]
241
+ },
242
+ {
243
+ "type": "file",
244
+ "name": "dist/index.js.map",
245
+ "hashes": [
246
+ {
247
+ "alg": "SHA-256",
248
+ "content": "a86663fb3aeccf123b6b2adbc6a9a4a70da9a3887c75514a49d1bf95837253d3"
249
+ }
250
+ ]
251
+ },
252
+ {
253
+ "type": "file",
254
+ "name": "dist/json-backend.d.ts",
255
+ "hashes": [
256
+ {
257
+ "alg": "SHA-256",
258
+ "content": "80d304c83f8a6c0e6b3e91dc02e291cb3e744ee0b7d7bc273b40bd16ad2cb449"
259
+ }
260
+ ]
261
+ },
262
+ {
263
+ "type": "file",
264
+ "name": "dist/json-backend.d.ts.map",
265
+ "hashes": [
266
+ {
267
+ "alg": "SHA-256",
268
+ "content": "79f7681f3b05119c6db9d59da05da8598dd82a60cc028e70c3954394e1a1601e"
269
+ }
270
+ ]
271
+ },
272
+ {
273
+ "type": "file",
274
+ "name": "dist/json-backend.js",
275
+ "hashes": [
276
+ {
277
+ "alg": "SHA-256",
278
+ "content": "7d0e715ee1e0c93904e15abaec70a17b82333e2f9ac55894f0ca675279454821"
279
+ }
280
+ ]
281
+ },
282
+ {
283
+ "type": "file",
284
+ "name": "dist/json-backend.js.map",
285
+ "hashes": [
286
+ {
287
+ "alg": "SHA-256",
288
+ "content": "c34734f7386e902a76d78aeec3930ce5b68796392559e9a22efbc4cc5de90650"
289
+ }
290
+ ]
291
+ },
292
+ {
293
+ "type": "file",
294
+ "name": "dist/reflexion.d.ts",
295
+ "hashes": [
296
+ {
297
+ "alg": "SHA-256",
298
+ "content": "01ceaaee37c402a323cd9afa258ac505f9458048c75c40f2d0f9b5465b784a02"
299
+ }
300
+ ]
301
+ },
302
+ {
303
+ "type": "file",
304
+ "name": "dist/reflexion.d.ts.map",
305
+ "hashes": [
306
+ {
307
+ "alg": "SHA-256",
308
+ "content": "faf6c875ec80a392ddee2d1a38e4ceca33d1c82477b48488a35de0050818aa0e"
309
+ }
310
+ ]
311
+ },
312
+ {
313
+ "type": "file",
314
+ "name": "dist/reflexion.js",
315
+ "hashes": [
316
+ {
317
+ "alg": "SHA-256",
318
+ "content": "97a16866c30a79f6e2e9b0ae43a2d60b3e70c922a78d3325f729e98f8fbbfc0d"
319
+ }
320
+ ]
321
+ },
322
+ {
323
+ "type": "file",
324
+ "name": "dist/reflexion.js.map",
325
+ "hashes": [
326
+ {
327
+ "alg": "SHA-256",
328
+ "content": "c784199286137919544d9fbe957cf8405109111a8748e2409555d408e56e05f0"
329
+ }
330
+ ]
331
+ },
332
+ {
333
+ "type": "file",
334
+ "name": "dist/sqlite-backend.d.ts",
335
+ "hashes": [
336
+ {
337
+ "alg": "SHA-256",
338
+ "content": "bcee527422ab9692082ad26f6276f47f9bce86ed5279439f67a0823da1b93387"
339
+ }
340
+ ]
341
+ },
342
+ {
343
+ "type": "file",
344
+ "name": "dist/sqlite-backend.d.ts.map",
345
+ "hashes": [
346
+ {
347
+ "alg": "SHA-256",
348
+ "content": "1d8187924617dc91f55c23c624d4d4bc7ce82dc6059c33e87cf78c2c3837547b"
349
+ }
350
+ ]
351
+ },
352
+ {
353
+ "type": "file",
354
+ "name": "dist/sqlite-backend.js",
355
+ "hashes": [
356
+ {
357
+ "alg": "SHA-256",
358
+ "content": "056c9dd4f11234c2e4a2af906ccbd9022cc3f11c20fdddd2465eca260f93b104"
359
+ }
360
+ ]
361
+ },
362
+ {
363
+ "type": "file",
364
+ "name": "dist/sqlite-backend.js.map",
365
+ "hashes": [
366
+ {
367
+ "alg": "SHA-256",
368
+ "content": "a34bdb236db9d469e6c4dde6d50832438aca0d085f47a12a9ad43258a4524e12"
369
+ }
370
+ ]
371
+ },
372
+ {
373
+ "type": "file",
374
+ "name": "dist/sqlite-probe.d.ts",
375
+ "hashes": [
376
+ {
377
+ "alg": "SHA-256",
378
+ "content": "6a649e48cbaad5c900e2bb95e11f4a1f4e33dc9dd8165cab290659c37dcdb1d6"
379
+ }
380
+ ]
381
+ },
382
+ {
383
+ "type": "file",
384
+ "name": "dist/sqlite-probe.d.ts.map",
385
+ "hashes": [
386
+ {
387
+ "alg": "SHA-256",
388
+ "content": "982ea953e1a80deb38c6c80e1f150f1bd410e97ba83480b7d4f7249e98763562"
389
+ }
390
+ ]
391
+ },
392
+ {
393
+ "type": "file",
394
+ "name": "dist/sqlite-probe.js",
395
+ "hashes": [
396
+ {
397
+ "alg": "SHA-256",
398
+ "content": "b6aaa054f32385874b50bcce779d98c33d16dc2fab73a8bf48691b18fdc25e3e"
399
+ }
400
+ ]
401
+ },
402
+ {
403
+ "type": "file",
404
+ "name": "dist/sqlite-probe.js.map",
405
+ "hashes": [
406
+ {
407
+ "alg": "SHA-256",
408
+ "content": "083e083ff09058e6802bae5d1415b53d39218a6bf1f31cd6d041e10dbeae9c61"
409
+ }
410
+ ]
411
+ },
412
+ {
413
+ "type": "file",
414
+ "name": "package.json",
415
+ "hashes": [
416
+ {
417
+ "alg": "SHA-256",
418
+ "content": "b287a6ceae333b4a88beea011de37eb2fe580841c925d57fa4378c1d7225168d"
419
+ }
420
+ ]
421
+ },
422
+ {
423
+ "type": "file",
424
+ "name": "src/backend.ts",
425
+ "hashes": [
426
+ {
427
+ "alg": "SHA-256",
428
+ "content": "77fe67ce082757e38117e8d6a2598d705f6f665a696474608bcfb0f7739ef15e"
429
+ }
430
+ ]
431
+ },
432
+ {
433
+ "type": "file",
434
+ "name": "src/bridge.ts",
435
+ "hashes": [
436
+ {
437
+ "alg": "SHA-256",
438
+ "content": "f1fce2221d78a9cae4063e46cd87d2120aeaad5d31d9c3845cb2a01dd420ae6a"
439
+ }
440
+ ]
441
+ },
442
+ {
443
+ "type": "file",
444
+ "name": "src/cascade.ts",
445
+ "hashes": [
446
+ {
447
+ "alg": "SHA-256",
448
+ "content": "e34c41de72524417a60a530aa988b33b7be7ebc33a4ac415595f448652882ced"
449
+ }
450
+ ]
451
+ },
452
+ {
453
+ "type": "file",
454
+ "name": "src/dreaming.ts",
455
+ "hashes": [
456
+ {
457
+ "alg": "SHA-256",
458
+ "content": "f23084fe7ba68bdf8e913da65c12704a2d2a33ae66e120c712c3c2d59ca83ec8"
459
+ }
460
+ ]
461
+ },
462
+ {
463
+ "type": "file",
464
+ "name": "src/index.ts",
465
+ "hashes": [
466
+ {
467
+ "alg": "SHA-256",
468
+ "content": "34c68dbea4be8c8108dd6aff0e49690484894c56f53967e07c92205b8d57ff64"
469
+ }
470
+ ]
471
+ },
472
+ {
473
+ "type": "file",
474
+ "name": "src/json-backend.ts",
475
+ "hashes": [
476
+ {
477
+ "alg": "SHA-256",
478
+ "content": "a42aae75c2760818b7f206c194db3328e2d339d455cca0d8b656c1bbb394335c"
479
+ }
480
+ ]
481
+ },
482
+ {
483
+ "type": "file",
484
+ "name": "src/reflexion.ts",
485
+ "hashes": [
486
+ {
487
+ "alg": "SHA-256",
488
+ "content": "1e22f854d7f7f216be8b1062f2264be241f3cf46ddd5b0d3b39cd4941c43890c"
489
+ }
490
+ ]
491
+ },
492
+ {
493
+ "type": "file",
494
+ "name": "src/sqlite-backend.ts",
495
+ "hashes": [
496
+ {
497
+ "alg": "SHA-256",
498
+ "content": "85159ceb6b5dbd21f66b39a8e522097b363c699986b8209acf90281fb490c7ac"
499
+ }
500
+ ]
501
+ },
502
+ {
503
+ "type": "file",
504
+ "name": "src/sqlite-probe.ts",
505
+ "hashes": [
506
+ {
507
+ "alg": "SHA-256",
508
+ "content": "28bc13308f61bc553fc36a9c0efcf382522769de20769f3fcef8c3bbb4734b7e"
509
+ }
510
+ ]
511
+ },
512
+ {
513
+ "type": "file",
514
+ "name": "stryker.config.json",
515
+ "hashes": [
516
+ {
517
+ "alg": "SHA-256",
518
+ "content": "2f8f92b4368e876e88113bc49b13a46a705d9ba0f64b6852ae111b48c77fd16f"
519
+ }
520
+ ]
521
+ },
522
+ {
523
+ "type": "file",
524
+ "name": "test/bridge.test.ts",
525
+ "hashes": [
526
+ {
527
+ "alg": "SHA-256",
528
+ "content": "4369595f468d204d32bb561a6cc00e096092dcfff0d1693417741c3a0281f647"
529
+ }
530
+ ]
531
+ },
532
+ {
533
+ "type": "file",
534
+ "name": "test/cascade.test.ts",
535
+ "hashes": [
536
+ {
537
+ "alg": "SHA-256",
538
+ "content": "c7b429025794a914674b8cace13ccc1c53dae4ac6b4ed16620c75a4c9ab7d8df"
539
+ }
540
+ ]
541
+ },
542
+ {
543
+ "type": "file",
544
+ "name": "test/dreaming.test.ts",
545
+ "hashes": [
546
+ {
547
+ "alg": "SHA-256",
548
+ "content": "c189e9313e4c45ea0302ee31f2b5b3952b6e71cc3b9e3d2c3b1dd396db66d58e"
549
+ }
550
+ ]
551
+ },
552
+ {
553
+ "type": "file",
554
+ "name": "test/json-backend.test.ts",
555
+ "hashes": [
556
+ {
557
+ "alg": "SHA-256",
558
+ "content": "6914ddc262e515c4763d097871eb8a5ec9a0667b379fa61a214c10f2f26898b3"
559
+ }
560
+ ]
561
+ },
562
+ {
563
+ "type": "file",
564
+ "name": "test/reflexion.test.ts",
565
+ "hashes": [
566
+ {
567
+ "alg": "SHA-256",
568
+ "content": "e013324ab5d227c501f5a24944f0caca915b4cafffcc6aacccbe5010685f30a4"
569
+ }
570
+ ]
571
+ },
572
+ {
573
+ "type": "file",
574
+ "name": "test/sqlite-backend.test.ts",
575
+ "hashes": [
576
+ {
577
+ "alg": "SHA-256",
578
+ "content": "ce44f28c4607facbf23e0528d1d4c12a7b755fe4eda37ce547081d786e77e44a"
579
+ }
580
+ ]
581
+ },
582
+ {
583
+ "type": "file",
584
+ "name": "test/sqlite-probe.test.ts",
585
+ "hashes": [
586
+ {
587
+ "alg": "SHA-256",
588
+ "content": "05320e156305d3e706df5bcc288661e1258abbb827cf86b888351c98696457a5"
589
+ }
590
+ ]
591
+ },
592
+ {
593
+ "type": "file",
594
+ "name": "test/tokenize-unicode.test.ts",
595
+ "hashes": [
596
+ {
597
+ "alg": "SHA-256",
598
+ "content": "05d66ccd90004382910ed106f884d3fa99af90cb427501583c0e373d37df3bc4"
599
+ }
600
+ ]
601
+ },
602
+ {
603
+ "type": "file",
604
+ "name": "tsconfig.json",
605
+ "hashes": [
606
+ {
607
+ "alg": "SHA-256",
608
+ "content": "e80ef2911c3347a713dc3dca6a5f6034d91e938e58e71345ea920dd9833bcdbb"
609
+ }
610
+ ]
611
+ },
612
+ {
613
+ "type": "file",
614
+ "name": "vitest.config.ts",
615
+ "hashes": [
616
+ {
617
+ "alg": "SHA-256",
618
+ "content": "a6ffc6172b50a3a59010f8f8c66e2204e7d298b62a7f2bc5de33cbf39c99899d"
619
+ }
620
+ ]
621
+ }
622
+ ]
623
+ }
@@ -15,12 +15,28 @@ import type { MemoryBackend, MemoryQuery, MemoryRecord } from './backend.js';
15
15
 
16
16
  const DEFAULT_LIMIT = 20;
17
17
 
18
- /** Split text into lowercase word tokens of length > 1. */
18
+ /**
19
+ * Split text into lowercase word tokens of length > 1.
20
+ *
21
+ * The class is `\p{L}\p{N}`, not `a-z0-9`. Until 2026-08-21 it was ASCII-only, so every non-Latin
22
+ * letter was a SEPARATOR and a Cyrillic query produced ZERO tokens — the FTS5 branch was then skipped
23
+ * entirely, `relevanceOf` returned 0 for every record, and the sort collapsed onto its confidence
24
+ * tie-break. MEASURED on a 267-record clone of the real brain: RU top-1 0/10 against EN 10/10, while
25
+ * 63% of real recall traffic is Cyrillic. The INDEX was never wrong — FTS5's own tokenizer handles
26
+ * Cyrillic — so nothing on disk needed migrating; only the query was being stripped of its terms.
27
+ *
28
+ * `\p{L}` admits letters and `\p{N}` digits; it does NOT admit `"`, `*`, `(` or any other FTS5
29
+ * operator, which is what keeps the joined terms safe to interpolate into a MATCH expression.
30
+ */
19
31
  function tokenize(text: string): string[] {
20
32
  return text
21
33
  .toLowerCase()
22
- .split(/[^a-z0-9]+/)
23
- .filter((token) => token.length > 1);
34
+ .split(/[^\p{L}\p{N}]+/u)
35
+ // Count CODE POINTS, not UTF-16 units. `token.length` counts units, so a single astral letter
36
+ // (`𐐀`, one character, two units) would slip past a floor meant to reject one-character words —
37
+ // an accidental threshold change smuggled in by the alphabet change (cross-family review,
38
+ // 2026-08-21). The promise was "the alphabet, not the thresholds"; this keeps it.
39
+ .filter((token) => [...token].length > 1);
24
40
  }
25
41
 
26
42
  /** Count how many query terms appear in a record's text/skillId. */
@@ -18,12 +18,28 @@ const require = createRequire(import.meta.url);
18
18
 
19
19
  const DEFAULT_LIMIT = 20;
20
20
 
21
- /** Split text into lowercase word tokens of length > 1. */
21
+ /**
22
+ * Split text into lowercase word tokens of length > 1.
23
+ *
24
+ * The class is `\p{L}\p{N}`, not `a-z0-9`. Until 2026-08-21 it was ASCII-only, so every non-Latin
25
+ * letter was a SEPARATOR and a Cyrillic query produced ZERO tokens — the FTS5 branch was then skipped
26
+ * entirely, `relevanceOf` returned 0 for every record, and the sort collapsed onto its confidence
27
+ * tie-break. MEASURED on a 267-record clone of the real brain: RU top-1 0/10 against EN 10/10, while
28
+ * 63% of real recall traffic is Cyrillic. The INDEX was never wrong — FTS5's own tokenizer handles
29
+ * Cyrillic — so nothing on disk needed migrating; only the query was being stripped of its terms.
30
+ *
31
+ * `\p{L}` admits letters and `\p{N}` digits; it does NOT admit `"`, `*`, `(` or any other FTS5
32
+ * operator, which is what keeps the joined terms safe to interpolate into a MATCH expression.
33
+ */
22
34
  function tokenize(text: string): string[] {
23
35
  return text
24
36
  .toLowerCase()
25
- .split(/[^a-z0-9]+/)
26
- .filter((token) => token.length > 1);
37
+ .split(/[^\p{L}\p{N}]+/u)
38
+ // Count CODE POINTS, not UTF-16 units. `token.length` counts units, so a single astral letter
39
+ // (`𐐀`, one character, two units) would slip past a floor meant to reject one-character words —
40
+ // an accidental threshold change smuggled in by the alphabet change (cross-family review,
41
+ // 2026-08-21). The promise was "the alphabet, not the thresholds"; this keeps it.
42
+ .filter((token) => [...token].length > 1);
27
43
  }
28
44
 
29
45
  /** Count how many query terms appear in a record's text/skillId. */