From a15094ce603b549f4605353fc0a605515f6e5860 Mon Sep 17 00:00:00 2001 From: sha2fiddy <103975074+sha2fiddy@users.noreply.github.com> Date: Wed, 15 Apr 2026 03:26:57 -0400 Subject: [PATCH] feat: include created_at timestamp in search results (#846) * feat: include created_at timestamp in search results (closes #465) Surface the existing filed_at metadata as created_at in search result objects returned by search_memories(). Enables temporal reasoning over search hits without additional queries. * Feat: add fallback for missing filed_at metadata --- mempalace/searcher.py | 1 + tests/test_searcher.py | 22 ++++++++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/mempalace/searcher.py b/mempalace/searcher.py index 57d851f..db809d9 100644 --- a/mempalace/searcher.py +++ b/mempalace/searcher.py @@ -411,6 +411,7 @@ def search_memories( "wing": meta.get("wing", "unknown"), "room": meta.get("room", "unknown"), "source_file": Path(source).name if source else "?", + "created_at": meta.get("filed_at", "unknown"), "similarity": round(max(0.0, 1 - effective_dist), 3), "distance": round(dist, 4), "effective_distance": round(effective_dist, 4), diff --git a/tests/test_searcher.py b/tests/test_searcher.py index 244fbf3..11e788d 100644 --- a/tests/test_searcher.py +++ b/tests/test_searcher.py @@ -51,6 +51,28 @@ class TestSearchMemories: assert "source_file" in hit assert "similarity" in hit assert isinstance(hit["similarity"], float) + assert "created_at" in hit + + def test_created_at_contains_filed_at(self, palace_path, seeded_collection): + """created_at surfaces the filed_at metadata from the drawer.""" + result = search_memories("JWT authentication", palace_path) + hit = result["results"][0] + assert hit["created_at"] == "2026-01-01T00:00:00" + + def test_created_at_fallback_when_filed_at_missing(self): + """created_at defaults to 'unknown' when filed_at is absent.""" + mock_col = MagicMock() + mock_col.query.return_value = { + "ids": [["drawer_no_date"]], + "documents": [["Some text without a date"]], + "metadatas": [[{"wing": "project", "room": "backend", "source_file": "x.py"}]], + "distances": [[0.1]], + } + + with patch("mempalace.searcher.get_collection", return_value=mock_col): + result = search_memories("test", "/fake/path") + hit = result["results"][0] + assert hit["created_at"] == "unknown" def test_search_memories_query_error(self): """search_memories returns error dict when query raises."""