Skip to content
Merged
Show file tree
Hide file tree
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
24 changes: 20 additions & 4 deletions investigation/ui-parity-matrix.md
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,22 @@ provider dependency.
This changes delivery priority only: all row names, statuses and runtime evidence
below are unchanged, and exposed unsafe behavior is not waived.

**2026-10-01 post-wave audit:** accepted main is
`7d382687eadbce24b0f72eb23633896414153671`. The audit re-read all **98**
surface rows after [#572](https://github.com/scgopi/GraphCode/pull/572), the
standalone merged implementation/tooling PRs
[#573](https://github.com/scgopi/GraphCode/pull/573) through
[#578](https://github.com/scgopi/GraphCode/pull/578), and app-native stack `#581`
containing [#579](https://github.com/scgopi/GraphCode/pull/579) and
[#580](https://github.com/scgopi/GraphCode/pull/580). The exact result remains
**62 Validated / 36 Partial / 0 Missing / 0 Blocked / 0 Divergent**. The wave
fixes real source and evidence-pipeline defects, but supplies no exact packaged
production-daemon/native-client flight or matched macOS observation that closes
the remaining residuals of a whole row. In particular, Four-page onboarding
is now source-fixed and locally/CI qualified while remaining Partial pending
the packaged/native evidence tracked by open
[#556](https://github.com/scgopi/GraphCode/issues/556).

## Application shell and navigation

| macOS surface | Required visible behavior | Windows evidence | Status |
Expand Down Expand Up @@ -80,7 +96,7 @@ native keyboard/accelerator/window proof; the workspace row remains Partial.

| macOS surface | Required visible behavior | Windows evidence | Status |
|---|---|---|---|
| Four-page onboarding | Visual terminology tour, Skip/Back/Continue/Get Started, backend selection, reopen, persisted seen state | Custom rounded Win32 onboarding with all four pages, Skip/Back/Continue/Get Started, backend selection, and Help > GraphCode Basics reopen. The earlier `Validated` status was not supported by current evidence. A 2026-10-01 manual launch of a package built from `59ebed1` (startup ordering unchanged at `8ef2184c`), against an isolated `GRAPHCODE_SUPPORT_DIR`, found the following. (1) `App.zig` calls the modal `WindowsOnboarding.showFirstRun` before `client.connect()`, so the shell shows "Disconnected" for the whole first run and connects only after the dialog closes ([#556](https://github.com/scgopi/GraphCode/issues/556)). (2) The dialog is custom-drawn with no `WM_GETOBJECT`/UIA provider, so screen readers and the UIA gate cannot see or invoke its controls; Skip had to be driven by a posted mouse message (#556). (3) The seen marker is always `%LOCALAPPDATA%\GraphCode\onboarding-seen` and ignores `GRAPHCODE_SUPPORT_DIR`, so isolated workspaces, tests, and sandboxes share and mutate the real profile's first-run state ([#554](https://github.com/scgopi/GraphCode/issues/554)). (4) On a fresh support directory the shell never starts its daemon because the rendezvous secret does not yet exist ([#555](https://github.com/scgopi/GraphCode/issues/555)), so first-run onboarding is followed by a disconnected shell unless the daemon is started separately. No live gate drives onboarding pages, keyboard reachability, or the first-run-to-connected transition. Page content and reopen exist, but accessibility, first-run connection, and isolated persistence are not established | Partial |
| Four-page onboarding | Visual terminology tour, Skip/Back/Continue/Get Started, backend selection, reopen, persisted seen state | Custom rounded Win32 onboarding retains all four pages, Skip/Back/Continue/Get Started, backend selection, and Help > GraphCode Basics reopen. The 2026-10-01 manual package launch from `59ebed1` correctly demoted the earlier unsupported `Validated` claim by exposing four defects. Current accepted main fixes their source paths without supplying the final package flight: [#573](https://github.com/scgopi/GraphCode/pull/573) honors the effective `GRAPHCODE_SUPPORT_DIR` (3/3 focused, 10/10 full onboarding tests) and closes [#554](https://github.com/scgopi/GraphCode/issues/554); [#577](https://github.com/scgopi/GraphCode/pull/577) makes the startup endpoint available before the rendezvous secret exists (focused GREEN, 177/177 DaemonClient tests) and closes [#555](https://github.com/scgopi/GraphCode/issues/555). App-native stack `#581` then merged [#579](https://github.com/scgopi/GraphCode/pull/579), scheduling the daemon callback/connection before genuine first-run onboarding enters its modal loop, and [#580](https://github.com/scgopi/GraphCode/pull/580), adding a named UIA fragment tree plus shared deterministic UIA/mouse/Tab/Shift+Tab/Enter/Space action and focus behavior. The stack passed 734/734 App tests and an isolated shown-window probe that discovered all four pages/actions, invoked navigation/backend controls, set UIA focus, and posted `WM_KEYDOWN` traversal. These are source, focused runtime, and shown-window results, not the ordinary installed production path or desktop-level native keyboard evidence. [#556](https://github.com/scgopi/GraphCode/issues/556) therefore remains open as source-fixed/evidence-remaining until the exact packaged install → first launch → onboarding → connected Welcome path runs with production `graphcoded`, an owned desktop, native keyboard operation, isolated persisted marker evidence, and any assistive-technology behavior claimed. Reopen/page content exist, but the whole macOS-equivalent visible/runtime contract is not yet qualified | Partial |
| No-project Welcome detail | Graph icon, pitch, explanatory copy, Open Folder action, inline error | Windows matches the centered Graph identity, pitch, explanatory copy, and single Open Folder action. Persistent project-ingress failures now also render as a bounded, wrapped inline canvas alert without replacing navigation; focused geometry coverage and the populated UIA gate verify the alert text and live bounds | Validated |
| Empty global graph | “Nothing running yet”, explanatory copy, Open Folder action, New Loop action | The dedicated overview empty state exposes both bounded Open Folder and New Loop actions; New Loop targets the daemon's `graphcode://global` project. The live UIA gate switches to an empty model, verifies both visible native controls, invokes New Loop, and observes the node form | Validated |
| Empty project canvas | Project-specific empty message and New Loop action | The dedicated “No loops yet” project state exposes its visible New Loop action. The live UIA gate installs an empty local project, invokes that exact command, and observes the project-scoped node form | Validated |
Expand Down Expand Up @@ -231,10 +247,10 @@ case proves ownership only. All existing Partial rows remain Partial.

**Known shared-environment gate instability surfaced while validating the Window toolbar/Update command rows above:** with the local shell toolchain unblocked (PR #433), multiple parity sessions now build and run `graphcode-windows.exe`/`zmx.exe` concurrently on the same interactive desktop. The pre-existing worktree reorder/removal focus-retention stress block in `Tools/windows/uia-live-gate.ps1` (`Retain-FocusWithRetry`, its `Start-Job` concurrent-UIA-read stress, and the plain `Get-DirectChildren` tree walks around it) repeatedly hit raw, uncaught COM exceptions (`GetFirstChild`/`GetNextSibling` "Could not open the process token"/"Unrecognized error.") at different, unrelated call sites across many local runs, and a separate run was independently derailed by another desktop application (Chrome) stealing the foreground window during a modal-dialog wait. None of this reproduced from this branch's own changes — a minimal, standalone re-run that skips straight to the Update command assertions using the same shell process, native menu, and gate helpers passed cleanly and repeatably. This matches flakiness independently reported by sibling parity sessions and is a pre-existing, shared test-infrastructure limitation, not a product regression; it blocked getting one single uninterrupted top-to-bottom `uia-live-gate.ps1` run this session and is flagged here for follow-up (likely hardening `Get-DirectChildren`/`Retain-FocusWithRetry` against concurrent-desktop contention).

**Validation-infrastructure work items from a 2026-10-01 clean-clone setup:** these are evidence-pipeline defects, not product parity changes, and no row status depends on them.
**Validation-infrastructure work items from a 2026-10-01 clean-clone setup:** these are evidence-pipeline facts, not product parity changes, and no row status depends on them.
- The local `uia-live-gate.ps1` run timed out twice after the Worktrees lane click on an otherwise passing `windows-shell` validation ([#560](https://github.com/scgopi/GraphCode/issues/560)). This is a different call site from the instability noted above. It is unresolved, so a local gate failure there is not attributed to the product.
- `WorktreeGitProcess.Tests.ps1` fails when the checkout path is deep, such as an app-managed worktree, because of MAX_PATH. It passed from a short clone ([#561](https://github.com/scgopi/GraphCode/issues/561)).
- `windows-shell` validation writes to the real user profile instead of only test-owned directories ([#562](https://github.com/scgopi/GraphCode/issues/562)).
- The deep-checkout fixture failure is source/tooling-fixed by [#575](https://github.com/scgopi/GraphCode/pull/575), which closed [#561](https://github.com/scgopi/GraphCode/issues/561) after a deep-root positive run and 21 immutable regression logs. That improves evidence reliability; it is not product-runtime proof.
- Validation profile leakage is source/tooling-fixed by [#576](https://github.com/scgopi/GraphCode/pull/576), which closed [#562](https://github.com/scgopi/GraphCode/issues/562) after 4/4 isolation tests and 380 validation-runner contracts. This qualifies the harness boundary, not an installed user's profile behavior.
- Redirecting `USERPROFILE` makes `graphcoded` exit silently with `0xC000001D` ([#558](https://github.com/scgopi/GraphCode/issues/558)). Isolated runs must therefore use `GRAPHCODE_SUPPORT_DIR`, not a redirected profile.
## Audit conclusion

Expand Down
Loading
Loading