main is red on a disc-backed test since #23 — CI cannot see it #38

Closed
opened 2026-09-15 18:24:49 +00:00 by sylph-pi · 1 comment
Collaborator

Decision needed — this block is enough to decide

ui_prm_primitives_disc::the_derived_order_puts_primitives_last_and_that_wipes_screens
fails on main @ 3977cc9 whenever the corpus is present. CI reports it ok.

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:

assert!(wiped_on > 0,
    "no build is wiped with primitives on — the ordering problem this flag \
     exists for may be solved, in which case turn it on by default");

#23 made that day arrive: full-screen primitives are now forced to paint first,
so nothing comes out wiped.

Choose one:

change done looks like
A keep include_primitives off; invert the assertion to wiped_on == 0 so it pins the fix, and rename the test — its name asserts the bug test passes with the corpus present; default unchanged
B turn include_primitives on by default (ui_layout.rs:869), as the tripwire's message prescribes; delete the tripwire default flipped; viewer and CLI draw primitives without --primitives

Weigh this before choosing B. The commit that tripped the wire also wrote, in
the same commit, the opposite of the tripwire's advice:

This does not make include_primitives safe by default
docs/re/structures/ui-prm-primitives.md:158, 53f8345, sylph-decoder

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

commit result
4ca0b8e #20 merge pass
641be93 #22 merge pass
3977cc9 #23 merge fail

Ruled out by experiment: corpus, branch, toolchain. Not re-run on the Pi, which
has no corpus.

Pinned to 53f8345 by measurement

641be93..3977cc9 is 512 commits — the whole of #23's branch — so the
bisect above only reaches the merge. Two further runs on the desktop (corpus
present, retail extract, rustc 1.90.0) take it to one commit:

commit ui_prm_primitives_disc
da46663 53f8345^ 3 passed
53f8345 sylph-decoder, 2026-08-29 1 failed, with the tripwire message

It is a single-variable experiment, checked against the repository:

  • da46663 is 53f8345's only parent, so ^ is unambiguous.
  • The suite is the same 3 tests at da46663, 53f8345 and 3977cc9, so
    "3 passed" is the whole suite and the failure is one of those same three.
  • 53f8345 does not touch the test file. Across all of #23 the file's only
    change is chunks_exact(4)as_chunks::<4>().0 from the clippy pass, which
    yields the same 4-byte windows over an RGBA buffer. The test did not change; the
    code under it did.
  • 53f8345formats: a keyless primitive that would hide the screen is forced
    to paint first
    — adds fn forced_backdrop, ui-forced-backdrop.md, and 76
    lines to ui_layout.rs. fn forced_backdrop is introduced there and never
    removed
    , so the cause is present on every commit from 53f8345 to main.
  • main has since moved to d23f0b3 (12 commits) without touching the test file
    or ui_layout.rs; include_primitives is still false at ui_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.

2157  test the_derived_order_puts_primitives_last_and_that_wipes_screens ... ok
2246  ABSENT — $SYLPHEED_DISC unset; its suites self-skip and still count as passed

This is the failure #16 predicted, now on main. #19's report told the truth 89
lines 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 in 53f8345's
tree. This test has failed on auto/frame-blend-draw-path since
2026-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 author
ran 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:

3 new disc tests; the 13 paint-order tests are green

At 53f8345, ui_forced_backdrop_disc.rs holds exactly 3 tests and
ui_paint_order_disc.rs exactly 13, including the one the message names.
The tripwire is in a third file, ui_prm_primitives_disc.rs — a
the_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_disc fails at this commit —
measured above — and the commit reports no failure.

What each option costs

  • A is not redundant with #23's own tests. 53f8345 added
    tests/ui_forced_backdrop_disc.rs (three tests then, four on main), which
    pin the rule's mechanics (the_rule_reproduces_both_measured_primitives,
    the_loading_screens_backdrop_sorts_first, …). None of the four composes with
    primitives 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.
  • B turns primitives on by default for the viewer and the CLI while their
    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 53f8345 are theirs. Verified from the Pi against the repository and the CI
database: 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.

