diff --git a/.changeset/pre.json b/.changeset/pre.json index a8a0dc6724..f16348b74e 100644 --- a/.changeset/pre.json +++ b/.changeset/pre.json @@ -24,7 +24,8 @@ "@solidjs/diagnostics": "2.0.0-rc.2", "effect-example": "0.0.0", "todos-server-example": "0.0.0", - "board-example": "0.0.0" + "board-example": "0.0.0", + "server-dbmon-example": "0.0.0" }, "changesets": [ "a28-writes-visible-at-flush", @@ -54,6 +55,7 @@ "affects-captured-proxy-scope", "affects-single-key", "afraid-queens-divide", + "agent-facing-links-and-text", "ai-readiness-docs-handoff", "ai-readiness-docs-pass-2", "ai-readiness-docs-pass", @@ -68,7 +70,9 @@ "async-arg-border-typing", "async-carve-reader-position", "async-landing-deps", + "async-protocol-throw-4112", "async-slot-args-value-tier", + "async-stable-order-4028", "async-store-setter-diagnostic", "async-waterfall-attribution", "attribution-enable-release-token", @@ -86,6 +90,7 @@ "avoid-reconcile-key-recompute", "awaitable-refresh", "babel-plugin-ssr-hoist-props-ts-types", + "babel-source-names-locations", "bare-client-source-suspends-as-final-hole", "behavior-claims-delegate-glue", "behavior-claims-props", @@ -101,6 +106,7 @@ "boundary-accessor-return-types", "boundary-asset-scope-leak", "boundary-fallback-once-per-show", + "boundary-held-mount-u3", "boundary-primitives-internal", "brave-heaps-refuse", "bridge-keeps-shared-references", @@ -118,6 +124,8 @@ "bump-dom-expressions-next-5", "bump-dom-expressions-next-8", "carry-live-get-grant-across-dev-rebind", + "caught-notready-store-reader", + "cheatsheet-context-over-module-state", "chunk-reader-hardening", "claim-after-initial-attributes-compilers", "claim-after-initial-attributes", @@ -125,6 +133,8 @@ "clean-bikes-teach", "cleanup-unwind-order", "cleanup-use-once-helpers", + "cleanup-write-during-landing", + "cleanup-write-during-teardown", "client-error-hook", "client-only-preload-hints", "client-only-sibling-id-drift", @@ -145,6 +155,7 @@ "compiler-server-components-attribute-slot-positions", "compiler-source-locations", "compiler-source-names-bindings", + "compiler-source-names-locations", "compiler-source-names-option", "compiler-source-names-primitives", "compiler-spread-sources-array", @@ -160,10 +171,13 @@ "context-default-less-throws", "continue-tsrx-semantic-ir", "core-hot-path-shape-alignment", + "create-deferred", + "create-root-dispose-retention", "create-root-ownership-jsdoc", "cross-package-owner-fields", "csr-hydration-seam-trim", "curly-rats-dress", + "data-attribute-types", "dedup-hydration-gate-boilerplate", "dedupe-disposal-dep-clearing", "dedupe-dispose-unobserved", @@ -199,7 +213,12 @@ "diagnostics-engine-release-token", "diagnostics-fanout-repair-projection", "diagnostics-owner-path-console-entry", + "diagnostics-remove-unserved-endpoint-methods", "diagnostics-responsiveness-gate", + "diagnostics-source-locations-diagnostics", + "diagnostics-source-locations-signals", + "diagnostics-source-locations-solid", + "diagnostics-source-locations-web", "direct-control-signal-reporting", "disable-authored-tsrx-lazy-destructuring", "docs-relocation-comment-paths", @@ -216,6 +235,7 @@ "dormant-memo-relink-on-reawaken", "drop-anchor-nav-attributes", "drop-compiler-legacy", + "drop-internal-nonce-helpers", "dynamic-async-iterable-source-type", "dynamic-binding-gate-prev-next", "dynamic-component-solid", @@ -239,7 +259,9 @@ "encrypt-flash-cookie", "enforce-provide-event-once-on-direct-calls", "enforce-provide-event-single-invocation", + "equals-pending-read-4111", "error-hook-thrower-path", + "errored-escapes-children-4116", "errored-fallback-thunk-scope", "errored-pass-tail-still-observes", "errored-shared-slot-rejection", @@ -593,6 +615,7 @@ "fold-runtime-wrappers", "for-hydration-id-parity", "format-ssr-hydration-followups", + "fragment-lazy-assets-resume", "fragment-ledger-one-reveal-owner", "fragment-reveal-policy-registry", "fragment-stylesheet-gate", @@ -611,10 +634,14 @@ "frames-bind-tier", "frames-c12-fragment-error-outcome", "frames-c13-sweep-ops-chunk", + "frames-claim-nested-region-links-once", "frames-claim-through-hydrate-window", "frames-client-externalize-wire-layer", "frames-consume-live", + "frames-data-call-hydration", "frames-data-response-scoped", + "frames-deferred-hydration", + "frames-dependency-edges", "frames-drop-dead-slot-nodes-writes", "frames-dynamic-handoff", "frames-element-seams", @@ -622,13 +649,18 @@ "frames-hold-is-pending-boundary", "frames-hydration-walk-gated-scan", "frames-identity-split", + "frames-late-mount-waterfall-4140", "frames-lazy-codec-and-op-log-compaction", "frames-live-document-face", + "frames-live-holes-wire-tier", "frames-live-slot-props-binding", "frames-live-wire-tier", + "frames-morph-wire-tier", "frames-plain-response-bound", "frames-reask-error-by-version", "frames-rebind-in-the-pass", + "frames-record-writes-walk-once", + "frames-records-wire", "frames-refetch-lands-at-commit", "frames-regions-tier", "frames-residue-1-d-list", @@ -636,6 +668,7 @@ "frames-residue-1-lean-reask", "frames-residue-3-every-fill-through-insert", "frames-residue-4-sref-table", + "frames-scoped-hole-sync", "frames-server-components-experimental", "frames-showing-refetch-settles-on-apply", "frames-single-flight-wiring", @@ -645,7 +678,9 @@ "frames-tier-mechanism", "frames-trace-update-site-wait", "frames-traces-tier", + "frames-unmarked-plain-frames", "freeze-awaited-render-head", + "fresh-boundary-child-held-u1", "fresh-loading-fallback-in-flush", "fuzzy-queens-retire", "gate-child-companion-walk", @@ -656,6 +691,7 @@ "golf-effect-ownership-flag", "graph-growth-held-navigation", "graph-growth-outlived-navigation", + "graph-growth-session-snapshot", "graph-growth", "graph-size-diagnostics", "guard-error-carried-failure-channels", @@ -667,14 +703,19 @@ "head-shell-hold-probe-seam", "heap-mark-incremental", "held-branch-reads-its-transaction", + "held-container-unread-key-4146", "held-derivation-not-a-proposal", + "held-error-waits-for-frame", + "held-sync-throw-4109", "held-truth-masks-lane-passes-only", + "hello-world-under-10kb", "hide-internal-type-exports", "hoist-web-protocol-components", "hold-consistency-batch-2", "hot-scope-fanout-aggregation", "html-braced-comments", "html-component-on-prop-getters", + "html-dynamic-tag-raw-text-attribute", "html-element-claims", "html-self-closing-raw-text", "hydrate-claim-path", @@ -694,6 +735,7 @@ "improve-tsrx-lazy-destructuring", "include-web-cookie-declarations", "initial-route-declaration", + "insert-first-run-flag", "interaction-frame-per-event", "internal-surface-followup", "internal-view-protocol-surface", @@ -716,6 +758,7 @@ "landing-rejudges-parked-transactions", "lane-drop-dead-companion-refresh", "lane-frame-children-3662", + "lane-frame-zombie-lane-dirty-4137", "lane-hold-on-observation", "lane-holds-through-boundary-content", "lane-mount-binding-reads-screen", @@ -724,6 +767,7 @@ "lane-stale-reader-unheld-lane", "lane-takeover-held-effect", "late-boundary-held-fragment-wait", + "latest-derived-held-error-4106", "latest-lazy-companion-backfill", "latest-probe-order-independence", "latest-seed-invisibility", @@ -735,9 +779,11 @@ "lazy-async-inflight-autodispose", "lazy-children-storepath", "lazy-client-only-export-option", + "lazy-code-waterfall", "lazy-hydration-failure-visibility", "lazy-hydration-id-asset-keys", "lazy-hydration-trace-mock-promise", + "lazy-memo-rebuilt-reader", "lazy-module", "lazy-nohydration-renders", "lazy-preload-assets", @@ -745,8 +791,15 @@ "lean-ssr-owner-runtime", "lemon-mails-lick", "live-address-event-stream-framing", + "live-attr-escalation-address", "live-chaos-reconnect-knob", + "live-for-async-reads", + "live-for-row-ops", "live-hole-baseline-attr-addresses", + "live-hole-for-keeps-rows", + "live-hole-latched-check", + "live-hole-slots", + "live-hole-sweep-scopes", "live-holes-server-support", "live-reference-sync-call-type", "live-response-lifetime-per-scope-takeover", @@ -757,6 +810,7 @@ "live-takeover-yields-adopted-value", "loading-errored-composition-escape", "loading-latest-shared-source-3892", + "loading-lazy-sibling-order", "loading-on-follows-frame", "loading-on-keyed-boundary-not-born-held", "loading-on-latest-is-a-capability", @@ -769,6 +823,7 @@ "lone-spread-no-merge", "long-hold-and-stricter-thresholds", "lowercase-on-is-attribute", + "map-array-subsequence-fast-paths", "maparray-nonkeyed-store-stale-row", "maparray-small-move-fast-path", "maparray-swap-commit", @@ -778,11 +833,15 @@ "missing-effect-fn-loud-failure", "mode-specific-control-flow-callbacks", "module-server-exports-register-by-value", + "morph-drops-stale-text", + "morph-skips-identical", "move-loading-wrapper-into-flow", "move-to-beta", "multi-root-pending-boundaries", "multi-source-single-flight", "multisite-server-component-hydration", + "nested-fill-context", + "nested-on-reset-boundary-u4", "nested-region-refetch-3894", "nested-stream-demand-gate-teardown", "nohydration-lazy-maparray-deps", @@ -805,6 +864,7 @@ "optimistic-chained-previous-value-3672", "optimistic-draft-reads-compose-over-staged-truth", "optimistic-draft-visibility-3665", + "optimistic-guess-over-held-slot", "optimistic-landing-fold", "optimistic-lists-drivable", "optimistic-live-echo-3898", @@ -826,6 +886,7 @@ "own-decoder-minted-rejected-promises", "own-the-single-flight-fold-before-stamping", "owned-non-lazy-memo-autodispose", + "owner-flags-slot", "owns-hold", "pass-2-collapse", "patch-channel-pay-for-use", @@ -849,6 +910,7 @@ "per-render-serialize-latch", "per-root-boundary-resume", "per-row-patch-unbinds", + "per-setter-written-keys-u8", "perf-2893-guard-cleanup", "perf-dep-revalidation-and-reconcile", "perf-footer-attribution-discovery", @@ -878,6 +940,7 @@ "projection-leaf-companions-die-with-firewall", "projection-leaf-release", "projection-lists-drivable", + "projection-owner-graph-growth", "projection-root-entity-swap", "projection-root-write-overlay", "projection-sync-throw-reaches-readers", @@ -887,15 +950,18 @@ "public-on-hydration-end", "purple-mayflies-give", "question-scoped-pending-affects", + "quiet-functions-rest", "rc-api-freeze-pass", "reaction-rearm-replaces", "read-every-body-the-transport-tees", + "rearm-boundary-scope-u9", "rebuild-buffered-request-from-parts", "recompute-preserves-disposed", "reconcile-array-object-shape-guard", "reconcile-default-id-positional-null", "reconcile-symbol-keyed-nodes", "reconcile-unchanged-presence-no-hold", + "reconcile-walk-bound", "reconcile-walk-guard-hoist", "recover-from-halt-in-dev-workflows", "recover-tsrx-editor-snapshots", @@ -906,6 +972,7 @@ "reduce-server-projection-gating", "refactor-ssr-stream-blocking", "refactor-widen-prop-value-printwidth", + "reference-fetch-meta", "refine-server-boundary-settlement", "refine-superseded-settle-invariant", "refresh-call-expr-registration", @@ -926,8 +993,10 @@ "reject-server-directive-on-methods", "reject-this-arguments-server-function-capture", "reject-unsupported-server-module-exports", + "relay-tear-measuring-effects", "release-companion-leaf-3503", "relocate-uninit-lane-check", + "remove-binding-slots", "remove-capturing-event-listeners", "remove-cjs", "remove-create-effect-single-argument-overload", @@ -954,6 +1023,7 @@ "require-client-source-commit-zero", "require-seroval-1-5-4", "require-seroval-1-6", + "respond-bigint-lazy-body", "respond-envelope-is-a-response", "response-head-lifecycle", "responsive-preload-links", @@ -962,6 +1032,7 @@ "reveal-ssr-streaming-support", "reveal-string-ssr-collapsed", "reveal-together-nested", + "revealed-fragment-before-settle", "revert-complete-store-seeds", "revert-dynamic-deferred-creation", "revert-hydrate-wait-for-records", @@ -973,6 +1044,7 @@ "scope-function-children-holes", "scope-nested-deferred-results-without-mutation", "scope-property-read-holes", + "seedless-derived-stores", "select-multiple-async-value", "serialization-decode-entry", "seroval-1-6-8-streams", @@ -981,12 +1053,15 @@ "server-boundary-records", "server-component-context-barrier", "server-component-hydration-installs-from-frames", + "server-component-site-order", "server-dev-build", "server-diagnostics-artifact", "server-diagnostics-channel", + "server-error-dedup-per-request", "server-error-hook", "server-first-value-lock", "server-fn-undefined-before-string", + "server-function-argument-types-and-nosniff", "server-function-call-observers", "server-function-data-address-split", "server-function-extension-surface", @@ -1014,6 +1089,7 @@ "settle-walk-dev-invariant", "settle-walk-invariant-completion", "settle-walk-requires-initialization", + "settled-document-holes", "sever-reveal-group-at-boundaries", "shallow-compiled-slot-channel", "shallow-slot-alignment-samevaluezero", @@ -1023,7 +1099,9 @@ "shared-cacheable-get-skips-trace", "shared-effect-status-notifier", "shared-read-predicates", + "shell-end-marker-inside-body", "shell-gate-first-apply", + "shell-grace-task", "signals-dev-cjs", "signals-disposed-stay-disposed", "silent-hold-diagnostic", @@ -1063,12 +1141,15 @@ "snapshot-boundary-assets-serialization", "snapshot-hydration-safety", "snapshot-trailing-holes", + "solid-2-0-agent-primer", "solid-native-frame-protocol-identifiers", "solid-query-gate-packs-compiler", + "solid-ships-diagnostics-json", "source-names-parity", "spec-a33-fallback-hold", "spread-direct-sources", "spread-fewer-nodes", + "spread-ref-factory-ssr", "ssr-boundary-resolve-scope-3414", "ssr-capture-source-locations", "ssr-component-names", @@ -1092,6 +1173,7 @@ "ssr-spread-static-tail", "ssr-spread-static-text-escape", "ssr-spread-walk-hot-path", + "ssr-suspend-unwind", "ssr-validate-dynamic-names", "ssrSource-effects-and-fix-server-createEffect", "ssrsource-async-iterables", @@ -1103,6 +1185,7 @@ "store-container-write-snapshot", "store-copy-own-helper", "store-deep-witness-node", + "store-delete-key-count", "store-descriptor-override-value", "store-descriptor-trap-subscribes", "store-enumerator-presence-nodes-3664", @@ -1141,6 +1224,7 @@ "store-treeshakeable-optimism", "store-untracked-born-held", "store-write-floor-narrow", + "stream-abort-cleanup-throw", "stream-demand-gate", "stream-error-drops-settled-children", "strict-untrack-warning", @@ -1156,10 +1240,12 @@ "support-tsrx-source-maps", "suppress-hydration-owned-scope-warnings", "sync-config-and-flush-nested-drain", + "sync-empty-stream-flattening", "sync-flag-control-flow-memos", "thin-badgers-move", "tighten-show-match-jsx-types", "tiny-lions-jam", + "trace-ids-math-random", "track-applied-classes", "tracked-style-class-objects", "transform-result-sees-thrown-errors", @@ -1178,6 +1264,7 @@ "until-confirmed-derivation", "until-flip-entanglement", "until-live-source-ack", + "until-truth-reads-split", "untracked-async-handler", "untracked-read-after-await", "untracked-verdict-snapshot", @@ -1199,7 +1286,9 @@ "use-head-json-script-escape", "validate-malformed-html-error", "validate-prepare-request-return", + "verdict-memo-under-held-memo-u10", "verdict-mount-first-pass-mainline", + "verdict-mount-nested-render-effect", "verdict-pull-outside-window", "verdict-reader-first-observer-holds-the-flight", "verdict-reader-silent-landing", @@ -1224,6 +1313,7 @@ "web-server-entry-treeshaking", "why-did-this-run-attribution", "woken-transaction-staged-bump", + "writable-memo-write-clears-error", "write-proposals-3494", "written-keys-bound", "zombie-chain-dev-invariant", diff --git a/examples/board/CHANGELOG.md b/examples/board/CHANGELOG.md index 9d4dcb614a..fa6abfff69 100644 --- a/examples/board/CHANGELOG.md +++ b/examples/board/CHANGELOG.md @@ -1,5 +1,64 @@ # board-example +## 0.0.1-rc.1 + +### Patch Changes + +- Updated dependencies [3d8a8a9] +- Updated dependencies [3cffd86] +- Updated dependencies [1b81476] +- Updated dependencies [b8617ec] +- Updated dependencies [86cf504] +- Updated dependencies [4a99c84] +- Updated dependencies [4a99c84] +- Updated dependencies [96b615d] +- Updated dependencies [0f64d82] +- Updated dependencies [467ac97] +- Updated dependencies [8092282] +- Updated dependencies [8163bc3] +- Updated dependencies [1bcee91] +- Updated dependencies [47a217f] +- Updated dependencies [7ad2342] +- Updated dependencies [5bc0e5e] +- Updated dependencies [2aa9e86] +- Updated dependencies [9c8930c] +- Updated dependencies [e4edd34] +- Updated dependencies [10b3f55] +- Updated dependencies [1f3b5b4] +- Updated dependencies [ccd9948] +- Updated dependencies [fda29a4] +- Updated dependencies [dbc5d00] +- Updated dependencies [0e0c043] +- Updated dependencies [7c36f2b] +- Updated dependencies [0a49dd8] +- Updated dependencies [51d005a] +- Updated dependencies [347f242] +- Updated dependencies [c5da908] +- Updated dependencies [b972757] +- Updated dependencies [8e2590e] +- Updated dependencies [8fbadfd] +- Updated dependencies [e1bf2af] +- Updated dependencies [e43e22f] +- Updated dependencies [8e2446f] +- Updated dependencies [7f8ab2d] +- Updated dependencies [3f36f77] +- Updated dependencies [8e2590e] +- Updated dependencies [eb4e019] +- Updated dependencies [dfb31ed] +- Updated dependencies [8bd7a5b] +- Updated dependencies [9ac1481] +- Updated dependencies [3e94215] +- Updated dependencies [a61c929] +- Updated dependencies [36039e2] +- Updated dependencies [46db1cf] +- Updated dependencies [3d8a8a9] +- Updated dependencies [3d8a8a9] +- Updated dependencies [4ff6580] +- Updated dependencies [8d4a285] +- Updated dependencies [8268cfd] + - solid-js@2.0.0-rc.16 + - @solidjs/web@2.0.0-rc.16 + ## 0.0.1-rc.0 ### Patch Changes diff --git a/examples/board/package.json b/examples/board/package.json index 3cce585e76..917f40d897 100644 --- a/examples/board/package.json +++ b/examples/board/package.json @@ -1,7 +1,7 @@ { "name": "board-example", "description": "A shared board over one live data source: lists of cards that several tabs drag at once, read into an optimistic store, with every write acknowledged on the stream", - "version": "0.0.1-rc.0", + "version": "0.0.1-rc.1", "private": true, "author": "Ryan Carniato", "license": "MIT", diff --git a/examples/server-dbmon/CHANGELOG.md b/examples/server-dbmon/CHANGELOG.md new file mode 100644 index 0000000000..6a43b57d3a --- /dev/null +++ b/examples/server-dbmon/CHANGELOG.md @@ -0,0 +1,60 @@ +# server-dbmon-example + +## 0.0.1-rc.0 + +### Patch Changes + +- Updated dependencies [3d8a8a9] +- Updated dependencies [3cffd86] +- Updated dependencies [1b81476] +- Updated dependencies [b8617ec] +- Updated dependencies [86cf504] +- Updated dependencies [4a99c84] +- Updated dependencies [4a99c84] +- Updated dependencies [96b615d] +- Updated dependencies [0f64d82] +- Updated dependencies [467ac97] +- Updated dependencies [8092282] +- Updated dependencies [8163bc3] +- Updated dependencies [1bcee91] +- Updated dependencies [47a217f] +- Updated dependencies [7ad2342] +- Updated dependencies [5bc0e5e] +- Updated dependencies [2aa9e86] +- Updated dependencies [9c8930c] +- Updated dependencies [e4edd34] +- Updated dependencies [10b3f55] +- Updated dependencies [1f3b5b4] +- Updated dependencies [ccd9948] +- Updated dependencies [fda29a4] +- Updated dependencies [dbc5d00] +- Updated dependencies [0e0c043] +- Updated dependencies [7c36f2b] +- Updated dependencies [0a49dd8] +- Updated dependencies [51d005a] +- Updated dependencies [347f242] +- Updated dependencies [c5da908] +- Updated dependencies [b972757] +- Updated dependencies [8e2590e] +- Updated dependencies [8fbadfd] +- Updated dependencies [e1bf2af] +- Updated dependencies [e43e22f] +- Updated dependencies [8e2446f] +- Updated dependencies [7f8ab2d] +- Updated dependencies [3f36f77] +- Updated dependencies [8e2590e] +- Updated dependencies [eb4e019] +- Updated dependencies [dfb31ed] +- Updated dependencies [8bd7a5b] +- Updated dependencies [9ac1481] +- Updated dependencies [3e94215] +- Updated dependencies [a61c929] +- Updated dependencies [36039e2] +- Updated dependencies [46db1cf] +- Updated dependencies [3d8a8a9] +- Updated dependencies [3d8a8a9] +- Updated dependencies [4ff6580] +- Updated dependencies [8d4a285] +- Updated dependencies [8268cfd] + - solid-js@2.0.0-rc.16 + - @solidjs/web@2.0.0-rc.16 diff --git a/examples/server-dbmon/package.json b/examples/server-dbmon/package.json index 0a84396431..4ec2789cc4 100644 --- a/examples/server-dbmon/package.json +++ b/examples/server-dbmon/package.json @@ -1,7 +1,7 @@ { "name": "server-dbmon-example", "description": "DBMon as a live server component: a monitoring dashboard whose data lives on the server, rendered there and streamed to every open tab as it changes", - "version": "0.0.0", + "version": "0.0.1-rc.0", "private": true, "author": "Ryan Carniato", "license": "MIT", diff --git a/examples/todos-server/CHANGELOG.md b/examples/todos-server/CHANGELOG.md index f7eee87adb..8a22711eb9 100644 --- a/examples/todos-server/CHANGELOG.md +++ b/examples/todos-server/CHANGELOG.md @@ -1,5 +1,64 @@ # todos-server-example +## 0.0.1-rc.4 + +### Patch Changes + +- Updated dependencies [3d8a8a9] +- Updated dependencies [3cffd86] +- Updated dependencies [1b81476] +- Updated dependencies [b8617ec] +- Updated dependencies [86cf504] +- Updated dependencies [4a99c84] +- Updated dependencies [4a99c84] +- Updated dependencies [96b615d] +- Updated dependencies [0f64d82] +- Updated dependencies [467ac97] +- Updated dependencies [8092282] +- Updated dependencies [8163bc3] +- Updated dependencies [1bcee91] +- Updated dependencies [47a217f] +- Updated dependencies [7ad2342] +- Updated dependencies [5bc0e5e] +- Updated dependencies [2aa9e86] +- Updated dependencies [9c8930c] +- Updated dependencies [e4edd34] +- Updated dependencies [10b3f55] +- Updated dependencies [1f3b5b4] +- Updated dependencies [ccd9948] +- Updated dependencies [fda29a4] +- Updated dependencies [dbc5d00] +- Updated dependencies [0e0c043] +- Updated dependencies [7c36f2b] +- Updated dependencies [0a49dd8] +- Updated dependencies [51d005a] +- Updated dependencies [347f242] +- Updated dependencies [c5da908] +- Updated dependencies [b972757] +- Updated dependencies [8e2590e] +- Updated dependencies [8fbadfd] +- Updated dependencies [e1bf2af] +- Updated dependencies [e43e22f] +- Updated dependencies [8e2446f] +- Updated dependencies [7f8ab2d] +- Updated dependencies [3f36f77] +- Updated dependencies [8e2590e] +- Updated dependencies [eb4e019] +- Updated dependencies [dfb31ed] +- Updated dependencies [8bd7a5b] +- Updated dependencies [9ac1481] +- Updated dependencies [3e94215] +- Updated dependencies [a61c929] +- Updated dependencies [36039e2] +- Updated dependencies [46db1cf] +- Updated dependencies [3d8a8a9] +- Updated dependencies [3d8a8a9] +- Updated dependencies [4ff6580] +- Updated dependencies [8d4a285] +- Updated dependencies [8268cfd] + - solid-js@2.0.0-rc.16 + - @solidjs/web@2.0.0-rc.16 + ## 0.0.1-rc.3 ### Patch Changes diff --git a/examples/todos-server/package.json b/examples/todos-server/package.json index 34e4dddf17..e240de3c6d 100644 --- a/examples/todos-server/package.json +++ b/examples/todos-server/package.json @@ -1,7 +1,7 @@ { "name": "todos-server-example", "description": "TodoMVC as a Solid Server Component — the list is server markup whose every control is a form that works without JavaScript; with it, a submission's aria-busy mark shows the intent through CSS and typed errors come back through useSubmissions", - "version": "0.0.1-rc.3", + "version": "0.0.1-rc.4", "private": true, "author": "Ryan Carniato", "license": "MIT", diff --git a/packages/babel-plugin/CHANGELOG.md b/packages/babel-plugin/CHANGELOG.md index 25c8b53def..baae155c55 100644 --- a/packages/babel-plugin/CHANGELOG.md +++ b/packages/babel-plugin/CHANGELOG.md @@ -1,5 +1,13 @@ # @solidjs/babel-plugin +## 2.0.0-rc.16 + +### Patch Changes + +- 4a99c84: `sourceNames` gains a `locations` kind (and the plugin a `root` option): component and binding labels carry a `file:line:col` for diagnostics. `createComponent(Home, props, "Home", "src/App.tsx:12:5")` points at the ``) where the server's markup needs client behavior, or a form `action` for a mutation. Removed with them: the `BindingSlot`, `SlotOutput` and `SlotError` types, the lazy `@solidjs/web/frames/bind` entry and its `"bind"` tier, the `_s:*` position markers and the compiled `ssrClaim` hole, the effect of the `serverComponents` compiler option (`@solidjs/compiler` and `@solidjs/babel-plugin` still accept it, so existing build configs keep working, and ignore it), and the `BINDING_SLOT_POSITION` diagnostic code (`@solidjs/signals`' `DiagnosticCode`, `solid-js`'s `diagnostics.json`). Ordinary slots, their `slot:` ranges and records, and `$key` are unchanged. +- d0ba31c: SSR evaluates a `ref` expression beside a spread, as it already does without one, so a ref factory's owned setup (`ref={tooltip()}`) runs on the server too and the hydration ids after it line up. The ref itself is still never called on the server (#4081). Under `serverComponents` the same holds outside a server component's render, where a ref expression was never evaluated on either path; inside one the claim evaluates it, once. + ## 2.0.0-rc.15 ### Patch Changes diff --git a/packages/babel-plugin/package.json b/packages/babel-plugin/package.json index 167eedecb3..65af0a4d88 100644 --- a/packages/babel-plugin/package.json +++ b/packages/babel-plugin/package.json @@ -1,7 +1,7 @@ { "name": "@solidjs/babel-plugin", "description": "Babel compiler plugin for Solid templates", - "version": "2.0.0-rc.15", + "version": "2.0.0-rc.16", "author": "Ryan Carniato", "license": "MIT", "repository": { diff --git a/packages/compiler/CHANGELOG.md b/packages/compiler/CHANGELOG.md index e68cb497e0..edc695755b 100644 --- a/packages/compiler/CHANGELOG.md +++ b/packages/compiler/CHANGELOG.md @@ -1,5 +1,16 @@ # @solidjs/compiler +## 2.0.0-rc.16 + +### Patch Changes + +- 4a99c84: `sourceNames` gains a `locations` kind and `transform()` a `root` option: component and binding labels carry a `file:line:col` for diagnostics, printed the same as `@solidjs/babel-plugin`'s. `createComponent(Home, props, "Home", "src/App.tsx:12:5")` points at the ``) where the server's markup needs client behavior, or a form `action` for a mutation. Removed with them: the `BindingSlot`, `SlotOutput` and `SlotError` types, the lazy `@solidjs/web/frames/bind` entry and its `"bind"` tier, the `_s:*` position markers and the compiled `ssrClaim` hole, the effect of the `serverComponents` compiler option (`@solidjs/compiler` and `@solidjs/babel-plugin` still accept it, so existing build configs keep working, and ignore it), and the `BINDING_SLOT_POSITION` diagnostic code (`@solidjs/signals`' `DiagnosticCode`, `solid-js`'s `diagnostics.json`). Ordinary slots, their `slot:` ranges and records, and `$key` are unchanged. +- d0ba31c: SSR evaluates a `ref` expression beside a spread, as it already does without one, so a ref factory's owned setup (`ref={tooltip()}`) runs on the server too and the hydration ids after it line up. The ref itself is still never called on the server (#4081). Under `serverComponents` the same holds outside a server component's render, where a ref expression was never evaluated on either path; inside one the claim evaluates it, once. + ## 2.0.0-rc.15 ### Patch Changes diff --git a/packages/compiler/npm/darwin-arm64/package.json b/packages/compiler/npm/darwin-arm64/package.json index f0a9c96dcf..81a2548cd9 100644 --- a/packages/compiler/npm/darwin-arm64/package.json +++ b/packages/compiler/npm/darwin-arm64/package.json @@ -1,6 +1,6 @@ { "name": "@solidjs/compiler-darwin-arm64", - "version": "2.0.0-rc.15", + "version": "2.0.0-rc.16", "cpu": [ "arm64" ], diff --git a/packages/compiler/npm/darwin-x64/package.json b/packages/compiler/npm/darwin-x64/package.json index e98b6341e0..528f4d08cc 100644 --- a/packages/compiler/npm/darwin-x64/package.json +++ b/packages/compiler/npm/darwin-x64/package.json @@ -1,6 +1,6 @@ { "name": "@solidjs/compiler-darwin-x64", - "version": "2.0.0-rc.15", + "version": "2.0.0-rc.16", "cpu": [ "x64" ], diff --git a/packages/compiler/npm/linux-arm64-gnu/package.json b/packages/compiler/npm/linux-arm64-gnu/package.json index 4d63958f93..3c24d6127e 100644 --- a/packages/compiler/npm/linux-arm64-gnu/package.json +++ b/packages/compiler/npm/linux-arm64-gnu/package.json @@ -1,6 +1,6 @@ { "name": "@solidjs/compiler-linux-arm64-gnu", - "version": "2.0.0-rc.15", + "version": "2.0.0-rc.16", "cpu": [ "arm64" ], diff --git a/packages/compiler/npm/linux-x64-gnu/package.json b/packages/compiler/npm/linux-x64-gnu/package.json index b54d372515..ad8fd964ea 100644 --- a/packages/compiler/npm/linux-x64-gnu/package.json +++ b/packages/compiler/npm/linux-x64-gnu/package.json @@ -1,6 +1,6 @@ { "name": "@solidjs/compiler-linux-x64-gnu", - "version": "2.0.0-rc.15", + "version": "2.0.0-rc.16", "cpu": [ "x64" ], diff --git a/packages/compiler/npm/wasm32-wasi/package.json b/packages/compiler/npm/wasm32-wasi/package.json index 2d39756c5b..ad96f632dc 100644 --- a/packages/compiler/npm/wasm32-wasi/package.json +++ b/packages/compiler/npm/wasm32-wasi/package.json @@ -1,6 +1,6 @@ { "name": "@solidjs/compiler-wasm32-wasi", - "version": "2.0.0-rc.15", + "version": "2.0.0-rc.16", "main": "compiler.wasi.cjs", "files": [ "compiler.wasm32-wasi.wasm", diff --git a/packages/compiler/npm/win32-x64-msvc/package.json b/packages/compiler/npm/win32-x64-msvc/package.json index acc04e455b..ee55fe37cc 100644 --- a/packages/compiler/npm/win32-x64-msvc/package.json +++ b/packages/compiler/npm/win32-x64-msvc/package.json @@ -1,6 +1,6 @@ { "name": "@solidjs/compiler-win32-x64-msvc", - "version": "2.0.0-rc.15", + "version": "2.0.0-rc.16", "cpu": [ "x64" ], diff --git a/packages/compiler/package.json b/packages/compiler/package.json index bef9cda311..d80200a94e 100644 --- a/packages/compiler/package.json +++ b/packages/compiler/package.json @@ -1,7 +1,7 @@ { "name": "@solidjs/compiler", "description": "Solid's native Oxc JSX compiler", - "version": "2.0.0-rc.15", + "version": "2.0.0-rc.16", "author": "Ryan Carniato", "license": "MIT", "repository": { @@ -62,11 +62,11 @@ "emnapi": "^1.11.3" }, "optionalDependencies": { - "@solidjs/compiler-darwin-x64": "2.0.0-rc.15", - "@solidjs/compiler-darwin-arm64": "2.0.0-rc.15", - "@solidjs/compiler-linux-x64-gnu": "2.0.0-rc.15", - "@solidjs/compiler-linux-arm64-gnu": "2.0.0-rc.15", - "@solidjs/compiler-win32-x64-msvc": "2.0.0-rc.15", - "@solidjs/compiler-wasm32-wasi": "2.0.0-rc.15" + "@solidjs/compiler-darwin-x64": "2.0.0-rc.16", + "@solidjs/compiler-darwin-arm64": "2.0.0-rc.16", + "@solidjs/compiler-linux-x64-gnu": "2.0.0-rc.16", + "@solidjs/compiler-linux-arm64-gnu": "2.0.0-rc.16", + "@solidjs/compiler-win32-x64-msvc": "2.0.0-rc.16", + "@solidjs/compiler-wasm32-wasi": "2.0.0-rc.16" } } diff --git a/packages/diagnostics/CHANGELOG.md b/packages/diagnostics/CHANGELOG.md index 7d14621ec8..a77e22e8f0 100644 --- a/packages/diagnostics/CHANGELOG.md +++ b/packages/diagnostics/CHANGELOG.md @@ -1,5 +1,99 @@ # @solidjs/diagnostics +## 2.0.0-rc.16 + +### Patch Changes + +- 3d8a8a9: Diagnostics protocol: removed the `holds` and `feedback` entries from `DiagnosticsMethods` (and so from `DiagnosticsMethod`, `DiagnosticsRequest`, `DiagnosticsResponse`) in `@solidjs/diagnostics/protocol`. The `/__solid/diagnostics` dev-server endpoint never served them; it answers `begin`, `end`, `active`, `whyDidRun` and `costs`, and the holds and feedback tables arrive in the `end` payload (`attribution.holds`, `attribution.feedback`). The in-page bridge's `holds()`/`feedback()` queries are unchanged. The agent-loops skill's endpoint example no longer lists a `feedback` call. +- 4a99c84: Captured findings carry `loc` (the source location the runtime resolved, `file:line:col`) as a plain event field through artifacts and the JSONL form; assertion failures print it with the rest of the offending event. +- 3d8a8a9: Ship the Solid 2.0 primer for coding agents as the `solid-2.0` skill, emit `CHEATSHEET.md` as the `solid-2.0-cheatsheet` skill on build, give every shipped skill the `name`/`description` frontmatter the Agent Skills format requires, and add the `tanstack-intent` keyword so skill registries discover them in `node_modules`. +- Updated dependencies [3d8a8a9] +- Updated dependencies [a9b9f9e] +- Updated dependencies [3cffd86] +- Updated dependencies [a7fe050] +- Updated dependencies [52008d9] +- Updated dependencies [1b81476] +- Updated dependencies [0b6765f] +- Updated dependencies [a2743fa] +- Updated dependencies [b8617ec] +- Updated dependencies [3643c5e] +- Updated dependencies [86cf504] +- Updated dependencies [4a99c84] +- Updated dependencies [4a99c84] +- Updated dependencies [4a99c84] +- Updated dependencies [96b615d] +- Updated dependencies [2172a37] +- Updated dependencies [0f64d82] +- Updated dependencies [467ac97] +- Updated dependencies [8092282] +- Updated dependencies [8163bc3] +- Updated dependencies [1bcee91] +- Updated dependencies [47a217f] +- Updated dependencies [7ad2342] +- Updated dependencies [5bc0e5e] +- Updated dependencies [2aa9e86] +- Updated dependencies [9c8930c] +- Updated dependencies [e4edd34] +- Updated dependencies [10b3f55] +- Updated dependencies [1f3b5b4] +- Updated dependencies [61c4436] +- Updated dependencies [a39acdd] +- Updated dependencies [667dcff] +- Updated dependencies [0bda987] +- Updated dependencies [fb6006e] +- Updated dependencies [ccd9948] +- Updated dependencies [fda29a4] +- Updated dependencies [1b2406d] +- Updated dependencies [7093b07] +- Updated dependencies [dbc5d00] +- Updated dependencies [6371b91] +- Updated dependencies [0e0c043] +- Updated dependencies [7c36f2b] +- Updated dependencies [0a49dd8] +- Updated dependencies [51d005a] +- Updated dependencies [347f242] +- Updated dependencies [c5da908] +- Updated dependencies [b972757] +- Updated dependencies [8e2590e] +- Updated dependencies [f3973ea] +- Updated dependencies [8fbadfd] +- Updated dependencies [e1bf2af] +- Updated dependencies [e43e22f] +- Updated dependencies [c12c420] +- Updated dependencies [a2d5669] +- Updated dependencies [5c8ec96] +- Updated dependencies [4bc7969] +- Updated dependencies [d3cddff] +- Updated dependencies [7014aca] +- Updated dependencies [c2513e3] +- Updated dependencies [8e2446f] +- Updated dependencies [7f8ab2d] +- Updated dependencies [32652bb] +- Updated dependencies [3f36f77] +- Updated dependencies [8e2590e] +- Updated dependencies [eb4e019] +- Updated dependencies [dfb31ed] +- Updated dependencies [8bd7a5b] +- Updated dependencies [9ac1481] +- Updated dependencies [3e94215] +- Updated dependencies [a61c929] +- Updated dependencies [36039e2] +- Updated dependencies [46db1cf] +- Updated dependencies [3d8a8a9] +- Updated dependencies [3d8a8a9] +- Updated dependencies [4ff6580] +- Updated dependencies [f420740] +- Updated dependencies [8d4a285] +- Updated dependencies [745e807] +- Updated dependencies [8268cfd] +- Updated dependencies [3fc5551] +- Updated dependencies [42c2568] +- Updated dependencies [dc063a6] +- Updated dependencies [71153bf] + - solid-js@2.0.0-rc.16 + - @solidjs/signals@2.0.0-rc.16 + - @solidjs/web@2.0.0-rc.16 + ## 2.0.0-rc.15 ### Patch Changes diff --git a/packages/diagnostics/package.json b/packages/diagnostics/package.json index 1b82a9bffd..3190eb27d4 100644 --- a/packages/diagnostics/package.json +++ b/packages/diagnostics/package.json @@ -1,6 +1,6 @@ { "name": "@solidjs/diagnostics", - "version": "2.0.0-rc.15", + "version": "2.0.0-rc.16", "description": "Agent-consumable diagnostics harness for Solid: capture the dev-mode diagnostic and attribution channels as structured artifacts, with assertion helpers for tests and agent loops.", "author": "Ryan Carniato", "license": "MIT", @@ -52,11 +52,11 @@ "test:watch": "vitest watch tests" }, "dependencies": { - "@solidjs/signals": "^2.0.0-rc.15" + "@solidjs/signals": "^2.0.0-rc.16" }, "peerDependencies": { - "@solidjs/web": "^2.0.0-rc.15", - "solid-js": "^2.0.0-rc.15", + "@solidjs/web": "^2.0.0-rc.16", + "solid-js": "^2.0.0-rc.16", "vitest": ">=2.0.0" }, "peerDependenciesMeta": { diff --git a/packages/element/CHANGELOG.md b/packages/element/CHANGELOG.md index 32e4d0c311..c3c180d9c7 100644 --- a/packages/element/CHANGELOG.md +++ b/packages/element/CHANGELOG.md @@ -1,5 +1,64 @@ # solid-element +## 2.0.0-rc.16 + +### Patch Changes + +- Updated dependencies [3d8a8a9] +- Updated dependencies [3cffd86] +- Updated dependencies [1b81476] +- Updated dependencies [b8617ec] +- Updated dependencies [86cf504] +- Updated dependencies [4a99c84] +- Updated dependencies [4a99c84] +- Updated dependencies [96b615d] +- Updated dependencies [0f64d82] +- Updated dependencies [467ac97] +- Updated dependencies [8092282] +- Updated dependencies [8163bc3] +- Updated dependencies [1bcee91] +- Updated dependencies [47a217f] +- Updated dependencies [7ad2342] +- Updated dependencies [5bc0e5e] +- Updated dependencies [2aa9e86] +- Updated dependencies [9c8930c] +- Updated dependencies [e4edd34] +- Updated dependencies [10b3f55] +- Updated dependencies [1f3b5b4] +- Updated dependencies [ccd9948] +- Updated dependencies [fda29a4] +- Updated dependencies [dbc5d00] +- Updated dependencies [0e0c043] +- Updated dependencies [7c36f2b] +- Updated dependencies [0a49dd8] +- Updated dependencies [51d005a] +- Updated dependencies [347f242] +- Updated dependencies [c5da908] +- Updated dependencies [b972757] +- Updated dependencies [8e2590e] +- Updated dependencies [8fbadfd] +- Updated dependencies [e1bf2af] +- Updated dependencies [e43e22f] +- Updated dependencies [8e2446f] +- Updated dependencies [7f8ab2d] +- Updated dependencies [3f36f77] +- Updated dependencies [8e2590e] +- Updated dependencies [eb4e019] +- Updated dependencies [dfb31ed] +- Updated dependencies [8bd7a5b] +- Updated dependencies [9ac1481] +- Updated dependencies [3e94215] +- Updated dependencies [a61c929] +- Updated dependencies [36039e2] +- Updated dependencies [46db1cf] +- Updated dependencies [3d8a8a9] +- Updated dependencies [3d8a8a9] +- Updated dependencies [4ff6580] +- Updated dependencies [8d4a285] +- Updated dependencies [8268cfd] + - solid-js@2.0.0-rc.16 + - @solidjs/web@2.0.0-rc.16 + ## 2.0.0-rc.15 ### Patch Changes diff --git a/packages/element/package.json b/packages/element/package.json index 2128f7608a..e047222aa8 100644 --- a/packages/element/package.json +++ b/packages/element/package.json @@ -3,7 +3,7 @@ "description": "Webcomponents wrapper for Solid", "author": "Ryan Carniato", "license": "MIT", - "version": "2.0.0-rc.15", + "version": "2.0.0-rc.16", "homepage": "https://github.com/solidjs/solid/blob/next/packages/element#readme", "repository": { "type": "git", @@ -30,8 +30,8 @@ "component-register": "^0.8.7" }, "peerDependencies": { - "solid-js": "^2.0.0-rc.15", - "@solidjs/web": "^2.0.0-rc.15" + "solid-js": "^2.0.0-rc.16", + "@solidjs/web": "^2.0.0-rc.16" }, "devDependencies": { "solid-js": "workspace:*", diff --git a/packages/h/CHANGELOG.md b/packages/h/CHANGELOG.md index 30b7b695b6..e0356b650f 100644 --- a/packages/h/CHANGELOG.md +++ b/packages/h/CHANGELOG.md @@ -1,5 +1,52 @@ # @solidjs/h +## 2.0.0-rc.16 + +### Patch Changes + +- 86cf504: `data-*` attributes type-check in props objects (`ComponentProps<"div">`, `JSX.HTMLAttributes`), not only in JSX: a template-literal index signature on `ElementAttributes` (#4082). +- Updated dependencies [3d8a8a9] +- Updated dependencies [3cffd86] +- Updated dependencies [86cf504] +- Updated dependencies [4a99c84] +- Updated dependencies [96b615d] +- Updated dependencies [8092282] +- Updated dependencies [8163bc3] +- Updated dependencies [1bcee91] +- Updated dependencies [47a217f] +- Updated dependencies [7ad2342] +- Updated dependencies [5bc0e5e] +- Updated dependencies [2aa9e86] +- Updated dependencies [9c8930c] +- Updated dependencies [e4edd34] +- Updated dependencies [10b3f55] +- Updated dependencies [1f3b5b4] +- Updated dependencies [ccd9948] +- Updated dependencies [fda29a4] +- Updated dependencies [0e0c043] +- Updated dependencies [0a49dd8] +- Updated dependencies [347f242] +- Updated dependencies [c5da908] +- Updated dependencies [b972757] +- Updated dependencies [8e2590e] +- Updated dependencies [8fbadfd] +- Updated dependencies [e1bf2af] +- Updated dependencies [e43e22f] +- Updated dependencies [8e2446f] +- Updated dependencies [7f8ab2d] +- Updated dependencies [3f36f77] +- Updated dependencies [8e2590e] +- Updated dependencies [8bd7a5b] +- Updated dependencies [9ac1481] +- Updated dependencies [3e94215] +- Updated dependencies [a61c929] +- Updated dependencies [36039e2] +- Updated dependencies [46db1cf] +- Updated dependencies [3d8a8a9] +- Updated dependencies [8d4a285] +- Updated dependencies [8268cfd] + - @solidjs/web@2.0.0-rc.16 + ## 2.0.0-rc.15 ### Patch Changes diff --git a/packages/h/package.json b/packages/h/package.json index 5be980f662..a412b9fdfd 100644 --- a/packages/h/package.json +++ b/packages/h/package.json @@ -1,7 +1,7 @@ { "name": "@solidjs/h", "description": "Hyperscript / h() factory for Solid — write components without compiled JSX.", - "version": "2.0.0-rc.15", + "version": "2.0.0-rc.16", "author": "Ryan Carniato", "license": "MIT", "homepage": "https://solidjs.com", @@ -58,7 +58,7 @@ "test": "vitest run" }, "peerDependencies": { - "@solidjs/web": "^2.0.0-rc.15" + "@solidjs/web": "^2.0.0-rc.16" }, "devDependencies": { "@solidjs/web": "workspace:*", diff --git a/packages/html/CHANGELOG.md b/packages/html/CHANGELOG.md index 261584cfdb..1ec7280938 100644 --- a/packages/html/CHANGELOG.md +++ b/packages/html/CHANGELOG.md @@ -1,5 +1,52 @@ # @solidjs/html +## 2.0.0-rc.16 + +### Patch Changes + +- 22d3ea1: Fix the tokenizer treating the first attribute of a dynamic tag as its tag name. `<${Comp} title="...">` or `<${Comp} style=${...}>` entered raw text mode, so the children were read as text and parsing failed with "Unclosed tag". +- Updated dependencies [3d8a8a9] +- Updated dependencies [3cffd86] +- Updated dependencies [86cf504] +- Updated dependencies [4a99c84] +- Updated dependencies [96b615d] +- Updated dependencies [8092282] +- Updated dependencies [8163bc3] +- Updated dependencies [1bcee91] +- Updated dependencies [47a217f] +- Updated dependencies [7ad2342] +- Updated dependencies [5bc0e5e] +- Updated dependencies [2aa9e86] +- Updated dependencies [9c8930c] +- Updated dependencies [e4edd34] +- Updated dependencies [10b3f55] +- Updated dependencies [1f3b5b4] +- Updated dependencies [ccd9948] +- Updated dependencies [fda29a4] +- Updated dependencies [0e0c043] +- Updated dependencies [0a49dd8] +- Updated dependencies [347f242] +- Updated dependencies [c5da908] +- Updated dependencies [b972757] +- Updated dependencies [8e2590e] +- Updated dependencies [8fbadfd] +- Updated dependencies [e1bf2af] +- Updated dependencies [e43e22f] +- Updated dependencies [8e2446f] +- Updated dependencies [7f8ab2d] +- Updated dependencies [3f36f77] +- Updated dependencies [8e2590e] +- Updated dependencies [8bd7a5b] +- Updated dependencies [9ac1481] +- Updated dependencies [3e94215] +- Updated dependencies [a61c929] +- Updated dependencies [36039e2] +- Updated dependencies [46db1cf] +- Updated dependencies [3d8a8a9] +- Updated dependencies [8d4a285] +- Updated dependencies [8268cfd] + - @solidjs/web@2.0.0-rc.16 + ## 2.0.0-rc.15 ### Patch Changes diff --git a/packages/html/package.json b/packages/html/package.json index daae0334c4..64b4916062 100644 --- a/packages/html/package.json +++ b/packages/html/package.json @@ -1,7 +1,7 @@ { "name": "@solidjs/html", "description": "Tagged-template-literal templating for Solid — write components with no build step.", - "version": "2.0.0-rc.15", + "version": "2.0.0-rc.16", "author": "Ryan Carniato", "license": "MIT", "homepage": "https://solidjs.com", @@ -42,7 +42,7 @@ "test": "vitest run" }, "peerDependencies": { - "@solidjs/web": "^2.0.0-rc.15" + "@solidjs/web": "^2.0.0-rc.16" }, "devDependencies": { "@solidjs/web": "workspace:*", diff --git a/packages/signals/CHANGELOG.md b/packages/signals/CHANGELOG.md index 009b10ef46..5c80a96916 100644 --- a/packages/signals/CHANGELOG.md +++ b/packages/signals/CHANGELOG.md @@ -1,5 +1,61 @@ # @solidjs/signals +## 2.0.0-rc.16 + +### Patch Changes + +- 3d8a8a9: Point JSDoc `@description` links at the 2.0 reference docs (v2.solidjs.com), document `isPending`, point the console footer, diagnostics guide and cheatsheet links at the `next` branch, and replace the stale `onMount` advice in the server-side client-only API error. +- a9b9f9e: Route synchronous throws from the async iterator / thenable protocol (a later `next()`, a step's `then`, or deferred iterator setup) to the owning memo's error handling instead of escaping as unhandled rejections, and make `StatusError` message formatting best-effort so it never replaces the original error (#4112). +- a7fe050: A Loading boundary mounted by a pass that joined a hold appears at that hold's commit, its fallback never shown (D-13, U-3). Before, the boundary's content was caught as a fresh mount and the fallback published at once (or, for a `` that opens when a flight lands, flashed at the landing before the content). A first pass born into the flush's hold is now the hold's, not the boundary's: the content reads with the hold and the whole mount appears at its commit. A mount made by a verdict reader (`latest` in a ``) is still mainline and shows the fallback while the hold is up. +- 52008d9: An effect or memo that catches the `NotReadyError` from reading an async derived store (`createStore(async fn, seed)`, `createProjection`) now re-runs when the store's flight lands, as it does for an async memo (#4070). +- 0b6765f: A signal write from an `onCleanup` that a transition's landing runs no longer leaves the landed transaction as the next flush's: later transitions commit again instead of parking forever (#4089). +- a2743fa: Allow writes in cleanups during teardown (#4165). Removing a keyed `` row ran the row's cleanups inside the list's pass, so a setter in an `onCleanup` or `onSettled` cleanup was rejected in development as a write in an owned scope, which halted reactivity. A cleanup is teardown, not part of the computation disposing it, so the dev-only owned-scope write check now stands down while cleanups run. Cleanups keep their owner and context, and production builds are unchanged. +- b8617ec: `createDeferred(fn, options?)`: an async memo that may lag, but never leads. Before its first answer it is an ordinary async memo (readers suspend to ``, or `loadingValue` shows). After it, a refetch holds nothing: readers keep the previous answer until the new one lands, the rest of the screen moves on, and `isPending` reports the refetch on the node and on everything derived from it, store keys included. A refetch that read a held value lands with that hold. A rejection errors like any memo. `refresh(d)` is a quiet re-ask, and `await refresh(d)` and `until` wait for the landing. It is `createMemo` on the server and hydrates like one. + + The rules: F-1 and F-2 are amended for declared lag, and D-40 / S-41 are new. The `affects()` mark core moved to its own module (`affects-marks.ts`), which `createDeferred` shares. A mark on the source of a derived store now covers that store's keys. + +- 3643c5e: A `createRoot` dispose function no longer keeps the root's `init` function (and everything it closes over) alive while it is held (#4095). +- 4a99c84: Diagnostics carry a source location. `NodeOptions.loc` and `StoreOptions.loc` (`file:line:col`, root-relative — written by the compiler's `sourceNames` `locations` kind, not by hand) land in a `_loc` slot beside `_name` on the observe/dev node literals; store property nodes carry their store's. `DiagnosticEvent.loc` is the innermost located node on the subject's chain (its own `loc`, else the first up the owners — a signal through its registering owner), found in `emitDiagnostic` the way `ownerPath` is; a host event that sets it keeps it. `reportDiagnostic` prints it as an `at` line after the `in` line — `at src/App.tsx:18:3`, or in a browser `at http://localhost:5173/src/App.tsx:18:3`, which the devtools link to the Sources panel. `DEV.guideUrl(code)` now returns the code's page on the docs site (`https://v2.solidjs.com/reference/solid-js/diagnostics/`). +- 2172a37: A custom `equals` that reads an unresolved async source (a getter over a pending memo) no longer leaves the memo stuck on a `NotReadyError` nothing retries. A comparator that throws `NotReadyError` has not shown the values equal, so the value is published as a change; its readers dereference it in their own tracked context, suspend under their `` boundary and recover when the async work lands (#4111). Other comparator throws are still errors of the node, and a signal setter's comparator throw now takes the same path (its error boundary contains it) instead of throwing at the caller. +- 1bcee91: Server components hydrate their client slot occurrences on demand. The adoption pass mounts none of them; an occurrence mounts when an event lands in it (outermost first, before the event reaches a handler), before any signal or store write applies (every remaining occurrence, against the server's state), or in idle slices after the load event. Hydration stays in progress until the last one has mounted. The write side is an internal pre-write hook in `@solidjs/signals`, tree-shaken from apps without server components. +- 47a217f: Frames: a signal or store write during deferred hydration mounts only the slot occurrences the server recorded as its readers, then applies, instead of mounting every pending occurrence first. The server names plain signals (`~`) and plain stores (by their root) in server-component renders and emits `sc:deps` records per frame; writes it cannot vouch for (unnamed, derived, optimistic, projection or wide sources) still mount everything first. Apps without server components keep their sizes and code paths. +- 61c4436: An async memo created inside a fresh Loading boundary over a held value no longer lands its first answer before the hold commits (D-12, U-1). The boundary still catches it and shows its fallback, and the hold still does not wait for it: its answer is staged with the hold and appears no earlier than the hold's commit. A boundary re-armed by `on` keeps owning what it collects outright. +- a39acdd: `GRAPH_GROWTH` no longer reports long-lived state that the page just left also read. What outlived a navigation was the set of nodes reachable as that one navigation opened, and the walk reaches a module-level source (solid-refresh's per-component registry signal in dev, a global store) only through a page that reads it. So arriving at a route from pages sharing more and more of its components, or of its global state, read as growth with nothing leaked. The nodes met as navigations open now go into one set kept for the session, so such a source counts the same at every settle once met, and only what keeps accumulating climbs. Leaked roots, ownerless effects and per-visit subscriptions still report as before. Fixes #4101. +- 667dcff: A write to a store key that nothing reads no longer waits for an unrelated action that is holding a sibling key on the same record (#4146). Before this fix, if a transaction held the record's container (an action wrote `card.version` and was still pending), a later setter outside that action writing `card.text` put the new value into the held staging. Plain reads of `card.text` then showed the old value until the action finished. With a live render effect reading `card.text`, the same write showed up at the next flush, because the effect's leaf node gave the key its own staging. Node existence is now unobservable here too (R1, #3706: a hold covers individual keys). The setter creates the key's leaf before writing, from the committed and staged values, so the leaf starts out unstaged and held by no transaction. The write then stages on that leaf and becomes visible at the flush (A28). A leaf on a held container is kept alive until the hold lands, so disposing a reader cannot pull the key back into the hold. A write to a key the hold itself changed still joins the hold (A34). Array elements follow the same per-key rule, so writing an index the hold left unchanged also shows at the flush. An added key, or an index appended to a held array, now behaves the same whether or not something reads it: its value shows at the flush, while the record's key list (or the array's length) still waits for the hold to land. +- 0bda987: An error is an answer: it ends the wait like a value, and it shows when a value would (D-41). A rejection or throw on a node a transaction holds is staged and published with the frame that carries it: until then the screen, an untracked read, `createEffect`'s error arm and `` keep the previous frame, `isPending` is `true`, `latest` throws the proposed error, and `resolve`/`until`/`refresh` reject at the landing. A held recovery keeps the shown error until its own commit, and a recovery equal to the last good value now reaches effects, held or not (it was swallowed by the equality gate). Replaces the separate staged-error publish path. From #3886's audit (GabbeV). +- fb6006e: A synchronous memo that throws in a flush that later holds now waits for its frame like a value (D-41, #4109). The error was staged only when the flush had already joined a hold, so a pass that ran before its async sibling went pending published the error at once: an untracked read (a click handler) threw while the screen still showed the committed value. + + A later pass of the same node replaces a staged error: a value, a pending flight or a new error supersedes it, so the value is no longer thrown as an error (#4145) and the superseded error is no longer published at the commit. + +- ccd9948: Smaller floor bundles: the optional engines (lanes, verdicts, boundaries, stores, affects, external sources) install their scheduler hooks as module variables, so an app that never loads them no longer retains their paths in `recompute`, `read` and the settle step; client-only `render` no longer retains hydration text adoption, and the delegated dispatcher drops dead guards. The JSX hello world goes from 10.35 KB to 9.75 KB brotli. +- 1b2406d: A child under a non-keyed `` no longer re-runs after its condition goes falsy inside an open action (#4137). When the branch is lane work — its row was added by an optimistic write — and a later pass of the same lane withdraws it, the Show parks the branch as a lane frame (#3698): it stays on screen until the lane's apply retires it. The condition's re-staging marked the parked child as the lane's work, and since the L2 rewrite (rc.14) a lane-dirty zombie ran at once, so the child read the Show's narrowed accessor after the selecting read went falsy ("Attempting to access a stale value from ") and, without an error boundary, halted the reactive system. A lane frame's member now follows mainline writes only: a lane dirty on a zombie whose parking owner is lane work is cancelled. A transaction's zombie a lane reveals through still runs for the lane (#3463). +- 7093b07: A memo over `latest(source)` now sees a held rejection at the same point it sees a held value (#4106). Such a memo is display-ahead (F-6): when a held flight on `source` resolves, the memo re-runs in the hold's verdict lane and its new value shows at once, while a sibling still holds the frame. A rejection did not reach it the same way. `stageError` woke the memo but scheduled no flush, so the memo kept its old value until the reveal. After the memo did re-run, its lane pass errored, but `latest(memo)` and `memo()` kept serving the lane value from before the error, while the memo's effect had already received the error. Now `stageError` schedules the flush, and a read of an errored lane member that is not a written guess throws its error. `latest(memo)`, `memo()` and the effect's error arm now show `boom` before the reveal, just as they show `2` when the source resolves. +- dbc5d00: `SSR_BOUNDARY_WATERFALL` now judges a wait by when its work started, the same origin rule the client's `ASYNC_WATERFALL` uses. A nested route meets its levels one render pass at a time, but the router starts every matched level's `lazy()` import and preload together. Before, the first request to a cold server warned about a data waterfall that wasn't there. A wait whose work had all started before the previous wait landed is now left out of the count (`data.parallelWaits`). `lazy()` and `lazyModule()` stamp their imports. The start stamps move from the attribution engine to the core's `OBSERVE.attribution` (`markFlight`, `flightOrigin`), so a router or cache can stamp what it hands out without loading the engine. `attribution.markFlight` writes to the same place. +- 6371b91: fix(signals): a lazy memo read only through a rebuilt child memo is not released mid-pass (#4142) +- 347f242: New dev check `SSR_LIVE_HOLE_LATCHED` (#4023): a live markup hole that shipped its markers and then stopped updating, because re-running it would create reactive scopes (most often a compiler condition memo for `{m.usage && …}`), is now named on the console, located by its component, instead of going quiet. Behavior is unchanged; hoisting the property into a local keeps the hole live. +- f3973ea: `mapArray` commits a structural change without rebuilding full-length copies of its row bookkeeping: a pass stages only the changed window, lands it into the live arrays in place with the unchanged suffix shifted by a loop, and rebuilds only the mapped array that signals the change downstream. A pass that only removes rows is matched with two pointers and no key map, and the key-chain array is sized to the window rather than to the edit's position. One-item inserts and removals on long keyed lists, every-nth removals and sparse filters no longer allocate several list-sized arrays per edit; the strong-abort contract for a mapper that suspends is unchanged, kept by ordering (verify, create, then mutate) instead of by copying. +- c12c420: An outer `on`-reset Loading boundary no longer waits for a flight its nested `on`-reset boundary catches (D-14, U-4). A pending reader forwarded through both boundaries while neither was collecting was recorded in both, so when one tick re-armed both the outer kept its fallback until the inner's flight landed. A reader a nested collecting boundary holds is now that boundary's alone: the outer's content shows beside the inner's fallback as soon as the outer's own work lands. +- a2d5669: Fix an optimistic row that showed, vanished and reappeared when several actions guessed the same list in quick succession: a guess made over a slot another action still holds now entangles with that action, so it stays until its own action settles instead of reverting with the earlier one. +- 5c8ec96: Root owners now carry their lifecycle flags slot from creation. `disposeChildren` marks death by writing `_flags` on every owner it tears down, and the root literal (every `createRoot`, every `mapArray` row and cell owner) did not declare the field, so the first write was a shape transition plus a properties-store allocation per root. On a 100×4 keyed table teardown that was 12 KB and most of disposal's time; uibench removeAll drops 64–70%, the sparse filters 33–61%, single-row removes 40–65%. +- 4bc7969: fix(signals): a later mainline store setter that does not write a held key publishes on the mainline tick — a setter's written keys are its own set, so its notify visits only the keys it wrote (D-8, U-8, #3743) +- d3cddff: Attribution: `createProjection` records the owner in scope as `createStore` does, so a projection's property nodes carry an owner path (#4035). The `GRAPH_GROWTH` message and its skill section now name a cache that never evicts as a source of the same growth. +- 7014aca: Preserve a function returned by a writable-memo updater during a held transition as data, without invoking it again. +- c2513e3: A Loading boundary re-armed by `on` owns the content under it that reads a hold another change made (D-14, D-16, U-9). Before, that content joined the hold, so no fallback showed and the boundary reported pending, and a held tree under a re-armed boundary could redraw forever. Now the fallback shows with the re-arming change and the content reveals at the hold's commit, which no longer waits for it. A re-arm whose own change joins that hold still shows no fallback (the frame waits on the same data), and `LOADING_ON_OUTSIDE_HOLD` is reported only for a flight the change itself started. +- 32652bb: EFFECT_RELAY_TEAR no longer flags effects that measure layout. When the effect's apply half takes no argument (`createEffect(open, () => setFlipped(measure()))`), a write that equals the compute output is not a copy, and its tears stay advisory however often they repeat. Effects whose apply half takes the value are judged as before, so boolean mirrors still warn. +- 3f36f77: Server components: binding slots are removed. Client components in slots replace them: place a client component through a `Slot` (``) where the server's markup needs client behavior, or a form `action` for a mutation. Removed with them: the `BindingSlot`, `SlotOutput` and `SlotError` types, the lazy `@solidjs/web/frames/bind` entry and its `"bind"` tier, the `_s:*` position markers and the compiled `ssrClaim` hole, the effect of the `serverComponents` compiler option (`@solidjs/compiler` and `@solidjs/babel-plugin` still accept it, so existing build configs keep working, and ignore it), and the `BINDING_SLOT_POSITION` diagnostic code (`@solidjs/signals`' `DiagnosticCode`, `solid-js`'s `diagnostics.json`). Ordinary slots, their `slot:` ranges and records, and `$key` are unchanged. +- dfb31ed: Derived stores no longer need a seed (#3194). `createStore(fn)`, `createProjection(fn)` and `createOptimisticStore(fn)` accept a derive that takes no draft and answers a complete value — sync, a promise, or an async iterable whose every yield is a complete snapshot. The root is a plain object (an array keeps its `[]` seed); pass `undefined` for the seed to reach the options, e.g. `createStore(fetchUser, undefined, { key: "email" })`. Until the first answer lands the store is unreadable, as with any seed (A25); `seedLoadingValue` needs a seed and is not offered on the seedless form. + + With the seedless form available, a seed is a complete `T` again (#3258's requirement, reverted then because async stores that needed the options slot had to invent one). A `{}` seed on a return-form derive is now a type error: drop it. A mutating derive that builds its object from an empty seed needs `{} as T`. + +- f420740: Deleting a store key now decrements the store's key count. The count went up on every added key but came down only in the overlay rebuild paths, so the natural keyed-selection shape — delete the previous key, set the new one — drifted it upward by one per write until a small object crossed the overlay threshold and paid a full rebuild of its backing on every commit after. A delete of a draft's own key (a plain clone's, or an overlay's own add) is counted immediately; an overlay's delete of a committed key is still recorded and counted at the rebuild. +- 745e807: Settle an immediately empty async iterable to `undefined` when a synchronous thenable resolves to it, matching direct and deferred empty-stream completion instead of exposing the iterable object. +- 3fc5551: `until()` and `refresh()` no longer retain the optimistic lane engine in apps that don't use optimism (−4.8 KB minified). An `until()` predicate reading a memo derived from an unconfirmed optimistic guess now waits for the guess to be confirmed or corrected, instead of seeing the value from before the guess. +- 42c2568: A memo that reads a verdict memo (`isPending`/`latest`) shows the verdict now, beside a held value it also reads (F-6, U-10, #4050). Before, it re-entered the hold with that value and the verdict waited for the landing: a Provider's children memo over a router shell `[, outlet]` never showed delayed pending feedback during a held navigation. It now behaves as the same probe read inline, or a render effect reading both, already did. +- dc063a6: A `` that a verdict reader (` 0}>`) mounts during a held action now holds a render effect nested in its content, not only a direct read: it shows its fallback beside the committed value until the action lands (#4166). +- 71153bf: A write to a writable memo clears an error its derivation left behind (#4110). Clearing `STATUS_ERROR` only happened on a recompute or an async settle, and a direct write does neither, so a memo that had thrown kept throwing the stale error to every later reader: effects stayed on their error arm, error boundaries never recovered, and the written value sat committed underneath a node that still reported an error. A write equal to the last good value was dropped entirely by the equality gate. Writing to such a memo now recovers it, which is what "a write lands at once and never re-runs `fn` on its own" already promised. + + The error stays what readers see until the write commits, so a read between the write and its flush, or during an action that holds the write, still throws instead of returning the old value. A write after a pass staged an error under the same action now lands as a value, instead of reaching effects' error arm. + ## 2.0.0-rc.15 ### Patch Changes diff --git a/packages/signals/package.json b/packages/signals/package.json index 7d0e8b779e..8ba6214a43 100644 --- a/packages/signals/package.json +++ b/packages/signals/package.json @@ -1,6 +1,6 @@ { "name": "@solidjs/signals", - "version": "2.0.0-rc.15", + "version": "2.0.0-rc.16", "description": "Solid's reactive primitives: signals, memos, effects, stores, and async-aware computations.", "author": "Ryan Carniato", "license": "MIT", diff --git a/packages/solid/CHANGELOG.md b/packages/solid/CHANGELOG.md index b18c706051..4585763f23 100644 --- a/packages/solid/CHANGELOG.md +++ b/packages/solid/CHANGELOG.md @@ -1,5 +1,78 @@ # solid-js +## 2.0.0-rc.16 + +### Patch Changes + +- 3d8a8a9: Point JSDoc `@description` links at the 2.0 reference docs (v2.solidjs.com), document `isPending`, point the console footer, diagnostics guide and cheatsheet links at the `next` branch, and replace the stale `onMount` advice in the server-side client-only API error. +- 1b81476: `CHEATSHEET.md` (and the `solid-2.0-cheatsheet` skill built from it) no longer recommends module-scope state for app-wide state (#4141). It now matches the `createContext` JSDoc and the 2.0 docs: create state in a Provider, which owns it per request on the server, and reserve module scope for constants. +- b8617ec: `createDeferred(fn, options?)`: an async memo that may lag, but never leads. Before its first answer it is an ordinary async memo (readers suspend to ``, or `loadingValue` shows). After it, a refetch holds nothing: readers keep the previous answer until the new one lands, the rest of the screen moves on, and `isPending` reports the refetch on the node and on everything derived from it, store keys included. A refetch that read a held value lands with that hold. A rejection errors like any memo. `refresh(d)` is a quiet re-ask, and `await refresh(d)` and `until` wait for the landing. It is `createMemo` on the server and hydrates like one. + + The rules: F-1 and F-2 are amended for declared lag, and D-40 / S-41 are new. The `affects()` mark core moved to its own module (`affects-marks.ts`), which `createDeferred` shares. A mark on the source of a derived store now covers that store's keys. + +- 4a99c84: `createComponent(Comp, props, name?, loc?)` takes the JSX site the compiler emits beside the tag (`"src/App.tsx:12:5"`); the dev and observe component owner carries it on both the client and the server, so a finding raised inside a component reports `at src/App.tsx:12:5` (and `event.loc`) when nothing closer was located. The console footer is now two lines: the code's docs page for a human (`what it means and how to fix it: https://v2.solidjs.com/reference/solid-js/diagnostics/`), then the repair skill for an agent (installed path and GitHub URL, anchored to the code's section). `diagnostics.json` links each code to its docs page, and the `reactivity-diagnostics` skill documents the `at` line. +- 0f64d82: `` escapes its children on the server (#4116). A boundary's content never passes a compiled `escape` hole, so `` escapes it itself; `` did not, and a string child (or an array of strings, or a function returning one) was written into the HTML raw — user text inside an error boundary became live markup, and the client's text node mismatched on hydrate. +- 467ac97: Hydration: a streamed `` fragment that is the first to carry a `lazy()` module's assets now loads them before its resume claims the revealed content, instead of rendering nothing while they load and clearing the parent's revealed nodes (#4087). +- 1bcee91: Server components hydrate their client slot occurrences on demand. The adoption pass mounts none of them; an occurrence mounts when an event lands in it (outermost first, before the event reaches a handler), before any signal or store write applies (every remaining occurrence, against the server's state), or in idle slices after the load event. Hydration stays in progress until the last one has mounted. The write side is an internal pre-write hook in `@solidjs/signals`, tree-shaken from apps without server components. +- 47a217f: Frames: a signal or store write during deferred hydration mounts only the slot occurrences the server recorded as its readers, then applies, instead of mounting every pending occurrence first. The server names plain signals (`~`) and plain stores (by their root) in server-component renders and emits `sc:deps` records per frame; writes it cannot vouch for (unnamed, derived, optimistic, projection or wide sources) still mount everything first. Apps without server components keep their sizes and code paths. +- dbc5d00: `SSR_BOUNDARY_WATERFALL` now judges a wait by when its work started, the same origin rule the client's `ASYNC_WATERFALL` uses. A nested route meets its levels one render pass at a time, but the router starts every matched level's `lazy()` import and preload together. Before, the first request to a cold server warned about a data waterfall that wasn't there. A wait whose work had all started before the previous wait landed is now left out of the count (`data.parallelWaits`). `lazy()` and `lazyModule()` stamp their imports. The start stamps move from the attribution engine to the core's `OBSERVE.attribution` (`markFlight`, `flightOrigin`), so a router or cache can stamp what it hands out without loading the engine. `attribution.markFlight` writes to the same place. +- 7c36f2b: Server `For` in a live hole: a row that read an async memo or projection besides its item, or whose item was edited in place, now renders again on each sweep instead of reusing stale markup. +- 0a49dd8: Live holes: on a live response, a sweep that changed some rows of a `` sends just those rows (replace, append, truncate by index), and the frames client morphs only their ranges. A client whose range doesn't show what the rows were taken against resumes its live connection, which sends the hole whole. +- 51d005a: Server `` keeps its rows across live-hole sweeps (#4056). A markup hole that re-emits (a live server component, a standing source) re-evaluated every row of a list on every write. During a sweep, a row whose item at the same index is unchanged (the same reference, or a shallow-equal object, as a live source's fresh snapshot usually is) now reuses the row it rendered on the previous sweep. Plain SSR and a server component's first render are unchanged. A row is a function of its item: an item mutated in place keeps its old row, and a row that reads outside data keeps the value it rendered with. +- c5da908: A live hole whose content calls a slot keeps updating. Before, the first re-run that called a slot latched the hole (`SSR_LIVE_HOLE_LATCHED`, cause "records"). Now each occurrence's identity belongs to its hole: it is its position there, or its `$key`. Calls outside any hole keep the ids they had. A re-run sends a record only for a new occurrence or for args that changed. On the client, the hole's morph resolves slot ranges against the frame's displaced-range index, the same way the root morph does. An occurrence that survives keeps its range, its interior and its mounted component, even when it moves into another hole. New occurrences mount and the ones that are gone dispose. Under deferred hydration, an occurrence that is not mounted yet claims its markup with the record that markup was rendered from, then takes the newer one. A live attribute that calls a slot still latches, and so does a re-run that creates owners. +- 3f36f77: Server components: binding slots are removed. Client components in slots replace them: place a client component through a `Slot` (``) where the server's markup needs client behavior, or a form `action` for a mutation. Removed with them: the `BindingSlot`, `SlotOutput` and `SlotError` types, the lazy `@solidjs/web/frames/bind` entry and its `"bind"` tier, the `_s:*` position markers and the compiled `ssrClaim` hole, the effect of the `serverComponents` compiler option (`@solidjs/compiler` and `@solidjs/babel-plugin` still accept it, so existing build configs keep working, and ignore it), and the `BINDING_SLOT_POSITION` diagnostic code (`@solidjs/signals`' `DiagnosticCode`, `solid-js`'s `diagnostics.json`). Ordinary slots, their `slot:` ranges and records, and `$key` are unchanged. +- eb4e019: Hydration no longer hydrates a streamed `` fallback when the fragment was already revealed but its `_fr` record hasn't settled yet (an async entry running between the two scripts). The boundary renders nothing and adopts the revealed content once the record settles (#4074). +- dfb31ed: Derived stores no longer need a seed (#3194). `createStore(fn)`, `createProjection(fn)` and `createOptimisticStore(fn)` accept a derive that takes no draft and answers a complete value — sync, a promise, or an async iterable whose every yield is a complete snapshot. The root is a plain object (an array keeps its `[]` seed); pass `undefined` for the seed to reach the options, e.g. `createStore(fetchUser, undefined, { key: "email" })`. Until the first answer lands the store is unreadable, as with any seed (A25); `seedLoadingValue` needs a seed and is not offered on the seedless form. + + With the seedless form available, a seed is a complete `T` again (#3258's requirement, reverted then because async stores that needed the options slot had to invent one). A `{}` seed on a return-form derive is now a type error: drop it. A mutating derive that builds its object from an empty seed needs `{} as T`. + +- 9ac1481: The server error hook (`configureServerErrors`, a render's `onError`) now hears each error object once per request — once per render when no request is in scope — instead of once per process (#4125). Reusing one `Error` object across requests (a module-level constant, a cached rejection) used to notify only the first request's hook and hand later requests the first request's mapped wire value; each request now gets its own report and its own answer. Within a request the hook hears an error once per `kind`: a direct server-function call that throws during SSR is heard as `server-function`, and the `` or `` that contains it is heard as `render`, so a render's `onError` alone tells you the render failed. Every road still carries the first mapped value. +- a61c929: A server component in a document marks its live holes only once the render has served something a later commit can replace: an async iterable it pumps, or a loading value or seed shown ahead of its landing. Until then a hole that resolves synchronously ships without `lh` markers, `data-lha` addresses or a ledger binding, because no channel op can ever address it. On a request/response page that is every hole: the 1,406-comment hackernews thread drops from 948 KB to 787 KB and renders in about half the server time. +- 3d8a8a9: Ship the Solid 2.0 primer for coding agents as the `solid-2.0` skill, emit `CHEATSHEET.md` as the `solid-2.0-cheatsheet` skill on build, give every shipped skill the `name`/`description` frontmatter the Agent Skills format requires, and add the `tanstack-intent` keyword so skill registries discover them in `node_modules`. +- 3d8a8a9: `solid-js` now ships `diagnostics.json` next to `CHEATSHEET.md`: the machine-readable catalog of every dev diagnostic code — `code`, `kind`, `severity`, `category`, `trigger`, `repair` (the first sentence of the code's section in the `reactivity-diagnostics` skill) and `guideUrl` (that section on GitHub). It is generated from the `DiagnosticCode` union, the RFC's quick-reference table and the skill by `pnpm diagnostics:json`, and a test fails when any of the three (or the committed file) names a different set of codes. The quick-reference table gains its missing `PRIMITIVE_IN_EFFECT_CALLBACK` row. +- 4ff6580: Server rendering: a suspended read unwinds to its boundary through fewer handler frames. `runWithOwner`, the sync memo's pull, `ssrScope` and `runWithBoundaryErrorContext` restore their state in one catch (and inline on the normal path) instead of a catch plus a finally, and a sync memo whose eager pull met a `NotReadyError` re-raises it for a read in the same synchronous turn instead of running the compute a second time. No behavior change; streaming pages with many pending boundaries flush their shell sooner. +- Updated dependencies [3d8a8a9] +- Updated dependencies [a9b9f9e] +- Updated dependencies [a7fe050] +- Updated dependencies [52008d9] +- Updated dependencies [0b6765f] +- Updated dependencies [a2743fa] +- Updated dependencies [b8617ec] +- Updated dependencies [3643c5e] +- Updated dependencies [4a99c84] +- Updated dependencies [2172a37] +- Updated dependencies [1bcee91] +- Updated dependencies [47a217f] +- Updated dependencies [61c4436] +- Updated dependencies [a39acdd] +- Updated dependencies [667dcff] +- Updated dependencies [0bda987] +- Updated dependencies [fb6006e] +- Updated dependencies [ccd9948] +- Updated dependencies [1b2406d] +- Updated dependencies [7093b07] +- Updated dependencies [dbc5d00] +- Updated dependencies [6371b91] +- Updated dependencies [347f242] +- Updated dependencies [f3973ea] +- Updated dependencies [c12c420] +- Updated dependencies [a2d5669] +- Updated dependencies [5c8ec96] +- Updated dependencies [4bc7969] +- Updated dependencies [d3cddff] +- Updated dependencies [7014aca] +- Updated dependencies [c2513e3] +- Updated dependencies [32652bb] +- Updated dependencies [3f36f77] +- Updated dependencies [dfb31ed] +- Updated dependencies [f420740] +- Updated dependencies [745e807] +- Updated dependencies [3fc5551] +- Updated dependencies [42c2568] +- Updated dependencies [dc063a6] +- Updated dependencies [71153bf] + - @solidjs/signals@2.0.0-rc.16 + ## 2.0.0-rc.15 ### Patch Changes diff --git a/packages/solid/package.json b/packages/solid/package.json index 54e3bf9334..ce96295d8d 100644 --- a/packages/solid/package.json +++ b/packages/solid/package.json @@ -1,7 +1,7 @@ { "name": "solid-js", "description": "Reactive JavaScript library for building user interfaces. Compiles JSX to real DOM with fine-grained signal-based updates — no virtual DOM.", - "version": "2.0.0-rc.15", + "version": "2.0.0-rc.16", "author": "Ryan Carniato", "license": "MIT", "homepage": "https://solidjs.com", @@ -134,7 +134,7 @@ "tanstack-intent" ], "dependencies": { - "@solidjs/signals": "^2.0.0-rc.15", + "@solidjs/signals": "^2.0.0-rc.16", "csstype": "^3.1.0", "seroval": "1.6.7", "seroval-plugins": "1.6.7" diff --git a/packages/test-integration/CHANGELOG.md b/packages/test-integration/CHANGELOG.md index e35176cf95..2f2d171c04 100644 --- a/packages/test-integration/CHANGELOG.md +++ b/packages/test-integration/CHANGELOG.md @@ -1,5 +1,103 @@ # test-integration +## 2.0.0-rc.16 + +### Patch Changes + +- Updated dependencies [3d8a8a9] +- Updated dependencies [a9b9f9e] +- Updated dependencies [3cffd86] +- Updated dependencies [4a99c84] +- Updated dependencies [a7fe050] +- Updated dependencies [52008d9] +- Updated dependencies [1b81476] +- Updated dependencies [0b6765f] +- Updated dependencies [a2743fa] +- Updated dependencies [b8617ec] +- Updated dependencies [3643c5e] +- Updated dependencies [86cf504] +- Updated dependencies [4a99c84] +- Updated dependencies [4a99c84] +- Updated dependencies [4a99c84] +- Updated dependencies [96b615d] +- Updated dependencies [2172a37] +- Updated dependencies [0f64d82] +- Updated dependencies [467ac97] +- Updated dependencies [8092282] +- Updated dependencies [8163bc3] +- Updated dependencies [1bcee91] +- Updated dependencies [47a217f] +- Updated dependencies [7ad2342] +- Updated dependencies [5bc0e5e] +- Updated dependencies [2aa9e86] +- Updated dependencies [9c8930c] +- Updated dependencies [e4edd34] +- Updated dependencies [10b3f55] +- Updated dependencies [1f3b5b4] +- Updated dependencies [61c4436] +- Updated dependencies [a39acdd] +- Updated dependencies [667dcff] +- Updated dependencies [0bda987] +- Updated dependencies [fb6006e] +- Updated dependencies [ccd9948] +- Updated dependencies [22d3ea1] +- Updated dependencies [fda29a4] +- Updated dependencies [1b2406d] +- Updated dependencies [7093b07] +- Updated dependencies [dbc5d00] +- Updated dependencies [6371b91] +- Updated dependencies [0e0c043] +- Updated dependencies [7c36f2b] +- Updated dependencies [0a49dd8] +- Updated dependencies [51d005a] +- Updated dependencies [347f242] +- Updated dependencies [c5da908] +- Updated dependencies [b972757] +- Updated dependencies [8e2590e] +- Updated dependencies [f3973ea] +- Updated dependencies [8fbadfd] +- Updated dependencies [e1bf2af] +- Updated dependencies [e43e22f] +- Updated dependencies [c12c420] +- Updated dependencies [a2d5669] +- Updated dependencies [5c8ec96] +- Updated dependencies [4bc7969] +- Updated dependencies [d3cddff] +- Updated dependencies [7014aca] +- Updated dependencies [c2513e3] +- Updated dependencies [8e2446f] +- Updated dependencies [7f8ab2d] +- Updated dependencies [32652bb] +- Updated dependencies [3f36f77] +- Updated dependencies [8e2590e] +- Updated dependencies [eb4e019] +- Updated dependencies [dfb31ed] +- Updated dependencies [8bd7a5b] +- Updated dependencies [9ac1481] +- Updated dependencies [3e94215] +- Updated dependencies [a61c929] +- Updated dependencies [36039e2] +- Updated dependencies [46db1cf] +- Updated dependencies [3d8a8a9] +- Updated dependencies [3d8a8a9] +- Updated dependencies [d0ba31c] +- Updated dependencies [4ff6580] +- Updated dependencies [f420740] +- Updated dependencies [8d4a285] +- Updated dependencies [745e807] +- Updated dependencies [8268cfd] +- Updated dependencies [3fc5551] +- Updated dependencies [42c2568] +- Updated dependencies [dc063a6] +- Updated dependencies [71153bf] + - solid-js@2.0.0-rc.16 + - @solidjs/signals@2.0.0-rc.16 + - @solidjs/web@2.0.0-rc.16 + - @solidjs/babel-plugin@2.0.0-rc.16 + - @solidjs/h@2.0.0-rc.16 + - @solidjs/html@2.0.0-rc.16 + - @solidjs/universal@2.0.0-rc.16 + ## 2.0.0-rc.15 ### Patch Changes diff --git a/packages/test-integration/package.json b/packages/test-integration/package.json index aa2d9b972e..fc5a441676 100644 --- a/packages/test-integration/package.json +++ b/packages/test-integration/package.json @@ -21,5 +21,5 @@ "gitly": "^2.2.1", "shelljs": "^0.8.5" }, - "version": "2.0.0-rc.15" + "version": "2.0.0-rc.16" } diff --git a/packages/universal/CHANGELOG.md b/packages/universal/CHANGELOG.md index da4e93678e..41b94d1d78 100644 --- a/packages/universal/CHANGELOG.md +++ b/packages/universal/CHANGELOG.md @@ -1,5 +1,32 @@ # @solidjs/universal +## 2.0.0-rc.16 + +### Patch Changes + +- Updated dependencies [3d8a8a9] +- Updated dependencies [1b81476] +- Updated dependencies [b8617ec] +- Updated dependencies [4a99c84] +- Updated dependencies [0f64d82] +- Updated dependencies [467ac97] +- Updated dependencies [1bcee91] +- Updated dependencies [47a217f] +- Updated dependencies [dbc5d00] +- Updated dependencies [7c36f2b] +- Updated dependencies [0a49dd8] +- Updated dependencies [51d005a] +- Updated dependencies [c5da908] +- Updated dependencies [3f36f77] +- Updated dependencies [eb4e019] +- Updated dependencies [dfb31ed] +- Updated dependencies [9ac1481] +- Updated dependencies [a61c929] +- Updated dependencies [3d8a8a9] +- Updated dependencies [3d8a8a9] +- Updated dependencies [4ff6580] + - solid-js@2.0.0-rc.16 + ## 2.0.0-rc.15 ### Patch Changes diff --git a/packages/universal/package.json b/packages/universal/package.json index f552924330..b260c782d9 100644 --- a/packages/universal/package.json +++ b/packages/universal/package.json @@ -1,7 +1,7 @@ { "name": "@solidjs/universal", "description": "Solid's universal runtime for creating custom renderers", - "version": "2.0.0-rc.15", + "version": "2.0.0-rc.16", "author": "Ryan Carniato", "license": "MIT", "homepage": "https://solidjs.com", @@ -51,7 +51,7 @@ "test": "vitest run" }, "peerDependencies": { - "solid-js": "^2.0.0-rc.15" + "solid-js": "^2.0.0-rc.16" }, "devDependencies": { "solid-js": "workspace:*" diff --git a/packages/web/CHANGELOG.md b/packages/web/CHANGELOG.md index 5e20f3f2b7..53b91c28d4 100644 --- a/packages/web/CHANGELOG.md +++ b/packages/web/CHANGELOG.md @@ -1,5 +1,75 @@ # @solidjs/web +## 2.0.0-rc.16 + +### Patch Changes + +- 3d8a8a9: Point JSDoc `@description` links at the 2.0 reference docs (v2.solidjs.com), document `isPending`, point the console footer, diagnostics guide and cheatsheet links at the `next` branch, and replace the stale `onMount` advice in the server-side client-only API error. +- 3cffd86: Async-mode renders (`await renderToStream(...)`) now produce the same bytes for the same data, whatever order the async sources settle in (#4028). Once the thenable is taken, hydration writes and the pending-promise stub batch are held until the serializer flush and handed to seroval sorted by hydration key, so reference ids and resolution chunks no longer follow settle order. A body-digest ETag now matches across renders whose only difference was API latency. Streaming consumers (`pipe` / `pipeTo` / `readable`) and custom serializers/sinks are unchanged. +- 86cf504: `data-*` attributes type-check in props objects (`ComponentProps<"div">`, `JSX.HTMLAttributes`), not only in JSX: a template-literal index signature on `ElementAttributes` (#4082). +- 4a99c84: `effect` and `insert` take `loc` beside `name` in their options, and `spread` a trailing `loc` after its tag — the source site the compiler emits under `sourceNames` `locations` — so a diagnostic about a compiled binding reports `at src/App.tsx:14:7` and carries `event.loc`. Dev and observe builds keep it on the node; production ignores it. +- 96b615d: Remove the internal `scriptNonce`/`styleNonce` exports from the server build. They stayed exported after #4016 only because `@solidjs/vite-plugin` ≤ 3.0.0-next.49 imported them. 3.0.0-next.50 projects the nonce itself (solidjs/solid-vite-plugin#409). Apps must use `@solidjs/vite-plugin` 3.0.0-next.50 or later with this release. +- 8092282: fix(frames): a link inside nested slot regions is claimed once per adoption instead of once per enclosing region, and a streaming document whose server components mint no tier writes an empty `sc:tiers` record so the client skips its per-element slot-marker scan +- 8163bc3: Send data server functions called during hydration on a page with server components (#4033). The frames client holds a server-function call while the document may still deliver a boundary for it, and a data function never has one. A wait created under a hydration trace cached the trace's never-settling `Promise` stub, so every later call for that function hung; and a call made after the page's last reveal (a hydration-end recompute) was released only by a reveal that never came. Waits made under a trace are no longer kept, and outstanding waits are released when hydration ends as well as on reveals. +- 1bcee91: Server components hydrate their client slot occurrences on demand. The adoption pass mounts none of them; an occurrence mounts when an event lands in it (outermost first, before the event reaches a handler), before any signal or store write applies (every remaining occurrence, against the server's state), or in idle slices after the load event. Hydration stays in progress until the last one has mounted. The write side is an internal pre-write hook in `@solidjs/signals`, tree-shaken from apps without server components. +- 47a217f: Frames: a signal or store write during deferred hydration mounts only the slot occurrences the server recorded as its readers, then applies, instead of mounting every pending occurrence first. The server names plain signals (`~`) and plain stores (by their root) in server-component renders and emits `sc:deps` records per frame; writes it cannot vouch for (unnamed, derived, optimistic, projection or wide sources) still mount everything first. Apps without server components keep their sizes and code paths. +- 7ad2342: A server component consumer that mounts while its frame response is already streaming no longer reports a false `ASYNC_WATERFALL` (#4140). The landing promise the mount awaits now carries the request's start (`OBSERVE.attribution.markFlight`): the server-function client hands its response handler `ctx.startedAt`, the frame host stamps the landing it mints for an open flight, and the mount's wrapper inherits that stamp. A re-ask after an error is still new work. Observe and dev builds only; production output is unchanged. +- 5bc0e5e: Frames: the live-hole and attribute-hole appliers move out of the eager frames client into the lazy `wire` tier (about 280 B brotli off every server-components page). The server announces `wire` whenever a response or document carries a live hole, so the tier loads alongside the first hole update; a hole record that arrives before the tier is resident waits and is applied when it installs. Row ops are still sent only on live responses. +- 2aa9e86: Frames: the range morph (the reconcile that lands a refetched or navigated root over shown content) moves out of the eager frames client into the lazy `wire` tier, about 790 B brotli off every server-components page. A frame call on a page that shows frames starts the tier's load with its request (so a router's hover preload warms it), and a root landing over shown content waits for the tier; adoption and first materialize never morph and never load it. +- 9c8930c: Frames: a write that carries only slot records mounts or updates the occurrences it names from the frame's last slot walk instead of walking the whole frame again. A document's records arrive one write per occurrence, so eager hydration walked a page of N occurrences N times (401 walks of a 7,948-element frame on a 400-card page, about 1 s at 4x CPU); it now walks once. Any content change drops the cached walk, and an occurrence the walk did not see falls back to the full sync. A flush's content passes (assets, segments, live holes) now walk only the store's non-slot keys instead of enumerating every record on every write, and deferred hydration keeps its walk across record writes, touching only the occurrences a write names. +- e4edd34: Frames: the frame stream now carries versioned batches of keyed records (`{ id, version, r }`), the same writes the client's resident store applies, instead of eleven typed chunks the client translated into records. The server writes records natively: `renderServerComponent`, `renderToFrameStream` and the response helpers pipe these wire messages, so there is one format from the producer to the store. Records written in the same synchronous flush leave as one message per frame (a segment's assets, content and reveal travel together; a sweep stays one batch), with nothing held across a flush. Only `start`, `data` and the single-flight `outcome` keep a `type`, and the document face's live channel carries the same batches. The eager frames client loses its translation step (about 0.2 KB brotli off every server-components page). Experimental wire format: a client and server must come from the same release. +- 10b3f55: Frames client: a live-hole apply no longer searches the frame for its marker on every write. Each hole's target is cached between applies and reused while it is still the frame's and still matches; otherwise the search runs as before. +- 1f3b5b4: fix(frames): a frame rendered off the live address marks only the holes that can change within its response (the document face's gate), so synchronous holes ship without `lh` markers, `data-lha` addresses or hole digests; the live address keeps every marker for its reconnect have-list +- ccd9948: Smaller floor bundles: the optional engines (lanes, verdicts, boundaries, stores, affects, external sources) install their scheduler hooks as module variables, so an app that never loads them no longer retains their paths in `recompute`, `read` and the settle step; client-only `render` no longer retains hydration text adoption, and the delegated dispatcher drops dead guards. The JSX hello world goes from 10.35 KB to 9.75 KB brotli. +- fda29a4: An insert decides whether its inner effect's first run is inline (the first render) or scheduled into the effect phase (any later render) from a flag, not from the previous computed value. A hole that was an element's only child normalizes to `undefined` while it renders nothing, which read as "never ran": content arriving there later — a `` flipping to a branch whose reads are held by an action — ran its inner effect inline, mid-compute, and mounted ahead of the hold (an enabled, empty input before the commit, against D-23). Multi-slot holes, whose normalized value is always an array, already scheduled correctly; single-child holes now match. +- 0e0c043: Write one `data-lha` address on an element whose attribute was still pending inside a `` in a live server component (#4032). When the in-tag hole escalated, the attribute capture was dropped but the address it had spliced into the tag stayed, and the boundary's resume minted a second one in front of it. The stale address rode every later attr op for the element, so the first op moved the element off its bound address and every op after it was dropped. The address now goes with the dropped capture. +- 0a49dd8: Live holes: on a live response, a sweep that changed some rows of a `` sends just those rows (replace, append, truncate by index), and the frames client morphs only their ranges. A client whose range doesn't show what the rows were taken against resumes its live connection, which sends the hole whole. +- 347f242: New dev check `SSR_LIVE_HOLE_LATCHED` (#4023): a live markup hole that shipped its markers and then stopped updating, because re-running it would create reactive scopes (most often a compiler condition memo for `{m.usage && …}`), is now named on the console, located by its component, instead of going quiet. Behavior is unchanged; hoisting the property into a local keeps the hole live. +- c5da908: A live hole whose content calls a slot keeps updating. Before, the first re-run that called a slot latched the hole (`SSR_LIVE_HOLE_LATCHED`, cause "records"). Now each occurrence's identity belongs to its hole: it is its position there, or its `$key`. Calls outside any hole keep the ids they had. A re-run sends a record only for a new occurrence or for args that changed. On the client, the hole's morph resolves slot ranges against the frame's displaced-range index, the same way the root morph does. An occurrence that survives keeps its range, its interior and its mounted component, even when it moves into another hole. New occurrences mount and the ones that are gone dispose. Under deferred hydration, an occurrence that is not mounted yet claims its markup with the record that markup was rendered from, then takes the newer one. A live attribute that calls a slot still latches, and so does a re-run that creates owners. +- b972757: Live holes keep updating when their markup creates reactive scopes (a nested ``, a compiler condition memo such as `{m.usage && …}`, a component). Each re-render runs in a throwaway scope disposed once its markup is out; only a scope still waiting on async work closes the hole (#4023). +- 8e2590e: Hydrating a `` whose `lazy()` module lands after hydration starts no longer moves its server-rendered nodes when the boundary has a sibling in the same fragment (#4049). A sibling before the boundary used to swap the boundary's static and lazy children (A/C/B instead of A/B/C), and a sibling after it detached and re-attached the boundary's content, restarting CSS animations and blurring a focused input. The late claim now leaves server nodes in place when they already sit in the region, in order, around the nodes the insert was tracking. +- 8fbadfd: Frames morph: when a text hole empties, the reconcile drops the stale text node instead of relocating the next element in front of it, so the elements after an emptied text hole stay put instead of being re-inserted. +- e1bf2af: Frames morph skips an identical subtree with one native `isEqualNode` compare instead of walking it. +- e43e22f: Server components: a client fill nested in server content that another fill places (a region) now sees the context that enclosing fill provides, on the server render, at hydration (eager or deferred, including an inner occurrence mounting first) and for occurrences a stream or live hole adds later. On the server, a fill called while an enclosing occurrence's args evaluate renders when the region is placed, under the placing owner; the region's usage flip runs after the fill's output has resolved, so content placed inside a provider (whose children resolve in the walk) ships as markup instead of an occluded record. On the client, a nested fill mounts under the owner that read the region, waits while the region is unplaced, and mounts afresh at the next placement after one is disposed. A fill's two claim windows now share one claim owner, so a fill rooted at a context provider claims its server markup instead of rendering a detached copy. +- 8e2446f: The keyed reconciler is back on the slot-ownership design from May: the common-prefix and common-suffix walks match by identity, with no per-node liveness check. #574 — a node dropped after a replace plus an end-swap — is fixed at its cause instead: the suffix walk is bounded to the open range, so it can no longer reach back into entries the pass already consumed. The append branch anchors on a node the slot still owns, so a node user code moved away cannot make an insert throw. In the map branch, an old node that is no longer ours is consumed rather than "replaced" by an insert at the region's end, so the changed window lands in list order around a moved-away node. A node moved away that sits in the unchanged prefix or suffix stays where it was moved, as it did before the #574 patch. A 1000-row swap drops from about 30 to 25 µs; long reorders and memo-wall's one-change update 10–50%. +- 7f8ab2d: A server function reference can declare its own client send with `withMeta(fn, { fetch: (address, init, next) => ... })`. The transport uses it for that function's requests, with the configured send (the app's `fetch`, or the global) as `next`, so an integration that answers some calls itself (a prerendered build's static artifacts) no longer competes with the app's `configureServerFunctionsClient({ fetch })`. Exported type `ServerFunctionsSend`. +- 3f36f77: Server components: binding slots are removed. Client components in slots replace them: place a client component through a `Slot` (``) where the server's markup needs client behavior, or a form `action` for a mutation. Removed with them: the `BindingSlot`, `SlotOutput` and `SlotError` types, the lazy `@solidjs/web/frames/bind` entry and its `"bind"` tier, the `_s:*` position markers and the compiled `ssrClaim` hole, the effect of the `serverComponents` compiler option (`@solidjs/compiler` and `@solidjs/babel-plugin` still accept it, so existing build configs keep working, and ignore it), and the `BINDING_SLOT_POSITION` diagnostic code (`@solidjs/signals`' `DiagnosticCode`, `solid-js`'s `diagnostics.json`). Ordinary slots, their `slot:` ranges and records, and `$key` are unchanged. +- 8e2590e: `respond(value, init)` accepts every value a plain return does (#4060). Its passthrough JSON body — read only by consumers without the client runtime — is now encoded when read instead of when the envelope is built, so a `bigint` no longer throws inside `respond()` and fails both the direct call and the HTTP call. Unscripted HTTP callers get the carried JSON body only when JSON carries the value faithfully; otherwise the value is encoded the same way as a plain return. +- 8bd7a5b: Bind each server-component site to its own frame when the server minted the sites in a different order than the client mounts them (#4042). Document adoption took sites of one server function by ordinal (`id`, `id~2`, …), so a site behind async setup, rendered after its neighbours on the server but mounted first on the client, adopted a neighbour's element, and its first update landed in the wrong frame. A document frame for a call with arguments now carries the call's argument hash (`data-fa`), and a mount takes the unclaimed site showing its own arguments, falling back to the first unclaimed site when none does. Argless calls render byte-identical markup. +- 9ac1481: The server error hook (`configureServerErrors`, a render's `onError`) now hears each error object once per request — once per render when no request is in scope — instead of once per process (#4125). Reusing one `Error` object across requests (a module-level constant, a cached rejection) used to notify only the first request's hook and hand later requests the first request's mapped wire value; each request now gets its own report and its own answer. Within a request the hook hears an error once per `kind`: a direct server-function call that throws during SSR is heard as `server-function`, and the `` or `` that contains it is heard as `render`, so a render's `onError` alone tells you the render failed. Every road still carries the first mapped value. +- 3e94215: Server functions: arguments never decode `Response` or `Request` values. The handler decodes client → server argument payloads with the configured plugin list minus the `Response`/`Request` plugins, so a call carrying one — top level, nested, or inside a promise or stream — is refused with `400` before the function runs. `enableRichArguments()` rejects such a call before sending. Results and hydration keep the full plugin set. + + Server-function responses now default to `X-Content-Type-Options: nosniff`; a value the function sets itself is kept. + +- a61c929: A server component in a document marks its live holes only once the render has served something a later commit can replace: an async iterable it pumps, or a loading value or seed shown ahead of its landing. Until then a hole that resolves synchronously ships without `lh` markers, `data-lha` addresses or a ledger binding, because no channel op can ever address it. On a request/response page that is every hole: the 1,406-comment hackernews thread drops from 948 KB to 787 KB and renders in about half the server time. +- 36039e2: The shell-end marker is spliced in before `` instead of being appended after `` when the shell is a whole document (#4030). Async render mode and a stream with nothing pending now end with `` again; a shell without `` (an embedded render) still gets the marker appended. +- 46db1cf: `renderToStream` waits one task before flushing the shell while fragments are still pending, so a read whose retry chain outruns the microtask drain (a server function over in-memory data, a cache answering on `setImmediate`, I/O that already completed) renders inline instead of shipping its `Loading` fallback, a `