Skip to content

Fix Windows UIA contract parity - #421

Merged
coneilen merged 2 commits into
mainfrom
coneilen-microsoft-fix-uia-contract-parity
Sep 23, 2026
Merged

coneilen merged 2 commits into
mainfrom
coneilen-microsoft-fix-uia-contract-parity

Conversation

@coneilen

@coneilen coneilen commented Sep 23, 2026

Copy link
Copy Markdown
Collaborator

Summary

  • expose the rendered Workspace lifecycle menu in the native UIA provider, including New, Rename, Delete, and workspace-switch-* children
  • align Accessibility.defaultContract() with the native fixed element table and replace index-based assertions with id lookups
  • add a pinned-Zig CI test that requires the Zig and native fixed id sets to match in both directions
  • extend the live UIA gate to traverse the Workspace menu in RawView and ControlView and verify lifecycle names and InvokePattern support

Closes #417.

Evidence

RED: mutate native workspace-new id -> default contract ids match the native fixed element table fails and names missing workspace-new
RED: add native-only native-only-mutated id -> the same test fails and names the unmatched native id
GREEN: restore both mutations -> Zig 0.15.2 accessibility tests, full Windows build, and native UIA live gate pass
REGRESSION: pinned Windows shell contract suite -> 100 tests pass and reports Windows shell scaffold contract: PASS

Additional validation:

  • zig build -Dwinghostty-dir=D:\depot\Winghostty-pinned with Zig 0.15.2
  • Tools\windows\uia-live-gate.ps1 against the built shell and pinned zmx provider
  • full Tools\windows\validate.ps1 -Task windows-shell -SkipTrayLive was attempted, but its prerequisite Swift release build failed before Windows validation with missing _complex and ucrt modules in the local Swift environment

The parity matrix remains Partial because terminal ITextProvider, daemon-to-model UIA integration, and remaining dialogs still lack complete end-to-end evidence.

coneilen and others added 2 commits September 22, 2026 17:29
Expose workspace lifecycle controls through the native provider, keep the Zig contract aligned with the fixed table, and enforce the relationship in CI.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Signed-off-by: Colin Neilens <coneilen@microsoft.com>
Reject native fixed automation IDs that lack a corresponding Zig contract entry, including duplicate native IDs.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Signed-off-by: Colin Neilens <coneilen@microsoft.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Windows UIA: Accessibility.zig contract declares elements absent from the live AccessibilityProvider.cpp tree

1 participant