1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
//! Fail a generation run whose generated manifest is vouched for beside a committed lockfile
//! that no longer resolves against it.
//!
//! ~keep alef: a consumer regenerated cleanly (`alef all --clean`, exit 0) and was then unable
//! to build the generated e2e crate at all: its committed `e2e/rust/Cargo.lock` pinned a
//! transitive registry dependency one minor behind what the crate's *path* dependency now
//! required, so `cargo metadata --locked` in that directory failed outright. Alef reported
//! nothing, because both mechanisms it had were keyed on the wrong fact:
//!
//! 1. [`super::version_lockfiles::relock_lockfiles_beside_changed_manifests`] relocks only when
//! *alef's own manifest bytes changed in this run*. The requirement that moved lived in a
//! hand-written path dependency alef neither generates nor watches, so the generated manifest
//! was byte-identical and the hook never fired. No amount of fixing the relock hook closes
//! this: it is watching a file that did not change.
//! 2. That relock is best-effort anyway (`cargo update --offline -w`, warn-only), so even when
//! it does fire it can leave the lock stale and still exit 0.
//!
//! This module family adds the missing observation rather than a third write path: after
//! generation completes, every directory holding a manifest this run generated is checked for a
//! committed lock that contradicts it, and a contradiction is recorded as a stage failure. Alef
//! still never authors a lockfile — it only refuses to keep claiming a manifest is good when the
//! lock beside it says otherwise.
//!
//! One file per ecosystem, plus [`shared`] for the two helpers more than one of them needs
//! ([`shared::registry_self_dependency`] and [`shared::registered_unmarkable_manifest_dirs`]) --
//! split out when this used to be a single file so each ecosystem's gate, fixtures, and doc
//! comments stay under the `file-modularization` cap on their own, and so a change to one
//! ecosystem's lock-reading quirks cannot accidentally brush against another's. See `cargo.rs`'s
//! and `node.rs`'s own doc comments for why the ecosystems are deliberately NOT unified behind one
//! shared "check a lock" abstraction: each one's actual comparison (semver-range resolution vs.
//! text equality vs. exact-version-in-checksum-file) is a different problem wearing a similar name.
pub use ;
pub use check_generated_dart_lock_freshness_tolerating_pending_publish;
pub use check_generated_go_sum_freshness_tolerating_pending_publish;
pub use check_generated_node_lock_freshness_tolerating_pending_publish;
pub use check_generated_composer_lock_freshness_tolerating_pending_publish;
pub use check_generated_gemfile_lock_freshness_tolerating_pending_publish;
pub use check_generated_uv_lock_freshness_tolerating_pending_publish;