From 8eedb150c584f92a5de388c76fb217e251c2bb01 Mon Sep 17 00:00:00 2001 From: Paul Bakaus Date: Sun, 21 Jun 2026 22:01:17 +0900 Subject: [PATCH] Fix React hydration mismatch from live pick-cursor class on SSR roots (#286) * Fix React hydration mismatch from live pick-cursor class on SSR roots Entering pick mode toggled a `impeccable-live-pick-cursor` class on `document.documentElement` (and the insert-axis cursor wrote an inline `style.cursor` on it). ``/`` are server-rendered by frameworks like Next.js App Router, so a client-only attribute the server HTML never emitted makes React 19 log "a tree hydrated but some attributes of the server rendered HTML didn't match" on the next Fast-Refresh re-render. It surfaced as a console.error that flaked the nextjs-app-router live-e2e fixture's expectConsoleClean probe. This is the same root-cause class as the scroll-anchor lock fixed in #276 (client mutation of a hydrated SSR root), but a separate offender that fix did not cover. Apply the same shape: drive the pick / insert cursor entirely through the textContent of one injected `