diff --git a/lib/shared/messages/create-sidebar-message-spec.js b/lib/shared/messages/create-sidebar-message-spec.js
--- a/lib/shared/messages/create-sidebar-message-spec.js
+++ b/lib/shared/messages/create-sidebar-message-spec.js
@@ -29,7 +29,7 @@
   type EntityText,
   pluralizeEntityText,
 } from '../../utils/entity-text.js';
-import { isMentioned } from '../mention-utils.js';
+import { notifTextsForSidebarCreation } from '../notif-utils.js';
 import { hasMinCodeVersion } from '../version-utils.js';
 
 export const createSidebarMessageSpec: MessageSpec<
@@ -182,45 +182,27 @@
     threadInfo: ThreadInfo,
     params: NotificationTextsParams,
   ): Promise<NotifTexts> {
-    const firstMessageInfo = messageInfos[0];
+    const createSidebarMessageInfo = messageInfos[0];
     invariant(
-      firstMessageInfo.type === messageTypes.CREATE_SIDEBAR,
-      'firstMessageInfo should be messageTypes.CREATE_SIDEBAR!',
+      createSidebarMessageInfo.type === messageTypes.CREATE_SIDEBAR,
+      'first MessageInfo should be messageTypes.CREATE_SIDEBAR!',
     );
 
-    const creator = ET.user({ userInfo: firstMessageInfo.creator });
-    const prefix = ET`${creator}`;
-
-    const initialName = firstMessageInfo.initialThreadState.name;
-    const sourceMessageAuthorPossessive = ET.user({
-      userInfo: firstMessageInfo.sourceMessageAuthor,
-      possessive: true,
-    });
-
-    let body = `started a thread in response to `;
-    body = ET`${body} ${sourceMessageAuthorPossessive} message`;
-
-    const { username } = params.notifTargetUserInfo;
-
+    let sidebarSourceMessageInfo;
     const secondMessageInfo = messageInfos[1];
     if (
-      username &&
       secondMessageInfo &&
-      secondMessageInfo.type === messageTypes.SIDEBAR_SOURCE &&
-      secondMessageInfo.sourceMessage.type === messageTypes.TEXT &&
-      isMentioned(username, secondMessageInfo.sourceMessage.text)
+      secondMessageInfo.type === messageTypes.SIDEBAR_SOURCE
     ) {
-      body = ET`${body} that tagged you`;
-    } else if (initialName) {
-      body = ET`${body} "${initialName}"`;
+      sidebarSourceMessageInfo = secondMessageInfo;
     }
 
-    return {
-      merged: ET`${prefix} ${body}`,
-      body,
-      title: threadInfo.uiName,
-      prefix,
-    };
+    return notifTextsForSidebarCreation({
+      createSidebarMessageInfo,
+      sidebarSourceMessageInfo,
+      threadInfo,
+      params,
+    });
   },
 
   notificationCollapseKey(rawMessageInfo: RawCreateSidebarMessageInfo): string {
diff --git a/lib/shared/notif-utils.js b/lib/shared/notif-utils.js
--- a/lib/shared/notif-utils.js
+++ b/lib/shared/notif-utils.js
@@ -2,7 +2,9 @@
 
 import invariant from 'invariant';
 
+import { isMentioned } from './mention-utils.js';
 import { robotextForMessageInfo } from './message-utils.js';
+import type { NotificationTextsParams } from './messages/message-spec.js';
 import { messageSpecs } from './messages/message-specs.js';
 import { threadNoun } from './thread-utils.js';
 import {
@@ -11,8 +13,10 @@
   type RobotextMessageInfo,
   type MessageType,
   type MessageData,
+  type SidebarSourceMessageInfo,
   messageTypes,
 } from '../types/message-types.js';
+import type { CreateSidebarMessageInfo } from '../types/messages/create-sidebar.js';
 import type { NotifTexts, ResolvedNotifTexts } from '../types/notif-types.js';
 import type { ThreadInfo, ThreadType } from '../types/thread-types.js';
 import type { RelativeUserInfo, UserInfo } from '../types/user-types.js';
@@ -136,6 +140,55 @@
   };
 }
 
+type NotifTextsForSidebarCreationInput = {
+  +createSidebarMessageInfo: CreateSidebarMessageInfo,
+  +sidebarSourceMessageInfo?: ?SidebarSourceMessageInfo,
+  +threadInfo: ThreadInfo,
+  +params: NotificationTextsParams,
+};
+function notifTextsForSidebarCreation(
+  input: NotifTextsForSidebarCreationInput,
+): NotifTexts {
+  const {
+    sidebarSourceMessageInfo,
+    createSidebarMessageInfo,
+    threadInfo,
+    params,
+  } = input;
+
+  const creator = ET.user({ userInfo: createSidebarMessageInfo.creator });
+  const prefix = ET`${creator}`;
+
+  const initialName = createSidebarMessageInfo.initialThreadState.name;
+  const sourceMessageAuthorPossessive = ET.user({
+    userInfo: createSidebarMessageInfo.sourceMessageAuthor,
+    possessive: true,
+  });
+
+  let body = `started a thread in response to `;
+  body = ET`${body} ${sourceMessageAuthorPossessive} message`;
+
+  const { username } = params.notifTargetUserInfo;
+
+  if (
+    username &&
+    sidebarSourceMessageInfo &&
+    sidebarSourceMessageInfo.sourceMessage.type === messageTypes.TEXT &&
+    isMentioned(username, sidebarSourceMessageInfo.sourceMessage.text)
+  ) {
+    body = ET`${body} that tagged you`;
+  } else if (initialName) {
+    body = ET`${body} "${initialName}"`;
+  }
+
+  return {
+    merged: ET`${prefix} ${body}`,
+    body,
+    title: threadInfo.uiName,
+    prefix,
+  };
+}
+
 function mostRecentMessageInfoType(
   messageInfos: $ReadOnlyArray<MessageInfo>,
 ): MessageType {
@@ -257,6 +310,7 @@
   notifTextsForMessageInfo,
   notifTextsForEntryCreationOrEdit,
   notifTextsForSubthreadCreation,
+  notifTextsForSidebarCreation,
   getNotifCollapseKey,
   mergePrefixIntoBody,
 };