Skip to content

Builders ignore lock files, breaking reproducible builds #33

Description

@yzx9

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.

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