Index: CHANGELOG.de.md
===================================================================
--- CHANGELOG.de.md	(revision 6ec04338dfdf8c8ac8693abbb0a4d6af3e6c4ce5)
+++ CHANGELOG.de.md	(revision 0a93c15436f7a8f5a12389660d2feb0a690a17c6)
@@ -5,4 +5,9 @@
 
 ## [Unreleased]
+
+### Behoben
+- **Umfragen behalten ihr Cover, wenn sie geboostet werden.** Eine Umfrage mit
+  Musik oder Embed wurde ohne Cover föderiert, sodass eine geteilte Umfrage eine
+  leere Kachel zeigte; das Cover reist jetzt mit.
 
 ## [1.3.4] — 2026-07-04
Index: CHANGELOG.md
===================================================================
--- CHANGELOG.md	(revision 6ec04338dfdf8c8ac8693abbb0a4d6af3e6c4ce5)
+++ CHANGELOG.md	(revision 0a93c15436f7a8f5a12389660d2feb0a690a17c6)
@@ -5,4 +5,9 @@
 
 ## [Unreleased]
+
+### Fixed
+- **Polls keep their cover art when boosted.** A poll with music or an embed was
+  federating without its cover, so a boosted poll showed a blank tile; the cover
+  now travels with it.
 
 ## [1.3.4] — 2026-07-04
Index: CHANGELOG.nl.md
===================================================================
--- CHANGELOG.nl.md	(revision 6ec04338dfdf8c8ac8693abbb0a4d6af3e6c4ce5)
+++ CHANGELOG.nl.md	(revision 0a93c15436f7a8f5a12389660d2feb0a690a17c6)
@@ -5,4 +5,9 @@
 
 ## [Unreleased]
+
+### Opgelost
+- **Polls behouden hun cover als ze geboost worden.** Een poll met muziek of een
+  embed federeerde zonder cover, waardoor een geboooste poll een leeg vak toonde;
+  de cover reist nu mee.
 
 ## [1.3.4] — 2026-07-04
Index: src/services/ActivityPubService.js
===================================================================
--- src/services/ActivityPubService.js	(revision 6ec04338dfdf8c8ac8693abbb0a4d6af3e6c4ce5)
+++ src/services/ActivityPubService.js	(revision 0a93c15436f7a8f5a12389660d2feb0a690a17c6)
@@ -890,6 +890,8 @@
   if (poll.closed) note.closed = poll.endTime ? new Date(poll.endTime).toISOString() : new Date().toISOString();
   note.votersCount = voters;
-  delete note.attachment;   // media + poll are mutually exclusive on Mastodon
-  delete note.image;
+  delete note.attachment;   // media ATTACHMENTS + a poll are mutually exclusive on Mastodon
+  // Keep note.image: it's the cover, which Mastodon ignores on a Question anyway
+  // (same as on any Note) but Klonkt reads to show the cover in feeds/the Cirkel.
+  // Deleting it stripped the cover off every boosted poll.
   return note;
 }
Index: test/polls.test.js
===================================================================
--- test/polls.test.js	(revision 6ec04338dfdf8c8ac8693abbb0a4d6af3e6c4ce5)
+++ test/polls.test.js	(revision 0a93c15436f7a8f5a12389660d2feb0a690a17c6)
@@ -42,4 +42,21 @@
   assert.ok(note.endTime, 'has an endTime');
   assert.ok(!('attachment' in note), 'no media on a poll (mutually exclusive on Mastodon)');
+});
+
+test('a poll KEEPS its cover in note.image (feeds show it; Mastodon ignores it)', () => {
+  // An embed/music poll suppresses image attachments (so Mastodon shows the
+  // player/embed card) and carries the cover in note.image instead — exactly
+  // the case that lost its cover when applyPollToNote deleted image.
+  const withCover = {
+    ...singlePoll, id: 'p1', slug: 'fav',
+    content: '<p>Pick one</p> [[embed:https://www.youtube.com/watch?v=abcdefghijk]]',
+    cover_image_url: '/media/post-images/cover.webp', cover_alt: 'Album art',
+  };
+  const note = AP.buildNote(BASE, site, withCover);
+  assert.equal(note.type, 'Question', 'still a Question');
+  assert.ok(note.image && note.image.url, 'the cover survives as note.image');
+  assert.ok(note.image.url.endsWith('/media/post-images/cover.webp'), 'absolute cover url');
+  assert.equal(note.image.name, 'Album art', 'alt text kept');
+  assert.ok(!('attachment' in note), 'still no media attachment on a poll');
 });
 
