A CardDAV addressbook-query REPORT with a text-match prop-filter on a structured property (e.g. N or ADR) returned HTTP 500. vobject parses these into Name/Address objects rather than plain strings, so text_match called .lower() on a non-string and raised AttributeError. Coerce non-string values to their text representation before matching. Co-Authored-By: Claude <noreply@anthropic.com>