From 177b894d7d77a5297bee3b2487ef18a0cae7a596 Mon Sep 17 00:00:00 2001 From: nsfisis Date: Sun, 3 May 2026 21:50:54 +0900 Subject: fix(resolver): expand root branch-alias and self.version replace links Two related parity gaps surfaced by the `circular-dependency` fixture: 1. The root's `extra.branch-alias` entry was never materialized in the pool, and root-level `replace`/`provide`/`conflict` constraints written as `self.version` were forwarded verbatim. Mirror Composer's `RootAliasPackage`: resolve `self.version` against the root's declared version for the base entry, then add an extra alias entry (carrying the base links plus a duplicate link per `self.version` original retagged at the alias's version) when the root's version matches an `extra.branch-alias` key. 2. `Pool::matches_package` returned on the first link to a target name even when its constraint did not match the query, hiding any later link to the same target. With the alias above, that masked the second `replace` link tagged at the alias version. Keep iterating when target matches but constraint does not, so a later link can still satisfy. --- crates/mozart/src/commands/remove.rs | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'crates/mozart/src/commands/remove.rs') diff --git a/crates/mozart/src/commands/remove.rs b/crates/mozart/src/commands/remove.rs index eb6ee4a..f41d8b5 100644 --- a/crates/mozart/src/commands/remove.rs +++ b/crates/mozart/src/commands/remove.rs @@ -277,6 +277,7 @@ pub async fn execute( locked_package_names: indexmap::IndexSet::new(), locked_packages: Vec::new(), block_abandoned: false, + root_branch_alias: None, }; // Print header messages @@ -563,6 +564,7 @@ async fn remove_unused( locked_package_names: indexmap::IndexSet::new(), locked_packages: Vec::new(), block_abandoned: false, + root_branch_alias: None, }; console.info("Resolving dependencies to detect unused packages..."); @@ -919,6 +921,7 @@ mod tests { locked_package_names: IndexSet::new(), locked_packages: Vec::new(), block_abandoned: false, + root_branch_alias: None, }; let resolved = resolve(&request) .await @@ -978,6 +981,7 @@ mod tests { locked_package_names: IndexSet::new(), locked_packages: Vec::new(), block_abandoned: false, + root_branch_alias: None, }; let resolved2 = resolve(&request2) .await -- cgit v1.3.1