From a2267502ba16b09d5a7911d1f17f6c0fc7710e26 Mon Sep 17 00:00:00 2001 From: Madhura68 Date: Sun, 10 May 2026 15:18:19 +0200 Subject: [PATCH] feat(PBI-76): extend UserSettings schema with layout Adds layout.splitPanePositions and layout.activeSprints. These will hold values currently kept in client-side and server-side cookies (Phase 2). Two new tests cover the shape. Co-Authored-By: Claude Opus 4.7 (1M context) --- __tests__/lib/user-settings.test.ts | 10 ++++++++++ lib/user-settings.ts | 6 ++++++ 2 files changed, 16 insertions(+) diff --git a/__tests__/lib/user-settings.test.ts b/__tests__/lib/user-settings.test.ts index 019cc33..c7cd5d9 100644 --- a/__tests__/lib/user-settings.test.ts +++ b/__tests__/lib/user-settings.test.ts @@ -109,7 +109,17 @@ describe('UserSettingsSchema', () => { jobsColumns: { 'queue:active': { kinds: ['TASK_IMPLEMENTATION'], statuses: [] } }, }, devTools: { debugMode: true }, + layout: { + splitPanePositions: { 'backlog-pid': [25, 35, 40] }, + activeSprints: { 'product-1': 'sprint-1' }, + }, }) expect(result.success).toBe(true) }) + + it('accepts layout-only settings', () => { + expect(UserSettingsSchema.safeParse({ + layout: { splitPanePositions: { x: [50, 50] }, activeSprints: { p: 's' } }, + }).success).toBe(true) + }) }) diff --git a/lib/user-settings.ts b/lib/user-settings.ts index 86621fd..597a2c4 100644 --- a/lib/user-settings.ts +++ b/lib/user-settings.ts @@ -43,9 +43,15 @@ const DevToolsPrefs = z.object({ debugMode: z.boolean().optional(), }).strict() +const LayoutPrefs = z.object({ + splitPanePositions: z.record(z.string(), z.array(z.number())).optional(), + activeSprints: z.record(z.string(), z.string()).optional(), +}).strict() + export const UserSettingsSchema = z.object({ views: ViewsPrefs.optional(), devTools: DevToolsPrefs.optional(), + layout: LayoutPrefs.optional(), }).strict() export type UserSettings = z.infer