03da47e550522239efdd45b73844ca5770857ec1
The (a)/(b)/(c) scenarios built their own Span+Scroll pair, so they never exercised the virtualised widget the transcript screen actually needs. Rewritten on top of iris::widget::List, plus two new scenarios from RUST.md's I3: (d) insert-above-anchor (paging older history onto an already-scrolled list) and (e) expand-a-row-holding-its-edge (list.rs's note_tap mechanism). Both come out flat across N = 100/1,000/10,000, as required. Also fixes a real inefficiency this rewrite surfaced: List::place's "generous" measurement bound was derived from viewport_len, so a sibling resizing the list itself (the (c) scenario) changed that bound every tick and defeated draw_inner's same-size fast path, forcing a full redraw of every visible row instead of a move. It is now a fixed module constant (GENEROUS_PADDING), independent of the list's own size -- draws for (c) dropped from 3059 to 684 over 40 ticks. cargo test -p iris (5 List tests still pass), cargo clippy --all-targets and --benches --release, cargo fmt --all -- --check all clean. Numbers recorded in RUST.md's I3 box. Co-Authored-By: Claude Sonnet <noreply@anthropic.com>
Languages
Rust
53%
Kotlin
44.4%
Shell
2.6%