Skip to content

docs: Note Vue's mounted useSuspense keeps data after invalidate - #4411

Merged
ntucker merged 5 commits into
masterfrom
claude/vue-invalidate-docs-h3n1ld
Oct 19, 2026
Merged

ntucker merged 5 commits into
masterfrom
claude/vue-invalidate-docs-h3n1ld

Conversation

@ntucker

@ntucker ntucker commented Oct 19, 2026 •

Copy link
Copy Markdown
Collaborator

Requested by Nathaniel · project thread

Follow-up to the staff comment on #4396.

Motivation

Before: the invalidate/invalidateAll JSDoc, the useSuspense behavior table and Controller's ExpiryStatus.Invalid notes said invalidation always suspends, with no Vue exception. In Vue a mounted useSuspense can't suspend again after setup (packages/vue/src/consumers/useSuspense.ts), so it keeps returning its current data while the refetch runs.

After: all three say so on Vue pages (and in the JSDoc), matching what Controller#invalidate and the expiry-policy page already said.

Solution

  • Controller.ts: one JSDoc line on invalidate and invalidateAll.
  • useSuspense.md: Vue-only footnote 3 on the Invalid row's Suspend cell (:vue[] marker plus a :::vue block inside the note).
  • Controller.md: :vue[] carve-out on "Will always suspend".
  • yarn build:skills regenerated the three Vue skill references.

Docs only, so no changeset.


Generated by Claude Code


Note

Low Risk
Documentation and JSDoc comment changes only; no runtime behavior changes.

Overview
Clarifies that Controller.invalidate / invalidateAll still trigger refetches but, in Vue, mounted useSuspense consumers do not re-suspend—they keep showing current data until the refetch finishes. Docs previously implied invalidation always suspends like React.

Updates span Controller.ts JSDoc (and mirrored playground .d.ts), useSuspense behavior tables (Vue footnote on Invalid + suspend-only-during-setup), ExpiryStatus.Invalid notes, and a Vue tip on remounting with a new key and <Suspense timeout="0"> to show the fallback again after invalidate. Agent skill references were regenerated via yarn build:skills.

Reviewed by Cursor Bugbot for commit 2e6cab7. Bugbot is set up for automated code reviews on this repo. Configure here.

Vue can't re-suspend a mounted component, so useSuspense keeps returning
its current data while an invalidated endpoint refetches. Add that
carve-out to the invalidate/invalidateAll JSDoc, the useSuspense
behavior table, and Controller's ExpiryStatus.Invalid notes.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Tj5PXbDEpJbnwML9CXTHFb
@changeset-bot

changeset-bot Bot commented Oct 19, 2026 •

Copy link
Copy Markdown

⚠️ No Changeset found

Latest commit: 2e6cab7

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

@ntucker ntucker self-assigned this Oct 19, 2026
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 19, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-19T15:46:45.042695Z 2e6cab7 New commits
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Tj5PXbDEpJbnwML9CXTHFb
@github-actions

Copy link
Copy Markdown
Contributor

Size Change: 0 B

Total Size: 112 kB

ℹ️ View Unchanged
Filename Size
examples/test-bundlesize/dist/App.js 1.45 kB
examples/test-bundlesize/dist/polyfill.js 301 B
examples/test-bundlesize/dist/rdcClient.js 10.8 kB
examples/test-bundlesize/dist/rdcEndpoint.js 8.04 kB
examples/test-bundlesize/dist/rdcNextjs.js 12.4 kB
examples/test-bundlesize/dist/rdcPipeableStream.js 9.65 kB
examples/test-bundlesize/dist/react.js 68.6 kB
examples/test-bundlesize/dist/webpack-runtime.js 698 B

compressed-size-action

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: cb3a3f65b9

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread packages/core/src/controller/Controller.ts Outdated
@codecov

codecov Bot commented Oct 19, 2026 •

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 98.37%. Comparing base (b475613) to head (2e6cab7).

Additional details and impacted files
@@           Coverage Diff           @@
##           master    #4411   +/-   ##
=======================================
  Coverage   98.37%   98.37%           
