Files
rose-ash/CLAUDE.md
giles e65bd41ebe
All checks were successful
Build and Deploy / build-and-deploy (push) Successful in 1m19s
Decouple per-service Alembic migrations and fix cross-DB queries
Each service (blog, market, cart, events, federation, account) now owns
its own database schema with independent Alembic migrations. Removes the
monolithic shared/alembic/ that ran all migrations against a single DB.

- Add per-service alembic.ini, env.py, and 0001_initial.py migrations
- Add shared/db/alembic_env.py helper with table-name filtering
- Fix cross-DB FK in blog/models/snippet.py (users lives in db_account)
- Fix cart_impl.py cross-DB queries: fetch products and market_places
  via internal data endpoints instead of direct SQL joins
- Fix blog ghost_sync to fetch page_configs from cart via data endpoint
- Add products-by-ids and page-config-ensure data endpoints
- Update all entrypoint.sh to create own DB and run own migrations
- Cart now uses db_cart instead of db_market
- Add docker-compose.dev.yml, dev.sh for local development
- CI deploys both rose-ash swarm stack and rose-ash-dev compose stack
- Fix Quart namespace package crash (root_path in factory.py)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-26 12:07:24 +00:00

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 in conftest.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 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