uv sync rewrites python/uv.lock with metadata-only diffs on newer uv releases
Summary
Running uv sync --offline in python/ can rewrite python/uv.lock even when the environment is already up to date and no dependency set has changed.
In my local reproduction with uv 0.9.10, the diff is metadata-only:
revision = 1 becomes revision = 3
- package entries gain
upload-time = ... fields
- the resolved package set does not materially change
This creates noisy contributor churn in a tracked lockfile from a routine setup command.
Reproduction steps
-
Use uv 0.9.10.
-
Start from a clean checkout where python/uv.lock matches the repository.
-
Run the documented setup command:
cd python
uv sync --offline
-
Check the diff:
cd ..
git diff -- python/uv.lock
-
Observe that python/uv.lock is rewritten with format/metadata changes such as revision = 3 and upload-time fields, despite no intentional dependency update.
Expected behavior
Routine contributor setup with uv sync should not rewrite python/uv.lock unless dependencies or the intended lockfile format for the repo have actually changed.
Actual behavior
uv sync introduces a large lockfile diff consisting of metadata-only changes.
Notes
Observed locally on:
uv 0.9.10 (44f5a14f4 2025-11-17)
This is especially noticeable because the Python setup path in the repo documentation points contributors at uv sync.
uv syncrewritespython/uv.lockwith metadata-only diffs on newer uv releasesSummary
Running
uv sync --offlineinpython/can rewritepython/uv.lockeven when the environment is already up to date and no dependency set has changed.In my local reproduction with
uv 0.9.10, the diff is metadata-only:revision = 1becomesrevision = 3upload-time = ...fieldsThis creates noisy contributor churn in a tracked lockfile from a routine setup command.
Reproduction steps
Use
uv 0.9.10.Start from a clean checkout where
python/uv.lockmatches the repository.Run the documented setup command:
cd python uv sync --offlineCheck the diff:
cd .. git diff -- python/uv.lockObserve that
python/uv.lockis rewritten with format/metadata changes such asrevision = 3andupload-timefields, despite no intentional dependency update.Expected behavior
Routine contributor setup with
uv syncshould not rewritepython/uv.lockunless dependencies or the intended lockfile format for the repo have actually changed.Actual behavior
uv syncintroduces a large lockfile diff consisting of metadata-only changes.Notes
Observed locally on:
uv 0.9.10 (44f5a14f4 2025-11-17)This is especially noticeable because the Python setup path in the repo documentation points contributors at
uv sync.