Skip to content

Stop counting the register's other entries inside one of them [#330] - #331

Merged
iderex merged 1 commit into
mainfrom
the-register-counts-its-own-entries-330
Sep 16, 2026
Merged

iderex merged 1 commit into
mainfrom
the-register-counts-its-own-entries-330

Conversation

@iderex

@iderex iderex commented Sep 16, 2026

Copy link
Copy Markdown
Contributor

The issue this belongs to

Closes #330

What changed

The reason beside x86_64-pc-windows-msvc in .github/targets/targets no longer counts the other entries. It says a construct every other line here accepts can still stop at this one, which is the argument it was making and holds whatever the register comes to hold.

The register's header gains the account of what the line said, that nothing in the check reads a word of a reason, and why a count written inside this file disagrees with it on the next line somebody adds.

What failure it prevents

A failure that has already happened, on every run of the targets leg for three weeks. The line said five and the register holds seven:

git show origin/main:.github/targets/targets | grep -v '^#' | grep -c .
7

git show origin/main:.github/targets/targets | grep -v '^#' | grep . \
  | awk '{print $1}' | grep -vc '^x86_64-pc-windows-msvc$'
6

The number was wrong on the day it landed rather than having gone stale. The register arrived in one commit with all seven entries and that sentence already in it:

git log origin/main --format='%h %ad %s' --date=short -- .github/targets/targets
b3090f0 2026-08-26 Compile the library for every triple a client links it on

git show b3090f0:.github/targets/targets | grep -v '^#' | grep -c .
7

git show b3090f0:.github/targets/targets | sed -n '29p'
x86_64-pc-windows-msvc The Windows desktop client. It is the one entry whose toolchain differs from every other in this set, so a construct the other five accept can still stop here.

What it costs is that this number is printed rather than filed. The check prints the register with its reasons at every verdict, on the register's own header argument that the set should be read at the moment somebody reads a verdict rather than found later by somebody auditing:

grep -n 'the register, read with its reasons' .github/targets/targets.sh
265:  echo "-- the register, read with its reasons"

So a reader deciding whether this leg earns a standard library install and a compile on every pull request was handed a set of seven and a reason accounting for six of them.

It was found by reading the register's reasons against the register while working the board, not by anything reporting it.

Evidence

Read at the commit being pushed, 02f428aad78556f48c3307217d53a53ed513a048.

Every other reason line in the register was read against the register in the same pass. Nothing else in it counts the set. The 32-bit line's claim holds against all six others:

grep -v '^#' .github/targets/targets | grep . | awk '{print $1}'
aarch64-linux-android
armv7-linux-androideabi
aarch64-apple-ios
aarch64-apple-tvos
aarch64-apple-darwin
x86_64-pc-windows-msvc
x86_64-unknown-linux-gnu

One 32-bit entry, six 64-bit ones, which is what that line says.

The leg's own two modes:

bash .github/targets/targets.sh selftest | tail -1
Every fixture held. The rules the gate applies are the rules these fixtures ran.

bash .github/targets/targets.sh check ; echo "exit=$?"
exit=0

bash .github/targets/targets.sh check | grep 'target triple(s)'
The library compiles for 7 target triple(s): aarch64-linux-android armv7-linux-androideabi aarch64-apple-ios aarch64-apple-tvos aarch64-apple-darwin x86_64-pc-windows-msvc x86_64-unknown-linux-gnu

The paths this change touches, against the Scope: line #330 declares:

git diff --name-only origin/main...HEAD
.github/targets/targets

The means is a line of the register this rule already lives in, and no artefact is built here. The change edits the reason text of one entry and adds a comment to the header, in the form the file already has; it adds no language, no runtime and no dependency, and the leg that already reads this file is what proves the register still parses and still compiles.

What a guard here refuses, and the proof it bites

Nothing. This change adds and edits no guard, no check and no test, so no bite is owed and none is shown. What it edits is data the existing check reads, and the two runs above are that check judging the edited file rather than a proof of a new refusal.

