Skip to content

Windows parity: sidebar navigation structure - #817

Merged
coneilen merged 6 commits into
mainfrom
coneilen-microsoft-wave-2-sidebar-navigation
Oct 15, 2026
Merged

coneilen merged 6 commits into
mainfrom
coneilen-microsoft-wave-2-sidebar-navigation

Conversation

@coneilen

@coneilen coneilen commented Oct 14, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

Implements the approved sidebar navigation slice and its narrow review corrections: Graph and Quick Chats lead, followed by open local and remote project groups labelled Local Projects and Remote Repositories. Painted selection and UIA now follow the active route; the global Graph row has no project-specific context-menu target. The 517-DIP minimum-height expression is preserved, and worktree/Jump scrolling tails follow the shared row geometry. Needs-you and Worktrees are not claimed as normal-sidebar parity, and the recorded Activity bottom strip is not described as absent. Box 1 is targeted but not claimed closed until paired visual review. Refs #767.

Changes

  • Generate Graph, Quick Chats, and open-owner rows from the shared sidebar row projection; omit unopened recent folders from the sidebar while retaining File > Add Folder > Recent Folders.
  • Align sidebar paint, pointer hit testing, UIA bounds, and worktree/Jump scrolling with the generated row geometry; add outline navigation icons and bounded header controls.
  • Share route-aware selection between paint and UIA: the selected Graph row uses the Windows 0x3A3A44 fill on overview, Quick Chats is selected on its route, the matching project on its project surface, and no stale top-level destination is selected in normal or Quick Chat workspace routes. The fill's hue and visual match to macOS remain unreviewed pending paired capture. No tree-selection redesign or Graph-background removal.
  • Exclude the global Graph destination from project-specific context actions and use the visible section names Local Projects and Remote Repositories.
  • Add named UIA navigation assertions, independent local/remote folds, bounded temporary remote-owner fixture mutation, the actual mutation-22-then-20 restoration assertion, a bound Quick Chat workspace identity case, functional harness cases, and the scoped README update.

Test plan

RED: & 'C:\gct\ic\zig-0.15.2\zig.exe' test src\Sidebar.zig -target x86_64-windows-msvc -lc -luser32 -lgdi32 "-IC:\gcp\ic\winghostty\include" -> 195 passed, 0 skipped, 11 failed; new owner projection expected .local_heading but found .overview, and the new open-owner child assertion failed; log C:\gcs\ic\sidebar-navigation-red.txt. Route-specific behavioral RED in C:\gcs\ic\sidebar-route-uia-red.txt showed overview still selected a stale local project.
GREEN: & 'C:\gct\ic\zig-0.15.2\zig.exe' test src\Sidebar.zig -target x86_64-windows-msvc -lc -luser32 -lgdi32 "-IC:\gcp\ic\winghostty\include" --cache-dir C:\gcs\ic\zig-cache --global-cache-dir C:\gcs\ic\zig-global-cache -> Sidebar root passed all 206 tests on the original C source before rebase; log C:\gcs\ic\sidebar-current-green-pinned.txt.
REGRESSION: gh run view 38691422877 -R scgopi/GraphCode --json name,status,conclusion,headSha,jobs; gh run view 38691422893 -R scgopi/GraphCode --json name,status,conclusion,headSha,jobs -> Exact head ab12180 passed Windows shell and Windows port validation.

Before rebasing onto accepted main 65194b777523406cbbfaa7db4bcf0372119c5412, ValidationRunner.Tests.ps1 completed on source head 7f2b758f8ab1e092c71d2542337b3a0f96357a3e. That historical run reported SIDEBAR_NAVIGATION_FIXTURES=7 (5 positive, 2 negative; App 22->20 restoration has a separate hidden test), 397 protocol contracts (56 positive, 341 negative), and UiScenario 166/166. Its sidebar marker is offline contract evidence (liveAppSelectionProved=false), not live app proof. Log: C:\gcs\ic\validation-runner-post-rebase-7f2b758f.txt.
The earlier Windows unit log for source head 7f2b758f also shows the actual fixture restoration assertion at test 41/1235 PASS. The rebased-head Windows unit CI run 38659650948, shard 0 job 116177666495, independently records the same assertion as 41/1235 ... OK. This is an index in a 1235-test root suite, not an App-only test total. Earlier local log: C:\gcs\ic\ci-unit-current-116090448617.log; rebased-head job log.

Command-scope correction for the earlier cb4a head: I inadvertently started pwsh -NoProfile -File Tools\windows\Tests\ValidationRunner.Tests.ps1 locally, then stopped it before completion when the approved scope was clarified. Its retained partial output already records the 7 sidebar-fixture marker, 397 protocol contracts (56 positive, 341 negative; liveAppSelectionProved=false), hidden HWND/EDIT prompt lookup 11/11 and hit 6/6, and UiScenario 166/166. The command did not complete and is not a passing ValidationRunner run or product/live-UI evidence. This was a command-scope error; the hidden native-window cases are disclosed rather than treated as unexecuted.

The separately permitted focused offline command pwsh -NoProfile -File Tools\windows\Tests\UiCaptureDriver.Tests.ps1 -ScratchRoot C:\gcs\ic-r1-current passed 31/31 in NO_DESKTOP_REAL_LAUNCH_REHEARSAL mode and produced zero images. It launches only its harmless console fixture, not GraphCode or a desktop capture. Local log: C:\gcs\ic-r1-current\ui-capture-driver-focused.log (SHA-256 CD16D4946F068E2012869EB05D534C9D9B3A4B44DF19A08F14F9CF09F353C56F).

