fix: memory entry validation crashes on a non-dict row from memory.json (#1691)
This commit is contained in:
@@ -137,6 +137,8 @@ class MemoryManager:
|
||||
"""Ensure all entries have required fields."""
|
||||
validated = []
|
||||
for entry in entries:
|
||||
if not isinstance(entry, dict):
|
||||
continue
|
||||
if "id" not in entry:
|
||||
entry["id"] = str(uuid.uuid4())
|
||||
if "timestamp" not in entry:
|
||||
|
||||
19
tests/test_memory_validate_entries_nondict.py
Normal file
19
tests/test_memory_validate_entries_nondict.py
Normal 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"
|
||||
Reference in New Issue
Block a user