Commit Graph
313 Commits
Author SHA1 Message Date
iris-aiandClaude Opus 5 d12cbcd499 Record the logic sweep and point the handoff at 6c84b6f
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-19 22:25:45 -04:00
iris-aiandClaude Opus 5 424f655d60 Say on_axis in the docs, and point the handoff at the tip
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-19 21:48:37 -04:00
iris-aiandClaude Opus 5 721a8fc50d Record the naming round in the handoff and LAYOUT.md
Iris PR #19's tip is 2807a92. LAYOUT.md's settled-design section named the
retired `PlaceDescAxis::within`/`shifted`/`sized` constructors and the
`axis`/`axis_mut` accessors; it now says the `_desc` chaining rule, the
`axis` lift, and that every pair is a struct of two per-axis values read
with `[axis]`.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-19 21:25:35 -04:00
iris-ai 61a2f601bb Move the settled layout vocabulary into LAYOUT.md and prune the handoff
The handoff had grown a chronicle of what each commit renamed. What is
durable about it -- the three names, and the one argument a container uses
to say them -- is design, so it goes to `docs/LAYOUT.md` as its own section
and the handoff keeps a pointer plus where the branch stands.

`docs/PLAN.md`'s "frame/extent experiment" entry described a prototype in
retired words; it becomes a pointer, and the one finding it held that was
not recorded elsewhere -- why the extent-relative child-frame trial was
removed -- joins the failed hypotheses in `docs/LAYOUT.md`.
2026-09-19 18:06:28 -04:00
iris-ai 265ce6f829 Record the PlaceDesc argument in the handoff 2026-09-19 17:59:40 -04:00
iris-ai 56437dc90f Point the handoff at the current tip 2026-09-19 17:16:48 -04:00
iris-ai 1f9eea879f Record narrow_rel_base and the None argument 2026-09-19 16:55:57 -04:00
iris-ai 93a6830fcd Record rel_base and the container API, and sweep LAYOUT.md
`frame` is gone from the layout vocabulary in `docs/LAYOUT.md` too, since
leaving the design document in the old words defeats the rename; the
rendered-frame sense of the word is untouched. The `local == UiRegion::FULL`
item is dropped from the handoff: that comment was #18's and is not on the
review branch.
2026-09-19 16:35:02 -04:00
iris-ai 90400f50ac Record the region/placement sweep and prune the handoff
The `extent` rename landed as iris `5642f20`; the handoff had not listed it
as pending at all, and its item 2 named renames that are already upstream.
Say which vocabulary the app has still to absorb, drop the retired-clone
and archive chronicle, and strike the three clarity findings now done.
2026-09-19 14:51:07 -04:00
iris-ai f3c9ab8106 Record Iris review fixes, validation, and consolidated checkout 2026-09-19 13:53:12 -04:00
iris-aiandClaude Opus 5 67584cedda Record what the review of Iris #19 found
Two live defects at cadfba0, each with the repro that showed it and the
fix that answered it: a span places the slot after a collapsed leftover
child a gap early and a gap too long, and a child reused under a parent
that redrew keeps the mask index that parent replaced, so its drawing is
clipped where the subtree used to be. Neither is covered by a test, which
is why the suite is green over both.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-19 07:20:59 -04:00
iris-ai 3ecd676bcf Land the layout repair's findings and retire the working log
`docs/LAYOUT_LOG.md` existed until the one-ask protocol landed. It has, as
Iris PR #19 replacing #18, so what has to outlive the log moves into
`docs/LAYOUT.md`: the hint rule and the one ask a span makes, the reported
shares that are left and the two-answers design that would remove them, what
the fuzzers reach and what they cannot, the hypotheses not to repeat, and the
counter and dump commands with the numbers they print now. The handoff becomes
what it is for -- where the work stands, which is waiting on a review.
2026-09-19 02:57:17 -04:00
iris-ai e4fada298d Record the step 5 result: hints skip the room ask, and the far pin is not the cost
Measured at a888717 and at the new f6242aa on wip/hint-first, with the
inset experiment recorded as tested and rejected. The plan is now review,
render and land.
2026-09-19 02:24:09 -04:00
iris-ai 1ef31bc9e7 Measure step 5's span pin and say what blocks the sound version
Re-measured the work counters at a888717 (unchanged from adbedaf), and
tested the handoff's claim about a positive span pinning `far`: without the
pin, seed 1's resize goes from 44 draws of 13 widgets to 20 of 9. The pin is
worth removing, and what stops a sound removal is that no `Part` can say
"from the cursor to the end of the box" without naming the box's length.
2026-09-19 01:29:16 -04:00
iris-ai 2fa734cd63 Record what the step 1 review found
The pre-submit review of the six one-ask commits found a scroll placing
content that fits into a window-length box rather than its viewport, and
three comments still calling window lengths frame lengths.
2026-09-19 01:24:22 -04:00
iris-ai 2a3072b90a Record the clean verification at a30971e
Every check in the table was run over the branch head with nothing else
running and no edit in flight: fmt, both clippy feature sets, the suite,
and all three fuzzers over sixteen cases.
2026-09-19 00:50:23 -04:00
iris-ai 5798877829 Mark the rename step done and say what it renamed
The record's boxes are part, asked and placed, LayoutHolds carries window
ranges beside its two pins, and what is left of the layout plan is the
retained cost and the review of the branch as one diff.
2026-09-19 00:40:53 -04:00
iris-ai 150245071f Record the renders and the counters for the frame-as-length step
Step 3 is done: against #18 the render set is byte-identical but for two
pixels of antialiasing in random and one padded block in text moving a
pixel, and a live resize of random matches a cold render at that size
exactly. The cost table is re-measured at adbedaf, where the fuzzer's own
Branch was found pinning the window and hiding what the change costs.
2026-09-19 00:35:42 -04:00
iris-ai 36ce66554b Record what making the frame a window length corrected
Step 2 of the layout plan is done in the experiment checkout, at 1512d84
and 23523ee. The handoff carries the commits and what is left; LAYOUT.md
carries the settled rule, which is now one coordinate unit with the frame
a length of it and both pins beside each other; the log carries what
implementing the plan corrected in it, including the four that would have
shipped as wrong layout and the two rig gaps that hid them.
2026-09-19 00:21:44 -04:00
iris-aiandClaude Fable 5.1 da1807664a Correct the frame-as-length step: Part::of is untouched, movement paths merge
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-18 19:59:38 -04:00
iris-aiandClaude Fable 5.1 e0b4308de4 Record Bryan's yes to region nodes as translations
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-18 19:58:30 -04:00
iris-aiandClaude Fable 5.1 aa1a85b316 Refine the frame-as-length step: one window unit, region nodes as translations
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-18 19:53:48 -04:00
iris-aiandClaude Fable 5.1 f33981e1e6 Record that padding is an inset and plan the frame-as-length representation
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-18 19:47:12 -04:00
iris-aiandClaude Fable 5.1 1c52bc4e19 Record that a stack's sizing child decides its siblings' boxes
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-18 19:17:40 -04:00
iris-aiandClaude Fable 5.1 9f988a8315 Record that both long fuzzers agree at 0ef87eb
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-18 18:36:33 -04:00
iris-aiandClaude Fable 5.1 82c0ac4960 Record the seed 946 deferral and the fuzzer results at 3091fb8
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-18 18:30:51 -04:00
iris-aiandClaude Fable 5.1 ef324aa88b Replace the step 3 plan with the one-ask protocol and record why it failed
The handoff now describes wip/one-ask at 3091fb8: a widget draws once in
the box it is asked in, its answer is placed by re-expressing the drawing,
and nothing is drawn again in a box an answer chose. The log records what
the step 3 plan got wrong -- it kept the second draw whose measurement
bit could not be defined, demanded a contract of the answer box, and
narrowed frames by region -- and what fuzzing the new protocol found: the
Part::Of composition dropping a pinned length, and a local redraw that
must be put back in the parent's answer box. The Pad frame rule is left
as a decision for Bryan with its cost stated.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-18 18:23:49 -04:00
iris-ai 39978ff8ea Record decided-box oracle blocker 2026-09-18 15:07:15 -04:00
iris-ai 3eda6f00c8 Record decided-box contract blocker 2026-09-18 14:15:18 -04:00
iris-ai 280fad7472 Finish the transparent-frames handoff 2026-09-18 13:49:38 -04:00
iris-aiandClaude Fable 5.1 bdddb610c0 Trace the scroll circularity to apply_leftover rather than the protocol
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-18 13:25:14 -04:00
iris-aiandClaude Fable 5.1 b2484b900e Record that a leftover share narrows the frame like px and rel
Bryan's decision of 2026-09-18, which answers the Pad question and
makes the code's leftover filter in declared_lens a bug.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-18 13:14:09 -04:00
iris-aiandClaude Fable 5.1 4b976e240e Say what the two open transparent-frames seeds are and what they turn on
A second planning pass over 49cec82: both seeds are the rule that picks
which answer places a box, shown by shrunk trees, a draw trace and two
counter-experiments, with the recommendation they point at.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-18 13:03:14 -04:00
iris-ai 152bed7ec4 Keep the transparent-frames plan as written beside what it landed as 2026-09-18 12:32:57 -04:00
iris-ai 1777a92205 Point the handoff at the reviewed head 2026-09-18 01:21:12 -04:00
iris-ai 398e4efaeb Record what transparent frames landed as, and what it found
The plan in this document is now a protocol in the code, on
`wip/transparent-frames` in the layout experiment: what it does, what the
rig measures it at, and the two things it ran into -- what a widget's answer
is the answer to when a container is drawn in two of its own boxes in one
frame, and what `Pad` should be now that a frame passes through. Both are
Bryan's to decide and both are at the top of Next.

