From bf022f45d753b3a51da53eecc2489cf5d17481f1 Mon Sep 17 00:00:00 2001 From: lanyuanxiaoyao Date: Mon, 8 Jun 2026 18:40:39 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20loadConfig=20=E7=BB=9F=E4=B8=80?= =?UTF-8?q?=E8=B5=B0=20mergeConfig=20=E8=B7=AF=E5=BE=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/core/config.ts | 7 ++----- tests/core/config.test.ts | 11 +++++++++++ 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/src/core/config.ts b/src/core/config.ts index 57c4e82..e4d3a00 100644 --- a/src/core/config.ts +++ b/src/core/config.ts @@ -25,12 +25,9 @@ export async function loadConfig(projectRoot: string): Promise { try { const content = await readFile(configPath, "utf-8"); const userConfig = parseYaml(content) as Partial | null; - if (!userConfig?.stages) { - return structuredClone(defaultConfig); - } - return mergeConfig(userConfig); + return mergeConfig(userConfig ?? {}); } catch { - return structuredClone(defaultConfig); + return mergeConfig({}); } } diff --git a/tests/core/config.test.ts b/tests/core/config.test.ts index b68a1b0..eb770e3 100644 --- a/tests/core/config.test.ts +++ b/tests/core/config.test.ts @@ -75,6 +75,17 @@ describe("loadConfig", () => { expect(config.stages.plan!.documents[0].name).toBe("spec"); }); + it("空配置 stages: {} 时返回完整默认配置", async () => { + const runeDir = join(TMP_DIR, ".rune"); + await mkdir(runeDir, { recursive: true }); + await writeFile(join(runeDir, "config.yaml"), "stages: {}"); + const config = await loadConfig(TMP_DIR); + expect(config.stages.discuss).toBeDefined(); + expect(config.stages.plan).toBeDefined(); + expect(config.stages.build).toBeDefined(); + expect(config.stages.archive).toBeDefined(); + }); + it("YAML 解析错误时返回默认配置", async () => { const runeDir = join(TMP_DIR, ".rune"); await mkdir(runeDir, { recursive: true });