Skip to content

Conversation

@KyleAMathews
Copy link
Collaborator

🎯 Changes

βœ… Checklist

  • I have followed the steps in the Contributing guide.
  • I have tested this code locally with pnpm test:pr.

πŸš€ Release Impact

  • This change affects published code, and I have generated a changeset.
  • This change is docs/CI/dev-only (no release).

claude added 2 commits January 2, 2026 16:15
Inspired by Cheng Huang's article on AI-assisted development, this introduces
a contract-based testing approach for the live query system.

Changes:
- Add contracts.ts with precondition/postcondition/invariant utilities
- Add D2 multiplicity contracts to CollectionSubscriber.sendChangesToPipeline
- Add contract verification test suite (16 tests)

The contracts verify:
- D2 multiplicity stays at 1 for all visible items
- sentToD2Keys accurately tracks keys sent to D2 pipeline
- Insert/delete operations maintain consistent tracking state

Contracts can be disabled in production via NODE_ENV=production for performance.
@changeset-bot
Copy link

changeset-bot bot commented Jan 2, 2026

πŸ¦‹ Changeset detected

Latest commit: cabc33d

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 12 packages
Name Type
@tanstack/db Patch
@tanstack/angular-db Patch
@tanstack/electric-db-collection Patch
@tanstack/offline-transactions Patch
@tanstack/powersync-db-collection Patch
@tanstack/query-db-collection Patch
@tanstack/react-db Patch
@tanstack/rxdb-db-collection Patch
@tanstack/solid-db Patch
@tanstack/svelte-db Patch
@tanstack/trailbase-db-collection Patch
@tanstack/vue-db Patch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@pkg-pr-new
Copy link

pkg-pr-new bot commented Jan 2, 2026

More templates

@tanstack/angular-db

npm i https://pkg.pr.new/@tanstack/angular-db@1087

@tanstack/db

npm i https://pkg.pr.new/@tanstack/db@1087

@tanstack/db-ivm

npm i https://pkg.pr.new/@tanstack/db-ivm@1087

@tanstack/electric-db-collection

npm i https://pkg.pr.new/@tanstack/electric-db-collection@1087

@tanstack/offline-transactions

npm i https://pkg.pr.new/@tanstack/offline-transactions@1087

@tanstack/powersync-db-collection

npm i https://pkg.pr.new/@tanstack/powersync-db-collection@1087

@tanstack/query-db-collection

npm i https://pkg.pr.new/@tanstack/query-db-collection@1087

@tanstack/react-db

npm i https://pkg.pr.new/@tanstack/react-db@1087

@tanstack/rxdb-db-collection

npm i https://pkg.pr.new/@tanstack/rxdb-db-collection@1087

@tanstack/solid-db

npm i https://pkg.pr.new/@tanstack/solid-db@1087

@tanstack/svelte-db

npm i https://pkg.pr.new/@tanstack/svelte-db@1087

@tanstack/trailbase-db-collection

npm i https://pkg.pr.new/@tanstack/trailbase-db-collection@1087

@tanstack/vue-db

npm i https://pkg.pr.new/@tanstack/vue-db@1087

commit: cabc33d

@github-actions
Copy link
Contributor

github-actions bot commented Jan 2, 2026

Size Change: +855 B (+0.96%)

Total Size: 90.4 kB

