Files
ai-app/docs/HANDOFF.md
T

4.1 KiB

Handoff

Where the work in flight stands. The durable layout design and the measurement method are in docs/LAYOUT.md; what the review of #19 found is in docs/LAYOUT_LOG.md.

The Iris layout repair is submitted

Iris PR #19 (layout/one-ask) replaces closed #18. The current tip is 84dad21: add6774 fixes collapsed-share placement, retained mask ownership, and a redraw-on-reparent defect; 84dad21 removes repeated work in the test harness. docs/LAYOUT_LOG.md records the review and its regression coverage. The core design remains sound; naming and round-to-nearest are unchanged.

There is one Iris Git repository, stored with this checkout's submodule:

  • /home/bob/repos/iris is the active layout/one-ask worktree.
  • /home/bob/repos/ai-app-2/iris stays on main at the app's 32f6ad8 pin. It shares Git storage with the active worktree, rather than being a second development repository. Keep it until the app's integration is ready.
  • The standalone iris-layout-experiment clone is retired. Superseded fork branches are removed; unique experiment tips and the #18 measurement 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, 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. The 400-seed depth-5 shrinker, 1,000-seed depth-6 run, and 2,000-seed breadth scan all pass. The cold dump covers 34,488 boxes; 650 change because of the collapsed-share correction. With only that correction withheld, the remaining fixes reproduce the baseline dump exactly. The headless tabs example and the exact collapsed-share repro were rendered and inspected; the latter places the blue tail at x=220..400. The machine's Vulkan device is the RX 7900 XT through RADV native context.

What is next, in order

  1. Bryan's review of #19. Fixes are themselves unreviewed code: repeat pre-submit-review over each round's changes, and re-run the three fuzzers and dump diff for edits to Span, Painter, or render_state. The ordinary oracle does not replace absolute geometry and retained-primitive expectations.
  2. Integrate the app's Iris capabilities before changing its pin. 32f6ad8 has 45 commits not reachable from the review branch; shared UI ownership, richer masks, Android support, and app-side performance work must survive the integration. Then migrate SizeRule beside widgets, alignment properties, rest to leftover, and removal of OrthoSize.
  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 derivation, the form to use and what to re-check are in docs/LAYOUT.md under "Rendering the grid (pending)".

Smaller layout items, none urgent

  • Nested spans pass leftover weight up, so three leftover children in one inner span beside one in another get three quarters to one quarter. No other layout system does that; confirm it is wanted.
  • A span can overflow itself without bound, so boxes of negative length reach children and nothing states what a widget may assume about one.
  • Fixed::div by zero answers MIN/MAX while ratio answers ZERO; both are caller bugs under debug_assert, but the fallbacks differ.
  • The comment on the local == UiRegion::FULL shortcut in widget_at says composing through FULL "is not quite the identity in f32"; on the grid it is exact and the shortcut is performance only.
  • docs/LAYOUT.md §4, §5 and the density section name Painter::place, SetSize, desired_width, apply_rest, Len::dp, Aligned and MaxSize, none of which exist. Do not restore 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.
  • Scroll taking a direction rather than one axis.

Other product work is in docs/PLAN.md and the focused documents it links. Do not mix it into the Iris layout branch.