apply filter + cutoff on listRecords fallback; fix skip copy
review followups on the filter commit:
- the listRecords fallback was skipping denylisted collections but
never running the count pass or applying the TID cutoff, so any repo
that hit the fallback (old/flaky PDS, CAR walker failure) regressed
to the old unbounded behavior. now the fallback paginates non-skipped
collections, then post-hoc applies the same 2-year TID cutoff if the
total crosses LARGE_REPO_THRESHOLD. post-hoc is less efficient than
the pre-filter count pass but listRecords doesn't report per-
collection totals, so we can't decide before fetching. fallback is
rare enough that the extra transient memory is acceptable; revisit
if it starts firing routinely.
- made decodeTidMicros public so the fallback can reuse it without
copy-pasting the TID alphabet.
- derived per_collection from collection_of post-cutoff in the
fallback, matching the CAR path (previously inlined during
pagination, which meant cutoff-dropped records still counted).
- skipped_by_collection stays 0 on the fallback path (documented) —
listRecords can't cheaply report what we chose not to fetch.
- fixed pack-meta copy to say "records with no text content" instead
of "likes/follows/reposts" — the denylist covers blocks, listitems,
threadgates, actor status, chat declarations, and tangled graph
follows/stars too. the old copy was misleading for any repo with
those record types.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>