From 8b680179e29b5a0c9bd93df37354139dc38078c2 Mon Sep 17 00:00:00 2001 From: Tom Boucher Date: Mon, 30 Mar 2026 16:43:22 -0400 Subject: [PATCH] fix: add worktree-merge to resolveModelWithFallbacksForUnit switch and update KNOWN_UNIT_TYPES (#3066) Closes #2900 Co-authored-by: Claude Opus 4.6 --- .../extensions/gsd/preferences-models.ts | 1 + .../extensions/gsd/preferences-types.ts | 3 +- .../gsd/tests/model-unittype-mapping.test.ts | 28 +++++++++++++++++++ 3 files changed, 31 insertions(+), 1 deletion(-) diff --git a/src/resources/extensions/gsd/preferences-models.ts b/src/resources/extensions/gsd/preferences-models.ts index 238bdeb8c..22e6909b1 100644 --- a/src/resources/extensions/gsd/preferences-models.ts +++ b/src/resources/extensions/gsd/preferences-models.ts @@ -69,6 +69,7 @@ export function resolveModelWithFallbacksForUnit(unitType: string): ResolvedMode break; case "complete-slice": case "complete-milestone": + case "worktree-merge": case "run-uat": phaseConfig = m.completion; break; diff --git a/src/resources/extensions/gsd/preferences-types.ts b/src/resources/extensions/gsd/preferences-types.ts index 663c58376..443dc4920 100644 --- a/src/resources/extensions/gsd/preferences-types.ts +++ b/src/resources/extensions/gsd/preferences-types.ts @@ -100,7 +100,8 @@ export const KNOWN_PREFERENCE_KEYS = new Set([ export const KNOWN_UNIT_TYPES = [ "research-milestone", "plan-milestone", "research-slice", "plan-slice", "execute-task", "reactive-execute", "gate-evaluate", "complete-slice", "replan-slice", "reassess-roadmap", - "run-uat", "complete-milestone", + "run-uat", "complete-milestone", "validate-milestone", "rewrite-docs", + "discuss-milestone", "discuss-slice", "worktree-merge", ] as const; export type UnitType = (typeof KNOWN_UNIT_TYPES)[number]; diff --git a/src/resources/extensions/gsd/tests/model-unittype-mapping.test.ts b/src/resources/extensions/gsd/tests/model-unittype-mapping.test.ts index c23d1f4b2..82267a3e1 100644 --- a/src/resources/extensions/gsd/tests/model-unittype-mapping.test.ts +++ b/src/resources/extensions/gsd/tests/model-unittype-mapping.test.ts @@ -154,6 +154,34 @@ test("all auto-dispatch unitTypes have preference mapping or subagent handling", assert.deepEqual(unmapped, [], `Unmapped unitTypes in preferences-models.ts: ${unmapped.join(", ")}`); }); +// ═══════════════════════════════════════════════════════════════════════════ +// #2900: worktree-merge must map to completion phase +// ═══════════════════════════════════════════════════════════════════════════ + +test("#2900: resolveModelWithFallbacksForUnit handles worktree-merge", () => { + assert.ok(preferencesSrc.includes('"worktree-merge"'), "missing worktree-merge case in switch"); +}); + +// ═══════════════════════════════════════════════════════════════════════════ +// #2900: KNOWN_UNIT_TYPES must include all dispatched unit types +// ═══════════════════════════════════════════════════════════════════════════ + +const preferenceTypesSrc = readSrc("preferences-types.ts"); + +test("#2900: KNOWN_UNIT_TYPES includes all auto-dispatch unit types", () => { + const missing: string[] = []; + for (const ut of ALL_KNOWN_UNIT_TYPES) { + if (!preferenceTypesSrc.includes(`"${ut}"`)) { + missing.push(ut); + } + } + assert.deepEqual(missing, [], `Missing from KNOWN_UNIT_TYPES: ${missing.join(", ")}`); +}); + +test("#2900: KNOWN_UNIT_TYPES includes worktree-merge", () => { + assert.ok(preferenceTypesSrc.includes('"worktree-merge"'), "worktree-merge missing from KNOWN_UNIT_TYPES"); +}); + // ═══════════════════════════════════════════════════════════════════════════ // metrics.ts: classifyUnitPhase coverage // ═══════════════════════════════════════════════════════════════════════════