solid/patches.md
Solid 2.0 beta 28 — local patch
Quoin carries one bun patch against solid-js@2.0.0-beta.28:
patches/solid-js@2.0.0-beta.28.patch
It is registered through patchedDependencies in package.json.
Context provider tracking
The provider returned by createContext writes props.value while its
createRoot is the active tracking scope:
| 1 | setContext(provider, props.value); |
When the value getter reads a signal, the provider root subscribes to it. That produces strict untracked-read diagnostics and can re-run provider-owned work when the value's dependencies change.
The patch keeps context setup snapshot-based by untracking the value write:
| 1 | // dist/dev.js |
| 2 | untrack(() => setContext(provider, props.value)); |
| 3 | |
| 4 | // dist/dev.cjs |
| 5 | signals.untrack(() => signals.setContext(provider, props.value)); |
Only the development ESM and CJS builds are patched, matching the scope that Quoin exercises under its development test conditions.
Patches removed in beta.28
Quoin previously carried three additional beta.14 fixes. Source inspection and the beta.28 regression suite confirm they are now upstream:
@solidjs/signals: rejected actions settle at the call site instead of recursively throwing into a completed generator.@solidjs/signals: async-memo rejection wakes dependents.@solidjs/web: Portal delegation uses the raw mount node rather than passing its proxy toNode.contains.
Their patch files and patchedDependencies entries were removed during the
beta.28 upgrade.
Re-checking on the next beta
- Remove the
solid-jspatch entry and install the new beta. - Inspect every
createContextprovider build for an untracked value write. - If the fix is upstream, delete the patch. Otherwise regenerate it against the exact new package version.
- Run unit, SSR, hydration, production, package-consumer, demo, and Chromium browser validation.