Skip to content

fix(cua-driver): preserve observed X11 click identities - #3

Draft
tanishqkancharla wants to merge 4 commits into
codex/linux-text-selectionfrom
codex/linux-index-identity
Draft

tanishqkancharla wants to merge 4 commits into
codex/linux-text-selectionfrom
codex/linux-index-identity

Conversation

@tanishqkancharla

@tanishqkancharla tanishqkancharla commented Sep 10, 2026 •

Copy link
Copy Markdown
Owner

Summary

A Linux X11 click could activate a different control after the accessibility tree changed. In a real GTK regression, enabling a button before OK made the retained OK reference activate Cancel; removing OK made its old reference activate another button.

The driver now binds each observed index to the accessible object's unique D-Bus owner/path and owning frame, scoped to its runtime, process, window and snapshot. Click resolution follows that object, retains its proxy through delivery, and rejects missing or stale targets before input.

Related work

This draft is isolated on top of codex/linux-text-selection at 624fc7e. It does not replace the broader desktop changes in #2. Issues are disabled in this fork, so this PR records the reproduced problem and scope.

RFC: not required for this correction to existing observed-target semantics; no public SDK, CLI or MCP schema changes.

Compatibility and risk

This correction covers X11 indexed clicks only. Other indexed operations, Wayland, coincident-window ambiguity and toolkit reuse of live object paths remain documented limitations. Existing core snapshot-token admission remains unchanged. X11 property-only snapshots cannot supply a proven AT-SPI target identity.

The candidate remains unpromoted; rollback is the preceding 624fc7e driver pin.

Validation

  • Real public SDK tests INDEX-L01 and INDEX-L02 reproduce both wrong-control outcomes on 624fc7e. Application, temporary directory and remote container cleanup verified.
  • Regression sources: https://github.com/tanishqkancharla/opensky/tree/29f0905/e2e/specs/linux-index-drift.test.ts
  • Focused sparse-cache coverage checks snapshot replacement, runtime and window isolation. Local Rust parsing, targeted formatting and diff checks pass.
  • Candidate Linux build and focused Rust checks: https://github.com/tanishqkancharla/opensky/actions/runs/34528098770 (passed; exact compiled driver8ed, SHA256 36078d7ac04e98fe48406b1c4d759ce67919186276c8bd32516fb68348a06e71).
  • Candidate real GTK INDEX-L01/L02 both pass: retained OK targets OK after insertion, and removed OK refuses without activating another control. Full public MCP dropdown replay also passes; independently inspected saved workbook has all28requested choices and unchanged original values. App/MCP/temp cleanup and empty container inventory verified.
  • Supporting CALC-L01/L02, FOCUS-L04 and CLICK-L03 all passed; independently inspected saved formulas/values, preserved target/sibling text, and all28dropdown choices/help titles. All owned apps exited and remote container inventory is empty. Seven focused public SDK/MCP cases total pass. Canonical affected-platform acceptance remains pending. A separate matched agent smoke has started; no new agent parity result is claimed.
  • The subsequent6c3279 commit only fixes inherited tools module ordering; Rustfmt now passes on Linux/macOS/Windows. GUI acceptance is on compiled8ed. The MCP discovery failure was an inherited roster omission for Linux select_text, already implemented in624. Commit a7be394 adds it to the Linux-only expected roster; exact63tools match the retained CI response, other platforms and output-schema counts are unchanged. Commit2c077003b aligns the second hardcoded Linux roster expectation; all43release-wiring tests pass locally. Both roster commits are test-only. Ordinary CI on the final follow-up remains pending.

Contributor and release checks

  • The PR is focused and the description matches the candidate diff.
  • This correction does not require an RFC.
  • Tests, documentation and remaining validation gaps are described.
  • The title uses the production fix type.
  • No external contribution was adapted in this change.

This branch has not been deployed

No deployments
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