Umbrella tracking issue for the gap: waivers pinned in src/contracts/interaction-guarantees.ts (ADR 0011, PR #1080). Every gap cell in the registry links here (or to a sub-issue split off from here). The pin test keeps the list in sync: a gap cannot appear or disappear without a reviewed diff.
Gaps by closure strategy (per the ADR's hybrid decision):
Runner-side parity (geometry-local rules, golden fixture tables — Layer 3)
direct-ios-selector/disambiguation — success-path parity: XCTest may pick a hittable candidate runtime rules would refuse or rank differently; delegation-on-error cannot catch this. Stays a gap until parity tables/contract scenarios prove the success path.
Delegation-on-error (semantic/rich-runtime cases — better diagnostics only when the fast path fails)
direct-ios-selector/errorTaxonomy — ELEMENT_NOT_FOUND/AMBIGUOUS_MATCH lack selector diagnostics and hints
direct-ios-selector/occlusion — no covered-element check on the direct path
direct-ios-selector/nonHittable — non-hittable matches skipped instead of promoted/annotated
maestro-non-hittable-fallback/errorTaxonomy — shares the direct path error shapes
Shared runtime preflight before the backend call (native-ref: the ref came from a daemon snapshot, so check that node BEFORE tapTarget/fillTarget — a backend fast path can silently succeed, so delegation-on-error will not reliably trigger)
native-ref/occlusion
native-ref/offscreen
native-ref/nonHittable
Layer-2 response construction consolidation (single buildInteractionResponseData construction site + hand-rolled-literal guard)
Identity fields on the direct path
direct-ios-selector/responseIdentity — refLabel/selectorChain absent from direct-path responses
Cheap warning
coordinate/offscreen — out-of-viewport coordinates forwarded silently; a bounds warning would be cheap
Umbrella tracking issue for the
gap:waivers pinned insrc/contracts/interaction-guarantees.ts(ADR 0011, PR #1080). Every gap cell in the registry links here (or to a sub-issue split off from here). The pin test keeps the list in sync: a gap cannot appear or disappear without a reviewed diff.Gaps by closure strategy (per the ADR's hybrid decision):
Runner-side parity (geometry-local rules, golden fixture tables — Layer 3)
direct-ios-selector/disambiguation— success-path parity: XCTest may pick a hittable candidate runtime rules would refuse or rank differently; delegation-on-error cannot catch this. Stays a gap until parity tables/contract scenarios prove the success path.Delegation-on-error (semantic/rich-runtime cases — better diagnostics only when the fast path fails)
direct-ios-selector/errorTaxonomy— ELEMENT_NOT_FOUND/AMBIGUOUS_MATCH lack selector diagnostics and hintsdirect-ios-selector/occlusion— no covered-element check on the direct pathdirect-ios-selector/nonHittable— non-hittable matches skipped instead of promoted/annotatedmaestro-non-hittable-fallback/errorTaxonomy— shares the direct path error shapesShared runtime preflight before the backend call (native-ref: the ref came from a daemon snapshot, so check that node BEFORE tapTarget/fillTarget — a backend fast path can silently succeed, so delegation-on-error will not reliably trigger)
native-ref/occlusionnative-ref/offscreennative-ref/nonHittableLayer-2 response construction consolidation (single buildInteractionResponseData construction site + hand-rolled-literal guard)
responseConstructionon all six paths — per-branch hand-rolled response assembly is the class of bug that dropped fill @ref evidence (feat(interaction): opt-in --verify evidence for press/click/fill #1064 review)Identity fields on the direct path
direct-ios-selector/responseIdentity— refLabel/selectorChain absent from direct-path responsesCheap warning
coordinate/offscreen— out-of-viewport coordinates forwarded silently; a bounds warning would be cheap