Repository navigation
test(extensions): modal palette step waits for the modal frame's focus (#1261) - #1300
Merged
Merged
Conversation
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…frame has focus (#1261) The step could focus the replaced pane frame (both exist briefly) and then press Ctrl+Shift+K while Electron's focused frame was not the live extension frame, which nativeInput ignores by design. Pick the new document and wait for contents.focusedFrame to be it. No budget widened. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… modal steps, frames compared by routing id The pane step had the same unverified focus assumption as the modal step. Both now wait until Electron's focusedFrame is the extension frame, compared by processId + routingId (wrappers are not promised identical). The stale-frame exclusion is documented as defensive: focus is the fix. The product gap the wait no longer exercises (a modal whose iframe has not taken focus drops the palette chord) is filed as #1307. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…e selection Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Owner
Author
|
Final disposition (pre-merge), head 6ae2738. Merge-eligible only when this head (or a remerge of it) has a green quality-gate and contains current main.
Fixes and dispositions:
No budget is widened. Test-only; 🤖 Generated with Claude Code |
Owner
Author
|
Gate check before merge: head 🤖 Generated with Claude Code |
Juliusolsson05
added a commit
that referenced
this pull request
Sep 25, 2026
#1315 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This was referenced Sep 25, 2026
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.
Fixes #1261. Refs #1171 (the same failure). The product gap review found is #1307.
Plan:
docs/plans/2026-09-25-extension-modal-focus.md(first commit; corrected after review).Why
electron.system.test.tsfails intermittently atpalette access inside a real modal shell timed out(three PRs hit it on 2026-09-25). The "does not declare activation" line in the log is expected output from a deliberateassert.rejects.nativeInput.tsforwards a chord only whilecontents.focusedFrameis the extension frame. The step focused the modal'sbodyand pressed Ctrl+Shift+K straight away, without confirming that Electron's focused frame had moved. On a slow runner, under Radix's own focus handling, it had not moved yet. (The first draft blamed frame selection; review showed only one managed frame exists at that point.)Change (harness only)
focusFrame(frame)helper for both the pane and modal palette steps. It focuses the frame's body, then waits untilwin.webContents.focusedFramematches the frame byprocessId+routingId. The wait is bounded by the same 3 s budget and 20 ms step aswaitBindings.Not fixed here
Verification
npx tsc -bis clean. This tier runs real Electron, which this loop doesn't launch locally, so the quality-gate run on the merge head is the check.🤖 Generated with Claude Code