VoiceOver Accessibility Patch Series — Testing Evidence
=======================================================

Tester: Martin Sukany
Date: 2026-02-28

Environment
-----------
Host: CM2D4G-A9635005 (macOS 14)
Base: emacs master (upstream HEAD at time of test)


PATCH A: ZOOM (0000)
=====================

1. Patch Application
--------------------
PASS — Standalone Zoom patch applies cleanly via git-am.
No conflicts, no warnings.

2. Build
--------
PASS — Full NS (Cocoa) build completed successfully.
No warnings related to Zoom code.

3. Zoom Cursor Tracking
------------------------
PASS — UAZoomChangeFocus integration:
  - Typing in buffer: Zoom tracks cursor                      OK
  - M-x: Zoom moves to minibuffer                             OK
  - C-x 2, C-x o cycling: Zoom follows across split windows   OK
  - C-x 2, C-x o, C-p: Zoom follows cursor up after switch    OK
    (ns_update_end fallback ensures tracking)

4. No-Zoom Overhead
--------------------
PASS — UAZoomEnabled() returns false when Zoom is off.
Single function call overhead per redisplay cycle (negligible).


PATCH B: VOICEOVER (0001-0008)
===============================

1. Patch Application
--------------------
PASS — All 8 patches applied cleanly via git-am:
  0001 ns: add accessibility base classes and text extraction
  0002 ns: implement buffer accessibility element (core protocol)
  0003 ns: add buffer notification dispatch and mode-line element
  0004 ns: add interactive span elements for Tab navigation
  0005 ns: integrate accessibility with EmacsView and redisplay
  0006 doc: add VoiceOver accessibility section to macOS appendix
  0007 ns: announce overlay completion candidates for VoiceOver
  0008 ns: announce child frame completion candidates for VoiceOver

No conflicts, no warnings.

2. Build
--------
PASS — Full NS (Cocoa) build completed successfully:
  ./autogen.sh                    OK
  ./configure --with-ns           OK
  make -j12                       OK
  make install                    OK

No warnings related to accessibility code.

3. Basic Launch
---------------
PASS — emacs -Q starts without errors or warnings.

4. VoiceOver — Basic Navigation
--------------------------------
PASS — VoiceOver active (Cmd+F5):
  - Buffer name announced on focus                            OK
  - Typing: each character announced                          OK
  - Arrow keys / C-n / C-p: line navigation announced         OK
  - Word navigation (M-f / M-b): word announced               OK
  - M-x: switches to minibuffer, announces "minibuffer"        OK

5. VoiceOver — Completions
---------------------------
PASS — Completion buffer interaction:
  - M-x, partial command, Tab → *Completions*                 OK
  - Tab cycling: announces each candidate                     OK
  - No double-speech                                          OK

6. VoiceOver — Window Switching
--------------------------------
PASS — Multiple windows (C-x 2, C-x 3, C-x o):
  - Announces buffer name and content on switch                OK
  - Notification priority/preemption working                   OK

7. VoiceOver — Full Buffer Reading
-----------------------------------
PASS — VO+A reads entire buffer including off-screen content.

8. VoiceOver — Accessibility Tree
-----------------------------------
PASS — Virtual element tree dynamically maintained:
  - Buffer elements created per window                         OK
  - Mode-line elements readable via VO navigation              OK
  - Tree updates on split/close                                OK

9. VoiceOver — Selection
--------------------------
PASS — C-SPC + movement: announces "selected" with region.

10. VoiceOver — Org-mode Invisible Text
----------------------------------------
PASS — Folded text NOT read, unfolded text read correctly.

11. ERT — ns-accessibility-enabled Variable
--------------------------------------------
PASS — ns-accessibility-enabled bound, defaults to t.

12. VoiceOver — Overlay Completion (Patch 0007)
------------------------------------------------
PASS — Vertico overlay completion:
  - Candidates announced on C-n / C-p                         OK
  - Selected face detected (vertico-current)                   OK
  - Deduplication working                                      OK
  - hl-line-mode compatibility (textDidChange flag)            OK

13. VoiceOver — Child Frame Completion (Patch 0008)
----------------------------------------------------
PASS — Corfu child frame completion:
  - Candidates announced via VoiceOver                         OK
  - Selected face detected (corfu-current)                     OK
  - No Emacs freeze (re-entrance guard)                        OK
  - Focus restored to parent after popup closes                OK
  - Non-completion child frames skipped (10KB limit)           OK

14. Performance — ns-accessibility-enabled=nil
-----------------------------------------------
PASS — When set to nil:
  - No virtual elements built                                  OK
  - No notifications posted                                    OK
  - ns_draw_window_cursor skips cursor rect store              OK
  - Zero measurable overhead                                   OK

15. Documentation
-----------------
PASS — Texinfo node accessible via C-h i g (emacs)VoiceOver.
etc/NEWS entry present and accurate.
