From c5db753fe327b7abef75cf97c5992a9379ace0ee Mon Sep 17 00:00:00 2001 From: James Yang Date: Thu, 6 Aug 2026 15:40:09 -0400 Subject: [PATCH] fix(extension): fall back to chunk when memory is whitespace-only Graphite review: memory || chunk treated " " as truthy and dropped a valid chunk. Trim both fields before choosing. --- apps/browser-extension/utils/hybrid-recall.eval.ts | 9 +++++---- apps/browser-extension/utils/search-request.test.ts | 9 +++++++++ apps/browser-extension/utils/search-request.ts | 8 ++++---- 3 files changed, 18 insertions(+), 8 deletions(-) diff --git a/apps/browser-extension/utils/hybrid-recall.eval.ts b/apps/browser-extension/utils/hybrid-recall.eval.ts index 418a2f1a..7729ca4e 100644 --- a/apps/browser-extension/utils/hybrid-recall.eval.ts +++ b/apps/browser-extension/utils/hybrid-recall.eval.ts @@ -92,12 +92,13 @@ export const HYBRID_RECALL_FIXTURES: HybridRecallFixture[] = [ }, { id: "empty-and-whitespace-noise", - description: "Empty / whitespace hits must not invent prompt lines", - expectedTexts: ["Keep this fact"], - chunkOnlyTexts: [], + description: + "Whitespace-only memory must not block a valid chunk; blanks invent no lines", + expectedTexts: ["Keep this fact", "Important document text"], + chunkOnlyTexts: ["Important document text"], results: [ { memory: "Keep this fact" }, - { memory: " " }, + { memory: " ", chunk: "Important document text" }, { chunk: "" }, {}, ], diff --git a/apps/browser-extension/utils/search-request.test.ts b/apps/browser-extension/utils/search-request.test.ts index 071e1f29..17b96038 100644 --- a/apps/browser-extension/utils/search-request.test.ts +++ b/apps/browser-extension/utils/search-request.test.ts @@ -37,6 +37,15 @@ describe("formatSearchHitText", () => { ) }) + it("falls back to chunk when memory is only whitespace", () => { + expect( + formatSearchHitText({ + memory: " ", + chunk: "Important document text", + }), + ).toBe("Important document text") + }) + it("returns null for empty hits", () => { expect(formatSearchHitText({})).toBeNull() expect(formatSearchHitText({ memory: " " })).toBeNull() diff --git a/apps/browser-extension/utils/search-request.ts b/apps/browser-extension/utils/search-request.ts index cbbc76d7..d7b24c46 100644 --- a/apps/browser-extension/utils/search-request.ts +++ b/apps/browser-extension/utils/search-request.ts @@ -23,10 +23,10 @@ export function buildSearchMemoriesBody( /** Prefer extracted memory text; fall back to document chunk. */ export function formatSearchHitText(hit: SearchHit): string | null { - const text = hit.memory || hit.chunk - if (typeof text !== "string") return null - const trimmed = text.trim() - return trimmed.length > 0 ? trimmed : null + const memory = typeof hit.memory === "string" ? hit.memory.trim() : "" + const chunk = typeof hit.chunk === "string" ? hit.chunk.trim() : "" + const text = memory || chunk + return text.length > 0 ? text : null } /** Numbered prompt lines for Included Memories; skips empty hits. */