ralph-hero-knowledge-index 0.1.26 → 0.1.27

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.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ralph-knowledge",
3
- "version": "0.1.26",
3
+ "version": "0.1.27",
4
4
  "description": "Knowledge graph for ralph-hero: semantic search, relationship traversal, and document indexing across thoughts/ documents. Optional companion to ralph-hero.",
5
5
  "author": {
6
6
  "name": "Chad Dubiel",
package/.mcp.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "mcpServers": {
3
3
  "ralph-knowledge": {
4
4
  "command": "npx",
5
- "args": ["-y", "ralph-hero-knowledge-index@0.1.26"]
5
+ "args": ["-y", "ralph-hero-knowledge-index@0.1.27"]
6
6
  }
7
7
  }
8
8
  }
package/dist/index.js CHANGED
@@ -162,7 +162,7 @@ export function createServer(dbPath, opts = {}) {
162
162
  const hasTier = memoryTierColumnExists(db);
163
163
  const hasChunks = chunksTableExists(db);
164
164
  const totalRow = db.db
165
- .prepare("SELECT COUNT(*) AS c FROM documents")
165
+ .prepare("SELECT COUNT(*) AS c FROM documents WHERE is_stub = 0 OR is_stub IS NULL")
166
166
  .get();
167
167
  const totalDocuments = totalRow.c;
168
168
  const byTier = {
@@ -178,7 +178,9 @@ export function createServer(dbPath, opts = {}) {
178
178
  if (hasTier) {
179
179
  const rows = db.db
180
180
  .prepare(`SELECT memory_tier AS tier, COUNT(*) AS c
181
- FROM documents GROUP BY memory_tier`)
181
+ FROM documents
182
+ WHERE (is_stub = 0 OR is_stub IS NULL)
183
+ GROUP BY memory_tier`)
182
184
  .all();
183
185
  for (const r of rows) {
184
186
  if (r.tier === "doc" || r.tier === "raw" || r.tier === "reflection") {
@@ -188,7 +190,7 @@ export function createServer(dbPath, opts = {}) {
188
190
  const newRows = db.db
189
191
  .prepare(`SELECT memory_tier AS tier, COUNT(*) AS c
190
192
  FROM documents
191
- WHERE date IS NOT NULL AND date >= @since
193
+ WHERE date IS NOT NULL AND date >= @since AND (is_stub = 0 OR is_stub IS NULL)
192
194
  GROUP BY memory_tier`)
193
195
  .all({ since });
194
196
  for (const r of newRows) {
@@ -201,7 +203,7 @@ export function createServer(dbPath, opts = {}) {
201
203
  // v2 schema — everything treated as "doc"
202
204
  byTier.doc = totalDocuments;
203
205
  const newDocRow = db.db
204
- .prepare("SELECT COUNT(*) AS c FROM documents WHERE date IS NOT NULL AND date >= ?")
206
+ .prepare("SELECT COUNT(*) AS c FROM documents WHERE date IS NOT NULL AND date >= ? AND (is_stub = 0 OR is_stub IS NULL)")
205
207
  .get(since);
206
208
  newSince.doc = newDocRow.c;
207
209
  }
@@ -219,7 +221,7 @@ export function createServer(dbPath, opts = {}) {
219
221
  if (hasTier) {
220
222
  const row = db.db
221
223
  .prepare(`SELECT date FROM documents
222
- WHERE memory_tier = 'reflection' AND date IS NOT NULL
224
+ WHERE memory_tier = 'reflection' AND date IS NOT NULL AND (is_stub = 0 OR is_stub IS NULL)
223
225
  ORDER BY date DESC LIMIT 1`)
224
226
  .get();
225
227
  lastReflectionAt = row?.date ?? null;
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/search.js CHANGED
@@ -79,6 +79,7 @@ export class FtsSearch {
79
79
  search(query, options = {}) {
80
80
  const { type, tags, includeSuperseded = false, limit = 20, memoryTier } = options;
81
81
  const conditions = ["documents_fts MATCH @query"];
82
+ conditions.push("(d.is_stub = 0 OR d.is_stub IS NULL)");
82
83
  const params = { query: this.escapeFts5Query(query), limit };
83
84
  if (!includeSuperseded) {
84
85
  conditions.push("d.status IS NOT 'superseded'");
@@ -1 +1 @@
1
- {"version":3,"file":"search.js","sourceRoot":"","sources":["../src/search.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"search.js","sourceRoot":"","sources":["../src/search.ts"],"names":[],"mappings":"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"}
package/dist/traverse.js CHANGED
@@ -30,6 +30,7 @@ export class Traverser {
30
30
  d.date AS docDate
31
31
  FROM chain
32
32
  LEFT JOIN documents d ON d.id = chain.target_id
33
+ WHERE d.id IS NULL OR d.is_stub = 0 OR d.is_stub IS NULL
33
34
  ORDER BY chain.depth, chain.target_id
34
35
  `;
35
36
  const params = { fromId, depth };
@@ -74,6 +75,7 @@ export class Traverser {
74
75
  d.date AS docDate
75
76
  FROM chain
76
77
  LEFT JOIN documents d ON d.id = chain.source_id
78
+ WHERE d.id IS NULL OR d.is_stub = 0 OR d.is_stub IS NULL
77
79
  ORDER BY chain.depth, chain.target_id
78
80
  `;
79
81
  const params = { toId, depth };
@@ -1 +1 @@
1
- {"version":3,"file":"traverse.js","sourceRoot":"","sources":["../src/traverse.ts"],"names":[],"mappings":"AAgBA,MAAM,OAAO,SAAS;IACH,EAAE,CAAc;IAEjC,YAAY,EAAe;QACzB,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;IACf,CAAC;IAED,QAAQ,CAAC,MAAc,EAAE,UAA2B,EAAE;QACpD,MAAM,EAAE,IAAI,EAAE,KAAK,GAAG,CAAC,EAAE,GAAG,OAAO,CAAC;QACpC,MAAM,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,EAAE,CAAC;QAEpD,MAAM,GAAG,GAAG;;;;sCAIsB,UAAU;;;;;;;iCAOf,UAAU;;;;;;;;;;;;;;KActC,CAAC;QAEF,MAAM,MAAM,GAA4B,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;QAC1D,IAAI,IAAI;YAAE,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC;QAE7B,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAS7C,CAAC;QAEH,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACtB,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,OAAO,EAAE,CAAC,CAAC,OAAO;YAClB,GAAG,EAAE,CAAC,CAAC,QAAQ,IAAI,IAAI;gBACrB,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE;gBAC7D,CAAC,CAAC,IAAI;SACT,CAAC,CAAC,CAAC;IACN,CAAC;IAED,gBAAgB,CAAC,IAAY,EAAE,UAA2B,EAAE;QAC1D,MAAM,EAAE,IAAI,EAAE,KAAK,GAAG,CAAC,EAAE,GAAG,OAAO,CAAC;QACpC,MAAM,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,EAAE,CAAC;QAEpD,MAAM,GAAG,GAAG;;;;oCAIoB,UAAU;;;;;;;iCAOb,UAAU;;;;;;;;;;;;;;KActC,CAAC;QAEF,MAAM,MAAM,GAA4B,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;QACxD,IAAI,IAAI;YAAE,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC;QAE7B,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAS7C,CAAC;QAEH,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACtB,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,OAAO,EAAE,CAAC,CAAC,OAAO;YAClB,GAAG,EAAE,CAAC,CAAC,QAAQ,IAAI,IAAI;gBACrB,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE;gBAC7D,CAAC,CAAC,IAAI;SACT,CAAC,CAAC,CAAC;IACN,CAAC;CACF"}
1
+ {"version":3,"file":"traverse.js","sourceRoot":"","sources":["../src/traverse.ts"],"names":[],"mappings":"AAgBA,MAAM,OAAO,SAAS;IACH,EAAE,CAAc;IAEjC,YAAY,EAAe;QACzB,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;IACf,CAAC;IAED,QAAQ,CAAC,MAAc,EAAE,UAA2B,EAAE;QACpD,MAAM,EAAE,IAAI,EAAE,KAAK,GAAG,CAAC,EAAE,GAAG,OAAO,CAAC;QACpC,MAAM,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,EAAE,CAAC;QAEpD,MAAM,GAAG,GAAG;;;;sCAIsB,UAAU;;;;;;;iCAOf,UAAU;;;;;;;;;;;;;;;KAetC,CAAC;QAEF,MAAM,MAAM,GAA4B,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;QAC1D,IAAI,IAAI;YAAE,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC;QAE7B,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAS7C,CAAC;QAEH,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACtB,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,OAAO,EAAE,CAAC,CAAC,OAAO;YAClB,GAAG,EAAE,CAAC,CAAC,QAAQ,IAAI,IAAI;gBACrB,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE;gBAC7D,CAAC,CAAC,IAAI;SACT,CAAC,CAAC,CAAC;IACN,CAAC;IAED,gBAAgB,CAAC,IAAY,EAAE,UAA2B,EAAE;QAC1D,MAAM,EAAE,IAAI,EAAE,KAAK,GAAG,CAAC,EAAE,GAAG,OAAO,CAAC;QACpC,MAAM,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,EAAE,CAAC;QAEpD,MAAM,GAAG,GAAG;;;;oCAIoB,UAAU;;;;;;;iCAOb,UAAU;;;;;;;;;;;;;;;KAetC,CAAC;QAEF,MAAM,MAAM,GAA4B,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;QACxD,IAAI,IAAI;YAAE,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC;QAE7B,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAS7C,CAAC;QAEH,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACtB,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,OAAO,EAAE,CAAC,CAAC,OAAO;YAClB,GAAG,EAAE,CAAC,CAAC,QAAQ,IAAI,IAAI;gBACrB,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE;gBAC7D,CAAC,CAAC,IAAI;SACT,CAAC,CAAC,CAAC;IACN,CAAC;CACF"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ralph-hero-knowledge-index",
3
- "version": "0.1.26",
3
+ "version": "0.1.27",
4
4
  "type": "module",
5
5
  "main": "dist/index.js",
6
6
  "bin": {
@@ -171,4 +171,32 @@ describe("GraphBuilder", () => {
171
171
  expect(edgeToA).toBeDefined();
172
172
  expect(graph.source(edgeToA!)).toBe("doc-b");
173
173
  });
174
+
175
+ describe("stub filtering (GH-897)", () => {
176
+ it("drops stub-target edges (untyped + typed) and excludes stubs from nodes", () => {
177
+ const freshDb = new KnowledgeDB(":memory:");
178
+ freshDb.upsertDocument({
179
+ id: "real-x",
180
+ path: "real-x.md",
181
+ title: "Real X",
182
+ date: "2026-04-10",
183
+ type: "research",
184
+ status: "approved",
185
+ githubIssue: null,
186
+ content: "",
187
+ });
188
+ freshDb.upsertStubDocument("stub-y");
189
+ freshDb.addRelationship("real-x", "stub-y", "untyped");
190
+ freshDb.addRelationship("real-x", "stub-y", "builds_on");
191
+
192
+ const g = new GraphBuilder(freshDb).buildGraph();
193
+ expect(g.hasNode("stub-y")).toBe(false);
194
+ expect(g.hasNode("real-x")).toBe(true);
195
+ expect(g.outDegree("real-x")).toBe(0);
196
+ expect(g.order).toBe(1);
197
+ expect(g.size).toBe(0);
198
+
199
+ freshDb.close();
200
+ });
201
+ });
174
202
  });
@@ -201,4 +201,82 @@ describe("knowledge_memory_stats", () => {
201
201
  expect(out.chunks_per_doc_p90).toBe(0);
202
202
  expect(out.last_reflection_at).toBeNull();
203
203
  });
204
+
205
+ describe("stub filtering (GH-897)", () => {
206
+ it("excludes stubs from total_documents and by_tier on v3 schema", async () => {
207
+ const mod = await import("../index.js");
208
+ const { server, db } = mod.createServer(":memory:");
209
+ ensureV3Schema(db);
210
+
211
+ // Two real docs across two tiers.
212
+ seedDoc(db, "real-doc", "doc", "2026-04-10");
213
+ seedDoc(db, "real-reflection", "reflection", "2026-04-11");
214
+
215
+ // Three stubs (default memory_tier = 'doc' per migration).
216
+ db.upsertStubDocument("stub-1");
217
+ db.upsertStubDocument("stub-2");
218
+ db.upsertStubDocument("stub-3");
219
+
220
+ const out = await callStats(server, { since: "1970-01-01T00:00:00Z" });
221
+ expect(out.total_documents).toBe(2);
222
+ expect(out.by_tier).toEqual({ doc: 1, raw: 0, reflection: 1 });
223
+ // new_since unaffected — stubs have date = NULL and never count regardless.
224
+ expect(out.new_since).toEqual({ doc: 1, raw: 0, reflection: 1 });
225
+ });
226
+
227
+ it("excludes stubs from total on a v2 schema (column absent)", async () => {
228
+ const mod = await import("../index.js");
229
+ const { server, db } = mod.createServer(":memory:");
230
+ // Do NOT call ensureV3Schema; v2 path uses the standalone total query and
231
+ // assigns it to byTier.doc.
232
+
233
+ db.upsertDocument({
234
+ id: "legacy-real",
235
+ path: "l.md",
236
+ title: "Legacy",
237
+ date: "2026-04-01",
238
+ type: null,
239
+ status: null,
240
+ githubIssue: null,
241
+ content: "",
242
+ });
243
+ db.upsertStubDocument("legacy-stub");
244
+
245
+ const out = await callStats(server, { since: "1970-01-01T00:00:00Z" });
246
+ expect(out.total_documents).toBe(1);
247
+ expect(out.by_tier).toEqual({ doc: 1, raw: 0, reflection: 0 });
248
+ });
249
+
250
+ it("typed-relationship stubs are filtered identically to untyped wikilink stubs", async () => {
251
+ const mod = await import("../index.js");
252
+ const { server, db } = mod.createServer(":memory:");
253
+ ensureV3Schema(db);
254
+
255
+ seedDoc(db, "real-source", "doc", "2026-04-10");
256
+ // Stub created via typed relationship target.
257
+ db.upsertStubDocument("typed-stub-target");
258
+ db.addRelationship("real-source", "typed-stub-target", "builds_on");
259
+
260
+ const out = await callStats(server, { since: "1970-01-01T00:00:00Z" });
261
+ expect(out.total_documents).toBe(1);
262
+ expect(out.by_tier).toEqual({ doc: 1, raw: 0, reflection: 0 });
263
+ });
264
+
265
+ it("last_reflection_at ignores stubs even if a stub somehow had a date and reflection tier", async () => {
266
+ const mod = await import("../index.js");
267
+ const { server, db } = mod.createServer(":memory:");
268
+ ensureV3Schema(db);
269
+
270
+ seedDoc(db, "real-reflection-old", "reflection", "2026-03-01");
271
+ // Force a stub into the reflection tier with a future date — defense-in-depth check.
272
+ db.upsertStubDocument("future-reflection-stub");
273
+ db.db
274
+ .prepare("UPDATE documents SET memory_tier = 'reflection', date = '2099-01-01' WHERE id = ?")
275
+ .run("future-reflection-stub");
276
+
277
+ const out = await callStats(server, { since: "1970-01-01T00:00:00Z" });
278
+ // Without the filter, the stub's "2099-01-01" would surface as last_reflection_at.
279
+ expect(out.last_reflection_at).toBe("2026-03-01");
280
+ });
281
+ });
204
282
  });
@@ -242,6 +242,69 @@ describe("FtsSearch", () => {
242
242
  });
243
243
  });
244
244
 
245
+ describe("stub filtering (GH-897)", () => {
246
+ it("excludes stub documents from FTS results even when their title matches", () => {
247
+ // Insert a real doc with a unique marker; stub created via upsertStubDocument.
248
+ const freshDb = new KnowledgeDB(":memory:");
249
+ freshDb.upsertDocument({
250
+ id: "real-doc-marker",
251
+ path: "thoughts/shared/research/marker.md",
252
+ title: "Marker Doc",
253
+ date: "2026-04-25",
254
+ type: "research",
255
+ status: "draft",
256
+ githubIssue: null,
257
+ content: "unique-marker payload contents",
258
+ });
259
+ // Stub whose title matches the marker — would surface without the filter.
260
+ freshDb.upsertStubDocument("unique-marker-stub-id");
261
+
262
+ const freshFts = new FtsSearch(freshDb);
263
+ // Rebuild AFTER both rows exist so the stub does land in documents_fts —
264
+ // simulates an install that bumped schema version with stubs already present.
265
+ freshFts.rebuildIndex();
266
+
267
+ const hits = freshFts.search("unique-marker");
268
+ const ids = hits.map((r) => r.id);
269
+ expect(ids).toContain("real-doc-marker");
270
+ expect(ids).not.toContain("unique-marker-stub-id");
271
+
272
+ // Even querying the stub id directly returns zero rows.
273
+ const stubByTitle = freshFts.search("unique-marker-stub-id");
274
+ const stubIds = stubByTitle.map((r) => r.id);
275
+ expect(stubIds).not.toContain("unique-marker-stub-id");
276
+
277
+ freshDb.close();
278
+ });
279
+
280
+ it("typed-relationship stubs (builds_on target) are filtered identically", () => {
281
+ const freshDb = new KnowledgeDB(":memory:");
282
+ freshDb.upsertDocument({
283
+ id: "real-source",
284
+ path: "thoughts/shared/plans/source.md",
285
+ title: "Source Plan",
286
+ date: "2026-04-25",
287
+ type: "plan",
288
+ status: "draft",
289
+ githubIssue: null,
290
+ content: "phantom-typed-marker payload",
291
+ });
292
+ // Stub created via typed relationship target (builds_on).
293
+ freshDb.upsertStubDocument("phantom-typed-marker");
294
+ freshDb.addRelationship("real-source", "phantom-typed-marker", "builds_on");
295
+
296
+ const freshFts = new FtsSearch(freshDb);
297
+ freshFts.rebuildIndex();
298
+
299
+ const hits = freshFts.search("phantom-typed-marker");
300
+ const ids = hits.map((r) => r.id);
301
+ expect(ids).toContain("real-source"); // matches in content
302
+ expect(ids).not.toContain("phantom-typed-marker"); // stub excluded
303
+
304
+ freshDb.close();
305
+ });
306
+ });
307
+
245
308
  describe("ensureTable", () => {
246
309
  it("creates FTS table if it does not exist", () => {
247
310
  // Create a fresh DB without FTS table
@@ -183,11 +183,137 @@ describe("Traverser — untyped edges", () => {
183
183
  expect(types).toContain("builds_on");
184
184
  });
185
185
 
186
- it("stub documents appear as doc in traverse results with title matching stub ID", () => {
186
+ it("stub documents are filtered out of traverse results (regression for GH-897)", () => {
187
187
  const results = traverser.traverse("doc-source", { type: "untyped", depth: 1 });
188
188
  const toStub = results.find(r => r.targetId === "unresolved-target");
189
- expect(toStub).toBeTruthy();
190
- expect(toStub!.doc).not.toBeNull();
191
- expect(toStub!.doc!.title).toBe("unresolved-target");
189
+ expect(toStub).toBeUndefined();
190
+ // Real-document edges still surface
191
+ const toReal = results.find(r => r.targetId === "doc-target");
192
+ expect(toReal).toBeTruthy();
193
+ });
194
+ });
195
+
196
+ describe("Traverser — stub filtering (GH-897)", () => {
197
+ let db: KnowledgeDB;
198
+ let traverser: Traverser;
199
+
200
+ beforeEach(() => {
201
+ db = new KnowledgeDB(":memory:");
202
+
203
+ db.upsertDocument({
204
+ id: "real-a",
205
+ path: "thoughts/shared/research/real-a.md",
206
+ title: "Real A",
207
+ date: "2026-04-01",
208
+ type: "research",
209
+ status: "approved",
210
+ githubIssue: null,
211
+ content: "Real document A.",
212
+ });
213
+
214
+ db.upsertDocument({
215
+ id: "real-b",
216
+ path: "thoughts/shared/research/real-b.md",
217
+ title: "Real B",
218
+ date: "2026-04-02",
219
+ type: "research",
220
+ status: "approved",
221
+ githubIssue: null,
222
+ content: "Real document B.",
223
+ });
224
+
225
+ // Stubs created via both untyped wikilink and typed relationship paths.
226
+ db.upsertStubDocument("stub-untyped-target");
227
+ db.upsertStubDocument("stub-typed-target");
228
+
229
+ db.addRelationship("real-a", "stub-untyped-target", "untyped", "context");
230
+ db.addRelationship("real-a", "stub-typed-target", "builds_on");
231
+
232
+ // Stub appears as source_id of an edge to a real doc — exercises incoming filter.
233
+ db.addRelationship("stub-untyped-target", "real-b", "untyped");
234
+
235
+ traverser = new Traverser(db);
236
+ });
237
+
238
+ it("traverse() drops outgoing hops to stub targets (untyped + typed)", () => {
239
+ const results = traverser.traverse("real-a", { depth: 1 });
240
+ expect(results).toHaveLength(0);
241
+ // Sanity: neither stub id appears
242
+ const targetIds = results.map((r) => r.targetId);
243
+ expect(targetIds).not.toContain("stub-untyped-target");
244
+ expect(targetIds).not.toContain("stub-typed-target");
245
+ });
246
+
247
+ it("traverse() with type filter still drops stub targets", () => {
248
+ const buildsOn = traverser.traverse("real-a", { type: "builds_on", depth: 1 });
249
+ expect(buildsOn).toHaveLength(0);
250
+ const untyped = traverser.traverse("real-a", { type: "untyped", depth: 1 });
251
+ expect(untyped).toHaveLength(0);
252
+ });
253
+
254
+ it("traverseIncoming() returns no rows when only inbound edge is from a stub", () => {
255
+ const results = traverser.traverseIncoming("real-b", { depth: 1 });
256
+ expect(results).toHaveLength(0);
257
+ });
258
+
259
+ it("traverseIncoming() on a stub returns only real-source edges, never stub sources", () => {
260
+ // Asking "who points to this stub?" surfaces real callers (real-a here). The
261
+ // join in traverseIncoming is on chain.source_id, so the predicate filters by
262
+ // source-side stub-ness — real sources are preserved, stub sources dropped.
263
+ const results = traverser.traverseIncoming("stub-untyped-target", { depth: 1 });
264
+ expect(results).toHaveLength(1);
265
+ expect(results[0].sourceId).toBe("real-a");
266
+ // None of the rows have a stub document as source.
267
+ for (const r of results) {
268
+ // doc is hydrated from d.title; stubs would have title === sourceId.
269
+ if (r.doc) {
270
+ expect(r.doc.title).not.toBe(r.sourceId);
271
+ }
272
+ }
273
+ });
274
+
275
+ it("non-regression: real-only chain still works after the stub filter is applied", () => {
276
+ // Independent fresh DB to verify the canonical fixture still passes through the
277
+ // updated WHERE clause unchanged.
278
+ const fresh = new KnowledgeDB(":memory:");
279
+ fresh.upsertDocument({
280
+ id: "doc-a",
281
+ path: "doc-a.md",
282
+ title: "Foundation",
283
+ date: "2026-02-01",
284
+ type: "research",
285
+ status: "approved",
286
+ githubIssue: null,
287
+ content: "",
288
+ });
289
+ fresh.upsertDocument({
290
+ id: "doc-b",
291
+ path: "doc-b.md",
292
+ title: "Plan",
293
+ date: "2026-02-15",
294
+ type: "plan",
295
+ status: "draft",
296
+ githubIssue: null,
297
+ content: "",
298
+ });
299
+ fresh.upsertDocument({
300
+ id: "doc-c",
301
+ path: "doc-c.md",
302
+ title: "Revised Plan",
303
+ date: "2026-03-01",
304
+ type: "plan",
305
+ status: "draft",
306
+ githubIssue: null,
307
+ content: "",
308
+ });
309
+ fresh.addRelationship("doc-b", "doc-a", "builds_on");
310
+ fresh.addRelationship("doc-c", "doc-b", "builds_on");
311
+
312
+ const t = new Traverser(fresh);
313
+ const chain = t.traverse("doc-c", { type: "builds_on" });
314
+ expect(chain).toHaveLength(2);
315
+ expect(chain[0]).toMatchObject({ sourceId: "doc-c", targetId: "doc-b", depth: 1 });
316
+ expect(chain[1]).toMatchObject({ sourceId: "doc-b", targetId: "doc-a", depth: 2 });
317
+ fresh.close();
192
318
  });
193
319
  });
package/src/index.ts CHANGED
@@ -193,7 +193,7 @@ export function createServer(dbPath: string, opts: CreateServerOptions = {}) {
193
193
  const hasChunks = chunksTableExists(db);
194
194
 
195
195
  const totalRow = db.db
196
- .prepare("SELECT COUNT(*) AS c FROM documents")
196
+ .prepare("SELECT COUNT(*) AS c FROM documents WHERE is_stub = 0 OR is_stub IS NULL")
197
197
  .get() as { c: number };
198
198
  const totalDocuments = totalRow.c;
199
199
 
@@ -212,7 +212,9 @@ export function createServer(dbPath: string, opts: CreateServerOptions = {}) {
212
212
  const rows = db.db
213
213
  .prepare(
214
214
  `SELECT memory_tier AS tier, COUNT(*) AS c
215
- FROM documents GROUP BY memory_tier`,
215
+ FROM documents
216
+ WHERE (is_stub = 0 OR is_stub IS NULL)
217
+ GROUP BY memory_tier`,
216
218
  )
217
219
  .all() as Array<{ tier: string; c: number }>;
218
220
  for (const r of rows) {
@@ -224,7 +226,7 @@ export function createServer(dbPath: string, opts: CreateServerOptions = {}) {
224
226
  .prepare(
225
227
  `SELECT memory_tier AS tier, COUNT(*) AS c
226
228
  FROM documents
227
- WHERE date IS NOT NULL AND date >= @since
229
+ WHERE date IS NOT NULL AND date >= @since AND (is_stub = 0 OR is_stub IS NULL)
228
230
  GROUP BY memory_tier`,
229
231
  )
230
232
  .all({ since }) as Array<{ tier: string; c: number }>;
@@ -238,7 +240,7 @@ export function createServer(dbPath: string, opts: CreateServerOptions = {}) {
238
240
  byTier.doc = totalDocuments;
239
241
  const newDocRow = db.db
240
242
  .prepare(
241
- "SELECT COUNT(*) AS c FROM documents WHERE date IS NOT NULL AND date >= ?",
243
+ "SELECT COUNT(*) AS c FROM documents WHERE date IS NOT NULL AND date >= ? AND (is_stub = 0 OR is_stub IS NULL)",
242
244
  )
243
245
  .get(since) as { c: number };
244
246
  newSince.doc = newDocRow.c;
@@ -262,7 +264,7 @@ export function createServer(dbPath: string, opts: CreateServerOptions = {}) {
262
264
  const row = db.db
263
265
  .prepare(
264
266
  `SELECT date FROM documents
265
- WHERE memory_tier = 'reflection' AND date IS NOT NULL
267
+ WHERE memory_tier = 'reflection' AND date IS NOT NULL AND (is_stub = 0 OR is_stub IS NULL)
266
268
  ORDER BY date DESC LIMIT 1`,
267
269
  )
268
270
  .get() as { date: string } | undefined;
package/src/search.ts CHANGED
@@ -124,6 +124,7 @@ export class FtsSearch {
124
124
  const { type, tags, includeSuperseded = false, limit = 20, memoryTier } = options;
125
125
 
126
126
  const conditions: string[] = ["documents_fts MATCH @query"];
127
+ conditions.push("(d.is_stub = 0 OR d.is_stub IS NULL)");
127
128
  const params: Record<string, unknown> = { query: this.escapeFts5Query(query), limit };
128
129
 
129
130
  if (!includeSuperseded) {
package/src/traverse.ts CHANGED
@@ -49,6 +49,7 @@ export class Traverser {
49
49
  d.date AS docDate
50
50
  FROM chain
51
51
  LEFT JOIN documents d ON d.id = chain.target_id
52
+ WHERE d.id IS NULL OR d.is_stub = 0 OR d.is_stub IS NULL
52
53
  ORDER BY chain.depth, chain.target_id
53
54
  `;
54
55
 
@@ -106,6 +107,7 @@ export class Traverser {
106
107
  d.date AS docDate
107
108
  FROM chain
108
109
  LEFT JOIN documents d ON d.id = chain.source_id
110
+ WHERE d.id IS NULL OR d.is_stub = 0 OR d.is_stub IS NULL
109
111
  ORDER BY chain.depth, chain.target_id
110
112
  `;
111
113