mirror of
https://github.com/danny-avila/LibreChat.git
synced 2026-07-10 16:23:44 +00:00
Project membership writes bypassed forced retention: assigning a chat to a project, removing it, or deleting the project rewrote the conversation row (chatProjectId) without setting isTemporary/expiredAt. On a deployment that switched to ephemeral mode, touching an older permanent chat this way left it visible and non-expiring. Load the interface config on the assign and delete project routes and cascade forced retention through the touched conversation(s): assign/remove caps the single conversation, its messages, and its shares; delete caps every member chat before unassigning. Extract the bucketed tag cascade into a shared helper so the project cascade reuses the same conversion/backfill/cap logic, and add a shared resolveForcedRetentionDate helper. All paths are a no-op outside forced retention, so non-ephemeral behavior is unchanged. |
||
|---|---|---|
| .. | ||
| app | ||
| cache | ||
| config | ||
| db | ||
| models | ||
| server | ||
| strategies | ||
| test | ||
| utils | ||
| jest.config.js | ||
| jsconfig.json | ||
| package.json | ||
| typedefs.js | ||