=======================================
  Files         161      161           
  Lines        3072     3072           
  Branches      604      604           
=======================================
  Hits         3022     3022           
  Misses         10       10           
  Partials       40       40           

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

Fold the Vue caveat into the invalidate JSDoc's first sentence and point
the footnotes at expiry-policy instead of restating the reason.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Tj5PXbDEpJbnwML9CXTHFb
@github-actions

github-actions Bot commented Oct 19, 2026 •

Copy link
Copy Markdown
Contributor

Docs preview: https://docs-site-pr-4411-data-client.vercel.app

Built from 2e6cab7 merged into master (this build). English only: this PR doesn't touch translations.

@github-actions github-actions Bot left a comment •

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Benchmark React

Details
Benchmark suite Current: 2e6cab7 Previous: ecac998 Ratio
data-client: getlist-100 188.68 ops/s (± 8.9%) 163.98 ops/s (± 9.1%) 0.87
data-client: getlist-500 60.06 ops/s (± 4.5%) 52.08 ops/s (± 4.2%) 0.87
data-client: update-entity 357.14 ops/s (± 6.6%) 370.37 ops/s (± 8.9%) 1.04
data-client: update-user 434.78 ops/s (± 7.0%) 434.78 ops/s (± 11.5%) 1
data-client: getlist-500-sorted 58.15 ops/s (± 8.1%) 53.91 ops/s (± 6.8%) 0.93
data-client: update-entity-sorted 327.96 ops/s (± 7.4%) 384.62 ops/s (± 11.5%) 1.17
data-client: update-entity-multi-view 327.96 ops/s (± 7.4%) 384.62 ops/s (± 7.3%) 1.17
data-client: list-detail-switch-10 15.4 ops/s (± 8.9%) 10.62 ops/s (± 9.6%) 0.69
data-client: update-user-10000 89.29 ops/s (± 8.9%) 92.59 ops/s (± 9.4%) 1.04
data-client: invalidate-and-resolve 49.38 ops/s (± 5.7%) 42.02 ops/s (± 5.0%) 0.85
data-client: unshift-item 259.78 ops/s (± 5.4%) 238.1 ops/s (± 5.4%) 0.92
data-client: delete-item 370.37 ops/s (± 8.9%) 312.5 ops/s (± 9.7%) 0.84
data-client: move-item 208.33 ops/s (± 6.1%) 190.49 ops/s (± 7.6%) 0.91

This comment was automatically generated by workflow using github-action-benchmark.

@github-actions github-actions Bot left a comment •

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Benchmark

