fix(desktop/read): reconcile keep-cursor, AuthorNav watch, table grid nav, frame check (#322)#348
Merged
physercoe merged 1 commit intoJul 20, 2026
Conversation
… nav, frame check (physercoe#322)
physercoe
approved these changes
Jul 20, 2026
physercoe
left a comment
Owner
There was a problem hiding this comment.
APPROVE. Well-scoped #322 tail. The load-bearing uncontrolled-editor echo-loop rule is honored (lastEmitted set to the serialized output, not the incoming value → round-trip compares equal, no loop, no dropped write). AuthorNav watcher has stable deps + JSON-equality guard + path-keyed rows (expansion survives tree swaps); table grid-nav bounds correct with no focus trap; frame-check defaults to Ok(false) on unreachable so the iframe still gets its chance. Nits only (inline-append parses as new paragraph; per-nav GET; useNotesMode.pick not useCallback-d).
physercoe
pushed a commit
that referenced
this pull request
Jul 20, 2026
…ic-tail merges Since v0.3.79: - fix(terminal): tell xterm the pty is ConPTY on Windows so a repainting TUI's intermediate frames no longer pile up in the scrollback (2b26a16). - 8 epic-tail PRs merged: #341 terminal connect-phase + SSH split-duplicate, #342 PDF struct-tree a11y + annotation shortcuts, #343 token burn-down / plural / responsive, #344 PDF fit-page / rotation / hand-pan / ink, #345 perf (page memo, debounce, chart cap, sync dirty-tracking), #346 modal migration + dirty-close guards, #347 vault TOTP / ed25519 / coded errors, #348 read reconcile / AuthorNav / table nav / frame check. Co-Authored-By: Claude Opus 4.8 <[email protected]>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #322
The maintainer's recorded remaining tail of the ReadSurface bundled UX fixes (the god-file split stays deferred per the issue comments). All six items, no more.
What
onInsert(or PDF "+notes") used to full-document-replace the open editor. The Milkdown/Crepe editor now routes a pure append through one minimal ProseMirror end-of-document transaction (falls back toreplaceAllfor anything else); the CodeMirror source editor dispatches only the minimal changed span (common prefix/suffix trimmed). Selection is mapped across the change and undo stays granular in both.workspace_listevery 4s (skipped while the window is hidden) and swaps the tree only when it actually changed — expanded dirs keep their state since rows key by path.frame_checkcommand (reqwest, headers only; unreachable ⇒ not refused) and a refusal renders an actionable error with anopenExternalescape hatch.t()prop-drilling in PdfCanvas —AnnoEditorandAnnotationListcall the memoizeduseT()locally;PageViewloses its forward-onlytprop.MarkdownOutlinerail (was near-verbatim copies in MarkdownReader + NoteTab); oneuseNotesModehook for the persisted notes-mode state (was ReadSurface + NoteTab); one exportedCHART_PALETTEin ChartView (CompareSurface swatches now share it).Why
Each is a recorded remaining item in the #322 comments ( Milkdown reconcile keep-cursor, AuthorNav watcher, TableEditor grid nav, BrowserView refused-frame detection,
t()prop-drill, and the outline/notes-mode/palette dedups).How verified
npm run build(sync:tokens + tsc --noEmit + vite build) — green.scripts/lint-desktop-tokens.sh— clean (counts only decreased: the removed.browser-hintrule; new CSS uses semantic spacing tokens only).read.browserFrameHint→read.browserFrameRefusedswapped in BOTH en and zh (1171 = 1171 keys, no drift).frame_checkin lib.rs, registered in the invoke handler) is CI-verified only — no local toolchain; it reusesnet::client_builder+ existing reqwest/redirect/timeout idioms and was re-read for syntax/borrow correctness.