Don't bulk-pull follows: collection cardinality dictates access pattern
The follow=500(capped) in the eval was a tell — bulk-scraping an unbounded set is
the request-time-scraper anti-pattern this architecture exists to kill, and a silent
cap is just truncation (removing it to pull all 5k would be worse). The fix isn't the
number; it's the access pattern.
Principle (now in the doc): bounded high-signal collections (blocks, lists) are
materialized; high-cardinality/low-signal ones (follows) are maintained incrementally
from the firehose changelog (each event O(1)) and answered as scoped membership checks
("does U follow THIS actor?" via getRelationships for the few actors of interest) —
never bulk-pulled. featuresFromRepoRecords stays per-record-pure (correct for the
changelog path); the anti-pattern was only in the eval's bulk listRecords over follows,
now removed.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>