Require solid 2.0.0-rc.7; drop the async render head-commit workaround - #350
Merged
Conversation
🦋 Changeset detectedLatest commit: a810d09 The changes in this PR will be included in the next version bump. This PR includes changesets to release 1 package
Not sure what this means? Click here to learn what changesets are. Click here if you're a maintainer who wants to add another changeset to this PR |
rc.7 (solidjs/solid#3292) freezes the response head when an awaited renderToStream completes, before the render is disposed, so the generated SSR entry no longer needs to commit the stub from onCompleteAll and authored entries need no hook. Peer floors move to ^2.0.0-rc.7; README caveat and the unreleased render-mode changeset drop the workaround wording. Against rc.6 the render-mode suite fails exactly the six async head assertions (status/header/Location, dev+prod); the rc.7 ride commit (catalog + lockfile + minimumReleaseAgeExclude) turns them green. Co-authored-by: Cursor <cursoragent@cursor.com>
ryansolid
marked this pull request as ready for review
September 6, 2026 06:37
ryansolid
force-pushed
the
require-solid-rc7
branch
from
September 6, 2026 06:37
6ec0d96 to
bfca1a1
Compare
rc.7 ships solidjs/solid#3292: an awaited renderToStream freezes the response head before dispose, which is the runtime behaviour the previous commit's peer floor (^2.0.0-rc.7) requires. The workspace catalog moves to ^2.0.0-rc.7 (minimumReleaseAgeExclude extended per the existing pattern) and the lockfile re-resolves solid-js, @solidjs/web, @solidjs/signals, @solidjs/compiler (+ platform binaries), @solidjs/babel-plugin and @solidjs/diagnostics to rc.7. The plugin's own caret ranges already float and are left as-is. Audited the rc.7 notes against the plugin: no hard-coded dist/dev.* paths (bd22ac8 rename), no patch-channel option or test (d601119). Co-authored-by: Cursor <cursoragent@cursor.com>
solid 2.0.0-rc.7 adds `dist/server.dev.*` builds to solid-js and
@solidjs/web, selected by the `development` export condition nested
under `node`/`worker`/`deno` (solidjs/solid 80ff52e). The plugin already
prepends `development` to `resolve.externalConditions`, but that only
reaches the imports Vite's module runner resolves itself: an externalized
package's OWN imports go through Node with Node's conditions. Under
`vite dev` the runner therefore loaded @solidjs/web's dev copy, whose
native `import "solid-js"` landed on solid-js's PROD copy, while the
app's own `solid-js` import was the runner's DEV copy — two instances of
the framework. renderToStream installed the asset resolver on one
sharedConfig and lazy() read the other, so every dev SSR page with a
lazy() component failed with "lazy() called with moduleUrl … but no
asset manifest is set" (ssr, css-matrix, start-ssr and start-client dev
modes all red against rc.7); owner tracking, request events and
hydration keys were split the same way. rc.6 had no solid-js dev server
build, so both paths resolved to the same file and the split was
invisible.
The two core packages now go into `resolve.noExternal` for every server
environment the plugin injects dev mode into, so all resolutions — theirs
included — use the environment's conditions and one dev build is loaded
end to end (verified with a Node resolve hook: zero native loads of any
solid dist file). Vitest projects keep managing their own inlining via
`test.server.deps`, and a host that set `noExternal: true` is untouched.
Also drops the `ssr: { external: ['solid-js'] }` override the ssr and
css-matrix examples carried as a TEMPORARY workaround for a since-removed
workspace link; it now fights the plugin's default.
Co-authored-by: Cursor <cursoragent@cursor.com>
|
Review the following changes in direct dependencies. Learn more about Socket for GitHub.
|
commit: |
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.
Companion to solidjs/solid#3292, which makes `@solidjs/web` freeze the response head when an awaited `renderToStream` completes (before the render owner is disposed). The plugin-side workaround from #349 never shipped, so it is simply removed rather than deprecated:
No plugin release is cut before rc.7, so this lands together with the rc.7 ride commit (workspace catalog → `^2.0.0-rc.7`, lockfile, `minimumReleaseAgeExclude` entries) once rc.7 is on npm, and the pending Version Packages PR picks it all up as one release. Until then, against rc.6 the `render-mode` suite fails exactly the six async head assertions (`httpStatus(404)`, `httpHeader`, pre-flush `Location` × dev/prod; 114/120 otherwise) — the behaviour this PR intentionally hands back to the runtime.
Update — rc.7 is on npm; this PR now also carries:
ec7ba9btest: ride solid 2.0.0-rc.7 — workspace catalog →^2.0.0-rc.7,minimumReleaseAgeExcludeextended, lockfile re-resolves every@solidjs/*package to rc.7 (plugin caret ranges untouched). Nodist/dev.*paths or patch-channel references in the plugin to update.a810d09fix: inlinesolid-jsand@solidjs/webin dev server environments (patch changeset). rc.7 addsdist/server.dev.*to both packages behind the nesteddevelopmentcondition (solidjs/solid80ff52e).externalConditionsonly reaches the runner's own resolutions; the externalized@solidjs/web's nativeimport "solid-js"resolved to the prod copy while the app got the runner's dev copy → two framework instances, and every dev SSR page with alazy()component died withlazy() called with moduleUrl … but no asset manifest is set(ssr / css-matrix / start-ssr / start-client dev modes all red). Both core packages now go intoresolve.noExternalwhenever the plugin injects dev mode into a server environment (vitest projects andnoExternal: truehosts untouched). Verified with a Node resolve hook: zero native loads of any solid dist file. Also drops the stalessr: { external: ['solid-js'] }"TEMPORARY" override in the ssr and css-matrix examples.Full gate against published rc.7: ssr 12/12 + boundary 8/8, css-matrix 87/87 + bridge 19/19, start-ssr 486/486 (render-mode 120/120 — the six async head assertions now pass) + http-bridge 10/10 + components-warning 9/9, start-client 45/45, start-env 47/47, vite-8 vitest 1/1, cypress 1/1.