Skip to content

Debugging - #1047

Closed
KyleAMathews wants to merge 5 commits into
mainfrom
claude/investigate-tanstackdb-bug-7rqV5
Closed

KyleAMathews wants to merge 5 commits into
mainfrom
claude/investigate-tanstackdb-bug-7rqV5

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

Adds console.log statements to trace the flow of data when rows move
into scope in on-demand mode with subset filtering. Key areas logged:

- SYNC_START: Collection sync initialization (mode, offset, table, where)
- STREAM: All incoming message batches and individual message types
- CHANGE: Every change message with operation, row ID, existing state, tags
- MOVE-IN: Detection of rows receiving their first tags
- MOVE-OUT: Move-out event processing and row deletion
- TAGS: Tag addition/removal with before/after counts
- LOAD_SUBSET: Snapshot requests and responses
- STATE: Insert/update/delete operations with data merging details

Critical warnings are logged when:
- UPDATE received for non-existent row (potential partial data bug)
- Move-in row has undefined values

To use: Run the app and check console for [DEBUG] prefixed logs.
Additional logging added to cover all code paths:

- BUFFERING: When messages are buffered in progressive mode
- TX: All transaction begin/commit points
- SNAPSHOT_END/SUBSET_END: Control message handling
- UP_TO_DATE: When up-to-date is received
- MUST_REFETCH: When must-refetch triggers truncate
- ATOMIC_SWAP: All steps of progressive mode atomic swap
- BATCH_END: Summary at end of each message batch
- READY: When collection is marked ready
- LOAD_SUBSET: Cursor-based pagination requests
- TAGS: All tag operations (add, remove, clear, match)
  - addTagsToRow with tag details
  - removeTagsFromRow with tag details
  - removeMatchingTagsFromRow with before/after counts
  - clearTagsForRow and clearTagTrackingState
Additional logging for remaining code paths:

- CLEANUP: When collection cleanup is called
- ERROR: When ShapeStream errors occur
- STATE TRUNCATE: Before/after truncate with sizes
- STATE COMMIT: Final commit summary with sizes
- LOAD_SUBSET: More detail on cursor pagination
- TAGS: All tag operation entry/exit points

This covers all major code paths for debugging the move-in bug.
@changeset-bot

changeset-bot Bot commented Dec 19, 2025

Copy link
Copy Markdown

⚠️ No Changeset found

Latest commit: d5bc771

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.

This PR includes no changesets

When changesets are added to this PR, you'll see the packages that this PR includes changesets for and the associated semver types

Click here to learn what changesets are, and how to add one.

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

@pkg-pr-new

pkg-pr-new Bot commented Dec 19, 2025

Copy link
Copy Markdown
More templates

@tanstack/angular-db

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

@tanstack/db

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

@tanstack/db-ivm

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

@tanstack/electric-db-collection

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

@tanstack/offline-transactions

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

@tanstack/powersync-db-collection

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

@tanstack/query-db-collection

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

@tanstack/react-db

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

@tanstack/rxdb-db-collection

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

@tanstack/solid-db

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

@tanstack/svelte-db

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

@tanstack/trailbase-db-collection

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

@tanstack/vue-db

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

commit: d5bc771

@github-actions

Copy link
Copy Markdown
Contributor

Size Change: +342 B (+0.38%)

Total Size: 89.8 kB

Filename Size Change
./packages/db/dist/esm/collection/state.js 3.8 kB +342 B (+9.88%) ⚠️
ℹ️ 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/subscription.js 3.54 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/collection-subscriber.js 1.9 kB
./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
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

@KyleAMathews

Copy link
Copy Markdown
Collaborator Author

Closing as superseded on current main. Against pinned origin/main , a deterministic independent-model probe covering tagged insert → last-route move-out → partial update without baseline → silent move-in is GREEN, while its hostile mutant fails first at the partial-update step. The same-path regressions in and the generated Electric invalid-resume oracle are also GREEN. The underlying lifecycle/resume work landed in #1785 (); this diagnostics-only branch is now stale. Preserving Kyle Mathews/Claude credit and the logging ideas in the Electric lifecycle/oracle cluster.

@KyleAMathews

Copy link
Copy Markdown
Collaborator Author

Evidence detail (exact refs): pinned origin/main SHA 3b99117. Same-path regressions: packages/electric-db-collection/tests/tags.test.ts plus the generated invalid-resume oracle. Superseding merge: PR #1785, commit a378bd3.

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