Index: src/services/ActivityPubService.js
===================================================================
--- src/services/ActivityPubService.js	(revision 226b563ff9fdf63aa7645cf4135c2b96dcae7f54)
+++ src/services/ActivityPubService.js	(revision ae05747989c0db698829b0eccb94de8a33d7399f)
@@ -1579,5 +1579,8 @@
   let delivered = 0;
   for (const inbox of [...inboxes].filter(Boolean)) {
-    try { const st = await deliver(inbox, create, keyId, keys.private_pem); if (st >= 200 && st < 300) delivered++; } catch { /* best-effort */ }
+    let ok = false;
+    try { const st = await deliver(inbox, create, keyId, keys.private_pem); ok = st >= 200 && st < 300; } catch { ok = false; }
+    if (ok) delivered++;
+    else enqueueDelivery(site.slug, inbox, create); // durable: retry a briefly-offline recipient (was silently dropped)
   }
   console.log('[AP] outreply', site.slug, '→', parent.actor_uri, 'delivered', delivered);
@@ -1695,5 +1698,8 @@
     if (row.to_actor) { const a = await fetchActor(row.to_actor).catch(() => null); if (a) inboxes.add((a.endpoints && a.endpoints.sharedInbox) || a.inbox); }
     for (const f of fStmts().list.all(site.slug)) inboxes.add(f.shared_inbox || f.inbox);
-    for (const inbox of [...inboxes].filter(Boolean)) { try { await deliver(inbox, del, `${me}#main-key`, keys.private_pem); } catch { /* best-effort */ } }
+    for (const inbox of [...inboxes].filter(Boolean)) {
+      try { const st = await deliver(inbox, del, `${me}#main-key`, keys.private_pem); if (st >= 200 && st < 300) continue; } catch { /* queue below */ }
+      enqueueDelivery(site.slug, inbox, del); // durable: a failed comment-delete now retries (was silently dropped)
+    }
   }
   db.prepare('DELETE FROM ap_outbox WHERE id = ?').run(outboxId);
@@ -1735,5 +1741,8 @@
   let delivered = 0;
   for (const inbox of [...inboxes].filter(Boolean)) {
-    try { const st = await deliver(inbox, update, `${me}#main-key`, keys.private_pem); if (st >= 200 && st < 300) delivered++; } catch { /* best-effort */ }
+    let ok = false;
+    try { const st = await deliver(inbox, update, `${me}#main-key`, keys.private_pem); ok = st >= 200 && st < 300; } catch { ok = false; }
+    if (ok) delivered++;
+    else enqueueDelivery(site.slug, inbox, update); // durable: retry the edit later (was silently dropped)
   }
   console.log('[AP] outreply edit', site.slug, 'delivered', delivered);
