Content temporarily unavailable
Main merge and size comparison, 2026-10-26#
Measured merge: ed22e033c335dd6a3e3b84290a0961885a7bfd9f. Main: 5649a07d468117891193c2e4cde9c7706308b1cd. The merge's other parent is b4955406a57e0032caffd7d494ca66799c45dd00.
Integration contract and evidence#
The existing SSR law remains: the first browser view reproduces the rendered server rows and readiness. An infinite query uses the identity of its initial window for that transport. Authority: docs/guides/ssr.md, the existing ssr-snapshot-admission-oracle.ts, and its React receiving driver in descriptor-query-binding-oracle.test.tsx.
Main moved infinite-query binding into core. The merge carries the original window query's hash through that binding and passes its client and hash to the window controller. It retains the server snapshot callback and main's reclaim, identity, and render-rejection boundaries.
RED: the first merge resolution computed the hash from a newly created Collection instead of the query. The unchanged SSR oracle rejected it in seven checks: prepared query admission, first browser rows/readiness for ready and cold/loading sources, and the fixed and random campaigns. This attempted simplification is the hostile wrong design: its generated Collection ID cannot name the preloaded query window across server and browser. The repair retains the initial query hash instead. The same receiving comparisons are GREEN. No oracle row or readiness expectation was weakened.
Main's shared React identity law rejects an unkeyed opaque query with UnhashableQueryIRError during preparation. Its authority is the identity contract in packages/db/tests/conformance/contract.ts from main. Two older warm/cold streaming checks expected a later custom SSR error. Their assertion now requires the earlier error class. Keyed controls still require successful rendering and transported rows. This changes error precedence to the law merged from main; it does not permit untransported rows.
The existing infinite SSR grammar reached the following states in normal runs:
| State | Fixed | Random |
|---|---|---|
| Cold/loading | 19 | 22 |
| Unbacked ready-empty | 5 | 6 |
| Unbacked rows | 43 | 42 |
| Prepared query result | 18 | 17 |
| Normalized ready source | 12 | 18 |
| Normalized partial source | 23 | 15 |
| Pending query | 19 | 26 |
| Server write | 29 | 35 |
| Browser write | 27 | 31 |
| Same-query browser preload | 14 | 16 |
Validation: 701 React runtime tests, 482 scoped core tests, 109 Svelte tests, 13 additional Svelte server-to-browser receiving tests, and 9 Router tests: 1,314 tests. Normal staged lint, oracle lint, production error erasure, error-document consistency, private-name cache checks, and the minified public API check passed. The size builds also completed. Vitest's optional in-test typechecker reported cross-package fixture/rootDir errors; these runtime runs use --typecheck.enabled=false. This is not a claim of a clean full typecheck.
This bounded integration run does not establish all framework scheduling paths or close the earlier whole-PR evidence gaps. Their existing owners and limits remain in the coverage map.
Shipped bytes against main#
Vite packages and app scenarios use pnpm size:compare --exact-base --files --packages db,react-db,react-router-with-db. Dependencies are external for package bundles; scenarios inline their workspace dependencies and leave React and TanStack Query external. All use production definitions, minification, gzip level 9, and Brotli level 11.
| Bundle | Main gzip | Merge gzip | Gzip change | Brotli change |
|---|---|---|---|---|
| db | 103207 | 104108 | +901 (+0.9%) | +737 |
| react-db | 4921 | 4964 | +43 (+0.9%) | +44 |
| react-router-with-db | 943 | 968 | +25 (+2.7%) | +27 |
| app | 102142 | 102608 | +466 (+0.5%) | +350 |
| app-effect | 104582 | 105075 | +493 (+0.5%) | +450 |
| app-group-by | 102034 | 102482 | +448 (+0.4%) | +378 |
| app-includes | 102215 | 102686 | +471 (+0.5%) | +408 |
| app-join | 102212 | 102683 | +471 (+0.5%) | +387 |
| app-local-storage | 105055 | 105520 | +465 (+0.4%) | +383 |
| app-optimistic-action | 102288 | 102755 | +467 (+0.5%) | +570 |
| app-paced-mutations | 103326 | 103785 | +459 (+0.4%) | +497 |
| svelte-db | 2220 | 2231 | +11 | +11 |
Svelte uses its own svelte-package build rather than Vite library mode. Its package measurement compiles packaged .svelte and .svelte.js modules in production client mode, then bundles every export with esbuild and external package dependencies. It uses the same compression settings as the Vite package measurements. It is a package measurement, not a Svelte app scenario.
The typical app grows by 466 gzip bytes (0.5%) and 350 Brotli bytes. The all-exports package measurements are separate views and must not be added to that app's size. Tests and this evidence document are outside shipped bundles. This task measures the merge; it does not attempt a new size optimization.
The package proxy returned HTTP 403 for a newly locked tool dependency and public npm was unavailable. Both source trees therefore used identical cached build tools: Vite 7.3.6, esbuild 0.28.1, and TypeScript 5.9.3. The measurement compares the exact main and merge sources with that common toolchain; it does not certify a fresh installation of the merged lockfile. The normal commit lint hook passed with pnpm's dependency auto-install disabled.