Record the seed 946 deferral and the fuzzer results at 3091fb8

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
iris-aiandClaude Fable 5.1 committed 2026-09-18 18:30:51 -04:00
1 parent ef324aa88b
commit 82c0ac4960
2 files changed
+71 -36

No files matched your search

+35 -17
View File
@@ -14,18 +14,23 @@ detached comparison checkout is `/home/bob/repos/iris-layout-baseline`. It is
the reviewed baseline this work must preserve or improve.
The continuation is `/home/bob/repos/iris-layout-experiment`, now on branch
**`wip/one-ask`** at **`3091fb8`**, one commit over `4328eac` (the head of
**`wip/one-ask`** at **`0ef87eb`**, two commits over `4328eac` (the head of
`wip/transparent-frames`, which is unchanged). It replaces the step 3 plan
below with a smaller protocol change, and it passes every fast check:
below with a smaller protocol change, and it passes every check that has
finished:
| check at `3091fb8` | result |
| check at `0ef87eb` | result |
| --- | --- |
| `cargo fmt --all --check`, clippy `-D warnings`, with and without `layout-diagnostics` | clean |
| `cargo test --workspace` (debug) | 114 suite, 20 core, 11 generated, all green |
| the two decided-box pins from step 1 | **pass** (red at `4328eac`) |
| `cargo test --workspace` (debug) | 115 suite, 20 core, 11 generated, all green |
| the two decided-box pins from step 1, and the new seed 946 pin | **pass** (the first two were red at `4328eac`) |
| `cargo test --release --test generated` | 11/11 |
| shrinker, 400 seeds, depth 5, all fifteen cases | agree, 56 s |
| 1000 seeds at depth 6, and the 2000-seed depth-4 scan | see `docs/LAYOUT_LOG.md`; they were running when this was written |
| 2000-seed depth-4 scan, all fifteen cases | agreed at `3091fb8` (269 s); rerun at `0ef87eb` was running when this was written |
| 1000 seeds at depth 6 | found seed 946 at `3091fb8`, fixed and pinned in `0ef87eb`; rerun was running when this was written |
Read `/tmp/oracle-1000-6b.log` and `/tmp/shrink-2000-4b.log` for the reruns
if they still exist; otherwise run them (step 1).
The worker's uncommitted step 3/4 experiment is preserved as branch
`wip/step3-experiment` (one commit over `4328eac`) and as
@@ -156,6 +161,15 @@ back at the retained place of the box the parent's answer *chose*. Both halves
are needed: seed 2 at depth 4 (a stack sized by its text) fails without the
second.
A widget its parent asked more than once in one draw -- a share child, asked
in the room and then in its slot -- has two questions and one record, so it
cannot settle locally: `redraw` defers it to the parent the way it defers a
widget whose declared length changed (`ActiveData::re_asked`, set by
`widget_at` when the child is already in `children`). Seed 946 at depth 6
found the case: a fixed-height column that is a share while its rect fits
and a fixed width once it does not, so emptying it changes the room answer
and not the slot answer.
A symbolic length a child pinned now composes through `Part::Of` where the
part is the whole box less pixels, and pins the parent's own length otherwise
(`in_parent`). Dropping it let a zero `Pad` reuse a drawing across a narrowed
@@ -267,18 +281,18 @@ the probe's diff readable; do this as one mechanical commit. Suite, oracle.
Work counters at `3091fb8`, seed 1 and 13, depth 8, widget draws / distinct
widgets, beside `e44dea3` (#18) and `49cec82` (the branch head before this):
| seed 1 | e44dea3 | 49cec82 | 3091fb8 |
| seed 1 | e44dea3 | 49cec82 | 0ef87eb |
| --- | --- | --- | --- |
| cold | 369/261 | 516/288 | 331/288 |
| many | 157/95 | 187/119 | 78/78 |
| many | 157/95 | 187/119 | 110/92 |
| size | 16/12 | 3/3 | 3/3 |
| scroll | 2 | 1 | 1 |
| resize | 13/13 | 24/76 | 40/15 |
| seed 13 | e44dea3 | 49cec82 | 3091fb8 |
| seed 13 | e44dea3 | 49cec82 | 0ef87eb |
| --- | --- | --- | --- |
| cold | 1330/707 | 2940/982 | 1179/982 |
| many | 524/159 | 1091/423 | 335/333 |
| many | 524/159 | 1091/423 | 424/364 |
| resize | nothing | 2215/510 | nothing |
`many` and `size` are better than #18 at seed 1 and `many` draws fewer times
@@ -287,13 +301,17 @@ at seed 1 draws 40 times where #18 drew 13. Two mechanisms, both understood:
- **A share child is asked twice per span draw** -- in the measuring room
with the frame forwarded, then in its slot with the frame narrowed. Each
ask that reads pixels or pins a length draws. Give `Span` a measure-only
ask for the first pass: reuse the retained *answer* when its holds contain
the room, without validating or relocating the drawing, and let the
placing ask settle the drawing. The answer contract must then carry no
symbolic pin (a span's total does not depend on `far`; only its slots do),
which is the separation the worker's experiment made with
`answer_extent_len`. Measure `many` at seed 13 before and after.
ask that reads pixels or pins a length draws, and since `0ef87eb` every
local change inside a share child redraws its span as well. Give `Span` a
measure-only ask for the first pass: reuse the retained *answer* when its
holds contain the room, without validating or relocating the drawing, and
let the placing ask settle the drawing. The answer contract must then
carry no symbolic pin (a span's total does not depend on `far`; only its
slots do), which is the separation the worker's experiment made with
`answer_extent_len`. With that, a twice-asked child could keep both
answers and settle locally by re-asking both questions instead of
deferring. Measure `many` at seed 13 before and after; the seed 946 pin
must stay green throughout.
- **A positive-direction span with no shares pins `far`** it does not need,
so a resize redraws it. Read `extent_len` only where a slot depends on it
(shares, or `Sign::Neg`), and express the measuring room's far end without