services: # Local development database. This is the ONLY database local dev and the # test suite should ever touch — never point DATABASE_URL at the production # Neon instance for local work (see the guard in scripts/guard-dev-db.mjs). postgres: # Pinned to match the production Neon major version (17), so pg_dump/restore # from prod (see `pnpm db:pull`) works without version mismatches. image: postgres:17-alpine restart: unless-stopped environment: POSTGRES_USER: teqo POSTGRES_PASSWORD: teqo POSTGRES_DB: teqo ports: - '5432:5432' # Default max_connections=100 is tight for vitest forks (≈CPUs × pg pool) # plus a leftover `next start` from local repro. Raise the ceiling so the # int gate fails on real assertions, not "too many clients already". 400 # leaves headroom for several agents' int suites on the SAME container in # parallel (each worktree provisions its own databases — see # scripts/worktree.mjs — but they share this one Postgres on 5432). command: ['postgres', '-c', 'max_connections=400'] volumes: - pgdata:/var/lib/postgresql/data # Runs only on first initialization of the volume. Creates the dedicated # teqo_test database so automated tests never share state with dev data. - ./docker/postgres/init:/docker-entrypoint-initdb.d:ro healthcheck: test: ['CMD-SHELL', 'pg_isready -U teqo -d teqo'] interval: 5s timeout: 5s retries: 10 volumes: pgdata: