diff --git a/docs/IRIS_EXTRACTION_HANDOFF.md b/docs/IRIS_EXTRACTION_HANDOFF.md index f10090c..ab15fed 100644 --- a/docs/IRIS_EXTRACTION_HANDOFF.md +++ b/docs/IRIS_EXTRACTION_HANDOFF.md @@ -5,21 +5,8 @@ Not a decisions log; delete it when the extraction is done. ## Where things stand -Canonical `main` is **`32b1038`** (#14, SetSize). Twelve slices are in. One -pull request is open and one branch is pushed but unopened: - -- **#12** `split/12-pointer-routing`, worktree `/home/bob/repos/iris-pr12`, - head `e53ce58`. Reworked twice after review: a layer, not a widget, is what - consumes input. `CursorSenses::consumes` decides only whether a layer stops - the input reaching the one below, and senses on one layer never block each - other. The vocabulary is `position_only`, not "momentary". Five tests; two - fail on `main`. **One question is out to her**: whether to replace - `registered` with a `consumed: &Cell` on `CursorData` that - `should_run` sets, which also removes the double match. -- **#15** `split/15-harness`, worktree `/home/bob/repos/iris-pr15`. `Tasks` - takes an `Arc` instead of an `Arc`, so - `DefaultRsc` builds without one, and `iris::harness` drives a ui with no - surface. Six tests in `tests/harness.rs`. Disjoint from #12. +Canonical `main` is **`43ce8c7`** (#12, pointer routing). Fourteen slices are +in and nothing is open. Check for a review before starting anything, and read the newest `submitted_at` rather than the first result: @@ -94,23 +81,42 @@ Other standing instructions from the owner: ## The next slice -**The headless rig.** `scripts/run-headless.sh`, `headless.conf` and -`rig-input` are still only in ai-app's iris submodule, so every rendering -claim in canonical Iris is verified by hand from another checkout. The harness -half of this is done in `split/15-harness`; the rig is shell and a Wayland -replay binary and transplants nearly as-is, minus the `--phone` and `--dir` -flags' ai-app specifics. +**Widget draw size and measurement** (source commit `6671194`), because it +reaches furthest: `desired_width`/`desired_height` and `SizeCtx` go, a widget +sizes itself during `draw` with `painter.set_size`, and `size_hint` is the +cheap answer for a parent that needs a size without drawing. Every widget's +body changes, so anything written before it is written twice. It also deletes +the separate measurement recursion and its cache. + +It is testable now that `iris::harness` is in: `tests/layout.rs` is where the +acceptance goes. + +Two things to settle with the owner before writing it. The archive's `Widget` +grows five methods — `size_hint`, `is_size_independent`, `requires_exact_region`, +`access_role` and `child_order`; only the first three are sizing, and she +dislikes capability methods on the core trait, so `requires_exact_region` in +particular wants justifying (`Pad` sets it and then clears it when the content +fits, which reads as a workaround). And the archive writes all of it against +`LayoutLen` and `density`, which canonical does not have — recreate it on +today's `Len` and let the dp slice follow, rather than pulling both in at once. Still in the target, roughly in dependency order: +- **`Len`, `LayoutLen` and dp.** The archive splits the type so that `rest` is + unrepresentable where it is meaningless (a padding), and folds a density in + at resolve time. 21 files mention `Len`, so it is wide but shallow. After the + draw-size slice, not before: that one deletes the `desired_*` bodies this + would otherwise have to be threaded through. - **The input restructure** — `src/default/sense.rs` becomes `src/rsc/sense.rs` (308 lines to 2313), plus `core/src/event/controller.rs`, `desktop/input.rs`, `android/input.rs` and `sense_tests.rs`: pointer capture, drag slop and axis, - platform cancellation, mask-aware hit testing, event timestamps. It replaces - the file #12 fixes. The archive's own `consumes` is what #12 now implements, - so that part transplants; `tests/pointer_routing.rs` is the acceptance - criterion for the slice. -- Widget draw size and measurement cleanup (source commit `6671194`). + platform cancellation, mask-aware hit testing, event timestamps. The + archive's own `consumes` is what #12 landed, so that part transplants; + `tests/pointer_routing.rs` is the acceptance criterion. +- **The headless rig.** `scripts/run-headless.sh`, `headless.conf` and + `rig-input` are still only in ai-app's iris submodule, so a rendering claim + in canonical Iris is still verified by hand from another checkout. Small, and + independent of everything above. - Retained span, scrolling and layout placement. - Retained paints, selection, overlays and shared UI runtime state. - Generic desktop/Android framework hosts and reusable example/APK tooling. @@ -275,5 +281,7 @@ argument for doing it next. | #11 | Atlas as an array texture, and the primitive rendering overhaul (`b234497`) | | #13 | Build on wgpu 30 (`00d2230`) | | #14 | Rename the `Sized` widget to `SetSize` (`32b1038`) | +| #15 | Run a ui without a window, and test one (`c8ac669`) | +| #12 | Route pointer input per kind (`43ce8c7`) | URLs are `https://git.arirex.me/iris/iris/pulls/{number}`.