Skip to content

Cut the target set to the triple the runner builds once 0243's entry arrives - #513

Merged
iderex merged 2 commits into
mainfrom
af05-core/the-cut-the-providers-c-build-forces
Sep 18, 2026
Merged

iderex merged 2 commits into
mainfrom
af05-core/the-cut-the-providers-c-build-forces

Conversation

@iderex

@iderex iderex commented Sep 18, 2026

Copy link
Copy Markdown
Contributor

What this changes

.github/targets/targets holds one triple where it held seven, and
docs/decisions/0512-the-triples-the-gate-compiles-once-the-providers-c-build-arrives.md
records why, supersedes 0113 and 0291, and says which parts of each it carries
forward unchanged. 0113 and 0291 take their superseded by halves, which is one
of the three in-place edits 0001 permits, and the index takes its line.

The means

Prose in the register that already exists and a record in the register of
records. The decision is a change to a set two legs read through one reader, and
neither a new file format nor a new check would carry it: 0001 fixes the shape a
decision takes here and .github/targets/targets.sh is already the authority for
what the set is. No language, runtime or dependency is added.

The reading behind it

Taken on ubuntu-latest with the toolchain rust-toolchain.toml pins, on a
draft carrying rustls 0.23.45 and rustls-platform-verifier 0.7.0 in
[dependencies] and nothing else. #291 records that every cross-compile reading
before this one was taken on a contributor's Windows machine.

The first run is https://github.com/Flowfin/core/actions/runs/35351749365, at
head 3915c8d4d32cb2e3996f142e3bd59987bce4529f, against the register as it
stood:

::error::6 of the 7 triple(s) above did not compile.

Every one of the six ends in error: failed to run custom build command for aws-lc-sys v0.45.0, at a different tool:

aarch64-linux-android      failed to find tool "aarch64-linux-android-clang"
armv7-linux-androideabi    failed to find tool "arm-linux-androideabi-clang"
aarch64-apple-ios          failed to find tool "xcrun"
aarch64-apple-tvos         failed to find tool "xcrun"
aarch64-apple-darwin       cc ... "-arch" "arm64" "-mmacosx-version-min=11.0" ... aes-xts-enc.S  exit status: 1
x86_64-pc-windows-msvc     cc ... "-DWIN32_LEAN_AND_MEAN=" ... x_x509.c  exit status: 1

The second is https://github.com/Flowfin/core/actions/runs/35352090075, at head
9cdd5389d78e7862296bd39ed8e63e704f9c4cc1, the same manifest with those six out
of the register:

The library compiles for 1 target triple(s): x86_64-unknown-linux-gnu
Every triple the register names compiles.

Both are on one branch whose name begins with the word probe, opened as a draft
and closed rather than merged.

Run at this head

git rev-parse HEAD
78c397c0c148aa0e92a7532a8bec876e6f857979
bash .github/cross-toolchain/cross-toolchain.sh selftest
Every fixture held. The rules the survey applies are the rules these fixtures ran.
bash .github/targets/targets.sh check
The library compiles for 1 target triple(s): x86_64-unknown-linux-gnu
Every triple the register names compiles.
bash .github/doc-paths/doc-paths.sh check
83 document(s), 420 named path(s) resolved, 0 excused as examples
Every path these documents name resolves against the tracked set.
bash .github/decision-records/decision-records.sh check
Records: 69. Fields found: 10.
Every narrowing these records declare is named from both ends.
cargo build --locked --all-targets ; echo "exit=$?"
exit=0
cargo test --locked ; echo "exit=$?"
exit=0

What this costs, stated rather than left to the tick

Six client platforms stop being compiled at all: Android on both its ABIs, iOS
and iPadOS, Apple's television platform, macOS on Apple silicon, and the Windows
desktop. A defect that appears only on one of them now leaves the whole gate
green, which is the failure 0113 built the leg against. Two of the six cost more
than the other four, and 0512 names both: the 32-bit Android ABI is the only
entry in the set that was not 64-bit, and 0113 calls it the entry to keep if the
set is ever cut; the Windows entry is the one whose toolchain differed from every
other.

What is left is the runner's own host, which is the triple the suite already runs
on, so the leg adds nothing to build for as long as 0512 holds.

