Skip to content

[Reproducibility] Central coverage-evidence runner's uv version drifts, breaking repos that pin an exact uv required-version #1234

Description

@seonghobae

Observed behavior

ContextualWisdomLab/.github's opencode-review-dispatch.yml coverage-evidence job failed for ContextualWisdomLab/RankWeave PR #36 (run 32571503654, 2026-08-22T11:53:34Z) with:

##[error]Could not materialize base Python locks: uv export failed for tracked base lock uv.lock: error: Required uv version `==0.11.29` does not match the running version `0.12.1`. Update `uv` by running `uv self update 0.11.29`.

RankWeave's pyproject.toml pins [tool.uv] required-version = "==0.11.29" intentionally, for build reproducibility. This is not a defect in RankWeave's PR — the diff under review didn't touch the uv pin at all. The central runner simply has a newer uv (0.12.1) installed than the target repo's own lockfile requires, so uv export refuses to run.

I independently reproduced the same failure class locally earlier this session: my local Homebrew uv was 0.12.0/0.12.1 at different points, also mismatched against RankWeave's 0.11.29 pin — I worked around it locally with mise install uv@0.11.29, but the central CI runner has no equivalent per-repo version resolution.

Why this matters

This is the same shape of bug as the EBADDEVENGINES npm devEngines.packageManager mismatch found earlier this session for JS-repo coverage-evidence runs (a fixed central tool version colliding with a target repo's own pinned tooling version) — just for Python/uv instead of npm. Any repo in the org that pins an exact uv required-version (a reasonable reproducibility practice, not a misconfiguration) can hit this the moment the central runner's installed uv drifts past that pin, and it will silently block that repo's OpenCode review approval with a message that looks like a real coverage failure rather than an infra mismatch — exactly what happened here: a real, current-head CHANGES_REQUESTED review citing "coverage evidence did not pass," when the actual cause was invisible to the PR author without digging into the central run's own log.

Suggested direction

The central coverage-evidence job (in opencode-review-dispatch.yml, scripts/ci/materialize_base_python_requirements.py or wherever the uv invocation lives) should read each target repo's own [tool.uv] required-version (if present) and install/select that exact uv version for that repo's coverage run, the same way per-repo Python version pins are presumably already respected — rather than relying on one fixed uv version baked into the runner image/setup step that drifts independently of what repos actually declare.

Cross-reference

Discovered while working ContextualWisdomLab/RankWeave PR #36 through the review→fix→merge loop this session; dismissed the resulting stale-looking-but-actually-infra-caused CHANGES_REQUESTED review on that PR with this same root-cause evidence rather than treating it as a real PR defect.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions