@@ -116,6 +116,40 @@ jobs:
116116 done
117117 mcpp --version
118118 mcpp self config --mirror GLOBAL
119+ # ⚠️⚠️ TRANSITION: THE BOOTSTRAP mcpp CARRIES ITS OWN xlings, AND
120+ # THAT COPY PREDATES AN INDEX MOVE.
121+ #
122+ # An mcpp release BUNDLES an xlings at `<install>/registry/bin/xlings`
123+ # (mcpp's `pinned::kXlingsVersion`), and that copy — not the one
124+ # installed above — is what resolves runtime bindings for everything
125+ # mcpp does. `xim:glibc`'s `latest` moved to 2.44.2, and only
126+ # xlings 2026.8.27.1 reads the default binding from the index instead
127+ # of a constant compiled into itself (openxlings/xlings#567). An
128+ # older bundled copy asks for `glibc@2.44`, a clean environment
129+ # installs `2.44.2`, and the toolchain post-install fixup stops:
130+ #
131+ # error: selected RuntimeBinding glibc@2.44 requires payload
132+ # '…/xpkgs/xim-x-glibc/2.44', but it is not installed
133+ #
134+ # on every NEW environment and on none that already existed. The
135+ # index records this failure verbatim in `pkgs/g/glibc.lua`.
136+ #
137+ # ⭐ REMOVE THIS ONCE THE PIN SHIPS. mcpp 2026.8.27.1 bundles
138+ # 2026.8.27.1, so a bootstrap from it needs nothing here. The step is
139+ # a no-op when the bundled copy is already new enough, and it says
140+ # which copy it replaced so a silent substitution is not possible.
141+ mcpp_home="${MCPP_HOME:-$HOME/.mcpp}"
142+ bundled="$mcpp_home/registry/bin/xlings"
143+ if [ -x "$bundled" ] && [ -n "$(command -v xlings)" ]; then
144+ have="$("$bundled" --version 2>/dev/null | head -1)"
145+ outer="$(xlings --version 2>/dev/null | head -1)"
146+ if [ "$have" != "$outer" ]; then
147+ cp "$(command -v xlings)" "$bundled"
148+ echo "bundled xlings: $have -> $("$bundled" --version | head -1) (was older than the installed one)"
149+ else
150+ echo "bundled xlings: $have (already the installed one)"
151+ fi
152+ fi
119153 # ⭐⭐ CROSS-VALIDATION: BUILD THE mcpp UNDER REVIEW AND USE THAT ONE.
120154 #
121155 # Empty in the ordinary run, so this job keeps testing the RELEASED
@@ -391,6 +425,40 @@ jobs:
391425 sleep 60
392426 done
393427 mcpp self config --mirror GLOBAL
428+ # ⚠️⚠️ TRANSITION: THE BOOTSTRAP mcpp CARRIES ITS OWN xlings, AND
429+ # THAT COPY PREDATES AN INDEX MOVE.
430+ #
431+ # An mcpp release BUNDLES an xlings at `<install>/registry/bin/xlings`
432+ # (mcpp's `pinned::kXlingsVersion`), and that copy — not the one
433+ # installed above — is what resolves runtime bindings for everything
434+ # mcpp does. `xim:glibc`'s `latest` moved to 2.44.2, and only
435+ # xlings 2026.8.27.1 reads the default binding from the index instead
436+ # of a constant compiled into itself (openxlings/xlings#567). An
437+ # older bundled copy asks for `glibc@2.44`, a clean environment
438+ # installs `2.44.2`, and the toolchain post-install fixup stops:
439+ #
440+ # error: selected RuntimeBinding glibc@2.44 requires payload
441+ # '…/xpkgs/xim-x-glibc/2.44', but it is not installed
442+ #
443+ # on every NEW environment and on none that already existed. The
444+ # index records this failure verbatim in `pkgs/g/glibc.lua`.
445+ #
446+ # ⭐ REMOVE THIS ONCE THE PIN SHIPS. mcpp 2026.8.27.1 bundles
447+ # 2026.8.27.1, so a bootstrap from it needs nothing here. The step is
448+ # a no-op when the bundled copy is already new enough, and it says
449+ # which copy it replaced so a silent substitution is not possible.
450+ mcpp_home="${MCPP_HOME:-$HOME/.mcpp}"
451+ bundled="$mcpp_home/registry/bin/xlings"
452+ if [ -x "$bundled" ] && [ -n "$(command -v xlings)" ]; then
453+ have="$("$bundled" --version 2>/dev/null | head -1)"
454+ outer="$(xlings --version 2>/dev/null | head -1)"
455+ if [ "$have" != "$outer" ]; then
456+ cp "$(command -v xlings)" "$bundled"
457+ echo "bundled xlings: $have -> $("$bundled" --version | head -1) (was older than the installed one)"
458+ else
459+ echo "bundled xlings: $have (already the installed one)"
460+ fi
461+ fi
394462 # ⭐⭐ CROSS-VALIDATION: BUILD THE mcpp UNDER REVIEW AND USE THAT ONE.
395463 #
396464 # Empty in the ordinary run, so this job keeps testing the RELEASED
@@ -639,6 +707,40 @@ jobs:
639707 sleep 60
640708 done
641709 mcpp self config --mirror GLOBAL
710+ # ⚠️⚠️ TRANSITION: THE BOOTSTRAP mcpp CARRIES ITS OWN xlings, AND
711+ # THAT COPY PREDATES AN INDEX MOVE.
712+ #
713+ # An mcpp release BUNDLES an xlings at `<install>/registry/bin/xlings`
714+ # (mcpp's `pinned::kXlingsVersion`), and that copy — not the one
715+ # installed above — is what resolves runtime bindings for everything
716+ # mcpp does. `xim:glibc`'s `latest` moved to 2.44.2, and only
717+ # xlings 2026.8.27.1 reads the default binding from the index instead
718+ # of a constant compiled into itself (openxlings/xlings#567). An
719+ # older bundled copy asks for `glibc@2.44`, a clean environment
720+ # installs `2.44.2`, and the toolchain post-install fixup stops:
721+ #
722+ # error: selected RuntimeBinding glibc@2.44 requires payload
723+ # '…/xpkgs/xim-x-glibc/2.44', but it is not installed
724+ #
725+ # on every NEW environment and on none that already existed. The
726+ # index records this failure verbatim in `pkgs/g/glibc.lua`.
727+ #
728+ # ⭐ REMOVE THIS ONCE THE PIN SHIPS. mcpp 2026.8.27.1 bundles
729+ # 2026.8.27.1, so a bootstrap from it needs nothing here. The step is
730+ # a no-op when the bundled copy is already new enough, and it says
731+ # which copy it replaced so a silent substitution is not possible.
732+ mcpp_home="${MCPP_HOME:-$HOME/.mcpp}"
733+ bundled="$mcpp_home/registry/bin/xlings"
734+ if [ -x "$bundled" ] && [ -n "$(command -v xlings)" ]; then
735+ have="$("$bundled" --version 2>/dev/null | head -1)"
736+ outer="$(xlings --version 2>/dev/null | head -1)"
737+ if [ "$have" != "$outer" ]; then
738+ cp "$(command -v xlings)" "$bundled"
739+ echo "bundled xlings: $have -> $("$bundled" --version | head -1) (was older than the installed one)"
740+ else
741+ echo "bundled xlings: $have (already the installed one)"
742+ fi
743+ fi
642744 # ⭐⭐ CROSS-VALIDATION: BUILD THE mcpp UNDER REVIEW AND USE THAT ONE.
643745 #
644746 # Empty in the ordinary run, so this job keeps testing the RELEASED
0 commit comments