# Contributor handoff — TanStack/query

> Canonical page: https://codevetter.com/unpack/query/agent-handoff

# Contributor handoff — TanStack/query

Scanned commit 29859ae60c8dca0a5cdbf8abccc775b655cf43e2 (2026-10-02). Generated by codevetter codevetter 1.15.0 on 2026-10-02.

Source inspection; upstream code and tests were not executed.

Tests and CI were inspected, not executed, and this source inventory is bounded rather than exhaustive. Future agents should begin with repository instructions, the owning package, and the relevant core-to-adapter flow. Core edits require attention to cache identity, observer timing, cancellation, mutation callbacks, and external snapshots. Validation commands below are recommendations for a future authorized implementation task, not actions performed during this investigation.
- AGENTS.md requires reading CONTRIBUTING.md before analysis or changes; contribution guidance requires focused changes, understood and verified generated code, and the repository PR template. — [AGENTS.md#L1-L9](https://github.com/TanStack/query/blob/29859ae60c8dca0a5cdbf8abccc775b655cf43e2/AGENTS.md#L1-L9) [CONTRIBUTING.md#L15-L23](https://github.com/TanStack/query/blob/29859ae60c8dca0a5cdbf8abccc775b655cf43e2/CONTRIBUTING.md#L15-L23)
- Resolve package-manager drift explicitly: CONTRIBUTING.md mentions pnpm v11, while the pinned root manifest specifies pnpm@12.4.2 and a matching minimum engine. — [CONTRIBUTING.md#L39-L49](https://github.com/TanStack/query/blob/29859ae60c8dca0a5cdbf8abccc775b655cf43e2/CONTRIBUTING.md#L39-L49) [package.json#L8-L11](https://github.com/TanStack/query/blob/29859ae60c8dca0a5cdbf8abccc775b655cf43e2/package.json#L8-L11)
- Read the runtime owner before adapter changes: useBaseQuery defaults options and owns React subscriptions, QueryObserver decides fetch/result behavior, and QueryClient owns caches and lifecycle listeners. — [packages/react-query/src/useBaseQuery.ts#L51-L116](https://github.com/TanStack/query/blob/29859ae60c8dca0a5cdbf8abccc775b655cf43e2/packages/react-query/src/useBaseQuery.ts#L51-L116) [packages/query-core/src/queryObserver.ts#L110-L165](https://github.com/TanStack/query/blob/29859ae60c8dca0a5cdbf8abccc775b655cf43e2/packages/query-core/src/queryObserver.ts#L110-L165) [packages/query-core/src/queryClient.ts#L89-L119](https://github.com/TanStack/query/blob/29859ae60c8dca0a5cdbf8abccc775b655cf43e2/packages/query-core/src/queryClient.ts#L89-L119)
- Preserve notification-aware writes: setQueryData applies an updater, skips undefined, and writes through Query.setData; direct state-object mutation bypasses QueryCache's documented notifications. — [packages/query-core/src/queryClient.ts#L298-L310](https://github.com/TanStack/query/blob/29859ae60c8dca0a5cdbf8abccc775b655cf43e2/packages/query-core/src/queryClient.ts#L298-L310) [packages/query-core/src/queryCache.ts#L106-L114](https://github.com/TanStack/query/blob/29859ae60c8dca0a5cdbf8abccc775b655cf43e2/packages/query-core/src/queryCache.ts#L106-L114)
- For authorized validation, run package runtime tests from the root through pnpm nx run @tanstack/{package-name}:test:lib; Nx compiles dependencies first, and package scripts provide separate type and package-export checks. — [CONTRIBUTING.md#L179-L217](https://github.com/TanStack/query/blob/29859ae60c8dca0a5cdbf8abccc775b655cf43e2/CONTRIBUTING.md#L179-L217) [nx.json#L60-L85](https://github.com/TanStack/query/blob/29859ae60c8dca0a5cdbf8abccc775b655cf43e2/nx.json#L60-L85) [packages/query-core/package.json#L21-L31](https://github.com/TanStack/query/blob/29859ae60c8dca0a5cdbf8abccc775b655cf43e2/packages/query-core/package.json#L21-L31)
- Published-package changes require a changeset, while docs, CI, examples, and development-only changes do not; Changesets config places many packages in fixed version groups. — [CONTRIBUTING.md#L165-L167](https://github.com/TanStack/query/blob/29859ae60c8dca0a5cdbf8abccc775b655cf43e2/CONTRIBUTING.md#L165-L167) [.changeset/config.json#L11-L39](https://github.com/TanStack/query/blob/29859ae60c8dca0a5cdbf8abccc775b655cf43e2/.changeset/config.json#L11-L39)
- Reference markdown is generated from source JSDoc, so edit JSDoc rather than generated pages; new documentation pages also require updating docs/config.json. — [CONTRIBUTING.md#L124-L133](https://github.com/TanStack/query/blob/29859ae60c8dca0a5cdbf8abccc775b655cf43e2/CONTRIBUTING.md#L124-L133)
- Do not assume snapshots preserve executable behavior: dehydrateMutation stores key/state/scope/meta, and the offline example registers a default mutationFn specifically to resume paused mutations after reload. — [packages/query-core/src/hydration.ts#L102-L108](https://github.com/TanStack/query/blob/29859ae60c8dca0a5cdbf8abccc775b655cf43e2/packages/query-core/src/hydration.ts#L102-L108) [examples/react/offline/src/App.tsx#L49-L55](https://github.com/TanStack/query/blob/29859ae60c8dca0a5cdbf8abccc775b655cf43e2/examples/react/offline/src/App.tsx#L49-L55) [packages/query-core/src/mutation.ts#L295-L301](https://github.com/TanStack/query/blob/29859ae60c8dca0a5cdbf8abccc775b655cf43e2/packages/query-core/src/mutation.ts#L295-L301)

Every claim links to its cited files at the pinned commit. Citations identify source evidence; they do not establish runtime correctness. Independent CodeVetter scan — not reviewed by upstream maintainers.

## Public product links

- [CodeVetter](https://codevetter.com/)
- [Download](https://codevetter.com/download)
- [Documentation](https://codevetter.com/docs/)
- [Source](https://github.com/Codevetter/codevetter)
