Hydration Validation
Hydration validation must follow the route policy. A default full route and a hydration: "none" route are both valid, but their expected browser signals are intentionally different.
Run the right check
For this repository's documentation contract, run:
This command checks documentation consistency only; it does not start an application or prove browser behavior. For an application, use its supported build, start, and browser-test flow to visit one full route and one none route. Do not rely on a repository-internal consumer command.
Default full route
A production smoke for the default policy should check:
- the page returns SSR HTML
- JS, CSS, and other assets return 2xx
- there are no browser console or page errors
- route-specific
modulepreloadexists - the marker reaches
data-vext-hydration="done" - a Performance entry named
vext:hydrationexists size-report.jsoncontains route metrics whenfrontend.build.diagnostics.performanceReportis enabled
hydration: "none" route
A none page should instead check:
- the page still returns SSR HTML, CSS, and SEO metadata
- the root is marked
data-vext-hydration="none" - no Vext browser entry,
__VEXT_DATA__, ordata-vext-route-preloadis emitted - normal
<a>links and normal HTML<form>elements use normal document navigation or submission - the test does not expect the
donemarker, thevext:hydrationPerformance entry, React events, Vext Form, fetcher, or framework-managed client navigation
Runtime Signals
Expected client-side signals for the default policy:
For hydration: "none", the intentional signal is:
These are intended for tests and diagnostics. They should stay quiet in production logs.