Conversation
PR SummaryMedium Risk Overview Introduces Updates the EvalOps memory store path to accept and forward a caller-supplied Reviewed by Cursor Bugbot for commit 5c6552f. Bugbot is set up for automated code reviews on this repo. Configure here. |
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes and found 2 potential issues.
Bugbot Autofix is ON, but it could not run because the branch was deleted or merged before autofix could start.
Reviewed by Cursor Bugbot for commit 5c6552f. Configure here.
| .set({ updatedAt: new Date(now) }) | ||
| .where(eq(schema.threads.id, data.threadId)) | ||
| .run() | ||
| syncChatThreadMemoryInBackground(data.threadId) |
There was a problem hiding this comment.
Chat memory sync race can overwrite complete data
Medium Severity
Every chat turn triggers syncChatThreadMemoryInBackground twice on the same memory ID: first from the messages:create IPC handler (capturing only the user message), and then from finalize in presenter-agent.ts (capturing both user and assistant messages). If the first sync's network call is delayed beyond the LLM response time, it can complete after the second sync, overwriting the complete conversation snapshot with a stale, user-message-only version. The renderer calls these sequentially (messages:create then ai:chatStream), confirmed in chatStore.ts and hummingbird/App.tsx.
Additional Locations (1)
Reviewed by Cursor Bugbot for commit 5c6552f. Configure here.
| '', | ||
| meeting.summary, | ||
| meeting.transcript ? `\nTranscript excerpt:\n${meeting.transcript.slice(0, 4_000)}` : '' | ||
| ].filter(Boolean).join('\n')) |
There was a problem hiding this comment.
filter(Boolean) removes intentional blank line separators
Low Severity
The filter(Boolean) in syncMeetingSummaryMemory and syncJournalEntryMemory is meant to strip conditional empty-string entries (e.g. when audioPath or tldr is absent), but it also silently removes the intentional '' blank-line separators between the metadata header and the content body. This is inconsistent with syncChatThreadMemory, which uses .join('\n') without filter(Boolean) and correctly preserves its blank line. The result is that meeting and journal memory content has no visual separation between metadata and body text.
Additional Locations (1)
Reviewed by Cursor Bugbot for commit 5c6552f. Configure here.


Summary
Refs #15
Validation
Follow-up kept on #15