@cleocode/core 2026.8.2 → 2026.8.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (186) hide show
  1. package/dist/check/pr-gate.d.ts.map +1 -1
  2. package/dist/check/pr-gate.js +9 -0
  3. package/dist/check/pr-gate.js.map +1 -1
  4. package/dist/docs/export-document.js +66 -16
  5. package/dist/docs/export-document.js.map +3 -3
  6. package/dist/doctor/index.d.ts +2 -0
  7. package/dist/doctor/index.d.ts.map +1 -1
  8. package/dist/doctor/index.js +1 -0
  9. package/dist/doctor/index.js.map +1 -1
  10. package/dist/doctor/superseded-store.d.ts +101 -0
  11. package/dist/doctor/superseded-store.d.ts.map +1 -0
  12. package/dist/doctor/superseded-store.js +156 -0
  13. package/dist/doctor/superseded-store.js.map +1 -0
  14. package/dist/hooks/registry.d.ts +2 -2
  15. package/dist/hooks/registry.d.ts.map +1 -1
  16. package/dist/hooks/registry.js +5 -0
  17. package/dist/hooks/registry.js.map +1 -1
  18. package/dist/hooks/types.d.ts +59 -0
  19. package/dist/hooks/types.d.ts.map +1 -1
  20. package/dist/init/scaffold-workflows.d.ts +12 -0
  21. package/dist/init/scaffold-workflows.d.ts.map +1 -1
  22. package/dist/init/scaffold-workflows.js +16 -0
  23. package/dist/init/scaffold-workflows.js.map +1 -1
  24. package/dist/init/upgrade-workflows.d.ts.map +1 -1
  25. package/dist/init/upgrade-workflows.js +16 -0
  26. package/dist/init/upgrade-workflows.js.map +1 -1
  27. package/dist/init.d.ts.map +1 -1
  28. package/dist/init.js +16 -1
  29. package/dist/init.js.map +1 -1
  30. package/dist/internal.d.ts +1 -0
  31. package/dist/internal.d.ts.map +1 -1
  32. package/dist/internal.js +2 -0
  33. package/dist/internal.js.map +1 -1
  34. package/dist/llm/credentials.d.ts +16 -1
  35. package/dist/llm/credentials.d.ts.map +1 -1
  36. package/dist/llm/credentials.js.map +1 -1
  37. package/dist/llm/cross-provider-selector.d.ts +25 -0
  38. package/dist/llm/cross-provider-selector.d.ts.map +1 -1
  39. package/dist/llm/cross-provider-selector.js +76 -3
  40. package/dist/llm/cross-provider-selector.js.map +1 -1
  41. package/dist/llm/local-inference-probe.d.ts +101 -0
  42. package/dist/llm/local-inference-probe.d.ts.map +1 -0
  43. package/dist/llm/local-inference-probe.js +174 -0
  44. package/dist/llm/local-inference-probe.js.map +1 -0
  45. package/dist/llm/plugin-facade.js +199 -21
  46. package/dist/llm/plugin-facade.js.map +3 -3
  47. package/dist/llm/role-executor.d.ts.map +1 -1
  48. package/dist/llm/role-executor.js +95 -9
  49. package/dist/llm/role-executor.js.map +1 -1
  50. package/dist/llm/role-resolver.d.ts +10 -0
  51. package/dist/llm/role-resolver.d.ts.map +1 -1
  52. package/dist/llm/role-resolver.js +92 -1
  53. package/dist/llm/role-resolver.js.map +1 -1
  54. package/dist/llm/system-resolver.d.ts.map +1 -1
  55. package/dist/llm/system-resolver.js +2 -0
  56. package/dist/llm/system-resolver.js.map +1 -1
  57. package/dist/memory/brain-search.d.ts +109 -0
  58. package/dist/memory/brain-search.d.ts.map +1 -1
  59. package/dist/memory/brain-search.js +149 -37
  60. package/dist/memory/brain-search.js.map +1 -1
  61. package/dist/memory/brain-stub-prune.d.ts +109 -0
  62. package/dist/memory/brain-stub-prune.d.ts.map +1 -0
  63. package/dist/memory/brain-stub-prune.js +155 -0
  64. package/dist/memory/brain-stub-prune.js.map +1 -0
  65. package/dist/memory/engine-compat.d.ts.map +1 -1
  66. package/dist/memory/engine-compat.js +61 -3
  67. package/dist/memory/engine-compat.js.map +1 -1
  68. package/dist/nexus/analyze-orchestrator.d.ts.map +1 -1
  69. package/dist/nexus/analyze-orchestrator.js +28 -0
  70. package/dist/nexus/analyze-orchestrator.js.map +1 -1
  71. package/dist/nexus/context.d.ts.map +1 -1
  72. package/dist/nexus/context.js +3 -3
  73. package/dist/nexus/context.js.map +1 -1
  74. package/dist/nexus/impact.d.ts.map +1 -1
  75. package/dist/nexus/impact.js +3 -3
  76. package/dist/nexus/impact.js.map +1 -1
  77. package/dist/nexus/symbol-miss.d.ts +132 -0
  78. package/dist/nexus/symbol-miss.d.ts.map +1 -0
  79. package/dist/nexus/symbol-miss.js +168 -0
  80. package/dist/nexus/symbol-miss.js.map +1 -0
  81. package/dist/orchestrate/spawn-ops.d.ts +21 -1
  82. package/dist/orchestrate/spawn-ops.d.ts.map +1 -1
  83. package/dist/orchestrate/spawn-ops.js +39 -2
  84. package/dist/orchestrate/spawn-ops.js.map +1 -1
  85. package/dist/orchestrate/worker-verify.d.ts.map +1 -1
  86. package/dist/orchestrate/worker-verify.js +22 -0
  87. package/dist/orchestrate/worker-verify.js.map +1 -1
  88. package/dist/release/changesets-aggregator.d.ts.map +1 -1
  89. package/dist/release/changesets-aggregator.js +15 -1
  90. package/dist/release/changesets-aggregator.js.map +1 -1
  91. package/dist/release/open.d.ts +29 -2
  92. package/dist/release/open.d.ts.map +1 -1
  93. package/dist/release/open.js +48 -11
  94. package/dist/release/open.js.map +1 -1
  95. package/dist/resources/governor.d.ts +12 -2
  96. package/dist/resources/governor.d.ts.map +1 -1
  97. package/dist/resources/governor.js +12 -3
  98. package/dist/resources/governor.js.map +1 -1
  99. package/dist/scaffold/ensure-dirs.d.ts.map +1 -1
  100. package/dist/scaffold/ensure-dirs.js +14 -2
  101. package/dist/scaffold/ensure-dirs.js.map +1 -1
  102. package/dist/scaffold/project-detection.d.ts.map +1 -1
  103. package/dist/scaffold/project-detection.js +2 -1
  104. package/dist/scaffold/project-detection.js.map +1 -1
  105. package/dist/selfimprove/draft-pr.d.ts +14 -1
  106. package/dist/selfimprove/draft-pr.d.ts.map +1 -1
  107. package/dist/selfimprove/draft-pr.js.map +1 -1
  108. package/dist/selfimprove/fix-gen.d.ts +0 -21
  109. package/dist/selfimprove/fix-gen.d.ts.map +1 -1
  110. package/dist/selfimprove/fix-gen.js +276 -76
  111. package/dist/selfimprove/fix-gen.js.map +3 -3
  112. package/dist/selfimprove/run-loop.d.ts.map +1 -1
  113. package/dist/selfimprove/run-loop.js +50 -19
  114. package/dist/selfimprove/run-loop.js.map +1 -1
  115. package/dist/selfimprove/scenarios/dhq-replay-find/golden.json +114 -4
  116. package/dist/selfimprove/scenarios/dhq-replay-find/scenario.json +3 -3
  117. package/dist/sentient/dream-cycle.d.ts +20 -19
  118. package/dist/sentient/dream-cycle.d.ts.map +1 -1
  119. package/dist/sentient/dream-cycle.js +322 -11
  120. package/dist/sentient/dream-cycle.js.map +1 -1
  121. package/dist/sentient/dream-watermark.d.ts +134 -0
  122. package/dist/sentient/dream-watermark.d.ts.map +1 -0
  123. package/dist/sentient/dream-watermark.js +156 -0
  124. package/dist/sentient/dream-watermark.js.map +1 -0
  125. package/dist/sentient/state.d.ts +17 -0
  126. package/dist/sentient/state.d.ts.map +1 -1
  127. package/dist/sentient/state.js +22 -3
  128. package/dist/sentient/state.js.map +1 -1
  129. package/dist/sentient/tick.d.ts.map +1 -1
  130. package/dist/sentient/tick.js +79 -2
  131. package/dist/sentient/tick.js.map +1 -1
  132. package/dist/sessions/index.d.ts.map +1 -1
  133. package/dist/sessions/index.js +5 -1
  134. package/dist/sessions/index.js.map +1 -1
  135. package/dist/sessions/snapshot.d.ts.map +1 -1
  136. package/dist/sessions/snapshot.js +6 -3
  137. package/dist/sessions/snapshot.js.map +1 -1
  138. package/dist/store/checkpoint-git-dir.d.ts +95 -0
  139. package/dist/store/checkpoint-git-dir.d.ts.map +1 -0
  140. package/dist/store/checkpoint-git-dir.js +111 -0
  141. package/dist/store/checkpoint-git-dir.js.map +1 -0
  142. package/dist/store/git-checkpoint.d.ts.map +1 -1
  143. package/dist/store/git-checkpoint.js +6 -5
  144. package/dist/store/git-checkpoint.js.map +1 -1
  145. package/dist/system/health.d.ts.map +1 -1
  146. package/dist/system/health.js +2 -1
  147. package/dist/system/health.js.map +1 -1
  148. package/dist/tasks/add.d.ts.map +1 -1
  149. package/dist/tasks/add.js +40 -4
  150. package/dist/tasks/add.js.map +1 -1
  151. package/dist/tasks/collection.d.ts +51 -0
  152. package/dist/tasks/collection.d.ts.map +1 -0
  153. package/dist/tasks/collection.js +81 -0
  154. package/dist/tasks/collection.js.map +1 -0
  155. package/dist/tasks/complete.d.ts.map +1 -1
  156. package/dist/tasks/complete.js +8 -3
  157. package/dist/tasks/complete.js.map +1 -1
  158. package/dist/tasks/evidence.d.ts.map +1 -1
  159. package/dist/tasks/evidence.js +17 -0
  160. package/dist/tasks/evidence.js.map +1 -1
  161. package/dist/tasks/find.d.ts +50 -0
  162. package/dist/tasks/find.d.ts.map +1 -1
  163. package/dist/tasks/find.js +63 -2
  164. package/dist/tasks/find.js.map +1 -1
  165. package/dist/tasks/heavy-tool-env.d.ts +112 -0
  166. package/dist/tasks/heavy-tool-env.d.ts.map +1 -0
  167. package/dist/tasks/heavy-tool-env.js +133 -0
  168. package/dist/tasks/heavy-tool-env.js.map +1 -0
  169. package/dist/tasks/index.d.ts +2 -0
  170. package/dist/tasks/index.d.ts.map +1 -1
  171. package/dist/tasks/index.js +1 -0
  172. package/dist/tasks/index.js.map +1 -1
  173. package/dist/tasks/tool-cache.d.ts.map +1 -1
  174. package/dist/tasks/tool-cache.js +9 -3
  175. package/dist/tasks/tool-cache.js.map +1 -1
  176. package/dist/tasks/tool-resolver.d.ts +1 -1
  177. package/dist/tasks/tool-resolver.d.ts.map +1 -1
  178. package/dist/tasks/tool-resolver.js +83 -0
  179. package/dist/tasks/tool-resolver.js.map +1 -1
  180. package/dist/tasks/tool-semaphore.d.ts +82 -12
  181. package/dist/tasks/tool-semaphore.d.ts.map +1 -1
  182. package/dist/tasks/tool-semaphore.js +79 -17
  183. package/dist/tasks/tool-semaphore.js.map +1 -1
  184. package/package.json +13 -13
  185. package/templates/CLEO-INJECTION.md +55 -22
  186. package/templates/workflows/release-prepare.yml.tmpl +73 -16
