Release RC packages (rc) - #3192
Open
github-actions[bot] wants to merge 1 commit into
Open
Conversation
github-actions
Bot
force-pushed
the
changeset-release/next
branch
11 times, most recently
from
September 2, 2026 02:33
368fa52 to
ac63a48
Compare
github-actions
Bot
force-pushed
the
changeset-release/next
branch
from
September 2, 2026 02:35
ac63a48 to
ba8020b
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/babel-plugin@2.0.0-rc.6
Minor Changes
.tsrxsources (routed by filename with the newsyntax: "auto" | "jsx" | "tsrx"option) desugar@if/@else,@for … @empty,@switch/@case,@try/@catch/@pending,@{}statement containers, and lazy destructuring (&{}/&[]) into the shared Solid JSX lowering, producing byte-identical output from both compilers. The Babel plugin loads the optional@tsrx/corepeer dependency lazily; the native compiler ships the frontend behind the default-ontsrxcargo feature (statement containers in expression position are rejected with a structured diagnostic pending upstream oxc-tsrx support).Patch Changes
value/checked(and other stateful DOM property) bindings no longer overwrite pre-hydration user input during the hydration claim pass ([Solid 2 regression] Direct value and checked bindings overwrite pre-hydration user input #3182). Hydratable compiled output now routes locked DOM properties throughsetProperty, which skips writes on hydrating nodes and carries the<select value>microtask and input/textarea nullish special cases.<select value>values through the live DOM property so the matching option is selected consistently with reactive values.@solidjs/compiler@2.0.0-rc.6
Minor Changes
.tsrxsources (routed by filename with the newsyntax: "auto" | "jsx" | "tsrx"option) desugar@if/@else,@for … @empty,@switch/@case,@try/@catch/@pending,@{}statement containers, and lazy destructuring (&{}/&[]) into the shared Solid JSX lowering, producing byte-identical output from both compilers. The Babel plugin loads the optional@tsrx/corepeer dependency lazily; the native compiler ships the frontend behind the default-ontsrxcargo feature (statement containers in expression position are rejected with a structured diagnostic pending upstream oxc-tsrx support).Patch Changes
_$insert(_el$, expr, _el$2)) instead of re-deriving the walk inline (_el$.firstChild), matching babel-plugin output. Affects dynamic slots followed by static content in both single-slot and per-slot parents.value/checked(and other stateful DOM property) bindings no longer overwrite pre-hydration user input during the hydration claim pass ([Solid 2 regression] Direct value and checked bindings overwrite pre-hydration user input #3182). Hydratable compiled output now routes locked DOM properties throughsetProperty, which skips writes on hydrating nodes and carries the<select value>microtask and input/textarea nullish special cases.<select value>values through the live DOM property so the matching option is selected consistently with reactive values.<html>/<head>/<body>) now take the@refresh reloadpath (decline + full reload) instead of registering hot-swappable components (2.0.0-rc.3 | Updates in Document.jsx won't HRM update #3151). A document shell can never hot-swap: the hydratable compile emits no client template for those elements — they are only recoverable from the hydration walk, so a post-hydration re-render throws a hydration mismatch — and their static markup/attributes exist only in the server-rendered HTML, so even a successful swap could not reflect the edit. Editing a Document/Shell component now triggers a full page reload that fetches a fresh server render..tsrxmodules with the server-function directive transform while preserving path-stable function IDs..tsrxlocations while leaving compiler-generated projection ranges unmapped.@solidjs/diagnostics@2.0.0-rc.6
Patch Changes
@solidjs/element@2.0.0-rc.6
Patch Changes
@solidjs/h@2.0.0-rc.6
Patch Changes
@solidjs/html@2.0.0-rc.6
Patch Changes
@solidjs/signals@2.0.0-rc.6
Patch Changes
flightStartdev hook announces every async flight as it registers; the engine chains flights whose recompute was caused by an upstream flight's landing AND whose origin post-dates that landing — origin being the earliest provable start (cooperativeDEV.attribution.markFlight(promise, startedAt)stamps from preloaders/caches, first-seen object identity, else registration time), so preloaded work in the air alongside its upstream is parallel, never a waterfall link. Chains are recorded as queryable facts (DEV.attribution.waterfalls()); theASYNC_WATERFALLdiagnostic is the duration-gated verdict (each link ≥waterfalls.minFlightMs, default 50ms): depth-2 chains emit at the newinfoseverity on the structured channel only, depth-3+ escalate to a consolewarn, once per node with re-warn on growth.DiagnosticSeveritygains the"info"advisory tier. Zero production bytes (dev-hook site folds out; tree-shake guard covers it)._optimisticStoresmembership.isPending === truepulse leaking to direct render effects when a quietrefresh()landing is transition-held (A quiet refresh landing leaks a one-frame isPending=true pulse to render effects #3178). The quiet re-ask classification now survives the landing until the hold commits (the reveal), mirroring the Loading-window landing leaks a one-frame isPending=true pulse to live observers #2990 loading-window treatment, so companion synchronization never classifies the held old value as pending._pendingValuewith the flag still set, and a comparator throw on that landing leaves the node errored; both were false positives.createMemo(() => store.value)is never notified again #3181 follow-up). The walk compensates for a preempted landing, and a landing means truth exists — a node that leaves STATUS_PENDING while still STATUS_UNINITIALIZED (a projection driver whose first flight was superseded before any commit reached the observable store) has nothing to reveal. Waking parked readers there served them the projection's initial face: undefined data a read layer had promised was settled, which threw in unguarded reads and halted the reactive system (observed as the TanStack Query adapter's first loads wedging at their loading boundary on rc.5).solid-js@2.0.0-rc.6
Patch Changes
DEV.attribution.enable()— why-chains,costs(),waterfalls()) and the agent-loops skill. Breaks a discovery circularity: the sensitive perf detectors only fire while attribution is enabled, so the always-on graph warnings are the moment to teach that the deeper evidence channel exists.@solidjs/universal@2.0.0-rc.6
Patch Changes
Rendererinterface now accepts a trailingRendererEffectOptions({ name?: string }) oneffect,insert, andspread—spreadforwards one shared name to its child insertion and internal ref/props effects — so dev attribution can correlate signal write → application computation → renderer effect → output mutation end-to-end. Renderer-created effects without a caller-supplied name get stable dev-only fallbacks ("renderer insert", "renderer spread props/ref/children", "renderer render", "renderer patch"); production builds tree-shake all of it via the_SOLID_DEV_constant.@solidjs/web@2.0.0-rc.6
Patch Changes
provideEvent's invocation contract is enforced at HTTP dispatch (provideEvent's contract is unenforced: calling fn twice double-commits a mutation under a 200 #3172). A hook that invoked the callback twice double-committed a mutation under a 200, and one that never invoked it answered a void success without running the function. A second invocation is now refused before the function body runs again, and both violations fail the request with a sanitized 500 (the hook is named in development), re-checked after the hook returns so a swallowed refusal cannot answer 200.undefined(Revisit #3087: a 2xx the client cannot decode resolves as undefined, and a captive portal is indistinguishable from a void result #3173, revisiting A response the runtime did not produce resolves the call to undefined instead of failing #3087). A captive portal, WAF interstitial, or misrouted SPA index answering 200 with HTML was indistinguishable from a void result; the transport now requires a success response to carry the runtime's body-format tag (stamped on every encoded response, void included) or the verbatim-passthrough marker, and rejects anything else with the status and content-type named. Genuine void results and raw passthroughs are unaffected; the header alone is judge, never the body.<Show>— the server allocated its hydration ids but never rendered it) now materializes its dynamic inserts like a client render, so revealing the detached subtree later produces fully initialized DOM (Eager JSX hidden by an initially false<Show>hydrates detached with missing dynamic content #3163). Text-node adoption during hydration is restricted to nodes actually being claimed (connected or under a claim root).multipleexpression on<select>is initially truthy (Dynamic <select multiple={...}> loses earlier statically selected options during client render #3179). The template parses under single-select rules before the binding effect runs, so the first truthymultiplewrite now restores selectedness from the options' defaults, matching the static attribute. Later toggles keep the live selection state, exactly like toggling the attribute on static markup.a,script,style,title) in the SVG namespace when Dynamic renders them inside SVG content during client rendering (Dynamic creates ambiguous SVG elements in the HTML namespace during client rendering #3187). Dynamic intrinsic elements now materialize lazily inside the insert() that renders them, where the live insertion parent provides the namespace hint — matching how the parser resolves these tags in static templates and server-rendered markup (children offoreignObjectstay HTML).value/checked(and other stateful DOM property) bindings no longer overwrite pre-hydration user input during the hydration claim pass ([Solid 2 regression] Direct value and checked bindings overwrite pre-hydration user input #3182). Hydratable compiled output now routes locked DOM properties throughsetProperty, which skips writes on hydrating nodes and carries the<select value>microtask and input/textarea nullish special cases.style()andsetStyleProperty()) no longer overwrite server-rendered inline styles during the initial hydration pass, consistent with class and attribute bindings (Reactive style bindings overwrite server-rendered styles during hydration #3180). The first subsequent reactive update applies the client value.__proto__as an own key (Decoded arguments keep __proto__ as an own key, so an ordinary Object.assign merge in a handler re-prototypes the result #3168). Both decode roads (plain JSON and the codec) preserved the key faithfully, so an ordinaryObject.assignmerge in a handler re-prototyped its result with attacker-supplied data. The key is now stripped recursively at the argument-decode seam, covering plain objects, arrays, and revived Map/Set entries, with cycle protection.prepareRequest's return is validated instead of replacing the request init wholesale (prepareRequest's return replaces the init unvalidated, so a hook that returns a fresh object drops the payload, the signal and the protocol headers #3174). A hook returning a fresh object — the natural way to write "add an auth header" — silently dropped the argument payload, the abort signal, and every protocol header, and the call still dispatched. A returned init that lost the transport headers (or is not an object) now fails the call at the call site naming the hook; deliberate body/signal replacement over a spread init remains in contract.test-integration@2.0.0-rc.6
Patch Changes