Skip to main content
Version: main 🚧

Bug Fix: New Chat Removing Old Conversations

Motivation​

When clicking "New Chat", the old chat was being removed and replaced with the new one, instead of adding the new conversation to the existing list.

Root Cause​

The bug had two problems:

Problem 1: Naive Sync Logic​

The syncConversationsFromMongoDB() function was doing a naive replacement:

// OLD (BROKEN) CODE:
conversations: [...mongoConversations, ...localOnly]

This completely replaced the conversation list with:

  1. All MongoDB conversations (fresh from API)
  2. Local-only conversations (not yet in MongoDB)

Issues:

  • Lost the order of conversations
  • Discarded any local changes/messages not yet synced
  • Could cause race conditions during rapid operations

Problem 2: No Immediate Local Update​

When creating a new conversation in MongoDB mode:

// OLD FLOW:
1. Create in MongoDB → GET ID
2. Call syncConversationsFromMongoDB() → Replace entire list
3. Redirect to new conversation

The sync operation would fetch ALL conversations from MongoDB and replace the local store, potentially losing:

  • Conversations with unsaved messages
  • Recently created conversations
  • Local-only conversations

Testing Strategy​

Test Case 1: Create Multiple Conversations​

Before (Broken):

1. Have conversation "Chat 1"
2. Click "New Chat"
3. ❌ "Chat 1" disappears
4. ❌ Only "New Conversation" visible

After (Fixed):

1. Have conversation "Chat 1"
2. Click "New Chat"
3. ✅ "Chat 1" still visible
4. ✅ "New Conversation" added at top
5. ✅ Both conversations in sidebar

Test Case 2: Rapid New Chats​

Before (Broken):

1. Click "New Chat" → Creates Chat A
2. Quickly click "New Chat" again → Creates Chat B
3. ❌ Chat A might disappear
4. ❌ Only Chat B visible

After (Fixed):

1. Click "New Chat" → Creates Chat A
2. Quickly click "New Chat" again → Creates Chat B
3. ✅ Both Chat A and Chat B visible
4. ✅ Proper chronological order

Test Case 3: MongoDB Sync with Local Conversations​

Before (Broken):

1. Create "Local Chat" (localStorage only)
2. Enable MongoDB
3. Create "MongoDB Chat"
4. ❌ "Local Chat" might disappear during sync

After (Fixed):

1. Create "Local Chat" (localStorage only)
2. Enable MongoDB
3. Create "MongoDB Chat"
4. ✅ Both chats remain visible
5. ✅ "Local Chat" marked as local-only
6. ✅ "MongoDB Chat" synced to backend

Summary​

Problem: Creating new chat removed old conversations

Root Cause:

  1. Sync operation replaced entire list
  2. No immediate local store update

Solution:

  1. Intelligent merge preserves existing conversations
  2. Immediate local update for instant UI feedback

Result:

  • ✅ All conversations preserved
  • ✅ Proper chronological order
  • ✅ Instant UI updates
  • ✅ No data loss
  • ✅ Better UX

The bug is now fixed! 🎉