From 9717d1c4b05f55aeecedaed8a327794e75219055 Mon Sep 17 00:00:00 2001 From: iris <2+iris@noreply.localhost> Date: Sun, 6 Sep 2026 11:37:32 -0400 Subject: [PATCH] docs/RUST.md: 2026-09-06 orchestrator plan for the P0 defects and the P1 prerequisites --- docs/RUST.md | 53 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) diff --git a/docs/RUST.md b/docs/RUST.md index eed7ead..143f39f 100644 --- a/docs/RUST.md +++ b/docs/RUST.md @@ -34,6 +34,59 @@ the emulator, not by Mesa" and "the present mode was not the cause" are worth as much as the successes, because they are what stops the next session spending an afternoon on them again. +## Where things stand (2026-09-06, orchestrator plan) + +Written by the design agent on picking the branch up after a `/clear`, so +the next session can resume from here. P0 is delivered and Iris's phone +report v2 is in (`docs/bench/iris-phone-v2-2026-09-06.md`); **P1 stays +gated on her verdict**, so this pass works the P0 defects and the pure +prerequisites in this order. Each item is ticked here by the agent that +closes it. + +- [ ] **Merge the `DragGesture` work** left complete but unmerged in the + worktree branch `worktree-agent-a754368325fa06839` (commit + `e12c708`, 2026-09-06 02:10, two minutes after the last merge to + `rustify`; already contains `rustify` at `543f6d9`). It targets two + of the four bench-v2 defects: finger flings dropped by per-widget + hit testing (pointer capture + `CursorSense::Drop`), and IME insets + never redelivered (`MainActivity.java` edge-to-edge). Before + merging: build, clippy, tests; then on the emulator confirm the + three things `20b1225` (tap-vs-swipe focus) and the phone asked for + still hold together — a swipe over the composer does not summon + the keyboard, a tap does, a finger fling on the list keeps moving + after the finger lifts, and `on_insets_changed` now fires on an + IME toggle. Then remove the worktree. +- [ ] **Fix `docs/REVIEW-2026-09-06.md`** (after the merge, since the + review's finding 1 is in `selection.rs`, which the merge rewrites). + Finding 1 is a real crash — `TranscriptScreen::apply`'s `Rebuild` + arm leaves `Selection` holding `WeakWidget`s to freed rows, and the + next tap anywhere panics. Findings 2–5 are `debug_assert!`s on + invariants, 8 and 10 are the missing tests. Commit the review file + with the fixes. +- [ ] **Stale primitives and invisible composer text** — the header drawn + twice after a keyboard resize, the `Compacted:` row drawn twice on + Iris's phone, and typed text never appearing (P0 box item 2). All + three sit on the `redraw_updates` targeted-redraw path and may be + one bug; the P0 box says the next step is instrumentation inside + `Span::draw`/`draw_inner` showing where each placement's + primitives actually land on the frame it goes wrong. + `list.rs`'s new `replacing_the_last_row_many_times_does_not_leak_ + primitives` test already pins the widget arena as *not* the leak. +- [ ] **Composer touch-drag scroll** for overflowed text — now that + dragging is a default-input `DragGesture`, `Scroll` should get its + touch pan from the same mechanism `List` uses, not a copy. +- [ ] **Streaming re-layout** (IRIS_TODO.md's last section) — after the + above, since they make the stream phase unrepresentative today. +- [ ] **client-core prerequisites for P1, in parallel** (pure Rust, + disjoint from `iris/`): `TranscriptSource`'s cache-vs-server + stitching and `joinPages`/`healSplitMessage`/`adoptRun` page-boundary + healing, per `CLIENT_CORE.md`. Ported with the Kotlin tests as the + spec. Cheap to have ready if P0 passes, and no rendering risk if + it does not. +- **Then**: redeliver `~/host/bench/iris-bench-arm64.apk` for Iris with + its README saying what changed, and record any choice she should see in + `DECISIONS.md`. + ## Where things stand (2026-09-05) - **Streaming no longer costs a full rebuild** (P0's box, "Streaming no