Skip to content

Commit 9697b21

Browse files
committed
xlings 2026.9.26.2, the key rule a test still stated, and the graph link measured on four legs
- kXlingsVersion and every xlings pin in .github move to 2026.9.26.2 (openxlings/xlings#613): xlings.exe declares the UTF-8 code page and its main has an exception boundary, so a working directory or an MCPP_HOME outside the ANSI code page no longer ends it with 0xC0000409 and no output. - test_cache_key stated the old rule, that a package's `c_standard = "c11"` is keyed; a package that spells the default and one that says nothing compile identically and now share a key. CI run 1 failed that test on every platform, and nothing else in the unit suites. - e2e 778 pins each leg to the openkal-musl and openkal-llvm-runtime pair that belongs together (the runtime pins openkal-musl exactly, and a root that pins another is refused as irreconcilable), and adds the report's aarch64 case under qemu-aarch64 and a host `-L` refused by the hermetic check. The openkal job asserts each leg ran. - docs: a macOS file name is UTF-8; `allow_host_libs` lifts the graph-link refusal rather than turning it into a warning. - The plan's implementation record carries CI run 1: every Windows row of the regression job passes, and the two xcode-27 legs fail as on main (#669).
1 parent 3b3bf44 commit 9697b21

16 files changed

Lines changed: 133 additions & 43 deletions

‎.agents/docs/2026-09-25-issues-693-696-triage-and-repair-plan.md‎

Lines changed: 29 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1049,8 +1049,11 @@ Three items are split out, each for a stated reason.
10491049
|---|---|---|
10501050
| 1 | openxlings/xlings#613 | open, CI running; released as 2026.9.26.2, because 2026.9.26.1 had been released separately earlier the same day |
10511051
| 2 | mcpplibs/openkal-musl#43 | merged as `20b92683`; tag `0.19.2`; the GitHub archive (1157319 bytes, sha256 `e8043bcd...c82238`) and the GitCode copy compared byte for byte; the archive carries `port/lib/lib*.a`, eight files of eight bytes |
1052-
| 3 | mcpplibs/mcpp-index#467 | open, CI running |
1053-
| 4 to 7 | | follow in the order of §12.1 |
1052+
| 3 | mcpplibs/mcpp-index#467 | merged as `1529f5f3`; the index artifact `1529f5f` is served by both hosts with the pointer's digest |
1053+
| 4 | mcpplibs/openkal-llvm-runtime#30 | merged as `79671f6b`; tag `0.15.2`; archive 15631743 bytes, sha256 `c2219ad8...c0d0d9`, GitCode copy byte-identical; its mcpp.toml reads openkal-musl `0.19.2` |
1054+
| 5 | mcpplibs/mcpp-index#468 | registration of runtime 0.15.2, CI running |
1055+
| 6 | mcpp-community/mcpp#698 | CI run 1: every Windows row of the regression job passes (below); follow-up commit pending the xlings release |
1056+
| 7 | | after the mcpp release |
10541057

10551058
**Where the implementation departs from §12.2, and why.**
10561059

@@ -1081,6 +1084,18 @@ Three items are split out, each for a stated reason.
10811084
there when run from another directory; mcpp resolves it there as a build input.
10821085
- **The rc scanner** tracks a manifest named by the numeric type `24` and treats a statement as
10831086
a manifest only when a file name follows the type, so `FILEVERSION 24,1,0,0` is not one.
1087+
- **A target's entry `main` written in C takes its package's standard.** The entry is
1088+
synthesized after `make_plan`'s unit loop, so a flag added only inside the loop missed it;
1089+
found in self-review, one helper now serves both sites (unit test
1090+
`ACEntryMainTakesItsPackagesStandard`).
1091+
- **The cache key records a package's C standard only when it differs from `c11`.** A package
1092+
that spells the default and one that says nothing compile identically, so they share a key.
1093+
The first CI run failed the unit test that encoded the old rule; the test now states the new
1094+
one (`DeclaringTheDefaultCStandardKeysNothing`).
1095+
- **openkal-llvm-runtime pins openkal-musl exactly.** A root that pins openkal-musl 0.19.2
1096+
beside runtime 0.15.1 is refused as irreconcilable (measured with e2e 778), so a consumer
1097+
receives the archives by moving the runtime pin, which is what the #696 note says; the
1098+
fixture pairs musl 0.19.2 with runtime 0.15.2.
10841099

10851100
**Test results on Linux** (the worktree at `fix/693-696`):
10861101

@@ -1090,11 +1105,22 @@ Three items are split out, each for a stated reason.
10901105
| e2e 776, a path with no UTF-8 spelling is named (new) | passes; released 2026.9.25.1 fails at its first criterion with the JSON exception |
10911106
| e2e 777, `c_standard` applies to the package that declares it (new) | passes; 2026.9.25.1 compiles `cdep` and `plain` at the consumer's `c99` |
10921107
| e2e 778, a graph link searches no host directory (new), leg B | passes; 2026.9.25.1 links leg B from the host's `libm` |
1093-
| e2e 778, leg A | runs once openkal-musl 0.19.2 is in the index |
1108+
| e2e 778, legs A, C (aarch64 under qemu) and D (`-L/usr/lib` refused) | run once openkal-llvm-runtime 0.15.2 is in the index |
1109+
| CI run 1 of #698 | the two xcode-27 legs fail as on main (#669, lld 22 rejects `arm64e.x1` in the SDK stubs); `test_cache_key` failed on the old key rule (fixed) |
10941110
| e2e 190 | accepts the byte order mark before `$in_newline` |
10951111

10961112
The Windows rows run in CI through `.github/tools/check_unicode_paths.sh` (W4f): llvm, MSVC and
10971113
MinGW in an ASCII directory, `caf` + U+00E9 and U+6D4B U+8BD5, plus a path through `build.mcpp`.
1114+
CI run 1 of #698 (windows-latest, code page 1252; `mcpp.exe` self-hosted by the bootstrap
1115+
2026.9.24.1 with `res/mcpp.rc`):
1116+
1117+
```
1118+
ok llvm in 'ascii' ok msvc in 'ascii' ok mingw in 'ascii'
1119+
ok llvm in 'café' ok msvc in 'café' ok mingw in 'café'
1120+
ok llvm in '测试' ok msvc in '测试' ok mingw in '测试'
1121+
ok a path through build.mcpp in '测试'
1122+
OK: every row builds in every directory
1123+
```
10981124

