Prevent chat restore into reserved blank space - #143
Conversation
|
Two thorough review rounds complete on exact head |
|
Current-main integration pass complete on exact head |
|
Temporary merge-order hold: do not merge this exact head after #144 without updating it first. |
0d129c6 to
1736476
Compare
|
Post-revert reconciliation pushed as exact head |
|
Safety hold cleared on final exact head |
|
The hosted E2E run exposed five regressions in live scroll ownership: restoring the lifecycle invariant globally made the live reader path lose its fallback anchor while the viewport was inside the dynamic reservation. That broke follow/hold transitions and pin/spacer clamping. I rebased the repair onto the newer Local verification on the combined head
The exact browser E2E suite is not locally available here, so the new hosted E2E run is the remaining proof for the five previously failing cases. |
Thorough re-review — round 1/2 (exact
|
Thorough re-review — round 2/2 (persistence and race audit)The independent pass checked every persistence call site and the mode transitions around gestures, disclosure/layout changes, foreground return, chat exit, pagehide, and unmount. There is one durable write owner; invalid I also checked the combined newer-author fix for premature FOLLOW/PIN collapse: it composes correctly with the live spacer repair, and moving away from physical bottom now retires follow even when no real row intersects. No further change requested in round 2. Do not call this merge-ready until the exact-head hosted E2E run confirms the five previously failing scroll scenarios. |
|
Current exact review head is This final delta restores the owner-authoritative ARCHITECTURE R5a/R4a behavior for explicit question/paused attention nudges: the live one-shot action reaches the true physical tail and remains a settled The regression now asserts both halves directly (live physical target and safe persisted target). Exact local evidence: 71/71 focused scroll tests, full frontend library + 47/47 hook tests, production Vite/PWA build, and |
|
Final exact-head verdict for |
Summary
Why
A chat could be left while scrolled inside the blank space reserved for pinning a reply. The old controller persisted the last message with a very large negative offset because it always fell back to the final row even when no row intersected the viewport. Reopening then recreated the blank screen indefinitely.
Review coverage
Two local review passes traced mount restoration, chat exit, foreground return, nudge navigation, pin/follow transitions, spacer growth, viewport resize, and malformed/stale saved modes. The implementation fixes the existing scroll-mode ownership path rather than adding a parallel correction.
Validation
git diff --checkpasses