Found while working on #256.
The SDK's NotificationOptions has data?: Record<string, unknown> ("Custom data payload"), and notifications.show / schedule pass it to the bridge. On iOS, neither scheduler puts it anywhere:
- Swift:
scheduleLocalNotificationinpackages/ios/templates/CraftApp.swiftsetstitle,body,subtitle,badgeandsoundon theUNMutableNotificationContent, and never setsuserInfo. - Zig:
bridge_mobile_notifications.zigreadstitle,bodyandbadgefrom the request (around line 745), and never setsuserInfoeither.
A tap hands the page content.userInfo (#255), and so does an arrival while the app is open (#256). So a local notification scheduled with data: { screen: 'plant-id' } reaches pushNotifications.onNotification as {}. The page can't route on it, which is exactly the "Try it →" case. Remote pushes aren't affected, because their custom keys are already in userInfo.
Fix: set content.userInfo from data in both schedulers. Values need to be property-list types, which JSON already is. Add a test that fails without the fix on each side. The mobile E2E harness can check it end to end the way #257 checks pushes: schedule with data, kill the app, and tap the banner.