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 });