Repository navigation
Conversation
… lane (#4834) A memo over a shown guess and a fresh async answer was the guess lane's work, and the lane was held because a list row of it waited on another action's `refresh()`. The memo's binding read its committed value, derived before the answer, beside a sibling showing the answer. A refresh holds nothing new (D-34 ¶3): a lane member pending on re-asks only no longer blocks the lane's reveal. Behind `guessing`. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0117BoWNSSgtemsSYsaX2hXE
🦋 Changeset detectedLatest commit: c1949ba 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)
|
Coverage Report for CI Build 43487907805Coverage remained the same at 78.945%Details
Uncovered ChangesNo uncovered changes found. Coverage RegressionsNo coverage regressions found. Coverage Stats
💛 - Coveralls |
Merging this PR will degrade performance by 11.81%3 warnings
Warning Please fix the performance issues or acknowledge them on CodSpeed. Performance Changes
Tip Investigate this regression by commenting Comparing Footnotes
|
|
The CodSpeed flag on
No other benchmark moved (200 untouched). Generated by Claude Code |
Summary
#4834: a heading memo that reads a guess renders empty when its async source lands while another action re-asks the list.
headingreadsdetail(still loading) and therenamesguess, and the list's rows read the same guess. Here is what happens:Delta.refresh(list). The list row memo is a member of the guess lane, and it is now pending on that re-ask. That makes the lane blocked (blockedByfinds the list's boundary and render effect pending through it).detaillands.headingre-derives over it, and because it reads the guess, that pass is the lane's work:Deltais staged for the lane's next reveal.<h2>binding is served the memo's committed value. That value is"", derived whiledetailwas stillnull, and it sits beside a<p>that already showsdetail's answer.Without the other action, nothing holds the lane and the heading shows
Delta.Fix (scheduler.ts
blockedBy). When the transaction being judged is a lane, a member pending on re-asks only (reasks, from #4829) is skipped. Its screen keeps what it shows, and its answer re-derives as the lane's work when it lands. It's gated onguessing, so bundles withoutcreateOptimistic/createOptimisticStorefold it away.Rules checked
refresh()re-asks the same question and holds nothing new). This is the clause the fix applies, here to a lane's reveal, as fix(signals): a write is not held by a hold that waits only on re-asks (#4828) #4829 applied it to propagation onto a hold.detailanswer, and the guess they share is the one the list shows.guessFlights,ownFlightson the parent are untouched), and the guess stays on screen.How did you test this change?
packages/signals/tests/blank-heading-4834.test.ts: the issue's sequence on source (mapArray, two loading boundaries), with and without the other action. It asserts every frame. The version with the other action fails onnext.packages/web/test/blank-heading-4834.spec.tsx: the issue's DOM sequence, with and without the other action. It asserts every frame.dist-nested-manifestsfailures that every partial-dist worktree shows. Show-lowered: 1,846 passed. Hydrate: 779 passed.guessing, so only the optimistic bundles should move.Closes #4834
Generated by Claude Code