import type { ForgeTask, ForgeTaskResult, TaskExecutor } from './types.js'; /** * Simulated executor — used ONLY when the caller explicitly passes --simulate. * * It submits no real work and returns typed `simulated` results so a simulated * run can never be confused with a verified one. In normal mode (no --simulate) * the CLI refuses to run at all with FORGE_NO_EXECUTOR instead of wiring this * stub (fail closed, SDLC-D-035). */ export function createSimulatedExecutor(options?: { log?: boolean }): TaskExecutor { const log = options?.log ?? true; return { async submitTask(task: ForgeTask) { if (log) console.log(` [forge:simulated] stage submitted: ${task.id} (${task.title})`); }, async waitForCompletion(taskId: string): Promise { if (log) console.log(` [forge:simulated] stage complete: ${taskId}`); return { task_id: taskId, outcome: 'simulated', reason: 'no executor wired; simulated execution requested via --simulate', completed_at: new Date().toISOString(), exit_code: 0, gate_results: [], }; }, async getTaskStatus() { return 'completed' as const; }, }; }