Skip to content

Commit e70f55a

Browse files
phernandezclaude
andcommitted
fix: use is not None guard for empty frontmatter dict validation
`frontmatter={}` is a valid input where required keys should be flagged missing. The truthiness check `if frontmatter` skipped validation for empty dicts, allowing strict-mode to incorrectly pass. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> Signed-off-by: phernandez <paul@basicmachines.co>
1 parent d8d7a66 commit e70f55a

2 files changed

Lines changed: 18 additions & 1 deletion

File tree

src/basic_memory/schema/validator.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ def validate_note(
119119
# Trigger: schema has frontmatter_fields and caller provided frontmatter dict
120120
# Why: settings.frontmatter rules validate metadata keys like tags, status
121121
# Outcome: frontmatter fields produce the same FieldResult/warning/error as content fields
122-
if frontmatter and schema.frontmatter_fields:
122+
if frontmatter is not None and schema.frontmatter_fields:
123123
for fm_field in schema.frontmatter_fields:
124124
field_result = _validate_frontmatter_field(fm_field, frontmatter)
125125
result.field_results.append(field_result)

tests/schema/test_validator.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -360,6 +360,23 @@ def test_frontmatter_none_skips_validation(self):
360360
assert result.passed is True
361361
assert result.field_results == []
362362

363+
def test_empty_frontmatter_dict_validates_missing_keys(self):
364+
"""frontmatter={} is a valid input — required keys should be flagged missing."""
365+
fm_field = SchemaField(name="status", type="string", required=True)
366+
schema = self._make_fm_schema([fm_field])
367+
result = validate_note("test-note", schema, [], [], frontmatter={})
368+
assert result.field_results[0].status == "missing"
369+
assert len(result.warnings) == 1
370+
assert "status" in result.warnings[0]
371+
372+
def test_empty_frontmatter_dict_strict_fails(self):
373+
"""frontmatter={} in strict mode should produce errors for required keys."""
374+
fm_field = SchemaField(name="status", type="string", required=True)
375+
schema = self._make_fm_schema([fm_field], validation_mode="strict")
376+
result = validate_note("test-note", schema, [], [], frontmatter={})
377+
assert result.passed is False
378+
assert len(result.errors) == 1
379+
363380
def test_empty_frontmatter_fields_skips_validation(self):
364381
schema = self._make_fm_schema([])
365382
result = validate_note("test-note", schema, [], [], frontmatter={"status": "draft"})

0 commit comments

Comments
 (0)