Do not let text filters erase attachment-only messages

A conversation projection must define message presence as text or safe attachment metadata, not as nonblank text alone. Otherwise image-only, audio-only, and file-only turns disappear before the UI can show them, making a “complete” thread incomplete and distorting chronological context. Normalize media to a small allowlisted shape such as kind, validated MIME type, and duration; keep provider URLs, bytes, and arbitrary payload fields out of the general thread contract. Preserve the same provider-ID deduplication and ordering used for text messages.

Applies when: webhook-backed support or chat UIs display multimodal provider conversations. Keywords: attachment-only messages media webhook conversation projection text filter deduplication