Solid 2.0 rc.13: runtime parity, call-record panel, observe exclusion - #21
Conversation
…ore nodes, HMR plumbing) Compile with @solidjs/compiler instead of @dom-expressions/compiler, so delegated handlers use the `_$$click` key the rc.9+ runtime reads. Every delegated click in the reactivity and ownership panels was dead. Peers and dev deps move to solid-js / @solidjs/web ^2.0.0-rc.12 and @solidjs/vite-plugin 3.0.0-next.46. Runtime field parity with rc.11/rc.12: - a node's error lives on its extension (`_x._error`) - store slot nodes are signals carrying the store target as `_host` (`_isStoreNode` never existed); classified as `'store'` - the built-in refresh wraps components in an unnamed memo flagged `CONFIG_PLUMBING` (1 << 25) on `_config`; the graph hides it and owner paths and the ownership tree walk through it The server-side Errored fallback sets the 500 status and logs without writing toolbar state (the dev runtime now flags server signal writes). Tests: the "no dev runtime" registry suite mocks `DEV` (rc.11 solid-js resolves `node.development` to server.dev.js, which ships DEV); new cases for `_x._error`, `_host`, and plumbing in registry and tree. Playwright workers run under `--conditions=development`, matching the toolbar's own export condition; the prod server build now sanitizes render errors. The lockfile is left at its previous state: 2.0.0-rc.12 is not published yet and must be regenerated once it lands. Co-authored-by: Cursor <[email protected]>
…e toolbar from the observe layer
- `observeServerFunctionCalls` was removed from `@solidjs/web/server-functions`
in rc.9, so the panel has received nothing since. `src/index.tsx` now
subscribes to `OBSERVE.records` for `"call"` with `{ bodies: true }` and
maps each settled record into the tracker's existing request/response
events (`callRecordToEvents`): request at `event.at`, response at
`at + durationMs`, `meta.name` from the record's source name, a
fetch-rejected call as request-only with the failure on `meta.error`, and
nothing when no request was built.
- `DevToolbar` marks its owner with `OBSERVE.exclude`; `AppScope` hands the
wrapped app back with `OBSERVE.include`, so the toolbar's own signals and
effects are never reported as the app's by diagnostics, attribution or the
performance tracks (nearest marked ancestor answers).
- `pushServerFunctionCall` / `ServerFunctionCall` stay exported.
Requires solid-js / @solidjs/web 2.0.0-rc.12 (solidjs/solid#3705).
Co-authored-by: Claude via Cursor <[email protected]>
Co-authored-by: Cursor <[email protected]>
|
Review the following changes in direct dependencies. Learn more about Socket for GitHub.
|
…rk failed fetches The `"call"` record arrives at settle, so a slow or hung call never appeared in the panel. The panel now also subscribes to the `"request"` record (solidjs/solid#3708): a call shows up the moment its request is handed to `fetch`, and its `"call"` record completes the row — the two are joined by the `live` object the runtime hands to both listeners. A settled call whose request was never seen (the subscription came mid-call) is shown whole from its `"call"` record. A fetch that itself rejected re-shows the row as failed (`meta.error`): "Request failed: <message>" in place of "Waiting for response." and an ERR badge in the list. `connectCallRecords(records)` owns the wiring (structural channel type, so tests drive it with a fake); `requestRecordToEvent` / `settleRecordToEvents` are the pure mappings beside the settle-only `callRecordToEvents`. No exported type changes. Co-authored-by: Claude via Cursor <[email protected]> Co-authored-by: Cursor <[email protected]>
Solid 2.0.0-rc.13 is published; rc.12 never was (npm goes rc.11 -> rc.13). The peer floor is the lowest published version carrying both features this branch depends on — OBSERVE.include (solidjs/solid#3705) and the "request" call record / CallRequestEvent / subscribe(..., { bodies: true }) (solidjs/solid#3708). rc.11's @solidjs/web types have neither; rc.13's do. So peers and devDeps move to ^2.0.0-rc.13 and @solidjs/compiler pins 2.0.0-rc.13. pnpm-lock.yaml is regenerated from the registry (no link: overrides; the branch was developed against local links that were never committed). pnpm added the rc.13 Solid packages (solid-js, @solidjs/web, @solidjs/signals, @solidjs/compiler and its platform binaries) to minimumReleaseAgeExclude so the fresh release installs. Re-run against the published packages: vitest 96/96, tsc clean, build emits only _$$click, playwright 8/8, publint + attw clean.
|
Warning Review the following alerts detected in dependencies. According to your organization's Security Policy, it is recommended to resolve "Warn" alerts. Learn more about Socket for GitHub.
|
Ports the devtools from the rc.0 runtime they were written against onto Solid 2.0 rc.13. Three feature commits plus a final one that resolves the published runtime: the first makes the toolbar build and read the current runtime again; the second puts the server-function panel back on a live data source and keeps the toolbar out of the runtime's observe layer; the third shows a call the moment its request is sent; the last regenerates the lockfile against npm.
Runtime
Peer floor is
^2.0.0-rc.13forsolid-js/@solidjs/web(and@solidjs/compilerpinned to2.0.0-rc.13).2.0.0-rc.12was never published — npm goes rc.11 → rc.13 — and the floor is the lowest published version that carries both features commits 2 and 3 depend on:OBSERVE.include/CallLive.request/OBSERVE.records.subscribe(type, fn, { bodies: true })(solidjs/solid#3705) and the"request"record /CallRequestEvent(solidjs/solid#3708). rc.11's@solidjs/webtypes contain neither; rc.13's contain both.pnpm-lock.yamlnow resolves from the registry (nolink:overrides were ever committed; the branch was developed against local links). pnpm added the rc.13 Solid packages tominimumReleaseAgeExcludeinpnpm-workspace.yamlso the fresh release installs. All suites were re-run against the published packages:vitest96/96,tscclean, build emits only_$$click(16×), Playwright 8/8,publint+attwclean.Commit 1 — build and read the rc.13 runtime (
282e395)@dom-expressions/[email protected], which emits$$click; the rc.9+ runtime reads_$$click. Every click in the reactivity and ownership panels was a no-op. The build (and the e2e fixture) now compile with@solidjs/compiler, the compiler that ships with the runtime. Dist before: 16×$$click, 0×_$$click; after: 0×$$click, 16×_$$click.node._x?._error(wasnode._error)._hostbackref (the previous_isStoreNodefield never existed); they render asstoreagain._plumbing(CONFIG_PLUMBING = 1 << 25) and unnamed, rather than named[solid-refresh]…. The graph hides plumbing nodes and the ownership tree walks through them without a row. Prefix handling kept.Internal Server Error, so Playwright runs withNODE_OPTIONS=--conditions=development(the toolbar only ships under that condition).Erroredfallback wrote signals during SSR, which rc.11 reports asSERVER_WRITE(deprecated, becoming an error). On the server it now sets the 500 status and logs only.registry.test.ts's "no dev runtime" suite relied on Node resolvingsolid-jsto a build withoutDEV; rc.11'snode → developmentcondition resolvesserver.dev.js, so the suite mockssolid-jswith a switchableDEV.Commit 2 — call record + observe exclusion (
b1911ae)observeServerFunctionCallswas removed from@solidjs/web/server-functionsin rc.9; the panel has shown nothing since.src/index.tsxnow subscribes toOBSERVE.recordsfor"call"with{ bodies: true }and maps each settled record into the tracker's existing request/response events (callRecordToEvents, unit-tested): request atevent.at, response atat + durationMs,meta.namefrom the record's source name, a fetch-rejected call as request-only with the failure onmeta.error, nothing when no request was built.DevToolbarmarks its owner withOBSERVE.exclude;AppScopehands the wrapped app back withOBSERVE.include(nearest marked ancestor answers), so the toolbar's own signals and effects are never reported as the app's by diagnostics, attribution or the performance tracks — which the Vite plugin now enables by default invite dev.Commit 3 — a call appears when its request is sent (
05b6c73)"call"record arrives at settle, so a slow or hung call never appeared. The panel now also subscribes to the"request"record (solidjs/solid#3708): a row appears the moment the request is handed tofetch, and the"call"record completes it — joined by theliveobject the runtime hands to both listeners (aWeakMap<CallLive, instance>). A settled call whose request was never seen (subscription came mid-call) is shown whole from its"call"record.ERRbadge in the list.connectCallRecords(records)owns the wiring behind a structural channel type so tests drive it with a fake;requestRecordToEvent/settleRecordToEventsare the pure mappings beside the settle-onlycallRecordToEvents.Commit 4 — resolve the rc.13 runtime from the registry (
ac9fdd4)package.json: peers and devDepssolid-js/@solidjs/web^2.0.0-rc.13,@solidjs/compiler2.0.0-rc.13.pnpm-lock.yamlregenerated from npm;pnpm-workspace.yamlgains the rc.13minimumReleaseAgeExcludeentries pnpm wrote during install.Public API changes
solid-js/@solidjs/web:^2.0.0-rc.0→^2.0.0-rc.13(breaking for consumers on earlier RCs; the package was already non-functional on rc.9+).@dom-expressions/compiler→@solidjs/compiler;@solidjs/vite-plugindevDependency3.0.0-next.35→3.0.0-next.46.DevToolbar,mountDevToolbar,pushServerFunctionCall,ServerFunctionCallunchanged).Behavior changes
fetchand completes at settle; a fetch that fails is marked as failed.request.timeis the send time (after serialization andprepareRequest), as it was under the rc.0 probe, so the displayed duration is wire + decode.Tests
Unit 73/75 → 96/96 (
vitest), typecheck clean, e2e 7/8 → 8/8 (Playwright),publint+attwclean. Verified against the published2.0.0-rc.13packages resolved from npm.— Claude via Cursor