# Art DAG Monorepo Federated content-addressed DAG execution engine for distributed media processing with ActivityPub ownership and provenance tracking. ## Project Structure ``` core/ # DAG engine (artdag package) - nodes, effects, analysis, planning l1/ # L1 Celery rendering server (FastAPI + Celery + Redis + PostgreSQL) l2/ # L2 ActivityPub registry (FastAPI + PostgreSQL) common/ # Shared templates, middleware, models (artdag_common package) client/ # CLI client test/ # Integration & e2e tests ``` ## Tech Stack Python 3.11+, FastAPI, Celery, Redis, PostgreSQL (asyncpg for L1), SQLAlchemy, Pydantic, JAX (CPU/GPU), IPFS/Kubo, Docker Swarm, HTMX + Jinja2 for web UI. ## Key Commands ### Testing ```bash cd l1 && pytest tests/ # L1 unit tests cd core && pytest tests/ # Core unit tests cd test && python run.py # Full integration pipeline ``` - pytest uses `asyncio_mode = "auto"` for async tests - Test files: `test_*.py`, fixtures in `conftest.py` ### Linting & Type Checking (L1) ```bash cd l1 && ruff check . # Lint (E, F, I, UP rules) cd l1 && mypy app/types.py app/routers/recipes.py tests/ ``` - Line length: 100 chars (E501 ignored) - Mypy: strict on `app/types.py`, `app/routers/recipes.py`, `tests/`; gradual elsewhere - Mypy ignores imports for: celery, redis, artdag, artdag_common, ipfs_client ### Docker ```bash docker build -f l1/Dockerfile -t celery-l1-server:latest . docker build -f l1/Dockerfile.gpu -t celery-l1-gpu:latest . docker build -f l2/Dockerfile -t l2-server:latest . ./deploy.sh # Build, push, deploy stacks ``` ## Architecture Patterns - **3-Phase Execution**: Analyze -> Plan -> Execute (tasks in `l1/tasks/`) - **Content-Addressed**: All data identified by SHA3-256 hashes or IPFS CIDs - **Services Pattern**: Business logic in `app/services/`, API endpoints in `app/routers/` - **Types Module**: Pydantic models and TypedDicts in `app/types.py` - **Celery Tasks**: In `l1/tasks/`, decorated with `@app.task` - **S-Expression Effects**: Composable effect language in `l1/sexp_effects/` - **Storage**: Local filesystem, S3, or IPFS backends (`storage_providers.py`) ## Auth - L1 <-> L2: scoped JWT tokens (no shared secrets) - L2: password + OAuth SSO, token revocation in Redis (30-day expiry) - Federation: ActivityPub RSA signatures (`core/artdag/activitypub/`) ## Key Config Files - `l1/pyproject.toml` - mypy, pytest, ruff config for L1 - `l1/celery_app.py` - Celery initialization - `l1/database.py` / `l2/db.py` - SQLAlchemy models - `l1/docker-compose.yml` / `l2/docker-compose.yml` - Swarm stacks ## Tools - Use Context7 MCP for up-to-date library documentation - Playwright MCP is available for browser automation/testing