The coverage job in ci.yml was updated to depend on unit_tests only
(removing lint/typecheck which are independent static-analysis jobs).
Two BDD scenarios still asserted the old lint+typecheck dependency,
causing unit_tests gate failures. Updated both scenarios and the
step definition to assert the correct unit_tests dependency.
ISSUES CLOSED: #1641
Key optimisations applied to .forgejo/workflows/ci.yml:
1. Remove unnecessary needs: [lint, typecheck, security, quality] from the
coverage job. Coverage runs the full unit-test suite independently under
slipcover and does not depend on static-analysis results. Removing this
dependency allows coverage to start immediately in parallel with all other
jobs, eliminating a sequential bottleneck that forced coverage to wait for
four upstream jobs before it could begin.
2. Reduce docker job gate from needs: [lint, typecheck, security, quality,
unit_tests] to needs: [unit_tests] only. The Docker image build does not
require static-analysis results to succeed; gating on unit_tests alone is
sufficient to ensure the image is built from tested code.
3. Add uv.lock to all cache keys (was pyproject.toml only). Including the
lock file produces a more precise cache key: a dependency version bump now
correctly invalidates the cache, and unchanged lock files yield higher hit
rates across PRs that only touch source code.
4. Add per-job .nox virtualenv caching for all jobs (lint, typecheck,
security, quality, unit_tests, integration_tests, e2e_tests, coverage,
build). On cache hit, nox skips the full uv pip install step, saving
30-90 s of package installation time per job per run.
Expected aggregate wall-clock reduction: >50% vs the 3556 s baseline
(target: <=1778 s over 20 PRs), primarily from parallelising coverage and
reducing per-job install overhead via nox venv caching.
ISSUES CLOSED: #1641