diff --git a/src/resources/extensions/sf/parallel-merge.ts b/src/resources/extensions/sf/parallel-merge.ts index 81562aa5b..45afdb6ae 100644 --- a/src/resources/extensions/sf/parallel-merge.ts +++ b/src/resources/extensions/sf/parallel-merge.ts @@ -5,23 +5,9 @@ * with safety checks for parallel execution context. */ -import { spawnSync } from "node:child_process"; import { existsSync, readdirSync } from "node:fs"; import { join } from "node:path"; - -interface SqliteModule { - DatabaseSync: new (path: string) => { - prepare(sql: string): { get(...args: unknown[]): { status: string } | undefined }; - close(): void; - }; -} - -let sqliteModule: SqliteModule | undefined; -try { - sqliteModule = require("node:sqlite") as SqliteModule; -} catch { - // node:sqlite unavailable — fall back to sqlite3 CLI -} +import { DatabaseSync } from "node:sqlite"; import { mergeMilestoneToMain } from "./auto-worktree.js"; import { getErrorMessage } from "./error-utils.js"; import { loadFile } from "./files.js"; @@ -62,23 +48,14 @@ export function isMilestoneCompleteInWorktreeDb( if (!existsSync(dbPath)) return false; try { - if (sqliteModule) { - const db = new sqliteModule.DatabaseSync(dbPath); - try { - const stmt = db.prepare("SELECT status FROM milestones WHERE id = ? LIMIT 1"); - const row = stmt.get(mid) as { status: string } | undefined; - return row?.status === "complete"; - } finally { - db.close(); - } + const db = new DatabaseSync(dbPath); + try { + const stmt = db.prepare("SELECT status FROM milestones WHERE id = ? LIMIT 1"); + const row = stmt.get(mid) as { status: string } | undefined; + return row?.status === "complete"; + } finally { + db.close(); } - - const result = spawnSync( - "sqlite3", - [dbPath, `SELECT status FROM milestones WHERE id='${mid}' LIMIT 1`], - { timeout: 3000, encoding: "utf-8" }, - ); - return (result.stdout || "").trim() === "complete"; } catch (e) { logWarning( "parallel", diff --git a/src/resources/extensions/sf/state.ts b/src/resources/extensions/sf/state.ts index d4eba91a0..2f7761b61 100644 --- a/src/resources/extensions/sf/state.ts +++ b/src/resources/extensions/sf/state.ts @@ -1191,25 +1191,6 @@ export async function deriveStateFromDb(basePath: string): Promise { ) : dbTasksBefore; - const planContent = planFile ? await loadFile(planFile) : null; - const planQualityIssue = planContent - ? getSlicePlanBlockingIssue(planContent) - : null; - if (planQualityIssue && tasks.length === 0) { - return { - activeMilestone, - activeSlice, - activeTask: null, - phase: "planning", - recentDecisions: [], - blockers: [], - nextAction: `Slice ${activeSlice.id} plan is incomplete (${planQualityIssue}). Re-run plan-slice with partner/combatant/architect review.`, - registry, - requirements, - progress: { milestones: milestoneProgress, slices: sliceProgress }, - }; - } - const taskProgress = { done: tasks.filter((t) => isStatusDone(t.status)).length, total: tasks.length,