b3b1d47dd6eeb0863bfb8e2b66afa6cc254f94a1
Every client (bench_client, transcript_client, desktop-app) refolded and rebuilt the ~3,200-row widget tree from scratch per SSE event, which is the streaming-phase cost the P0 benchmark gate would otherwise measure against a Compose app that updates one row. iris::widget::List gains replace_back (swap the last row's widget in place, keeping its slot so a pinned list stays pinned) and clear (the full-rebuild fallback); transcript_ui::TranscriptScreen::apply diffs the folded row lists and picks the cheapest update -- unchanged, append, replace-the-last-row, or (rare regroup) a full rebuild, counted. TextEditCtx::set_with_spans lets a row's text and span list land together on a streamed update. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Languages
Rust
53%
Kotlin
44.4%
Shell
2.6%