Index: src/services/ActivityPubService.js
===================================================================
--- src/services/ActivityPubService.js	(revision 0101d0a23f8210828d4680832a5f1d30b5772d63)
+++ src/services/ActivityPubService.js	(revision c52dc82434331354ded181d0905a44614892a72e)
@@ -2849,5 +2849,5 @@
 // during a flux window, e.g. a fleet-wide update), and drops notes that are gone
 // (404/410). Bump SELFHEAL_VERSION only on a release that warrants a re-sync.
-const SELFHEAL_VERSION = 16; // v16: resolve external link previews (embed_json) for posts that predate the embed pipeline
+const SELFHEAL_VERSION = 17; // v17: re-resolve link previews now that OpenGraph works and big pages are read instead of refused
 async function fetchNoteAP(url) {
   try {
@@ -3190,5 +3190,5 @@
         // quote (a quote already IS the card) and no embed yet, so this costs
         // one page fetch per candidate and never repeats.
-        if (!r.quote_json && !r.embed_json) {
+        if (!r.quote_json) {
           const ej = await resolveExternalEmbed(html || r.content).catch(() => null);
           if (ej) { try { db.prepare('UPDATE ap_timeline SET embed_json = ? WHERE id = ?').run(ej, r.id); } catch { /* ignore */ } }
