merge: resolve changelog conflicts with main

Keep both Unreleased bullets: the config-wipe Settings fix and the
stale merged-PR Git panel fix from main.

Co-authored-by: serkraser <serkraser@gmail.com>
This commit is contained in:
Cursor Agent
2026-08-15 05:30:54 +00:00
co-authored by serkraser
13 changed files with 671 additions and 98 deletions
@@ -375,6 +375,9 @@ export const createSettingsHelpers = (dependencies) => {
const normalizedDays = Math.max(1, Math.min(365, Math.round(candidate.autoDeleteAfterDays)));
result.autoDeleteAfterDays = normalizedDays;
}
if (candidate.sessionRetentionAction === 'archive' || candidate.sessionRetentionAction === 'delete') {
result.sessionRetentionAction = candidate.sessionRetentionAction;
}
if (candidate.tunnelBootstrapTtlMs === null) {
result.tunnelBootstrapTtlMs = null;
} else if (typeof candidate.tunnelBootstrapTtlMs === 'number' && Number.isFinite(candidate.tunnelBootstrapTtlMs)) {
@@ -466,4 +466,39 @@ describe('settings helpers', () => {
expect(sanitized.recentModels).toEqual(payload.recentModels);
});
});
describe('session retention settings persistence', () => {
it('round-trips sessionRetentionAction archive and delete through the sanitizer', () => {
const helpers = createTestHelpersWithRealSanitizers();
expect(helpers.sanitizeSettingsUpdate({ sessionRetentionAction: 'archive' })).toEqual({
sessionRetentionAction: 'archive',
});
expect(helpers.sanitizeSettingsUpdate({ sessionRetentionAction: 'delete' })).toEqual({
sessionRetentionAction: 'delete',
});
});
it('rejects invalid sessionRetentionAction values', () => {
const helpers = createTestHelpersWithRealSanitizers();
expect(helpers.sanitizeSettingsUpdate({ sessionRetentionAction: 'remove' })).toEqual({});
expect(helpers.sanitizeSettingsUpdate({ sessionRetentionAction: true })).toEqual({});
});
it('survives a full settings payload containing sessionRetentionAction (regression)', () => {
const helpers = createTestHelpersWithRealSanitizers();
const payload = {
autoDeleteEnabled: true,
autoDeleteAfterDays: 60,
sessionRetentionAction: 'delete',
};
const sanitized = helpers.sanitizeSettingsUpdate(payload);
expect(sanitized.autoDeleteEnabled).toBe(true);
expect(sanitized.autoDeleteAfterDays).toBe(60);
expect(sanitized.sessionRetentionAction).toBe('delete');
});
});
});