Repository navigation
fix: qualify Windows activation and Win32 secondary content windows - #4498
Open
Jason Morse (JasonVMo) wants to merge 16 commits into
Open
Jason Morse (JasonVMo) wants to merge 16 commits into
Jason Morse (JasonVMo) wants to merge 16 commits into
Conversation
Part of #4441 and #4435. Record the 505a218 Windows Fabric / Win32 Paper qualification baseline, physical MCP request/response costs, per-case results, and explicit not-run reasons. Keep semantic activation and unregistered tool-window findings open while their fixes continue on this branch. Validation passed: - yarn markdown-link-check -c .github\markdown-link-check-config.json packages\agentic\desktop-driver\references\current-status.md - yarn markdown-link-check -c .github\markdown-link-check-config.json packages\agentic\desktop-driver-mcp\references\current-status.md - yarn markdown-link-check -c .github\markdown-link-check-config.json packages\agentic\desktop-test\references\current-status.md - yarn markdown-link-check -c .github\markdown-link-check-config.json packages\agentic\storybook-desktop\references\current-status.md - yarn markdown-link-check -c .github\markdown-link-check-config.json packages\agentic\storybook-desktop\references\README.md - yarn markdown-link-check -c .github\markdown-link-check-config.json .changeset\windows-connected-session-qualification.md - yarn oxfmt --check - yarn change:check (patch changeset added after the initial required-changeset failure) - yarn check-agent-instructions No desktop runs for this documentation-only update; full buildci not run. No push or PR. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 3be5f341-831b-40d4-9582-337c8ea65709
Refuse legacy-only UIA activation before dispatch and preserve public native failure metadata without delivery, quarantine, or implicit physical fallback. Admit untitled tool popups only with verified lease ownership, exact native identity, and bounded UIA content; retain conservative global discovery. Add native red/green fixtures and stable legacy Callout command identities. Record qualified Fabric/Paper results and the remaining session-blocked runs. Part of #4441 Part of #4435 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 3be5f341-831b-40d4-9582-337c8ea65709
Record the implementation commit, committed changeset validation, clean process audit, and explicit remaining native qualification gates. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 3be5f341-831b-40d4-9582-337c8ea65709
Use verified lease/process/thread/class identity and native ownership checks for admitted popups instead of probing their content again. Share one 1000 ms discovery deadline across new candidates, bound UIA waits by its remaining time, and retry candidates left unproved without dropping registered windows. Include admitted popups in publication diagnostics. Add failed-probe and shared-deadline native self-tests, hung-provider fixture regressions, and matching protocol/README/evidence notes. Native execution stays session-gated; the helper-only build and portable checks passed. Part of #4441 Part of #4435 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 3be5f341-831b-40d4-9582-337c8ea65709
Record the review-fix commit, committed patch validation, clean audit, and remaining session-gated native checks without claiming runtime qualification. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 3be5f341-831b-40d4-9582-337c8ea65709
Record the unchanged-source 178-task aggregate pass, reproduced baseline timing failures, owned-process drain, and remaining native qualification. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 3be5f341-831b-40d4-9582-337c8ea65709
Contributor
Bundle size reportTree-shaken, minified production esbuild bundles with React and React Native runtimes externalized.
The job is advisory: size changes are reported but do not fail the pull request. Bundle or analysis errors still fail. |
Read a live session window tree without activation, preserve unknown-window failures, and keep macOS and non-native behavior unchanged. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 3be5f341-831b-40d4-9582-337c8ea65709
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 3be5f341-831b-40d4-9582-337c8ea65709
Ignore only no-such-window tree reads and recheck live membership before reporting unexpected roots. Keep provider errors and persistent unexpected windows failing closed. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 3be5f341-831b-40d4-9582-337c8ea65709
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 3be5f341-831b-40d4-9582-337c8ea65709
Omit only a no-such-window geometry failure whose native handle is already closed. Preserve errors for live handles and unrelated failures. Cover the enumeration-to-serialization race with a deterministic native self-test. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 3be5f341-831b-40d4-9582-337c8ea65709
Keep prior-helper real-app passes separate from the new close-race helper. Preserve the failed sweep, deterministic red/green, six passing fixture replays, and remaining review and qualification gates. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 3be5f341-831b-40d4-9582-337c8ea65709
Record the 34-test native pass, final Fabric semantic and both secondary physical reruns, default-environment 178-task aggregate, exact helper identities, and clean campaign/drain audits. Retain the distinct historical failure and remaining display-topology limits. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 3be5f341-831b-40d4-9582-337c8ea65709
5 of 10 tasks
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 3be5f341-831b-40d4-9582-337c8ea65709
Vladimir Morozov (vmoroz)
approved these changes
Nov 13, 2026
Jason Morse (JasonVMo)
marked this pull request as ready for review
November 14, 2026 08:42
Jason Morse (JasonVMo)
enabled auto-merge (squash)
November 14, 2026 08:43
Contributor
Author
|
Copilot resolve the merge conflicts on this branch. |
…-windows-connected-session # Conflicts: # packages/agentic/desktop-driver-mcp/references/current-status.md # packages/agentic/desktop-driver/native/windows/src/application.cpp # packages/agentic/desktop-driver/references/current-status.md # packages/agentic/storybook-desktop/references/README.md # packages/agentic/storybook-desktop/references/current-status.md Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Contributor
Merged |
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.
Platforms Impacted
Description of changes
Part of #4441
Part of #4435
activation-unsupportedand effectnone. A nonempty MSAA default action andS_OKdid not prove that the React Native Pressable actually ran. Preserve Invoke, Toggle, SelectionItem, and ExpandCollapse paths; do not record delivery, quarantine, or retry physically on this refusal.no-such-windowfailure whose native handle is confirmed closed; errors for live handles and unrelated failures still propagate.GET /session/{id}/furn/window/{window-id}/treeroute andDesktopSessionClient.getWindowTree. Inspect a secondary without activating it or changing the selected window.no such windowas closed; re-list before reporting an empty or unrecognized root, so a closing menu is not a false assertion.Verification
Evidence boundaries
The final locally qualified source is
6c626602cf1eedd10425c8a63d794b1e12b1ff95. Evidence commit2d987a86f46451c104e01d417c63b4a7080c3f91adds only validated Windows evidence/tracking; publication86be8531e5c42bd33e7c46a400f0d40890cf2784only relocates the unchanged desktop-test Windows evidence to avoid an upstream append conflict. The implementation and review corrections received coordinator Opus reviews with no remaining findings.Native qualification ran on Windows 11 x64 in an active, unlocked remote RDP session, under the W3 campaign/machine lock and
-RequirePhysical. Session checks were eligible before and after every final run. This is not console-session evidence. App identity was checked before each run; Metro and bundles came from the W3 worktree. Apps, Metro, helpers, and fixtures were cleaned up between runs.Endpoint supervisor commands below are retained local qualification tooling under ignored
artifacts\desktop\w3-qualification, not newly published commands. Native suite commands ran frompackages\agentic\desktop-driverwithFURN_NATIVE_DRIVER_TEST=1; supervisor commands ran from the qualification worktree root.Keep helper generations separate:
505a2187b, helperd8ee05e4…: the clear/capture/fencing/MCP measurements below.29b67c2c…: 32 native contract passes and Fabric honest semantic-refusal checks.b47212dc…: Paper secondary registration/observation/semantic-refusal/retirement passed.eb91ef8a…, source89cc81fb…: first final native sweep had 33 passed / 1 failed / 2 skipped. The failure was reproduced and isolated to closure between enumeration and geometry serialization, not labeled a flake.e0e6fc988fc9214b91e02bd0909c099b203d4f9bfd89c45db8f8c9f9397a05e0, source7119f42fb101452990b7bea13daf685e90a67ad75840fba60968a5efe42f62d1: full native contracts and all requested final real-app reruns passed. The app supervisor used the source-verified cache with prebuilt-only policy.Final reviewed-source qualification
yarn test --runInBand operations.contract win32Fixture.contract nativeDriver --verboseartifacts\desktop\w3-buildci\final-native-contracts-fixed.log.node artifacts\desktop\w3-qualification\run-endpoint.mjs windows --secondary-only --modern-only --activation-diagnosticsnone, unchanged app state/receipts, no quarantine or implicit physical fallback. Run8f6d457c-c0d3-4ab5-9204-6dbf66383dbd.node artifacts\desktop\w3-qualification\run-endpoint.mjs windows --secondary-only --modern-only --physical-secondaryphysical-pointerclick, actual publicfocus: confirmed, then handle retirement. Run94c0b321-cebd-4e9b-99e2-3404bbbd80c3.node artifacts\desktop\w3-qualification\run-endpoint.mjs win32 --secondary-only --physical-secondaryphysical-pointerclick, then handle retirement. Runf46d008a-d310-4e6e-98fd-e85941879edd. The legacy story has no native-command outcome, so this is not proof of the RN focus command.cmd.exe /d /c "yarn clean-lage-cache && yarn lage buildci"(root, W3 machine lock, default TEMP/concurrency, native opt-in unset)artifacts\desktop\w3-buildci\final-buildci-fixed.log.The aggregate completed at 22:33:27 UTC on November 12, 2026. Its supervisor held the lock until owned descendants drained. Campaign and post-aggregate audits passed:
FURN-AUDIT: no FURN desktop processes found. No W3 native runtime or campaign remains.The close-race native test was confirmed red before the guard with
yarn test --runInBand nativeDriver --testNamePattern 'handshakes with the Windows helper'. After the guard,yarn test --runInBand nativeDriver win32Fixture.contract --testNamePattern 'handshakes with the Windows helper|registers only owned untitled tool roots'passed two native cases, with 26 unselected cases skipped. Six isolated real-fixture lifecycle replays also passed. The deterministic self-test additionally proves that live-handle errors and unrelated errors propagate, and direct commands for the omitted closed window still refuse.Historical qualification retained with its original boundaries
yarn test --runInBand nativeDriver win32Fixture operations.contractnode .\artifacts\desktop\w3-qualification\run-endpoint.mjs windowsnode .\artifacts\desktop\w3-qualification\run-endpoint.mjs win32node .\artifacts\desktop\w3-qualification\run-endpoint.mjs windows --secondary-only --modern-only --physical-secondaryfocus: confirmed, handle retirement. Run7fbe3b0b-df33-476b-80e3-95b97bf19f02.node .\artifacts\desktop\w3-qualification\run-endpoint.mjs win32 --fence-onlyref-region-changed; fresh unique native preview refusedstory-context-stale; both effect none, unchanged state, same chrome reference usable. Run60751352-c158-40a2-b4f9-9251e15fec95. Real provider retirement with socket/native UI preserved, not crash or network-reconnect proof.node .\artifacts\desktop\w3-qualification\run-endpoint.mjs windows --mcp-only --with-secondaryf188fae5-67c9-47e4-9800-ea584185fed9. The enclosing run's separate semantic-secondary assertion failed and remains recorded.node .\artifacts\desktop\w3-qualification\run-endpoint.mjs win32 --mcp-only6d474fd4-61cb-41f6-824e-7a80df68db45.yarn test --runInBand operations.contract win32Fixture.contract --testNamePattern 'nonactionable legacy|legacy-only|untitled tool roots'yarn test --runInBand operations.contract win32Fixture.contract nativeDrivernode artifacts\desktop\w3-qualification\run-endpoint.mjs windows --secondary-only --modern-only --activation-diagnosticsa583840b-7ad5-4691-9e60-f4f83d49fd48.node artifacts\desktop\w3-qualification\run-endpoint.mjs win32 --secondary-only --activation-diagnosticsactivation-unsupported/ effect none, retirement; main controls refused honestly. Run7edaa34a-fefd-4a8b-846b-dc8aa8c3880e.Nonempty semantic strict clear is matching-OS native self-test evidence. The live accessible RN clear case started empty; it is not claimed as nonempty semantic removal.
MCP SDK 1.32.2, tokenizer 4.1.0 /
o200k_base; six samples per endpoint. Discovery was 4,691 tokens / 20,277 bytes on each. RPC timing ends before tokenization and excludes startup/discovery.Counts describe independently encoded response text and separately serialized user-facing request JSON, not JSON-RPC wire or model-billing totals. Default observations and budgets were retained; no reduced scope or omitted observation is claimed.
Portable/build and review validation
yarn test --runInBand desktopDriver.test DesktopDriverClient.test(desktop-driver)yarn test --runInBand(desktop-driver, native opt-in unset)yarn workspace @fluentui-react-native/e2e-testing testyarn workspace @fluentui-react-native/e2e-testing buildandyarn workspace @fluentui-react-native/e2e-testing lintyarn test(native-core)yarn workspace @fluentui-react-native/desktop-driver formatyarn workspace @fluentui-react-native/desktop-driver lintyarn workspace @fluentui-react-native/desktop-driver buildyarn oxfmt --checkyarn markdown-link-check -c .github/markdown-link-check-config.json packages/agentic/desktop-test/references/current-status.mdyarn check-agent-instructionsgit merge-tree --write-tree HEAD origin/main86be8531e, fetched main041ac8b98. No branch/history merge was performed.git merge-tree --write-tree HEAD origin/user/jasonvmo/desktop-runner-handoffyarn markdown-link-check -c .github\markdown-link-check-config.json <changed-file>git diff --checkyarn change:checkquiet-menu-windows.mdandbrave-popup-listings.md.Earlier default-environment aggregate comparison remains separate: the unchanged
cad25f8c5retry passed all 178 tasks; the clean505a2187bbaseline reproduced the WDIO 7,000 ms deadline and server-stop readiness race. The final reviewed-source aggregate passed first attempt without any timeout, TEMP, concurrency, policy, or guidance workaround. Owned descendants drained before lock release.Hosted Windows/Win32 coverage
Current publication
86be8531e5c42bd33e7c46a400f0d40890cf2784is MERGEABLE. The coordinator-authorized evidence-only anchor move removes the conflict with main041ac8b98(#4490); the local integration-tree check exits 0. PR workflow43324722221PASSED on attempt 1, including every Windows/Win32 job, all macOS/iOS jobs, and aggregate PR job131567170196. CodeQL workflow43324722189PASSED. No hosted rerun was needed.131554190142FURN_NATIVE_DRIVER_TEST=1: 79 suites / 1,254 tests passed; two suites / 45 tests skipped, not passes. Logs explicitly passwin32Fixture.contract.test.ts,operations.contract.test.ts, andnativeDriver.test.ts, covering the changed fixture and self-test paths. Accessible Storybook smoke: 255/255 passed, zero retries/flakes.131554190022131554190330onPressOutafter Space with an intervening key. Zero failed, incomplete, retries or flakes; uses the changed Windows native provider.131554190353131554190412131554190166Downloaded Windows and Win32 physical doctor reports both say
ready: true, providerwindows, and source digest7119f42fb101452990b7bea13daf685e90a67ad75840fba60968a5efe42f62d1, exactly matching the final locally qualified helper source.The Win32 accessible channel also logged one non-failing authenticated bridge-epoch/missing-lease diagnostic. Its terminal report still records zero failed or incomplete work. The diagnostic's cause is unisolated; it is disclosed rather than claimed fixed or classified as a flake.
The branch was fetched and pulled with
--ff-onlybefore the successful push. Only one normal text-move commit was added; no merge, rebase, amend, force-push, workflow workaround, or rerun of an old-source job was attempted.The earlier workflow
43284991535exercised the earlier native helper in Windows Storybook job131415902791and Win32 physical Storybook job131415903272, but its Win32 legacy E2E job131415903355had ten false assertion failures (191/201 passed). Those historical jobs are not current-source qualification; the new-head results above qualify the corrections.Windows Storybook PRenables the full native package contract, which includes the changed fixture and self-test paths. Win32 jobs provision and use the same changed Windows native provider. Generic Storybook/E2E smokes are not by themselves proof of the separately registered physical secondary cases; those are qualified locally above. The hosted results and capability skips above come from actual job/step logs. No hosted rerun has been requested.NOT RUN / qualification limits
Idle; the Paper Callout was shown but absent from registered windows. Once admitted, menus could be mistaken for assertion dialogs, and closure could race tree reads or window geometry serialization.Pull request checklist
This PR has considered (when applicable):