Index: src/services/ap-inbox.js
===================================================================
--- src/services/ap-inbox.js	(revision 31680c3360308110ee32435ada564ef21f612bce)
+++ src/services/ap-inbox.js	(revision 61d52ede440cc84be8e3617e1cc0851eb3a9ba31)
@@ -30,4 +30,5 @@
 import { fwStmts } from './ap-following.js';
 import * as HubInvite from './hub-invite.js';
+import * as ConversationKey from './conversation-key.js';
 
 /**
@@ -852,8 +853,22 @@
             // laten voor iedereen die de objectvorm stuurt.
             const ouder = safeUrl(typeof o.inReplyTo === 'string' ? o.inReplyTo : (o.inReplyTo && o.inReplyTo.id)) || null;
-            const r = db.prepare(`INSERT OR IGNORE INTO ap_mentions (slug, object_uri, note_url, actor_uri, actor_name, actor_handle, actor_icon, actor_url, content, published, in_reply_to, help_request, wave, has_guardians, emoji_json, actor_emoji_json, media_json, created_at)
-                                  VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,${NU_ISO})`)
+            // WIE ER NOG MEER BIJ WAS (shaer-mbji). De afzender plus iedere
+            // persoon in to/cc, zonder ons. Zonder dit wist een bericht van
+            // Anna aan jou en Ben niet meer dat Ben erbij was, en kwam het
+            // alleen in het gesprek met Anna terecht.
+            //
+            // ALLEEN VOOR EEN DIRECT BERICHT. Deze tabel draagt ook publieke
+            // posts die ons noemen, en een openbare post aan jou en Ben is geen
+            // besloten gesprek met z'n drieën -- dat zou een groep verzinnen
+            // die niemand begon. Die blijft bij zijn afzender, zoals altijd.
+            const ander = noteVisibility(o) === 'direct'
+              ? ConversationKey.participantsOf(o, actorUri, actorId(base, slug))
+              : [actorUri];
+            const conv = ConversationKey.conversationKey(ander) || actorUri;
+            const r = db.prepare(`INSERT OR IGNORE INTO ap_mentions (slug, object_uri, note_url, actor_uri, actor_name, actor_handle, actor_icon, actor_url, content, published, in_reply_to, help_request, wave, has_guardians, emoji_json, actor_emoji_json, media_json, conv, participants, context, created_at)
+                                  VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,${NU_ISO})`)
               .run(slug, o.id, safeUrl(o.url) || null, actorUri, ai.name, ai.handle, ai.icon, ai.url, html, o.published || null, ouder, help ? 1 : 0, wave ? 1 : 0, hasG ? 1 : 0,
-                extractEmojiTags(o.tag), emojiJsonOf(ai.emojis), mediaFromNote(o));
+                extractEmojiTags(o.tag), emojiJsonOf(ai.emojis), mediaFromNote(o),
+                conv, JSON.stringify(ander), ConversationKey.contextOf(o));
             if (r.changes) {
               // The quote / link-preview card resolves out of band (a remote