The separately permitted direct offline command pwsh -NoProfile -File Tools\windows\Tests\UiScenario.Tests.ps1 passed 166/166 in its own invocation on the post-B+D tree before the test-only Quick Chat fixture correction in ab121807; it was not rerun on the exact current head. These focused offline results are not a completed full ValidationRunner run.

Historical cb4a-head CI passed: Windows shell run 38659650948 completed all 7 component jobs, including integration and real-product packaging; Windows-spikes run 38659651050 passed terminal/contracts and Swift; DCO, investigation privacy, deterministic hardening, and the then-current PR-body evidence check also passed. Linux/macOS jobs were skipped by path gating; full pinned Windows validation and gated environment hardening were opt-in configured skips, not path-gated skips.

Exact post-E rebase CI passed on base 112d458303891f87af6c1dc6beaf7e48073fd65c and head f2aff805de2992933ba7e4c57309c4c61f9be036: Windows shell run 38679411919 passed all 7 component jobs, including integration and real-product packaging; Windows port validation run 38679411898 passed terminal/contracts and Swift, including the required zmx empty-list test; DCO, investigation privacy, deterministic hardening, and the pre-edit body evidence check passed. Linux/macOS were path-gated skips; full pinned Windows validation and gated environment hardening were opt-in configured skips. Full Windows validation, make test, and make check were not completed locally.

Exact combined post-B+D rebase and final test-fix CI passed on base 2916099412659316ffd83aabc0de7193aa703fb1 and head ab1218078b88b017e2fe3591b39e999d6d1f6d94: Windows shell run 38691422877 passed all 7 component jobs, including integration and real-product packaging; Windows port validation run 38691422893 passed terminal/contracts and Swift, including the required zmx empty-list test. DCO run 38691422973, the pre-edit body evidence run 38691423012, and deterministic hardening run 38691422930 passed; the port run's investigation privacy scan passed. Linux/macOS jobs were path-gated skips. Full pinned Windows validation and gated environment hardening were opt-in configured skips, not path-gated skips. The updated body's local evidence check is tracked separately.

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

Not verified

  • Acceptance box 1 remains pending the paired macOS/Windows capture review; it is not checked by unit or UIA assertions alone. Per current user direction, visual acceptance is deferred while issue Windows capture core: journal check-then-open race fails UiCaptureDriver tests intermittently on main #826 remains open and will be handled in a later coordinated capture batch after an eligible base/head is available. Visual acceptance remains unticked; this deferral does not authorize a build, GUI lease, or capture.
  • Acceptance boxes 2–6 remain unticked: loop-tree presentation, retained Windows extras, workspace footer, visual acceptance of selection styling, and minimum-width/overlay behavior.
  • Windows integration CI passed on the rebased head; no local GraphCode product build, product UI, live UIA gate, or capture was run on the current head. The full Windows suite, make test, make check, and native screen-reader or hardware behavior were not run locally.
  • No screenshot CI, pixel-baseline suite, manual pixel-baseline proof, GUI lease, or Windows capture was run. The hidden native-window cases recorded in the incomplete runner invocation are disclosed above, not treated as a completed UI pass. Paired visual acceptance remains pending. Any future capture is conditional on a capture-eligible post-R2 base/head and separate coordinator authorization; this rebase does not authorize a build, GUI lease, or capture.

@coneilen
coneilen force-pushed the coneilen-microsoft-wave-2-sidebar-navigation branch 5 times, most recently from cb4a5b5 to f2aff80 Compare October 15, 2026 04:02
Match sidebar destinations, open-owner sections, row geometry, UIA projection and scrolling; add bounded fixture coverage.

Refs #767

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 0db84998-f1cc-4cc7-a927-6c8912b42cdb
Signed-off-by: Colin Neilens <coneilen@microsoft.com>
Update the named assertions for the navigation row extents and the DPI-scaled local section bounds.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 0db84998-f1cc-4cc7-a927-6c8912b42cdb
Signed-off-by: Colin Neilens <coneilen@microsoft.com>
Emit the executed positive and negative sidebar oracle fixture count in ValidationRunner output.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 0db84998-f1cc-4cc7-a927-6c8912b42cdb
Signed-off-by: Colin Neilens <coneilen@microsoft.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 0db84998-f1cc-4cc7-a927-6c8912b42cdb
Signed-off-by: Colin Neilens <coneilen@microsoft.com>
Match owner selection validation to the active surface: a project row is selected only on its matching project canvas, while the selected loop remains checked across routes.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 0db84998-f1cc-4cc7-a927-6c8912b42cdb
Signed-off-by: Colin Neilens <coneilen@microsoft.com>
Exercise Quick Chat workspace selection through the same bound identity the application uses.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 0db84998-f1cc-4cc7-a927-6c8912b42cdb
Signed-off-by: Colin Neilens <coneilen@microsoft.com>
@coneilen
coneilen force-pushed the coneilen-microsoft-wave-2-sidebar-navigation branch from f2aff80 to ab12180 Compare October 15, 2026 06:16
@coneilen
coneilen marked this pull request as ready for review October 15, 2026 07:04
@coneilen
coneilen merged commit 24209d2 into main Oct 15, 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