Tags: Zingzy/cmux
Tags
Lawrence Sidebar: down-then-up highlight, optimistic-paint reconcile,… … diagnosis probes (manaflow-ai#8461) * Round 3 colleague dogfood fixes: PR status truncation, nesting indent, multi-select flush, reorder moves, override-release notes, selected-row status color - PR rows rendered 'PR manaflow-ai#4 o…' with ample space: intrinsicContentSize on a truncating single-line NSTextField caps at the CURRENT frame width, so a pooled label laid out narrow once reports the truncated width forever. New sidebarNaturalCellSize measures through the cell unconstrained; applied to PR status/title, remote status, group badge pill, and progress label. - Nesting was invisible: legacy applies the group-member indent outside the row so the selection/hover background shifts with the content; the AppKit cell now indents its background the same way. - 'Click A, cmd-click B' extended the pre-A selection: the modifier branch dropped a plain click still inside the coalescing window. SidebarSelectionCoalescer.flushNow() applies it first (tests added). - Drag-reorder janked: a pure reorder went through reloadData, tearing down every visible cell and snapping scroll. Same-id-set order changes now apply as in-place moveRow updates. - Row clipping class: releasing pumpHeightOverrides never re-noted the rows, leaving the table on the override height while the cache served the measured one; both clear sites now note released rows. Height- drift DEBUG probe added (rect(ofRow:) minus intercellSpacing). - Agent-status line was blue-on-blue when selected: explicit entry colors now yield to the selected foreground (legacy parity). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * Reconcile stranded selection previews; dim cmd-click preview; regenerate webviews bundle Two interaction bugs from Aziz's videos: - Reorder/selection interference: optimistic previews are only reconciled by an authoritative apply, and some presses never produce one (a drag dropped where it started, a press swallowed by the drag threshold, an unchanged selection). The stranded peel left the sidebar with NO visible selection. previewSelection now arms a 400ms clock-injected bailout that restores stored-model paint unless an apply lands first; apply() and drag-begin cancel it. - cmd-click flash: the modifier preview painted the full bright active treatment and settled to the dim multi-select tint. It now previews the dim tint directly (showOptimisticMultiSelection). Heal main: manaflow-ai#8393 changed webviews/ sources without regenerating the checked-in bundle, failing react-apps-check on every gate. Regenerated with ./scripts/build-webviews-app.sh. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * Address review: bound the reorder move planner, multiset id equality CodeRabbit: the move loop's firstIndex/remove/insert rescans trend quadratic on bulk permutations; a positional-mismatch threshold (32) keeps user drags on the animated move path (one contiguous span, O(n)) and routes bulk permutations to reloadData, which they gained nothing from animating anyway. Greptile: Set equality collapsed duplicate ids, so corrupt state with two rows sharing an id could misclassify as a pure reorder; replaced with counting multiset equality. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * Reconcile optimistic paint on every apply; read modifiers from the clicking event Found while adversarially driving the sidebar for the verification video: synthetic cmd-clicks carry the command flag on the EVENT while the hardware state stays plain, and the resulting preview/authoritative divergence exposed a class hole — apply() cancels the preview bailout on arrival but only reconfigures rows whose model changed, so a preview painted on a row whose authoritative state ends up unchanged kept its speculative paint forever (dim multi-select tints lingering through any number of plain clicks). apply() now force-reconciles every optimistically painted row id. Also didClickTableRow read the global NSEvent.modifierFlags (hardware state) instead of the clicking event's flags; NSApp.currentEvent is the action's triggering event, matching what previewSelection already saw. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * Down-then-up selection highlight; reflow + drop-resolution probes Owner ruling: the row highlight applies on down-then-up, not on press. The optimistic paint moves from mouseDown to the table action (which fires on mouse-up), so a press that becomes a drag or a cancelled click never shows a speculative highlight — removing the last source of preview/authoritative divergence at the gesture level. DEBUG probes for the two open dogfood reports: sidebar.viewport + sidebar.liveReflow trace every width tick through the live re-measure (continuous-reflow regression), and sidebar.drop.perform records where each drop landed, target count, and the planner verdict (silent reorder no-ops). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * Respect the inline-rename field editor in tab-selection focus reassert Double-click rename died on every attempt: click 1's async workspace selection completes ~240ms later and converges AppKit focus through moveFocus, which gates only on the right-sidebar coordinator and then calls makeFirstResponder directly — stealing the field editor the rename took at doubleAction time (probes: beginInlineRename tookFocus=1 followed by ensureFocus intent=terminal from ws.select.asyncDone, typed text landing in the terminal). moveFocus gains an opt-in respectForeignFirstResponder that applies the same policy check ensureFocus and applyFirstResponderIfNeeded already use; the tab-selection reassert opts in. Explicit focus-the-terminal callers (find escape, tmux mirror) keep stealing deliberately. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * Heal main Sendable warning; make reorder helpers private Sources/Mobile/MobileHostIrohApplicationLaneRouter.swift landed on main with 'Date.init' defaulting a @sendable () -> Date parameter — the initializer reference resolves as a non-Sendable function value and trips the Swift 6 data-race warning, failing the zero-bucket warning budget on every gate. A closure literal is Sendable. Also Greptile P2 on manaflow-ai#8461: multisetEqual/maxAnimatedReorderMoves have no external callers, now private. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> --------- Co-authored-by: cmux reload-cloud <cmux-reload-cloud@users.noreply.github.com> Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Bump version to 0.64.20 (manaflow-ai#8473) Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Bump version to 0.64.19 (manaflow-ai#8078) Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Bump version to 0.64.18 (manaflow-ai#8053) Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Bump version to 0.64.17 (manaflow-ai#6682) Changelog for 0.64.17: remote tmux -CC mirroring (beta), global font magnification, right-sidebar custom tabs, browser audio indicator + hard refresh, diff viewer branch-base picker, plus a large batch of stability, sidebar, session-restore, and performance fixes. Credits 12 contributors. Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
PreviousNext