From 4888c630b7cab8f61f1e72ae57396716732c6a91 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 11 Nov 2026 05:40:51 +0000 Subject: [PATCH 1/3] ci: Version Packages (rc) --- .changeset/pre.json | 5 ++ examples/angular/todos/package.json | 4 +- examples/electron/offline-first/package.json | 10 +-- .../offline-transactions/package.json | 10 +-- .../react-native/shopping-list/package.json | 10 +-- .../react/action-enforcement/package.json | 4 +- examples/react/next-ssr-e2e/package.json | 4 +- .../react/offline-transactions/package.json | 10 +-- .../react/paced-mutations-demo/package.json | 4 +- examples/react/projects/package.json | 4 +- examples/react/start-ssr-e2e/package.json | 2 +- examples/react/todo/package.json | 8 +- examples/solid/todo/package.json | 8 +- packages/angular-db/CHANGELOG.md | 7 ++ packages/angular-db/package.json | 2 +- .../CHANGELOG.md | 7 ++ .../package.json | 2 +- .../CHANGELOG.md | 7 ++ .../package.json | 2 +- .../CHANGELOG.md | 7 ++ .../package.json | 2 +- packages/convex-db-collection/CHANGELOG.md | 8 ++ packages/convex-db-collection/package.json | 2 +- packages/db-ivm/CHANGELOG.md | 6 ++ packages/db-ivm/package.json | 2 +- .../db-sqlite-persistence-core/CHANGELOG.md | 7 ++ .../db-sqlite-persistence-core/package.json | 2 +- packages/db/CHANGELOG.md | 13 ++++ packages/db/package.json | 2 +- packages/electric-db-collection/CHANGELOG.md | 9 +++ packages/electric-db-collection/package.json | 2 +- .../CHANGELOG.md | 7 ++ .../package.json | 2 +- .../expo-db-sqlite-persistence/CHANGELOG.md | 7 ++ .../expo-db-sqlite-persistence/package.json | 2 +- .../node-db-sqlite-persistence/CHANGELOG.md | 9 +++ .../node-db-sqlite-persistence/package.json | 2 +- packages/offline-transactions/CHANGELOG.md | 6 ++ packages/offline-transactions/package.json | 2 +- packages/powersync-db-collection/CHANGELOG.md | 11 +++ packages/powersync-db-collection/package.json | 2 +- packages/preact-db/CHANGELOG.md | 7 ++ packages/preact-db/package.json | 2 +- packages/query-db-collection/CHANGELOG.md | 6 ++ packages/query-db-collection/package.json | 2 +- packages/react-db/CHANGELOG.md | 7 ++ packages/react-db/package.json | 2 +- .../CHANGELOG.md | 7 ++ .../package.json | 2 +- packages/rxdb-db-collection/CHANGELOG.md | 11 +++ packages/rxdb-db-collection/package.json | 2 +- packages/solid-db/CHANGELOG.md | 9 +++ packages/solid-db/package.json | 2 +- packages/svelte-db/CHANGELOG.md | 7 ++ packages/svelte-db/package.json | 2 +- .../tauri-db-sqlite-persistence/CHANGELOG.md | 7 ++ .../tauri-db-sqlite-persistence/package.json | 2 +- packages/trailbase-db-collection/CHANGELOG.md | 11 +++ packages/trailbase-db-collection/package.json | 2 +- packages/vue-db/CHANGELOG.md | 7 ++ packages/vue-db/package.json | 2 +- pnpm-lock.yaml | 78 +++++++++---------- 62 files changed, 297 insertions(+), 102 deletions(-) diff --git a/.changeset/pre.json b/.changeset/pre.json index b0c1ce4f14..d13a372e99 100644 --- a/.changeset/pre.json +++ b/.changeset/pre.json @@ -46,6 +46,7 @@ "changesets": [ "bright-cups-infer", "browser-sqlite-separate-wasm", + "cleanup-discarded-rows-stay-cleared", "convex-collection", "convex-failed-load-release", "db-query-identity-laws", @@ -59,11 +60,13 @@ "fix-distinct-hash-collisions", "fix-effect-left-join-startup", "fix-held-query-page-end", + "fix-persisted-query-startup", "fix-restarted-subscription-rows", "fix-solid-query-input-tracking", "gc-waits-for-persisting-transactions", "keep-live-query-through-failed-replay", "live-query-output-indexing", + "observer-restart-rewrite", "observer-row-container-sharing", "on-demand-network-first", "opt-in-operators", @@ -71,11 +74,13 @@ "persisted-reload-keeps-status", "powersync-failed-load-release", "preact-db-adapter", + "preserve-executor-handoff-callers", "preserve-reentrant-ordering-repair", "quiet-documents-return", "react-db-strip-dev-warnings", "react-db-unhashable-throws", "recover-interleaved-electric-source-commits", + "refresh-compatible-dependencies", "reject-negative-limits", "reserved-commit-defers-every-hydration", "resume-independent-subscription-demand", diff --git a/examples/angular/todos/package.json b/examples/angular/todos/package.json index 004c3f394c..fd3aae72c2 100644 --- a/examples/angular/todos/package.json +++ b/examples/angular/todos/package.json @@ -27,8 +27,8 @@ "@angular/forms": "^20.3.35", "@angular/platform-browser": "^20.3.35", "@angular/router": "^20.3.35", - "@tanstack/angular-db": "^1.0.0-rc.1.4", - "@tanstack/db": "^1.0.0-rc.1.4", + "@tanstack/angular-db": "^1.0.0-rc.1.5", + "@tanstack/db": "^1.0.0-rc.1.5", "rxjs": "^7.8.2", "tslib": "^2.9.1", "zone.js": "~0.15.0" diff --git a/examples/electron/offline-first/package.json b/examples/electron/offline-first/package.json index c05a42a58a..b3b17d7034 100644 --- a/examples/electron/offline-first/package.json +++ b/examples/electron/offline-first/package.json @@ -13,11 +13,11 @@ "rebuild:electron": "node scripts/rebuild-electron.mjs" }, "dependencies": { - "@tanstack/electron-db-sqlite-persistence": "^1.0.0-rc.1.4", - "@tanstack/node-db-sqlite-persistence": "^1.0.0-rc.1.4", - "@tanstack/offline-transactions": "^1.2.0", - "@tanstack/query-db-collection": "^1.5.1", - "@tanstack/react-db": "^1.0.0-rc.1.4", + "@tanstack/electron-db-sqlite-persistence": "^1.0.0-rc.1.5", + "@tanstack/node-db-sqlite-persistence": "^1.0.0-rc.1.5", + "@tanstack/offline-transactions": "^1.2.1", + "@tanstack/query-db-collection": "^1.5.2", + "@tanstack/react-db": "^1.0.0-rc.1.5", "@tanstack/react-query": "^5.107.1", "better-sqlite3": "^12.11.1", "react": "^19.3.1", diff --git a/examples/react-native/offline-transactions/package.json b/examples/react-native/offline-transactions/package.json index 7137b6b1ac..67c400e479 100644 --- a/examples/react-native/offline-transactions/package.json +++ b/examples/react-native/offline-transactions/package.json @@ -15,11 +15,11 @@ "@op-engineering/op-sqlite": "^15.2.14", "@react-native-async-storage/async-storage": "2.1.2", "@react-native-community/netinfo": "11.4.1", - "@tanstack/db": "^1.0.0-rc.1.4", - "@tanstack/offline-transactions": "^1.2.0", - "@tanstack/query-db-collection": "^1.5.1", - "@tanstack/react-db": "^1.0.0-rc.1.4", - "@tanstack/react-native-db-sqlite-persistence": "^1.0.0-rc.1.4", + "@tanstack/db": "^1.0.0-rc.1.5", + "@tanstack/offline-transactions": "^1.2.1", + "@tanstack/query-db-collection": "^1.5.2", + "@tanstack/react-db": "^1.0.0-rc.1.5", + "@tanstack/react-native-db-sqlite-persistence": "^1.0.0-rc.1.5", "@tanstack/react-query": "^5.107.1", "expo": "~53.0.26", "expo-constants": "~17.1.0", diff --git a/examples/react-native/shopping-list/package.json b/examples/react-native/shopping-list/package.json index 3805203b68..324ad8be52 100644 --- a/examples/react-native/shopping-list/package.json +++ b/examples/react-native/shopping-list/package.json @@ -18,11 +18,11 @@ "@op-engineering/op-sqlite": "^15.2.14", "@react-native-async-storage/async-storage": "2.1.2", "@react-native-community/netinfo": "11.4.1", - "@tanstack/db": "^1.0.0-rc.1.4", - "@tanstack/electric-db-collection": "^1.0.0-rc.1.4", - "@tanstack/offline-transactions": "^1.2.0", - "@tanstack/react-db": "^1.0.0-rc.1.4", - "@tanstack/react-native-db-sqlite-persistence": "^1.0.0-rc.1.4", + "@tanstack/db": "^1.0.0-rc.1.5", + "@tanstack/electric-db-collection": "^1.0.0-rc.1.5", + "@tanstack/offline-transactions": "^1.2.1", + "@tanstack/react-db": "^1.0.0-rc.1.5", + "@tanstack/react-native-db-sqlite-persistence": "^1.0.0-rc.1.5", "@tanstack/react-query": "^5.107.1", "expo": "~53.0.26", "expo-constants": "~17.1.0", diff --git a/examples/react/action-enforcement/package.json b/examples/react/action-enforcement/package.json index 5d5a489443..0c87587d71 100644 --- a/examples/react/action-enforcement/package.json +++ b/examples/react/action-enforcement/package.json @@ -12,8 +12,8 @@ }, "dependencies": { "@tanstack/query-core": "^5.107.1", - "@tanstack/query-db-collection": "^1.5.1", - "@tanstack/react-db": "^1.0.0-rc.1.4", + "@tanstack/query-db-collection": "^1.5.2", + "@tanstack/react-db": "^1.0.0-rc.1.5", "react": "^19.3.1", "react-dom": "^19.3.1" }, diff --git a/examples/react/next-ssr-e2e/package.json b/examples/react/next-ssr-e2e/package.json index 2bc9396d4f..cf33ec0be1 100644 --- a/examples/react/next-ssr-e2e/package.json +++ b/examples/react/next-ssr-e2e/package.json @@ -9,8 +9,8 @@ "test:e2e": "pnpm --filter @tanstack/db build && pnpm --filter @tanstack/react-db build && playwright test" }, "dependencies": { - "@tanstack/db": "^1.0.0-rc.1.4", - "@tanstack/react-db": "^1.0.0-rc.1.4", + "@tanstack/db": "^1.0.0-rc.1.5", + "@tanstack/react-db": "^1.0.0-rc.1.5", "next": "^16.4.5", "react": "^19.3.1", "react-dom": "^19.3.1" diff --git a/examples/react/offline-transactions/package.json b/examples/react/offline-transactions/package.json index 745e20aab1..8ee71ca72e 100644 --- a/examples/react/offline-transactions/package.json +++ b/examples/react/offline-transactions/package.json @@ -8,11 +8,11 @@ "build": "vite build && tsc --noEmit" }, "dependencies": { - "@tanstack/browser-db-sqlite-persistence": "^1.0.0-rc.1.4", - "@tanstack/db": "^1.0.0-rc.1.4", - "@tanstack/offline-transactions": "^1.2.0", - "@tanstack/query-db-collection": "^1.5.1", - "@tanstack/react-db": "^1.0.0-rc.1.4", + "@tanstack/browser-db-sqlite-persistence": "^1.0.0-rc.1.5", + "@tanstack/db": "^1.0.0-rc.1.5", + "@tanstack/offline-transactions": "^1.2.1", + "@tanstack/query-db-collection": "^1.5.2", + "@tanstack/react-db": "^1.0.0-rc.1.5", "@tanstack/react-query": "^5.107.1", "@tanstack/react-router": "^1.170.46", "@tanstack/react-router-devtools": "^1.167.3", diff --git a/examples/react/paced-mutations-demo/package.json b/examples/react/paced-mutations-demo/package.json index 2fa3b78d0c..0c74a9fc71 100644 --- a/examples/react/paced-mutations-demo/package.json +++ b/examples/react/paced-mutations-demo/package.json @@ -9,8 +9,8 @@ "preview": "vite preview" }, "dependencies": { - "@tanstack/db": "^1.0.0-rc.1.4", - "@tanstack/react-db": "^1.0.0-rc.1.4", + "@tanstack/db": "^1.0.0-rc.1.5", + "@tanstack/react-db": "^1.0.0-rc.1.5", "mitt": "^3.0.1", "react": "^19.3.1", "react-dom": "^19.3.1" diff --git a/examples/react/projects/package.json b/examples/react/projects/package.json index 399ed5a874..b2cb44d8fe 100644 --- a/examples/react/projects/package.json +++ b/examples/react/projects/package.json @@ -17,8 +17,8 @@ "dependencies": { "@tailwindcss/vite": "^4.3.5", "@tanstack/query-core": "^5.107.1", - "@tanstack/query-db-collection": "^1.5.1", - "@tanstack/react-db": "^1.0.0-rc.1.4", + "@tanstack/query-db-collection": "^1.5.2", + "@tanstack/react-db": "^1.0.0-rc.1.5", "@tanstack/react-router": "^1.170.46", "@tanstack/react-router-devtools": "^1.167.3", "@tanstack/react-router-with-query": "^1.130.17", diff --git a/examples/react/start-ssr-e2e/package.json b/examples/react/start-ssr-e2e/package.json index d485f8d408..0a9cfd784a 100644 --- a/examples/react/start-ssr-e2e/package.json +++ b/examples/react/start-ssr-e2e/package.json @@ -10,7 +10,7 @@ "test:e2e:hosted": "playwright test" }, "dependencies": { - "@tanstack/react-db": "^1.0.0-rc.1.4", + "@tanstack/react-db": "^1.0.0-rc.1.5", "@tanstack/react-router": "^1.170.46", "@tanstack/react-router-with-db": "^1.0.0-rc.1", "@tanstack/react-start": "^1.169.5", diff --git a/examples/react/todo/package.json b/examples/react/todo/package.json index 784acea66f..e61dada2cb 100644 --- a/examples/react/todo/package.json +++ b/examples/react/todo/package.json @@ -3,13 +3,13 @@ "private": true, "version": "0.1.31", "dependencies": { - "@tanstack/electric-db-collection": "^1.0.0-rc.1.4", + "@tanstack/electric-db-collection": "^1.0.0-rc.1.5", "@tanstack/query-core": "^5.107.1", - "@tanstack/query-db-collection": "^1.5.1", - "@tanstack/react-db": "^1.0.0-rc.1.4", + "@tanstack/query-db-collection": "^1.5.2", + "@tanstack/react-db": "^1.0.0-rc.1.5", "@tanstack/react-router": "^1.170.46", "@tanstack/react-start": "^1.169.5", - "@tanstack/trailbase-db-collection": "^1.0.0-rc.1.4", + "@tanstack/trailbase-db-collection": "^1.0.0-rc.1.5", "cors": "^2.8.6", "drizzle-orm": "^0.45.1", "drizzle-zod": "^0.8.3", diff --git a/examples/solid/todo/package.json b/examples/solid/todo/package.json index e349a1ceb6..af41643a3e 100644 --- a/examples/solid/todo/package.json +++ b/examples/solid/todo/package.json @@ -3,13 +3,13 @@ "private": true, "version": "0.0.39", "dependencies": { - "@tanstack/electric-db-collection": "^1.0.0-rc.1.4", + "@tanstack/electric-db-collection": "^1.0.0-rc.1.5", "@tanstack/query-core": "^5.107.1", - "@tanstack/query-db-collection": "^1.5.1", - "@tanstack/solid-db": "^1.0.0-rc.1.4", + "@tanstack/query-db-collection": "^1.5.2", + "@tanstack/solid-db": "^1.0.0-rc.1.5", "@tanstack/solid-router": "^1.170.43", "@tanstack/solid-start": "^1.169.5", - "@tanstack/trailbase-db-collection": "^1.0.0-rc.1.4", + "@tanstack/trailbase-db-collection": "^1.0.0-rc.1.5", "cors": "^2.8.6", "drizzle-orm": "^0.45.1", "drizzle-zod": "^0.8.3", diff --git a/packages/angular-db/CHANGELOG.md b/packages/angular-db/CHANGELOG.md index b94413f3fd..acb9c49584 100644 --- a/packages/angular-db/CHANGELOG.md +++ b/packages/angular-db/CHANGELOG.md @@ -1,5 +1,12 @@ # @tanstack/angular-db +## 1.0.0-rc.1.5 + +### Patch Changes + +- Updated dependencies [[`522f657`](https://github.com/TanStack/db/commit/522f65777a42673a1befcb8169854002894d15c0), [`a86aa43`](https://github.com/TanStack/db/commit/a86aa430418572a4834972aa60b7d6a18e2e08ba), [`6ec538e`](https://github.com/TanStack/db/commit/6ec538ecd3c8a966e6a1e93d88b82023021a47a4)]: + - @tanstack/db@1.0.0-rc.1.5 + ## 1.0.0-rc.1.4 ### Patch Changes diff --git a/packages/angular-db/package.json b/packages/angular-db/package.json index c82259591d..b29e7d1285 100644 --- a/packages/angular-db/package.json +++ b/packages/angular-db/package.json @@ -1,6 +1,6 @@ { "name": "@tanstack/angular-db", - "version": "1.0.0-rc.1.4", + "version": "1.0.0-rc.1.5", "description": "Angular integration for @tanstack/db", "author": "Ethan McDaniel", "license": "MIT", diff --git a/packages/browser-db-sqlite-persistence/CHANGELOG.md b/packages/browser-db-sqlite-persistence/CHANGELOG.md index 887d81afab..f697c46909 100644 --- a/packages/browser-db-sqlite-persistence/CHANGELOG.md +++ b/packages/browser-db-sqlite-persistence/CHANGELOG.md @@ -1,5 +1,12 @@ # @tanstack/browser-db-sqlite-persistence +## 1.0.0-rc.1.5 + +### Patch Changes + +- Updated dependencies []: + - @tanstack/db-sqlite-persistence-core@1.0.0-rc.1.5 + ## 1.0.0-rc.1.4 ### Patch Changes diff --git a/packages/browser-db-sqlite-persistence/package.json b/packages/browser-db-sqlite-persistence/package.json index b8e6bce2ef..6abdf8c4f5 100644 --- a/packages/browser-db-sqlite-persistence/package.json +++ b/packages/browser-db-sqlite-persistence/package.json @@ -1,6 +1,6 @@ { "name": "@tanstack/browser-db-sqlite-persistence", - "version": "1.0.0-rc.1.4", + "version": "1.0.0-rc.1.5", "description": "Browser wa-sqlite persisted collection adapter for TanStack DB", "author": "TanStack Team", "license": "MIT", diff --git a/packages/capacitor-db-sqlite-persistence/CHANGELOG.md b/packages/capacitor-db-sqlite-persistence/CHANGELOG.md index cc9e22aee3..011a80a956 100644 --- a/packages/capacitor-db-sqlite-persistence/CHANGELOG.md +++ b/packages/capacitor-db-sqlite-persistence/CHANGELOG.md @@ -1,5 +1,12 @@ # @tanstack/capacitor-db-sqlite-persistence +## 1.0.0-rc.1.5 + +### Patch Changes + +- Updated dependencies []: + - @tanstack/db-sqlite-persistence-core@1.0.0-rc.1.5 + ## 1.0.0-rc.1.4 ### Patch Changes diff --git a/packages/capacitor-db-sqlite-persistence/package.json b/packages/capacitor-db-sqlite-persistence/package.json index d3504b4ac8..377c8802ac 100644 --- a/packages/capacitor-db-sqlite-persistence/package.json +++ b/packages/capacitor-db-sqlite-persistence/package.json @@ -1,6 +1,6 @@ { "name": "@tanstack/capacitor-db-sqlite-persistence", - "version": "1.0.0-rc.1.4", + "version": "1.0.0-rc.1.5", "description": "Capacitor SQLite persisted collection adapter for TanStack DB", "author": "TanStack Team", "license": "MIT", diff --git a/packages/cloudflare-durable-objects-db-sqlite-persistence/CHANGELOG.md b/packages/cloudflare-durable-objects-db-sqlite-persistence/CHANGELOG.md index d96a14347e..bcbe09d4a1 100644 --- a/packages/cloudflare-durable-objects-db-sqlite-persistence/CHANGELOG.md +++ b/packages/cloudflare-durable-objects-db-sqlite-persistence/CHANGELOG.md @@ -1,5 +1,12 @@ # @tanstack/cloudflare-durable-objects-db-sqlite-persistence +## 1.0.0-rc.1.5 + +### Patch Changes + +- Updated dependencies []: + - @tanstack/db-sqlite-persistence-core@1.0.0-rc.1.5 + ## 1.0.0-rc.1.4 ### Patch Changes diff --git a/packages/cloudflare-durable-objects-db-sqlite-persistence/package.json b/packages/cloudflare-durable-objects-db-sqlite-persistence/package.json index c1d98cb502..59ed7dc128 100644 --- a/packages/cloudflare-durable-objects-db-sqlite-persistence/package.json +++ b/packages/cloudflare-durable-objects-db-sqlite-persistence/package.json @@ -1,6 +1,6 @@ { "name": "@tanstack/cloudflare-durable-objects-db-sqlite-persistence", - "version": "1.0.0-rc.1.4", + "version": "1.0.0-rc.1.5", "description": "Cloudflare Durable Object SQLite persisted collection adapter for TanStack DB", "author": "TanStack Team", "license": "MIT", diff --git a/packages/convex-db-collection/CHANGELOG.md b/packages/convex-db-collection/CHANGELOG.md index 927c1a91f7..382e70d9ad 100644 --- a/packages/convex-db-collection/CHANGELOG.md +++ b/packages/convex-db-collection/CHANGELOG.md @@ -1,5 +1,13 @@ # @tanstack/convex-db-collection +## 1.0.0-rc.1.5 + +### Patch Changes + +- Updated dependencies [[`522f657`](https://github.com/TanStack/db/commit/522f65777a42673a1befcb8169854002894d15c0), [`a86aa43`](https://github.com/TanStack/db/commit/a86aa430418572a4834972aa60b7d6a18e2e08ba), [`0e1a1c1`](https://github.com/TanStack/db/commit/0e1a1c116ecd055acefcee85b3862de2cf5c102a), [`6ec538e`](https://github.com/TanStack/db/commit/6ec538ecd3c8a966e6a1e93d88b82023021a47a4)]: + - @tanstack/db@1.0.0-rc.1.5 + - @tanstack/offline-transactions@1.2.1 + ## 1.0.0-rc.1.4 ### Patch Changes diff --git a/packages/convex-db-collection/package.json b/packages/convex-db-collection/package.json index 57b0926592..17f0e4ceb7 100644 --- a/packages/convex-db-collection/package.json +++ b/packages/convex-db-collection/package.json @@ -1,6 +1,6 @@ { "name": "@tanstack/convex-db-collection", - "version": "1.0.0-rc.1.4", + "version": "1.0.0-rc.1.5", "description": "Convex collection for TanStack DB", "author": "Tanner Linsley", "license": "MIT", diff --git a/packages/db-ivm/CHANGELOG.md b/packages/db-ivm/CHANGELOG.md index 21d99c58d4..dc74e78d0d 100644 --- a/packages/db-ivm/CHANGELOG.md +++ b/packages/db-ivm/CHANGELOG.md @@ -1,5 +1,11 @@ # @tanstack/db-ivm +## 1.0.0-rc.1.3 + +### Patch Changes + +- Update runtime dependencies while preserving the public API and CommonJS loading. Preserve Solid reactivity for own data fields and persist Electric snapshot resume checkpoints before subset loads succeed. ([#2374](https://github.com/TanStack/db/pull/2374)) + ## 1.0.0-rc.1.2 ### Patch Changes diff --git a/packages/db-ivm/package.json b/packages/db-ivm/package.json index 2d1577a3c7..71d179471e 100644 --- a/packages/db-ivm/package.json +++ b/packages/db-ivm/package.json @@ -1,6 +1,6 @@ { "name": "@tanstack/db-ivm", - "version": "1.0.0-rc.1.2", + "version": "1.0.0-rc.1.3", "description": "Incremental View Maintenance for TanStack DB based on Differential Dataflow", "author": "Sam Willis", "license": "MIT", diff --git a/packages/db-sqlite-persistence-core/CHANGELOG.md b/packages/db-sqlite-persistence-core/CHANGELOG.md index d64a31a8d0..a689381b5f 100644 --- a/packages/db-sqlite-persistence-core/CHANGELOG.md +++ b/packages/db-sqlite-persistence-core/CHANGELOG.md @@ -1,5 +1,12 @@ # @tanstack/db-sqlite-persistence-core +## 1.0.0-rc.1.5 + +### Patch Changes + +- Updated dependencies [[`522f657`](https://github.com/TanStack/db/commit/522f65777a42673a1befcb8169854002894d15c0), [`a86aa43`](https://github.com/TanStack/db/commit/a86aa430418572a4834972aa60b7d6a18e2e08ba), [`6ec538e`](https://github.com/TanStack/db/commit/6ec538ecd3c8a966e6a1e93d88b82023021a47a4)]: + - @tanstack/db@1.0.0-rc.1.5 + ## 1.0.0-rc.1.4 ### Patch Changes diff --git a/packages/db-sqlite-persistence-core/package.json b/packages/db-sqlite-persistence-core/package.json index 19d86f33ad..64f6063e3e 100644 --- a/packages/db-sqlite-persistence-core/package.json +++ b/packages/db-sqlite-persistence-core/package.json @@ -1,6 +1,6 @@ { "name": "@tanstack/db-sqlite-persistence-core", - "version": "1.0.0-rc.1.4", + "version": "1.0.0-rc.1.5", "description": "SQLite persisted collection core for TanStack DB", "author": "TanStack Team", "license": "MIT", diff --git a/packages/db/CHANGELOG.md b/packages/db/CHANGELOG.md index 0ce0c3aa5a..8a21b130ef 100644 --- a/packages/db/CHANGELOG.md +++ b/packages/db/CHANGELOG.md @@ -1,5 +1,18 @@ # @tanstack/db +## 1.0.0-rc.1.5 + +### Patch Changes + +- An explicit `cleanup()` now keeps the optimistic rows of a transaction that is still persisting cleared after the Collection restarts. Previously, a write made after the restart brought those rows back, so a row that cleanup had discarded reappeared. The transaction still holds its Collection until it settles. ([#2382](https://github.com/TanStack/db/pull/2382)) + +- Show a row that a restarted sync run writes again after cleanup. A live-query observer (and so `useLiveQuery` in every framework adapter) that stayed subscribed through a Collection's cleanup and restart showed no row when the new sync run wrote a row equal to one it showed before cleanup, or when an on-demand restart reloaded it. The observer's Collection subscription now keeps none of the rows from before cleanup. ([#2378](https://github.com/TanStack/db/pull/2378)) + +- Update runtime dependencies while preserving the public API and CommonJS loading. Preserve Solid reactivity for own data fields and persist Electric snapshot resume checkpoints before subset loads succeed. ([#2374](https://github.com/TanStack/db/pull/2374)) + +- Updated dependencies [[`6ec538e`](https://github.com/TanStack/db/commit/6ec538ecd3c8a966e6a1e93d88b82023021a47a4)]: + - @tanstack/db-ivm@1.0.0-rc.1.3 + ## 1.0.0-rc.1.4 ### Patch Changes diff --git a/packages/db/package.json b/packages/db/package.json index b90834db0f..da72beadec 100644 --- a/packages/db/package.json +++ b/packages/db/package.json @@ -1,6 +1,6 @@ { "name": "@tanstack/db", - "version": "1.0.0-rc.1.4", + "version": "1.0.0-rc.1.5", "description": "A reactive client store for building super fast apps on sync", "author": "Kyle Mathews", "license": "MIT", diff --git a/packages/electric-db-collection/CHANGELOG.md b/packages/electric-db-collection/CHANGELOG.md index c24d3ead8b..efd374ddc4 100644 --- a/packages/electric-db-collection/CHANGELOG.md +++ b/packages/electric-db-collection/CHANGELOG.md @@ -1,5 +1,14 @@ # @tanstack/electric-db-collection +## 1.0.0-rc.1.5 + +### Patch Changes + +- Update runtime dependencies while preserving the public API and CommonJS loading. Preserve Solid reactivity for own data fields and persist Electric snapshot resume checkpoints before subset loads succeed. ([#2374](https://github.com/TanStack/db/pull/2374)) + +- Updated dependencies [[`522f657`](https://github.com/TanStack/db/commit/522f65777a42673a1befcb8169854002894d15c0), [`a86aa43`](https://github.com/TanStack/db/commit/a86aa430418572a4834972aa60b7d6a18e2e08ba), [`6ec538e`](https://github.com/TanStack/db/commit/6ec538ecd3c8a966e6a1e93d88b82023021a47a4)]: + - @tanstack/db@1.0.0-rc.1.5 + ## 1.0.0-rc.1.4 ### Patch Changes diff --git a/packages/electric-db-collection/package.json b/packages/electric-db-collection/package.json index 2fadebcad6..b4dfb80e46 100644 --- a/packages/electric-db-collection/package.json +++ b/packages/electric-db-collection/package.json @@ -1,6 +1,6 @@ { "name": "@tanstack/electric-db-collection", - "version": "1.0.0-rc.1.4", + "version": "1.0.0-rc.1.5", "description": "ElectricSQL collection for TanStack DB", "author": "Kyle Mathews", "license": "MIT", diff --git a/packages/electron-db-sqlite-persistence/CHANGELOG.md b/packages/electron-db-sqlite-persistence/CHANGELOG.md index 2659a4ddd0..1236f00c5d 100644 --- a/packages/electron-db-sqlite-persistence/CHANGELOG.md +++ b/packages/electron-db-sqlite-persistence/CHANGELOG.md @@ -1,5 +1,12 @@ # @tanstack/electron-db-sqlite-persistence +## 1.0.0-rc.1.5 + +### Patch Changes + +- Updated dependencies []: + - @tanstack/db-sqlite-persistence-core@1.0.0-rc.1.5 + ## 1.0.0-rc.1.4 ### Patch Changes diff --git a/packages/electron-db-sqlite-persistence/package.json b/packages/electron-db-sqlite-persistence/package.json index 16a99ef025..f86038a53e 100644 --- a/packages/electron-db-sqlite-persistence/package.json +++ b/packages/electron-db-sqlite-persistence/package.json @@ -1,6 +1,6 @@ { "name": "@tanstack/electron-db-sqlite-persistence", - "version": "1.0.0-rc.1.4", + "version": "1.0.0-rc.1.5", "description": "Electron SQLite persisted collection bridge for TanStack DB", "author": "TanStack Team", "license": "MIT", diff --git a/packages/expo-db-sqlite-persistence/CHANGELOG.md b/packages/expo-db-sqlite-persistence/CHANGELOG.md index 1f2376bada..a51c83949f 100644 --- a/packages/expo-db-sqlite-persistence/CHANGELOG.md +++ b/packages/expo-db-sqlite-persistence/CHANGELOG.md @@ -1,5 +1,12 @@ # @tanstack/expo-db-sqlite-persistence +## 1.0.0-rc.1.5 + +### Patch Changes + +- Updated dependencies []: + - @tanstack/db-sqlite-persistence-core@1.0.0-rc.1.5 + ## 1.0.0-rc.1.4 ### Patch Changes diff --git a/packages/expo-db-sqlite-persistence/package.json b/packages/expo-db-sqlite-persistence/package.json index da31affba3..cc9cada777 100644 --- a/packages/expo-db-sqlite-persistence/package.json +++ b/packages/expo-db-sqlite-persistence/package.json @@ -1,6 +1,6 @@ { "name": "@tanstack/expo-db-sqlite-persistence", - "version": "1.0.0-rc.1.4", + "version": "1.0.0-rc.1.5", "description": "Expo SQLite persisted collection adapter for TanStack DB", "author": "TanStack Team", "license": "MIT", diff --git a/packages/node-db-sqlite-persistence/CHANGELOG.md b/packages/node-db-sqlite-persistence/CHANGELOG.md index a676a6043a..03060c0497 100644 --- a/packages/node-db-sqlite-persistence/CHANGELOG.md +++ b/packages/node-db-sqlite-persistence/CHANGELOG.md @@ -1,5 +1,14 @@ # @tanstack/node-db-sqlite-persistence +## 1.0.0-rc.1.5 + +### Patch Changes + +- Update runtime dependencies while preserving the public API and CommonJS loading. Preserve Solid reactivity for own data fields and persist Electric snapshot resume checkpoints before subset loads succeed. ([#2374](https://github.com/TanStack/db/pull/2374)) + +- Updated dependencies []: + - @tanstack/db-sqlite-persistence-core@1.0.0-rc.1.5 + ## 1.0.0-rc.1.4 ### Patch Changes diff --git a/packages/node-db-sqlite-persistence/package.json b/packages/node-db-sqlite-persistence/package.json index 44bfde75db..fafeeac432 100644 --- a/packages/node-db-sqlite-persistence/package.json +++ b/packages/node-db-sqlite-persistence/package.json @@ -1,6 +1,6 @@ { "name": "@tanstack/node-db-sqlite-persistence", - "version": "1.0.0-rc.1.4", + "version": "1.0.0-rc.1.5", "description": "Node SQLite persisted collection adapter for TanStack DB", "author": "TanStack Team", "license": "MIT", diff --git a/packages/offline-transactions/CHANGELOG.md b/packages/offline-transactions/CHANGELOG.md index e5497679ff..0d57cdfacc 100644 --- a/packages/offline-transactions/CHANGELOG.md +++ b/packages/offline-transactions/CHANGELOG.md @@ -1,5 +1,11 @@ # @tanstack/offline-transactions +## 1.2.1 + +### Patch Changes + +- Preserve pending callers and optimistic mutations when an offline executor is replaced. A successor over the same outbox settles the original callers when it retains the configured Collection objects in the same runtime. ([#2401](https://github.com/TanStack/db/pull/2401)) + ## 1.2.0 ### Minor Changes diff --git a/packages/offline-transactions/package.json b/packages/offline-transactions/package.json index 89bcf37ac4..b6353fc184 100644 --- a/packages/offline-transactions/package.json +++ b/packages/offline-transactions/package.json @@ -1,6 +1,6 @@ { "name": "@tanstack/offline-transactions", - "version": "1.2.0", + "version": "1.2.1", "description": "Offline-first transaction capabilities for TanStack DB", "author": "TanStack", "license": "MIT", diff --git a/packages/powersync-db-collection/CHANGELOG.md b/packages/powersync-db-collection/CHANGELOG.md index c18b81870a..5985103a80 100644 --- a/packages/powersync-db-collection/CHANGELOG.md +++ b/packages/powersync-db-collection/CHANGELOG.md @@ -1,5 +1,16 @@ # @tanstack/powersync-db-collection +## 1.0.0-rc.1.5 + +### Patch Changes + +- Remove obsolete persisted rows when an eager source's first complete result overlaps SQLite restore. Query Collection also reconciles ownerless saved rows and returned values from initial data, cached results and direct writes while preserving peer ownership, including when an optimistic transaction holds publication. PowerSync preserves its startup batch commits; RxDB preserves its existing source commit. Both delete only restored omissions and retain atomic reload snapshots. RxDB and PowerSync reject incomplete persistence capabilities. TrailBase accepts a sync boundary without the optional metadata API. ([#2394](https://github.com/TanStack/db/pull/2394)) + +- Update runtime dependencies while preserving the public API and CommonJS loading. Preserve Solid reactivity for own data fields and persist Electric snapshot resume checkpoints before subset loads succeed. ([#2374](https://github.com/TanStack/db/pull/2374)) + +- Updated dependencies [[`522f657`](https://github.com/TanStack/db/commit/522f65777a42673a1befcb8169854002894d15c0), [`a86aa43`](https://github.com/TanStack/db/commit/a86aa430418572a4834972aa60b7d6a18e2e08ba), [`6ec538e`](https://github.com/TanStack/db/commit/6ec538ecd3c8a966e6a1e93d88b82023021a47a4)]: + - @tanstack/db@1.0.0-rc.1.5 + ## 1.0.0-rc.1.4 ### Patch Changes diff --git a/packages/powersync-db-collection/package.json b/packages/powersync-db-collection/package.json index 55fb36f925..2d73c2c94a 100644 --- a/packages/powersync-db-collection/package.json +++ b/packages/powersync-db-collection/package.json @@ -1,6 +1,6 @@ { "name": "@tanstack/powersync-db-collection", - "version": "1.0.0-rc.1.4", + "version": "1.0.0-rc.1.5", "description": "PowerSync collection for TanStack DB", "author": "POWERSYNC", "license": "MIT", diff --git a/packages/preact-db/CHANGELOG.md b/packages/preact-db/CHANGELOG.md index ac65afe141..fbe571f01a 100644 --- a/packages/preact-db/CHANGELOG.md +++ b/packages/preact-db/CHANGELOG.md @@ -1,5 +1,12 @@ # @tanstack/preact-db +## 1.0.0-rc.1.5 + +### Patch Changes + +- Updated dependencies [[`522f657`](https://github.com/TanStack/db/commit/522f65777a42673a1befcb8169854002894d15c0), [`a86aa43`](https://github.com/TanStack/db/commit/a86aa430418572a4834972aa60b7d6a18e2e08ba), [`6ec538e`](https://github.com/TanStack/db/commit/6ec538ecd3c8a966e6a1e93d88b82023021a47a4)]: + - @tanstack/db@1.0.0-rc.1.5 + ## 1.0.0-rc.1.4 ### Patch Changes diff --git a/packages/preact-db/package.json b/packages/preact-db/package.json index bd269e2748..4644f72ab4 100644 --- a/packages/preact-db/package.json +++ b/packages/preact-db/package.json @@ -1,6 +1,6 @@ { "name": "@tanstack/preact-db", - "version": "1.0.0-rc.1.4", + "version": "1.0.0-rc.1.5", "description": "Preact integration for @tanstack/db", "author": "Kyle Mathews", "license": "MIT", diff --git a/packages/query-db-collection/CHANGELOG.md b/packages/query-db-collection/CHANGELOG.md index 99a5bd9d5a..47796dc631 100644 --- a/packages/query-db-collection/CHANGELOG.md +++ b/packages/query-db-collection/CHANGELOG.md @@ -1,5 +1,11 @@ # @tanstack/query-db-collection +## 1.5.2 + +### Patch Changes + +- Remove obsolete persisted rows when an eager source's first complete result overlaps SQLite restore. Query Collection also reconciles ownerless saved rows and returned values from initial data, cached results and direct writes while preserving peer ownership, including when an optimistic transaction holds publication. PowerSync preserves its startup batch commits; RxDB preserves its existing source commit. Both delete only restored omissions and retain atomic reload snapshots. RxDB and PowerSync reject incomplete persistence capabilities. TrailBase accepts a sync boundary without the optional metadata API. ([#2394](https://github.com/TanStack/db/pull/2394)) + ## 1.5.1 ### Patch Changes diff --git a/packages/query-db-collection/package.json b/packages/query-db-collection/package.json index 29c30996d4..16b50e3747 100644 --- a/packages/query-db-collection/package.json +++ b/packages/query-db-collection/package.json @@ -1,6 +1,6 @@ { "name": "@tanstack/query-db-collection", - "version": "1.5.1", + "version": "1.5.2", "description": "TanStack Query collection for TanStack DB", "author": "Kyle Mathews", "license": "MIT", diff --git a/packages/react-db/CHANGELOG.md b/packages/react-db/CHANGELOG.md index eddcaff5c3..77edfaf106 100644 --- a/packages/react-db/CHANGELOG.md +++ b/packages/react-db/CHANGELOG.md @@ -1,5 +1,12 @@ # @tanstack/react-db +## 1.0.0-rc.1.5 + +### Patch Changes + +- Updated dependencies [[`522f657`](https://github.com/TanStack/db/commit/522f65777a42673a1befcb8169854002894d15c0), [`a86aa43`](https://github.com/TanStack/db/commit/a86aa430418572a4834972aa60b7d6a18e2e08ba), [`6ec538e`](https://github.com/TanStack/db/commit/6ec538ecd3c8a966e6a1e93d88b82023021a47a4)]: + - @tanstack/db@1.0.0-rc.1.5 + ## 1.0.0-rc.1.4 ### Patch Changes diff --git a/packages/react-db/package.json b/packages/react-db/package.json index dc0167d204..c26405727b 100644 --- a/packages/react-db/package.json +++ b/packages/react-db/package.json @@ -1,6 +1,6 @@ { "name": "@tanstack/react-db", - "version": "1.0.0-rc.1.4", + "version": "1.0.0-rc.1.5", "description": "React integration for @tanstack/db", "author": "Kyle Mathews", "license": "MIT", diff --git a/packages/react-native-db-sqlite-persistence/CHANGELOG.md b/packages/react-native-db-sqlite-persistence/CHANGELOG.md index aacd93f8d2..77081f7f9d 100644 --- a/packages/react-native-db-sqlite-persistence/CHANGELOG.md +++ b/packages/react-native-db-sqlite-persistence/CHANGELOG.md @@ -1,5 +1,12 @@ # @tanstack/react-native-db-sqlite-persistence +## 1.0.0-rc.1.5 + +### Patch Changes + +- Updated dependencies []: + - @tanstack/db-sqlite-persistence-core@1.0.0-rc.1.5 + ## 1.0.0-rc.1.4 ### Patch Changes diff --git a/packages/react-native-db-sqlite-persistence/package.json b/packages/react-native-db-sqlite-persistence/package.json index d9af2a9cd9..f339975b59 100644 --- a/packages/react-native-db-sqlite-persistence/package.json +++ b/packages/react-native-db-sqlite-persistence/package.json @@ -1,6 +1,6 @@ { "name": "@tanstack/react-native-db-sqlite-persistence", - "version": "1.0.0-rc.1.4", + "version": "1.0.0-rc.1.5", "description": "React Native and Expo SQLite persisted collection adapter for TanStack DB", "author": "TanStack Team", "license": "MIT", diff --git a/packages/rxdb-db-collection/CHANGELOG.md b/packages/rxdb-db-collection/CHANGELOG.md index 58239a74b8..6b5114799d 100644 --- a/packages/rxdb-db-collection/CHANGELOG.md +++ b/packages/rxdb-db-collection/CHANGELOG.md @@ -1,5 +1,16 @@ # @tanstack/rxdb-db-collection +## 1.0.0-rc.1.5 + +### Patch Changes + +- Remove obsolete persisted rows when an eager source's first complete result overlaps SQLite restore. Query Collection also reconciles ownerless saved rows and returned values from initial data, cached results and direct writes while preserving peer ownership, including when an optimistic transaction holds publication. PowerSync preserves its startup batch commits; RxDB preserves its existing source commit. Both delete only restored omissions and retain atomic reload snapshots. RxDB and PowerSync reject incomplete persistence capabilities. TrailBase accepts a sync boundary without the optional metadata API. ([#2394](https://github.com/TanStack/db/pull/2394)) + +- Update runtime dependencies while preserving the public API and CommonJS loading. Preserve Solid reactivity for own data fields and persist Electric snapshot resume checkpoints before subset loads succeed. ([#2374](https://github.com/TanStack/db/pull/2374)) + +- Updated dependencies [[`522f657`](https://github.com/TanStack/db/commit/522f65777a42673a1befcb8169854002894d15c0), [`a86aa43`](https://github.com/TanStack/db/commit/a86aa430418572a4834972aa60b7d6a18e2e08ba), [`6ec538e`](https://github.com/TanStack/db/commit/6ec538ecd3c8a966e6a1e93d88b82023021a47a4)]: + - @tanstack/db@1.0.0-rc.1.5 + ## 1.0.0-rc.1.4 ### Patch Changes diff --git a/packages/rxdb-db-collection/package.json b/packages/rxdb-db-collection/package.json index a913b2238d..50c0fb9b76 100644 --- a/packages/rxdb-db-collection/package.json +++ b/packages/rxdb-db-collection/package.json @@ -1,6 +1,6 @@ { "name": "@tanstack/rxdb-db-collection", - "version": "1.0.0-rc.1.4", + "version": "1.0.0-rc.1.5", "description": "Reactive, Offline-First adapter for TanStack DB using RxDB. Sync, Replication and Local-First support.", "author": "Kyle Mathews", "license": "MIT", diff --git a/packages/solid-db/CHANGELOG.md b/packages/solid-db/CHANGELOG.md index 37eb1c642b..2d46279292 100644 --- a/packages/solid-db/CHANGELOG.md +++ b/packages/solid-db/CHANGELOG.md @@ -1,5 +1,14 @@ # @tanstack/react-db +## 1.0.0-rc.1.5 + +### Patch Changes + +- Update runtime dependencies while preserving the public API and CommonJS loading. Preserve Solid reactivity for own data fields and persist Electric snapshot resume checkpoints before subset loads succeed. ([#2374](https://github.com/TanStack/db/pull/2374)) + +- Updated dependencies [[`522f657`](https://github.com/TanStack/db/commit/522f65777a42673a1befcb8169854002894d15c0), [`a86aa43`](https://github.com/TanStack/db/commit/a86aa430418572a4834972aa60b7d6a18e2e08ba), [`6ec538e`](https://github.com/TanStack/db/commit/6ec538ecd3c8a966e6a1e93d88b82023021a47a4)]: + - @tanstack/db@1.0.0-rc.1.5 + ## 1.0.0-rc.1.4 ### Patch Changes diff --git a/packages/solid-db/package.json b/packages/solid-db/package.json index f98890e867..5e2dcdf6e0 100644 --- a/packages/solid-db/package.json +++ b/packages/solid-db/package.json @@ -1,6 +1,6 @@ { "name": "@tanstack/solid-db", - "version": "1.0.0-rc.1.4", + "version": "1.0.0-rc.1.5", "description": "Solid integration for @tanstack/db", "author": "Kyle Mathews", "license": "MIT", diff --git a/packages/svelte-db/CHANGELOG.md b/packages/svelte-db/CHANGELOG.md index 589092cc22..7c623f190e 100644 --- a/packages/svelte-db/CHANGELOG.md +++ b/packages/svelte-db/CHANGELOG.md @@ -1,5 +1,12 @@ # @tanstack/svelte-db +## 1.0.0-rc.1.5 + +### Patch Changes + +- Updated dependencies [[`522f657`](https://github.com/TanStack/db/commit/522f65777a42673a1befcb8169854002894d15c0), [`a86aa43`](https://github.com/TanStack/db/commit/a86aa430418572a4834972aa60b7d6a18e2e08ba), [`6ec538e`](https://github.com/TanStack/db/commit/6ec538ecd3c8a966e6a1e93d88b82023021a47a4)]: + - @tanstack/db@1.0.0-rc.1.5 + ## 1.0.0-rc.1.4 ### Patch Changes diff --git a/packages/svelte-db/package.json b/packages/svelte-db/package.json index 175c839c99..fbf25e11ca 100644 --- a/packages/svelte-db/package.json +++ b/packages/svelte-db/package.json @@ -1,6 +1,6 @@ { "name": "@tanstack/svelte-db", - "version": "1.0.0-rc.1.4", + "version": "1.0.0-rc.1.5", "description": "Svelte integration for @tanstack/db", "author": "Kyle Mathews", "license": "MIT", diff --git a/packages/tauri-db-sqlite-persistence/CHANGELOG.md b/packages/tauri-db-sqlite-persistence/CHANGELOG.md index 66b7ff36ca..587358135d 100644 --- a/packages/tauri-db-sqlite-persistence/CHANGELOG.md +++ b/packages/tauri-db-sqlite-persistence/CHANGELOG.md @@ -1,5 +1,12 @@ # @tanstack/tauri-db-sqlite-persistence +## 1.0.0-rc.1.5 + +### Patch Changes + +- Updated dependencies []: + - @tanstack/db-sqlite-persistence-core@1.0.0-rc.1.5 + ## 1.0.0-rc.1.4 ### Patch Changes diff --git a/packages/tauri-db-sqlite-persistence/package.json b/packages/tauri-db-sqlite-persistence/package.json index 95977cfcce..f9fa7353fa 100644 --- a/packages/tauri-db-sqlite-persistence/package.json +++ b/packages/tauri-db-sqlite-persistence/package.json @@ -1,6 +1,6 @@ { "name": "@tanstack/tauri-db-sqlite-persistence", - "version": "1.0.0-rc.1.4", + "version": "1.0.0-rc.1.5", "description": "Tauri SQLite persisted collection adapter for TanStack DB", "author": "TanStack Team", "license": "MIT", diff --git a/packages/trailbase-db-collection/CHANGELOG.md b/packages/trailbase-db-collection/CHANGELOG.md index 04d3baf0df..69384719c1 100644 --- a/packages/trailbase-db-collection/CHANGELOG.md +++ b/packages/trailbase-db-collection/CHANGELOG.md @@ -1,5 +1,16 @@ # @tanstack/trailbase-db-collection +## 1.0.0-rc.1.5 + +### Patch Changes + +- Remove obsolete persisted rows when an eager source's first complete result overlaps SQLite restore. Query Collection also reconciles ownerless saved rows and returned values from initial data, cached results and direct writes while preserving peer ownership, including when an optimistic transaction holds publication. PowerSync preserves its startup batch commits; RxDB preserves its existing source commit. Both delete only restored omissions and retain atomic reload snapshots. RxDB and PowerSync reject incomplete persistence capabilities. TrailBase accepts a sync boundary without the optional metadata API. ([#2394](https://github.com/TanStack/db/pull/2394)) + +- Update runtime dependencies while preserving the public API and CommonJS loading. Preserve Solid reactivity for own data fields and persist Electric snapshot resume checkpoints before subset loads succeed. ([#2374](https://github.com/TanStack/db/pull/2374)) + +- Updated dependencies [[`522f657`](https://github.com/TanStack/db/commit/522f65777a42673a1befcb8169854002894d15c0), [`a86aa43`](https://github.com/TanStack/db/commit/a86aa430418572a4834972aa60b7d6a18e2e08ba), [`6ec538e`](https://github.com/TanStack/db/commit/6ec538ecd3c8a966e6a1e93d88b82023021a47a4)]: + - @tanstack/db@1.0.0-rc.1.5 + ## 1.0.0-rc.1.4 ### Patch Changes diff --git a/packages/trailbase-db-collection/package.json b/packages/trailbase-db-collection/package.json index 022ca87134..94a9edff89 100644 --- a/packages/trailbase-db-collection/package.json +++ b/packages/trailbase-db-collection/package.json @@ -1,6 +1,6 @@ { "name": "@tanstack/trailbase-db-collection", - "version": "1.0.0-rc.1.4", + "version": "1.0.0-rc.1.5", "description": "TrailBase collection for TanStack DB", "author": "Sebastian Jeltsch", "license": "MIT", diff --git a/packages/vue-db/CHANGELOG.md b/packages/vue-db/CHANGELOG.md index 82183163bc..e4f9a7541d 100644 --- a/packages/vue-db/CHANGELOG.md +++ b/packages/vue-db/CHANGELOG.md @@ -1,5 +1,12 @@ # @tanstack/vue-db +## 1.0.0-rc.1.5 + +### Patch Changes + +- Updated dependencies [[`522f657`](https://github.com/TanStack/db/commit/522f65777a42673a1befcb8169854002894d15c0), [`a86aa43`](https://github.com/TanStack/db/commit/a86aa430418572a4834972aa60b7d6a18e2e08ba), [`6ec538e`](https://github.com/TanStack/db/commit/6ec538ecd3c8a966e6a1e93d88b82023021a47a4)]: + - @tanstack/db@1.0.0-rc.1.5 + ## 1.0.0-rc.1.4 ### Patch Changes diff --git a/packages/vue-db/package.json b/packages/vue-db/package.json index 2c0a114541..11a55074eb 100644 --- a/packages/vue-db/package.json +++ b/packages/vue-db/package.json @@ -1,6 +1,6 @@ { "name": "@tanstack/vue-db", - "version": "1.0.0-rc.1.4", + "version": "1.0.0-rc.1.5", "description": "Vue integration for @tanstack/db", "author": "Kyle Mathews", "license": "MIT", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 85a1f3e17f..995a1afb4f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -175,10 +175,10 @@ importers: specifier: ^20.3.35 version: 20.3.35(@angular/common@20.3.35(@angular/core@20.3.35(@angular/compiler@20.3.35)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@20.3.35(@angular/compiler@20.3.35)(rxjs@7.8.2)(zone.js@0.15.1))(@angular/platform-browser@20.3.35(@angular/common@20.3.35(@angular/core@20.3.35(@angular/compiler@20.3.35)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@20.3.35(@angular/compiler@20.3.35)(rxjs@7.8.2)(zone.js@0.15.1)))(rxjs@7.8.2) '@tanstack/angular-db': - specifier: ^1.0.0-rc.1.4 + specifier: ^1.0.0-rc.1.5 version: link:../../../packages/angular-db '@tanstack/db': - specifier: ^1.0.0-rc.1.4 + specifier: ^1.0.0-rc.1.5 version: link:../../../packages/db rxjs: specifier: ^7.8.2 @@ -215,19 +215,19 @@ importers: examples/electron/offline-first: dependencies: '@tanstack/electron-db-sqlite-persistence': - specifier: ^1.0.0-rc.1.4 + specifier: ^1.0.0-rc.1.5 version: link:../../../packages/electron-db-sqlite-persistence '@tanstack/node-db-sqlite-persistence': - specifier: ^1.0.0-rc.1.4 + specifier: ^1.0.0-rc.1.5 version: link:../../../packages/node-db-sqlite-persistence '@tanstack/offline-transactions': - specifier: ^1.2.0 + specifier: ^1.2.1 version: link:../../../packages/offline-transactions '@tanstack/query-db-collection': - specifier: ^1.5.1 + specifier: ^1.5.2 version: link:../../../packages/query-db-collection '@tanstack/react-db': - specifier: ^1.0.0-rc.1.4 + specifier: ^1.0.0-rc.1.5 version: link:../../../packages/react-db '@tanstack/react-query': specifier: ^5.107.1 @@ -306,19 +306,19 @@ importers: specifier: 11.4.1 version: 11.4.1(react-native@0.79.6(@babel/core@7.29.13)(@types/react@19.3.0)(react@19.0.0)) '@tanstack/db': - specifier: ^1.0.0-rc.1.4 + specifier: ^1.0.0-rc.1.5 version: link:../../../packages/db '@tanstack/offline-transactions': - specifier: ^1.2.0 + specifier: ^1.2.1 version: link:../../../packages/offline-transactions '@tanstack/query-db-collection': - specifier: ^1.5.1 + specifier: ^1.5.2 version: link:../../../packages/query-db-collection '@tanstack/react-db': - specifier: ^1.0.0-rc.1.4 + specifier: ^1.0.0-rc.1.5 version: link:../../../packages/react-db '@tanstack/react-native-db-sqlite-persistence': - specifier: ^1.0.0-rc.1.4 + specifier: ^1.0.0-rc.1.5 version: link:../../../packages/react-native-db-sqlite-persistence '@tanstack/react-query': specifier: ^5.107.1 @@ -403,19 +403,19 @@ importers: specifier: 11.4.1 version: 11.4.1(react-native@0.79.6(@babel/core@7.29.13)(@types/react@19.3.0)(react@19.0.0)) '@tanstack/db': - specifier: ^1.0.0-rc.1.4 + specifier: ^1.0.0-rc.1.5 version: link:../../../packages/db '@tanstack/electric-db-collection': - specifier: ^1.0.0-rc.1.4 + specifier: ^1.0.0-rc.1.5 version: link:../../../packages/electric-db-collection '@tanstack/offline-transactions': - specifier: ^1.2.0 + specifier: ^1.2.1 version: link:../../../packages/offline-transactions '@tanstack/react-db': - specifier: ^1.0.0-rc.1.4 + specifier: ^1.0.0-rc.1.5 version: link:../../../packages/react-db '@tanstack/react-native-db-sqlite-persistence': - specifier: ^1.0.0-rc.1.4 + specifier: ^1.0.0-rc.1.5 version: link:../../../packages/react-native-db-sqlite-persistence '@tanstack/react-query': specifier: ^5.107.1 @@ -491,10 +491,10 @@ importers: specifier: ^5.107.1 version: 5.107.1 '@tanstack/query-db-collection': - specifier: ^1.5.1 + specifier: ^1.5.2 version: link:../../../packages/query-db-collection '@tanstack/react-db': - specifier: ^1.0.0-rc.1.4 + specifier: ^1.0.0-rc.1.5 version: link:../../../packages/react-db react: specifier: ^19.3.1 @@ -543,10 +543,10 @@ importers: examples/react/next-ssr-e2e: dependencies: '@tanstack/db': - specifier: ^1.0.0-rc.1.4 + specifier: ^1.0.0-rc.1.5 version: link:../../../packages/db '@tanstack/react-db': - specifier: ^1.0.0-rc.1.4 + specifier: ^1.0.0-rc.1.5 version: link:../../../packages/react-db next: specifier: ^16.4.5 @@ -577,19 +577,19 @@ importers: examples/react/offline-transactions: dependencies: '@tanstack/browser-db-sqlite-persistence': - specifier: ^1.0.0-rc.1.4 + specifier: ^1.0.0-rc.1.5 version: link:../../../packages/browser-db-sqlite-persistence '@tanstack/db': - specifier: ^1.0.0-rc.1.4 + specifier: ^1.0.0-rc.1.5 version: link:../../../packages/db '@tanstack/offline-transactions': - specifier: ^1.2.0 + specifier: ^1.2.1 version: link:../../../packages/offline-transactions '@tanstack/query-db-collection': - specifier: ^1.5.1 + specifier: ^1.5.2 version: link:../../../packages/query-db-collection '@tanstack/react-db': - specifier: ^1.0.0-rc.1.4 + specifier: ^1.0.0-rc.1.5 version: link:../../../packages/react-db '@tanstack/react-query': specifier: ^5.107.1 @@ -647,10 +647,10 @@ importers: examples/react/paced-mutations-demo: dependencies: '@tanstack/db': - specifier: ^1.0.0-rc.1.4 + specifier: ^1.0.0-rc.1.5 version: link:../../../packages/db '@tanstack/react-db': - specifier: ^1.0.0-rc.1.4 + specifier: ^1.0.0-rc.1.5 version: link:../../../packages/react-db mitt: specifier: ^3.0.1 @@ -687,10 +687,10 @@ importers: specifier: ^5.107.1 version: 5.107.1 '@tanstack/query-db-collection': - specifier: ^1.5.1 + specifier: ^1.5.2 version: link:../../../packages/query-db-collection '@tanstack/react-db': - specifier: ^1.0.0-rc.1.4 + specifier: ^1.0.0-rc.1.5 version: link:../../../packages/react-db '@tanstack/react-router': specifier: ^1.170.46 @@ -820,7 +820,7 @@ importers: examples/react/start-ssr-e2e: dependencies: '@tanstack/react-db': - specifier: ^1.0.0-rc.1.4 + specifier: ^1.0.0-rc.1.5 version: link:../../../packages/react-db '@tanstack/react-router': specifier: ^1.170.46 @@ -866,16 +866,16 @@ importers: examples/react/todo: dependencies: '@tanstack/electric-db-collection': - specifier: ^1.0.0-rc.1.4 + specifier: ^1.0.0-rc.1.5 version: link:../../../packages/electric-db-collection '@tanstack/query-core': specifier: ^5.107.1 version: 5.107.1 '@tanstack/query-db-collection': - specifier: ^1.5.1 + specifier: ^1.5.2 version: link:../../../packages/query-db-collection '@tanstack/react-db': - specifier: ^1.0.0-rc.1.4 + specifier: ^1.0.0-rc.1.5 version: link:../../../packages/react-db '@tanstack/react-router': specifier: ^1.170.46 @@ -884,7 +884,7 @@ importers: specifier: ^1.169.5 version: 1.169.5(esbuild@0.28.2)(react-dom@19.3.1(react@19.3.1))(react@19.3.1)(rolldown@1.2.16)(rollup@4.64.12)(vite-plugin-solid@2.11.15(@testing-library/jest-dom@6.9.1)(solid-js@1.9.18)(vite@8.3.6(@types/node@25.2.2)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.90.0)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1)))(vite@8.3.6(@types/node@25.2.2)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.90.0)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1))(webpack@5.112.2(esbuild@0.28.2)) '@tanstack/trailbase-db-collection': - specifier: ^1.0.0-rc.1.4 + specifier: ^1.0.0-rc.1.5 version: link:../../../packages/trailbase-db-collection cors: specifier: ^2.8.6 @@ -987,16 +987,16 @@ importers: examples/solid/todo: dependencies: '@tanstack/electric-db-collection': - specifier: ^1.0.0-rc.1.4 + specifier: ^1.0.0-rc.1.5 version: link:../../../packages/electric-db-collection '@tanstack/query-core': specifier: ^5.107.1 version: 5.107.1 '@tanstack/query-db-collection': - specifier: ^1.5.1 + specifier: ^1.5.2 version: link:../../../packages/query-db-collection '@tanstack/solid-db': - specifier: ^1.0.0-rc.1.4 + specifier: ^1.0.0-rc.1.5 version: link:../../../packages/solid-db '@tanstack/solid-router': specifier: ^1.170.43 @@ -1005,7 +1005,7 @@ importers: specifier: ^1.169.5 version: 1.169.5(@tanstack/react-router@1.170.46(react-dom@19.3.1(react@19.3.1))(react@19.3.1))(esbuild@0.28.2)(rolldown@1.2.16)(rollup@4.64.12)(solid-js@1.9.18)(vite-plugin-solid@2.11.15(@testing-library/jest-dom@6.9.1)(solid-js@1.9.18)(vite@8.3.6(@types/node@25.2.2)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.90.0)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1)))(vite@8.3.6(@types/node@25.2.2)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.90.0)(terser@5.51.2)(tsx@4.23.15)(yaml@2.9.1))(webpack@5.112.2(esbuild@0.28.2)) '@tanstack/trailbase-db-collection': - specifier: ^1.0.0-rc.1.4 + specifier: ^1.0.0-rc.1.5 version: link:../../../packages/trailbase-db-collection cors: specifier: ^2.8.6 From 03bb74d426b3d1fc4154e9c8d6fe6b3e5b820c08 Mon Sep 17 00:00:00 2001 From: Test Date: Tue, 10 Nov 2026 22:44:31 -0700 Subject: [PATCH 2/3] test(electric): guarantee snapshot reach after framework migration --- docs/contributing/oracle-coverage.md | 8 +- .../2026-11-10-electric-snapshot-reach.md | 115 ++++++++++++ ...ctric-sdk-delivery-oracle.property.test.ts | 164 +++++++++++++++--- 3 files changed, 258 insertions(+), 29 deletions(-) create mode 100644 docs/contributing/oracle-reviews/2026-11-10-electric-snapshot-reach.md diff --git a/docs/contributing/oracle-coverage.md b/docs/contributing/oracle-coverage.md index 203748e9d1..f040b9f225 100644 --- a/docs/contributing/oracle-coverage.md +++ b/docs/contributing/oracle-coverage.md @@ -8252,7 +8252,13 @@ prefetch attempt counts toward the outage threshold, as any failed shape-log request does; no driver response spans several chunks, so no history prefetches. It declares reach for a subset request's five retried attempts, five live pauses, a live -outage, and that restart. The retry-decision model +outage, and that restart. Each snapshot campaign now constructs a fresh +randomized history that reaches all seven declared states, including outages +led and crossed by a synchronous throw. Per-history checks enforce the +construction obligations for generated outputs as well as campaign examples; +seven missing-state calibrations reject an omitted reach observation. The +40-run budget, fixed seed, unconstrained arbitrary, and product comparisons +remain. See [the reach repair evidence](oracle-reviews/2026-11-10-electric-snapshot-reach.md). The retry-decision model (`electric-retry-decision-model.ts`, shared by the controlled lane of `electric-oracle.property.test.ts` and the installed-client lane) now observes an `awaitTxId` and an `awaitMatch` that reject when the run fails diff --git a/docs/contributing/oracle-reviews/2026-11-10-electric-snapshot-reach.md b/docs/contributing/oracle-reviews/2026-11-10-electric-snapshot-reach.md new file mode 100644 index 0000000000..2aa9d3f4f7 --- /dev/null +++ b/docs/contributing/oracle-reviews/2026-11-10-electric-snapshot-reach.md @@ -0,0 +1,115 @@ +# Electric snapshot campaign reach repair + +Subject: PR #2380, parent `7838a1c8d73e820e8f56383a90624fa28a6ca67b`. +The initially tested oracle blob was `116ecabd33bcd503c120c78e2b7f270a5924f316`; +pre-commit sorted its imports. Initial implementation commit: +`9bdb61b9248c99f1e5b17ce04555ee2ae25c146d`. +The refresh entry below identifies the current reviewed test. + +## Evidence + +- **Law:** Installed-SDK subset delivery preserves the overlapping source + snapshots. Retried subset requests and live pauses do not report a source + outage. Five failed shape-log attempts report the fifth failure. Retired + evidence becomes usable when the restarted run is ready. Authority: HEALTH-4, + EVID-2, META-1 and the existing maintainer decisions of 2026-10-30 and + 2026-11-02, cited beside `checkSnapshots` and in the coverage map. +- **RED:** On the parent, the command below failed the campaign census with + `live-outage-crossed-by-throw` missing. The semantic comparisons passed. + This was a sampled reach gap, not a demonstrated production defect. +- **GREEN:** The same command passes after the repair. The full changed file, + with coverage and typechecking enabled, passes 130 tests with no type errors. + `pnpm lint:changed` and the changed file's ESLint check pass. +- **Mutant:** Seven native calibrations remove one reach observation each. + Every removal fails the per-history check with law `constructed reach`. + A direct replay with `TANSTACK_DB_ELECTRIC_SDK_DELIVERY_FAULT=snapshot-rows` + fails the unchanged product comparison at `snapshot 0 applied rows`. + This is an assertion failure, not a timeout or setup failure. +- **Limits:** Controlled HTTP through the installed SDK; no live Electric + service or native-host claim. The original finite predicates, retry bounds, + row checks and run budget remain. No production or product-model change. + +RED / reseeded GREEN command (from the repository root): + +```sh +TANSTACK_DB_ORACLE_SEED=361651584 pnpm --config.verifyDepsBeforeRun=false \ + --filter @tanstack/electric-db-collection exec vitest run \ + tests/electric-sdk-delivery-oracle.property.test.ts --maxWorkers=1 \ + --fsModuleCache=false --typecheck.enabled=false --coverage.enabled=false \ + -t 'electric.sdk-snapshot-delivery > random seed' +``` + +The repaired property was also run with `-t 'electric.sdk-snapshot-delivery'` +so its determinism and missing-state calibrations executed. The normal full-file +run omitted the seed, name filter and typecheck/coverage overrides. +The dropped-row replay uses the same file with seed `361651584`, path `0`, +property `electric.sdk-snapshot-delivery` and the fault switch above. + +Reach counts in the repaired fixed / reseeded campaigns (40 generated runs plus +one seed-derived construction in each): + +| Declared state | Fixed 20260917 | Reseeded 361651584 | +| --- | ---: | ---: | +| subset-attempts-past-threshold | 34 | 30 | +| live-pauses-past-threshold | 31 | 25 | +| live-outage | 24 | 21 | +| live-outage-with-synchronous-throws | 24 | 21 | +| live-outage-led-by-throw | 24 | 15 | +| live-outage-crossed-by-throw | 23 | 17 | +| retired-evidence-after-restart | 41 | 41 | + +The minimum is one for each state, enforced on each seed-derived construction +and on every fresh generated construction. The builder preserves generated +width, name, middle live failure kinds, retry suffixes and optional extra loads. +It splices five subset retries, at least five actual snapshot requests, and a +live sequence led and crossed by a throw. Removing the splice loses guaranteed +reach. The original arbitrary still explores zero-to-four failures and other +orders; every constructed tuple remains within its bounds. Invalid payloads +outside the requested predicate remain excluded by the original driver. + +## Self-review against the rubric + +ORC-001/002/003: Product authority, independent source Map and health judgment, +public observation cuts, literate contract and limits remain unchanged. +ORC-004: The original grammar remains available; the constructed subset is +within its bounds and preserves the known throw-crossing witness. The preceding +paragraph records reconstruction, ablation, ranges and exclusion. +ORC-005: Reach is recorded after actual requests/retries and completed restart +comparisons, rather than inferred from the intended input. No concrete missing +source-information hypothesis arose in this generator repair. +ORC-006/007: Missing-state controls and dropped-row replay reject their intended +wrong answers. Fixed/random campaigns use the same 40-run budget and driver; +the checked direct replay reaches the original product checkpoint. +ORC-008/009: No product reference-model state or vocabulary changes; the new +WeakMaps track test construction obligations and observations only. +ORC-010: The existing assertion transport, same-violation shrinking and cleanup +controls remain; all pass in the full-file run. Product failures precede reach +failures in the new comparison. +ORC-011: No shared semantic fault hypothesis was identified; a second product +formulation is not triggered by this reach-only repair. +ORC-012: This versioned record bounds the claim to this oracle's reach gap. +ORC-013: The original threshold comparisons and unconstrained histories remain; +this repair adds no new reusable product-boundary claim. +ORC-014: No transfer from controlled HTTP to a live service is claimed. +ORC-015: All seven states are declared, constructed and counted; missing-state +calibrations exercise the per-history enforcement used for generated outputs. +ORC-016: New tests are checker calibrations through the shared comparison. + +## Revalidation after the release bot refresh + +Main merged the oracle API migration #2407 as +`e332f6134eb26b241cc5025da63ffef9bf0b0519`. The release bot replaced its +branch with `4888c630b7cab8f61f1e72ae57396716732c6a91`, dropping the repair. +The repair was reapplied to that parent without reverting the migration: +`owns` stays on every `oracleProperty`, and `law.owner` stays removed. +Current reviewed oracle blob: `7b76acc6902f4e8778d29b04fd9e117c49d6cbd9`. + +With the new locked framework `d1b508a`, the RED command above again fails +for the missing `live-outage-crossed-by-throw` state on the refreshed parent. +The repaired fixed and reseeded campaigns and all seven missing-state controls +pass (10 tests). Their reach counts match the table above. The full file with +normal fixed/random campaigns and typechecking passes 130 tests with no type +errors. The same direct replay mutant fails `snapshot 0 applied rows`. +Changed-file lint passes with the migrated ESLint plugin. No installation +overrides were needed. The law, grammar bounds, product comparisons and limits +in the original review remain unchanged. diff --git a/packages/electric-db-collection/tests/electric-sdk-delivery-oracle.property.test.ts b/packages/electric-db-collection/tests/electric-sdk-delivery-oracle.property.test.ts index 564aa8782a..7b76acc690 100644 --- a/packages/electric-db-collection/tests/electric-sdk-delivery-oracle.property.test.ts +++ b/packages/electric-db-collection/tests/electric-sdk-delivery-oracle.property.test.ts @@ -16,7 +16,11 @@ import { oracleRuns, } from '../../db/tests/oracle-config' import { declareOracle } from '../../db/tests/oracle-declaration' -import { oracleProperty } from '../../db/tests/oracle-property' +import { + oracleProperty, + violation as oracleViolation, + pass, +} from '../../db/tests/oracle-property' import { checkExistingElectricComparison, existingElectricComparison, @@ -42,6 +46,7 @@ import { managedTagPersistence, storageTargetId, } from './electric-persistence-fixture' +import type { Observation } from '../../db/tests/oracle-property' import type { TestRow } from './electric-persistence-fixture' import type { Item, Request } from './electric-sdk-delivery-support' import type { ElectricCollectionUtils } from '../src/electric' @@ -162,7 +167,8 @@ const campaignTimeoutMs = oracleRuns(30_000) // Native campaign tests retain the old campaign-local shrink predicate and // minimum-one census. Fixed calibration tests reset this bookkeeping too, but -// do not acquire campaign reach obligations. No random history is rewritten. +// do not acquire campaign reach obligations. Snapshot constructions below +// additionally enforce every required state on each generated construction. const resumeViolations: Array> = [] beforeEach(() => { snapshotViolation.reset() @@ -316,7 +322,12 @@ async function checkSnapshots( cleanupFailure?: Error, setupFault?: { primary: Error; cleanup?: Error }, retries: SubsetRetries = { failures: [], extraLoads: 0 }, + observeState?: (state: SnapshotReachState) => void, ) { + const reached = (state: SnapshotReachState) => { + snapshotObservedStates.add(state) + observeState?.(state) + } const http = controlledHttp() // Live attempts the app's fetchClient still throws on, and every failed // live attempt the provider made, in order. @@ -434,13 +445,7 @@ async function checkSnapshots( (_, i) => width + 1 + i, ), ] - // Each load pauses the live request; five pause it past the threshold. - if (lowerBounds.length >= 5) - snapshotObservedStates.add(`live-pauses-past-threshold`) for (const [index, lowerBound] of lowerBounds.entries()) { - if ((retries.failures[index] ?? 0) >= 5) { - snapshotObservedStates.add(`subset-attempts-past-threshold`) - } // Distinct predicates prevent request deduplication; the second response // overlaps prior rows and changes their payload, and the last is empty. if (index === 1) for (const item of source) item.name += `-changed` @@ -461,6 +466,8 @@ async function checkSnapshots( (error: unknown) => ({ ok: false as const, error }), ) let request = await atCheckpoint(http.take(true), `snapshot request`) + // The fifth distinct snapshot request confirms five live pauses. + if (index >= 4) reached(`live-pauses-past-threshold`) // A subset request's attempts that the client retries belong to that // request, not to the source: the source node shows no problem // (glossary, request error), however many fail in a row. @@ -474,6 +481,7 @@ async function checkSnapshots( http.take(true), `retried snapshot request`, ) + if (attempt >= 4) reached(`subset-attempts-past-threshold`) sourceHealth(`snapshot ${index} attempt ${attempt} source health`) } expect( @@ -541,15 +549,15 @@ async function checkSnapshots( } // The outage follows the attempts the provider made, not the plan. outage = made.length >= 5 - if (outage) snapshotObservedStates.add(`live-outage`) + if (outage) reached(`live-outage`) if (outage && made.slice(0, 5).includes(`throw`)) { - snapshotObservedStates.add(`live-outage-with-synchronous-throws`) + reached(`live-outage-with-synchronous-throws`) } if (outage && made[0] === `throw`) { - snapshotObservedStates.add(`live-outage-led-by-throw`) + reached(`live-outage-led-by-throw`) } if (made[4] === `throw`) { - snapshotObservedStates.add(`live-outage-crossed-by-throw`) + reached(`live-outage-crossed-by-throw`) } sourceHealth(`source health after live attempts`) } @@ -646,7 +654,7 @@ async function checkSnapshots( (await acceptedAfterImport())[1], `exported txid evidence once the restarted run is ready`, ).toBe(true) - snapshotObservedStates.add(`retired-evidence-after-restart`) + reached(`retired-evidence-after-restart`) }, [ { label: `snapshot collection`, release: () => collection.cleanup() }, { @@ -707,6 +715,91 @@ const snapshotHistoryArbitrary = fc.tuple( }), }), ) +type SnapshotHistory = [number, string, SubsetRetries] +const snapshotConstructionStates = new WeakMap< + SnapshotHistory, + ReadonlyArray +>() +const snapshotReachedByHistory = new WeakMap< + SnapshotHistory, + Set +>() + +// Preserve width, payload and optional retries. Splice only the premises for +// the existing census: five subset retries, five pauses, and live failures +// whose first and fifth attempts throw. The middle attempts and suffix still +// vary. Every construction is a fresh tuple inside the arbitrary's bounds. +// Without this splice, seed 361651584 misses an outage crossed by a throw. +function constructSnapshotHistory([ + width, + name, + retries, +]: SnapshotHistory): SnapshotHistory { + const history: SnapshotHistory = [ + width, + name, + { + failures: [ + Math.max(5, retries.failures[0] ?? 0), + ...retries.failures.slice(1), + ], + extraLoads: Math.max(2, retries.extraLoads), + live: [ + `throw`, + ...Array.from({ length: 3 }, (_, i) => retries.live?.[i + 1] ?? `http`), + `throw`, + ...(retries.live?.slice(5) ?? []), + ], + }, + ] + snapshotConstructionStates.set(history, snapshotStates) + return history +} + +const snapshotComparison = existingElectricComparison( + `electric.sdk-snapshot-delivery`, + (history: SnapshotHistory) => { + const [width, name, retries] = history + return retainSdkViolation(snapshotViolation, { width, name, retries }, () => + checkSnapshots( + width, + name, + replayFault === `snapshot-rows`, + undefined, + undefined, + retries, + (state) => snapshotReachedByHistory.get(history)?.add(state), + ), + ) + }, +) + +// The pinned framework checks seed-derived constructions. This check also +// enforces the same obligations for fresh constructions in generated runs. +// Product mismatches remain primary; missing reach cannot replace their law. +function checkSnapshotConstruction( + plan: { history: SnapshotHistory }, + trace: ReadonlyArray, + judgment: ReturnType, +) { + if (judgment.kind !== `pass`) return judgment + const reached = new Set( + trace + .filter(({ checkpoint }) => checkpoint === `reach`) + .map(({ value }) => value), + ) + const missing = (snapshotConstructionStates.get(plan.history) ?? []).filter( + (state) => !reached.has(state), + ) + return missing.length + ? oracleViolation( + `constructed states`, + `constructed history did not enter ${missing.join(`, `)}`, + `constructed reach`, + ) + : pass +} + oracleProperty({ id: `electric.sdk-snapshot-delivery`, law: { @@ -717,24 +810,39 @@ oracleProperty({ owns: [`src/electric.ts#electricCollectionOptions`], histories: { arbitrary: snapshotHistoryArbitrary, + states: snapshotStates, + constructed: [ + { + name: `subset retries, live pauses, throw-led and throw-crossed outage, restart`, + enters: snapshotStates, + build: constructSnapshotHistory, + }, + ], runs: 40, fixedSeeds: [20260917], }, - ...existingElectricComparison( - `electric.sdk-snapshot-delivery`, - ([width, name, retries]: [number, string, SubsetRetries]) => - retainSdkViolation(snapshotViolation, { width, name, retries }, () => - checkSnapshots( - width, - name, - replayFault === `snapshot-rows`, - undefined, - undefined, - retries, - ), - ), - ), - check: checkExistingElectricComparison, + ...snapshotComparison, + driver: async (plan, observe) => { + const reached = new Set() + snapshotReachedByHistory.set(plan.history, reached) + await snapshotComparison.driver(plan, observe) + for (const state of reached) observe(`reach`, state) + }, + check: checkSnapshotConstruction, + calibrations: snapshotStates.map((state) => ({ + name: `omits constructed ${state}`, + law: `constructed reach`, + corrupt: ( + trace: ReadonlyArray, + plan: { history: SnapshotHistory }, + ) => + snapshotConstructionStates.has(plan.history) + ? trace.filter( + ({ checkpoint, value }) => + checkpoint !== `reach` || value !== state, + ) + : undefined, + })), timeout: campaignTimeoutMs, }) From 1ac9be50b233da19268fcdd088063ecc80727a0c Mon Sep 17 00:00:00 2001 From: Test Date: Tue, 10 Nov 2026 23:47:15 -0700 Subject: [PATCH 3/3] ci: allow browser E2E suites to finish on slower runners --- .github/workflows/e2e-tests.yml | 4 +++- .../2026-11-10-electric-snapshot-reach.md | 18 ++++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/.github/workflows/e2e-tests.yml b/.github/workflows/e2e-tests.yml index 6d63823083..e963cd9abc 100644 --- a/.github/workflows/e2e-tests.yml +++ b/.github/workflows/e2e-tests.yml @@ -20,7 +20,9 @@ jobs: matrix: group: [browser, adapter-browser, desktop, cloud-mobile] runs-on: ubuntu-latest - timeout-minutes: 35 + # Browser runs provider, IndexedDB, OPFS and SSR suites sequentially. + # Allow the full suite to finish on slower runners. + timeout-minutes: ${{ matrix.group == 'browser' && 60 || 35 }} steps: - name: Checkout code uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6.1.0 diff --git a/docs/contributing/oracle-reviews/2026-11-10-electric-snapshot-reach.md b/docs/contributing/oracle-reviews/2026-11-10-electric-snapshot-reach.md index 2aa9d3f4f7..444aabc797 100644 --- a/docs/contributing/oracle-reviews/2026-11-10-electric-snapshot-reach.md +++ b/docs/contributing/oracle-reviews/2026-11-10-electric-snapshot-reach.md @@ -113,3 +113,21 @@ errors. The same direct replay mutant fails `snapshot 0 applied rows`. Changed-file lint passes with the migrated ESLint plugin. No installation overrides were needed. The law, grammar bounds, product comparisons and limits in the original review remain unchanged. + +## Browser CI execution budget + +At head `03bb74d426b3d1fc4154e9c8d6fe6b3e5b820c08`, PR workflow +42967741843 passed in full. Browser E2E job 130348956406 was cancelled by +the workflow's 35-minute outer deadline while completing live Electric prefix +comparisons. Every preceding step passed, including IndexedDB, OPFS fairness +and packaged-consumer checks. Its log contains no assertion failure. + +The prior green browser run spent 5.2 minutes in IndexedDB and 11.3 in OPFS +fairness; the cancelled run spent 6.7 and 14.4. Other builds and provider +suites also took roughly 25–30% longer. One retry on the identical head +again took 6.8 minutes in IndexedDB before entering OPFS. The 35-minute +limit has insufficient headroom for this sequential group on slower runners. +The browser job now gets 60 minutes; other groups keep 35. Test commands, +individual test timeouts, oracle run budgets and comparisons are unchanged. +The repaired oracle blob above is unchanged. Final-head CI must validate this +workflow change as well as the oracle repair before merge.