The frame/extent prototype's chronicle goes with it: its four findings that
still hold and its two failed hypotheses stay, the rest was a record of how
the code got to a shape it no longer has.
2026-09-18 01:13:40 -04:00
iris-aiandClaude Fable 5.1 5c35efd498 Note that transparent leftover across a span is deferred
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-17 23:04:49 -04:00
iris-aiandClaude Fable 5.1 dc45f7bb3e Say what leftover means across a span in the transparent-frames plan
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-17 22:38:48 -04:00
iris-aiandClaude Fable 5.1 2bee0b4b53 Plan the transparent-frames layout protocol
Decided with Bryan on 2026-09-18: a child's frame is forwarded through
spans, stacks and scrolls and narrowed only by what is decided from above,
so rel is never a fraction of a self-sized box; placements are parts of
the parent's extent in frame units from its start, so a moved extent
re-places its children exactly; the placement pin becomes a symbolic
length; and a local redraw asks at the offer placement without deferring.
Lists the steps in order with the check for each and the failures that
mean stop rather than patch.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-17 22:18:49 -04:00
iris-aiandClaude Fable 5.1 cb4557f1bc Trace the many-phase gap to local-redraw deferral, not the placement pin
The experiment's `many` loss against e44dea3 came from `redraw` refusing
any widget whose given frame is not its offer and marking its parent
instead, which under the frame/extent protocol chains to the root because
a span gives its children its own placement across itself as their frame.
Record the trace, the measured bound with the pin off, the local re-ask
branch `wip/local-reask` and its two remaining depth-6 counterexamples,
and point readers at this section before the earlier explanations.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-17 20:52:15 -04:00
iris-aiandClaude Opus 5 12b7364998 Record the extent-child and ordered-walk landings, and where the gap really is
The placement pin was not most of it. Deleting the read prices no dependency
at all; expressing it properly is `e6ba570`, worth 19% of seed 13's `many`
and 20% of `resize`. What refuses most reuses is the extent contract -- 819
of 1,203 refusals a frame -- and that is the measuring ask and the placing
ask being two different extents, which `Span` is the remaining reader of.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-17 19:33:33 -04:00
iris-aiandClaude Opus 5 384b6a1150 Price the frame/extent experiment against #18's head, and name the placement pin
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-17 18:02:02 -04:00
iris-ai ccc42f34f8 Document the causes and correction of layout invalidation cascades 2026-09-17 17:27:27 -04:00
iris-ai 32151f7f9f Record retained extent-frame progress and remaining layout gap 2026-09-17 16:41:06 -04:00
iris-ai 035c7f20e8 Record glyph emission savings and remaining layout costs 2026-09-17 16:18:18 -04:00
iris-ai 264dc4f0c2 Record frame-extent performance gains and alignment verification 2026-09-17 15:54:23 -04:00
iris-ai 8f1a5e0a46 Record exact layout equality and measured reuse improvements 2026-09-17 15:11:23 -04:00
iris-ai 0080bcbcba Document tested frame and extent prototype and remaining costs 2026-09-17 14:50:22 -04:00
iris-ai 3084491b9b Record the resize walk and the re-parenting defects, and what verified them
The first item on the plan landed as two commits on #18. The re-parenting
half turned out to be two defects rather than the predicted one -- the old
parent's child list erasing a subtree it no longer draws, and the settling
walk ordering by a stale depth -- and the `depth()` assertion the note
expected to catch it catches only the second.

`dirty_size_under` is deleted, so the section that argued for it is marked
superseded rather than removed: it says what the bottom-up walk is buying.
2026-09-17 13:12:55 -04:00
iris-aiandClaude Fable 5.1 8c16f9d0fd Record the frame-and-extent finding and the resize walk, and drop the measure/draw split
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-17 12:34:41 -04:00