LibreChat/packages
Marco Beretta 98e98b51cd
fix: guard forced-retention message backfill nulls and keep the sweep re-runnable
Two hardening fixes on the ephemeral-retention backfill:

- forceConversationMessagesTemporary and the by-tag cascade cap each
  message with `$min: [{ $ifNull: ['$expiredAt', forced] }, forced]`.
  A legacy permanent message (`expiredAt` null/missing) now reliably
  receives the forced deadline instead of depending on `$min`'s null
  handling, so the TTL index can remove it.
- sweepForcedRetention converts a conversation's messages and shares
  before marking the conversation itself conforming. If a child backfill
  throws, the conversation stays non-conforming and the gap-filtered
  query picks it up again, keeping the migration safe to re-run.
2026-07-01 19:49:05 +02:00
..
api fix: preserve earlier message and file expiries under forced retention 2026-07-01 19:38:20 +02:00
client 🧪 ci: Resolve DataTable test infinite re-render (#13947) 2026-06-24 23:40:18 -04:00
data-provider feat: add ephemeral retention mode for forced temporary chats 2026-06-30 04:51:45 +02:00
data-schemas fix: guard forced-retention message backfill nulls and keep the sweep re-runnable 2026-07-01 19:49:05 +02:00