Details
Benchmark suite Current: 2e6cab7 Previous: ecac998 Ratio
normalizeLong 432 ops/sec (±3.21%) 548 ops/sec (±4.07%) 1.27
normalizeLong Values 387 ops/sec (±0.48%) 470 ops/sec (±0.84%) 1.21
normalizeLong Scalar 360 ops/sec (±2.92%) 448 ops/sec (±2.54%) 1.24
normalizeLong Scalar update 894 ops/sec (±0.16%) 1103 ops/sec (±0.72%) 1.23
denormalizeLong 231 ops/sec (±5.46%) 293 ops/sec (±5.80%) 1.27
denormalizeLong Values 212 ops/sec (±5.57%) 274 ops/sec (±4.95%) 1.29
denormalizeLong donotcache 997 ops/sec (±0.98%) 1344 ops/sec (±0.92%) 1.35
denormalizeLong Values donotcache 720 ops/sec (±0.26%) 954 ops/sec (±0.17%) 1.32
denormalizeLong Scalar donotcache 1063 ops/sec (±0.30%) 1541 ops/sec (±0.08%) 1.45
denormalizeShort donotcache 500x 1418 ops/sec (±0.13%) 1762 ops/sec (±0.21%) 1.24
denormalizeShort 500x 623 ops/sec (±7.09%) 745 ops/sec (±6.15%) 1.20
denormalizeShort 500x withCache 6262 ops/sec (±0.16%) 9383 ops/sec (±0.06%) 1.50
queryShort 500x withCache 3137 ops/sec (±0.81%) 4221 ops/sec (±0.19%) 1.35
buildQueryKey All 59716 ops/sec (±0.50%) 69817 ops/sec (±0.61%) 1.17
query All withCache 5941 ops/sec (±2.42%) 7884 ops/sec (±2.64%) 1.33
denormalizeLong with mixin Entity 208 ops/sec (±7.49%) 266 ops/sec (±6.47%) 1.28
denormalizeLong withCache 6195 ops/sec (±0.24%) 7853 ops/sec (±0.20%) 1.27
denormalizeLong withCache (Scalar churn) 6170 ops/sec (±1.00%) 7774 ops/sec (±0.71%) 1.26
denormalizeLong Values withCache 4732 ops/sec (±1.48%) 8436 ops/sec (±1.51%) 1.78
denormalizeLong Scalar withCache 7059 ops/sec (±0.25%) 9577 ops/sec (±0.20%) 1.36
denormalizeLong Scalar update withCache 3989 ops/sec (±1.16%) 7186 ops/sec (±0.56%) 1.80
denormalizeLong All withCache 6046 ops/sec (±0.35%) 9149 ops/sec (±0.29%) 1.51
denormalizeLong Query-sorted withCache 6087 ops/sec (±1.12%) 8020 ops/sec (±3.69%) 1.32
denormalizeLongAndShort withEntityCacheOnly 1654 ops/sec (±0.34%) 1938 ops/sec (±1.28%) 1.17
denormalize bidirectional 50 4512 ops/sec (±8.21%) 5393 ops/sec (±8.70%) 1.20
denormalize bidirectional 50 donotcache 41771 ops/sec (±0.20%) 56174 ops/sec (±0.16%) 1.34
getResponse 4391 ops/sec (±4.19%) 6386 ops/sec (±4.40%) 1.45
getResponse (null) 10163053 ops/sec (±0.70%) 12989177 ops/sec (±0.76%) 1.28
getResponse (clear cache) 199 ops/sec (±9.21%) 268 ops/sec (±8.07%) 1.35
getSmallResponse 3421 ops/sec (±4.14%) 4939 ops/sec (±1.11%) 1.44
getSmallInferredResponse 2703 ops/sec (±0.14%) 3897 ops/sec (±0.08%) 1.44
getResponse Collection 4438 ops/sec (±3.52%) 6907 ops/sec (±1.55%) 1.56
get Collection 2778 ops/sec (±0.19%) 5587 ops/sec (±0.27%) 2.01
get Query-sorted 4994 ops/sec (±1.13%) 7638 ops/sec (±2.31%) 1.53
setLong 432 ops/sec (±0.60%) 562 ops/sec (±0.11%) 1.30
setLongWithMerge 246 ops/sec (±1.04%) 326 ops/sec (±0.85%) 1.33
setLongWithSimpleMerge 264 ops/sec (±0.66%) 345 ops/sec (±0.08%) 1.31
setSmallResponse 500x 899 ops/sec (±1.66%) 1116 ops/sec (±1.37%) 1.24
setMany 50x one-per-row 150 ops/sec (±0.72%) 164 ops/sec (±0.30%) 1.09
setMany 50 batch 3619 ops/sec (±0.76%) 4727 ops/sec (±0.40%) 1.31
setMany 500x one-per-row 15.2 ops/sec (±0.65%) 16.7 ops/sec (±0.28%) 1.10
setMany 500 batch 1390 ops/sec (±3.28%) 1902 ops/sec (±0.23%) 1.37

This comment was automatically generated by workflow using github-action-benchmark.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Tj5PXbDEpJbnwML9CXTHFb
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Tj5PXbDEpJbnwML9CXTHFb
@ntucker
ntucker added this pull request to the merge queue Oct 19, 2026
Merged via the queue into master with commit dc61f24 Oct 19, 2026
38 checks passed
@ntucker
ntucker deleted the claude/vue-invalidate-docs-h3n1ld branch October 19, 2026 16:44

This branch was successfully deployed

1 active deployment
docs-preview — 2e6cab7f Deployed Oct 19, 2026 by ntucker via docs deploy #3434
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