You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit a5e529e
Browse filesBrowse the repository at this point in the historyBrowse files
Run-launch endpoints blocked the HTTP request while the engine drove the whole
pipeline synchronously — with the real claude backend a node takes minutes, so
the cockpit's "Starting…"/decision buttons hung with no feedback and no logs.
- engine: split launch from drive — `create()` seeds the run (row + RUNNING +
initial state + run.start) and returns the run_id fast; `drive_existing()`
loads state and `_drive`s. `start()`/`resume()` unchanged (CLI/tests).
- moira_api: `background()` runs the drive off the request thread with its OWN
Store + Engine (SQLite is per-thread). `/api/runs`, `/api/discovery`, gate
approve/reject now return `{run_id, status:"running"}` immediately; the cockpit
streams progress. `/api/eval` stays synchronous (returns the scorecard).
- store: WAL + busy_timeout so the request read and the background write don't
hit "database is locked".
- logging: sidecar logs to a file (MOIRA_LOG, default next to MOIRA_DB) + stdout;
run launches / gate decisions / background errors logged. GET /api/logs?tail=N;
log path in /api/health.
- cockpit: InboxPage decide() now try/catch/finally, always refreshes, and shows
a notice (fixes "reject does nothing" — it re-runs and re-escalates, now visible
and errors surfaced). Activity page gains a "Sidecar logs" tab. Discovery start
messages reflect the running (non-blocking) state.
Verified: POST /api/runs returns in ~50ms (status running) and the run completes
in the background; /api/logs tails the logfile. 103 tests green, cockpit build clean.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
0 commit comments