Index: src/config/database.js
===================================================================
--- src/config/database.js	(revision 6089c53ce58d9a815c32fa7f8ddb549efce96d68)
+++ src/config/database.js	(revision 73a10c23efd11af6b4f5da8a0187b68d003df265)
@@ -696,4 +696,11 @@
   ensureColumn('ap_gated_offers', 'proposer', 'TEXT'); // who proposed (5.6): the settle-answer goes back to them
   ensureColumn('posts', 'c2s_attachments', 'TEXT'); // media a C2S Note carried (JSON [{url,mediaType,name}]); buildNote federates them
+  // 30-7: C2S posts briefly got their content media copied onto the cover,
+  // which showed the same video twice on the post page. Clear the covers that
+  // duplicate their own content; idempotent, only ever touches those.
+  try {
+    db.prepare("UPDATE posts SET cover_video_url = NULL WHERE cover_video_url LIKE '/media/reply-media/%' AND instr(content, cover_video_url) > 0").run();
+    db.prepare("UPDATE posts SET cover_image_url = NULL WHERE cover_image_url LIKE '/media/reply-media/%' AND instr(content, cover_image_url) > 0").run();
+  } catch { /* posts table absent on fresh init */ }
   ensureColumn('ap_mentions', 'wave', 'INTEGER');  // inbound guardian wave
   // FEP-633c §2.2: object hint that the author is a ward. Register-only for now;
