Record the leftover minimum and the images in the trees

Two rounds past the ninth sweep: `b295c8b` reads a share under a parent that
divides nothing as a minimum, which is what Bryan said it means and what a span
already did, sharing one comparison with it; `2dba90b` grows images in the
generated trees, which is the only widget here whose hint is a length in pixels
and so the only one that reaches the case.

The dump baseline is 34,571 boxes now that the trees carry images, and a seed no
longer names the tree it used to -- the log says what that costs and where those
defects live instead.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
iris-aiandClaude Opus 5 committed 2026-09-20 04:51:13 -04:00
1 parent da6b003a1e
commit 6a92857079
2 files changed
+68 -21

No files matched your search

+17 -11
View File
@@ -6,8 +6,8 @@ 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 `c2b8bf8`,
and past the reviewed `cadfba0` it is eleven rounds, each described in
**Iris PR #19** (`layout/one-ask`) replaces closed #18. The tip is `2dba90b`,
and past the reviewed `cadfba0` it is twelve rounds, each described in
`docs/LAYOUT_LOG.md`:
- **The repair**, `add6774` and `84dad21` -- collapsed-share placement,
@@ -50,6 +50,11 @@ and past the reviewed `cadfba0` it is eleven rounds, each described in
call sites, the helper the eighth sweep shared being unable to see the
defect it had just fixed, two bare arrays where the framework names the
pair, forty-five lines nothing references, and one word for two things.
- **A leftover as a minimum, and images in the trees**, `b295c8b` and
`2dba90b` -- a share under a parent that divides nothing losing the
overflow its pixels asked for, said as the place the parent gives and
sharing one comparison with the span; and `Image` grown in the generated
trees, which is the only widget here whose hint is a length in pixels.
The settled design of the vocabulary rounds is in `docs/LAYOUT.md` under
"Three names, and the one argument that says them". Bryan settled the API
@@ -106,9 +111,9 @@ the name it is reachable by.
**Always**, because they cost nothing: format, workspace clippy under
`-D warnings` with and without `layout-diagnostics`, the workspace tests, and
the **cold dump**. `layout_dump` over 400 depth-5 trees is **34,488** boxes
-- counted again on 2026-09-20, the fourth through eighth sweeps having all
repeated 34,492, which is a `wc -l` of the whole run rather than of its box
lines -- and it is the only thing that catches two same-typed values being
-- **34,571 since `2dba90b` grew images in the trees**; counted again on
2026-09-20, the fourth through eighth sweeps having all repeated 34,492, which
is a `wc -l` of the whole run rather than of its box lines -- and it is the only thing that catches two same-typed values being
swapped, which is the failure mode of a rename or a move. Count the lines
that are a box (`grep -cE '^[0-9]+ [0-9]+ '`), not the output. The repair moved 650 of those
boxes, all from the collapsed-share correction; every commit since has been
@@ -178,11 +183,10 @@ glyphs do not follow a shortened entry.
- A span can overflow itself without bound, so boxes of negative length reach
children and nothing states what a widget may assume about one.
- A `leftover` under a parent that does not divide is a minimum size --
`max(box, px + rel*box)` (Bryan, 2026-09-20). A span does that; the
non-dividing path drops the overflow where the fixed part is longer than
the box. Measured in `docs/LAYOUT_LOG.md` under the ninth sweep, with the
window contract a fix needs. Nothing here mixes the two, so nothing is
wrong on screen.
`max(box, px + rel*box)` (Bryan, 2026-09-20), which is a `SizeRule::Min` of
`rel(1.0)` and shares `Painter::longer_than` with the span. Done in
`b295c8b` for a widget its parent asks; `root_layout` still reads the old
way, for which see `docs/LAYOUT_LOG.md`.
- `Fixed::div` by zero answers `MIN`/`MAX` while `ratio` answers `ZERO`; both
are caller bugs under `debug_assert`, but the fallbacks differ.
- `docs/LAYOUT.md` §4, §5 and the density section name `Painter::place`,
@@ -191,7 +195,9 @@ glyphs do not follow a shortened entry.
`OnResize::Translate` or `OrthoSize`.
- `LazySpan`, then `SizeRule::{Min, Max, Clamp}`. A cap may not contain
`leftover`; whether `Max` narrows the child's drawing box is a product
decision.
decision. `Min` is `Painter::longer_than` again -- a `leftover` where
nothing divides it is already a `Min` of `rel(1.0)` -- so it belongs on
that path rather than beside it.
- `Scroll` taking a direction rather than one axis.
Other product work is in `docs/PLAN.md` and the focused documents it links.