Main coves client

fix(comments): thread reply-pagination cursors and harden subtree merge per multi-model review master

Address Section-2 second-opinion findings (6 reviewers, cursor bug unanimous): - store each node's repliesCursor and pass it on load-more, appending URI-deduplicated pages — previously the cursor was discarded and any comment with more than one page of direct replies refetched page 1 forever - merge subtree responses URI-keyed instead of last-write-wins so ancestor re-hydration preserves deeper branches loaded via nested load-more - deep replies skip the unsatisfiable top-level verify loop and retry the parent-subtree hydration instead; top-level retries use a quiet refresh (no full-list loading flicker); retry loop stops on dispose - vote state initializes only for newly fetched nodes (no optimistic revert) - loadMoreReplies contract: in-flight dedup returns the shared future, malformed URI throws, empty response clears hasMore, responses are anchor-validated and generation-guarded against refresh/sort races - FocusedThreadScreen: mounted guards after awaits, provider-authoritative anchor resolution with request sequencing, anchor-level load-more, retryable hydration-failure state, ValueKeys on stateful sibling cards - CommentView: tombstone invariant assert + isTombstoned getter; replaceDescendant preserves reference identity on miss - tests: focused-thread group unskipped (14 tests via shared test_helpers mocks), two-page cursor regression, deep-merge preservation, in-flight dedup, model tree-op units; stale smoke/router tests updated for the app-bar title and legal-gate providers Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>