Skip to content

Learn from Cheng Huang's modernization article - #1087

Closed
KyleAMathews wants to merge 6 commits into
mainfrom
claude/cheng-huang-article-notes-iSUp7
Closed

KyleAMathews wants to merge 6 commits into
mainfrom
claude/cheng-huang-article-notes-iSUp7

Conversation

@KyleAMathews

Copy link
Copy Markdown
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

changeset-bot Bot commented Jan 2, 2026

Copy link
Copy Markdown

🦋 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

pkg-pr-new Bot commented Jan 2, 2026

Copy link
Copy Markdown
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

github-actions Bot commented Jan 2, 2026

Copy link
Copy Markdown
Contributor

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

github-actions Bot commented Jan 2, 2026

Copy link
Copy Markdown
Contributor

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).
@KyleAMathews

Copy link
Copy Markdown
Collaborator Author

Closing as stale/superseded on the exact D2 path. Against pinned origin/main , an independent weighted-multiset model stays at exactly one D2 contribution through insert, duplicate insert, stale-before update, stale-payload delete, and reinsert. The hostile reconciler fails first at duplicate insert (weight 2), and the current 19-test D2 reconciliation oracle suite is GREEN. The production fix lineage is #1054 (), with stronger oracle coverage in #1816 (). Preserving Kyle Mathews/Claude experimental credit and Cheng Huang attribution; reusable runtime-contract ideas remain a future live-query diagnostics cluster.

@KyleAMathews

Copy link
Copy Markdown
Collaborator Author

Evidence detail (exact refs): pinned origin/main SHA 3b99117. Production fix lineage: PR #1054, commit 32ec4d8. Stronger oracle coverage: PR #1816, commit 3c4c35d.

@KyleAMathews

Copy link
Copy Markdown
Collaborator Author

Additional lineage credit: PR #1797, commit cfb01ce, introduced the exact current reconcileChangesForD2 helper on the modern path; Sam Willis's #1054 remains the original duplicate-insert fix lineage, and #1816 strengthened the oracle coverage.

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.

2 participants