Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion investigation/ui-parity-matrix.md
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,7 @@ process dump and child-process inventory before shared product changes.
|---|---|---|---|
| Main split view | Persistent sidebar; detail switches among welcome, global graph, project canvas, Quick Chats canvas, and loop workspace | Explicit destinations exist; the shared header follows destination identity, distinguishes a Quick Chat workspace from a selected project, and keeps detail-panel toggling inside the loop workspace. Production-state and layout tests cover destinations, narrow widths, and sidebar/panel independence. Native-linked App regressions now cover a scrolled, Worktrees-populated sidebar with Activity present while a stopped loop workspace is open: the visible row, canvas card, command action, and UIA identity all select the same exact project/node and queue one resume request, while unrelated stopped loops remain unchanged. This is unit/native-message evidence, not a replacement for a new installed Dev Box attended-launch walkthrough. The beta15 Dev Box rerun then found that reopening a stopped loop after switching to another left the other loop's session in a stray, selected tab: every graph change bound the graph's first two loops to terminal slots by graph order. That binding is now limited to the smoke gate; a graph change re-observes only the open loop's own detached pane. An App regression drives native sidebar clicks A → B → A (A stopped) with graph changes arriving and asserts one resume per click, one tab whose pane is the reopened loop, no other loop bound beside it, and UIA tab count equal to drawn tabs. A local, uncommitted real winghostty/zmx run of the same click path reproduced the stray tab before the fix and showed only A's session, in the single visible pane, after it. Neither replaces the installed Dev Box rerun. The beta16 Dev Box rerun then found that, with a stopped loop in Needs you, Show in Graph from another loop's workspace left the graph hidden and moved the loop bar to the Needs-you loop while the pane stayed on the open loop: the graph's hidden "loops need you" rail overlaps the loop bar's Show in Graph button and was hit-tested first, so the click ran Review attention, which only re-selected. The rail is now neither drawn nor clickable in a loop workspace, and with a workspace open the Review attention key and menu, the Needs-you row (pointer and UIA), and Next/Previous Loop open their target through the activation path instead of only selecting. App regressions click the UIA-published Show in Graph bounds from B and C after a canvas drag on the Needs-you loop and assert the graph is shown with the open loop still selected, and drive each of those routes asserting the loop bar's UIA identity, the drawn selection, and the visible pane name the same loop; a Needs-you Stop leaves the open loop alone. This is unit/native-message evidence, not an installed Dev Box rerun. The green Windows shell CI run 36489223062 acquired `graphcode-root` from a visible background shell, then drove Graph → project canvas via the painted lane Open action → Graph, opened Worktrees from the lane, opened Quick Chats and a Quick Chat terminal workspace, opened a selected-loop workspace, invoked Show in Graph, and returned through the same stable sidebar loop identity to the same project/workspace identities. This is live UIA plus real click/invocation evidence for destination and row identity, not a visual walkthrough. The macOS evidence observed welcome, global graph, Quick Chats, project, nested graph, and persistent sidebar, but did not reach terminal detail; Windows CI did not cover welcome/onboarding, narrow-width rendering, real provider content, or a visual sidebar/layout comparison. The full cross-platform row therefore remains unverified. **Tracked in [#720](https://github.com/scgopi/GraphCode/issues/720) (testing gap).** | Partial |
| Window toolbar | Needs-you chip, worktree notice, jump field, contextual loop-panel toggle | Render, hit-test, UIA exposure, and focus order share header visibility/layout. Needs-you opens the selected attention target; cached local worktree notices honor the owning project and count/size threshold. Jump opens the existing palette even with no projects. The detail toggle is limited to loop workspaces with supported edge/metric content; workspace/project identity is no longer overpainted. F6 entry/exit, scoped traversal/activation, focus rendering, and marshaled UIA button focus are implemented (plain F6 is terminal input while a terminal has focus; Ctrl+Shift+F6 enters the toolbar from a terminal), while ordinary Tab/Shift+Tab/Ctrl+Tab contracts remain. The header paints inside the buffered logical pass; literal 96/144/192-DPI bounds and hidden native client tests cover logical layout/input and exactly-once physical UIA conversion without rescaling terminal tabs. The green Windows shell CI run 36489223062 provided live evidence for workspace toolbar identity, Jump filtering and Return navigation, and the contextual loop-panel Collapse/Expand control with non-empty bounds; it also exercised real foreground focus elsewhere in the shell. The macOS runtime evidence observed the named title, Jump, and the 8-versus-7 worktree-notice boundary, but not Needs You or the loop panel. Windows CI did not exercise the notice boundary or a populated Needs You chip, and neither side supplied a complete rendered-toolbar comparison or provider-backed panel-content walkthrough. Those are user-visible parts of this row, so it remains `Partial`; the separately owned Worktree notice chip row carries its own evidence. **Tracked in [#721](https://github.com/scgopi/GraphCode/issues/721) (testing gap).** | Partial |
| Jump palette | Search field, ranked cross-project results, type/state/project context, mouse and keyboard selection | Ctrl+P and Ctrl+J open a native modal palette with live exact-ID, exact-title, title-prefix, and substring ranking across projects. Results visibly include project, loop type, and state; Up/Down, Return, Escape, and mouse double-click are supported. The deterministic UIA gate verifies a visible search field, contextual cross-project results, and keyboard navigation changing the selected loop. **Reopened (visual) 2026-10-13:** the side-by-side review against the macOS reference found off-window light popup; Main is mislabelled; no type bars or state dots. **Tracked in [#776](https://github.com/scgopi/GraphCode/issues/776) (implementation gap).** | Partial |
| Jump palette | Search field, ranked cross-project results, type/state/project context, mouse and keyboard selection | [#788](https://github.com/scgopi/GraphCode/pull/788) replaced the off-window light popup with a contained dark palette, corrected Main/Composite labels, and added two-line project context, type bars and state dots while retaining filtering and keyboard/mouse selection. [#792](https://github.com/scgopi/GraphCode/pull/792) added owner dimming, macOS sheet positioning, attention-first ranking and a dark overflow scrollbar that stays dark during hover, thumb drag and track clicks; overflowing results now open at the first row. Paired eight- and twelve-row captures, pixel checks, native-message tests and exact-head CI support those bounded changes. The final twelve-row run also exercised native UIA ScrollPattern and a Thumb hit test; intermittent proxy failures are disclosed in the PR. [#776](https://github.com/scgopi/GraphCode/issues/776) is closed, but this row stays Partial: choosing a result still selects the project canvas rather than opening the loop workspace ([#799](https://github.com/scgopi/GraphCode/issues/799)); hardware wheel routing, physical keyboard/mouse input, assistive-technology conformance and full rendered fidelity across states remain unverified. Posted WM_MOUSEWHEEL proves message handling, not hardware wheel targeting or first-notch responsiveness. | Partial |
| File/Loop/Terminal menus | Discoverable project, worktree, navigation, workspace, update, settings, and help commands with state-aware enablement | Startup menu replacement and UTF-16 corruption are fixed. Reclaim/Reveal require a selected row; Save requires the Worktrees dialog open. Worktrees inspection and reclaim now run on owned background workers; while provider work is active the native File menu, project/background menus, and fixed UIA action patterns derive a busy capability instead of advertising a second invocation. The fixed UIA action nodes are offscreen with empty bounds rather than sharing the visible Graph rectangle. Loop commands use distinct actionable-target thresholds, and Terminal tab/pane commands require multiple tabs or panes. Hidden-window tests call `MainWindow.updateMenu` and verify the real native HMENU `MF_GRAYED` bits in unavailable and available states. The green Windows shell CI run 36489223062 inspected the live File > Add Folder and Recent Folders HMENU labels/order, invoked a real Recent Folders command without terminating the shell, and exercised live Help/update enablement transitions; its workspace walkthrough also created and switched mounted tabs. The new Worktrees busy/UIA behavior has App/native-linked unit coverage but no installed Dev Box walkthrough yet. Windows CI did not read the complete live Loop/Terminal menu states in equivalent graph and terminal contexts or exercise their keyboard commands. Unit HMENU coverage and adjacent workspace actions cannot substitute for that missing user-visible walkthrough, so the row remains `Partial`. The beta25 Dev Box qualification (`0.1.78-windows.beta25`, installed package, production `graphcoded`, 2560x1440 at 100%, injected `SendInput` and UIA; return bundle reviewed 2026-10-13) D8 read the live File, Loop, Terminal, Workspace, View and Help menu labels and shortcuts, and 6F exercised Ctrl+Shift+T, Alt+Shift+D and Ctrl+Shift+W. Enablement states in graph versus terminal contexts were not read, so the row stays `Partial`. The 2026-10-13 testing-gaps Dev Box run read every native menu item in three contexts. Six macOS Loop-menu commands have no Windows equivalent: Back, Forward, Show/Hide Loop Panel, Restart Session, Restart All Sessions… and Send Message to All Loops…. Enablement also diverges: with no workspace open, Windows enables Show in Graph, Stop Loop, New Tab and the splits, and in a one-pane workspace it disables Close Pane and Close Tab. **Tracked in [#722](https://github.com/scgopi/GraphCode/issues/722) (implementation gap).** | Partial |
| Workspace lifecycle | List/switch, create, rename, delete with fail-closed confirmation, and keyboard/UIA reachability | Windows discovers `Default` plus `.graphcode-*` siblings and exposes New/Rename/Delete and Ctrl+Alt paging. Manage now has an owned row model/native list, Default/creation-time/name-tie order, identity-deduplicated current-outside-home inclusion, full-path detail, current/default/open/uncertain-window refusals, and captured-identity Open/New/Rename handoff after modal teardown. An App-owned single joinable reader supplies bounded **saved top-level** graph-header counts, not live/descendant totals; current live content, missing/unreadable/invalid/duplicate/limited/unsupported-location data remain explicitly unavailable, not partial zero. Fixed local/non-reparse reads use existing project JSON and the documented mailroom-array exception, no daemon/backend or window activation. Done/Escape cancels; pending actions wait for reader cancellation/join while the modal pumps, and shutdown drains before allocator teardown (a stalled local disk can delay shutdown). Manager Delete is enabled and shares rename's refusals, identity revalidation after confirmation, and reservation; deletion itself is recoverable: the folder is staged aside, the target workspace's daemon is stopped by its own derived shutdown event, the folder goes to the Recycle Bin with `FOF_ALLOWUNDO`, and only then are its saved sessions ended with `zmx kill --force`. A failed stage refuses without effect, a daemon that will not stop or a failed recycle renames the folder back and ends no sessions, and a failed rename-back reports the exact staged path instead of claiming a rollback. Ordinary menu ordering/Open/New semantics are unchanged. Next/Previous now reread the manager-ordered list, include validated current outside home, filter identified running windows, wrap both ways, recheck the target, and use a restore-only API with no launcher. Closed/disappeared targets never cold-open; any unidentified flag or lookup/restore failure refuses with status. Existing SID/session/class/published-metadata checks are preserved, not executable-path attestation. Menu capability counts known rows plus implicit current, without periodic window polling. Injected production-helper RED/GREEN, allocation-failure/owned-refresh, ordering/dedup/offset/race/refusal tests and pure menu-capability tests execute in the existing App/MainWindow roots; full native roots compile/link without execution and the ReleaseSafe app builds without launch. Manager coverage remains pure owned-data/explicit disposable fixtures, controlled memory-only joined threads, and filtered form/App data seams; no new shown manager/native-control/window-lookup/UIA/runtime proof is claimed. Existing lifecycle helper and never-shown native-control regressions cover accepted text lifetime, allocation cleanup, normalized naming/collisions, lexical identity, exact-window and one-launch routing, Default/current/open refusals, child-only support/daemon-pipe isolation, canonical plus legacy reservations, unidentified-window refusal, fail-closed Settings rebinding, and disposable confirmed mutation preservation. Lexical identity is not junction equivalence. Shown-dialog accessibility/keyboard/layout, full multi-instance/save-reload behavior, reliable live totals, and real running-cycle keyboard/window proof remain residuals. Deletion's evidence is unit-level only: every teardown effect is injected through a comptime seam, so no test recycles a folder, signals a real daemon, or kills a real session, and no live walkthrough has confirmed a recovered folder in the Recycle Bin, a daemon actually exiting, or sessions actually ending. Sessions saved outside the workspace's own `projects` directory (extra terminal tabs/splits, whose layout files are written relative to the process working directory) are not discoverable for a non-current workspace and are reported as unended rather than assumed absent. Shared-host menu failures still have an unproven cause; no full lifecycle parity or host-only diagnosis is claimed. Narrowed 2026-10-13 to macOS scope (requirements macOS lacks were dropped; see the issue). **Tracked in [#723](https://github.com/scgopi/GraphCode/issues/723) (implementation gap).** | Partial |
| Help menu | GraphCode Basics and normal About entry | The live Help menu exposes GraphCode Basics, which reopens onboarding, and About GraphCode, which opens a native versioned product dialog. The populated UIA gate verifies the dialog identity, version text, and close behavior | Validated |
Expand Down
Loading