feat: add lexicon validation and ingest task layer (#1069)
add record-processing functions for all plyr.fm ATProto record types
(track, like, comment, list, profile) with:
- lexicon-based record validation before DB writes
- SubjectNotFoundError for retry on ordering gaps (likes/comments
arriving before their subject track)
- unique partial index on atproto_record_uri with IntegrityError catch
for replay safety
- full field reconciliation: supportGate, features, audio storage,
album/duration extras, playlist track_count
- dual-source audio_storage='both' for records with both PDS blob
and R2 URL
these tasks are registered with docket but dormant until the Jetstream
consumer (next PR) dispatches events to them.
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
authored by