Repository navigation
Conversation
…dict reader (E2)
A render effect in a frame a held pass built (CONFIG_HELD_FRAME, e.g. the
branch `<Show when={y() > 0}>` opens under an action holding `y`) re-run
by the hold's next step showed two ways depending on memo wrapping:
- inline `latest(y)`: `route` seated it as the hold's verdict reader, so
its run went out at the verdict lane's reveal, ahead of its frame;
- `createMemo(() => latest(y))` read plainly: `laneRead`'s L7' arm served
the memo's staging as the hold's own value and the run waited for the
landing (and a later run, with nothing staged, entered the verdict lane
through `enterLane`).
`[10, 20]` beside `[10]` for one hold; with #4455, the two-hold review
shape (`[latest(y), m()]` inline vs a memo of it, or split leaves) the
same. A member of the hold's held frame is born in its world: it reads
plainly and a probe does not rescue it (D-25, as #4426/#4454 for its
reads), and its runs are the frame's, which commits with the hold (D-27's
joined pass, A29 ruling A). `route` and `enterLane`'s verdict arm now
leave it the frame's when the lane's hold is the one it was born into;
every form waits for the landing (the branch is not on screen before it).
The reader-seat table carries the same clause (test-only).
#4455's pin (`verdict-seat-merged-lane-4427`) asserted the inline leaf
running ahead of its held frame (`1/20` at A's step); it now expects the
frame's `1/10` until B's landing, and gains the mainline-mount contrast
(`<Show when={latest(y) > 0}>`), which still shows `1/20`.
Lives in verdict.ts / lanes.ts only: 0 B on every floor.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015hPxMkC3jg3Uivh65gvaf2
…pages Measured locally (linux) over next @ 131ceb8. signals: + isPending/latest 11,125 B brotli / 30,704 B minified (+63 B), cap 11.12 -> 11.14 KB; page: compiled live server components 42,810 / 125,600 (+82 B), cap 42.73 -> 42.82 KB. Caps at measured + 10 B rounded up to 0.01 KB; recorded minified = measured. page: live server components (frozen floor) +63 B minified, under its brotli cap (38,825 vs 38.85 KB): not raised. Every floor without the verdict engine is 0 B. (app: hydrating (no stores) is over its cap on next as well, unchanged here.) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015hPxMkC3jg3Uivh65gvaf2
🦋 Changeset detectedLatest commit: b580b19 The changes in this PR will be included in the next version bump. This PR includes changesets to release 15 packages
Not sure what this means? Click here to learn what changesets are. Click here if you're a maintainer who wants to add another changeset to this PR |
Size (brotli, eager entry chunk)
Bundled with Rolldown (what Vite ships), brotli q11, decimal KB. A scenario fails only when it is over its brotli cap and its minified size is more than 20 B over the minified recorded with the cap; over the cap within that allowance is brotli layout noise and passes with a warning. Caps and their recorded minified in |
Coverage Report for CI Build 41088674143Coverage remained the same at 78.1%Details
Uncovered ChangesNo uncovered changes found. Coverage RegressionsNo coverage regressions found. Coverage Stats
💛 - Coveralls |
Merging this PR will improve performance by 8.59%2 warnings
Performance Changes
Tip Curious why performance improved? Comment Comparing Footnotes
|
…-x1ore2-memo-form-tear
… held-frame clause covers it laneRead's D-28 seat reset goes back to comparing verdict lanes by identity. With the held-frame clause, no shape depends on the hold comparison, and the seat table's #4427 known entry no longer matches anything. -48 B minified on the verdict pages. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015hPxMkC3jg3Uivh65gvaf2
seat.ts: next retired #4428's known entry and this branch retired #4427's; both go. Size ledger taken from next and re-measured after. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015hPxMkC3jg3Uivh65gvaf2
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015hPxMkC3jg3Uivh65gvaf2
…tch PR) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015hPxMkC3jg3Uivh65gvaf2
Before: a branch that a held pass mounted, such as
<Show when={y() > 0}>, shows only at the landing. Its leaves are members of a frame the hold built (CONFIG_HELD_FRAME). When the hold's next step re-ran one of those leaves, what happened depended on how the leaf was written:latest(y):routeseated the leaf as the hold's verdict reader, so its run went out at the verdict lane's reveal, ahead of its own frame.enterLaneinstead, so this form didn't even agree with itself.This happened with a single hold as well as merged holds, both before and after #4455. Inline gave
[10, 20], while a memo inside or outside the branch gave[10]. Grouping changed the result, which #4284 forbids (pair E2).After: every form waits for the landing and shows the same steps.
The inline form was the wrong one:
latest-first-later-throw-4275, because a child's run went out before its held parent's.How:
route(verdict.ts) and the verdict arm ofenterLane(lanes.ts) leave a pass as the frame's when it isCONFIG_HELD_FRAMEandbornIntothe hold. This is scoped toHELD_FRAME. Widening it to every born-held pass changed effect order inispending-memo-gate-3766.__TEST__only).#4455's comparison removed. #4455 made
laneRead's D-28 seat reset compare holds instead of verdict-lane objects, so that a merged transaction's lane counted as the same hold's. With the held-frame clause above, no shape depends on that comparison any more.laneReadis back to the pre-#4455 test (seated && (never || p !== l)), the seat table's #4427 known-difference entry is gone, and so are its comments. (Next has since retired #4428's entry too; the merge keeps both removals.) Review found every probe byte-identical on head with this revert, and both #4427 cases and the parity pin pass.verdict-seat-merged-lane-4427now expects the frame's1/10until B lands (2/20final). A mainline-mount contrast case (when={latest(y) > 0}) still shows1/20.Size vs next @ d0fc285, measured locally (linux), brotli / minified. The cost lands only where the verdict engine ships:
page: live server components(frozen floor)signals: + isPending/latestpage: compiled live server componentspage: live + routerapp: hydrating + every store primitiveThe live floor's +46 B brotli is layout from the same +15 B of minified code. No floor changes, so there is no Size-Exception.
Tests:
packages/signals/tests/held-frame-verdict-parity.test.tscovers a single hold (inline, memo inside, memo outside) and merged holds (inline, memo, split). The single-hold inline case fails on next.laneReadrevert): 2,000 cases × 3 seeds, all pairs. 0 cases differ, and the seat shadow shows 0 / 0 / 0.🤖 Generated with Claude Code
https://claude.ai/code/session_015hPxMkC3jg3Uivh65gvaf2