Fix: boosted video-only posts keep their media in the Circle (Loops)
Boosting a video-only post lost its media twice over: resolveRemoteNote only
surfaced image/* attachments (images list), so upsertBoostedNote stored
media_json=[] for a Loops video; and its refresh-UPDATE clobbered an existing
good media_json (cached via following) with that empty set. resolveRemoteNote
now also returns full typed media via mediaFromNote (images stays image-only
for the interact preview); upsertBoostedNote prefers the typed media and its
refresh keeps cached media when the resolve yielded none. Verified live: the
reported Loops file is 2.9MB with moov in reach, and a seeded boosted video row
now renders a grid tile with a real generated poster (200 image/webp, 13KB).
Covered by test/boost-media.test.js (63 tests green). Reported by Robin.
Co-Authored-By: Claude Opus 4.8 <noreply@…>