Filename Size Change
./packages/db/dist/esm/contracts.js 445 B +445 B (new file) πŸ†•
./packages/db/dist/esm/query/live/collection-subscriber.js 2.31 kB +410 B (+21.64%) 🚨
ℹ️ View Unchanged
Filename Size
./packages/db/dist/esm/collection/change-events.js 1.39 kB
./packages/db/dist/esm/collection/changes.js 999 B
./packages/db/dist/esm/collection/events.js 388 B
./packages/db/dist/esm/collection/index.js 3.24 kB
./packages/db/dist/esm/collection/indexes.js 1.1 kB
./packages/db/dist/esm/collection/lifecycle.js 1.67 kB
./packages/db/dist/esm/collection/mutations.js 2.34 kB
./packages/db/dist/esm/collection/state.js 3.46 kB
./packages/db/dist/esm/collection/subscription.js 3.62 kB
./packages/db/dist/esm/collection/sync.js 2.38 kB
./packages/db/dist/esm/deferred.js 207 B
./packages/db/dist/esm/errors.js 4.27 kB
./packages/db/dist/esm/event-emitter.js 748 B
./packages/db/dist/esm/index.js 2.68 kB
./packages/db/dist/esm/indexes/auto-index.js 742 B
./packages/db/dist/esm/indexes/base-index.js 766 B
./packages/db/dist/esm/indexes/btree-index.js 1.93 kB
./packages/db/dist/esm/indexes/lazy-index.js 1.1 kB
./packages/db/dist/esm/indexes/reverse-index.js 513 B
./packages/db/dist/esm/local-only.js 837 B
./packages/db/dist/esm/local-storage.js 2.1 kB
./packages/db/dist/esm/optimistic-action.js 359 B
./packages/db/dist/esm/paced-mutations.js 496 B
./packages/db/dist/esm/proxy.js 3.75 kB
./packages/db/dist/esm/query/builder/functions.js 733 B
./packages/db/dist/esm/query/builder/index.js 3.96 kB
./packages/db/dist/esm/query/builder/ref-proxy.js 917 B
./packages/db/dist/esm/query/compiler/evaluators.js 1.35 kB
./packages/db/dist/esm/query/compiler/expressions.js 430 B
./packages/db/dist/esm/query/compiler/group-by.js 1.8 kB
./packages/db/dist/esm/query/compiler/index.js 1.96 kB
./packages/db/dist/esm/query/compiler/joins.js 2 kB
./packages/db/dist/esm/query/compiler/order-by.js 1.46 kB
./packages/db/dist/esm/query/compiler/select.js 1.07 kB
./packages/db/dist/esm/query/expression-helpers.js 1.43 kB
./packages/db/dist/esm/query/ir.js 673 B
./packages/db/dist/esm/query/live-query-collection.js 360 B
./packages/db/dist/esm/query/live/collection-config-builder.js 5.33 kB
./packages/db/dist/esm/query/live/collection-registry.js 264 B
./packages/db/dist/esm/query/live/internal.js 130 B
./packages/db/dist/esm/query/optimizer.js 2.56 kB
./packages/db/dist/esm/query/predicate-utils.js 2.97 kB
./packages/db/dist/esm/query/subset-dedupe.js 921 B
./packages/db/dist/esm/scheduler.js 1.3 kB
./packages/db/dist/esm/SortedMap.js 1.3 kB
./packages/db/dist/esm/strategies/debounceStrategy.js 247 B
./packages/db/dist/esm/strategies/queueStrategy.js 428 B
./packages/db/dist/esm/strategies/throttleStrategy.js 246 B
./packages/db/dist/esm/transactions.js 2.9 kB
./packages/db/dist/esm/utils.js 881 B
./packages/db/dist/esm/utils/browser-polyfills.js 304 B
./packages/db/dist/esm/utils/btree.js 5.61 kB
./packages/db/dist/esm/utils/comparison.js 852 B
./packages/db/dist/esm/utils/cursor.js 457 B
./packages/db/dist/esm/utils/index-optimization.js 1.51 kB
./packages/db/dist/esm/utils/type-guards.js 157 B

compressed-size-action::db-package-size

@github-actions
Copy link
Contributor

github-actions bot commented Jan 2, 2026

Size Change: 0 B

Total Size: 3.35 kB

ℹ️ View Unchanged
Filename Size
./packages/react-db/dist/esm/index.js 225 B
./packages/react-db/dist/esm/useLiveInfiniteQuery.js 1.17 kB
./packages/react-db/dist/esm/useLiveQuery.js 1.12 kB
./packages/react-db/dist/esm/useLiveSuspenseQuery.js 431 B
./packages/react-db/dist/esm/usePacedMutations.js 401 B

compressed-size-action::react-db-package-size

claude and others added 3 commits January 2, 2026 16:42
Introduces property-based testing to explore edge cases in the live query
system. Tests use fast-check to generate random sequences of operations
and verify that invariants hold across all inputs.

Properties tested:
- D2 multiplicity invariant (no duplicate keys)
- State consistency (live query matches expected state)
- Delete-insert cycles (re-insert always succeeds after delete)
- Filtered query correctness (only matching items present)
- Batch operation consistency (sequential vs batched produce same result)
- Stress testing (100-200 operations maintain invariants)

All 9 property-based tests run 100 iterations each (20 for stress tests).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants