v1.9.0
Added
- Shadow DOM piercing in form discovery + fill. `DiscoverForm`,
`FillFormSemantic`, and every interaction tool that routes through
`resolveSelector` (`type`, `click`, batch actions) now walk into
open shadow roots. Inputs inside Lit / Stencil / Vue / React custom
elements are discovered and fillable without changing call shape.
Discovered inputs are tagged with a stable `data-scout-id` so
subsequent fills round-trip across shadow boundaries. - Attribute selectors in `QuerySelectorPiercing`. The flat-node
matcher now handles `[attr="value"]` and `tag[attr="value"]` in
addition to `#id`, `.class`, and bare tags. Lets piercing resolve
the `data-scout-id` selectors emitted by form discovery without
another evaluate round-trip. - `resolveSelector` falls back to piercing before invoking the
text / natural-language paths. Any selector that fails standard
`document.querySelector` automatically retries against the flat
DOM tree before the slower fallbacks run.
Tests
- New `agent/shadow_dom_test.go` covers the full discover → fill →
click → submit loop against a custom element that wraps its form
in an open shadow root.
Why this matters
Every Lit / Stencil / web-components admin UI (and every modern
design system that relies on shadow encapsulation) becomes
scout-drivable without per-app `data-test` escape hatches.