You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
2.0.0-rc.14: until() through a synchronous memo misses optimistic confirmation #3943
On 2.0.0-rc.14, an action waiting with until() through a synchronous memo remains pending when the actual source confirms its optimistic prediction. Reading the optimistic accessor directly in the predicate completes the same action.
The predicate subscribes before confirmation arrives. The prediction alone correctly does not satisfy the wait, but confirming it does not resolve the wait through the memo either.
The displayed count becomes 1 and the doubled memo becomes 2. Action completion remains false, as expected while the prediction is unconfirmed.
Click 2. Confirm to set the actual source to 1.
Action completion still remains false.
Change the wait to yield until(() => count() === 1), rebuild, and repeat. Action completion becomes true after confirmation.
Both the failing memo case and the successful direct-read control were verified in the browser.
Expected behavior
The optimistic prediction alone should not satisfy until(). Once the actual source confirms the prediction, the predicate through the synchronous memo should resolve and the action should complete, just as the direct-read predicate does.
Platform
OS: Linux (WSL)
Browser: Chrome for Testing 153.0.8010.12, tested with Playwright
Fixed by #3978, merged into next as e0a7548: until() through a derivation of an optimistic value now resolves once the source confirms the guess, as the direct read already did. Your example (until(() => doubled() === 2)) is pinned in tests/until-memo-confirmation-3943.test.ts, along with the store form.
The prediction alone still does not satisfy the wait: a guess made again after a confirmation, an unconfirmed guess the derivation reads, or a write the action still holds keeps until() waiting.
Closing by hand, since merges into next don't close linked issues.
Activity
perf(signals): trim the #3943 truth read; record its size
chore: changeset for #3943
fix(signals): until() through a derivation of confirmed guesses resol…
perf(signals): a compact confirmed-lane check for until() (#3943)
perf(signals): trim the #3943 truth read; record its size
chore: changeset for #3943
fix(signals): until() reads a derivation as truth only when its own g…
chore(size): re-base the observe + attribution cap for #3943
fix(signals): until() through a derivation of confirmed guesses resol…
ryansolid commentedon Oct 11, 2026
Generated by Claude Code