Actual iOS UI failure, after fixing a separate STX double-toggle bug
Craft main 45a33630e45b6ba84a43008ea3a36596f7287278, clean checkout; Xcode 26.6, iPhone 17 Pro / iOS 26.5. No Craft source edits. STX source includes 122674a739 (unreleased after v0.2.663).
The shared-source screen has a Tooltip's native Pressable wrapper around the shared Button's native Pressable. One XCTest tap should invoke the Button action once and open the hint:
<Tooltip content="Helpful native hint">
<Button testID="tooltip-trigger" @click="helpTaps.set(helpTaps() + 1)">Help</Button>
</Tooltip>
<span testID="help-taps" :text="'Help taps: ' + helpTaps()"></span>The dedicated light-appearance XCTest passed: one action callback, hint visible, outside dismissal. A subsequent dark-appearance run against the same built app lost the Button action. The tap was synthesized on app.buttons["tooltip-trigger"], but the exported accessibility snapshot still reads:
StaticText, identifier: 'help-taps', label: 'Help taps: 0'The run's two other selected UI checks (Popover clipping/action/reopen and TabList selection) passed. This is not a claim that appearance causes the failure; the evidence establishes inconsistent delivery on the nested pressable shape.
Host contract to investigate
packages/ios/templates/CraftNativeScreen.swift:8961 installs a separate UITapGestureRecognizer for each actionable view with no nested-actionable-view delegate. The generic view reconciliation path also installs it on component/container ancestors carrying handlers. Competing ancestor/child recognizers are a likely cause; please verify which recognizer consumes the touch. STX already performs logical event bubbling after receiving the physical event, so losing the innermost Button event cannot be repaired by invoking only the ancestor handler.
There was also a deterministic STX bug: Button's emitted click plus the original press toggled Tooltip twice. That is fixed separately in 122674a739, with normal/minified shared-source protocol tests. Those tests now deliver one Button action and an open Tooltip. The remaining device result above is after that fix.
Acceptance
Repeated real taps on a shared Button nested in a pressable/delegating component deliver the Button action exactly once. Keep parent component behavior working through the event contract, and verify scrolling from a control still cancels taps correctly. Please include an actual simulator test rather than only invoking a recognizer callback directly.
Evidence: generated StxPortability project at /var/folders/sq/p6y46h2x6ddgq6w1yyxhd_9h0000gn/T/stx-portability-ios-pyG3uL; TestResults-tooltip.xcresult is the passing selected light case, TestResults-dark.xcresult contains the lost tap. Exported attachment 8CB43C56-125F-4550-AAD9-E4B73852F384.txt records the zero count.
STX tracks the remaining integration in stacksjs/stx#2089; a separate agent owns Craft implementation. The STX-owned Swift fixture/SDK runner will be committed for replay.