10991125
---
11001126

‎.github/actions/bootstrap-mcpp/action.yml‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ inputs:
2525
# `package.name`, so one of the two was simply unreachable — and which one
2626
# depended on the machine, which is why CI failed on `compat:lua` on
2727
# Windows and `mcpplibs.capi:lua` on Linux. Never pin below that.
28-
default: '2026.9.20.1'
28+
default: '2026.9.26.2'
2929
cache-target:
3030
description: also restore/save target/ (build artifacts + BMIs)
3131
required: false

‎.github/actions/setup-macos-llvm/action.yml‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ inputs:
1515
# Floor imposed by the index, not a routine bump — see
1616
# .github/actions/bootstrap-mcpp/action.yml for why 0.4.69 is required
1717
# (two packages named `lua` in one repo need openxlings/xlings#381).
18-
default: '2026.9.20.1'
18+
default: '2026.9.26.2'
1919
image:
2020
description: >
2121
The runner label the job runs on (macos-15, xcode-27). It is part of the

‎.github/workflows/bootstrap-macos.yml‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ jobs:
1717
# Dormant (workflow_dispatch only), but kept in step with the rest —
1818
# check_version_pins.sh holds it there. Floor: 0.4.69, below which the
1919
# index cannot resolve two packages that share a short name.
20-
XLINGS_VERSION: '2026.9.20.1'
20+
XLINGS_VERSION: '2026.9.26.2'
2121
steps:
2222
- uses: actions/checkout@v4
2323

‎.github/workflows/ci-fresh-install.yml‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,7 @@ jobs:
152152
env:
153153
XLINGS_NON_INTERACTIVE: '1'
154154
run: |
155-
curl -fsSL https://raw.githubusercontent.com/openxlings/xlings/main/tools/other/quick_install.sh | bash -s v2026.9.20.1
155+
curl -fsSL https://raw.githubusercontent.com/openxlings/xlings/main/tools/other/quick_install.sh | bash -s v2026.9.26.2
156156
echo "$HOME/.xlings/subos/current/bin" >> "$GITHUB_PATH"
157157
158158
- name: Install mcpp and config mirror
@@ -312,7 +312,7 @@ jobs:
312312

