Three related fixes:
-
Realization indices now match manifest package order. The manifest
encoder sorts packages alphabetically, but the realization was
written using the resolver's install order. When a subsequent
generation loaded the parent manifest (alphabetical) and parent
realization (install order), the mismatched indices caused false
path conflicts — e.g., iptables paths attributed to s6-rc.Fix: canonicalize packages by name at the entry points of
createGeneration, publishProfileRoot, and buildProfile so all
index-bearing structures use the same ordering. -
PathConflict errors now include full diagnostic details showing
which packages claim which paths, instead of "unknown error".
Added ConflictingProvision to the user-friendly error message map
and wired formatAllConflicts into the error context. -
Preferred selections no longer hold back upgrades. When a newer
version exists in the repository, the resolver skips the preferred
(older) candidate instead of pinning to it. This prevents rollback
protection from rejecting packages that should have been upgraded.