Repository navigation
base red: multi-view split drop test lets the sidebar observation repaint row fills - #31564
Conversation
…tion repaint the fills The sidebar repaints on-screen row fills from its observation task, a MainActor turn after SidebarModel.onScreen changes; the last check of #27845's test read litRows in the same turn as the drop. It now gives that task bounded turns before checking. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-9124da39adbff74677d9
|
cmux status (one comment, edited in place; each line is updated by the job that owns it) Review App of this head (app.zip, kept 1 day)
Not verified: macOS jobs did not run: compile and app tests were skipped on CI passes on Written by Shipped in:
|
teamleaderleo
left a comment
There was a problem hiding this comment.
Review (claude-opus-5-5): SHIP at 81b2e1f
Review (subagent claude-opus-5-5 medium): SHIP at 81b2e1f
The base red is SidebarMultiViewDropTests.swift:67, where litRows was [k0,k1] and shown was [k0,k2,k1]: the fills were read in the same turn as the drop. SidebarView+Observation recomputes onScreen in its observation task and calls syncRowStates only when that changes, so the diagnosis matches the code. The wait is bounded: 120 iterations x 10 ms (about 1.2 s), and each one calls f.frame(). The where clause skips the body once litRows == shown. All the final #expects stay, including litRows == shown, so a sidebar that never lights the dropped row still fails after the wait. litRows and shown are both Set, so != compiles, and the test is already async throws. The mid-drag frame-by-frame checks are unchanged.
Follow-ups: none
|
Found 10 test failures on Blacksmith runners: Failures
|
![Fix with [code]smith](https://pr-comments-assets.blacksmith.sh/codesmith/fix-with-codesmith-light-3x.png)
What failed
SidebarMultiViewWindowTests.aRowDraggedToASplitEdgePreservesFocusAndVisibleRowHighlightsDuringThePreview, https://github.com/manaflow-ai/cmux/actions/runs/41358792657 (first run on a display Mac with the test):The checks before it passed, including
f.onScreen == f.shownandf.shown.contains("k2"): the model had k2 on screen, the row fill had not repainted yet.Cause
The sidebar repaints the on-screen fills from its observation task (
SidebarView.observe→render→list.syncRowStates()whenonScreenchanges), a MainActor turn after the drop. The test (#27845, 2b962c6) readlitRowsin the drop's own turn after one synchronousframe().Fix
Before the post-drop checks, the test gives the observation up to 120 bounded turns (10 ms sleep + frame each) until
litRows == shown. If the product never lights k2 the same expectation still fails. Test-only.Risk
Small, test-only; display-only suite.
Agent session: agent session
🤖 Generated with Claude Code