Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
16 commits
Select commit Hold shift + click to select a range
ea1fd4b
feat: the build directory's lock, atomic link outputs, the result rec…
Sunrisepeak Oct 25, 2026
ba13014
feat: query surfaces, colour conventions, the opt-in root compile dat…
Sunrisepeak Oct 25, 2026
694a91b
feat: one C++ runtime per process; a graph-supplied libstdc++ under c…
Sunrisepeak Oct 25, 2026
17bca6c
test: the build directory lock, the control contract, the opt-in root…
Sunrisepeak Oct 25, 2026
7dacd4f
perf: a compiler's query answers and the provider handshake are cache…
Sunrisepeak Oct 25, 2026
ed3af1d
feat: an interrupted build leaves its record cancelled; mcpp.lock is …
Sunrisepeak Oct 25, 2026
af8017f
feat: build programs see the graph's C++ library; a next step reads h…
Sunrisepeak Oct 25, 2026
8e0f804
docs: the control contract, concurrency, one C++ runtime per process,…
Sunrisepeak Oct 25, 2026
06b1ead
release: 2026.10.26.1
Sunrisepeak Oct 25, 2026
271d2ac
fix: the lock's backoff compiles beside <windows.h>
Sunrisepeak Oct 25, 2026
09513c2
fix: one process holds a build directory once; a cold home is not cre…
Sunrisepeak Oct 25, 2026
a481984
fix: a query leaves the home as it found it; the left root database i…
Sunrisepeak Oct 25, 2026
6e15d51
release: bundle xlings 2026.10.26.1
Sunrisepeak Oct 25, 2026
2cbad5e
test: the launch's program is compared as a path; 937 edits the manif…
Sunrisepeak Oct 25, 2026
f1b5d50
test: 936 E reads the selected home by its name, which Windows spells…
Sunrisepeak Oct 26, 2026
91dd1ff
test: 936 H is POSIX: a shell's kill ends a native Windows process ou…
Sunrisepeak Oct 26, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -0,0 +1,202 @@
#!/usr/bin/env bash
# Reproductions for .agents/docs/2026-10-26-control-contract-runtime-and-ide-ecosystem-design.md
#
# Scenarios (each prints and never asserts; run one with SCENARIO=<letter>):
# A #839 concurrent cold builds of one configuration (E4) and of two configurations (E5)
# B #838 split exception ABI without sycl (E1), and the link-order fix (E2)
# C query/build latency baseline (E8) -- needs hyperfine
# D xlings interface fixed wait (E9) -- needs strace
# E cache list cost (E10) -- needs strace
# F clang + libstdc++ import std, cross-.so catch (E14, E15)
# G mcpp run exit status (E16)
# H X2 unrecorded projection entry refused (E12, E13) -- FRESH=1 builds a fresh home (downloads gcc twice)
# I SYCL units vs the runtime collision set and foreign typeinfo (E19, E20) -- needs xim:dpcpp 7.1.0;
# TENSORVIA=<checkout> adds Tensorvia's device units
#
# Uses only payloads already in the mcpp home, except H with FRESH=1.
set -u
M=${MCPP:-$HOME/.xlings/data/xpkgs/xim-x-mcpp/2026.10.24.1/bin/mcpp}
R=${MCPP_HOME:-$HOME/.mcpp}/registry/data/xpkgs
W=${WORK:-/tmp/mcpp-ecosystem-repro}
export MCPP_JOBS=${MCPP_JOBS:-8}
mkdir -p "$W"
want() { [ -z "${SCENARIO:-}" ] || [ "$SCENARIO" = "$1" ]; }

modules_project() { # $1 = dir
rm -rf "$1"; mkdir -p "$1/src"
printf '[package]\nname = "lk"\nversion = "0.1.0"\nstandard = "c++23"\n[toolchain]\ndefault = "gcc@16.1.0"\n' > "$1/mcpp.toml"
for i in $(seq 1 24); do
printf 'export module m%d;\nimport std;\nexport int f%d(){ std::vector<int> v(%d); return (int)v.size(); }\n' $i $i $i > "$1/src/m$i.cppm"
done
{ echo 'import std;'; for i in $(seq 1 24); do echo "import m$i;"; done
echo 'int main(){ std::println("{}", f1()+f24()); }'; } > "$1/src/main.cpp"
}

if want A; then
echo "===== A: concurrent builds (#839)"
modules_project "$W/a"; cd "$W/a"
for r in 1 2 3 4 5; do
rm -rf target
( nice -n 10 "$M" build >"$W/a1.log" 2>&1; echo $? >"$W/a1.rc" ) &
( sleep 0.$r; nice -n 10 "$M" build >"$W/a2.log" 2>&1; echo $? >"$W/a2.rc" ) &
wait
echo "round $r: rc=$(cat "$W/a1.rc"),$(cat "$W/a2.rc") $(grep -h -m1 'error:' "$W/a1.log" "$W/a2.log" | head -1)"
done
( "$M" build >/dev/null 2>&1; echo "dev rc=$?" ) & ( "$M" build --release >/dev/null 2>&1; echo "release rc=$?" ) & wait
fi

if want B; then
echo "===== B: split exception ABI (#838)"
G=$R/xim-x-gcc/16.1.0/lib64
rm -rf "$W/b"; mkdir -p "$W/b/src" "$W/b/tests"; cd "$W/b"
cat > mcpp.toml <<EOF
[package]
name = "xrt"
version = "0.1.0"
standard = "c++23"
[toolchain]
default = "llvm@22.1.8"
[lib]
path = "src/xrt.cppm"
[targets.xrt]
kind = "shared"
[build]
ldflags = ["-L$G", "-l:libstdc++.so.6"]
EOF
printf 'export module xrt;\nimport std;\nexport namespace xrt { int checked(int v) { if (v < 0) throw std::runtime_error("negative"); return v * 2; } }\n' > src/xrt.cppm
cat > tests/catch.cpp <<'EOF'
import std;
import xrt;
int main() {
auto ep = std::make_exception_ptr(std::logic_error("x")); // a libc++abi-only entry point
try { xrt::checked(-1); }
catch (const std::exception& e) { std::println("caught as std::exception: {}", e.what()); return 0; }
catch (...) { std::println("std::exception missed -> (...)"); return 1; }
}
EOF
nice -n 10 "$M" test 2>&1 | tail -3
D=$(dirname "$(find target -name build.ninja | head -1)"); LL=$R/xim-x-llvm/22.1.8/bin
"$LL/llvm-nm" -D --undefined-only "$D/bin/catch" | grep -E "__cxa_throw|__gxx_personality|_ZTISt13runtime_error"
echo "-- relink with the toolchain's own runtime first (E2)"
cd "$D"
NJ=$(command -v ninja || find "$R" -name ninja -type f -perm -u+x | head -1)
CMD=$("$NJ" -t commands bin/catch | tail -1)
LIBS="$R/xim-x-llvm/22.1.8/lib/x86_64-unknown-linux-gnu/libc++.a $R/xim-x-llvm/22.1.8/lib/x86_64-unknown-linux-gnu/libc++abi.a"
FIXED=$(echo "$CMD" | sed "s# -l:libstdc++.so.6# $LIBS -l:libstdc++.so.6#; s#-o bin/catch#-o bin/catch.fixed#; s#bin/catch.rsp#bin/catch.fixed.rsp#")
printf 'obj/xrt.m.o\nobj/catch.o\nobj/std.o\n' > bin/catch.fixed.rsp
eval "$FIXED" && ./bin/catch.fixed; echo "rc=$? GLIBCXX imports: $("$LL/llvm-nm" -D --undefined-only bin/catch.fixed | grep -c GLIBCXX)"
fi

if want C; then
echo "===== C: latency baseline"
modules_project "$W/c"; cd "$W/c"; "$M" build >/dev/null 2>&1
hyperfine -N --warmup 2 --runs 8 "$M --version" "$M --protocol-version" "$M build" "$M run" \
"$M emit build-database --format json" "$M self env --format json" \
"$M cache list --format json" "$M toolchain list --format json" 2>&1 | grep -E "^Benchmark|Time \(mean"
fi

