Skip to content

Survey the triples a record took out of the target register, beside the ones in it - #516

Merged
iderex merged 1 commit into
mainfrom
af05-core/the-leg-surveys-what-left-the-set
Sep 18, 2026
Merged

iderex merged 1 commit into
mainfrom
af05-core/the-leg-surveys-what-left-the-set

Conversation

@iderex

@iderex iderex commented Sep 18, 2026

Copy link
Copy Markdown
Contributor

What this changes

A probe block in .github/cross-toolchain/probes may carry a fourth field,
left:, holding the four-digit number of the record that took its triple out of
the target register. The survey is then the triples that register names plus the
triples a record took out of it, the run says which of the two populations each
triple is in, and the six blocks 0512 removed are back under its number with the
tool each build stopped at. 0512 carries a dated note under 0313 where it said
nothing takes that reading.

The means

Shell and awk in the file that already holds this leg, and one optional field in
the register beside it. The subject is a set two registers name, the readers are
already awk in this script for the reason .github/targets/targets.sh gives
about mawk and gawk, and nothing here needs a language, a runtime or a
dependency the tree does not carry. A separate register for the departed triples
was the other shape and is refused below.

Why the guard is one function rather than two loops

The two agreement rules were inline loops inside check, so neither had a
fixture and both were carried by their message alone. They are one function now,
agreement_failures, taking the three sets and returning one line per
disagreement, so each of the three ways the registers can disagree has a fixture
that runs it. The selftest's closing sentence says so rather than claiming more
than it proves.

Each refusal, proven by breaking the register

Run at this head, with the tree restored after each one. The output is the first
error line of each run.

sed -i 's/^left: 0512$/left: 9999/' .github/cross-toolchain/probes
::error::.github/cross-toolchain/probes says aarch64-apple-darwin left the set under 9999, and docs/decisions holds no record of that number. A departure whose record cannot be opened is a platform nobody can find the argument for, which is the state this field exists against.

# the left: line dropped from one departed block
::error::.github/cross-toolchain/probes carries a probe for aarch64-apple-ios, the target register's set does not name that triple, and no block says which record took it out. A probe for a platform nobody links and nobody recorded leaving is a compiler this run reports on for no reason, and it is how a register outlives the platform it was written for. A departure says so with left: NNNN.

# left: 0512 added to the block for the one triple the target register carries
::error::.github/cross-toolchain/probes says x86_64-unknown-linux-gnu left the target register's set while that register carries it. One of the two was not updated when the triple came back, and which one is not a thing this leg can decide.

printf 'aarch64-unknown-linux-musl A line added to prove the rule.\n' >> .github/targets/targets
::error::aarch64-unknown-linux-musl is in the target register's set and .github/cross-toolchain/probes carries no probe for it. A triple added to that set and left unsurveyed is a platform this run says nothing about, on a page that reads as though it said something about all of them.

Run at this head

git rev-parse HEAD
53b876073eb12bb4dcd4671d19f6014141261faf
bash .github/cross-toolchain/cross-toolchain.sh selftest | grep -c '^ok'
31
bash .github/cross-toolchain/cross-toolchain.sh check | grep -cE '^::error'
0
bash .github/targets/targets.sh check
Every triple the register names compiles.
bash .github/doc-paths/doc-paths.sh check
Every path these documents name resolves against the tracked set.
cargo build --locked --all-targets ; echo "exit=$?"
exit=0
cargo test --locked ; echo "exit=$?"
exit=0

The leg's own run on this machine reports the Windows triple served, because
this is a Windows machine carrying cl. The verdict that matters is the
runner's, and the check run on this pull request is where it is read.

The register rather than a second file

A second register naming the departed triples was the other shape. It costs a
third file, a second loader, a second count guard against a reader that stopped
matching, and a rule refusing a triple named in both - and every one of those is
a thing this script already has for the one register it reads. The field is one
optional value on a block that has to exist anyway, because a departed triple
with no probe is not surveyable at all.

What this does not do

It does not decide that any triple comes back. A departed triple reported served
has met one half of 0512's reversal condition for it, on one translation unit,
and the run says so on its own line. The other half is a build of the real graph
on the runner, which is the targets leg, and the return itself is a record.

It does not refuse anything about what the survey finds, which is the property
this leg has had since it landed and which 0291's own argument rests on.

It does not reach a triple nobody put in either register. The run says so in its
own closing disclosure, beside the four it already carried.

The second reader

There is none tonight. What stands in place of one is that each of the four
refusals was executed against a broken register on this machine rather than
argued from the source, and that the three agreement rules are judged by one
function with a fixture apiece. That is weaker than a reading by a second person
and is not a substitute for one.

Closes #514

…he ones in it

0512 cut the target register to the triples this runner can build the graph
0243's entry brings, and the cross-toolchain leg reads its subject through that
register's own reader. So the leg was left surveying a set the runner serves by
construction: one served of one, a control rather than a survey, and no route
by which the day the image gains an NDK or a Windows SDK becomes a line anybody
sees. That day is 0512's reversal condition for the triple arriving.

A probe block now carries an optional fourth field, `left:`, holding the
four-digit number of the record that took its triple out of the target register
and nothing else on the line. The survey is the two populations together, the
run says which of the two each triple is in, and a departed triple that compiles
gets its own line saying so and saying what it is not - a probe proves one
translation unit, and a triple returns by a build of the real graph on the
runner and a record that puts the line back. The six blocks 0512 removed are
back under its number, each with the tool its build stopped at.

Three ways the two registers can disagree are judged by one function so that
each has a fixture rather than only a message: a triple in the target register
no block covers, a block outside it declaring no record that took the triple
out, and a block declaring a departure for a triple that register still carries.
A fourth refusal opens the record the field names and refuses a number
`docs/decisions/` does not hold. Each was proven by breaking the register and
watching the run go red, and the tree was restored afterwards.

0512 carries a dated note under 0313 where it said nothing takes that reading.
The sentence stands for the state between the cut and this change, which is what
0313 is for, and nothing the record decided moves.

Closes #514

Signed-off-by: Nils Lehnen <30603423+iderex@users.noreply.github.com>
@iderex
iderex merged commit e1a5126 into main Sep 18, 2026
28 checks passed
@iderex
iderex deleted the af05-core/the-leg-surveys-what-left-the-set branch September 18, 2026 14:39
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

The cross-toolchain leg surveys the set 0512 left behind, which is the set the runner serves by construction

1 participant