From e1801f967fd6da1373102a1b34211069a79dd859 Mon Sep 17 00:00:00 2001 From: Tibsfox Date: Mon, 6 Apr 2026 17:50:02 -0700 Subject: [PATCH] fix(gsd): use isClosedStatus() in dispatch guard instead of raw complete check Replaces `r.status === "complete"` with `isClosedStatus(r.status)` in dispatch-guard.ts so slices completed via the reconciliation replay path (which writes "done") or skipped slices are correctly recognized as closed. This was causing auto-mode to block on dependencies that were actually complete. Fixes #3601 Co-Authored-By: Claude Opus 4.6 (1M context) --- src/resources/extensions/gsd/dispatch-guard.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/resources/extensions/gsd/dispatch-guard.ts b/src/resources/extensions/gsd/dispatch-guard.ts index 59df30db1..c687f1b30 100644 --- a/src/resources/extensions/gsd/dispatch-guard.ts +++ b/src/resources/extensions/gsd/dispatch-guard.ts @@ -5,6 +5,7 @@ import { findMilestoneIds } from "./guided-flow.js"; import { parseUnitId } from "./unit-id.js"; import { isDbAvailable, getMilestoneSlices } from "./gsd-db.js"; import { parseRoadmap } from "./parsers-legacy.js"; +import { isClosedStatus } from "./status-guards.js"; import { readFileSync } from "node:fs"; const SLICE_DISPATCH_TYPES = new Set([ @@ -57,7 +58,7 @@ export function getPriorSliceCompletionBlocker( if (rows.length > 0) { slices = rows.map((r) => ({ id: r.id, - done: r.status === "complete", + done: isClosedStatus(r.status), depends: r.depends ?? [], })); }