Skip to content

Experiment: retire the native-ref fast path (delete a whole matrix row) #1088

Description

@thymikee

Follow-up from the ADR 0011 work and the dead-code audit (2026-07-04).

Post-#1082, native-ref (backend.tapTarget/fillTarget for click/fill @ref) and runtime-ref consume the same stored session snapshot: the fast path now runs the shared preflight daemon-side and then pays a runner round trip for live re-resolution, where the runtime path would instead do a coordinate tap from the node it already validated. The fast path's remaining value proposition is runner-side live element re-resolution (element moved since snapshot → tapTarget still hits it; a coordinate tap would miss).

Hypothesis: with refs being short-lived by convention (STALE_REF hints, freshness machinery) the live-re-resolution win is rare enough that the path no longer pays for its existence — and deleting it removes an entire row from the guarantee matrix (the most durable erosion fix available), plus hasNonDefaultTapOptions, the backend tapTarget/fillTarget surface on iOS, and their runner protocol arms.

Experiment before believing it:

  1. Run the react-navigation Maestro suite (185 tapOns) with the native-ref path force-disabled (route @ref clicks through runtime-ref), compare pass rate and duration.
  2. Same on the repo's replay/smoke suites.
  3. If parity holds: deprecate behind a kill-switch env for one release, then delete.

Origin of the path is Maestro-replay reliability, so the Maestro suite is the deciding oracle. Do not delete on inspection alone.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions