add moderation filtering and store avatar CIDs instead of full URLs
moderation: hide actors with bluesky moderation labels (!hide, !takedown,
spam) and self-applied !no-unauthenticated from search results. ingester
detects self-labels on ingest; hourly cron refreshes labels by walking the
index. request-indexing endpoint returns JSON instead of HTML.
avatar CIDs: store ~59-byte CIDs instead of ~130-byte full CDN URLs in
avatar_url column. reconstruct full URLs at query time via avatarUrl().
helper handles both formats for safe deploy-then-migrate ordering.
saves ~70 bytes/row (~2.8GB at 40M actors vs the 10GB D1 ceiling).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>