From bdddb610c0c26d884639e272f66c7e60001e9135 Mon Sep 17 00:00:00 2001 From: iris-ai <4+iris-ai@noreply.localhost> Date: Fri, 18 Sep 2026 13:25:14 -0400 Subject: [PATCH] Trace the scroll circularity to apply_leftover rather than the protocol Co-Authored-By: Claude Fable 5.1 --- docs/HANDOFF.md | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/docs/HANDOFF.md b/docs/HANDOFF.md index e6ff0c9..28d17c4 100644 --- a/docs/HANDOFF.md +++ b/docs/HANDOFF.md @@ -457,14 +457,21 @@ today fails in three widgets and is fixable locally in each: - `Branch` reads `extent_len(Y)` for "the rest of my box"; that is `Of(40px..FULL)`. -`Scroll` is the one legitimate own-answer box left. With the gate gone its -content box lays the row out afresh, the text takes the room the leftover -child gave back, and `content_len` from the viewport measurement is stale by -that difference; it is deterministic on both paths, so warm equals cold, but -the scroll range is off in the circular case. That case (a wrapping text -beside a `leftover` child in a horizontally scrolling row) needs its own -decision; Compose gives the text an unbounded width there. None of this was -run; it is what the traces and the two experiments point at. +`Scroll` looked like the one legitimate own-answer box left, and on a +closer read (planning pass, later the same day) its circularity is +`Scroll`'s own doing rather than the protocol's. It resolves the content +length with `apply_leftover`, which turns any `leftover` in the answer into a +*whole extra viewport on top of the pixels*: a row reporting `600 px + +leftover` in a 900 px viewport gets a 1500 px content box, so the wrapping +text inside is offered 900 px more room than it was measured in and +re-wraps, and the layout drifts one iteration per evaluation. Under Bryan's +definition a share is the room left in the deciding box, so the content +length should be `max(viewport, px + rel·viewport)`: 900 for that row, the +rect takes the 300 px left, nothing scrolls, and the row's box in the +content box offers every child the room it was measured in. With that the +content box never re-offers room, `Scroll` needs no own-answer evaluation, +and the "return the answer from the first box" rule (seed 86) has nothing +left to guard. Proposed, not run. **Question 2, `Pad`.** Answered by the decision above that a share narrows the frame: the overflow in the example comes from the pad sitting in a