From 998092e7f11803d146bce59ac3a5e2c32831f9f4 Mon Sep 17 00:00:00 2001 From: abhay-codes07 Date: Wed, 22 Jul 2026 17:00:31 +0530 Subject: [PATCH] fix(memory-graph): stop painting expired memories as expiring getMemoryBorderColor flagged a memory as "expiring" whenever forgetAfter - now was less than seven days. That comparison is also true when forgetAfter is already in the past, since msLeft goes negative, so a memory whose forget time has elapsed but has not yet been swept to isForgotten kept the expiring border indefinitely instead of reading as a normal or expired node. Require msLeft > 0 so only memories with time actually left are marked expiring; elapsed ones fall through to the recency/default logic. Adds a regression test for the elapsed-forgetAfter case. --- .../memory-graph/src/__tests__/graph-data-utils.test.ts | 7 +++++++ packages/memory-graph/src/hooks/use-graph-data.ts | 5 ++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/packages/memory-graph/src/__tests__/graph-data-utils.test.ts b/packages/memory-graph/src/__tests__/graph-data-utils.test.ts index 4f728f97..f98df074 100644 --- a/packages/memory-graph/src/__tests__/graph-data-utils.test.ts +++ b/packages/memory-graph/src/__tests__/graph-data-utils.test.ts @@ -65,6 +65,13 @@ describe("getMemoryBorderColor", () => { expect(getMemoryBorderColor(mem, colors)).toBe(colors.memBorderExpiring) }) + it("does not treat an already-elapsed forgetAfter as expiring", () => { + const past = new Date(Date.now() - 60 * 1000).toISOString() + const old = new Date(Date.now() - 30 * 24 * 60 * 60 * 1000).toISOString() + const mem = makeMemory({ forgetAfter: past, createdAt: old }) + expect(getMemoryBorderColor(mem, colors)).toBe(colors.memStrokeDefault) + }) + it("returns recent color for memories created within 24 hours", () => { const recent = new Date(Date.now() - 1000).toISOString() const mem = makeMemory({ createdAt: recent }) diff --git a/packages/memory-graph/src/hooks/use-graph-data.ts b/packages/memory-graph/src/hooks/use-graph-data.ts index 00a05d10..d9dfc1a5 100644 --- a/packages/memory-graph/src/hooks/use-graph-data.ts +++ b/packages/memory-graph/src/hooks/use-graph-data.ts @@ -47,7 +47,10 @@ export function getMemoryBorderColor( if (mem.isForgotten) return colors.memBorderForgotten if (mem.forgetAfter) { const msLeft = new Date(mem.forgetAfter).getTime() - Date.now() - if (msLeft < SEVEN_DAYS_MS) return colors.memBorderExpiring + // Only "expiring" while there is time left. A forgetAfter already in the + // past leaves msLeft negative, which still satisfied `< SEVEN_DAYS_MS` and + // painted the expiring border forever; let those fall through instead. + if (msLeft > 0 && msLeft < SEVEN_DAYS_MS) return colors.memBorderExpiring } const age = Date.now() - new Date(mem.createdAt).getTime() if (age < ONE_DAY_MS) return colors.memBorderRecent