Repository navigation
fix: preserve hydration and suspended error recovery contracts - #43
tannerlinsley wants to merge 3 commits into
Conversation
🦋 Changeset detectedLatest commit: 4880924 The changes in this PR will be included in the next version bump. This PR includes changesets to release 1 package
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 |
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info
📝 Walkthrough
Merge Risk: ⚪ Minimal · up to
|
Hydration and suspended error recovery can alter already-correct DOM, trigger resource loads, suppress application scrolling, or render retained subscribers against stale props. This ports the fixes with standalone regressions using public React APIs.
scrollTowrapper so the application owns scroll restoration.Validation
The original hydration/Suspense baseline passed the full local CI gate and 14 Chromium regressions. That evidence predates the noscript follow-up and is not a claim that the latest commit has completed every check. Shared-contract cases were checked against React, and the measurement report identifies Redact-specific policies excluded from that control.
For the noscript follow-up, CI run 38592959191 passed 1,653 unit tests, TypeScript, and build/export verification, then stopped at the size gate before Chromium ran. Local runtime tests were not rerun. The follow-up updates only exceeded ceilings to CI-measured maxima, with no added margin. The added regressions cover raw-text fallback retention, neighboring button identity and interactions, and skipping fallback components on client mount/update. The latest CI run is the remaining validation gate.
The full size table and reproduction commands are in
benchmarks/HYDRATION_SUSPENSE_RECOVERY.md. The original baseline measured built combined client 28,060 to 28,634 gzip bytes and default Vite client 23,232 to 23,814. Follow-up CI measured built combined client at 28,668 bytes, 34 bytes over its previous ceiling, and default Vite client at 23,768, within its existing ceiling. This is a correctness cost, not a performance improvement claim.Includes a patch changeset. No generated bundles or source maps are committed.
Summary by CodeRabbit
noscriptcontent unchanged.