- Added COPY commands for alembic.ini and alembic/ directory in development Dockerfile
- Updated alembic.ini to use correct database credentials for Docker environment
- Fixed database URL to point to 'db' host instead of 'localhost'
- Updated password to match docker-compose environment variables
These changes resolve the database startup issues where:
1. Alembic migrations couldn't run because files were missing from container
2. Database connection failed due to incorrect credentials
3. API couldn't start because required tables didn't exist
Now the full development environment starts properly with:
- Database migrations running automatically
- API connecting to database successfully
- UI accessible on port 3000
- API accessible on port 8000
uv run spawns uvicorn, which uses multiprocessing.spawn for hot reload.
The spawned subprocess starts a fresh Python interpreter that bypasses
uv's venv activation — so it never sees the venv's packages.
Fix: use a standalone python:3.12-slim dev stage with pip install -e .
directly into the system Python. No venv means the spawn subprocess uses
the same interpreter with the same packages. The editable install creates
a .pth file pointing to /app/src, so the mounted host source is live.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
uvicorn's path check for --reload-dir fails in Podman rootless even
though uv sync can read the same path. Drop the flag — the editable
install already points uvicorn's watcher at /app/src implicitly.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
API:
- Add python symlink (python3-slim has no bare 'python') so uv doesn't
invalidate the baked venv on every container start
- Copy src/ before uv sync so hatchling installs rehearsalhub as a
proper editable install (.pth pointing to /app/src) — previously
sync ran with no source present, producing a broken empty wheel
- Remove ENV PYTHONPATH workaround (no longer needed with correct install)
- Add --reload-dir /app/src to scope uvicorn's file watcher to the
mounted source directory
Web:
- Add COPY . . after npm install so index.html and vite.config.ts are
baked into the image — without them Vite ignored port config and fell
back to 5173 with no entry point
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
API: bake ENV PYTHONPATH=/app/src into the development Dockerfile stage
so it's available to uvicorn's WatchFiles reloader subprocess — relying
on compose env vars isn't reliable across process forks.
Web: replace ./web:/app bind mount (caused EACCES in Podman rootless due
to UID mismatch) with ./web/src:/app/src — this preserves the container's
package.json and node_modules while still giving Vite live access to
source files for HMR.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>