STALE_REF is passive: every screen mutation stales refs and costs the agent a full error→re-snapshot→re-find→retry round-trip; swallowed taps report success unverified (wedged-runtime spec 263). Store identity signatures (testID/label/role/text) per ref; on stale, refreshRef() re-binds by attrs-minus-bounds requiring a UNIQUE match (Maestro's rule — never guess-tap) and taps the recomputed center; post-tap, settle-hash unchanged ⇒ one automatic retry then meta.noUiChange; 3 consecutive noUiChange ⇒ degraded-runtime hint. Ambiguous/absent keeps STALE_REF, now with candidates.
Spec: https://github.com/Lykhoyda/rn-dev-agent/blob/limestone-malpais/docs/stories/05-self-healing-taps.md (PR #381)
Impact: most STALE_REFs become transparent in-tool repairs · Effort: M · Depends: #385 (Story 04)
STALE_REF is passive: every screen mutation stales refs and costs the agent a full error→re-snapshot→re-find→retry round-trip; swallowed taps report success unverified (wedged-runtime spec 263). Store identity signatures (testID/label/role/text) per ref; on stale, refreshRef() re-binds by attrs-minus-bounds requiring a UNIQUE match (Maestro's rule — never guess-tap) and taps the recomputed center; post-tap, settle-hash unchanged ⇒ one automatic retry then meta.noUiChange; 3 consecutive noUiChange ⇒ degraded-runtime hint. Ambiguous/absent keeps STALE_REF, now with candidates.
Spec: https://github.com/Lykhoyda/rn-dev-agent/blob/limestone-malpais/docs/stories/05-self-healing-taps.md (PR #381)
Impact: most STALE_REFs become transparent in-tool repairs · Effort: M · Depends: #385 (Story 04)