deps: install from uv.lock (hash-pinned) in the image and CI, never floating
The API image did 'pip install -e .' and CI 'pip install -e ".[dev]"': every rebuild could ship newer fastapi/starlette/pydantic than CI tested (Windy Cloud hit exactly this 09-23). uv.lock is cut to EXACTLY what prod runs now (42 runtime pkgs, 0 differences; botocore/pyjwt held back to prod's versions). Image: uv 0.12.5 exports, pip --require-hashes installs, same layout. CI: uv sync --locked (also fails on a stale lock). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in: