ui(sync): remediation pass on Sync tab redesign stack#968
Merged
kunickiaj merged 5 commits intoApr 24, 2026
Conversation
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 3939b10a8b
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
…self-probe false-stopped
…ff and first refresh
The sync diagnostics sub-view sent includeDiagnostics=1, which flipped
getSemanticIndexDiagnostics into a per-memory chunk-coverage check that
runs a vec0 probe for every active memory on the Node main thread. On
a dogfood DB this stalled the event loop for seconds and caused every
concurrent HTTP request to queue behind it — the viewer answered once
then went silent.
Force the sync status endpoint onto the existing fast COUNT(DISTINCT)
join, regardless of diagnostics mode. The deep per-chunk verifier is
still reachable via an explicit { fastCounts: false } opt-in for
non-request-path tooling; nothing in prod sets it today.
… groups panel Before: group cards rendered inside an unstyled .coordinator-admin-request-list with no gap, using the paddingless .peer-card (which Sync device rows use) so all card contents bled to the card edge. The scope-defaults drawer was a raw conditional sibling render with a button-label swap, no aria-expanded, and the drawer's top border bled to the card edge. - Wrap the visible group cards in .peer-list (already a 1fr grid with gap). - Add .peer-card--padded variant so generic content cards get interior padding without regressing the Sync tab's device-row (paddingless by design — row-head owns its own chrome). - Replace the Scope defaults label swap with a Radix Collapsible: the action button is the Trigger (with data-state / aria-expanded / aria-controls + a chevron that rotates on open), and Collapsible.Content hosts the drawer using the existing .coordinator-admin-group-preferences chrome. Inline SVG chevron mirrors the one in sync-peers.tsx. - Drop the .coordinator-admin-group-preferences wrapper div from the editor body so the class lives on exactly one node (the Collapsible host), and remove its now-redundant margin-top.
Owner
Author
This was referenced Apr 24, 2026
kunickiaj
added a commit
that referenced
this pull request
Apr 24, 2026
With sync redaction enabled (the default), /api/sync/pairing returns
{ redacted: true, pairing_filter_hint: ... } with no device_id,
fingerprint, public_key, or addresses. Previously the UI happily turned
that into a base64-encoded 'codemem sync pair --accept-file -' command
that deterministically fails in the CLI accept path.
Detect redacted: true explicitly and show the state to the user instead
of a broken copyable command. The outer 'Show pairing command'
disclosure still gates user exposure; this only kicks in when the
SERVER redacted the response, which can't be avoided from the UI
without flipping includeDiagnostics=1.
Addresses Codex review feedback on #968.
Owner
Author
Merge activity
|
kunickiaj
added a commit
that referenced
this pull request
Apr 24, 2026
With sync redaction enabled (the default), /api/sync/pairing returns
{ redacted: true, pairing_filter_hint: ... } with no device_id,
fingerprint, public_key, or addresses. Previously the UI happily turned
that into a base64-encoded 'codemem sync pair --accept-file -' command
that deterministically fails in the CLI accept path.
Detect redacted: true explicitly and show the state to the user instead
of a broken copyable command. The outer 'Show pairing command'
disclosure still gates user exposure; this only kicks in when the
SERVER redacted the response, which can't be avoided from the UI
without flipping includeDiagnostics=1.
Addresses Codex review feedback on #968.
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.

Description
Dogfood of the merged Sync tab redesign (PRs #963-#967) surfaced five real
issues. Fixing them together since they're all the same "Sync tab polish"
story.
inside a narrow sidebar column while the other row sat empty. Switched
to single-column full-width rows; outer border/radius/background now
live on
.peer-card, the row head is transparent content, and thedrawer has a
border-topseparator inside the same card.causing the chevron to wrap to a second line. Switched to flex;
.device-row-toggle { margin-left: auto }keeps the toggle right-edgeregardless of which middle children render.
<button>with a unicode ▸/▾that was nearly invisible against
--surface-1. Replaced with RadixCollapsible (
@radix-ui/react-collapsible, already installed) + aproperly sized inline Lucide chevron SVG that rotates on
data-state="open".Radix gives us correct
aria-expanded/aria-controlswiring andkeyboard handling for free. Module-level
expandedPeerIdstillenforces single-open-at-a-time;
handleOpenChangereads the livemodule state (not a stale closure) so one row taking over doesn't
clobber the new pointer.
View diagnostics →and← Back to synchad different styles.Collapsed into one
.sync-subview-linkclass used for bothdirections — utility-nav treatment, quieter than any nearby button.
work is offlinesurfaced as a Needs Attention item. Computerspower-cycle; the row already carries the Offline badge + pip. Dropped
the
peerStatus === "offline"branch fromsync-view-model.ts'sattention-item derivation. Auth/trust/repair failures still fire.
revealed a card that just said "Pairing payload hidden" unless
diagnostics were on). The payload is a local command shared with your
own other device, not a secret. The outer disclosure is enough
gating; removed the redaction branch in
diagnostics/helpers.ts.redesign's
#syncMainView/#syncDiagnosticsViewwrappers brokethe
.tab-panelflex-gap inheritance; restored the same gap insideeach sub-view wrapper.
Type of Change
Testing
chevron that rotates 90° on open; expand/collapse one row cleanly
stacks in a single column; View diagnostics / Back to sync read as
the same utility link; offline peer no longer shows up in Needs
attention; "Show pairing command" reveals the command directly.