A normal released Pantry 0.11.156 user installation of the immutable Craft 0.0.423.1 repair updates craft, but leaves all three auxiliary commands activated from old 0.0.423. This blocks complete all-profile delivery acceptance for #265. It is separate from the Linux runtime provider work in #266.
Observed normal command: /Users/chris/.local/bin/pantry install --user craft@0.0.423.1. Its original log reports three pantry:symlink:skip entries, each with owner=craft-native.org, for craft-app-store, craft-webview and craft-webview-app-store. All four installed v0.0.423.1 files independently match the original signed upstream public binaries. The primary activation points to v0.0.423.1; each auxiliary activation still points into v0.0.423. No auxiliary binary was executed and no shim, override or cache was changed to obtain this observation.
Owning call chain on ac5c470:
packages/zig/src/install/installer.zig:3032calls publiccreatePackageSymlinksfor the selected global package version.packages/zig/src/install/symlink.zig:788-817discovers all actual bin/sbin programs and activates each.createBinarySymlinkFromPath, line260, protects any existing target that differs from the new complete executable path. Two versions of the same canonical provider therefore look like a different-provider collision.createEnvSymlinksseparately replaces metadata-declared programs earlier. Craft metadata declares onlycraft, explaining why the primary command updates while the discovered auxiliaries do not.
This guard is unchanged between released 0.11.156 source d47576b and 0.11.158 source ac5c470. Existing docs (docs/features/cache-management.md:311-325) distinguish reactivating the same program from retaining another provider. Existing native activation tests cover exact-version reactivation and different providers, but miss same-provider cross-version/build-revision selection. The SDK's normal webview profile returns bare craft-webview, so it continues resolving the old revision even after the normal upgrade succeeds. This does not affect the full-profile headless probe's use of the corrected primary executable.
Acceptance:
- A public
createPackageSymlinksfilesystem regression activates multiple commands from two managed versions/build revisions of the same canonical provider and reproduces the stale activation before the fix. - Selecting a new version of the same provider updates all of its owned discovered commands, without editing cached executable bytes or sourceable interface semantics.
- Another canonical provider retains first ownership. Identify the full provider root under the actual install base, excluding only the version directory; do not compare only displayed basenames. Cover nested domains and separate or relocated roots.
- Removing the old version must retain every updated activation. Keep the version-specific uninstall comparison distinct from provider identity during activation.
- Preserve exact-version reactivation, native argv0/resource lookup, relative launcher relocation, sourceable links, collision safety and owned cleanup. No force flags, manual activation rewrites, cache deletion, SDK fallback or alternate installation path.
- Qualify source tests, independent review, normal source publication and canonical patch release, then verify through the normal released installer before closing this issue or parent #265. Old/corrupted 0.0.423 profile activation is not acceptance evidence.
Original installation and read-only source/target proof: /tmp/settlers-native-423-normal-install/corrected-423.1/pantry-install-corrected.log, /tmp/settlers-native-423-normal-install/registry-readonly/auxiliary-activation-observation.json and auxiliary-activation-diagnosis.json (SHA256 d9b3a547ca51a25b2390d1979f1448f58e12f2b180a54bf50175bfdb7d71432f). No focused duplicate was found; #250 is an unrelated cached Git PathAlreadyExists investigation.