Trust, Verified
A full adversarial audit of the engine, API, persistence, dashboard, and deployment — and a hardening pass on everything it found. Closed an authentication bypass on admin endpoints, made workflow file reads tenant-safe, reconciled the PostgreSQL schema with the ORM down to enum labels, made retries honest about what they cost, and put the whole suite on randomized-order soak: 17,000+ tests, three consecutive clean runs, zero flakes. Includes breaking changes — read the upgrade notes and plan a short maintenance window for the database migration.
-
security · headline
Admin surface locked down
/admin/environmentsno longer bypasses API-key auth,is_adminrequires a genuinely authenticated key, and the server refuses to bind a public interface withoutAUTH_REQUIRED=trueunless you explicitly opt out. Tool connectors and code steps run with minimal, credential-scoped environments. -
security
Tenant-safe file reads
HTTP step
@file:references now require an admin-trusted run and stay confined toDATA_DIR— no more cross-tenant artifact reads via injected workflow bodies. Webhook delivery pins the validated IP at connect time, closing the DNS-rebinding window for good. -
engine
Honest retries, honest budgets
retry:now works on every step type, fatal errors (4xx, validation, policy) stop retrying instead of re-paying for doomed calls, and paid LLM cost is counted even when a step fails after the API call — budget limits hold to the cent, including across approval pauses and resumes. -
db
PostgreSQL reconciled
Migrations 015–017 create the missing tables and columns, convert legacy lowercase enum labels to the ORM's member names, and align JSONB and indexes.
alembic checkruns in CI against a live Postgres with an enum round-trip smoke test, so schema drift can't ship silently again. -
dashboard
Dashboard that matches the backend
Evolution page speaks the real API (tenant-scoped
GET /api/evolution), admin SSE streams authenticate properly, generated YAML is injection-safe, and a contract test fails CI if the frontend ever calls an endpoint that doesn't exist. -
ci
Soak-tested, Docker-built
The suite now runs randomized-order in development (three environment/state pollution classes fixed at the root), and CI builds the main, runner, and E2B images and boots the API against a health check on every change.