refactor: extract shared post-creation hooks from upload path (#1068)
move post-creation side effects (notifications, copyright scan, embedding
generation, genre classification, cache invalidation) into a shared
`run_post_track_create_hooks()` function. this enables both the upload
path and the upcoming Jetstream ingest path to share the same behavior.
also moves `invalidate_tracks_discovery_cache` from listing.py to
hooks.py and adds `pds_blob_url` helper to atproto client.
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
authored by