feat: add WebView accessibility lab - #1397
Conversation
Size Report
Startup median (7 runs, lower is better):
Top changed chunks:
|
|
Reviewed exact head f3ac9ef. P2: web.ts classifies any WebView-descended Other with a same-label direct StaticText as text, without proving it is a leaf WebKit wrapper. A legitimate labelled landmark/container such as Other "News" containing StaticText "News" plus a Link also matches; the presenter rewrites the container to text and duplicate suppression removes the actual text child. That contradicts the stated guarantee to retain genuine Other landmarks and can turn a large container into the apparent text target. Restrict the projection to a proven wrapper shape (for example, exclude nodes with semantic sibling/descendant content) and add this direct-child adversarial fixture. The current test covers only a nested same-label StaticText under a Button and misses this case. Current checks are green except one Smoke Tests job still in progress. |
|
Addressed in 4c65a10. WebKit text/heading projection now requires a proven leaf wrapper shape: the |
|
Reviewed exact head 4c65a10. The prior WebView container false-positive is fixed: text/heading projection now requires an exact leaf wrapper with one direct same-label StaticText child and no descendants. The added regression covers the previously missing Other "News" → StaticText "News" + Link "Read more" shape and confirms the landmark remains Other with its semantic child preserved. All current checks are green. No further findings. |
|
* origin/main: docs(adr): rules-first ADR restructure + ADR 0017 proposal (unified event journal) (#1399) feat: add first-class Vega VVD TV support (#1396) fix(replay): preserve cwd scope for opened sessions (#1401) docs: restructure AGENTS.md and CONTEXT.md for progressive disclosure (#1402) fix(cli): compact stale device status (#1388) feat: add WebView accessibility lab (#1397) feat: parameterize sensitive recorded inputs (#1369) fix(daemon): keep an active replay session's daemon alive over the CLI path (#1390) # Conflicts: # docs/adr/0012-interactive-replay.md
Summary
Add a
react-native-webviewaccessibility lab to Agent Device Tester with a deterministic semantic fixture and exploratory targets for Callstack, Vercel, Hacker News, Reddit, W3C Forms, and Wikipedia.Teach iOS interactive snapshot presentation to recognize typed and legacy WebView roots and safely project WebKit's direct
Other -> StaticTextwrapper pairs as text or headings. Preserve genuineOtherlandmarks when XCTest does not expose stronger semantics, keep raw snapshots unchanged, and document scoped WebKit subtrees as an XCTest limitation.Before / after accessibility snapshots
These focused excerpts omit refs and geometry. The first replays the WebKit tree shape captured during iOS testing through
mainand this PR.WebKit wrapper pattern
main)The document-title wrapper is removed, while the heading, paragraph, and link remain in their semantic order.
Tester app fixture
The deterministic
react-native-webviewfixture reproduced the community report on iOS:main)The conversion is scoped to direct
Other -> StaticTextpairs below a WebView. Adversarial fixtures confirm that structural landmarks such as[other] "main", same-label nested action wrappers, and equivalent pairs outside a WebView stay unchanged.Validation
pnpm format:checkpnpm typecheckpnpm lintpnpm build:xcuitestpnpm check:fallow --base origin/mainclaude -p