fix: memory entry validation crashes on a non-dict row from memory.json (#1691)

This commit is contained in:
Afonso Coutinho
2026-06-03 05:38:02 +01:00
committed by GitHub
parent f0b172020e
commit 35b9509da3
2 changed files with 21 additions and 0 deletions

View File

@@ -137,6 +137,8 @@ class MemoryManager:
"""Ensure all entries have required fields.""" """Ensure all entries have required fields."""
validated = [] validated = []
for entry in entries: for entry in entries:
if not isinstance(entry, dict):
continue
if "id" not in entry: if "id" not in entry:
entry["id"] = str(uuid.uuid4()) entry["id"] = str(uuid.uuid4())
if "timestamp" not in entry: if "timestamp" not in entry:

View File

@@ -0,0 +1,19 @@
from src.memory import MemoryManager
def test_validate_entries_skips_non_dict_rows(tmp_path):
# Entries come from json.load on the user-editable memory.json. A hand-edit
# that drops a bare string / number / null into the array made the old loop
# do item assignment on a non-dict and raise TypeError, losing the whole
# memory store. Bad rows are now skipped.
m = MemoryManager(str(tmp_path))
out = m._validate_entries([
{"id": "a", "text": "real memory"},
"corrupt-row",
None,
123,
])
assert [e["id"] for e in out] == ["a"]
# the surviving entry is still backfilled with required defaults
assert out[0]["category"] == "fact"
assert out[0]["source"] == "unknown"