# V2 Screen Reader Bridge

This runbook covers `TODOS.phase-72.72.13.1.6`: the V2UI screen reader bridge
that exposes the UI element tree to platform accessibility APIs: UIAutomation on
Windows, NSAccessibility on macOS, and TalkBack on Android.

## Runtime Surface

The screen reader bridge lives in V2UI:

- C++ header: `V2/ue/Source/V2UI/Public/V2ScreenReaderBridge.h`
- C++ source: `V2/ue/Source/V2UI/Private/V2ScreenReaderBridge.cpp`
- automation spec: `V2/ue/Source/V2Tests/Private/UI/ScreenReaderBridge.spec.cpp`
- contract:
  `V2/ue/Content/V2/UI/Accessibility/ScreenReaderBridge_V2_Contract.json`
- focused checker: `V2/ue/Tools/check-v2-screen-reader-bridge.py`

`FV2ScreenReaderBridge::BuildDefaultTree` returns
`Accessibility.ScreenReaderBridge.V2`, a stable UI element tree with platform
bindings for:

- `UIAutomation`
- `NSAccessibility`
- `TalkBack`

## Node Tree

The bridge exports `FV2ScreenReaderBridgeNode` entries with stable node ids,
parent/child links, platform roles, labels, values, hints, focus order, actions,
and live-region metadata. Required roles are Window, Button, Text, List,
ListItem, and LiveRegion.

`FV2ScreenReaderBridge::BuildNodeFromQuestDescriptor` converts existing
`FV2QuestUIAccessibilityDescriptor` summaries into bridge nodes so quest journal
and tracker accessibility text can be exposed through the same platform bridge.

## Release Policy

The bridge is valid only when it:

- exports a UI element tree;
- maps roles for UIAutomation, NSAccessibility, and TalkBack;
- preserves stable node ids and focus order;
- supports focus events and value-changed events;
- emits live-region announcements;
- exposes action hints for focusable nodes;
- rejects unlabeled or duplicate nodes.

## Verification

Run these checks after changing the screen reader bridge:

```bash
python3 V2/ue/Tools/check-v2-screen-reader-bridge.py
python3 V2/ue/Tools/check-v2-ui-module.py
python3 V2/ue/Tools/check-v2-ci-workflow.py
python3 V2/tools/validate-v2-docs.py
python3 -m py_compile V2/ue/Tools/check-v2-screen-reader-bridge.py V2/ue/Tools/check-v2-ci-workflow.py
python3 -m json.tool V2/ue/Content/V2/UI/Accessibility/ScreenReaderBridge_V2_Contract.json
```

Automation test name: `V2.UI.Accessibility.ScreenReaderBridge.AssetContract`.

## Horde Gates

- `screen-reader-bridge-source`
- `screen-reader-bridge-platforms`
- `screen-reader-bridge-node-tree`
- `screen-reader-bridge-live-regions`
- `screen-reader-bridge-automation`
- `screen-reader-bridge-ci-wired`