313313
- name: Install xlings + mcpp
314314
run: |
315-
curl -fsSL https://raw.githubusercontent.com/openxlings/xlings/main/tools/other/quick_install.sh | bash -s v2026.9.20.1
315+
curl -fsSL https://raw.githubusercontent.com/openxlings/xlings/main/tools/other/quick_install.sh | bash -s v2026.9.26.2
316316
# Deliberately NOT writing to $GITHUB_PATH here. On container
317317
# images that declare no PATH in their config (opensuse/
318318
# tumbleweed), appending a single dir to GITHUB_PATH makes the
@@ -403,7 +403,7 @@ jobs:
403403
# (older ones carry minos=15 and refuse to start).
404404
# v0.4.51+: in-process sha256 — this image has no sha256sum
405405
# binary, so pinned fetches failed before it.
406-
curl -fsSL https://raw.githubusercontent.com/openxlings/xlings/main/tools/other/quick_install.sh | bash -s v2026.9.20.1
406+
curl -fsSL https://raw.githubusercontent.com/openxlings/xlings/main/tools/other/quick_install.sh | bash -s v2026.9.26.2
407407
echo "$HOME/.xlings/subos/current/bin" >> "$GITHUB_PATH"
408408
409409
- name: Install mcpp and config mirror

‎.github/workflows/ci-linux-e2e.yml‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -384,7 +384,7 @@ jobs:
384384
385385
- name: Bootstrap xlings + released mcpp
386386
run: |
387-
curl -fsSL https://raw.githubusercontent.com/openxlings/xlings/main/tools/other/quick_install.sh | bash -s v2026.9.20.1
387+
curl -fsSL https://raw.githubusercontent.com/openxlings/xlings/main/tools/other/quick_install.sh | bash -s v2026.9.26.2
388388
export PATH="$HOME/.xlings/subos/current/bin:$PATH"
389389
xlings update
390390
xlings install mcpp -y -g

‎.github/workflows/cross-build-test.yml‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@ jobs:
135135
# release assets were uploaded in a broken state (records present,
136136
# blobs missing → 404 on GET); re-uploaded clean. The stale-INDEX
137137
# half is handled by the marker-clear below.
138-
XLINGS_VERSION: '2026.9.20.1'
138+
XLINGS_VERSION: '2026.9.26.2'
139139
run: |
140140
tarball="xlings-${XLINGS_VERSION}-linux-x86_64.tar.gz"
141141
bash "$GITHUB_WORKSPACE/.github/tools/fetch_release.sh" \
@@ -289,7 +289,7 @@ jobs:
289289
- name: Bootstrap mcpp via xlings
290290
env:
291291
XLINGS_NON_INTERACTIVE: '1'
292-
XLINGS_VERSION: '2026.9.20.1'
292+
XLINGS_VERSION: '2026.9.26.2'
293293
run: |
294294
tarball="xlings-${XLINGS_VERSION}-linux-x86_64.tar.gz"
295295
bash "$GITHUB_WORKSPACE/.github/tools/fetch_release.sh" \

‎.github/workflows/openkal-cross.yml‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -637,4 +637,8 @@ jobs:
637637
"ok: -lm is answered by openkal-musl's own archive, and the program runs" || fail=1
638638
check 778_a_graph_link_searches_no_host_directory.sh \
639639
"ok: an unanswered -lm fails, and the note names openkal-musl 0.19.2" || fail=1
640+
check 778_a_graph_link_searches_no_host_directory.sh \
641+
"ok: aarch64-linux-musl links -lm from the graph and runs under qemu-aarch64" || fail=1
642+
check 778_a_graph_link_searches_no_host_directory.sh \
643+
"ok: a host directory in ldflags is refused, by name" || fail=1
640644
[ "$fail" = 0 ] || exit 1