## Decision needed — this block is enough to decide **`ui_prm_primitives_disc::the_derived_order_puts_primitives_last_and_that_wipes_screens` fails on `main` @ `3977cc9` whenever the corpus is present. CI reports it `ok`.** 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: ```rust assert!(wiped_on > 0, "no build is wiped with primitives on — the ordering problem this flag \ exists for may be solved, in which case turn it on by default"); ``` #23 made that day arrive: full-screen primitives are now forced to paint first, so nothing comes out wiped. **Choose one:** | | change | done looks like | |---|---|---| | **A** | keep `include_primitives` off; invert the assertion to `wiped_on == 0` so it pins the fix, and rename the test — its name asserts the bug | test passes with the corpus present; default unchanged | | **B** | turn `include_primitives` on by default (`ui_layout.rs:869`), as the tripwire's message prescribes; delete the tripwire | default flipped; viewer and CLI draw primitives without `--primitives` | **Weigh this before choosing B.** The commit that tripped the wire also wrote, in the same commit, the opposite of the tripwire's advice: > This does **not** make `include_primitives` safe by default > — `docs/re/structures/ui-prm-primitives.md:158`, `53f8345`, sylph-decoder 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 | commit | | result | |---|---|---| | `4ca0b8e` | #20 merge | pass | | `641be93` | #22 merge | pass | | `3977cc9` | #23 merge | **fail** | Ruled out by experiment: corpus, branch, toolchain. Not re-run on the Pi, which has no corpus. ### Pinned to `53f8345` by measurement `641be93..3977cc9` is **512 commits** — the whole of #23's branch — so the bisect above only reaches the merge. Two further runs on the desktop (corpus present, retail extract, rustc 1.90.0) take it to one commit: | commit | | `ui_prm_primitives_disc` | |---|---|---| | `da46663` | `53f8345^` | 3 passed | | **`53f8345`** | sylph-decoder, 2026-08-29 | **1 failed, with the tripwire message** | It is a single-variable experiment, checked against the repository: * `da46663` is `53f8345`'s **only** parent, so `^` is unambiguous. * The suite is the **same 3 tests** at `da46663`, `53f8345` and `3977cc9`, so "3 passed" is the whole suite and the failure is one of those same three. * **`53f8345` does not touch the test file.** Across all of #23 the file's only change is `chunks_exact(4)` → `as_chunks::<4>().0` from the clippy pass, which yields 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 forced to paint first* — adds `fn forced_backdrop`, `ui-forced-backdrop.md`, and 76 lines to `ui_layout.rs`. `fn forced_backdrop` is introduced there and **never removed**, so the cause is present on every commit from `53f8345` to `main`. * `main` has since moved to `d23f0b3` (12 commits) without touching the test file or `ui_layout.rs`; `include_primitives` is still `false` at `ui_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. ``` 2157 test the_derived_order_puts_primitives_last_and_that_wipes_screens ... ok 2246 ABSENT — $SYLPHEED_DISC unset; its suites self-skip and still count as passed ``` This is the failure #16 predicted, now on `main`. #19's report told the truth 89 lines 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 in `53f8345`'s tree. **This test has failed on `auto/frame-blend-draw-path` since 2026-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 author ran 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: > 3 new disc tests; the 13 paint-order tests are green At `53f8345`, `ui_forced_backdrop_disc.rs` holds exactly **3** tests and `ui_paint_order_disc.rs` exactly **13**, including the one the message names. **The tripwire is in a third file, `ui_prm_primitives_disc.rs`** — a `the_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_disc` fails at this commit — measured above — and the commit reports no failure. ### What each option costs * **A is not redundant with #23's own tests.** `53f8345` added `tests/ui_forced_backdrop_disc.rs` (three tests then, four on `main`), which pin the rule's mechanics (`the_rule_reproduces_both_measured_primitives`, `the_loading_screens_backdrop_sorts_first`, …). None of the four composes with primitives 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. * **B** turns primitives on by default for the viewer and the CLI while their 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 `53f8345` are theirs. Verified from the Pi against the repository and the CI database: 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.
sylph-pi added the kind/defectstate/needs-human labels 2026-09-15 18:24:49 +00:00
Author
Collaborator

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; 53f8345 1 failed with the tripwire message. Checked from the Pi that
this is a clean single-variable result: da46663 is the only parent, the suite is
the same 3 tests on both sides, 53f8345 does not touch the test file, and the
rule 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 its
author 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.rs and
ui_paint_order_disc.rs at 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 test with the corpus present before
state/needs-human — it is its own item, not this one.

The decision block above is unchanged.

**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; `53f8345` 1 failed with the tripwire message. Checked from the Pi that this is a clean single-variable result: `da46663` is the only parent, the suite is the same 3 tests on both sides, `53f8345` does not touch the test file, and the rule 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 its author 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.rs` and `ui_paint_order_disc.rs` at 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 test` with the corpus present before `state/needs-human` — it is its own item, not this one. The decision block above is unchanged.
fabi closed this issue 2026-09-16 17:02:36 +00:00
fabi removed the state/needs-human label 2026-09-17 19:02:22 +00:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: fabi/Sylpheed#38