PixiBuilder and UvBuilder do not utilize lock files during environment builds. Each build resolves dependencies from scratch using only the declaration file (e.g., pixi.toml, pyproject.toml), making builds non-reproducible.
Current Behavior
UvBuilder
- Calls
uv sync without --frozen or --locked, so uv re-resolves dependencies every time
- User-provided
uv.lock is never copied to the environment directory
uv.lock is generated as a side effect but never read or used for staleness checks
PixiBuilder
- Calls pixi install without
--locked, so pixi re-resolves dependencies every time
- User-provided
pixi.lock is never copied to the environment directory
pixi.lock is parsed only for progress bar package counting (PixiInstallMonitor), not for build decisions
MambaBuilder
- Not affected — conda/micromamba has no lock file mechanism
Expected Behavior
- Builders should accept a user-provided lock file (e.g.,
.lockFile(File) or .lockContent(String))
- The lock file should be copied to the environment directory before install
- Install commands should use
--locked/--frozen flags to enforce strict lock file adherence
appose.json state should include lock file hash so that lock file changes trigger rebuilds
Impact
Without lock file support, two builds from the same declaration file can produce different environments if dependency versions have changed upstream. This is a problem for reproducibility in scientific computing workflows.
PixiBuilderandUvBuilderdo not utilize lock files during environment builds. Each build resolves dependencies from scratch using only the declaration file (e.g.,pixi.toml,pyproject.toml), making builds non-reproducible.Current Behavior
UvBuilder
uv syncwithout--frozenor--locked, so uv re-resolves dependencies every timeuv.lockis never copied to the environment directoryuv.lockis generated as a side effect but never read or used for staleness checksPixiBuilder
--locked, so pixi re-resolves dependencies every timepixi.lockis never copied to the environment directorypixi.lockis parsed only for progress bar package counting (PixiInstallMonitor), not for build decisionsMambaBuilder
Expected Behavior
.lockFile(File)or.lockContent(String))--locked/--frozenflags to enforce strict lock file adherenceappose.jsonstate should include lock file hash so that lock file changes trigger rebuildsImpact
Without lock file support, two builds from the same declaration file can produce different environments if dependency versions have changed upstream. This is a problem for reproducibility in scientific computing workflows.