From 304267199e6a7474768525ceaa021086c2845ba9 Mon Sep 17 00:00:00 2001 From: Hermes Date: Thu, 30 Jul 2026 23:59:11 +0000 Subject: [PATCH] fix(build): use zod v3 two-arg form for z.record across all shared schemas MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Same fix as the agent schema commit — zod 3.25 (resolved by ^3.25.0) requires z.record() to take both key and value schemas. The single-arg form is v4 syntax. Fixed 15 remaining call sites across canvas, project, report, common, webhook, habit, task, note, and milestone schemas. Pure type-only fix — runtime behavior identical. --- packages/shared/src/schemas/canvas.ts | 2 +- packages/shared/src/schemas/common.ts | 6 +++--- packages/shared/src/schemas/habit.ts | 2 +- packages/shared/src/schemas/milestone.ts | 2 +- packages/shared/src/schemas/note.ts | 2 +- packages/shared/src/schemas/project.ts | 4 ++-- packages/shared/src/schemas/report.ts | 6 +++--- packages/shared/src/schemas/task.ts | 2 +- packages/shared/src/schemas/webhook.ts | 4 ++-- 9 files changed, 15 insertions(+), 15 deletions(-) diff --git a/packages/shared/src/schemas/canvas.ts b/packages/shared/src/schemas/canvas.ts index c59e066..f54ffbc 100644 --- a/packages/shared/src/schemas/canvas.ts +++ b/packages/shared/src/schemas/canvas.ts @@ -56,7 +56,7 @@ export const canvasSchema = z.object({ zoom: z.number().positive().default(1), }).optional(), background: z.string().optional(), - custom_fields: z.record(z.unknown()).optional(), + custom_fields: z.record(z.string(), z.unknown()).optional(), created: z.string().datetime(), updated: z.string().datetime(), }); diff --git a/packages/shared/src/schemas/common.ts b/packages/shared/src/schemas/common.ts index 6ae7d6a..6cc0a58 100644 --- a/packages/shared/src/schemas/common.ts +++ b/packages/shared/src/schemas/common.ts @@ -110,7 +110,7 @@ export const errorLogSchema = z.object({ source: z.string(), message: z.string(), stack_trace: z.string().optional(), - metadata: z.record(z.unknown()).optional(), + metadata: z.record(z.string(), z.unknown()).optional(), resolved: z.boolean().default(false), created: z.string().datetime(), updated: z.string().datetime(), @@ -134,11 +134,11 @@ export const queueJobSchema = z.object({ id: z.string(), queue: z.string(), type: z.string(), - payload: z.record(z.unknown()), + payload: z.record(z.string(), z.unknown()), status: queueJobStatusEnum.default('pending'), attempts: z.number().int().nonnegative().default(0), max_attempts: z.number().int().positive().default(3), - result: z.record(z.unknown()).optional(), + result: z.record(z.string(), z.unknown()).optional(), error_message: z.string().optional(), scheduled_at: z.string().datetime().optional(), started_at: z.string().datetime().optional(), diff --git a/packages/shared/src/schemas/habit.ts b/packages/shared/src/schemas/habit.ts index f672b05..a3aff07 100644 --- a/packages/shared/src/schemas/habit.ts +++ b/packages/shared/src/schemas/habit.ts @@ -62,7 +62,7 @@ export const habitSchema = z.object({ score_config: habitScoreConfigSchema.optional(), active: z.boolean().default(true), tags: z.array(z.string()).default([]), - custom_fields: z.record(z.unknown()).optional(), + custom_fields: z.record(z.string(), z.unknown()).optional(), created: z.string().datetime(), updated: z.string().datetime(), }); diff --git a/packages/shared/src/schemas/milestone.ts b/packages/shared/src/schemas/milestone.ts index 60b3d66..66ec4db 100644 --- a/packages/shared/src/schemas/milestone.ts +++ b/packages/shared/src/schemas/milestone.ts @@ -70,7 +70,7 @@ export const milestoneSchema = z.object({ completed_at: z.string().datetime().optional(), tasks: z.array(z.string()).default([]), dependencies: z.array(milestoneDependencySchema).default([]), - custom_fields: z.record(z.unknown()).optional(), + custom_fields: z.record(z.string(), z.unknown()).optional(), created: z.string().datetime(), updated: z.string().datetime(), }); diff --git a/packages/shared/src/schemas/note.ts b/packages/shared/src/schemas/note.ts index caf3332..6e2ad05 100644 --- a/packages/shared/src/schemas/note.ts +++ b/packages/shared/src/schemas/note.ts @@ -53,7 +53,7 @@ export const noteSchema = z.object({ size: z.number(), url: z.string(), })).default([]), - custom_fields: z.record(z.unknown()).optional(), + custom_fields: z.record(z.string(), z.unknown()).optional(), created: z.string().datetime(), updated: z.string().datetime(), }); diff --git a/packages/shared/src/schemas/project.ts b/packages/shared/src/schemas/project.ts index 476d987..c2e7961 100644 --- a/packages/shared/src/schemas/project.ts +++ b/packages/shared/src/schemas/project.ts @@ -14,7 +14,7 @@ export const projectSettingsSchema = z.object({ pomodoro_focus_minutes: z.number().int().positive().default(25), pomodoro_break_minutes: z.number().int().positive().default(5), notifications_enabled: z.boolean().default(true), - custom_fields: z.record(z.unknown()).optional(), + custom_fields: z.record(z.string(), z.unknown()).optional(), }); // ── Project Schema ─────────────────────────────────────────────────────────── @@ -33,7 +33,7 @@ export const projectSchema = z.object({ target_date: z.string().datetime().optional(), completed_at: z.string().datetime().optional(), settings: projectSettingsSchema.optional(), - custom_fields: z.record(z.unknown()).optional(), + custom_fields: z.record(z.string(), z.unknown()).optional(), created: z.string().datetime(), updated: z.string().datetime(), }); diff --git a/packages/shared/src/schemas/report.ts b/packages/shared/src/schemas/report.ts index da96b1c..5e11b92 100644 --- a/packages/shared/src/schemas/report.ts +++ b/packages/shared/src/schemas/report.ts @@ -14,7 +14,7 @@ export const reportTemplateSchema = z.object({ sections: z.array(z.object({ title: z.string(), type: z.enum(['summary', 'chart', 'table', 'list', 'text']).default('text'), - config: z.record(z.unknown()).optional(), + config: z.record(z.string(), z.unknown()).optional(), sort_order: z.number().int().nonnegative().default(0), })).default([]), created: z.string().datetime(), @@ -42,14 +42,14 @@ export const reportSchema = z.object({ sections: z.array(z.object({ title: z.string(), content: z.string().optional(), - data: z.record(z.unknown()).optional(), + data: z.record(z.string(), z.unknown()).optional(), sort_order: z.number().int().nonnegative().default(0), })).default([]), summary: z.string().optional(), is_draft: z.boolean().default(true), generated_at: z.string().datetime().optional(), tags: z.array(z.string()).default([]), - custom_fields: z.record(z.unknown()).optional(), + custom_fields: z.record(z.string(), z.unknown()).optional(), created: z.string().datetime(), updated: z.string().datetime(), }); diff --git a/packages/shared/src/schemas/task.ts b/packages/shared/src/schemas/task.ts index d8f9cd5..02b6e05 100644 --- a/packages/shared/src/schemas/task.ts +++ b/packages/shared/src/schemas/task.ts @@ -47,7 +47,7 @@ export const taskSchema = z.object({ attachments: z.array(attachmentSchema).default([]), dependencies: z.array(z.string()).default([]), subtasks: z.array(subtaskSchema).default([]), - custom_fields: z.record(z.unknown()).optional(), + custom_fields: z.record(z.string(), z.unknown()).optional(), completed_at: z.string().datetime().optional(), created: z.string().datetime(), updated: z.string().datetime(), diff --git a/packages/shared/src/schemas/webhook.ts b/packages/shared/src/schemas/webhook.ts index c71262f..88a94eb 100644 --- a/packages/shared/src/schemas/webhook.ts +++ b/packages/shared/src/schemas/webhook.ts @@ -6,7 +6,7 @@ export const webhookDeliverySchema = z.object({ id: z.string(), webhook_id: z.string(), event: z.string(), - payload: z.record(z.unknown()), + payload: z.record(z.string(), z.unknown()), status: z.enum(['success', 'failed', 'pending']).default('pending'), status_code: z.number().int().optional(), response_body: z.string().optional(), @@ -30,7 +30,7 @@ export const webhookSchema = z.object({ headers: z.record(z.string()).optional(), retry_count: z.number().int().nonnegative().default(3), last_triggered_at: z.string().datetime().optional(), - custom_fields: z.record(z.unknown()).optional(), + custom_fields: z.record(z.string(), z.unknown()).optional(), created: z.string().datetime(), updated: z.string().datetime(), });