Repository navigation
Keep Show in Graph and the loop bar on the open Windows loop - #658
Merged
Merged
Conversation
With a stopped loop waiting in Needs you, the graph's "loops need you" rail stayed hit-testable in a loop workspace, where the loop bar is painted over the same strip. Its bounds cover the bar's Show in Graph button, so a click there ran Review attention instead: the graph stayed hidden and the bar moved to the Needs-you loop while the pane kept the open loop's session (Dev Box beta16 qualification, Section 6B, LoopActivation). The rail is now drawn and hit-tested only on graph surfaces. With a loop workspace open, Review attention (Ctrl+Tab and the Loop menu), the sidebar Needs-you row (pointer and UIA), and Next/Previous Loop open their target through the activation path instead of only re-selecting, so the bar and the pane always name the same loop. Graph surfaces keep select-only behavior. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Signed-off-by: Colin Neilens <coneilen@microsoft.com>
The gate's attention rail step selected loop A's card, which opens A's loop workspace, and then clicked the rail strip. In a workspace that strip is under the loop bar, so the step was asserting the beta16 defect: the click cycled the selection onto the NEEDS YOU card while A's pane stayed open. The step now clicks the workspace's own Show in Graph button (whose bounds lie inside the rail rect) and requires the loop bar to go away with A still selected, then performs the existing rail click on the graph surface, where the rail is visible, and requires it to cycle onto the NEEDS YOU card. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Signed-off-by: Colin Neilens <coneilen@microsoft.com>
3 of 5 tasks
coneilen
added a commit
that referenced
this pull request
Oct 8, 2026
Record the immutable, unpublished 0.1.78-windows.beta17 candidate built from 4ab2fcf with #658 and #659 (Show in Graph and collapsed loop panel fixes). Beta16 and its r2 handoff are failed/superseded and kept unchanged. Approval A keeps fixture-only Worktrees reclaim. Correct the parity count to the ledger's actual 98 surfaces: 58 Validated / 40 Partial. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Signed-off-by: Colin Neilens <coneilen@microsoft.com>
2 of 5 tasks
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
Fixes the
LoopActivationfailure from the Dev Box qualification of0.1.78-windows.beta16(d75bb952). If a stopped loop was waiting in Needs you, clicking Show in Graph in another loop's workspace didn't show the graph. Instead, the loop bar switched to the Needs-you loop and the pane stayed on the open loop's session. This PR makes Show in Graph show the graph, and it makes every route that changes the selection move the loop bar and the pane together.Root cause: the graph surface has a "N loops need you" rail at
header+12..43, spanning the window width. In a loop workspace, the loop bar is painted over that strip, but the rail was still hit-tested. It was also checked before the loop bar's buttons. The Show in Graph button (header+10..36, near the bar's right edge) falls inside the rail, so the click ran Review attention (cycle_attention). That action re-selected the Needs-you loop without touching the pane. The bar takes its title andworkspace-loop-barUIA identity from that selection, so it showed A while the pane showed B. The earlier "worked from A's / B's workspace" observations fit this cause: Show in Graph only fails when something is in Needs you. The canvas drag on A was not the trigger.Changes
GraphCanvas.attentionRailShown: the Needs-you rail is drawn and hit-tested only on graph surfaces, never in a loop workspace.WM_LBUTTONDOWNandpaintboth use it.activateLoop, the same path a sidebar row uses:stopNodefor that loop and doesn't change the selection), and canvas card, attention-action and activity routes (they already go throughactivateLoop).App.zigbehavioral tests that drive realWM_LBUTTONDOWN/WM_LBUTTONUP/WM_MOUSEMOVE/WM_COMMANDthroughonWindowMessage. The fixture is the Core layout: loops A, B and C, with A stopped andawaitingInput(one Needs-you entry), and a short native canvas drag on A's card that leaves A graph-selected.workspace-show-graphbounds from the UIA publish, and click their center. The test asserts the click point is inside the rail bounds, which is the Dev Box geometry. Then it asserts:selected_node_idand the visible pane all name the target loop.stopNodeforloop-ais sent, and the bar and pane stay on B.investigation/ui-parity-matrix.md: the Main split view row records the finding and the fix. Its status staysPartial.Tools/windows/uia-live-gate.ps1: the gate's attention rail step got a correction, made after this PR's first CI run.attention rail click did not cycle selection onto the NEEDS YOU card.workspace-show-graphbounds. It requires the loop bar to go away with A still selected, which is the live Dev Box contract.Not changed, but noted for follow-up: when the loop panel is collapsed, the painted "Loop panel" expand control (
client.right-104..-14,header+8..30) is drawn over the loop bar's Show in Graph button. The pointer hit test for the bar also always subtractsloop_detail_width. So with the panel collapsed, the drawn Show in Graph button can't be clicked by pointer. That is a separate layout problem, and the Dev Box failure happened with the panel visible.Test plan
Toolchain: pinned Zig 0.15.2 from the existing bootstrap output
C:\gc-tools\environment.ps1, Winghostty6286560d(both pins checked withzig version/git rev-parse). The App test command is the same invocation asTools\windows\Tests\WindowsShell.Tests.ps1"App shell executable tests". In the lines below it is abbreviated aszig test src\App.zig ....RED: zig test src\App.zig ... --test-filter "Show in Graph from an open loop" (tests only, on base d75bb95 code) -> 0 passed; 1 failed: expectLoopBarAndPane expected loop-b, instead found loop-a for the workspace-loop-bar UIA identity after the native Show in Graph click (graph not shown, bar on the Needs-you loop, pane still loop-b); separately --test-filter "selection routes with a loop workspace open" -> 1 passed; 5 failed: Ctrl+Tab, Loop menu review and Next/Previous fail expectPaneBoundTo (pane loop-b, bar moved), Needs-you click and UIA invoke fail on selected_node_id loop-b while the bar moved to loop-a; the Needs-you Stop guard passed
GREEN: zig test src\App.zig ... --test-filter "Show in Graph from an open loop" -> All 1 tests passed; --test-filter "selection routes with a loop workspace open" -> All 6 tests passed
REGRESSION: zig test src\App.zig ... (full App shell suite) -> All 884 tests passed; zig test src\GraphCanvas.zig -target x86_64-windows-msvc -lc -> All 211 tests passed; zig build -Doptimize=ReleaseSafe -> exit 0
Limits, stated plainly:
App.zigwith only the new tests added and an unmodifiedGraphCanvas.zig.pwsh -NoProfile -File Tools\windows\validate.ps1 -Task windows-shell -SkipTrayLive(run with Pester 5.7.1, because Pester 6 rejects-Script) passed the isolation contract, the source contracts and every executable section through Worktree status, including Graph canvas. It then stopped at "Worktree Git process regression tests" withWorktree Git fixture path budget exceeded(294 > 259 characters), which comes from this long worktree path and not from this change. So validate did not reach the App shell section, which is why I ran it directly as shown above.windows-shell integrationCI job.Checklist
git commit -s) per the DCOmake test): not run. This is a Windows-only change, and the Windows App/GraphCanvas suites above passed.make check): not run, because no Swift changed.zig buildpassed.