From 197dada95e63d4de70de8b8ec6eefb3c61bbf50e Mon Sep 17 00:00:00 2001 From: ismeth Date: Wed, 18 Feb 2026 20:55:05 +0100 Subject: [PATCH] fix(athena): enforce strict schema validation for council members Add .strict() to CouncilMemberSchema to reject unknown fields like temperature. Remove unused Zod-inferred type exports. Add test verifying unknown fields are rejected. Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode) Co-authored-by: Sisyphus --- src/config/schema/athena.test.ts | 11 +++++++++++ src/config/schema/athena.ts | 6 +----- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/src/config/schema/athena.test.ts b/src/config/schema/athena.test.ts index b8838bdf2..713c15047 100644 --- a/src/config/schema/athena.test.ts +++ b/src/config/schema/athena.test.ts @@ -111,6 +111,17 @@ describe("CouncilMemberSchema", () => { expect(parsed.variant).toBeUndefined() expect(parsed.name).toBeUndefined() }) + + test("rejects member config with unknown fields", () => { + //#given + const config = { model: "openai/gpt-5.3-codex", temperature: 0.2 } + + //#when + const result = CouncilMemberSchema.safeParse(config) + + //#then + expect(result.success).toBe(false) + }) }) describe("CouncilConfigSchema", () => { diff --git a/src/config/schema/athena.ts b/src/config/schema/athena.ts index ec9e135b8..b6270b16f 100644 --- a/src/config/schema/athena.ts +++ b/src/config/schema/athena.ts @@ -16,7 +16,7 @@ export const CouncilMemberSchema = z.object({ model: ModelStringSchema, variant: z.string().optional(), name: z.string().optional(), -}) +}).strict() export const CouncilConfigSchema = z.object({ members: z.array(CouncilMemberSchema).min(2), @@ -26,7 +26,3 @@ export const AthenaConfigSchema = z.object({ model: z.string().optional(), council: CouncilConfigSchema, }) - -export type CouncilMemberSchemaType = z.infer -export type CouncilConfigSchemaType = z.infer -export type AthenaConfigSchemaType = z.infer