‎.github/workflows/release.yml‎

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ jobs:
9696
# Pin xlings to a known-good version. The upstream install
9797
# script always grabs `latest` (no version override), so we
9898
# download + self-install manually to avoid broken releases.
99-
XLINGS_VERSION: '2026.9.20.1'
99+
XLINGS_VERSION: '2026.9.26.2'
100100
run: |
101101
if [ ! -x "$HOME/.xlings/subos/default/bin/xlings" ]; then
102102
tarball="xlings-${XLINGS_VERSION}-linux-x86_64.tar.gz"
@@ -314,7 +314,7 @@ jobs:
314314
- name: Bootstrap mcpp via xlings
315315
env:
316316
XLINGS_NON_INTERACTIVE: '1'
317-
XLINGS_VERSION: '2026.9.20.1'
317+
XLINGS_VERSION: '2026.9.26.2'
318318
run: |
319319
tarball="xlings-${XLINGS_VERSION}-linux-x86_64.tar.gz"
320320
bash "$GITHUB_WORKSPACE/.github/tools/fetch_release.sh" \
@@ -385,7 +385,7 @@ jobs:
385385
# below are pinned to the same version as XLINGS_VERSION; they are
386386
# NOT interpolated from it, so check_version_pins.sh scans for them
387387
# explicitly (they were absent from the old lock-step comment).
388-
XLA="xlings-2026.9.20.1-linux-aarch64.tar.gz"
388+
XLA="xlings-2026.9.26.2-linux-aarch64.tar.gz"
389389
# NOT fetch_release.sh: this asset is OPTIONAL and the `if` is the
390390
# point — an arch with no prebuilt xlings must fall through quietly,
391391
# while the helper retries a 404 five times before giving up. The one
@@ -394,9 +394,9 @@ jobs:
394394
# cover it.
395395
if curl -fsSL --retry 3 --retry-delay 2 --retry-all-errors \
396396
--connect-timeout 20 --max-time 600 -o "/tmp/$XLA" \
397-
"https://github.com/openxlings/xlings/releases/download/v2026.9.20.1/$XLA"; then
397+
"https://github.com/openxlings/xlings/releases/download/v2026.9.26.2/$XLA"; then
398398
tar -xzf "/tmp/$XLA" -C /tmp
399-
XLBIN=$(find /tmp/xlings-2026.9.20.1-linux-aarch64 -path '*/bin/xlings' -type f | head -1)
399+
XLBIN=$(find /tmp/xlings-2026.9.26.2-linux-aarch64 -path '*/bin/xlings' -type f | head -1)
400400
if [ -n "$XLBIN" ]; then
401401
mkdir -p "$STAGING/$WRAPPER/registry/bin"
402402
cp "$XLBIN" "$STAGING/$WRAPPER/registry/bin/xlings"
@@ -474,7 +474,7 @@ jobs:
474474
- name: Bootstrap mcpp via xlings
475475
env:
476476
XLINGS_NON_INTERACTIVE: '1'
477-
XLINGS_VERSION: '2026.9.20.1'
477+
XLINGS_VERSION: '2026.9.26.2'
478478
run: |
479479
if [ ! -x "$HOME/.xlings/subos/default/bin/xlings" ]; then
480480
WORK=$(mktemp -d)
@@ -657,7 +657,7 @@ jobs:
657657
shell: bash
658658
env:
659659
XLINGS_NON_INTERACTIVE: '1'
660-
XLINGS_VERSION: '2026.9.20.1'
660+
XLINGS_VERSION: '2026.9.26.2'
661661
run: |
662662
# Captured before the `cd` below, in POSIX form: this step never
663663
# returns to the workspace, and GITHUB_WORKSPACE is a backslash

‎docs/04-mcpp-toml.md‎

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -937,8 +937,9 @@ is not UTF-8. `cl.exe`, `link.exe` and `lib.exe` read a response file as UTF-8
937937
only when it begins with a byte order mark, so the response files of the msvc
938938
dialect begin with one.
939939

940-
**Paths with no UTF-8 spelling.** On Linux and macOS a file name is a sequence of
941-
bytes, which need not be UTF-8. On a Windows host older than version 1903 the
940+
**Paths with no UTF-8 spelling.** On Linux a file name is a sequence of bytes,
941+
which need not be UTF-8 (macOS file systems store names in UTF-8). On a Windows
942+
host older than version 1903 the
942943
manifest is ignored, and the process runs in the system's ANSI code page, which
943944
spells only part of Unicode. On either, some paths have no UTF-8 spelling:
944945

0 commit comments

Comments
 (0)