@@ -128,7 +128,7 @@ jobs:
128128 LANGFUSE_HOST : " http://localhost:3000"
129129 LANGFUSE_PUBLIC_KEY : " pk-dummy"
130130 LANGFUSE_SECRET_KEY : " sk-dummy"
131- run : uv run pytest tests/ -m "local or unit" -n auto --dist=loadfile -v ${{ matrix.cov_branch_flag }} --cov=src --cov-fail-under=75
131+ run : uv run pytest tests/ -m "local or unit" -n auto --dist=loadfile -v ${{ matrix.cov_branch_flag }} --cov=src --cov-fail-under=70
132132 - name : Run Bandit SAST (medium+ severity)
133133 run : uv run bandit -r src/ -c pyproject.toml -ll
134134
@@ -275,30 +275,21 @@ jobs:
275275 - uses : actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
276276 with :
277277 persist-credentials : false
278+ - name : Install uv
279+ uses : astral-sh/setup-uv@37802adc94f370d6bfd71619e3f0bf239e1f3b78 # v7.6.0
280+ with :
281+ enable-cache : true
278282 - uses : actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
279283 with :
280- python-version : " 3.11"
281- # The proof is pure standard library — no dependency install needed.
282- # It asserts internally and exits non-zero if the invariant is violated
283- # or if a negative-control variant fails to produce a counterexample.
284+ python-version-file : " pyproject.toml"
285+ - name : Install Dependencies
286+ run : uv sync --all-groups --all-extras
284287 - name : Run exhaustive NoDirectBind enumeration
285288 run : |
286- python proof/model.py
287- # pytest-asyncio is required because tests/conftest.py defines an
288- # autouse=True async fixture (cleanup_redis_client) that applies to
289- # every test collected under tests/, including this narrow proof file.
290- # Without it, pytest raises "async fixture ... no plugin or hook that
291- # handled it" during setup for all 19 tests in this file.
292- - name : Install pytest
293- run : pip install pytest pytest-timeout pytest-asyncio
294- # Pins the exact reachable-state counts (21/24/19/20) quoted in
295- # CAGE_ARXIV.MD and docs/technical-report/. This is a second,
296- # independent check on top of `python proof/model.py` above so a
297- # change to TIERS/transition functions cannot silently drift from the
298- # published figures without failing CI. See REVISION_TRACKER.md.
289+ uv run python proof/model.py
299290 - name : Run pinned NoDirectBind regression tests
300291 run : |
301- python -m pytest tests/test_no_direct_bind_proof.py -m local -v -o addopts=""
292+ uv run pytest tests/test_no_direct_bind_proof.py -m local -v -o addopts=""
302293
303294 langfuse-posture-check :
304295 name : " Langfuse Posture Dry-Run Check"
0 commit comments