Skip to content

Commit 26c5ac9

Browse files
committed
test(e2e): case 7 answers for its host, which is the fix I wrote down and did not apply
`host_can_serve` now answers for the host, and `toolchain list` therefore drops an Apple row where its SDK cannot be. e2e 641 case 7 still required the three iOS rows to appear with their pin -- true while they were `planned`, because a planned row stays listed everywhere so it is discoverable, and false the moment the tiers moved. FAIL: aarch64-ios does not name llvm in toolchain list I HAD ALREADY WRITTEN THIS FIX DOWN. While diagnosing the matrix failure I noted that case 7's claim must become host-conditional. Then I fixed cases 3 and 8, added the unit assertion, ran the unit suite, and pushed -- having changed the listing and not re-run the end-to-end test that asserts the listing. A unit suite passing is not evidence about a behaviour no unit test observes. Both arms are real. On macOS the rows are listed with their pin; elsewhere they are absent, and two companions keep that absence from reading as a gap: `aarch64-macos` is absent for the same reason, and `x86_64-macos` is present because a `planned` row stays discoverable on every host. The pin itself is a property of the table and is asserted where every host can ask it, in tests/unit/test_toolchain_triple.cpp. Third instance of one class in an hour -- the other two were the sandbox verification's section 2, caught by a dry run, and thirty rows of expected.tsv. The design record now carries the three together.
1 parent d449857 commit 26c5ac9

2 files changed

Lines changed: 69 additions & 13 deletions

File tree

.agents/docs/2026-09-11-sdk-toolchains-and-ios-local-verification.md

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -657,6 +657,31 @@ discriminator the comment appeals to is real and is not the pin -- it is
657657
whether a PACKAGE can supply the target's system, and no package supplies an
658658
Apple SDK.
659659

660+
### The same criterion wrong in three places within one hour
661+
662+
`host_can_serve` now answers for the host, which is correct and which changed
663+
what `toolchain list` reports. Three criteria asserted the old answer, and each
664+
was written by me:
665+
666+
| where | the claim it made | how it surfaced |
667+
|---|---|---|
668+
| e2e 641 case 7 | the three iOS rows appear in the listing with their pin | `FAIL: aarch64-ios does not name llvm in toolchain list`, on CI |
669+
| the sandbox verification's section 2 | the same | a local dry run of the script, before the run that mattered |
670+
| `tests/matrix/expected.tsv` | 30 rows for hosts that cannot serve them | `scan (linux-aarch64)` reaching three fewer cells than declared |
671+
672+
The first is the one worth recording, because I had already written the fix
673+
down and not applied it: while diagnosing the matrix failure I noted that "case
674+
7's claim must become host-conditional -- on macOS the rows are listed; on
675+
other hosts they are correctly absent". Then I fixed cases 3 and 8, added the
676+
unit test, ran the unit suite, and pushed. **I changed the listing and did not
677+
re-run the end-to-end test that asserts the listing.** The unit suite passing
678+
is not evidence about a behaviour no unit test observes.
679+
680+
All three now name the host and carry both arms, and the Linux arm carries two
681+
companions so that an absence cannot be read as a gap: `aarch64-macos` is
682+
absent for the same reason, and `x86_64-macos` is present because a `planned`
683+
row stays discoverable everywhere.
684+
660685
### A skip I wrote from an assumption, refuted by a row in the same table
661686

662687
The macOS scan also reported `graph × iOS` as `mismatch / build-failed`, and I

tests/e2e/641_the_android_rows_are_wired_and_the_simulator_is_a_row.sh

Lines changed: 44 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -156,23 +156,54 @@ else
156156
echo " ok: min_api_level = 24 is accepted by the manifest"
157157
fi
158158

159-
# 7. THE iOS ROWS NAME THEIR PAYLOAD, AND IT IS A CONVENTION PIN. The compiler
160-
# is ours and only the SDK is Apple's: `xim:llvm` emits arm64 Mach-O for an
161-
# iOS deployment target, so the rows pin it exactly as the wasm row pins
162-
# emsdk. A capability pin would be wrong here -- `aarch64-macos` has the
163-
# same constraint (Darwin needs clang) and is not a capability row -- so the
164-
# pin is overridable, which case 8 relies on.
159+
# 7. THE LISTING ANSWERS FOR THIS HOST, AND AN APPLE ROW IS SERVED ONLY WHERE
160+
# ITS SDK IS.
161+
#
162+
# THIS CASE ASSERTED THE OPPOSITE FIRST AND WAS RIGHT FOR ONE RELEASE. It
163+
# required the three iOS rows to appear with their pin, which held while
164+
# they were `planned` -- `toolchain list` keeps a planned row on every host
165+
# so it is discoverable. Once the tiers moved, the listing correctly
166+
# dropped them on a non-Apple host and this case failed. The pin itself is
167+
# a property of the TABLE and is asserted where every host can ask it, in
168+
# tests/unit/test_toolchain_triple.cpp.
169+
#
170+
# BOTH ARMS ARE REAL, and the Linux arm carries two companions that keep an
171+
# absence from being indistinguishable from a gap: `aarch64-macos` is
172+
# absent for the same reason, so the rule is "this host cannot serve it"
173+
# rather than "the rows are missing"; and `x86_64-macos` IS listed, being
174+
# `planned` and therefore discoverable, so the absence is about serving and
175+
# not about Apple.
165176
list=$( "$MCPP" toolchain list --format json 2>/dev/null )
166-
for target in aarch64-ios aarch64-ios-sim x86_64-ios-sim; do
167-
if tr ',' '\n' <<<"$list" | grep -A6 "\"target\": *\"$target\"" \
168-
| grep -q "llvm"; then
169-
echo " ok: $target names the llvm payload"
177+
listed() { tr ',' '\n' <<<"$list" | grep -q "\"target\": *\"$1\""; }
178+
case "$(uname -s)" in
179+
Darwin)
180+
for target in aarch64-ios aarch64-ios-sim x86_64-ios-sim; do
181+
if listed "$target" && tr ',' '\n' <<<"$list" \
182+
| grep -A6 "\"target\": *\"$target\"" | grep -q "llvm"; then
183+
echo " ok: $target is listed here and names the llvm payload"
184+
else
185+
echo "FAIL: $target is not listed with its pin on a host that serves it"
186+
fail=1
187+
fi
188+
done
189+
;;
190+
*)
191+
for target in aarch64-ios aarch64-ios-sim x86_64-ios-sim aarch64-macos; do
192+
if listed "$target"; then
193+
echo "FAIL: $target is listed on a host that cannot serve it"
194+
fail=1
195+
else
196+
echo " ok: $target is absent here, as an Apple row must be"
197+
fi
198+
done
199+
if listed x86_64-macos; then
200+
echo " ok: x86_64-macos is listed, being planned and discoverable"
170201
else
171-
echo "FAIL: $target does not name llvm in toolchain list"
172-
tr ',' '\n' <<<"$list" | grep -A6 "\"target\": *\"$target\"" | sed 's/^/ /'
202+
echo "FAIL: x86_64-macos is absent; the absences above are then unexplained"
173203
fail=1
174204
fi
175-
done
205+
;;
206+
esac
176207

177208
# 8. AND THE SDK IS LOCATED, SO ITS ABSENCE IS A REFUSAL THAT NAMES IT.
178209
#

0 commit comments

Comments
 (0)