Record #16, the position chain, and why the hint shortcut is not the fix

This commit is contained in:
iris committed 2026-09-13 23:05:47 -04:00
1 parent e04f873453
commit 0f24d3ac23
1 file changed
+21 -1
+21 -1
View File
@@ -6,7 +6,12 @@ Not a decisions log; delete it when the extraction is done.
## Where things stand ## Where things stand
Canonical `main` is **`43ce8c7`** (#12, pointer routing). Fourteen slices are Canonical `main` is **`43ce8c7`** (#12, pointer routing). Fourteen slices are
in and nothing is open. in.
- **#16** `split/16-draw-size`, worktree `/home/bob/repos/iris-pr16`, head
`f192f75`. A widget sizes itself while drawing; `SizeCtx`, the `desired_*`
methods and the size cache are gone, and `size_dependence(axis)` drives the
retained path. `tabs`, `view` and `minimal` render byte-identical to `main`.
Check for a review before starting anything, and read the newest Check for a review before starting anything, and read the newest
`submitted_at` rather than the first result: `submitted_at` rather than the first result:
@@ -102,6 +107,21 @@ today's `Len` and let the dp slice follow, rather than pulling both in at once.
Still in the target, roughly in dependency order: Still in the target, roughly in dependency order:
- **The position chain** (LAYOUT.md §2): `UiData::move_offsets`, per-primitive
slot ids and a bounded chain walk in WGSL, so moving a subtree writes one
slot instead of every descendant's primitives. Agreed to come directly after
#16.
- **Built-in alignment, and possibly size**, directly after the position
chain. A child of a span is handed the full extent on the ortho axis, so
`.width(rel(0.5))` inside a `Dir::DOWN` span changes what the child reports
and not the box it gets. **Do not "fix" this by reading the child's ortho
`size_hint`**: a `Pad` between the `SetSize` and the span has no hint of its
own, so the declared width silently goes back to filling. It works only when
nothing is in the way, which is the shape of bug the review pass is for.
Alignment has to belong to the widget rather than be discovered through
whatever happens to sit on top of it. Size is the harder half: a declared
size beside `set_size` is two sources of truth for one thing, so settle what
each means before building it.
- **`Len`, `LayoutLen` and dp.** The archive splits the type so that `rest` is - **`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 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 at resolve time. 21 files mention `Len`, so it is wide but shallow. After the