diff --git a/docs/HANDOFF.md b/docs/HANDOFF.md index 27ab7a0..b40f613 100644 --- a/docs/HANDOFF.md +++ b/docs/HANDOFF.md @@ -6,7 +6,7 @@ found is in `docs/LAYOUT_LOG.md`. ## The Iris layout repair is submitted -**Iris PR #19** (`layout/one-ask`) replaces closed #18. The tip is `7e2b4cd`, +**Iris PR #19** (`layout/one-ask`) replaces closed #18. The tip is `1ebd4d3`, and past the reviewed `cadfba0` it is five rounds, each described in `docs/LAYOUT_LOG.md`: @@ -16,9 +16,9 @@ and past the reviewed `cadfba0` it is five rounds, each described in - **The vocabulary and the container API**, `5642f20` through `58ce74d`. - **Naming**, `55df32a` through `40b89c1`. - **A sweep over the logic those names exposed**, `8d2b7a5` and `6c84b6f`. -- **A clarity sweep**, `3da1c71` and `7e2b4cd` -- naming the pairs layout - returns, `Span::slot`, and a diagnostic that printed the rel base while - calling it the box. +- **A clarity sweep**, `3da1c71` through `1ebd4d3` -- naming the pairs layout + returns, `Span::slot`, a diagnostic that printed the rel base while calling + it the box, and `in_parent` matching a place's own cases. The settled design of the last three is in `docs/LAYOUT.md` under "Three names, and the one argument that says them". Bryan settled the API over diff --git a/docs/LAYOUT_LOG.md b/docs/LAYOUT_LOG.md index 5221090..0b24b01 100644 --- a/docs/LAYOUT_LOG.md +++ b/docs/LAYOUT_LOG.md @@ -213,19 +213,24 @@ moved a box, and all three seed scans passed on `7e2b4cd` (400 at depth 5 in `move_idx != parent_move`; `Axis::BOTH` replaces `AXES` in three modules; `Len::rel_min`, `rel_max` and the unused `select_len` are gone. +`1ebd4d3` then closed the `PlaceSpan` item. `PlaceSpan` and `RelBase` are +`pub` and `ui/mod.rs` re-exports `place` by name rather than by glob, the way +it already did for `painter`, so the six `pub(crate)` accessors +(`stated_rel_base`, `narrows_rel_base`, `within_span`, `is_sized`, +`does_fill`, `with_rel_base`) are gone and `in_parent` matches +`(at.span, declared)`. `!at.is_sized()` was dead: `PlaceSpan::Sized` is built +only by `Len::as_desc`, which sets `RelBase::Len(self)` in the same literal, +and deleting `with_rel_base` removes the only writer that could have +separated them. Visibility here is plain `pub` plus a named re-export +wherever the path can be hidden (Bryan, 2026-09-19); `pub(super)` is for +inherent methods on types the crate exports, where it cannot. + What is left, none of it urgent: - `widget_at` does three linear scans per child (`children.contains`, `under.iter_mut().find`, `depend_on`), so a span of *n* children is O(n^2) per draw. Not a problem at today's sizes; it is worth knowing before a long transcript list lands on it. -- `PlaceSpan` is private to `place.rs`, so `Painter::in_parent` asks five - yes/no questions (`stated_rel_base`, `is_sized`, `within_span`, - `narrows_rel_base`, `does_fill`) about a three-case enum instead of - matching it. Two of those questions are redundant with one another -- - `Sized` always states a rel base -- but only because nothing constructs - a `Sized` without one, which nothing states. `pub(crate)` on the enum - would let `in_parent` read as its three cases. - `DrawInfo` and `ActiveData` both carry `placed` and `asked`, two `PlaceDesc` fields distinguished only by position in every literal. They are genuinely different and documented, but the names are past