main is red on a disc-backed test since #23 — CI cannot see it #38
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Decision needed — this block is enough to decide
ui_prm_primitives_disc::the_derived_order_puts_primitives_last_and_that_wipes_screensfails on
main@3977cc9whenever the corpus is present. CI reports itok.The test is a tripwire. It asserts that switching primitives on still wipes at
least one screen, and says what to do the day it stops:
#23 made that day arrive: full-screen primitives are now forced to paint first,
so nothing comes out wiped.
Choose one:
include_primitivesoff; invert the assertion towiped_on == 0so it pins the fix, and rename the test — its name asserts the buginclude_primitiveson by default (ui_layout.rs:869), as the tripwire's message prescribes; delete the tripwire--primitivesWeigh this before choosing B. The commit that tripped the wire also wrote, in
the same commit, the opposite of the tripwire's advice:
The tripwire used a proxy — no build comes out >99% one colour — for paint
order is solved. The proxy fired. The question it stood in for is recorded as
PARTLY CLOSED in the same document. The test's prescription and the fix's
own record disagree, and the record is newer.
Evidence
Bisect — measured on the desktop, with the corpus
4ca0b8e641be933977cc9Ruled out by experiment: corpus, branch, toolchain. Not re-run on the Pi, which
has no corpus.
Pinned to
53f8345by measurement641be93..3977cc9is 512 commits — the whole of #23's branch — so thebisect above only reaches the merge. Two further runs on the desktop (corpus
present, retail extract, rustc 1.90.0) take it to one commit:
ui_prm_primitives_discda4666353f8345^53f8345It is a single-variable experiment, checked against the repository:
da46663is53f8345's only parent, so^is unambiguous.da46663,53f8345and3977cc9, so"3 passed" is the whole suite and the failure is one of those same three.
53f8345does not touch the test file. Across all of #23 the file's onlychange is
chunks_exact(4)→as_chunks::<4>().0from the clippy pass, whichyields the same 4-byte windows over an RGBA buffer. The test did not change; the
code under it did.
53f8345— formats: a keyless primitive that would hide the screen is forcedto paint first — adds
fn forced_backdrop,ui-forced-backdrop.md, and 76lines to
ui_layout.rs.fn forced_backdropis introduced there and neverremoved, so the cause is present on every commit from
53f8345tomain.mainhas since moved tod23f0b3(12 commits) without touching the test fileor
ui_layout.rs;include_primitivesis stillfalseatui_layout.rs:869.CI cannot see it — both halves are in one log
Run 67,
main@3977cc9, job 903 (Native — linux). All three jobs green.This is the failure #16 predicted, now on
main. #19's report told the truth 89lines below the
ok— and a green run is exactly the run nobody reads.Red on the branch for 15 days — and its author had the corpus
The tripwire was added on 2026-08-19 (
eb86142) and was already in53f8345'stree. This test has failed on
auto/frame-blend-draw-pathsince2026-08-29, 15 days before #23 merged it on 2026-09-13.
It was not missed for want of a corpus.
53f8345's own message shows its authorran disc tests — "The rule's real limit was found by its own disc-wide test
failing" — and describes the exact effect the tripwire counts: "36 builds …
wiped by our own sort rather than by the game." What it reports as verification
is scoped:
At
53f8345,ui_forced_backdrop_disc.rsholds exactly 3 tests andui_paint_order_disc.rsexactly 13, including the one the message names.The tripwire is in a third file,
ui_prm_primitives_disc.rs— athe_derived_order_…test by name, outside both files by location.This establishes what the verification recorded, not every command that was
run. But a run including
ui_prm_primitives_discfails at this commit —measured above — and the commit reports no failure.
What each option costs
53f8345addedtests/ui_forced_backdrop_disc.rs(three tests then, four onmain), whichpin the rule's mechanics (
the_rule_reproduces_both_measured_primitives,the_loading_screens_backdrop_sorts_first, …). None of the four composes withprimitives on, so none can assert the end-to-end outcome — that no build comes
out wiped. The inverted tripwire would be the only test that does.
paint position is recorded as only partly measured.
Reported from the desktop, which has the corpus; the bisect, the causal
framing, and the two runs pinning
53f8345are theirs. Verified from the Pi against the repository and the CIdatabase: the ancestry and size of the range, the test body and its only
in-range diff, the tripwire's origin, the authorship and date of both quoted
doc lines, the fix's own test names, and both CI log lines above.
Related: #16, #19, #22, #23.
Body updated: the cause is now measured, not read — and one sentence I wrote was false.
Pinned. The desktop ran the two confirming runs:
da46663(53f8345^)3 passed;
53f83451 failed with the tripwire message. Checked from the Pi thatthis is a clean single-variable result:
da46663is the only parent, the suite isthe same 3 tests on both sides,
53f8345does not touch the test file, and therule it adds is never removed afterwards.
Corrected. The body said the test sat red on the branch "with nobody who had
a corpus running it there." That was wrong.
53f8345's own message shows itsauthor ran disc tests and even described the 36 wiped builds the tripwire counts.
Its recorded verification — "3 new disc tests; the 13 paint-order tests are
green" — is exactly the test counts of
ui_forced_backdrop_disc.rsandui_paint_order_disc.rsat that commit. The tripwire lives in a third file.So the corpus was there, disc tests were run, and the verification was scoped
by file while the test the change could reach sat next door. That is worth
separating from this decision: a loop agent reporting a named subset as
"green" is how a red test lived 15 days on an agent branch, and #19's report
cannot help a run that never included the suite. If that wants fixing — e.g. the
loop briefs requiring the full
cargo testwith the corpus present beforestate/needs-human— it is its own item, not this one.The decision block above is unchanged.