Skip to content

Fix dynamic project card UIA bounds gate - #932

Merged
coneilen merged 1 commit into
mainfrom
coneilen-fix-dynamic-card-uia-bounds
Oct 26, 2026
Merged

coneilen merged 1 commit into
mainfrom
coneilen-fix-dynamic-card-uia-bounds

Conversation

@coneilen

@coneilen coneilen commented Oct 26, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

Fix the Windows live UIA gate's DPI192 dynamic-project-card cutoff without changing accessibility provider or #778 context-menu product behavior. The gate now normalizes the project canvas through the existing Fit Canvas action, reacquires the live graph, and freezes one exact card property batch before validating geometry.

Changes

  • Add a strict frozen card-snapshot decision that requires the project surface, exact identities and order, owned process IDs, positive non-overlapping bounds, and graph viewport intersection.
  • Add DPI192 coverage for the identity-present empty-bounds reproduction plus missing, foreign, duplicate, wrong-order, wrong-surface, outside-viewport, and overlap negatives.
  • Reacquire the graph after bounded Fit Canvas normalization and emit UIA_DYNAMIC_PROJECT_CARD_EVIDENCE from cached ID/name/PID/bounds values.
  • Keep the later whole-graph child roster unchanged so unrelated generic canvas-card-* provider children and unexpected graph children are still rejected.
  • Rebase patch-identically onto origin/main at 366f11f6; stable patch ID remains 6d52261eca9cbd4a8b701a3128b3e3ba9858e545.

Test plan

RED: pwsh -NoProfile -File Tools\windows\Tests\ValidationRunner.Tests.ps1 -> RED: dynamic project cards are not frozen after bounded Fit Canvas normalization and reacquisition
GREEN: pwsh -NoProfile -File Tools\windows\Tests\ValidationRunner.Tests.ps1 -> UiScenario 166/166 and UiCaptureDriver 182/182 passed
REGRESSION: pwsh -NoProfile -File Tools\windows\validate.ps1 -Task hardening -> repeated-runs PASS 3/3

  • Focused post-rebase dynamic-card contract -> FOCUSED_DYNAMIC_PROJECT_CARD_CONTRACT=PASS positive=1 negatives=8 dpi=192.
  • pwsh -NoProfile -File Tools\windows\uia-live-gate.ps1 -Shell graphcode-windows\zig-out\bin\graphcode-windows.exe -Zmx D:\gcp-24cd\zmx\zig-out\bin\zmx.exe -> dynamic cards passed on the first frozen DPI192 snapshot with exact identities, non-overlap, and viewport intersection; the gate advanced through composite navigation and preserved the later unrelated dragging from the connector to the target card did not open the Create or edit edge dialog cutoff before Windows parity: Context menus carry the macOS item set and grouping #778 context-menu coverage.
  • PowerShell parser checks for Tools\windows\uia-live-gate.ps1 and Tools\windows\Tests\ValidationRunner.Tests.ps1 -> passed.
  • git diff --check, stable patch-ID comparison, and LF checks for both changed files -> passed.
  • Post-rebase head validated locally: f306161a9ae8018cf1e4efdd75eb8a5bcfbea7f8.

Checklist

  • I have read the Contributing Guidelines
  • I have signed off my commits (git commit -s) per the DCO
  • Tests pass locally (make test)
  • Code follows the existing style (make check)
  • I added the test/contract before the implementation and observed the intended RED failure

Normalize and reacquire the project canvas before freezing exact card geometry at high DPI, while preserving strict identity, ordering, ownership, overlap, and viewport checks.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Signed-off-by: Colin Neilens <coneilen@microsoft.com>
@coneilen
coneilen force-pushed the coneilen-fix-dynamic-card-uia-bounds branch from dff22f9 to f306161 Compare October 26, 2026 12:54
@coneilen
coneilen merged commit e903c2b into main Oct 26, 2026
26 checks passed
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.

1 participant