Record the region/placement sweep and prune the handoff

The `extent` rename landed as iris `5642f20`; the handoff had not listed it
as pending at all, and its item 2 named renames that are already upstream.
Say which vocabulary the app has still to absorb, drop the retired-clone
and archive chronicle, and strike the three clarity findings now done.
This commit is contained in:
iris-ai committed 2026-09-19 14:51:07 -04:00
1 parent f3c9ab8106
commit 90400f50ac
3 files changed
+41 -42

No files matched your search

+36 -29
View File
@@ -6,33 +6,38 @@ in `docs/LAYOUT_LOG.md`.
## The Iris layout repair is submitted ## The Iris layout repair is submitted
**Iris PR #19** (`layout/one-ask`) replaces closed #18. The current tip is **Iris PR #19** (`layout/one-ask`) replaces closed #18. The tip is `5642f20`:
`84dad21`: `add6774` fixes collapsed-share placement, retained mask ownership, `add6774` fixes collapsed-share placement, retained mask ownership and a
and a redraw-on-reparent defect; `84dad21` removes repeated work in the test redraw-on-reparent defect, `84dad21` removes repeated work in the test
harness. `docs/LAYOUT_LOG.md` records the review and its regression coverage. harness, and `5642f20` is the naming sweep below. The core design remains
The core design remains sound; naming and round-to-nearest are unchanged. sound; round-to-nearest is still unchanged.
There is one Iris Git repository, stored with this checkout's submodule: Two checkouts share one Git storage. `/home/bob/repos/iris` is the active
`layout/one-ask` worktree; `ai-app-2/iris` stays on `main` at the app's
`32f6ad8` pin, and is kept until the app's integration is ready.
- `/home/bob/repos/iris` is the active `layout/one-ask` worktree. Each round was checked with format, workspace clippy under `-D warnings`, the
- `/home/bob/repos/ai-app-2/iris` stays on `main` at the app's `32f6ad8` pin. workspace tests with and without `layout-diagnostics`, the release fast
It shares Git storage with the active worktree, rather than being a second oracle, and the three prescribed seed scans — 400 at depth 5, 1,000 at depth
development repository. Keep it until the app's integration is ready. 6, 2,000 at depth 4. The cold dump covers 34,488 boxes: the fixes moved 650 of
- The standalone `iris-layout-experiment` clone is retired. Superseded fork them, all from the collapsed-share correction, and the naming sweep moved
branches are removed; unique experiment tips and the #18 measurement none.
baseline are preserved under `archive/2026-09-19/` tags. A complete bundle
is also under `~/.local/state/iris/archive/`.
Verification of the fixes: format and workspace clippy with `-D warnings`, ## The naming sweep is done
workspace tests with and without `layout-diagnostics` (128 suite tests,
20 core tests, 21 with diagnostics, and 11 generated tests), and the release fast oracle pass. `5642f20` finished the rename decided on 2026-09-17, which `frame`'s return as
The 400-seed depth-5 shrinker, 1,000-seed depth-6 run, and 2,000-seed a length had left half-applied. The box a parent asks a widget in is the
breadth scan all pass. The cold dump covers 34,488 boxes; 650 change because **region**, and where its drawing ends up is its **placement**:
of the collapsed-share correction. With only that correction withheld,
the remaining fixes reproduce the baseline dump exactly. - `Painter::extent``region`, and its `extent_len()``region_len()`.
The headless `tabs` example and the exact collapsed-share repro were rendered - `ActiveData::{part, extent}``{region, placement}`, and with them
and inspected; the latter places the blue tail at x=220..400. The machine's `DrawInfo::part` and `Placing::extent`.
Vulkan device is the RX 7900 XT through RADV native context. - `LayoutHolds::{extent, extent_len}``{region, region_len}`, and
`Counter::OutsideExtent``OutsideRegion`.
- `placed_extent``placement`, `frame_and_extent``frame_and_region`,
`part_of``region_of`.
- `Painter`'s `window_own`, `extent_own`, `frame_own_len` and `extent_len`
become the one `own: LayoutHolds` they were assembled into.
## What is next, in order ## What is next, in order
@@ -44,8 +49,10 @@ Vulkan device is the RX 7900 XT through RADV native context.
2. **Integrate the app's Iris capabilities before changing its pin.** 2. **Integrate the app's Iris capabilities before changing its pin.**
`32f6ad8` has 45 commits not reachable from the review branch; shared UI `32f6ad8` has 45 commits not reachable from the review branch; shared UI
ownership, richer masks, Android support, and app-side performance work ownership, richer masks, Android support, and app-side performance work
must survive the integration. Then migrate `SizeRule` beside widgets, must survive the integration. The app then absorbs the branch's
alignment properties, `rest` to `leftover`, and removal of `OrthoSize`. vocabulary, all of it already upstream: `rest` `leftover`, `SizeRule`
beside widgets, alignment properties, the removal of `OrthoSize`, and the
region/placement names above.
3. **Round-to-nearest**, CPU and shader together as one verified change. 3. **Round-to-nearest**, CPU and shader together as one verified change.
Bryan approved it on 2026-09-17 and neither half has landed; the Bryan approved it on 2026-09-17 and neither half has landed; the
derivation, the form to use and what to re-check are in `docs/LAYOUT.md` derivation, the form to use and what to re-check are in `docs/LAYOUT.md`
@@ -64,9 +71,9 @@ Vulkan device is the RX 7900 XT through RADV native context.
composing through `FULL` "is not quite the identity in f32"; on the grid it composing through `FULL` "is not quite the identity in f32"; on the grid it
is exact and the shortcut is performance only. is exact and the shortcut is performance only.
- `docs/LAYOUT.md` §4, §5 and the density section name `Painter::place`, - `docs/LAYOUT.md` §4, §5 and the density section name `Painter::place`,
`SetSize`, `desired_width`, `apply_rest`, `Len::dp`, `Aligned` and `Painter::region()`, `SetSize`, `desired_width`, `apply_rest`, `Len::dp`,
`MaxSize`, none of which exist. Do not restore `OnResize::Translate` or `Aligned` and `MaxSize`, none of which exist. Do not restore
`OrthoSize`. `OnResize::Translate` or `OrthoSize`.
- `LazySpan`, then `SizeRule::{Min, Max, Clamp}`. A cap may not contain - `LazySpan`, then `SizeRule::{Min, Max, Clamp}`. A cap may not contain
`leftover`; whether `Max` narrows the child's drawing box is a product `leftover`; whether `Max` narrows the child's drawing box is a product
decision. decision.
+1 -1
View File
@@ -387,7 +387,7 @@ can name -- a division of two lengths, which a `rel + px` length cannot hold.
A widget's own declaration *is* a fraction, of whichever of those reached it, A widget's own declaration *is* a fraction, of whichever of those reached it,
and it is the only one of them that also places the box inside the part. and it is the only one of them that also places the box inside the part.
Validity has a pin for each: `LayoutHolds::extent_len` for the box's symbolic Validity has a pin for each: `LayoutHolds::region_len` for the box's symbolic
length and `frame_len` for the frame's. A range of window pixels cannot say length and `frame_len` for the frame's. A range of window pixels cannot say
which frame an answer is a fraction of, since two frames are different which frame an answer is a fraction of, since two frames are different
lengths at the same window size. Resolving any of these lengths in pixels is lengths at the same window size. Resolving any of these lengths in pixels is
+4 -12
View File
@@ -136,18 +136,10 @@ The descriptions above preserve the original failure at `cadfba0`.
### Clarity, in the order worth doing ### Clarity, in the order worth doing
- **`extent` is back.** `core/src/ui` says `extent` 138 times, its comments The first three -- the unswept `extent`, the two same-typed boxes on
say "box" 153 times, and the types are all `UiRegion`. Bryan renamed this `ActiveData`, and `Painter`'s four holds accumulators -- were done in
to `placement` on 2026-09-17; `frame` survived with its new meaning as a `5642f20`. What is left:
length, `extent` did not. One sweep over `Painter::extent`,
`ActiveData::{extent, part}`, `placed_extent`, `frame_and_extent` and
`LayoutHolds::{extent, extent_len}`.
- `ActiveData::part` and `::extent` are both boxes told apart only by
prose, and `draw_at` writes `part: extent` from one value. `asked_in` and
`drawn_in` would say it in the names.
- `Painter` accumulates a `LayoutHolds` under four names that do not match
the four fields they become (`window_own`, `extent_own`, `frame_own_len`,
`extent_len`). One `own: LayoutHolds` field deletes the mapping.
- `draw_inner` returns `(Size, LayoutHolds, LayoutHolds)`, two same-typed - `draw_inner` returns `(Size, LayoutHolds, LayoutHolds)`, two same-typed
values ordered by convention. A named pair makes the swap unwriteable. values ordered by convention. A named pair makes the swap unwriteable.
- `DrawInfo::px` is computed at all four construction sites and read only by - `DrawInfo::px` is computed at all four construction sites and read only by