Repository navigation
Build shared Windows sheet framework - #911
Merged
Merged
Conversation
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Signed-off-by: Colin Neilens <coneilen@microsoft.com>
Signed-off-by: Colin Neilens <coneilen@microsoft.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Signed-off-by: Colin Neilens <coneilen@microsoft.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Signed-off-by: Colin Neilens <coneilen@microsoft.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Signed-off-by: Colin Neilens <coneilen@microsoft.com>
Signed-off-by: Colin Neilens <coneilen@microsoft.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Signed-off-by: Colin Neilens <coneilen@microsoft.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Signed-off-by: Colin Neilens <coneilen@microsoft.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Signed-off-by: Colin Neilens <coneilen@microsoft.com>
Signed-off-by: Colin Neilens <coneilen@microsoft.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Signed-off-by: Colin Neilens <coneilen@microsoft.com>
Signed-off-by: Colin Neilens <coneilen@microsoft.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Signed-off-by: Colin Neilens <coneilen@microsoft.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Signed-off-by: Colin Neilens <coneilen@microsoft.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Signed-off-by: Colin Neilens <coneilen@microsoft.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Signed-off-by: Colin Neilens <coneilen@microsoft.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Signed-off-by: Colin Neilens <coneilen@microsoft.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Signed-off-by: Colin Neilens <coneilen@microsoft.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Signed-off-by: Colin Neilens <coneilen@microsoft.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Signed-off-by: Colin Neilens <coneilen@microsoft.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Signed-off-by: Colin Neilens <coneilen@microsoft.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Signed-off-by: Colin Neilens <coneilen@microsoft.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Signed-off-by: Colin Neilens <coneilen@microsoft.com>
coneilen
marked this pull request as ready for review
October 21, 2026 22:26
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.
Summary
Replace the independent captioned Windows modal implementations with one owner-bounded dark sheet framework that sizes from content, scrolls only overflowing content above a fixed footer, and preserves native input and automation behavior. Refs #768.
Changes
SheetFramework.zigfor rounded owner-client sheets, dimming scrims, DPI-aware content/footer geometry, overflow scrolling, measured multi-row footers, dark native painting, focus rings, default actions, and modal lifecycle cleanup.mainthrough Add DPI-parametric matched capture harness #907, Clean stale Windows update rollback backups #908, Keep Windows sidebar usable at narrow widths #909, and Finish Windows workspace chrome parity #910 with signed non-force merges. TheApp.zigdelta remains limited to Rename, Delete Loop, recoverable workspace confirmation, and the existing confirmation test.Test plan
RED: & $env:GRAPHCODE_ZIG0152 test src\NativeForms.zig -target x86_64-windows-msvc -lc -luser32 -lgdi32 "-I$env:GRAPHCODE_WINGHOSTTY_ROOT\include" --test-filter "dialog framework:" --cache-dir C:\gcs\df768\cache\native-red --global-cache-dir C:\gcs\df768\zig-global -> 5 executed, 5 failed: fixed promotion height, 92-unit policy extent, host-owned scrolling, enabled invalid primary, and transparent static brush.
GREEN: & $env:GRAPHCODE_ZIG0152 test src\NativeForms.zig -target x86_64-windows-msvc -lc -luser32 -lgdi32 "-I$env:GRAPHCODE_WINGHOSTTY_ROOT\include" --cache-dir C:\gcs\df768\cache\pr-final-native-focused --global-cache-dir C:\gcs\df768\zig-global -> All 342 tests passed on the latest-main merged source, including default/focused footer action routing.
REGRESSION: pwsh -NoProfile -File Tools\windows\Tests\ValidationRunner.Tests.ps1 -> PASS: Pester 14 executed, UI scenarios 166/166, UI capture driver 181/181 on the latest-main merged head.
SheetFramework.zigNativeForms.zigWindowsNativeDialogs.zigGraphContextMenu.zigWindowsProductSettings.zigWorkspaceManagerForm.zig --test-filter "workspace manager"WindowsRepositoryDialogs.zigWindowsCodespaceDialog.zigUpdateOfferDialog.zigUpdateInstallDialog.zigPowerShell parse checks passed for
ValidationRunner.Tests.ps1,WindowsShell.Tests.ps1, anduia-live-gate.ps1.zig fmt --checkpassed for the changed Zig roots other than the pre-existing non-canonical fullApp.zig; its 11 diff hunks were checked directly against the approved functions.git diff --check origin/main...HEAD, signed-commit checks, clean-worktree checks, and committed-blob LF checks passed for all 16 changed files.The full App test command initially could not run because the owned tool root did not contain the two prepared static libraries. A no-emit pinned App compile of
App.zig,AccessibilityProvider.cpp,FilePicker.c, andFolderPicker.cwith the production target/includes/link declarations and--test-filter "workspace delete confirmation"exited 0 after fixing the detected local-title shadowing. This is compile evidence, not an executed App test.The hosted unit partition commands were also exercised locally after the CI fixes: shard 1 passed all 16 assigned sections and shard 2 passed all 22 assigned sections. Shard 0 was not rerun in the final owned environment because its prepared Winghostty static library was absent; the workflow prepares that artifact before exact-head execution.
The retained RED logs are under
C:\gcs\df768\evidence\red; GREEN/regression and review-fix logs are underC:\gcs\df768\evidence\green,review-fixes,review-fixes-2,review-fixes-3, andpr-final. Initial standalone updater test invocations that omitted-lgdi32failed at link time and are retained separately; corrected established commands passed.Independent review found and verified fixes for title loss, nested Tab traversal, covered scrollbars, DPI/scrim drift, measured footer labels and return hints, async modal closure, field-read failure closure, updater default actions, stale DPI fonts, stale enabled states, narrow-owner footer clipping, NativeForms Enter/focused-button routing, owner-focus restoration, palette inventory, and fail-closed unknown control routing. The final review reported no significant remaining issues.
After a hosted integration job hung after repository ingress, cross-process
WM_COMMANDsends were bounded withSendMessageTimeoutW(SMTO_BLOCK | SMTO_ABORTIFHUNG, 5000 ms) and the Clone/Add SSH transitions gained before/after attribution markers. Captionless NativeForms discovery now uses the same owned-sheet class/title path rather than desktopControlType.Windowenumeration. A session-owned production probe drove Clone, Add SSH, Create/Edit Edge, Project Settings, and Worktrees through real owned host discovery, UIA descendant enumeration, invalid validation where applicable, and clean close/transition; all five completed. ValidationRunner rejects dead-call and reordered-marker mutants, then passed its complete 181-case capture-driver suite.The final stacked-sheet regression first failed behaviorally with
expected 6192, found 2:IsDialogMessageWtranslated Escape intoWM_COMMAND IDCANCEL, while Product Settings uses footer cancel ID 6192. The shared host now redirects only dialog-managerIDCANCELcommands with no control source to the configured nonstandard cancel-role action; standard ID 2, sheets without cancel actions, unrelated commands, and direct control activation remain unchanged. A focused real-product probe opened Product Settings above Update Offer, closed only Product Settings with Escape, re-enabled the shell owner, and preserved the same visible captionlessGraphCodeUpdateOfferhandle, owner, title, and content class. The final focused source mutants reject optional/missing underlying Update sheets and unconditional owned-sheet returns. Full ValidationRunner then passed Pester 14 and UiCaptureDriver 181/181.Not verified: the complete live UIA gate after the repository scenes, real rendered 100/150/200% DPI, mixed-monitor hardware, physical keyboard input, screen-reader behavior, application/daemon/zmx persistence, or paired current Windows/macOS screenshots. No screenshot/capture lease was used. These remaining runtime and visual claims are explicitly unverified rather than inferred from hidden native-window tests.
Checklist
git commit -s) per the DCOmake test)make check)