if want D; then
echo "===== D: xlings interface fixed wait"
X=${MCPP_HOME:-$HOME/.mcpp}/registry/bin/xlings
cd "${MCPP_HOME:-$HOME/.mcpp}/registry"
for a in '--version' 'payload_status --args {"targets":["xim:gcc@16.1.0"]}'; do
s=$(date +%s%N); env -u XLINGS_PROJECT_DIR -u XLINGS_ACTIVE_SUBOS XLINGS_HOME="$PWD" "$X" interface $a >/dev/null 2>&1
echo "interface ${a%% *}: $(( ($(date +%s%N)-s)/1000000 )) ms"
done
strace -f -tt -T -e trace=nanosleep,clock_nanosleep,futex,poll -o "$W/d.txt" \
env -u XLINGS_PROJECT_DIR -u XLINGS_ACTIVE_SUBOS XLINGS_HOME="$PWD" "$X" interface payload_status --args '{"targets":["xim:gcc@16.1.0"]}' >/dev/null 2>&1
awk '{ if (match($0, /<([0-9.]+)>$/, m) && m[1] > 0.05) print }' "$W/d.txt"
fi

if want E; then
echo "===== E: cache list"
C=${MCPP_HOME:-$HOME/.mcpp}/build-cache
echo "files: $(find "$C" -type f | wc -l)"
strace -c -f -o "$W/e.txt" "$M" cache list --format json >/dev/null 2>&1; head -8 "$W/e.txt"
fi

