Add Bluesky custom feeds for 1k / 10k like crossings
Two feeds served from this process:
top-1k — posts that have crossed 1,000 likes
top-10k — posts that have crossed 10,000 likes
Ordered by the time each post first crossed the threshold, newest first.
Posts are never removed if their like count later drops — per requirement.
Ordering is backed by the existing `notified_thresholds` SQLite table
populated by ThresholdScanJob, which already stores
(subject_uri, threshold, fired_at) dedup rows. No new data pipeline
needed — every detected crossing is already recorded there regardless of
whether FIREHOSE_WEBHOOK_URL_* is configured.
Endpoints (all on the web process):
GET /.well-known/did.json — did:web:<host>
GET /xrpc/app.bsky.feed.describeFeedGenerator — metadata
GET /xrpc/app.bsky.feed.getFeedSkeleton — ranked post URIs
Pagination uses a keyset cursor on (fired_at DESC, subject_uri DESC) so
it's stable under concurrent inserts.
Also adds `node ace feeds:publish` to bootstrap the feed records on a
real atproto account's PDS. Requires FEED_PUBLISHER_HANDLE and
FEED_PUBLISHER_APP_PASSWORD. After publishing, set FEED_PUBLISHER_DID
so describeFeedGenerator advertises the feeds.
https://claude.ai/code/session_01NJ15XWB5biJMu4e3zVHdC7