Repository navigation
dogfood: record the modifier tour's hover steps as trees, not frames - #15845
Conversation
|
Navigate logical layers of code changes, visualize relationships, and explore their blast radius. No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Repository: manaflow-ai/cmux/.coderabbit.yaml Review profile: ASSERTIVE Plan: Advanced Run ID: 📒 Files selected for processing (1)
Included review availability: This review used your included allowance. Your plan provides up to 10 included reviews per hour; 0 remain after this review. 📝 WalkthroughWalkthroughThe plain-hover and command-hover steps in the modifier-clicks tour now capture tree snapshots instead of screenshots. Their snapshot names remain unchanged. ChangesModifier-clicks tour
Priority: ⬇️ Low Estimated code review effort: 1 (Trivial) | ~3 minutes Change: Refactor Merge Risk: ⚪ Minimal · up to The two hover steps now produce text accessibility-tree attachments instead of screenshots while retaining their names. No actionable breakage is established; the change is mergeable subject to normal checks. Architecture SummaryArchitecture risk: 🔵 Low · up to The change affects 1 system. Changed systems: Architecture concerns Review detailsSystems and components
Before / after behavior
🚥 Pre-merge checks | ✅ 24 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (24 passed)
Full details: Description checkResolution Organize the existing explanation under the required template headings. Add explicit Testing commands and results, set Changelog to "none" because this is an internal-only change, state whether a demo is not applicable or attach one, and complete the applicable checklist items.
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
|
All contributors have signed the CLA ✍️ ✅ |
The modifier tour shot a plain-hover and a cmd-hover frame of the same cell. No tour frame can show the difference those two are named for, for a structural reason: `holding()` wraps only its own step in `XCUIElement.perform(withKeyModifiers:)`, and the `wait` and `shot` that follow are separate steps. Command is already released when the capture happens, `flagsChanged` forwards that release to Ghostty, and the link highlight goes with it. That covers both affordances on this path. `GHOSTTY_ACTION_MOUSE_OVER_LINK` raises `TerminalLinkHoverIndicatorView`, a HUD badge in the terminal's bottom-leading corner, and its default `hover_mods` is `ctrlOrSuper`, so it is gone by capture time. A pointing-hand cursor is doubly invisible: neither `window.screenshot()` nor `XCUIScreen.main.screenshot()` draws the pointer at all. Measured on both pairs this tour has published rather than argued. At `60656d76`, 3354 pixels differ, 0.70% of the image, and all of it is the block cursor's blink phase plus a strip of macOS Dock icons that overlapped the window for one of the two captures, so a window shot is not even clean of other applications' chrome. At `15792/cf91daf7`, 30 pixels differ inside a single 9x16 cell, the same blinking cursor. No badge in any of the four frames. The cost of keeping them is not only a reader's time. `pick_key_shots` publishes at most four frames, so these two took half the slots a reviewer sees and pushed out frames of the click landing. Both hover steps stay and still exercise the hover path. Their record becomes a `tree`, which is the honest downgrade rather than a better home: a tree is captured after the same modifier release, so it does not hold the hover state either. This is media-noise cleanup. The affordance itself belongs in an XCTest that asserts the hover state directly, which is where #15259 already puts it. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
e3ce546 to
1c9906c
Compare
ReviewReview subagent on Fixed
Body and commit message both rewritten around the corrected reasoning. Confirmed, with the checks I would have wanted
Independent measurement The reviewer pulled a different published pair than I did, Left
|
Dogfood tours of
|
|
Dogfood evidence is published and I looked at both surviving frames.
Neither shows a hover badge or a changed cursor, which is what the two removed frames were supposed to show and never could. The GIF still renders from the two moving frames. Green at |
|
Merge receipt for |
ecba57a fix(sidebar): cut with an ellipsis character so a reference cannot re-parse (manaflow-ai#15893) 6d2b5d1 feat(terminal): browser-style navigation layout and a terminalAlternateScreen shortcut key (manaflow-ai#14863) 0d3fdb1 test: print the simulator pipe output when the EOF assertion fails (manaflow-ai#15857) 46fe41a Fix cloud dogfood pause link-down journey (manaflow-ai#15918) 7d246ed fix: open existing Cloud workspace rows optimistically (manaflow-ai#15747) 1b06f84 fix(agent-chat): show ACP paths and diffs for tool calls (manaflow-ai#15908) b413b7a fix(agent-chat): preserve earlier ACP plans during updates (manaflow-ai#15907) 8b75678 Persist Cloud display membership across clients (manaflow-ai#15748) 547340a fix(cloud): carry the machine author from /api/vm to the machine row's snapshot (manaflow-ai#15309) e30de3d test: probe cloud agent status in Cloud VM journey (manaflow-ai#15875) 296537c docs(agent-chat): correct provider claims and pin ACP argv (manaflow-ai#15901) e1dc959 Count the renamed Agent spawn tool as a subagent in the pi bridge (manaflow-ai#15865) 14fae18 dogfood: record the hover steps as trees, not frames (manaflow-ai#15845) 4da3bb3 fix(agent-chat): scope ACP plans to their turn and refresh activity (manaflow-ai#15898) 64ec56d feat(terminal): right-click a link to choose where it opens (manaflow-ai#15325) efb762c Make unsupported remote browser warning dismissible (manaflow-ai#15726) 666c77f Cloud Machines sidebar: add persistent create buttons (manaflow-ai#15680) # Conflicts: # .github/workflows/cloud-vm-dogfood.yml



The modifier tour shot a plain-hover and a cmd-hover frame of the same cell. No tour frame can show the difference those two are named for, and the reason is structural rather than about any one affordance.
holding()wraps only its own step inXCUIElement.perform(withKeyModifiers:)(cmuxUITests/DogfoodScenarioUITests.swift), and thewaitandshotthat follow are separate steps. Command is already released by the time the capture happens,flagsChangedforwards that release to Ghostty, and the link highlight goes with it.That covers both affordances on this path:
GHOSTTY_ACTION_MOUSE_OVER_LINKraisesTerminalLinkHoverIndicatorView, a HUD badge pinned to the terminal's bottom-leading corner. Its defaulthover_modsisctrlOrSuper, so it is gone by capture time. This is a genuine on-screen affordance, not a cursor, and it still cannot be photographed here.window.screenshot()norXCUIScreen.main.screenshot()draws the pointer at all.Measured, on both pairs this tour has published
60656d7615792/cf91daf7No badge in any of the four frames. Worth noting on its own: a
window.screenshot()image is not clean of other applications' chrome.Change
Both hover steps stay and still exercise the hover path. Their record becomes a
tree, which is an honest downgrade and not a better home: a tree is captured after the same modifier release, so it does not hold the hover state either. This is media-noise cleanup.pick_key_shotspublishes at most four frames, so the two deleted ones were taking half the slots a reviewer sees. Because this edits the tour's own file,select_toursruns this tour on this PR, so the new media is self-verifying.The affordance itself belongs in an XCTest asserting hover state directly, which is where #15259 already puts it.
This supersedes the reasoning I gave on #15421 and the first version of this description, both of which named the cursor as the only affordance and missed the badge.
Summary by CodeRabbit