What the probe register beside the target one had to do

.github/cross-toolchain/probes named six triples the target register no longer
carries, and its loader refuses a probe for a triple that set does not name -
the rule that stops a probe register outliving the platform it was written for.
Those six blocks leave, and what leaves with them is the reading 0291's second
reversal condition asks for. The leg now surveys the set the target register
names, which after 0512 is a set this runner serves by construction, so it
reports a control rather than a survey.

That is written where a reader of each file meets it: in 0512's reversal
condition, in the register's header, and in the workflow's own comment. #514
carries the subject the leg needs to watch a departed triple again. The script's
messages named 0113's set and name the target register instead, since 0113 is
superseded here; its twenty fixtures are unchanged and still hold.

What this does not do

It does not add the manifest entry. Cargo.toml and Cargo.lock are untouched
here, and #27 is where the entry and the clause 0303 and 0103 require beside it
arrive.

It does not decide which provider. 0243's means is unchanged and the candidate
crates read on #291 on 2026-09-16 are weighed there.

It does not add a runner or a toolchain, so the cost is paid in platforms rather
than in minutes.

The second reader

There is none tonight. What stands in place of one is that the decision this
lands was taken on #291 on 2026-09-18 by somebody other than whoever writes the
record, and that both readings above were taken by the gate on its own runner
rather than reported from a working tree. That is weaker than a reading by a
second person and is not a substitute for one.

Closes #291
Closes #512

…arrives

0291 decided on 2026-09-04 that no triple leaves 0113's set and that the
manifest entry 0243 requires waits for a pure-Rust provider, and it recorded
that no reading of which C cross-compilers the runner carries had ever been
taken. The decision of 2026-09-18 on #291 reverses the first half: a triple the
target leg cannot build leaves the set until a provider reaches a release the
leg compiles it on, and the leg's own run says which those are.

That run is now taken. On a draft carrying rustls 0.23.45 and
rustls-platform-verifier 0.7.0 and nothing else, on ubuntu-latest with the
pinned toolchain, six of the seven triples fail inside aws-lc-sys's build
script, each at a different missing tool - the NDK's wrapper for the two Android
ABIs, xcrun for the two Apple triples that need an SDK, and the image's own cc
stopping on an Apple assembly source and on a source compiled with the MSVC
definitions for the other two. The same tree with those six out of the register
is green.

0512 records the cut, supersedes 0113 and 0291, says which parts of each it
carries forward unchanged, names every triple that left with the tool its build
stopped at, and states what returns it. The register holds the one triple that
is left, and its header no longer argues that the set is a set of client
platforms rather than of runners, because after this change it is not.

What this prevents is a register holding a single line with nothing saying
whether that is a decision or an accident, and a platform taken out with no
record of what it was short of, which comes back by somebody re-measuring from
nothing or does not come back at all.

Closes #291
Closes #512

Signed-off-by: Nils Lehnen <30603423+iderex@users.noreply.github.com>
… that costs

The cut in the commit before this one left `.github/cross-toolchain/probes`
naming six triples the target register no longer carries, and the loader refuses
a probe for a triple that set does not name - which is the rule that stops a
probe register outliving the platform it was written for, and it is right. The
six blocks leave.

What leaves with them is the reading 0291's second reversal condition asks for,
and 0512 carries that condition forward for the triples it took out. The leg now
surveys the set the target register names, which after 0512 is a set this runner
serves by construction, so it reports a control rather than a survey. #514
carries the subject it needs to watch a departed triple again, and 0512's
reversal condition, the register's header and the workflow's own comment each
say so where a reader of that file meets it rather than in one place.

The script's messages named 0113's set, and 0113 is superseded by 0512 as of the
commit before this one. They name the target register instead, so the leg does
not print a superseded record's number on every run; its twenty fixtures are
unchanged and still hold.

Contributes to #291
Contributes to #512

Signed-off-by: Nils Lehnen <30603423+iderex@users.noreply.github.com>
@iderex
iderex merged commit df78776 into main Sep 18, 2026
28 of 29 checks passed
@iderex
iderex deleted the af05-core/the-cut-the-providers-c-build-forces branch September 18, 2026 14:07
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

1 participant