the readings the release produced, and the two defects the top-up had - #683
Merged
Merged
Conversation
Sandbox verification of 2026.9.21.3 in SubOS v920 with the CN mirror, both
legs against published artefacts:
mcpp 2026.9.21.2 (published) fails=2 G and H
mcpp 2026.9.21.3 (published) fails=0, nothing skipped
B, C and D pass on both, which is correct rather than a hole: they are the
previous wave's changes and stay as guards once their own release has shipped.
Only G and H are CHANGE sections for this one, and both are red on the older
engine.
The plan gains the whole publish chain — squash tree byte-identical to the PR
head, six release jobs green, eight GitCode assets serving with sizes matching
upstream, all four sha256 independently recomputed from the CN mirror and equal
to both the sidecars and the bump PR's values.
It also records a no-op that only a measurement could have caught: the first
local GitCode top-up exited 0 and reported "all assets mirrored + verified on
1 host(s)" while the line above said `no GITCODE_TOKEN/gtc; skipping gitcode
mirror`. The gate wants the environment variable and `gtc` keeps its token in
its own config, so the one leg that had to run was skipped behind a success
message. A GET against gitcode.com returned 404, which is how it was found.
TWO DEFECTS, ONE MEASUREMENT. A local top-up exited 0 and printed `all assets
mirrored + verified on 1 host(s)` while `no GITCODE_TOKEN/gtc; skipping gitcode
mirror` sat one line above it, and nothing had reached GitCode.
FIRST: the gate asked the wrong question. `gtc` resolves its own credentials —
`GITCODE_TOKEN` first, then the config file its `--help` documents — exactly as
`gh` does, and the github leg has always accepted either. This leg demanded the
variable, so a machine with a working, configured gtc was told it had none.
That is the machine this script is run on by hand, which is the whole reason it
can be run by hand: the cross-border upload from a GitHub runner is the shaped
path that has cost four releases their aarch64 asset.
SECOND, AND WORSE: `verify` iterates the hosts that turned out to be ENABLED,
so its denominator came from the same enumeration as its numerator. It could
not tell "both hosts serve every asset" from "one host was skipped and the
other serves every asset" — the skip was invisible to the only check that
could have reported it.
`MIRROR_HOSTS` states the required set before anything is probed, and defaults
to `both`. Wanting one leg stays possible, because topping GitCode up by hand
is legitimate, but it has to be asked for rather than being what happened.
Missing credentials for a required host now exit 2 and name both places a
token can live.
Measured, four paths:
local, gtc configured, no env var skipped silently, exit 0 -> 2 hosts
MIRROR_HOSTS=gtc n/a -> 1 host, stated
gtc present with no token skipped silently, exit 0 -> exit 2
CI (both tokens in the environment) 2 hosts -> unchanged
The third case had to be isolated with a config home carrying gh and not
gtc: emptying the whole config home fails the upstream download instead and
never reaches the gate, which is a test that would have passed for the wrong
reason.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Two things the release produced: the readings it was supposed to, and a pair of defects in the tool that mirrors it.
Sandbox verification
SubOS
v920, CN mirror, both legs against published artefacts:builtins = "iso"emits-fno-builtinmcpp test --no-runfails=2fails=0, nothing skippedB, C and D passing on both is correct rather than a hole: they are the previous wave's changes and become guards once their own release has shipped. Only G and H are CHANGE sections for this one, and both are red on the older engine.
mirror_res.sh: two defects, one measurementA local top-up exited 0 and printed
all assets mirrored + verified on 1 host(s)with this one line above it:Nothing had reached GitCode. A
GETagainstgitcode.comreturned 404, which is how it was found.The gate asked the wrong question.
gtcresolves its own credentials —GITCODE_TOKENfirst, then the config file its--helpdocuments — exactly asghdoes, and the github leg has always accepted either:So a machine with a working, configured gtc was told it had none — and that is the machine this script is run on by hand, which is the whole reason it can be: the cross-border upload from a GitHub runner is the shaped path that has cost four releases their aarch64 asset.
The check that should have caught it could not.
verifyiterates the hosts that turned out to be*_ENABLED, so its denominator came from the same enumeration as its numerator. It cannot distinguish "both hosts serve every asset" from "one host was skipped and the other serves every asset". The skip was invisible to the only thing that could have reported it.MIRROR_HOSTSstates the required set before anything is probed, defaultboth. Wanting one leg stays possible — topping GitCode up by hand is legitimate — but it has to be asked for rather than being what happened. Missing credentials for a required host exit 2 and name both places a token can live.Measured, four paths:
MIRROR_HOSTS=gtcThe third case had to be isolated with a config home carrying
ghand notgtc: emptying the whole config home fails the upstream download instead and never reaches the gate, which is a test that would have passed for the wrong reason.The publish chain
Squash tree byte-identical to the PR head, so the 39 green checks transfer. Six release jobs green. Eight GitCode assets serving 200 with sizes equal to upstream. All four archives downloaded from the CN mirror and their sha256 recomputed: equal to their sidecars and to the four values in openxlings/xim-pkgindex#868.