Skip to content

ebuild.lock is written but never read, so it pins nothing #145

Description

@Kartikey1306

Summary

ebuild.lock is written after every package resolution and never read. Nothing calls Lockfile.load(), and _install_packages constructs the Lockfile only after PackageResolver.resolve() has already chosen versions.

Verified: grep -rn "\.load()" ebuild/ has no lockfile caller; resolve() takes no lock. An unpinned package therefore resolves to the newest recipe on every machine and every run, while an ebuild.lock sits in the project claiming to pin it. docs/architecture.md ("records exact resolved versions for reproducibility") and the CHANGELOG's "guaranteeing reproducible builds (§9.2)" describe a file that has no effect on resolution.

Fix

PR to follow: resolve(requested, lockfile=...) with precedence request → lock → newest; a locked version no recipe provides is an error naming ebuild.lock, not a silent fallback; a locked entry whose URL/checksum no longer matches the recipe of that version is refused; the CLI loads the lock before resolving and rewrites it after, as before.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

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