# Screen reader and programmatic verification record for sample 1

Date: October 4, 2026. Additional evaluation performed after the cancelled physical VoiceOver setup. All data synthetic.

## Method and evidence boundaries

Playwright 1.63.0 in isolated headless Chromium 153.0.8010.12 and WebKit 26.6; Guidepup Virtual Screen Reader 0.33.0, bundled with esbuild 0.28.2, running over the actual loaded browser DOM. No owner Chrome profile, VoiceOver, system authorization, or jsdom fixture was used. Browser instrumentation was injected using Playwright evaluation; the public CSP and application source were unchanged. WebKit Option+Tab reaches all controls without changing macOS/Safari preferences.

`accessibility-tree-live-<engine>-<state>.yml`: Playwright ariaSnapshot, a computed semantic representation. `native-ax-live-chromium-<state>.json`: additional Chromium CDP native AX tree. WebKit native platform AX was not captured. `accessibility-details-live-*.json`: accessible names and descriptions calculated by dom-accessibility-api, required/invalid/value/checked properties, actual focused element, live-region attributes and scoped headers. ariaSnapshot alone does not serialize every description/live property, so these complementary records are required.

`virtual-sr-transcript-live-<engine>-<state>.txt`: actual per-phrase output from a complete virtual traversal of that state, ending at end of document. `*-event.txt`: continuous virtual-reader log across the application mutation; no manual move to the status region. `axe-vsr-live-*.json`: zero WCAG A/AA violations for every captured state. `sr-evidence-validation-live.json`: explicit assertions on the captured output. `../../virtual-sr-results-live.json`: complete run, 42 states across both engines.

These are simulated speech phrases, not recorded VoiceOver/NVDA audio. The simulator in Chromium includes the raw noscript fallback despite scripting being active; the real Chromium AX and ARIA snapshots exclude that fallback. Some polite live mutations produce duplicate model phrases. These known simulator differences are retained unedited, not misrepresented as real-reader behavior. Exact physical-reader timing, suppression and duplication remain untested.

## Completed scenarios — Chromium and WebKit

- Initial form: all six field names contain the visible required label, expose required state and correct help from aria-describedby. Subsequent steps and the final confirmation retain the same relationships.
- Empty Continue: focus moves to errors; six linked corrections match six invalid fields. Each error link was focused and activated, returning focus to its corresponding field. Virtual phrases include label, help, inline error and invalid state.
- Bad email, missing step-2 fields, impossible February date, completion before start, and unchecked confirmation: error summary and invalid-field descriptions correctly exposed and spoken virtually.
- Save/restore/delete dialogs: named native dialog and explanatory description, initial Keep editing focus; Tab/Shift+Tab containment, Escape and trigger focus return checked. Keep editing preserves values.
- Draft saved/restored/deleted and storage failure: actual DOM mutations caused automatic polite phrases in both engines. role=status, aria-live=polite, aria-atomic=true retained. Restore returns focus to the step heading; values survive reload.
- Step 2/3/4 and final submission: focused headings and virtual phrases match the active state; hidden steps are absent from the browser snapshots. Review/back retains values; submission clears the draft and focuses the DAC-ready heading.

## ACR disposition

4.1.3 changed from Partially Supports to Supports; 4.1.2 retained Partially Supports based on programmatically determinable behavior demonstrated in the browser trees, descriptions, interactions and virtual output. All 50 criteria: **35 Supports / 1 Partially Supports / 14 Not Applicable**. This is not a claim of physical-screen-reader interoperability testing.

## Further model mismatch investigation

virtual-sr-model-limitations-chromium.json and -webkit.json reproduce the checked-state discrepancy with virtual.act() and a fresh Virtual instance: actual consulted.checked is true; native Chromium AX checked is true; model phrase remains not checked. Full model and computed ARIA traversal includes native modal background content; the native Chromium AX suppresses it. This is not treated as a webpage failure. It is an explicit limitation of the requested dual-method evidence, so 4.1.2 remains Partially Supports. Typed textarea values are retained correctly in native AX and application review, but the virtual model's field phrase can omit that value; don't infer complete value announcements from those phrases.