@@ -251,12 +251,14 @@ function searchWithFts5(nativeDb, query, tables, limit, peerId, includeGlobal =
251
251
  learnings: [],
252
252
  observations: [],
253
253
  };
254
- // Escape FTS5 special characters for safety
255
- const safeQuery = escapeFts5Query(query);
254
+ // T12073: conjunctive-first. `fts5Queries.and` requires every term (high
255
+ // precision); the OR form is used only when AND matches nothing, preserving
256
+ // the recall the disjunctive builder was introduced for (T553).
257
+ const fts5Queries = buildFts5Queries(query);
256
258
  if (tables.includes('decisions')) {
257
259
  const { clause, params } = buildPeerClause('d', peerId, includeGlobal);
258
260
  try {
259
- const rows = typedAll(nativeDb.prepare(`
261
+ const stmt = nativeDb.prepare(`
260
262
  SELECT d.*
261
263
  FROM brain_decisions_fts fts
262
264
  JOIN brain_decisions d ON d.rowid = fts.rowid
@@ -265,7 +267,8 @@ function searchWithFts5(nativeDb, query, tables, limit, peerId, includeGlobal =
265
267
  ${clause}
266
268
  ORDER BY bm25(brain_decisions_fts)
267
269
  LIMIT ?
268
- `), safeQuery, QUALITY_SCORE_THRESHOLD, ...params, limit);
270
+ `);
271
+ const rows = matchConjunctiveFirst((matchExpr) => typedAll(stmt, matchExpr, QUALITY_SCORE_THRESHOLD, ...params, limit), fts5Queries);
269
272
  result.decisions = rows;
270
273
  }
271
274
  catch {
@@ -276,7 +279,7 @@ function searchWithFts5(nativeDb, query, tables, limit, peerId, includeGlobal =
276
279
  if (tables.includes('patterns')) {
277
280
  const { clause, params } = buildPeerClause('p', peerId, includeGlobal);
278
281
  try {
279
- const rows = typedAll(nativeDb.prepare(`
282
+ const stmt = nativeDb.prepare(`
280
283
  SELECT p.*
281
284
  FROM brain_patterns_fts fts
282
285
  JOIN brain_patterns p ON p.rowid = fts.rowid
@@ -285,7 +288,8 @@ function searchWithFts5(nativeDb, query, tables, limit, peerId, includeGlobal =
285
288
  ${clause}
286
289
  ORDER BY bm25(brain_patterns_fts)
287
290
  LIMIT ?
288
- `), safeQuery, QUALITY_SCORE_THRESHOLD, ...params, limit);
291
+ `);
292
+ const rows = matchConjunctiveFirst((matchExpr) => typedAll(stmt, matchExpr, QUALITY_SCORE_THRESHOLD, ...params, limit), fts5Queries);
289
293
  result.patterns = rows;
290
294
  }
291
295
  catch {
@@ -295,7 +299,7 @@ function searchWithFts5(nativeDb, query, tables, limit, peerId, includeGlobal =
295
299
  if (tables.includes('learnings')) {
296
300
  const { clause, params } = buildPeerClause('l', peerId, includeGlobal);
297
301
  try {
298
- const rows = typedAll(nativeDb.prepare(`
302
+ const stmt = nativeDb.prepare(`
299
303
  SELECT l.*
300
304
  FROM brain_learnings_fts fts
301
305
  JOIN brain_learnings l ON l.rowid = fts.rowid
@@ -304,7 +308,8 @@ function searchWithFts5(nativeDb, query, tables, limit, peerId, includeGlobal =
304
308
  ${clause}
305
309
  ORDER BY bm25(brain_learnings_fts)
306
310
  LIMIT ?
307
- `), safeQuery, QUALITY_SCORE_THRESHOLD, ...params, limit);
311
+ `);
312
+ const rows = matchConjunctiveFirst((matchExpr) => typedAll(stmt, matchExpr, QUALITY_SCORE_THRESHOLD, ...params, limit), fts5Queries);
308
313
  result.learnings = rows;
309
314
  }
310
315
  catch {
@@ -314,7 +319,7 @@ function searchWithFts5(nativeDb, query, tables, limit, peerId, includeGlobal =
314
319
  if (tables.includes('observations')) {
315
320
  const { clause, params } = buildPeerClause('o', peerId, includeGlobal);
316
321
  try {
317
- const rows = typedAll(nativeDb.prepare(`
322
+ const stmt = nativeDb.prepare(`
318
323
  SELECT o.*
319
324
  FROM brain_observations_fts fts
320
325
  JOIN brain_observations o ON o.rowid = fts.rowid
@@ -323,7 +328,8 @@ function searchWithFts5(nativeDb, query, tables, limit, peerId, includeGlobal =
323
328
  ${clause}
324
329
  ORDER BY bm25(brain_observations_fts)
325
330
  LIMIT ?
326
- `), safeQuery, QUALITY_SCORE_THRESHOLD, ...params, limit);
331
+ `);
332
+ const rows = matchConjunctiveFirst((matchExpr) => typedAll(stmt, matchExpr, QUALITY_SCORE_THRESHOLD, ...params, limit), fts5Queries);
327
333
  result.observations = rows;
328
334
  }
329
335
  catch {
@@ -424,14 +430,56 @@ function likeSearchObservations(nativeDb, query, limit, peerId, includeGlobal =
424
430
  * ("EPIC:"), because FTS5's default tokenizer cannot index them and the
425
431
  * AND semantics then guaranteed zero matches for the whole query. (T553 bug fix)
426
432
  */
427
- function escapeFts5Query(query) {
433
+ export function escapeFts5Query(query) {
434
+ return buildFts5Queries(query).or;
435
+ }
436
+ /**
437
+ * Build the AND and OR MATCH expressions for a natural-language query.
438
+ *
439
+ * ## Why both, and why prefixes (T12073)
440
+ *
441
+ * The previous builder emitted `"tok1" OR "tok2"` — quoted terms joined by OR.
442
+ * Measured against the live 6,985-observation corpus, that has two failure
443
+ * modes that together make recall useless for anything but an exact rare token:
444
+ *
445
+ * **Quoted terms are exact, so morphological variants are invisible.** A search
446
+ * for `orphan` matched 113 documents; `orphan*` matched 189. Seventy-six
447
+ * documents saying "orphaned" or "orphans" could not be found by searching for
448
+ * "orphan". SQLite FTS5 has no stemmer on the `unicode61` tokenizer, so a
449
+ * prefix wildcard is the available substitute — and it is a good one, because
450
+ * it costs nothing on a prefix-indexed b-tree.
451
+ *
452
+ * **Pure OR plus BM25 ranks by term rarity, not by term coverage.** A short
453
+ * document matching ONE query term outranks a long one matching ALL of them,
454
+ * because BM25 normalises for length. On this corpus that is catastrophic:
455
+ * 30% of observations are sub-60-character auto-capture stubs, so the
456
+ * shortest, emptiest records win. Searching `nexus_symbols_fts orphan` under
457
+ * the old builder returned *"Consolidated: change observations (5 entries)"*
458
+ * as the top hit — a record with no content at all — while the conjunctive
459
+ * form returns only documents about orphans in nexus.
460
+ *
461
+ * So: require all terms first, and fall back to ANY only when the conjunction
462
+ * finds nothing. That preserves the recall the OR form was introduced for
463
+ * (T553: non-word tokens like em dashes zeroing out an implicit-AND query)
464
+ * without letting it dominate the common case.
465
+ *
466
+ * @param query - the raw user query.
467
+ * @returns AND/OR MATCH expressions and the usable term count.
468
+ *
469
+ * @example
470
+ * ```ts
471
+ * const q = buildFts5Queries('nexus_symbols_fts orphan');
472
+ * // q.and === 'nexus_symbols_fts* AND orphan*'
473
+ * // q.or === 'nexus_symbols_fts* OR orphan*'
474
+ * ```
475
+ *
476
+ * @task T553
477
+ * @task T12073
478
+ */
479
+ export function buildFts5Queries(query) {
428
480
  const rawTokens = query.trim().split(/\s+/).filter(Boolean);
429
- if (rawTokens.length === 0)
430
- return '""';
431
- // Keep tokens that have at least one alphanumeric character and are not
432
- // pure stop-words (length ≥ 2 after stripping leading/trailing punctuation).
433
481
  const seen = new Set();
434
- const tokens = [];
482
+ const terms = [];
435
483
  for (const t of rawTokens) {
436
484
  // Strip leading/trailing non-word characters (e.g. "EPIC:" → "EPIC", "—" → "")
437
485
  const stripped = t.replace(/^\W+|\W+$/g, '');
@@ -443,12 +491,31 @@ function escapeFts5Query(query) {
443
491
  if (seen.has(lower))
444
492
  continue; // deduplicate
445
493
  seen.add(lower);
446
- tokens.push(`"${stripped.replace(/"/g, '""')}"`);
494
+ // Quote to neutralise FTS5 syntax characters, then append the prefix
495
+ // operator OUTSIDE the quotes — `"foo"*` is the documented way to combine
496
+ // a quoted string with a prefix match.
497
+ terms.push(`"${stripped.replace(/"/g, '""')}"*`);
447
498
  }
448
- if (tokens.length === 0)
449
- return '""';
450
- // OR semantics: any matching token returns the row, ranked by BM25 relevance.
451
- return tokens.join(' OR ');
499
+ if (terms.length === 0)
500
+ return { and: '""', or: '""', termCount: 0 };
501
+ return { and: terms.join(' AND '), or: terms.join(' OR '), termCount: terms.length };
502
+ }
503
+ /**
504
+ * Run an FTS5-backed query conjunctively, falling back to disjunctive.
505
+ *
506
+ * Single-term queries skip the fallback entirely (AND and OR are identical).
507
+ *
508
+ * @param run - executes one MATCH expression and returns its rows.
509
+ * @param queries - the pair from {@link buildFts5Queries}.
510
+ * @returns conjunctive rows when non-empty, else disjunctive rows.
511
+ *
512
+ * @task T12073
513
+ */
514
+ export function matchConjunctiveFirst(run, queries) {
515
+ const conjunctive = run(queries.and);
516
+ if (conjunctive.length > 0 || queries.termCount < 2)
517
+ return conjunctive;
518
+ return run(queries.or);
452
519
  }
453
520
  /**
454
521
  * Reset the cached FTS5 availability flag.
@@ -469,6 +536,36 @@ export function resetFts5Cache() {
469
536
  * standard value from Cormack, Clarke & Buettcher (SIGIR 2009).
470
537
  */
471
538
  export const RRF_K = 60;
539
+ /**
540
+ * Round-robin interleave several independently-ranked lists.
541
+ *
542
+ * Takes rank 1 from every list, then rank 2 from every list, and so on, so a
543
+ * downstream consumer that scores by array position does not systematically
544
+ * favour whichever list happened to be concatenated first.
545
+ *
546
+ * @param lists - per-source lists, each already ordered best-first.
547
+ * @returns a single list preserving each source's internal order.
548
+ *
549
+ * @example
550
+ * ```ts
551
+ * interleaveRanked([['a1', 'a2'], ['b1'], ['c1', 'c2', 'c3']]);
552
+ * // ['a1', 'b1', 'c1', 'a2', 'c2', 'c3']
553
+ * ```
554
+ *
555
+ * @task T12073
556
+ */
557
+ export function interleaveRanked(lists) {
558
+ const out = [];
559
+ const longest = lists.reduce((max, l) => Math.max(max, l.length), 0);
560
+ for (let i = 0; i < longest; i++) {
561
+ for (const list of lists) {
562
+ const item = list[i];
563
+ if (item !== undefined)
564
+ out.push(item);
565
+ }
566
+ }
567
+ return out;
568
+ }
472
569
  /**
473
570
  * Fuse ranked lists from multiple retrieval sources using Reciprocal Rank Fusion.
474
571
  *
@@ -601,34 +698,49 @@ export async function hybridSearch(query, projectRoot, options) {
601
698
  const vecResults = allResults[1];
602
699
  const codeResults = (includeCode ? (allResults[2] ?? []) : []);
603
700
  // --- 2. Project FTS results into ranked RrfHit list ---
604
- const ftsHits = [];
605
- for (const d of ftsResults.decisions) {
606
- ftsHits.push({
701
+ //
702
+ // T12073: INTERLEAVE the four tables instead of concatenating them.
703
+ //
704
+ // RRF scores a hit by its POSITION in this array. Concatenating
705
+ // decisions → patterns → learnings → observations therefore encoded a fixed
706
+ // precedence that has nothing to do with relevance: every decision outranked
707
+ // every observation, always. With 128 decisions and 6,985 observations, the
708
+ // largest and most recent store was structurally the least reachable —
709
+ // `cleo memory find "caamp marker"` returned unrelated learnings while the
710
+ // ONE observation matching both terms (verified by direct MATCH) never
711
+ // placed.
712
+ //
713
+ // Each table is already BM25-ordered internally. Round-robin interleaving
714
+ // preserves that intra-table ordering while removing the inter-table bias,
715
+ // and avoids comparing BM25 scores across separate indexes — which is not
716
+ // meaningful, since each has its own corpus statistics.
717
+ const ftsRanked = [
718
+ ftsResults.decisions.map((d) => ({
607
719
  id: d.id,
608
720
  type: 'decision',
609
721
  title: d.decision,
610
722
  text: `${d.decision} — ${d.rationale}`,
611
- });
612
- }
613
- for (const p of ftsResults.patterns) {
614
- ftsHits.push({
723
+ })),
724
+ ftsResults.patterns.map((p) => ({
615
725
  id: p.id,
616
726
  type: 'pattern',
617
727
  title: p.pattern,
618
728
  text: `${p.pattern} — ${p.context}`,
619
- });
620
- }
621
- for (const l of ftsResults.learnings) {
622
- ftsHits.push({
729
+ })),
730
+ ftsResults.learnings.map((l) => ({
623
731
  id: l.id,
624
732
  type: 'learning',
625
733
  title: l.insight,
626
734
  text: `${l.insight} (source: ${l.source})`,
627
- });
628
- }
629
- for (const o of ftsResults.observations) {
630
- ftsHits.push({ id: o.id, type: 'observation', title: o.title, text: o.narrative ?? o.title });
631
- }
735
+ })),
736
+ ftsResults.observations.map((o) => ({
737
+ id: o.id,
738
+ type: 'observation',
739
+ title: o.title,
740
+ text: o.narrative ?? o.title,
741
+ })),
742
+ ];
743
+ const ftsHits = interleaveRanked(ftsRanked);
632
744
  // --- 3. Project vector results into ranked RrfHit list (ascending distance = descending quality) ---
633
745
  const vecHits = vecResults.map((r) => ({
634
746
  id: r.id,
@@ -1 +1 @@
1
- {"version":3,"file":"brain-search.js","sourceRoot":"","sources":["../../src/memory/brain-search.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAO/D,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAEnD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAuC/D,mEAAmE;AACnE,IAAI,cAAc,GAAmB,IAAI,CAAC;AAE1C,2EAA2E;AAC3E,IAAI,gBAAgB,GAAG,KAAK,CAAC;AAE7B;;GAEG;AACH,SAAS,kBAAkB,CAAC,QAAsB;IAChD,IAAI,cAAc,KAAK,IAAI;QAAE,OAAO,cAAc,CAAC;IACnD,IAAI,CAAC;QACH,sCAAsC;QACtC,QAAQ,CAAC,OAAO,CAAC,iEAAiE,CAAC,CAAC,GAAG,EAAE,CAAC;QAC1F,QAAQ,CAAC,OAAO,CAAC,kCAAkC,CAAC,CAAC,GAAG,EAAE,CAAC;QAC3D,cAAc,GAAG,IAAI,CAAC;IACxB,CAAC;IAAC,MAAM,CAAC;QACP,cAAc,GAAG,KAAK,CAAC;IACzB,CAAC;IACD,OAAO,cAAc,CAAC;AACxB,CAAC;AAED;;;GAGG;AACH,SAAS,OAAO,CAAC,QAAsB,EAAE,GAAW;IAClD,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;AAC9B,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,gBAAgB,CAAC,QAAsB;IACrD,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,EAAE,CAAC;QAClC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,gBAAgB;IAChB,OAAO,CACL,QAAQ,EACR;;;GAGD,CACA,CAAC;IAEF,eAAe;IACf,OAAO,CACL,QAAQ,EACR;;;GAGD,CACA,CAAC;IAEF,gBAAgB;IAChB,OAAO,CACL,QAAQ,EACR;;;GAGD,CACA,CAAC;IAEF,sCAAsC;IACtC,OAAO,CACL,QAAQ,EACR;;;;;GAKD,CACA,CAAC;IACF,OAAO,CACL,QAAQ,EACR;;;;;GAKD,CACA,CAAC;IACF,OAAO,CACL,QAAQ,EACR;;;;;;;GAOD,CACA,CAAC;IAEF,qCAAqC;IACrC,OAAO,CACL,QAAQ,EACR;;;;;GAKD,CACA,CAAC;IACF,OAAO,CACL,QAAQ,EACR;;;;;GAKD,CACA,CAAC;IACF,OAAO,CACL,QAAQ,EACR;;;;;;;GAOD,CACA,CAAC;IAEF,sCAAsC;IACtC,OAAO,CACL,QAAQ,EACR;;;;;GAKD,CACA,CAAC;IACF,OAAO,CACL,QAAQ,EACR;;;;;GAKD,CACA,CAAC;IACF,OAAO,CACL,QAAQ,EACR;;;;;;;GAOD,CACA,CAAC;IAEF,mBAAmB;IACnB,OAAO,CACL,QAAQ,EACR;;;GAGD,CACA,CAAC;IAEF,yCAAyC;IACzC,OAAO,CACL,QAAQ,EACR;;;;;GAKD,CACA,CAAC;IACF,OAAO,CACL,QAAQ,EACR;;;;;GAKD,CACA,CAAC;IACF,OAAO,CACL,QAAQ,EACR;;;;;;;GAOD,CACA,CAAC;IAEF,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAAC,QAAsB;IACrD,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,EAAE,CAAC;QAClC,OAAO;IACT,CAAC;IAED,QAAQ,CAAC,OAAO,CAAC,wEAAwE,CAAC,CAAC,GAAG,EAAE,CAAC;IACjG,QAAQ,CAAC,OAAO,CAAC,sEAAsE,CAAC,CAAC,GAAG,EAAE,CAAC;IAC/F,QAAQ,CAAC,OAAO,CAAC,wEAAwE,CAAC,CAAC,GAAG,EAAE,CAAC;IAEjG,kEAAkE;IAClE,IAAI,CAAC;QACH,QAAQ;aACL,OAAO,CAAC,8EAA8E,CAAC;aACvF,GAAG,EAAE,CAAC;IACX,CAAC;IAAC,MAAM,CAAC;QACP,gDAAgD;IAClD,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,WAAmB,EACnB,KAAa,EACb,OAA4B;IAE5B,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC;QACnB,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC;IAC1E,CAAC;IAED,iCAAiC;IACjC,MAAM,EAAE,UAAU,EAAE,gBAAgB,EAAE,GAAG,MAAM,MAAM,CAAC,2BAA2B,CAAC,CAAC;IACnF,MAAM,UAAU,CAAC,WAAW,CAAC,CAAC;IAC9B,MAAM,QAAQ,GAAG,gBAAgB,CAAC,WAAW,CAAC,CAAC;IAE/C,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC;IAC1E,CAAC;IAED,MAAM,KAAK,GAAG,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC;IACnC,MAAM,MAAM,GAAG,OAAO,EAAE,MAAM,IAAI,CAAC,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,cAAc,CAAC,CAAC;IACzF,MAAM,MAAM,GAAG,OAAO,EAAE,MAAM,CAAC;IAC/B,MAAM,aAAa,GAAG,OAAO,EAAE,aAAa,IAAI,IAAI,CAAC;IAErD,MAAM,YAAY,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAEhD,IAAI,YAAY,EAAE,CAAC;QACjB,gEAAgE;QAChE,qDAAqD;QACrD,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACtB,gBAAgB,GAAG,IAAI,CAAC;YACxB,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QAC7B,CAAC;QACD,OAAO,cAAc,CAAC,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC;IAC/E,CAAC;IAED,OAAO,cAAc,CAAC,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC;AAC/E,CAAC;AAED;;;;;;;;;;;GAWG;AACH,SAAS,eAAe,CACtB,UAAkB,EAClB,MAA0B,EAC1B,aAAsB;IAEtB,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;IAC/C,IAAI,aAAa,EAAE,CAAC;QAClB,OAAO;YACL,MAAM,EAAE,SAAS,UAAU,mBAAmB,UAAU,sBAAsB;YAC9E,MAAM,EAAE,CAAC,MAAM,CAAC;SACjB,CAAC;IACJ,CAAC;IACD,OAAO;QACL,MAAM,EAAE,QAAQ,UAAU,cAAc;QACxC,MAAM,EAAE,CAAC,MAAM,CAAC;KACjB,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,cAAc,CACrB,QAAsB,EACtB,KAAa,EACb,MAAsE,EACtE,KAAa,EACb,MAAe,EACf,aAAa,GAAG,IAAI;IAEpB,MAAM,MAAM,GAA4B;QACtC,SAAS,EAAE,EAAE;QACb,QAAQ,EAAE,EAAE;QACZ,SAAS,EAAE,EAAE;QACb,YAAY,EAAE,EAAE;KACjB,CAAC;IAEF,4CAA4C;IAC5C,MAAM,SAAS,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;IAEzC,IAAI,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;QACjC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC;QACvE,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,QAAQ,CACnB,QAAQ,CAAC,OAAO,CAAC;;;;;;YAMb,MAAM;;;OAGX,CAAC,EACA,SAAS,EACT,uBAAuB,EACvB,GAAG,MAAM,EACT,KAAK,CACN,CAAC;YACF,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC;QAC1B,CAAC;QAAC,MAAM,CAAC;YACP,qDAAqD;YACrD,MAAM,CAAC,SAAS,GAAG,mBAAmB,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC;QACxF,CAAC;IACH,CAAC;IAED,IAAI,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QAChC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC;QACvE,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,QAAQ,CACnB,QAAQ,CAAC,OAAO,CAAC;;;;;;YAMb,MAAM;;;OAGX,CAAC,EACA,SAAS,EACT,uBAAuB,EACvB,GAAG,MAAM,EACT,KAAK,CACN,CAAC;YACF,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC;QACzB,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,CAAC,QAAQ,GAAG,kBAAkB,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC;QACtF,CAAC;IACH,CAAC;IAED,IAAI,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;QACjC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC;QACvE,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,QAAQ,CACnB,QAAQ,CAAC,OAAO,CAAC;;;;;;YAMb,MAAM;;;OAGX,CAAC,EACA,SAAS,EACT,uBAAuB,EACvB,GAAG,MAAM,EACT,KAAK,CACN,CAAC;YACF,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC;QAC1B,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,CAAC,SAAS,GAAG,mBAAmB,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC;QACxF,CAAC;IACH,CAAC;IAED,IAAI,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;QACpC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC;QACvE,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,QAAQ,CACnB,QAAQ,CAAC,OAAO,CAAC;;;;;;YAMb,MAAM;;;OAGX,CAAC,EACA,SAAS,EACT,uBAAuB,EACvB,GAAG,MAAM,EACT,KAAK,CACN,CAAC;YACF,MAAM,CAAC,YAAY,GAAG,IAAI,CAAC;QAC7B,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,CAAC,YAAY,GAAG,sBAAsB,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC;QAC9F,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,SAAS,cAAc,CACrB,QAAsB,EACtB,KAAa,EACb,MAAsE,EACtE,KAAa,EACb,MAAe,EACf,aAAa,GAAG,IAAI;IAEpB,MAAM,MAAM,GAA4B;QACtC,SAAS,EAAE,EAAE;QACb,QAAQ,EAAE,EAAE;QACZ,SAAS,EAAE,EAAE;QACb,YAAY,EAAE,EAAE;KACjB,CAAC;IAEF,IAAI,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;QACjC,MAAM,CAAC,SAAS,GAAG,mBAAmB,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC;IACxF,CAAC;IAED,IAAI,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QAChC,MAAM,CAAC,QAAQ,GAAG,kBAAkB,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC;IACtF,CAAC;IAED,IAAI,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;QACjC,MAAM,CAAC,SAAS,GAAG,mBAAmB,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC;IACxF,CAAC;IAED,IAAI,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;QACpC,MAAM,CAAC,YAAY,GAAG,sBAAsB,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC;IAC9F,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,mBAAmB,CAC1B,QAAsB,EACtB,KAAa,EACb,KAAa,EACb,MAAe,EACf,aAAa,GAAG,IAAI;IAEpB,MAAM,WAAW,GAAG,IAAI,KAAK,GAAG,CAAC;IACjC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,eAAe,CAAC,iBAAiB,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC;IACrF,OAAO,QAAQ,CACb,QAAQ,CAAC,OAAO,CAAC;;;;QAIb,MAAM;;;GAGX,CAAC,EACA,WAAW,EACX,WAAW,EACX,uBAAuB,EACvB,GAAG,MAAM,EACT,KAAK,CACN,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB,CACzB,QAAsB,EACtB,KAAa,EACb,KAAa,EACb,MAAe,EACf,aAAa,GAAG,IAAI;IAEpB,MAAM,WAAW,GAAG,IAAI,KAAK,GAAG,CAAC;IACjC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,eAAe,CAAC,gBAAgB,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC;IACpF,OAAO,QAAQ,CACb,QAAQ,CAAC,OAAO,CAAC;;;;QAIb,MAAM;;;GAGX,CAAC,EACA,WAAW,EACX,WAAW,EACX,uBAAuB,EACvB,GAAG,MAAM,EACT,KAAK,CACN,CAAC;AACJ,CAAC;AAED,SAAS,mBAAmB,CAC1B,QAAsB,EACtB,KAAa,EACb,KAAa,EACb,MAAe,EACf,aAAa,GAAG,IAAI;IAEpB,MAAM,WAAW,GAAG,IAAI,KAAK,GAAG,CAAC;IACjC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,eAAe,CAAC,iBAAiB,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC;IACrF,OAAO,QAAQ,CACb,QAAQ,CAAC,OAAO,CAAC;;;;QAIb,MAAM;;;GAGX,CAAC,EACA,WAAW,EACX,WAAW,EACX,uBAAuB,EACvB,GAAG,MAAM,EACT,KAAK,CACN,CAAC;AACJ,CAAC;AAED,SAAS,sBAAsB,CAC7B,QAAsB,EACtB,KAAa,EACb,KAAa,EACb,MAAe,EACf,aAAa,GAAG,IAAI;IAEpB,MAAM,WAAW,GAAG,IAAI,KAAK,GAAG,CAAC;IACjC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,eAAe,CAAC,oBAAoB,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC;IACxF,OAAO,QAAQ,CACb,QAAQ,CAAC,OAAO,CAAC;;;;QAIb,MAAM;;;GAGX,CAAC,EACA,WAAW,EACX,WAAW,EACX,uBAAuB,EACvB,GAAG,MAAM,EACT,KAAK,CACN,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,SAAS,eAAe,CAAC,KAAa;IACpC,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC5D,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAExC,wEAAwE;IACxE,6EAA6E;IAC7E,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;QAC1B,+EAA+E;QAC/E,MAAM,QAAQ,GAAG,CAAC,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;QAC7C,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;YAAE,SAAS,CAAC,kCAAkC;QACrE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;YAAE,SAAS,CAAC,iCAAiC;QACrE,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;QACrC,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;YAAE,SAAS,CAAC,cAAc;QAC7C,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAChB,MAAM,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;IACnD,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAErC,8EAA8E;IAC9E,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC7B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc;IAC5B,cAAc,GAAG,IAAI,CAAC;IACtB,gBAAgB,GAAG,KAAK,CAAC;AAC3B,CAAC;AAED,+EAA+E;AAC/E,kDAAkD;AAClD,+EAA+E;AAE/E;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;AA0BxB;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,UAAU,oBAAoB,CAClC,OAGE,EACF,IAAY,KAAK;IAEjB,2CAA2C;IAC3C,MAAM,KAAK,GAAG,IAAI,GAAG,EAWlB,CAAC;IAEJ,KAAK,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,OAAO,EAAE,CAAC;QACvC,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC;YAC9C,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAE,CAAC;YACxB,MAAM,YAAY,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;YAEpC,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACnC,IAAI,QAAQ,EAAE,CAAC;gBACb,QAAQ,CAAC,QAAQ,IAAI,YAAY,CAAC;gBAClC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;gBAC7B,IAAI,MAAM,KAAK,KAAK;oBAAE,QAAQ,CAAC,OAAO,GAAG,IAAI,CAAC;gBAC9C,IAAI,MAAM,KAAK,KAAK;oBAAE,QAAQ,CAAC,OAAO,GAAG,IAAI,CAAC;YAChD,CAAC;iBAAM,CAAC;gBACN,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE;oBAChB,QAAQ,EAAE,YAAY;oBACtB,IAAI,EAAE,GAAG,CAAC,IAAI;oBACd,KAAK,EAAE,GAAG,CAAC,KAAK;oBAChB,IAAI,EAAE,GAAG,CAAC,IAAI;oBACd,OAAO,EAAE,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC;oBAC1B,OAAO,EAAE,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;oBAC5C,OAAO,EAAE,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;iBAC7C,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC;SACxB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;QACpB,EAAE;QACF,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,CAA4C;QACrE,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,OAAO,EAAE,IAAI,CAAC,OAAO;KACtB,CAAC,CAAC;SACF,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;AAC7C,CAAC;AAsCD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,KAAa,EACb,WAAmB,EACnB,OAA6B;IAE7B,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE;QAAE,OAAO,EAAE,CAAC;IAE9B,MAAM,UAAU,GAAG,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC;IACxC,MAAM,IAAI,GAAG,OAAO,EAAE,IAAI,IAAI,KAAK,CAAC;IACpC,MAAM,WAAW,GAAG,OAAO,EAAE,WAAW,IAAI,KAAK,CAAC;IAElD,kEAAkE;IAClE,MAAM,QAAQ,GAAuB;QACnC,WAAW,CAAC,WAAW,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,UAAU,GAAG,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;YACtE,SAAS,EAAE,EAAE;YACb,QAAQ,EAAE,EAAE;YACZ,SAAS,EAAE,EAAE;YACb,YAAY,EAAE,EAAE;SACjB,CAAC,CAAC;QACH,aAAa,CAAC,KAAK,EAAE,WAAW,EAAE,UAAU,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAwB,CAAC;KACxF,CAAC;IAEF,iCAAiC;IACjC,IAAI,iBAAiB,GAEV,IAAI,CAAC;IAChB,IAAI,WAAW,EAAE,CAAC;QAChB,iBAAiB,GAAG,CAAC,KAAK,IAAI,EAAE;YAC9B,IAAI,CAAC;gBACH,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAC;gBACxD,MAAM,OAAO,GAAG,WAAW,CAAC,KAAK,EAAE;oBACjC,UAAU,EAAE,UAAU,GAAG,CAAC;oBAC1B,OAAO,EAAE,WAAW;iBACrB,CAAC,CAAC;gBACH,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;oBACzB,EAAE,EAAE,QAAQ,CAAC,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE;oBACtE,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI;oBACpB,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI;oBACnB,KAAK,EAAE,CAAC,CAAC,KAAK;iBACf,CAAC,CAAC,CAAC;YACN,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,EAAE,CAAC;YACZ,CAAC;QACH,CAAC,CAAC,EAAE,CAAC;QACL,QAAQ,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IACnC,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC/C,MAAM,UAAU,GAAG,UAAU,CAAC,CAAC,CAA4B,CAAC;IAC5D,MAAM,UAAU,GAAG,UAAU,CAAC,CAAC,CAAuB,CAAC;IACvD,MAAM,WAAW,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAK3D,CAAC;IAEH,yDAAyD;IACzD,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,KAAK,MAAM,CAAC,IAAI,UAAU,CAAC,SAAS,EAAE,CAAC;QACrC,OAAO,CAAC,IAAI,CAAC;YACX,EAAE,EAAE,CAAC,CAAC,EAAE;YACR,IAAI,EAAE,UAAU;YAChB,KAAK,EAAE,CAAC,CAAC,QAAQ;YACjB,IAAI,EAAE,GAAG,CAAC,CAAC,QAAQ,MAAM,CAAC,CAAC,SAAS,EAAE;SACvC,CAAC,CAAC;IACL,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,UAAU,CAAC,QAAQ,EAAE,CAAC;QACpC,OAAO,CAAC,IAAI,CAAC;YACX,EAAE,EAAE,CAAC,CAAC,EAAE;YACR,IAAI,EAAE,SAAS;YACf,KAAK,EAAE,CAAC,CAAC,OAAO;YAChB,IAAI,EAAE,GAAG,CAAC,CAAC,OAAO,MAAM,CAAC,CAAC,OAAO,EAAE;SACpC,CAAC,CAAC;IACL,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,UAAU,CAAC,SAAS,EAAE,CAAC;QACrC,OAAO,CAAC,IAAI,CAAC;YACX,EAAE,EAAE,CAAC,CAAC,EAAE;YACR,IAAI,EAAE,UAAU;YAChB,KAAK,EAAE,CAAC,CAAC,OAAO;YAChB,IAAI,EAAE,GAAG,CAAC,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,GAAG;SAC3C,CAAC,CAAC;IACL,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,UAAU,CAAC,YAAY,EAAE,CAAC;QACxC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;IAChG,CAAC;IAED,sGAAsG;IACtG,MAAM,OAAO,GAAa,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC/C,EAAE,EAAE,CAAC,CAAC,EAAE;QACR,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,KAAK,EAAE,CAAC,CAAC,KAAK;QACd,IAAI,EAAE,CAAC,CAAC,IAAI;KACb,CAAC,CAAC,CAAC;IAEJ,0DAA0D;IAC1D,MAAM,QAAQ,GAAa,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACjD,EAAE,EAAE,CAAC,CAAC,EAAE;QACR,IAAI,EAAE,aAAa;QACnB,KAAK,EAAE,CAAC,CAAC,KAAK;QACd,IAAI,EAAE,GAAG,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,IAAI,GAAG;KAC/B,CAAC,CAAC,CAAC;IAEJ,uCAAuC;IACvC,MAAM,UAAU,GAAwE,EAAE,CAAC;IAC3F,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;QAAE,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;IAC1E,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;QAAE,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;IAC1E,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;QAAE,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;IAE7E,oDAAoD;IACpD,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,gBAAgB,CAAC,WAAW,CAAC,CAAC;QACrD,MAAM,eAAe,GAAG;YACtB,WAAW,KAAK,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE;YACrD,QAAQ,KAAK,EAAE;YACf,OAAO,KAAK,EAAE;SACf,CAAC;QAEF,MAAM,SAAS,GAAa,EAAE,CAAC;QAC/B,KAAK,MAAM,MAAM,IAAI,eAAe,EAAE,CAAC;YACrC,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YAChD,IAAI,CAAC,IAAI;gBAAE,SAAS;YACpB,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;YACtD,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;gBACjC,SAAS,CAAC,IAAI,CAAC;oBACb,EAAE,EAAE,QAAQ,CAAC,EAAE;oBACf,IAAI,EAAE,QAAQ,CAAC,QAAQ;oBACvB,KAAK,EAAE,QAAQ,CAAC,KAAK;oBACrB,IAAI,EAAE,QAAQ,CAAC,KAAK;iBACrB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QACD,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC;YAAE,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;IAClF,CAAC;IAAC,MAAM,CAAC;QACP,oEAAoE;IACtE,CAAC;IAED,4CAA4C;IAC5C,MAAM,KAAK,GAAG,oBAAoB,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;IAErD,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC5C,EAAE,EAAE,CAAC,CAAC,EAAE;QACR,KAAK,EAAE,CAAC,CAAC,QAAQ;QACjB,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,KAAK,EAAE,CAAC,CAAC,KAAK;QACd,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,OAAO,EAAE,CAAC,CAAC,OAAO;QAClB,OAAO,EAAE,CAAC,CAAC,OAAO;QAClB,OAAO,EAAE,CAAC,CAAC,OAAO;KACnB,CAAC,CAAC,CAAC;AACN,CAAC"}
1
+ {"version":3,"file":"brain-search.js","sourceRoot":"","sources":["../../src/memory/brain-search.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,109 @@
1
+ /**
2
+ * Targeted prune of content-free BRAIN observations (T12073).
3
+ *
4
+ * ## Why (measured, 2026-08-06)
5
+ *
6
+ * Of 6,985 observations in this project's BRAIN:
7
+ *
8
+ * | count | share | shape |
9
+ * |-------|-------|------------------------------------------------|
10
+ * | 2,012 | 29% | narrative contains the literal `status: undefined` |
11
+ * | 2,035 | 29% | auto-hook `Task start:` / `Task complete:` stubs |
12
+ * | 2,064 | 30% | narrative under 60 characters |
13
+ * | 481 | 6.9% | narrative over 800 characters — i.e. substantive |
14
+ *
15
+ * The `status: undefined` rows are pure artefact: `PostToolUse` was dispatched
16
+ * with a field name the payload does not declare, so `handleToolComplete`
17
+ * interpolated `undefined` into every completion record. That defect is fixed
18
+ * (T12071) and can no longer produce new rows — but the existing ones remain,
19
+ * and they are not merely inert. FTS5's BM25 normalises for document length,
20
+ * so a 44-character record OUTRANKS a 4,000-character one for any term they
21
+ * share. The junk actively buries the knowledge.
22
+ *
23
+ * ## Safety
24
+ *
25
+ * This module is deliberately NOT the older `purgeBrainNoise`, which is a
26
+ * one-shot script hardcoded to a historical state: it deletes every learning,
27
+ * every decision but one specific id, and logs to stdout. Running it today
28
+ * would destroy 127 learnings and 127 decisions.
29
+ *
30
+ * Here, instead:
31
+ *
32
+ * - **Dry-run is the default.** Deleting requires an explicit `apply`.
33
+ * - Only OBSERVATIONS are considered. Decisions, patterns and learnings are
34
+ * never touched.
35
+ * - A row is a candidate only if it matches a named, narrow rule AND its
36
+ * narrative is under {@link MAX_STUB_NARRATIVE} characters, so a long
37
+ * record that merely happens to quote one of these strings survives.
38
+ * - Rows carrying `verified = 1` are always preserved.
39
+ * - The result reports per-rule counts and a sample, so the caller can see
40
+ * what would go before anything does.
41
+ *
42
+ * @task T12073
43
+ */
44
+ import type { DatabaseSync } from 'node:sqlite';
45
+ /**
46
+ * Longest narrative still eligible for pruning.
47
+ *
48
+ * A genuine write-up that happens to contain "status: undefined" (this
49
+ * module's own documentation, for instance, or a post-mortem describing the
50
+ * bug) is far longer than this and is therefore never a candidate.
51
+ */
52
+ export declare const MAX_STUB_NARRATIVE = 200;
53
+ /** A named prune rule with its SQL predicate. */
54
+ export interface StubPruneRule {
55
+ /** Stable identifier, reported in {@link StubPruneResult.byRule}. */
56
+ readonly id: string;
57
+ /** One-line explanation of what this rule removes and why it is safe. */
58
+ readonly reason: string;
59
+ /** SQL predicate over `brain_observations`, ANDed with the global guards. */
60
+ readonly predicate: string;
61
+ }
62
+ /**
63
+ * The prune rules, each narrow and independently justified.
64
+ *
65
+ * Every predicate is ANDed with `length(narrative) <= MAX_STUB_NARRATIVE` and
66
+ * `verified IS NOT 1`, so no rule can reach a substantive or human-confirmed
67
+ * record on its own.
68
+ */
69
+ export declare const STUB_PRUNE_RULES: readonly StubPruneRule[];
70
+ /** One candidate row, for reporting. */
71
+ export interface StubPruneCandidate {
72
+ readonly id: string;
73
+ readonly title: string;
74
+ readonly narrative: string;
75
+ readonly rule: string;
76
+ }
77
+ /** Outcome of a prune run. */
78
+ export interface StubPruneResult {
79
+ /** Whether rows were actually deleted (`false` = dry run). */
80
+ readonly applied: boolean;
81
+ /** Observation count before the run. */
82
+ readonly before: number;
83
+ /** Observation count after (equals `before` on a dry run). */
84
+ readonly after: number;
85
+ /** Number of rows matched (and deleted, when `applied`). */
86
+ readonly matched: number;
87
+ /** Per-rule match counts, keyed by {@link StubPruneRule.id}. */
88
+ readonly byRule: Record<string, number>;
89
+ /** Up to 5 example rows, so a dry run shows what would go. */
90
+ readonly sample: readonly StubPruneCandidate[];
91
+ }
92
+ /**
93
+ * Count, sample and optionally delete content-free observation stubs.
94
+ *
95
+ * @param nativeDb - open handle to the database holding `brain_observations`.
96
+ * @param apply - when `true`, delete the matched rows; otherwise report only.
97
+ * @returns counts, per-rule breakdown and a sample of matched rows.
98
+ *
99
+ * @example
100
+ * ```ts
101
+ * const preview = pruneObservationStubs(db, false);
102
+ * console.log(`${preview.matched} of ${preview.before} observations are stubs`);
103
+ * if (preview.matched > 0) pruneObservationStubs(db, true);
104
+ * ```
105
+ *
106
+ * @task T12073
107
+ */
108
+ export declare function pruneObservationStubs(nativeDb: DatabaseSync, apply: boolean): StubPruneResult;
109
+ //# sourceMappingURL=brain-stub-prune.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"brain-stub-prune.d.ts","sourceRoot":"","sources":["../../src/memory/brain-stub-prune.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD;;;;;;GAMG;AACH,eAAO,MAAM,kBAAkB,MAAM,CAAC;AAEtC,iDAAiD;AACjD,MAAM,WAAW,aAAa;IAC5B,qEAAqE;IACrE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,yEAAyE;IACzE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,6EAA6E;IAC7E,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED;;;;;;GAMG;AACH,eAAO,MAAM,gBAAgB,EAAE,SAAS,aAAa,EAoBpD,CAAC;AAEF,wCAAwC;AACxC,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,8BAA8B;AAC9B,MAAM,WAAW,eAAe;IAC9B,8DAA8D;IAC9D,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,wCAAwC;IACxC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,8DAA8D;IAC9D,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,4DAA4D;IAC5D,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,gEAAgE;IAChE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,8DAA8D;IAC9D,QAAQ,CAAC,MAAM,EAAE,SAAS,kBAAkB,EAAE,CAAC;CAChD;AAYD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,YAAY,EAAE,KAAK,EAAE,OAAO,GAAG,eAAe,CAkD7F"}
@@ -0,0 +1,155 @@
1
+ /**
2
+ * Targeted prune of content-free BRAIN observations (T12073).
3
+ *
4
+ * ## Why (measured, 2026-08-06)
5
+ *
6
+ * Of 6,985 observations in this project's BRAIN:
7
+ *
8
+ * | count | share | shape |
9
+ * |-------|-------|------------------------------------------------|
10
+ * | 2,012 | 29% | narrative contains the literal `status: undefined` |
11
+ * | 2,035 | 29% | auto-hook `Task start:` / `Task complete:` stubs |
12
+ * | 2,064 | 30% | narrative under 60 characters |
13
+ * | 481 | 6.9% | narrative over 800 characters — i.e. substantive |
14
+ *
15
+ * The `status: undefined` rows are pure artefact: `PostToolUse` was dispatched
16
+ * with a field name the payload does not declare, so `handleToolComplete`
17
+ * interpolated `undefined` into every completion record. That defect is fixed
18
+ * (T12071) and can no longer produce new rows — but the existing ones remain,
19
+ * and they are not merely inert. FTS5's BM25 normalises for document length,
20
+ * so a 44-character record OUTRANKS a 4,000-character one for any term they
21
+ * share. The junk actively buries the knowledge.
22
+ *
23
+ * ## Safety
24
+ *
25
+ * This module is deliberately NOT the older `purgeBrainNoise`, which is a
26
+ * one-shot script hardcoded to a historical state: it deletes every learning,
27
+ * every decision but one specific id, and logs to stdout. Running it today
28
+ * would destroy 127 learnings and 127 decisions.
29
+ *
30
+ * Here, instead:
31
+ *
32
+ * - **Dry-run is the default.** Deleting requires an explicit `apply`.
33
+ * - Only OBSERVATIONS are considered. Decisions, patterns and learnings are
34
+ * never touched.
35
+ * - A row is a candidate only if it matches a named, narrow rule AND its
36
+ * narrative is under {@link MAX_STUB_NARRATIVE} characters, so a long
37
+ * record that merely happens to quote one of these strings survives.
38
+ * - Rows carrying `verified = 1` are always preserved.
39
+ * - The result reports per-rule counts and a sample, so the caller can see
40
+ * what would go before anything does.
41
+ *
42
+ * @task T12073
43
+ */
44
+ /**
45
+ * Longest narrative still eligible for pruning.
46
+ *
47
+ * A genuine write-up that happens to contain "status: undefined" (this
48
+ * module's own documentation, for instance, or a post-mortem describing the
49
+ * bug) is far longer than this and is therefore never a candidate.
50
+ */
51
+ export const MAX_STUB_NARRATIVE = 200;
52
+ /**
53
+ * The prune rules, each narrow and independently justified.
54
+ *
55
+ * Every predicate is ANDed with `length(narrative) <= MAX_STUB_NARRATIVE` and
56
+ * `verified IS NOT 1`, so no rule can reach a substantive or human-confirmed
57
+ * record on its own.
58
+ */
59
+ export const STUB_PRUNE_RULES = [
60
+ {
61
+ id: 'status-undefined',
62
+ reason: 'Artefact of T12071: PostToolUse was dispatched with `newStatus` while the payload declares `status`, so every completion interpolated the literal string "undefined". Carries no information beyond the task id, which the tasks table already holds.',
63
+ predicate: "narrative LIKE '%status: undefined%'",
64
+ },
65
+ {
66
+ id: 'task-start-stub',
67
+ reason: 'Auto-hook record of the form "Started work on T####: <title>". Both fields are already in the tasks table; the observation adds nothing and is short enough to outrank real memories under BM25.',
68
+ predicate: "title LIKE 'Task start: T%' AND narrative LIKE 'Started work on T%'",
69
+ },
70
+ {
71
+ id: 'task-complete-stub',
72
+ reason: 'Auto-hook record of the form "Task T#### completed with status: <status>". Duplicates the task row; retained only when it carries a real status AND some other content, which the length guard enforces.',
73
+ predicate: "title LIKE 'Task complete: T%' AND narrative LIKE 'Task T% completed with status:%'",
74
+ },
75
+ ];
76
+ /** Build the WHERE clause shared by counting, sampling and deleting. */
77
+ function ruleClause(rule) {
78
+ return `(${rule.predicate}) AND length(COALESCE(narrative, '')) <= ${MAX_STUB_NARRATIVE} AND COALESCE(verified, 0) != 1`;
79
+ }
80
+ /** Combined predicate across every rule. */
81
+ function allRulesClause() {
82
+ return STUB_PRUNE_RULES.map(ruleClause).join(' OR ');
83
+ }
84
+ /**
85
+ * Count, sample and optionally delete content-free observation stubs.
86
+ *
87
+ * @param nativeDb - open handle to the database holding `brain_observations`.
88
+ * @param apply - when `true`, delete the matched rows; otherwise report only.
89
+ * @returns counts, per-rule breakdown and a sample of matched rows.
90
+ *
91
+ * @example
92
+ * ```ts
93
+ * const preview = pruneObservationStubs(db, false);
94
+ * console.log(`${preview.matched} of ${preview.before} observations are stubs`);
95
+ * if (preview.matched > 0) pruneObservationStubs(db, true);
96
+ * ```
97
+ *
98
+ * @task T12073
99
+ */
100
+ export function pruneObservationStubs(nativeDb, apply) {
101
+ const countAll = () => nativeDb.prepare('SELECT COUNT(*) AS c FROM brain_observations').get().c;
102
+ const before = countAll();
103
+ const byRule = {};
104
+ for (const rule of STUB_PRUNE_RULES) {
105
+ const row = nativeDb
106
+ .prepare(`SELECT COUNT(*) AS c FROM brain_observations WHERE ${ruleClause(rule)}`)
107
+ .get();
108
+ byRule[rule.id] = row.c;
109
+ }
110
+ const combined = allRulesClause();
111
+ const matched = nativeDb.prepare(`SELECT COUNT(*) AS c FROM brain_observations WHERE ${combined}`).get().c;
112
+ const sample = nativeDb
113
+ .prepare(`SELECT id, title, COALESCE(narrative, '') AS narrative FROM brain_observations WHERE ${combined} LIMIT 5`)
114
+ .all();
115
+ if (!apply || matched === 0) {
116
+ return {
117
+ applied: false,
118
+ before,
119
+ after: before,
120
+ matched,
121
+ byRule,
122
+ sample: sample.map((r) => ({ ...r, rule: matchingRule(r.narrative, r.title) })),
123
+ };
124
+ }
125
+ // Deleting from brain_observations fires the FTS delete trigger, so the
126
+ // shadow index stays in sync without a separate rebuild.
127
+ nativeDb.prepare(`DELETE FROM brain_observations WHERE ${combined}`).run();
128
+ return {
129
+ applied: true,
130
+ before,
131
+ after: countAll(),
132
+ matched,
133
+ byRule,
134
+ sample: sample.map((r) => ({ ...r, rule: matchingRule(r.narrative, r.title) })),
135
+ };
136
+ }
137
+ /**
138
+ * Best-effort attribution of a sampled row to the rule that matched it.
139
+ *
140
+ * Reporting only — the delete uses the combined SQL predicate.
141
+ *
142
+ * @param narrative - the row's narrative text.
143
+ * @param title - the row's title.
144
+ * @returns the matching rule id, or `'unknown'`.
145
+ */
146
+ function matchingRule(narrative, title) {
147
+ if (narrative.includes('status: undefined'))
148
+ return 'status-undefined';
149
+ if (title.startsWith('Task start: T'))
150
+ return 'task-start-stub';
151
+ if (title.startsWith('Task complete: T'))
152
+ return 'task-complete-stub';
153
+ return 'unknown';
154
+ }
155
+ //# sourceMappingURL=brain-stub-prune.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"brain-stub-prune.js","sourceRoot":"","sources":["../../src/memory/brain-stub-prune.ts"],"names":[],"mappings":"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"}