if want F; then
echo "===== F: clang + libstdc++"
CXX=$R/xim-x-llvm/22.1.8/bin/clang++; GLIBC=$R/xim-x-glibc/2.44.3; UAPI=$R/xim-x-linux-headers/5.11.1
for V in 15.1.0 16.1.0; do
G=$R/xim-x-gcc/$V; GID=$(ls -d "$G"/lib/gcc/x86_64-linux-gnu/* | head -1)
rm -rf "$W/f-$V"; mkdir -p "$W/f-$V"; cd "$W/f-$V"
INC="-nostdinc++ -isystem $G/include/c++/$V -isystem $G/include/c++/$V/x86_64-linux-gnu -isystem $G/include/c++/$V/backward -nostdlibinc -isystem $GLIBC/include -isystem $UAPI/include"
C="--no-default-config -std=c++23 --gcc-install-dir=$GID $INC"
L="--no-default-config -stdlib=libstdc++ --gcc-install-dir=$GID -fuse-ld=lld --rtlib=libgcc --unwindlib=libgcc -L$G/lib64 -Wl,-rpath,$G/lib64 -B$GLIBC/lib64 -L$GLIBC/lib64 -Wl,-rpath,$GLIBC/lib64 -Wl,--dynamic-linker=$GLIBC/lib64/ld-linux-x86-64.so.2"
"$CXX" $C -Wno-reserved-module-identifier --precompile -x c++-module "$G/include/c++/$V/bits/std.cc" -o std.pcm 2>/dev/null; echo "[$V] std.pcm rc=$?"
"$CXX" $C -c std.pcm -o std.o 2>/dev/null
printf 'import std;\nint main(){ std::vector<int> v{3,1,2}; std::ranges::sort(v); std::println("{} {}", v, std::format("{:.2f}", 3.14159));\n try { throw std::runtime_error("boom"); } catch (const std::exception& e) { std::println("caught: {}", e.what()); }\n std::jthread t([]{ std::println("thread ok"); }); }\n' > main.cpp
"$CXX" $C -fmodule-file=std=std.pcm -c main.cpp -o main.o && "$CXX" $L main.o std.o -o app && ./app; echo "[$V] run rc=$?"
printf '#include <stdexcept>\nint checked(int v){ if (v<0) throw std::runtime_error("negative (from .so)"); return v*2; }\n' > lib.cpp
printf 'import std;\nint checked(int);\nint main(){ try { checked(-1); } catch (const std::exception& e) { std::println("caught across .so: {}", e.what()); return 0; } catch (...) { return 1; } }\n' > use.cpp
"$CXX" $C -fPIC -c lib.cpp -o lib.o && "$CXX" $L -shared lib.o -o libthrow.so \
&& "$CXX" $C -fmodule-file=std=std.pcm -c use.cpp -o use.o && "$CXX" $L use.o std.o -L. -lthrow -Wl,-rpath,"$PWD" -o use && ./use
echo "[$V] cross-.so rc=$?"
done
fi

if want G; then
echo "===== G: mcpp run exit status"
rm -rf "$W/g"; mkdir -p "$W/g/src"; cd "$W/g"
printf '[package]\nname = "rc"\nversion = "0.1.0"\nstandard = "c++23"\n' > mcpp.toml
printf 'import std;\nint main(int argc, char* argv[]) {\n std::string_view m = argc > 1 ? argv[1] : "ok";\n if (m == "exit") return std::atoi(argv[2]);\n if (m == "throw") throw std::runtime_error("boom");\n if (m == "abort") std::abort();\n if (m == "segv") std::raise(11);\n return 0; }\n' > src/main.cpp
"$M" build >/dev/null 2>&1
for a in "ok" "exit 3" "exit 255" "exit 256" "throw" "abort" "segv"; do
"$M" run -- $a >/dev/null 2>&1; echo "mcpp run -- $a => $?"
done
fi

if want H; then
echo "===== H: X2 unrecorded projection entry"
if [ "${FRESH:-0}" = 1 ]; then
H=$W/h-home; rm -rf "$H" "$W/h1"; mkdir -p "$W/h1/src"
printf '[package]\nname = "p1"\nversion = "0.1.0"\nstandard = "c++23"\n[toolchain]\ndefault = "gcc@16.1.0"\n[xlings.workspace]\n"xim:gcc" = "15.1.0"\n' > "$W/h1/mcpp.toml"
printf 'import std;\nint main(){ std::println("p1"); }\n' > "$W/h1/src/main.cpp"
(cd "$W/h1" && MCPP_HOME=$H nice -n 10 "$M" build 2>&1 | tail -2)
X=$H/registry/bin/xlings; E="env -u XLINGS_PROJECT_DIR -u XLINGS_ACTIVE_SUBOS XLINGS_HOME=$H/registry"
cd "$H/registry"
$E "$X" use gcc 15.1.0 2>&1 | tail -1; $E "$X" use gcc 16.1.0 2>&1 | tail -1 # E12: both succeed
cp subos/default/.xlings.json "$W/h-ledger.bak"
python3 - "$H/registry/subos/default/.xlings.json" <<'EOF'
import json, sys
p = sys.argv[1]; d = json.load(open(p))
def strip(o):
if isinstance(o, dict):
for k in [k for k in o if k in ("libatomic.so", "libatomic.so.1")]: del o[k]
for v in o.values(): strip(v)
elif isinstance(o, list):
for v in o: strip(v)
strip(d); json.dump(d, open(p, "w"), indent=2)
EOF
$E "$X" use gcc 15.1.0 2>&1 | tail -1 # E13: refused
cp "$W/h-ledger.bak" subos/default/.xlings.json
else
echo "set FRESH=1 to build a fresh home (downloads gcc 16.1.0 and 15.1.0)"
fi
fi

if want I; then
echo "===== I: SYCL units vs the collision set (E19, E20)"
DX=$R/xim-x-dpcpp/7.1.0/bin/clang++; G=$R/xim-x-gcc/15.1.0; GID=$(ls -d "$G"/lib/gcc/x86_64-linux-gnu/* | head -1)
GLIBC=$R/xim-x-glibc/2.44.3; UAPI=$(ls -d "$R"/xim-x-linux-headers/* | head -1); LL=$R/xim-x-llvm/22.1.8; NM=$LL/bin/llvm-nm
P=$R/mcpp-x-plugins/0.19.1/mcpp-plugins-0.19.1/tests/sycl-consumer
rm -rf "$W/i"; mkdir -p "$W/i"; cd "$W/i"
"$NM" -D --defined-only "$R/xim-x-gcc/16.1.0/lib64/libstdc++.so.6" | awk '{print $3}' | sed 's/@.*//' | sort -u > gnu.txt
"$NM" --defined-only -g "$LL/lib/x86_64-unknown-linux-gnu/libc++.a" "$LL/lib/x86_64-unknown-linux-gnu/libc++abi.a" 2>/dev/null \
| awk 'NF==3 && $2 ~ /[TDRVWBui]/ {print $3}' | sort -u > llvm.txt
comm -12 gnu.txt llvm.txt > collide.txt; echo "collision set: $(wc -l < collide.txt)"
F="-fsycl -std=c++17 -O2 -fPIC --gcc-install-dir=$GID -isystem$GLIBC/include -isystem$UAPI/include"
nice -n 10 "$DX" $F -I"$P/include" -x c++ -c "$P/src/kernels/saxpy.sycl" -o saxpy.o
if [ -n "${TENSORVIA:-}" ]; then
for f in runtime arithmetic matmul; do
nice -n 10 "$DX" $F -I"$TENSORVIA/include" -I"$TENSORVIA/src/backend/sycl" -x c++ -c "$TENSORVIA/src/backend/sycl/device/$f.sycl" -o "tv_$f.o"
done
fi
for o in *.o; do
"$NM" -u "$o" | awk '{print $2}' | sort -u > u.txt
echo "== $o: $(comm -12 u.txt collide.txt | wc -l) in collision set; layout-sensitive:" \
"$(comm -12 u.txt collide.txt | c++filt | grep -c -E 'runtime_error|logic_error|out_of_range|invalid_argument|length_error|::what\(\)')"
echo " foreign typeinfo: $(grep '^_ZTI' u.txt | comm -23 - collide.txt | c++filt | tr '\n' ' ')"
done
fi
7 changes: 6 additions & 1 deletion .agents/docs/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ superseded_by: 2026-09-07-....md # when status is superseded
---
```

336 records.
337 records.

## By subject

Expand Down Expand Up @@ -64,6 +64,10 @@ Records that declare one. Everything else is listed by date below.
- [A curriculum for the examples, a reference for the documentation, and a check with a denominator](2026-09-08-examples-curriculum-and-documentation-plan.md) — superseded by [2026-09-08-documentation-architecture-three-trees.md](2026-09-08-documentation-architecture-three-trees.md)
- [Three documentation trees, three audiences, and the rule for citing between them](2026-09-08-documentation-architecture-three-trees.md) — active

### ecosystem

- [控制契约、并发与性能、单一 C++ 运行时,以及 IDE 生态(生态级,#838、#839)](2026-10-26-control-contract-runtime-and-ide-ecosystem-design.md) — active

### heterogeneous

- [A dlopen surface no closure walks, and a process with two unwinders](2026-09-09-dlopen-surface-and-two-unwinders.md) — landed
Expand Down Expand Up @@ -139,6 +143,7 @@ Records that declare one. Everything else is listed by date below.

### 2026-10

- [控制契约、并发与性能、单一 C++ 运行时,以及 IDE 生态(生态级,#838、#839)](2026-10-26-control-contract-runtime-and-ide-ecosystem-design.md) — active
- [目标基座与执行宿主:sysroot 的通用模型、运行器契约、自备输入,以及同批的发布产物路径(#832)](2026-10-23-target-base-and-execution-host-design.md) — landed
- [依赖 image 的资源归属、模块扫描边界与锁文件稳定写入](2026-10-21-resource-ownership-module-scan-and-lock-write-design.md) — active
- [首次初始化、home 重定向与网络诊断优化设计](2026-10-19-first-run-home-and-network-design.md) — landed
Expand Down
2 changes: 1 addition & 1 deletion .github/actions/bootstrap-mcpp/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ inputs:
# `package.name`, so one of the two was simply unreachable — and which one
# depended on the machine, which is why CI failed on `compat:lua` on
# Windows and `mcpplibs.capi:lua` on Linux. Never pin below that.
default: '2026.10.24.1'
default: '2026.10.26.1'

outputs:
sandbox-key:
Expand Down
2 changes: 1 addition & 1 deletion .github/actions/setup-macos-llvm/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ inputs:
# Floor imposed by the index, not a routine bump — see
# .github/actions/bootstrap-mcpp/action.yml for why 0.4.69 is required
# (two packages named `lua` in one repo need openxlings/xlings#381).
default: '2026.10.24.1'
default: '2026.10.26.1'
image:
description: >
The runner label the job runs on (macos-15, xcode-27). It is part of the
Expand Down
21 changes: 17 additions & 4 deletions .github/tools/check_function_sizes.sh
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,9 @@
#
# A compile database that names BMIs explicitly (-fmodule-file=...), which
# only a build actually produces: `mcpp build --toolchain llvm@23.1.3` writes
# compile_commands.json at the project root. This script does not build it:
# the configuration's compile_commands.json, which target/.last-result.json
# names (a root copy only when [build] compile_commands asks for one, mcpp
# 2026.10.26.1+). This script does not build it:
# the caller runs that build first. check_file_lengths.sh needs no such
# division because it reads the tree.
#
Expand Down Expand Up @@ -57,7 +59,18 @@ cd "$REPO_DIR" || { echo "FAIL: cannot cd to $REPO_DIR" >&2; exit 1; }
LINE_THRESHOLD=400
DIR="src/build/prepare"
PRIMARY="src/build/prepare.cppm"
# The database the build wrote: the project root's copy when the project asks
# for one (`[build] compile_commands`), else the configuration's own, which the
# result record names (mcpp 2026.10.26.1+, design 2026-10-26 D14).
CDB="compile_commands.json"
if [ ! -f "$CDB" ] && [ -f target/.last-result.json ]; then
CDB=$(python3 - <<'PY'
import json
last = json.load(open("target/.last-result.json"))["data"]["result"]
print(json.load(open(last))["data"].get("compileDatabase") or "compile_commands.json")
PY
)
fi

[ -d "$DIR" ] || { echo "FAIL: $DIR does not exist -- this guard has gone stale" >&2; exit 1; }

Expand All @@ -68,8 +81,8 @@ FAIL: $CDB does not exist.
compile database that names every imported module's BMI explicitly.
Produce one first:
mcpp build --toolchain llvm@23.1.3
(any installed LLVM row works; the database is written at the project
root regardless of the row's exact version).
(any installed LLVM row works; the database is read from the project
root, or from the configuration target/.last-result.json names).
EOF
exit 1
fi
Expand Down Expand Up @@ -148,7 +161,7 @@ trap 'rm -f "$OUT"' EXIT
"$CLANG_TIDY" \
--checks='-*,readability-function-size' \
--config="{CheckOptions: {readability-function-size.LineThreshold: '$LINE_THRESHOLD'}}" \
-p "$REPO_DIR" \
-p "$(dirname "$CDB")" \
"${FILES[@]}" > "$OUT" 2>&1
rc=$?

Expand Down
5 changes: 4 additions & 1 deletion .github/tools/check_unicode_paths.sh
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,10 @@ for name in ascii "$CAFE" "$CJK"; do
if [ "$name" != ascii ]; then
ninja=$(find target -name build.ninja -newer mcpp.toml | head -1)
check_bytes "$ninja" "$name" "$label"
check_bytes compile_commands.json "$name" "$label"
# The configuration's database: the root copy is written only
# when [build] compile_commands asks for one (2026.10.26.1+).
cdb=$(find target -name compile_commands.json -newer mcpp.toml | head -1)
check_bytes "$cdb" "$name" "$label"
fi
ok "$label"
done
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/bootstrap-macos.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ jobs:
# Dormant (workflow_dispatch only), but kept in step with the rest —
# check_version_pins.sh holds it there. Floor: 0.4.69, below which the
# index cannot resolve two packages that share a short name.
XLINGS_VERSION: '2026.10.24.1'
XLINGS_VERSION: '2026.10.26.1'
steps:
- uses: actions/checkout@v4

Expand Down
6 changes: 3 additions & 3 deletions .github/workflows/ci-bootstrap.yml
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ jobs:
os: [ubuntu-24.04, macos-15, windows-2025]
env:
XLINGS_NON_INTERACTIVE: '1'
XLINGS_VERSION: '2026.10.24.1'
XLINGS_VERSION: '2026.10.26.1'
steps:
- uses: actions/checkout@v4

Expand All @@ -50,7 +50,7 @@ jobs:
shell: bash
run: |
set -euo pipefail
curl -fsSL https://raw.githubusercontent.com/openxlings/xlings/main/tools/other/quick_install.sh | bash -s v2026.10.24.1
curl -fsSL https://raw.githubusercontent.com/openxlings/xlings/main/tools/other/quick_install.sh | bash -s v2026.10.26.1
echo "$HOME/.xlings/subos/current/bin" >> "$GITHUB_PATH"
echo "$HOME/.xlings/bin" >> "$GITHUB_PATH"

Expand Down Expand Up @@ -124,7 +124,7 @@ jobs:
shell: bash
run: |
set -euo pipefail
curl -fsSL https://raw.githubusercontent.com/openxlings/xlings/main/tools/other/quick_install.sh | bash -s v2026.10.24.1
curl -fsSL https://raw.githubusercontent.com/openxlings/xlings/main/tools/other/quick_install.sh | bash -s v2026.10.26.1
echo "$HOME/.xlings/subos/current/bin" >> "$GITHUB_PATH"

- name: Install the newest release and build the tree with it (mcpp build --strict)
Expand Down
Loading
Loading