Record decided-box oracle blocker
This commit is contained in:
1 parent
3eda6f00c8
commit
39978ff8ea
2 files changed
+110
-29
No files matched your search
@@ -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
|
||||
|
||||
Reference in new issue
Block a user