Record decided-box oracle blocker

This commit is contained in:
iris-ai committed 2026-09-18 15:07:15 -04:00
1 parent 3eda6f00c8
commit 39978ff8ea
2 files changed
+110 -29

No files matched your search

+69
View File
@@ -65,6 +65,75 @@ evaluations of a ten-widget subtree in one cold layout, from `Within(cursor..
far)` measuring rooms followed by `Fill(slot)` placing, with the span's
`extent_len` pin forcing a redraw at every box length.
## Original step 3 plan, preserved verbatim (planner, 2026-09-18)
This is the original idea from ai-app-2 `280fad7`, kept here even as the
handoff's stop notice changes with new evidence:
> ### 3. Evaluate children in parent-decided boxes
>
> Change placement so an answer-derived box never runs a container body.
> Placing becomes reuse-or-translate. Remove the offer/measurement gate and
> its retained bookkeeping only as each caller stops needing it; do not leave
> a parallel old path.
>
> Three current widgets must stop depending on measuring boxes they will never
> own:
>
> - `Span`: do not read `extent_len` unconditionally. Slots depend on `far`
> only when shares exist (the decided slot fills its part) or for negative
> direction; compute negative-direction slots from `total`. Pin the extent
> length only in those cases.
> - `Stack`: draw non-sizing children in `From(0..size)` on an axis where the
> sizing child's answer is `px`/`rel`, and `All` where it is `leftover`,
> instead of drawing them in `All` of the measuring room.
> - `Branch` in the random rig: express "the rest of my box" as
> `Of(40px..FULL)` rather than reading `extent_len(Y)`.
>
> Every drawing must hold for the answer box it supplies. The two focused tests
> from step 1 and the existing region-node and decided-box tests must pass here.
The surrounding seven-step implementation plan remains in `docs/HANDOFF.md`;
the quoted text above is the part whose interpretation is now blocked, so it
must remain available even if the live handoff is rewritten.
## Step 3 experiment after verifying the tests (worker, 2026-09-18)
The initial 17 suite failures mixed obsolete expectations with real defects.
`ReadsBox`, `ReadsWidth`, and `Measured` used pixel reads to compute only their
answer; failing `Counted` cases installed a box dependency without drawing
anything. Those fixtures encoded the old second draw inside the answer box.
Giving the painter answer-only pixel reads preserved their invalidation and
geometry claims while removing the obsolete paired-draw count. Separate
fixtures still exercise actual drawing dependencies with ordinary pixel
reads.
The experiment then reached a green 114-test suite. Its substantive findings:
- answer validity and final-drawing validity must remain independent all the
way through `draw_inner`; returning their old combined contract falsely
pinned wrappers such as `Pad` to provisional boxes;
- a repeated ask of one child replaces that child's provisional final-drawing
contract rather than intersecting both drawings forever;
- provisional `Span` asks fill their measuring room; `Within` immediately
tries to put the child in its own answer before the span decides anything;
- only an actually allocated share pins final span slots to `far`; an
overfull row with a requested but unallocated share uses fixed slots;
- a narrowed share frame is `Part::From(slot)` of the span's *extent*, not a
zero-based span in the forwarded frame;
- a local redraw re-asks the question that produced the retained answer and
marks the parent to restore any distinct final placement.
The release fast oracle then failed all eleven ordinary cases during cold
layout. Most failures were `Text`: its provisional drawing was pinned to a
pixel width that did not include the smaller box its answer selected. A
generated `Stack` showed the same class through a symbolic `FULL` pin. This
is stronger evidence than the original suite failures: the generated tests
are not asserting draw counts or the old two-draw protocol, and no warm state
exists yet. The open decision is whether the guarantee quoted above applies
to every leaf and how `Text` can establish it, or whether answer-derived leaf
evaluation remains legal while container evaluation does not.
## What the plan of 2026-09-18 got wrong (planner, same day)
The plan claimed the retained model rests on the frame's length being the