All checks were successful
Build and Deploy / build-and-deploy (push) Successful in 2m33s
Merges full history from art-dag/mono.git into the monorepo under the artdag/ directory. Contains: core (DAG engine), l1 (Celery rendering server), l2 (ActivityPub registry), common (shared templates/middleware), client (CLI), test (e2e). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> git-subtree-dir: artdag git-subtree-mainline:1a179de547git-subtree-split:4c2e716558
2.8 KiB
2.8 KiB
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
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 inconftest.py
Linting & Type Checking (L1)
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
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 inapp/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 L1l1/celery_app.py- Celery initializationl1/database.py/l2/db.py- SQLAlchemy modelsl1/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