What this does not cover

  • No mechanism. Nothing compares a reason line in this register against the register it sits in. The check refuses a triple with no reason, a triple this compiler does not know, a register naming nothing, and a derived set that disagrees with the raw lines it came from. It reads no word of what a reason says, so the next count written into one is refused by nothing.
  • README.md's summary that the library is compiled for one target triple per client platform family. That sentence drops the two exceptions 0113 states in its own words, the Android second ABI and the third Apple entry. Whether a summary owes them is a judgement about a sentence rather than a count against a file, so it is named and left.
  • The aarch64-apple-tvos line's phrase "a fourth client family". It is not a count of this register's entries, and no reading of the register settles what it counts, so it is left alone rather than repaired on a guess.
  • Whether any of these triples should be in the set at all. That is 0113's question and Decide how the target leg compiles the crypto provider 0243 brings, or which triples leave 0113 #291 may move it. This change makes the Windows reason survive that decision instead of going stale on it, and takes no part in it.
  • The suite and the ordinary build were not re-run. This change touches no source, so cargo build --locked --all-targets and cargo test --locked were not run at this commit and the two leg runs above are the whole of what was measured here.

Who has read it

Nobody other than the author. There is one person on this account and no second reader was available, so the evidence above stands in place of a review rather than the question being left open.

The reason beside x86_64-pc-windows-msvc said a construct the other five entries
accept can still stop there. The register holds seven, so six are other:

    git show origin/main:.github/targets/targets | grep -v '^#' | grep -c .
    7

    git show origin/main:.github/targets/targets | grep -v '^#' | grep . \
      | awk '{print $1}' | grep -vc '^x86_64-pc-windows-msvc$'
    6

It was wrong on the day it landed rather than having gone stale. The register
arrived in one commit with all seven entries and that sentence already in it:

    git log origin/main --format='%h %ad %s' --date=short -- .github/targets/targets
    b3090f0 2026-08-26 Compile the library for every triple a client links it on

    git show b3090f0:.github/targets/targets | grep -v '^#' | grep -c .
    7

    git show b3090f0:.github/targets/targets | sed -n '29p'
    x86_64-pc-windows-msvc The Windows desktop client. It is the one entry whose toolchain differs from every other in this set, so a construct the other five accept can still stop here.

What it cost is that the number is printed rather than filed. The check prints
this register with its reasons at every verdict, by its own header's argument that
the set should be read at the moment somebody reads a verdict rather than found
later by somebody auditing:

    grep -n 'the register, read with its reasons' .github/targets/targets.sh
    265:  echo "-- the register, read with its reasons"

So a reader auditing whether this leg earns a standard library install and a
compile per pull request was handed a set of seven and a reason accounting for
six of them, on every run for three weeks.

The number is deleted rather than corrected. The sentence says every other line
here instead, which holds whatever the register comes to hold, and the header
gains the account of what the line said, that nothing reads a reason, and why a
count inside this file disagrees with it on the next line somebody adds. That
matters more here than it would in a document, because #291 may take triples
out of 0113's set and a corrected count would go stale on the day it does.

Nothing else in the register carries a count of the set. The 32-bit line's claim
that every other line is 64-bit holds against all six others, and the remaining
reasons name a platform without counting one.

    bash .github/targets/targets.sh selftest | tail -1
    Every fixture held. The rules the gate applies are the rules these fixtures ran.

    bash .github/targets/targets.sh check | grep 'target triple(s)'
    The library compiles for 7 target triple(s): aarch64-linux-android armv7-linux-androideabi aarch64-apple-ios aarch64-apple-tvos aarch64-apple-darwin x86_64-pc-windows-msvc x86_64-unknown-linux-gnu

It was found by reading the register's reasons against the register while working
the board, not by anything reporting it.

What this does not prevent: nothing compares a reason line against the register it
sits in. The check refuses a triple with no reason and a derived set that
disagrees with the raw lines it came from; it reads no word of what a reason says,
and the next count written into one is refused by nothing.

Closes #330

Signed-off-by: Nils Lehnen <30603423+iderex@users.noreply.github.com>
@iderex
iderex merged commit b2d40da into main Sep 16, 2026
28 checks passed
@iderex
iderex deleted the the-register-counts-its-own-entries-330 branch September 16, 2026 17:02
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 target register's Windows line counts five other entries, and the register holds six

1 participant