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
69 changes: 69 additions & 0 deletions investigation/macos-parity-evidence/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
# macOS parity evidence

Reference evidence captured from the **shipping macOS app** so the Windows port
has an authoritative comparison target for the `Partial` rows in
[`../ui-parity-matrix.md`](../ui-parity-matrix.md).

It was produced by running
[`../macos-parity-evidence-agent-prompt.md`](../macos-parity-evidence-agent-prompt.md)
on a macOS host.

| | |
| --- | --- |
| App build | GraphCode 0.1.76 (299) |
| Built from | `717240cdb373a2c00644842c429f06e520d15f51` |
| Host | macOS 26.7 (25G229), Apple Silicon |
| Captured | 2026-09-28 PDT |
| Displays | 3840x2160 physical / 1920x1080 logical (2x); 1920x1080 (1x) |

## Contents

- [`macos-parity-evidence-report.md`](macos-parity-evidence-report.md) — row-by-row
findings for the 35 `Partial` rows, verified requirements, Windows
implementation candidates (W1–W7), blockers, an explicit *Not verified* list,
and an artifact index.
- [`evidence/`](evidence/) — 26 unaltered window screenshots, indexed by the
report. `evidence/README.md` maps them to ledger surfaces.

## How to read it

The report marks every claim with `S` (inspected source), `T` (test source), or
`R` (direct observation of the running app), and rates confidence on the
**bounded** finding rather than on blanket platform equivalence. Ten Swift
suites were executed once — 113 passed, 0 failed, 0 skipped. That is focused
automated evidence, not a full `make test`.

Read the report's *Not verified* section before citing anything. Terminal VT
output, IME, clipboard, Codespaces and a real update were deliberately **not**
exercised, and are recorded as unobserved rather than absent.

## What this evidence does and does not do

It **does** establish macOS behavior that Windows work can be measured against,
and it supplies fixed-size 1x/2x captures for visual comparison.

It **does not** validate any Windows code path. A ledger row still requires its
own Windows runtime evidence before it can leave `Partial`, and citing this
report is not a substitute for that.

Two observed macOS behaviors are **defects, not parity targets**, and must not
be copied:

- Nested Main `Rename…` is offered but does not open the rename alert
(root-only lookup in `ProjectFeature.swift`).
- The edge cycle-guard form visibly clips its labels on this fixture.

Accessibility sample buttons were also found unlabeled on macOS; fix Windows UIA
on its own merits rather than matching that gap.

## Provenance and hygiene

Captures are unaltered and unannotated. Only disposable `Alpha`/`Beta` Git
repositories, an isolated bundle ID and a temporary unregistered daemon were
used; no real project, account, provider, Codespace or release was opened. The
worktree sweeper's full-window capture was deliberately withheld because the
product's recovery note renders a local path.

Do not retouch, recompress or crop these files. Their evidentiary value depends
on being byte-for-byte what the app rendered. Add new captures alongside them
rather than replacing them.
36 changes: 36 additions & 0 deletions investigation/macos-parity-evidence/evidence/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
# macOS parity capture originals

All PNGs in this folder are **unaltered window-specific screenshots** of an
isolated GraphCode 0.1.76 (299) build from commit
`717240cdb373a2c00644842c429f06e520d15f51` on macOS 26.7, captured
2026-09-28 PDT. Only disposable Alpha/Beta local Git repositories and a
temporary, unregistered daemon were used. No real project, provider, account
or update was opened. The report at
`../macos-parity-evidence-report.md#artifact-index` supplies **one row per
original** with ledger mapping, exact PNG dimensions, logical capture window
size, display scaling and the bounded claim each image supports.

| Ledger surface | Original filenames |
|---|---|
| Main split view, welcome, global/Quick Chats/project empty states | `isolated-window-a-original.png`, `empty-welcome-original.png`, `empty-global-graph-original.png`, `empty-quick-chats-original.png`, `alpha-empty-project-original.png` |
| Workspace lifecycle | `manage-workspaces-original.png` |
| Global graph, lane/card layout, notebook grid and loop rows | `two-project-overview-original.png` (pre-Fit/offscreen), `two-project-overview-fitted-original.png`, `two-project-overview-1400x820-original.png`, `two-populated-project-lanes-original.png`, `alpha-composite-empty-original.png` |
| Node creation and validation | `alpha-new-node-form-original.png`, `alpha-composite-form-original.png`, `alpha-goal-validation-original.png`, `alpha-nested-two-nodes-original.png` |
| Edge creation and presentation | `alpha-new-edge-form-original.png`, `alpha-edge-cycle-controls-original.png` (observed form clipping), `alpha-created-handoff-original.png`, `alpha-handoff-fitted-original.png` |
| Node rename | `nested-rename-no-dialog-original.png` (post-click; see report for AX/source context), `alpha-root-rename-prompt-original.png` |
| Worktree notice boundary | `eight-worktree-notice-original.png`, `seven-worktrees-no-notice-original.png` |
| Native appearance | `native-settings-default-original.png` (light Settings versus dark app) |
| Per-monitor DPI and sample visual fidelity | `two-populated-project-lanes-1x-original.png`, `two-populated-project-lanes-2x-return-original.png` |

The 900x524 and 1400x820 figures refer to **logical app window points**.
PNG dimensions include variable shadow/sheet margins. The ASUS display uses
2x (3840x2160 physical, 1920x1080 logical); the Dell uses 1x
(1920x1080 physical/logical). Changes in elapsed labels, selection, and
native material prevent unqualified whole-image pixel comparisons.

Menus were inspected via macOS Accessibility rather than photographed outside
the app window. The worktree sweeper was also inspected via Accessibility:
its full-window capture was withheld because the product's recovery note
displays a local path. No runtime evidence was fabricated for terminal-backed
tabs, Codespaces, IME/clipboard, or a real update. The 113 focused Swift tests
are described in the report; screenshots are **not** screenshots of those tests.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Loading