Repository navigation
Description
Describe the bug
On experimental build 6f77b1b, writing a client-only flag to a writable derived store inside an action prevents a subsequent optimistic store update from appearing while that action is pending.
The optimistic store wraps the derived store. The local write only sets failed = false; the optimistic write changes title to "New" and sets saving = true. A direct JSX binding keeps showing "Old" and saving: false until the action completes.
const [cards, setOptimistic] = createOptimisticStore(local);
const save = action(function* () {
setLocal(draft => { draft[0].failed = false; });
setOptimistic(draft => {
draft[0].title = "New";
draft[0].saving = true;
});
yield completion;
});Removing the setLocal call makes the optimistic update appear. The reproduction uses a normal component and direct text binding, without For, Show, routing, or external data loading.
Your Example Website or App
Steps to Reproduce the Bug or Issue
- Open the playground and click Run once.
- During the two-second simulated save, observe
Old / saving: falseinstead of the optimistic values. - After completion, the display changes to
New / saving: false. The report records both states. - Reload and remove the marked
setLocalcall to compare: the optimistic values appear during the save.
Expected behavior
The optimistic view should immediately show New / saving: true while the action is pending, including when the action first writes to its underlying local store. After completion, it should follow the authoritative source with the temporary saving flag removed.
Platform
- OS: Linux (Ubuntu / WSL)
- Browsers: Chromium 153.0.8010.12 and Firefox 155.0; identical results
- Solid:
solid-js,@solidjs/web, and@solidjs/signalsfrom the Zulu6f77b1bpreview: updates mizulu/solid2#1 (comment) - Native compiler:
@solidjs/compiler2.0.0-rc.13
Additional context
The identical reproduction with published RC.13 is here: https://s.olid.uk/id/cf602874-eee9-400c-bd96-3022a77b7291
| With the local flag write | RC.13 | 6f77b1b |
|---|---|---|
| During the pending action | New / saving: true |
Old / saving: false |
| After completion | Old / saving: false |
New / saving: false |
RC.13 shows the optimistic update correctly but suppresses the later source reconciliation discussed in #3733. The newer build reconciles correctly after completion, but loses the optimistic display while pending. Both playgrounds have Tailwind disabled.
Activity
fix(signals): an optimistic write over a held row guesses the row's k…
refactor(signals): trim the F5 and #3796 fixes' minified cost
fix(signals): L2 lane takeover of held effects (#3766) and optimistic…
ryansolid commentedon Oct 6, 2026