fix: make audioUrl optional in track lexicon, reject future timestamps (#1078)
audioUrl was required in the lexicon schema, forcing third-party ATProto
clients to provide a meaningless placeholder URL when audio is stored as
a blob on the PDS. now audioUrl is optional — records must have at least
one of audioUrl or audioBlob (enforced at ingest, not schema level, since
lexicons can't express oneOf).
also rejects records with createdAt more than 5 minutes in the future,
which caught a real bug where pdsx sent naive local time interpreted as UTC.
fixes circular import in tasks/__init__.py (jetstream → tasks.ingest →
tasks/__init__ → jetstream) by deferring consume_jetstream import.
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
authored by