Signature
docker/qemu/run-aarch64-boot-test-strict.sh 25 (soft-float, --features boot_tests, -cpu cortex-a72) is 0/25 (0%) on
fix/562-761-aarch64-testing-profile at 88199ba4 (round-6 head
95de851e plus a docs-only commit; kernel/src identical to 95de851e).
Controlled comparison, same host, same script, back to back, same day
(2026-09-04):
| kernel |
result |
origin/main @ 78179c56, --features boot_tests |
15/15 (100%) |
this branch @ 95de851e/88199ba4, same features |
0/25 (0%) |
Both kernels were built from a from-scratch userspace/programs/build.sh --arch aarch64 + scripts/create_ext2_disk.sh --arch aarch64 in their own
worktree, so this is not a stale-fixture artifact.
Failure classes observed (branch only; 0/15 main-baseline boots show any of these six)
Of 25 branch boots:
- 12/25 --
[TEST:filesystem:block_wedge_oracle:FAIL:...], three
distinct messages: "second lock was not sleep-permitted" (5),
"parked lock was not sleep-permitted" (6), "requester never parked on
the real wait queue" (1).
- 9/25 -- a CPU exception, and it is the same one every time:
[INSTRUCTION_ABORT] FAR=0x40004530 ELR=0x40004530 ESR=0x8200000e IFSC=0xe TTBR0=0x40200000 from_el0=1. Bit-identical FAR/ELR/ESR/TTBR0
across all 9 occurrences.
- 1/25 --
[TEST:process:census_widen_oracle:FAIL:census widening mutation oracle failed].
- 1/25 -- "Futex handoff oracle marker missing or failed".
- 1/25 -- "Userspace not detected" (109/109 boot_tests suite completed
with BOOT_TESTS:PASS, but the poll window closed before userspace
liveness printed).
- 1/25 -- "Exec smoke did not complete".
0 of these six match the pre-adjudicated aarch64 gate-noise set
(#555 softirq, #576 EL1 NULL-PC, #626, #586 starved wake-loss, #609
network kthread). #576's own signature is ELR=0, FAR=0; this branch's
instruction abort is ELR=FAR=0x40004530 in 9/9 occurrences (grep -c
against each of the 9 CPU exception-classified serials in
S-battery-all25/) -- a fixed, different address from #576's, so a
distinct fault.
#599 ("run-aarch64-boot-test-strict.sh is red on main (15-20/20)") was
filed 2026-08-18 against an older main revision and describes a different
shape (a silent wedge after [EXEC_SMOKE:LAUNCH], no fault marker). Main
has since recovered: the 15/15 clean run above is current-day evidence that
whatever #599 was measuring no longer reproduces at HEAD. This branch's
0/25 is not a restatement of #599.
Why this is the branch's regression, not host noise
The block_wedge_oracle and instruction-abort classes are content-specific
(a named test failing with a fixed message; a fault at a byte-identical
address 9/9 times), not the kind of thing host CPU contention produces.
fix/562-761-aarch64-testing-profile's own change is exactly the kind of
thing that could break block_wedge_oracle's timing assumptions: it moves
CPU 0's boot sequence off a preemption-pinned context and onto an ordinary,
preemptible kernel thread (docs/planning/green-program/aarch64-testing/TESTING-PROFILE-REVIVAL-2026-09-04.md,
"One relocation, widened at round 3"). block_wedge_oracle exercises the
same virtio-blk wait/wake path that pin removal changes the scheduling
context of.
Evidence
The full run log (25 boots) is
docs/planning/green-program/aarch64-testing/serials/prove/S-battery-run-log.txt;
the main-baseline run log (15 boots) is
docs/planning/green-program/aarch64-testing/serials/prove/S-main-baseline-run-log.txt;
all 25 branch serials are the 25 files under
docs/planning/green-program/aarch64-testing/serials/prove/S-battery-all25/.
Scope
Filed during an independent PROVE pass of
fix/562-761-aarch64-testing-profile round 6
(docs/planning/green-program/aarch64-testing/TESTING-PROFILE-PROVE-2026-09-04.md).
Not fixed here -- the PROVE task is scoped to running the batteries and
reporting; RCA needs the project's GDB-based kernel-debugging workflow
against context_switch.rs/block_mmio.rs, which is Tier-2 territory.
This is a blocking finding for that branch: the strict gate cannot be
used to accept the merge while it is 0/25.
Signature
docker/qemu/run-aarch64-boot-test-strict.sh 25(soft-float,--features boot_tests,-cpu cortex-a72) is 0/25 (0%) onfix/562-761-aarch64-testing-profileat88199ba4(round-6 head95de851eplus a docs-only commit;kernel/srcidentical to95de851e).Controlled comparison, same host, same script, back to back, same day
(2026-09-04):
origin/main@78179c56,--features boot_tests95de851e/88199ba4, same featuresBoth kernels were built from a from-scratch
userspace/programs/build.sh --arch aarch64+scripts/create_ext2_disk.sh --arch aarch64in their ownworktree, so this is not a stale-fixture artifact.
Failure classes observed (branch only; 0/15 main-baseline boots show any of these six)
Of 25 branch boots:
[TEST:filesystem:block_wedge_oracle:FAIL:...], threedistinct messages: "second lock was not sleep-permitted" (5),
"parked lock was not sleep-permitted" (6), "requester never parked on
the real wait queue" (1).
[INSTRUCTION_ABORT] FAR=0x40004530 ELR=0x40004530 ESR=0x8200000e IFSC=0xe TTBR0=0x40200000 from_el0=1. Bit-identical FAR/ELR/ESR/TTBR0across all 9 occurrences.
[TEST:process:census_widen_oracle:FAIL:census widening mutation oracle failed].with
BOOT_TESTS:PASS, but the poll window closed before userspaceliveness printed).
0 of these six match the pre-adjudicated aarch64 gate-noise set
(#555 softirq, #576 EL1 NULL-PC, #626, #586 starved wake-loss, #609
network kthread). #576's own signature is
ELR=0, FAR=0; this branch'sinstruction abort is
ELR=FAR=0x40004530in 9/9 occurrences (grep -cagainst each of the 9
CPU exception-classified serials inS-battery-all25/) -- a fixed, different address from #576's, so adistinct fault.
#599 ("run-aarch64-boot-test-strict.sh is red on main (15-20/20)") was
filed 2026-08-18 against an older main revision and describes a different
shape (a silent wedge after
[EXEC_SMOKE:LAUNCH], no fault marker). Mainhas since recovered: the 15/15 clean run above is current-day evidence that
whatever #599 was measuring no longer reproduces at HEAD. This branch's
0/25 is not a restatement of #599.
Why this is the branch's regression, not host noise
The block_wedge_oracle and instruction-abort classes are content-specific
(a named test failing with a fixed message; a fault at a byte-identical
address 9/9 times), not the kind of thing host CPU contention produces.
fix/562-761-aarch64-testing-profile's own change is exactly the kind ofthing that could break
block_wedge_oracle's timing assumptions: it movesCPU 0's boot sequence off a preemption-pinned context and onto an ordinary,
preemptible kernel thread (
docs/planning/green-program/aarch64-testing/TESTING-PROFILE-REVIVAL-2026-09-04.md,"One relocation, widened at round 3").
block_wedge_oracleexercises thesame virtio-blk wait/wake path that pin removal changes the scheduling
context of.
Evidence
The full run log (25 boots) is
docs/planning/green-program/aarch64-testing/serials/prove/S-battery-run-log.txt;the main-baseline run log (15 boots) is
docs/planning/green-program/aarch64-testing/serials/prove/S-main-baseline-run-log.txt;all 25 branch serials are the 25 files under
docs/planning/green-program/aarch64-testing/serials/prove/S-battery-all25/.Scope
Filed during an independent PROVE pass of
fix/562-761-aarch64-testing-profileround 6(
docs/planning/green-program/aarch64-testing/TESTING-PROFILE-PROVE-2026-09-04.md).Not fixed here -- the PROVE task is scoped to running the batteries and
reporting; RCA needs the project's GDB-based kernel-debugging workflow
against
context_switch.rs/block_mmio.rs, which is Tier-2 territory.This is a blocking finding for that branch: the strict gate cannot be
used to accept the merge while it is 0/25.