-- task_runs: una fila por corrida del meta-orquestador fn-orquestador (issue 0069). -- Trazabilidad completa del bucle CONSTRUIR → EJECUTAR → RECOPILAR → ANALIZAR → MEJORAR -- ejecutado autonomamente. Vive en operations.db de la app target (o operations.db raiz -- si la tarea es cross-cutting). El worktree puede borrarse — esta auditoria sobrevive. CREATE TABLE IF NOT EXISTS task_runs ( id TEXT PRIMARY KEY, -- task_ task_id TEXT NOT NULL, -- issue_id (0070) o slug del task_spec started_at INTEGER NOT NULL, finished_at INTEGER, status TEXT NOT NULL, -- running|converged|stalled|timeout|iterations_exhausted|needs_human|aborted iterations INTEGER NOT NULL DEFAULT 0, last_phase TEXT NOT NULL DEFAULT '', -- construir|ejecutar|recopilar|analizar|mejorar last_run_id TEXT NOT NULL DEFAULT '', -- e2e_runs.id de la ultima validacion branch TEXT NOT NULL DEFAULT '', -- auto/ worktree_path TEXT NOT NULL DEFAULT '', -- /tmp/fn_orq__ pr_url TEXT NOT NULL DEFAULT '', -- URL del PR draft al converger progress_json TEXT NOT NULL DEFAULT '[]' -- log iter-por-iter: [{iter, phase, ts, subagent, summary, run_id}, ...] ); CREATE INDEX IF NOT EXISTS task_runs_task_idx ON task_runs(task_id, started_at DESC); CREATE INDEX IF NOT EXISTS task_runs_status_idx ON task_runs(status, started_at DESC);