Release RC packages (rc) - #3537
Open
github-actions[bot] wants to merge 1 commit into
Open
github-actions[bot] wants to merge 1 commit into
github-actions[bot] wants to merge 1 commit into
Conversation
github-actions
Bot
force-pushed
the
changeset-release/next
branch
12 times, most recently
from
September 19, 2026 15:59
415dd68 to
331b67e
Compare
github-actions
Bot
force-pushed
the
changeset-release/next
branch
from
September 19, 2026 16:00
331b67e to
3184529
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR was opened by the Changesets release GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to next, this PR will be updated.
nextis currently in pre mode so this branch has prereleases rather than normal releases. If you want to exit prereleases, runchangeset pre exitonnext.Releases
@solidjs/compiler@2.0.0-rc.10
Patch Changes
@solidjs/diagnostics@2.0.0-rc.10
Patch Changes
@solidjs/element@2.0.0-rc.10
Patch Changes
@solidjs/h@2.0.0-rc.10
Patch Changes
noscroll, notnoScroll(README says noScroll becomes lowercase noscroll, but @solidjs/web types the anchor attribute as noScroll solid-router#605). The client-navigation contract on plain<a>elements is spelled lowercase —link,state,replace,preload— like every other HTML attribute in these types (novalidate,autofocus,crossorigin), and the router documents and reads the lowercase form (a.hasAttribute("noscroll"));noScrollwas the one camelCase outlier, so the spelling the router README shows was a type error. Runtime is unchanged:setAttributeand the HTML parser already lowercase the name, so existing<a noScroll>markup keeps working and only needs the spelling updated to type-check.@solidjs/html@2.0.0-rc.10
Patch Changes
@solidjs/signals@2.0.0-rc.10
Patch Changes
ebc1b03: A zombie that recomputes stays a zombie (rc.9: deferred child recomputation loses REACTIVE_ZOMBIE and leaks subscriptions #3543).
recomputeandupdateIfNecessaryrewrote_flagswholesale and droppedREACTIVE_ZOMBIE, the flag that says a node sits on its owner's deferred-disposal chain. While any transaction was parked, the scheduler reruns zombies for mainline writes (Pending removal releases latest while its async reader is still visible #3463), so an owner that recreates a child each pass — a compiled<Show when={a() && b()}>condition — had its previous child rerun de-flagged; at the owner's commitdisposeChildrenthen spliced that child out of the live chain instead of the pending one, orphaning the current child. The orphan stayed subscribed and recomputing forever: one leaked node per update, untilHUGE_FAN_OUT. The flag now survives every per-pass wipe.A consequence pinned in
lane-outside-view.test.ts: a zombie whose removal is staged by a transaction no longer holds that transaction's commit after it reruns — its say was always meant to be moot for the verdict that disposes it, and the extra hold was this bug.f2bd662:
OBSERVE.subjectOfJSDoc names thesubscriptions()export ofsolid-js/attributionrather than the removedattribution.subscriptions()method756b1b3:
omit()'s no-Proxy copy path re-homes accessors with the source as receiver instead of forwarding the descriptor, matchingmerge()'s copy path. A prop's getter is defined only for a read through its own object — the compiler's server-side props keep their state on the instance — so a copy that must stay live defines its own getter that reads through the source.27bb3fa: Dev-only owner-chain invariant on the disposal splice (rc.9: deferred child recomputation loses REACTIVE_ZOMBIE and leaks subscriptions #3543 follow-up).
disposeChildrenunlinks a self-disposing node from its parent's child chain by position: a node with no_prevSiblingis written up as the chain's head. The only way that is false is a node flagged live that sits elsewhere — the rc.9: deferred child recomputation loses REACTIVE_ZOMBIE and leaks subscriptions #3543 shape, a zombie that lostREACTIVE_ZOMBIE— and the write then clobbers the head with a stale_nextSibling, orphaning every live child ahead of it. Dev builds now assertparent._firstChild === nodeat that write and report[INVARIANT_VIOLATION] owner-chain-head(thrown under__TEST__,console.errordiagnostic in dev). The check is__DEV__-guarded and folds out of the prod and observe tiers (size unchanged).Also pins the create-pass shape of rc.9: deferred child recomputation loses REACTIVE_ZOMBIE and leaks subscriptions #3543: a lazy memo zombified by its owner's rerun and first read from the owner's new pass goes through
recompute(comp, true), whose flag wipe must carryREACTIVE_ZOMBIEtoo.solid-js@2.0.0-rc.10
Patch Changes
ae2bc9f: Hybrid store hydration waits for the server's answer before handing off to the client (Shallow computed stores lose leaf identity; hybrid hydration can lose the first answer #3498)
Root cause: the hybrid store gate flipped synchronously at the end of the claim pass. With
loadingValue/seedLoadingValuethe server serializes a pending placeholder whose real answer arrives later over the stream; flipping before it landed let the client takeover supersede the server flight, so the engine dropped the server's answer and the store never showed it.The handoff now follows four rules:
refresh()) run the client source against the real draft and commit their first yield normally; previously every run kept discarding it.refresh()(a non-handoff run) replaces it; the client's handoff run does not paper over the rejection.Updated dependencies [ebc1b03]
Updated dependencies [f2bd662]
Updated dependencies [756b1b3]
Updated dependencies [27bb3fa]
@solidjs/universal@2.0.0-rc.10
Patch Changes
@solidjs/web@2.0.0-rc.10
Patch Changes
noscroll, notnoScroll(README says noScroll becomes lowercase noscroll, but @solidjs/web types the anchor attribute as noScroll solid-router#605). The client-navigation contract on plain<a>elements is spelled lowercase —link,state,replace,preload— like every other HTML attribute in these types (novalidate,autofocus,crossorigin), and the router documents and reads the lowercase form (a.hasAttribute("noscroll"));noScrollwas the one camelCase outlier, so the spelling the router README shows was a type error. Runtime is unchanged:setAttributeand the HTML parser already lowercase the name, so existing<a noScroll>markup keeps working and only needs the spelling updated to type-check.csrf.originallowlist admit a cross-origin caller, and answer it with CORS (The CSRF origin allowlist is never consulted for a cross-site caller, so a static client on another origin cannot call server functions #3538).configureServerFunctionsServer({ csrf: { origin } })accepted a string, a list or a matcher, but the handler refusedSec-Fetch-Site: cross-site(andsame-site) before consulting it, so an explicitly listed origin was refused by every current browser and WebView — a client-only build in a Capacitor WebView could not call server functions on another host at all. Now a cross-site request carrying a browser-setOriginis decided by the matcher: refused when none is configured (today's default) or when it does not answertrue;nonestays refused. An admitted cross-origin caller getsAccess-Control-Allow-Originechoing its exactOrigin(withVary: Origin), the protocol's response headers exposed, and theOPTIONSpreflight answered for the transport's methods and headers — on every response, the labelled unknown-id 404 included.Access-Control-Allow-Credentials: trueis sent only with the newcsrf.allowCredentialsoption, so listing an origin never silently turns on cookie sharing. The same-origin path is byte-identical to before, with one exception: once a matcher is configured, everyGET-declared read carriesVary: Origin— the read stays ungated andAllow-Originappears only for a listed origin, but a declared read is cacheable and its answer now depends on who asked, so a shared cache must not serve a same-origin page's header-less variant to the listed origin. Without a matcher, reads carry noVary, as before. The client'sendpointoption now documents an absolute URL, withcsrf.originas the server-side allowlist that makes it work.@solidjs/babel-plugin@2.0.0-rc.10
test-integration@2.0.0-rc.10
Patch Changes
a5219fd: The TanStack Solid Query release gate now compiles the adapter with this tree's compiler as well as running it on this tree's runtime (test-integration: solid-query gate must pack the workspace compiler, not just the runtime #3534). It packs
@solidjs/compilerand@solidjs/babel-pluginbeside the core tarballs, resolves the compiler's platform packages to the in-repo stubs (their pinned version reaches the registry only after the gate), hands the locally built binding to the loader throughSOLID_COMPILER_NATIVE, and lifts the fixture's@solidjs/vite-pluginto the version the workspace itself is tested with. A release that changes the compiled-output contract (rc.9's_$$<type>delegated-event key) is no longer circular with its own gate;SKIP_SOLID_QUERY_GATEstays as a self-expiring emergency valve and is no longer set.The gate also tracks the adapter where it is actually released from —
TanStack/query#solid-query-v6-pre, the branch behind the@tanstack/solid-queryrcdist-tag — instead of the fork branch frozen at the day feat(solid-query): built-in single-flight consumer via FLIGHT_DATA_SOURCE TanStack/query#11326 merged, and judges the inner runner's exit by status and signal: a runner aborted by V8's heap limit has no exit code, and the previous check read that as green.Updated dependencies [ce17c29]
Updated dependencies [bfc320c]
Updated dependencies [ae2bc9f]
Updated dependencies [ebc1b03]
Updated dependencies [f2bd662]
Updated dependencies [756b1b3]
Updated dependencies [27bb3fa]