Build watch list — the 2026-09-05 wave, read against a running chain#
Follow this while the chain runs. Every row names the exact line that means the change worked and the exact line that means it did not. Grouped by stage, in the order a chain reaches them, so it can be read top-to-bottom live.
The wave that produced this list closed eleven backlog entries on static proof
only. A first rebuild attempt already found two build-killing bugs that a full green
battery had passed (HEAD e109f5ad), so treat every “expected” below as a
hypothesis the chain is testing, not a fact.
Chain in flight when this page was written: chain-status.json run
20260905-120554-7b7a0d4e, sdk..runtime, amd64,arm64,riscv64.
Re-groomed 2026-09-07 for the Vulkan rows only. That chain finished; the wave
after it wired all four components this page had listed as known or expected
failures. Those rows now say the opposite of what they said, because an
unavailable line for any of the four is a regression. VK2 closed on 2026-09-09
with 20/20 components on both foreign arches
(archive). The rest of the page is
the 2026-09-05 text, with log strings kept matching the code.
Read this first: the three that abort a run#
If the chain dies early, it is almost certainly one of these. Each fails fast, at its own stage, rather than shipping — which is the design, but it is still a dead run.
# |
grep for |
stage |
what it means |
|---|---|---|---|
1 |
|
media |
the image’s |
2 |
any path printed after |
sdk (all 3 arches) |
|
3 |
|
package ( |
a NEW |
SDK stage#
Vulkan: the source tree dies where it is born (HT5)#
verdict |
line |
|---|---|
PASS |
|
FAIL |
the prune line appearing before the component verdict — that order deletes the loader/SPIRV-Tools/glslang sources out from under the build |
FAIL |
no prune line at all on arm64/riscv64 — the foreign lanes then carry 4.09 GB of |
n/a |
amd64 prints neither; it never takes the cross path and has no |
Vulkan: fifteen components cross-built for the first time (VK1)#
The arm64 lane of this run has already answered this, and the answer is backlog
VK2: eleven of fifteen built, including the three that matter for building an
application — glslc, vulkaninfo and the validation layers. Use that as the
baseline for the riscv64 lane rather than the pre-run guesses.
verdict |
line |
|---|---|
PASS (measured on arm64) |
|
FAIL (was KNOWN FAIL before VK2) |
|
FAIL (was KNOWN FAIL before VK2) |
|
FAIL (was EXPECTED FAIL before VK2) |
|
FAIL (was EXPECTED FAIL before VK2) |
|
FAIL |
|
FAIL |
any |
Do not “fix” a Vulkan row while the chain is running. That was the 2026-09-05
instruction and it still holds: editing vulkan.sh mid-run ships two arches from
different sources, which is the drift this repo has been bitten by before. The four
routes above are already in the tree; what the chain owes is a verdict on them, and
<arch>/bin carrying what x86_64/bin does is what closed VK2 (2026-09-09).
LLVM target prefix (HT4)#
verdict |
line |
|---|---|
PASS |
the stage completes with no output at all from |
PASS |
amd64 prints |
FAIL |
|
FAIL |
the walk aborting on an unresolved |
sccache — the YB verdict, and it is finally greppable (YB)#
The launcher used to print its [server=] field only when sccache failed, so a
run where the fix worked carried no evidence. Both address setters now print it on the
healthy path, identically spelled. One grep covers the whole chain:
grep -o '\[server=[^]]*\]' <log> | sort | uniq -c
verdict |
line |
|---|---|
PASS |
every occurrence reads |
FAIL |
a single |
context |
the two lines are |
Needs a compile-heavy chain. --only runtime emits none of these lines. Also
worth reading deliberately: sccache --show-stats at the START of each step should
report 0 compile requests, not another container’s hundreds.
Media stage#
what |
PASS |
FAIL |
|---|---|---|
the ffmpeg/pyav launcher owner (F3) |
|
|
TFLite for the GStreamer monorepo (CL6) |
the monorepo configures with TFLite found on arm64 AND riscv64. riscv64 is the one to watch, as always |
TFLite missing on either. First thing to check is whether the parent still calls all three helpers in order — |
the media stage’s cross assertion (CL7.3) |
nothing new printed |
|
Package / runtime stage#
The Vulkan host prefix (HT5)#
verdict |
line |
|---|---|
PASS |
the |
PASS, deliberately |
on amd64 the prune is a no-op — there |
PASS, deliberately |
on a lane whose cross Vulkan loader failed to build, the prefix is KEPT and the script says so loudly. The tree-arch gate will then fail that image on 61 X86-64 objects. That is the honest verdict for an image with no Vulkan of its own, and it is a new way for a chain to go red |
FAIL |
the script deleting anything on amd64 — that takes |
The host payload (CON96, new 2026-10-13)#
verdict |
line |
|---|---|
PASS |
amd64: |
PASS |
arm64, riscv64: |
FAIL |
any |
FAIL |
the smoke’s |
on the bytes |
|
absl, the defect the corrected probe found (CL1)#
verdict |
line |
|---|---|
FAIL |
|
PASS |
no such line, on all three |
Packaging (new this wave, none of it ever run)#
what |
PASS |
FAIL |
|---|---|---|
AppImage runtime |
|
|
Flatpak runtimes |
seven refs installed on amd64/arm64; skipped outright on riscv64 (Flathub builds x86_64 and aarch64 only) |
a 404 retry loop on riscv64 means the arch guard stopped working |
web-lane toolchain |
|
|
web-lane tools from source (riscv64, new 2026-09-23) |
android |
|
On the shipped bytes — after the run, not from the log#
This is the half the 2026-09-04 chain never reached, and the half where “verify the shipped BYTES, never the push” applies.
Sizes (CC1 has asked for this baseline twice)#
Today’s reading is 30.37 / 30.84 / 29.69 GB (amd64/arm64/riscv64), verified
against nerdctl images. HT5 removes ~5.95 GB from each foreign image; VK1 adds an
unknown amount back by cross-building fifteen more components. Read the two
together or neither number means anything. Record all three.
| expected | /opt/vulkan ~60 MB on arm64 and ~88 MB on riscv64 instead of 6.0 GB; amd64 byte-identical; the cross-android-* artifact images ~3.9 GB lighter on the two foreign lanes |
Probes to run, read-only#
# HT4 — was 12 / 0 / 0
find /usr/local/llvm-target -xtype l # must be 0 on all three
/usr/local/llvm-target/bin/lldb --version # works (fails today)
python -c 'import lldb' # imports (fails today)
readlink /usr/local/llvm-target/lib/libclang.so # = libclang-23.so.23
test -f /usr/local/llvm-target/include/llvm/IR/IRBuilder.h
ls /usr/local/llvm-target/lib/libc++* # must be EMPTY
# the unstartable-binary count: 3-of-142 -> 0-of-142
# HT5 — the gate was SHARPENED, not loosened
# check_manifest_tree_arch now walks the WHOLE /opt/vulkan tree
# expect: "OK /opt/vulkan: N ELF object(s), all AArch64" (all X86-64 on amd64)
# a FAIL naming 1 317 X86-64 objects means the prune did not run
# check_vulkan_loader now asserts WHERE the loader loaded from:
# "loads from /opt/vulkan/<ver>/<arch>/lib/..." = PASS
# a FAIL naming /usr/lib/<triple> = the prune took the prefix
# the image actually runs
# a WARN naming no path = /proc/self/maps unreadable,
# not a defect
# CC1 — a REGRESSION watch, not a discovery: all three read 0 today
find /usr/local/rustup /usr/local/cargo ! -user 1001 # must stay 0
find /opt/flutter -user root # must stay 0
nerdctl image inspect … | jq .Config.Env # the ENV strings must be BAKED
# CL1 / absl — 1 FAIL today, must be 0
nerdctl run --rm --platform linux/<arch> -v <repo>:/repo:ro --entrypoint bash \
ghcr.io/kataglyphis/kataglyphis_beschleuniger:latest-<arch> \
/repo/linux/scripts/06-packaging/smoke-critical-fixes.sh
# expect: PASS absl/types/span.h found in /usr/local/include
# AB1 — 420 objects, every one X86-64, on today's bytes
# check_android_abi must report the payload matching the advertised ABI,
# reading .a MEMBERS as well as .so files
What only the runtime smoke can say#
check_consumer_contract asserts 9 rows and has only ever run on amd64 — the
2026-09-04 chain died before arm64 and riscv64. Same for the advertised-key gate’s 16
OKs with zero UNSET/UNREAD. Two green foreign verdicts here are new information.
Known-good noise — do not chase these#
VK_LAYER_PATHis empty in every running image and always has been. The entrypoint sources LunarG’ssetup-env.sh, which UNSETS it and exportsVK_ADD_LAYER_PATHinstead. Not touched this wave; backlog R1 (closed 2026-09-07, archive) fixed the value a consumer that does not source it gets (vulkan-foreign-arch-sdk.md).The lib-dynload audit WARNs for five optional modules (
_zstd,readline,_curses,_uuid,_decimal). Information onoptionalrows — but any of them on amd64 is a genuine finding.readlineis arequiredrow in01-core/cpython-dev-packages.shnow, so its WARN is a finding on every arch._ctypeswarns on the GIL cross arches by design (build_python.shsetsac_cv_header_ffi_h=nothere). The free-threaded cross trees build it, and a missing one fails their audit.slangandvulkancapsviewerfailing to cross-configure was expected until 2026-09-07 and is not any more — both have a route now, so either one failing is a finding, not noise.