validate_url
Validates Tactual's navigation path predictions by simulating a screen reader, checking each target's reachability and step count, then comparing to the predicted count.
Instructions
Validate Tactual's predicted navigation paths against a virtual screen reader. Runs analyze_url internally, then for each worst finding drives @guidepup/virtual-screen-reader over the captured DOM (via jsdom) to check: (a) is the target reachable at all, and (b) how many virtual SR announcements does it take to reach it? Compares to Tactual's predicted step count. Returns an accuracy ratio per target and a mean across all validated targets — closer to 1.0 means Tactual's predictions match this virtual-screen-reader run, not a guarantee of full real-AT fidelity.
Requires (optional deps): jsdom + @guidepup/virtual-screen-reader. Installed with tactual if optionalDependencies were honored; otherwise run npm install jsdom @guidepup/virtual-screen-reader in your project.
When to use: closing the modeled-vs-virtual loop. If Tactual's predictions diverge a lot from the virtual SR, either the profile weights need calibration or the page has structural patterns the analyzer doesn't model. Use sparingly — this adds the analyze_url cost plus jsdom parsing + virtual SR navigation time.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | URL to analyze and validate | |
| channel | No | Browser channel: chrome, chrome-beta, msedge | |
| profile | No | AT profile ID (default: nvda-desktop-v0). Use list_profiles to see options. | |
| stealth | No | Apply anti-bot-detection defaults | |
| timeout | No | Page load timeout in ms | |
| strategy | No | Navigation strategy for the virtual SR. 'linear' uses Tab/Shift-Tab (keyboard flow); 'semantic' uses heading/landmark skip commands (screen-reader flow). Semantic is more representative for NVDA/JAWS/VoiceOver users. | semantic |
| waitTime | No | Additional wait after load (ms) | |
| maxTargets | No | Maximum findings to validate (worst-first). Higher = slower but more signal. | |
| storageState | No | Path to a Playwright storageState JSON (for authenticated pages). Must be within the current working directory. |