mirror of
https://github.com/pbakaus/impeccable.git
synced 2026-09-11 21:57:14 +03:00
* Fix React hydration mismatch from live scroll-lock on SSR roots The live overlay's startScrollLock disabled the browser's scroll anchoring by setting `overflow-anchor: none` as an inline style on `<html>` and `<body>`. On frameworks that server-render those roots (notably Next.js App Router), that client-only inline style desyncs from the server HTML, so React 19 logs "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 flaky failure of the nextjs-app-router live-e2e fixture's expectConsoleClean probe. Inject the suppression as a `<style>` rule keyed by a stable id instead of mutating inline styles on hydrated host elements. Same computed effect, but React no longer sees a client-only attribute on `<html>` / `<body>`. The rule is recreated on every startScrollLock and removed on teardown, so reload survival (driven by the persisted scroll key) is unchanged. Adds a regression guard pinning the new shape (no inline overflowAnchor mutation on html/body; injected <style> created and removed by id). Verified end-to-end: the nextjs-app-router live-e2e fixture now passes the expectConsoleClean probe deterministically. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Relax regression-guard regex spans to {0,400} Address Greptile review: the {0,200}/{0,220}/{0,160} character-span limits between the injected-style constructs were tight enough that an innocent refactor or added comment inside startScrollLock could silently break the shape-check. Widen each segment to {0,400}; the guard still passes on the fix and still fails when the inline html/body overflowAnchor mutation is reintroduced. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>