Commit graph

9 commits

Author SHA1 Message Date
John Lightner
7dad9d97af MAESTRO: Add entrypoint migrations, worker config, and stack integration tests
Create docker/entrypoint.sh to run alembic migrations on API startup.
Create backend/worker.py with Celery app config for the compose worker service.
Fix README single-container port (8000) and add production compose documentation.
Add 27 tests (stack integration + worker) verifying all Docker/compose artifacts
are present, consistent, and the /health endpoint responds correctly.
2026-04-07 02:09:56 -05:00
John Lightner
267091bbce MAESTRO: Scaffold all 8 router stubs in backend/routers/ with 501 placeholder endpoints 2026-04-07 02:01:11 -05:00
John Lightner
848fb06407 MAESTRO: Create backend/auth.py with JWT, API key auth, and first-boot setup flow 2026-04-07 01:59:24 -05:00
John Lightner
15ca2c922a MAESTRO: Create backend/main.py with FastAPI app, CORS, health check, WebSocket, and router mounting
FastAPI application with:
- CORS middleware (permissive for dev)
- /health endpoint checking DB and Redis connectivity
- /ws WebSocket endpoint with ConnectionManager for real-time updates
- Async lifespan hooks for DB engine and Redis init/teardown
- get_db dependency for session management
- Dynamic router mounting that silently skips missing router modules
- 10 tests covering all endpoints and utilities
2026-04-07 01:56:40 -05:00
John Lightner
42668eeeb1 MAESTRO: Create backend/schemas.py with all Pydantic request/response schemas
Create/update/response schemas for Project, Experiment, Run, Endpoint,
Webhook, Score, Auth (setup/login/token), Export, and Health. All use
Pydantic v2 ConfigDict(from_attributes=True) for ORM compatibility.
RunDetailResponse nests StageResults and Scores. ExportRunRow provides
flat scorer_name→value dict for CSV/JSON export. 30 tests added.
2026-04-07 01:54:02 -05:00
John Lightner
0ec75ab617 MAESTRO: Set up Alembic with initial migration for all 8 ORM models 2026-04-07 01:52:03 -05:00
John Lightner
7ef116e2f9 MAESTRO: Create backend/models.py with all 8 SQLAlchemy ORM models from spec
Define User, Project, Experiment, Run, StageResult, Score, ResponseCache,
and WebhookConfig with UUID primary keys, JSON columns, enum types
(ExperimentStatus, RunStatus), full relationship cascades, and indexes.
Uses sqlalchemy.JSON (not JSONB) for SQLite compatibility in single-container
mode. 16 tests added covering table creation, CRUD, uniqueness constraints,
default values, and cascade deletes — all passing.
2026-04-07 01:49:10 -05:00
John Lightner
309bbacb5d MAESTRO: Create backend/config.py with Pydantic Settings and SQLite/in-process fallback
All 13 environment variables from the spec defined with proper defaults.
SQLite fallback when DATABASE_URL is unset, in-process queue flag when
REDIS_URL is unset, JWT_SECRET auto-generation, empty API_KEY normalization.
13 unit tests covering all configuration paths.
2026-04-07 01:46:30 -05:00
John Lightner
cb4af5f707 MAESTRO: Create full directory structure with placeholder files
Set up all directories from the spec's Project Structure section:
- backend/ with routers/, engine/adapters/, engine/scorers/, mcp/,
  websocket/, tests/ (all with __init__.py)
- frontend/src/ with pages/, components/, api/ (.gitkeep)
- docker/ (.gitkeep)
- alembic/versions/ (.gitkeep)
2026-04-07 01:40:27 -05:00