You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
refactor: complete the find cutover onto the request-bound runtime (#1944)
* refactor: complete the find cutover onto the request-bound runtime
The deferred Wave 4 unit for #1739 (R35), unblocked by focus (R40) and type
(R41). Find's read-only legs, focus leg, and type leg already ran bound; the
one remaining direct platform execution was the mutating-target capture, which
built createSelectorCaptureRuntime without a bound capture and fell through
the legacy dispatch branch reserved for "the last one to migrate".
- The mutating path now enters resolveBoundSelectorCapture — the selector
family's shared admit-then-bind entry, which already named find in its
intent table — and threads the bound capture into the target capture.
- Find was that last one: `capture` on SelectorCaptureRuntimeParams is now
required and the legacy fallback branch is deleted. The backend's `bound`
becomes required-to-state, with the observation-free duration wait
(`wait 400`) as the one declared absence — its runtime now carries no
capture backend at all, so an accidental capture fails loudly instead of
falling anywhere.
- The descriptor flips to device-runtime with findRuntimePlanUses (the
selector-text plans shared with get, plus focusRuntimeUse and
typeTextRuntimeUse); the capability bucket and both overlay memberships
(HARMONYOS_SUPPORTED_COMMANDS, WEB_QUERY_COMMANDS) are deleted.
- R35 lands with the selector family's shared operation owners; the capture
and backend tests move off the dispatch mock onto the bound seam, which is
where the poll-deadline and private-ax-pin assertions actually live now.
Wave 4 is complete: layering recognizes 26 migrated commands.
* fix(find): one action-selected bind per mutating handler (ADR 0019 §9)
Review P1 on #1944: a mutating find performed up to three separate
facts/admit/bind projections — capture, then focus, then type re-admitted
per leg. The request handler now resolves ONE action-selected plan and binds
once:
- New selector intents find-focus / find-type carry combined uses
(capture + focusPoint, capture + focusPoint + typeText) through the same
admit-then-bind path and plan machinery every selector capture uses; the
new bind arms reuse the existing capture selectors, so the shared operation
owners stay single. Delegated click/fill resolve targets on the plain
capture pair.
- The handler threads the one bind's operations to the shared executors:
executeFocusPoint is extracted as the single lexical owner of the focusPoint
call (R40's owner claim follows it), and executeBoundTypeText's runtime
param narrows to the operations it actually uses so find can pass its own
broader bind through it.
- findRuntimePlanUses becomes the full action-selected set (eight uses), and
the descriptor test pins each use's exact requirement list.
- Regression: find focus and find type each assert exactly one facts
inspection and one bindDevice call — the pre-fix handler fails both (two
and three binds respectively).
Live re-verified on iPhone 17 Pro at this head: find focus and find type both
execute through the single bind, route synthesized-first-responder, typed text
visible in the captured tree.
0 commit comments