Record #14 merged, #12 reworked, and the harness slice

This commit is contained in:
iris committed 2026-09-13 20:21:11 -04:00
1 parent d0606f46ec
commit f3ba05d446
1 file changed
+32 -23
+32 -23
View File
@@ -5,19 +5,21 @@ Not a decisions log; delete it when the extraction is done.
## Where things stand
Canonical `main` is **`00d2230`** (#13, wgpu 30). Eleven slices are in; two
pull requests are open and both are waiting on the owner, not on me:
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 `71ba372`. A widget takes only the input it answers to, and only where
the cursor is. Self-reviewed under the process below, which found two
defects: consumption decided once a frame rather than per input kind, and a
press firing on a widget the cursor had just left. Six tests across layers;
three of them fail on `main`.
- **#14** `split/14-setsize`, worktree `/home/bob/repos/iris-pr14`, head
`f312db6`. The `Sized` widget becomes `SetSize`, so the prelude stops
shadowing the marker trait and `?Sized` resolves again in any crate that
imports it. `tests/prelude_bounds.rs` fails to compile if that comes back.
head `f3fd941`. Reworked after the owner's review rejected the design: a
layer, not a widget, is what consumes input. `CursorSenses::consumes`
decides only whether a layer stops the input reaching the one below, taking
nothing out of the cursor, and senses on one layer never block each other.
Five tests; two fail on `main`. One question is out to her in the reply:
whether a widget the cursor has left should still be handed a press.
- **`split/15-harness`**, worktree `/home/bob/repos/iris-pr15`, head
`d5efdd2`, pushed with no pull request opened. `Tasks` takes an
`Arc<dyn WakeTaskQueue>` instead of an `Arc<Window>`, so `DefaultRsc` builds
without one, and `iris::harness` drives a ui with no surface. Six tests in
`tests/harness.rs`. Open it when #12 clears.
Check for a review before starting anything, and read the newest
`submitted_at` rather than the first result:
@@ -71,23 +73,29 @@ Other standing instructions from the owner:
- Pull Iris out even if the Rust application switchover is not accepted. No
app, session, transcript, setup or server concepts in Iris; the dependency
runs one way from `app/` to Iris.
- **Small, coherent PRs.** The original extraction PR was too large to review.
A slice may be redone rather than transplanted, and need not remove every old
feature. Independent PRs may be open at once so work continues during review.
- **Small, coherent PRs, one at a time.** The original extraction PR was too
large to review. A slice may be redone rather than transplanted, and need not
remove every old feature. Do not open several at once to stay busy during a
review: on 2026-09-13 the owner asked for the work to go serially, most
fundamental first, so that code is written once against the version of the
framework that will actually exist.
- Do not recreate an `ai` branch in canonical Iris; the fork is the boundary.
- **Never rewrite a pushed branch.** Follow review with additive commits, and
merge `upstream/main` in rather than rebasing when a branch falls behind.
- Respond to each review finding with a fix or a concise explanation. Do not
add a ceremonial comment when the changed code already answers it.
- **A test has to guard something that could break again.** The owner deleted
#14's test as pointless: the rename it guarded cannot regress. When a fix is
structural, the structure is the test.
## The next slice
**The headless rig and the test harness.** `scripts/run-headless.sh`,
`headless.conf`, `rig-input` and `iris::harness` live in ai-app's iris
submodule and not in canonical Iris. Until they are extracted, Iris can only
be tested by what runs without a window, and every rendering claim is verified
by hand from another checkout. Extracting them is what lets later slices
arrive with tests instead of screenshots. Nothing else is claimed.
**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.
Still in the target, roughly in dependency order:
@@ -95,9 +103,9 @@ Still in the target, roughly in dependency order:
(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, and **the archived copy carries the same per-frame
consumption defect #12 removes** — extracting it as-is brings the bug back,
so `tests/pointer_routing.rs` is the acceptance criterion for that slice.
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`).
- Retained span, scrolling and layout placement.
- Retained paints, selection, overlays and shared UI runtime state.
@@ -262,5 +270,6 @@ argument for doing it next.
| #10 | Text layout and rendering on Parley (`0f6a28b`) |
| #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`) |
URLs are `https://git.arirex.me/iris/iris/pulls/{number}`.