From e430880cdef060262e68060147eab531493b5233 Mon Sep 17 00:00:00 2001 From: iris <2+iris@noreply.localhost> Date: Mon, 7 Sep 2026 12:35:20 -0400 Subject: [PATCH] docs: phone report 2026-09-07, rows at the transcript's top edge culled early or drawn through the header Co-Authored-By: Claude Fable 5.1 --- docs/IRIS_TODO.md | 24 ++++++++++++++++++++++++ docs/RUST.md | 3 +++ 2 files changed, 27 insertions(+) diff --git a/docs/IRIS_TODO.md b/docs/IRIS_TODO.md index 154bd24..47b69da 100644 --- a/docs/IRIS_TODO.md +++ b/docs/IRIS_TODO.md @@ -898,3 +898,27 @@ do not duplicate it there. p50 dropping below Compose's on the phone. Do this after the four bench v2 defects (stale primitives, finger fling, decay curve, IME show) are closed, since they are what make the run unrepresentative today. + +## From the phone, 2026-09-07 (build from ed04d4c) + +- [ ] **"Some transcript blocks will be hidden until I uncover enough of + them."** Two screenshots of the bench app's transcript at the top + edge, both wrong in opposite directions: in one, rows scrolled above + the viewport are still drawn and bleed *through* the header bar + (`version = "0.1.0"` and a paragraph visible behind "Run benchmark / + Copy report / Diagnostics"), so the list's mask is not clipping at + the header's bottom edge; in the other, scrolled a little further, + the row that straddles the top edge is not drawn at all -- black from + the header down to "You", where the previous shot showed a paragraph + -- so a row is culled as soon as its *top* leaves the viewport rather + than when its *bottom* does. Suspects: the list's visible-range test + (`iris/src/widget/list.rs`) comparing a row's top against the + viewport top; the mask region for the transcript set from the + window rather than from the area under the header; and the two-phase + provisional/real draw noted in `03c6be8`'s header-duplicate + investigation, which was never root-caused and has the same shape. + Reproduce at layer 1 of the test rig: a headless screen with a row + straddling the top edge must place that row, and a primitive above + the header's bottom must be masked. Fix both with one rule: a row is + drawn if any part of it intersects the viewport, and the viewport is + the list's own region. diff --git a/docs/RUST.md b/docs/RUST.md index 8c09760..c193372 100644 --- a/docs/RUST.md +++ b/docs/RUST.md @@ -51,6 +51,9 @@ closes it. - [ ] Test rig, layers 1 and 2 ("Three test layers" below). Running. - [ ] Fling parity with Compose, and the phone's keyboard push-up, with insets shown in the diagnostics overlay. Running, in a worktree. +- [ ] Rows at the transcript's top edge: culled too early in one state, + drawn through the header in the other (docs/IRIS_TODO.md, 2026-09-07). + First after the rig lands, using its layer-1 harness. - [ ] Phone logging through Dev Updater (Iris has no logcat; see docs/TODO.md and the memory note): research how Dev Updater shows an app's runtime log, design the smallest route (the app keeps its own