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:

js
1setContext(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:

js
1// dist/dev.js
2untrack(() => setContext(provider, props.value));
3
4// dist/dev.cjs
5signals.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 to Node.contains.

Their patch files and patchedDependencies entries were removed during the beta.28 upgrade.

Re-checking on the next beta

  1. Remove the solid-js patch entry and install the new beta.
  2. Inspect every createContext provider build for an untracked value write.
  3. If the fix is upstream, delete the patch. Otherwise regenerate it against the exact new package version.
  4. Run unit, SSR, hydration, production, package-consumer, demo, and Chromium browser validation.