From 5b9b6eb0b8d89ec6879c1df961c8ef5116cc5a3d Mon Sep 17 00:00:00 2001 From: MoerAI Date: Fri, 27 Mar 2026 21:00:01 +0900 Subject: [PATCH] fix(config): apply git_master defaults when section is missing (fixes #2040) --- src/config/schema.test.ts | 39 ++++++++++++++++++++++ src/config/schema/oh-my-opencode-config.ts | 6 +++- 2 files changed, 44 insertions(+), 1 deletion(-) diff --git a/src/config/schema.test.ts b/src/config/schema.test.ts index 7f4ad615f..d36e277d9 100644 --- a/src/config/schema.test.ts +++ b/src/config/schema.test.ts @@ -969,6 +969,45 @@ describe("GitMasterConfigSchema", () => { }) }) +describe("OhMyOpenCodeConfigSchema - git_master defaults (#2040)", () => { + test("git_master defaults are applied when section is missing from config", () => { + //#given + const config = {} + + //#when + const result = OhMyOpenCodeConfigSchema.safeParse(config) + + //#then + expect(result.success).toBe(true) + if (result.success) { + expect(result.data.git_master).toBeDefined() + expect(result.data.git_master.commit_footer).toBe(true) + expect(result.data.git_master.include_co_authored_by).toBe(true) + expect(result.data.git_master.git_env_prefix).toBe("GIT_MASTER=1") + } + }) + + test("git_master respects explicit false values", () => { + //#given + const config = { + git_master: { + commit_footer: false, + include_co_authored_by: false, + }, + } + + //#when + const result = OhMyOpenCodeConfigSchema.safeParse(config) + + //#then + expect(result.success).toBe(true) + if (result.success) { + expect(result.data.git_master.commit_footer).toBe(false) + expect(result.data.git_master.include_co_authored_by).toBe(false) + } + }) +}) + describe("skills schema", () => { test("accepts skills.sources configuration", () => { //#given diff --git a/src/config/schema/oh-my-opencode-config.ts b/src/config/schema/oh-my-opencode-config.ts index 434bfe7ee..5db7b0559 100644 --- a/src/config/schema/oh-my-opencode-config.ts +++ b/src/config/schema/oh-my-opencode-config.ts @@ -60,7 +60,11 @@ export const OhMyOpenCodeConfigSchema = z.object({ model_capabilities: ModelCapabilitiesConfigSchema.optional(), openclaw: OpenClawConfigSchema.optional(), babysitting: BabysittingConfigSchema.optional(), - git_master: GitMasterConfigSchema.optional(), + git_master: GitMasterConfigSchema.default({ + commit_footer: true, + include_co_authored_by: true, + git_env_prefix: "GIT_MASTER=1", + }), browser_automation_engine: BrowserAutomationConfigSchema.optional(), websearch: WebsearchConfigSchema.optional(), tmux: TmuxConfigSchema.optional(),