Found while scoping push E2E coverage after #255.
When a push (or a local notification) arrives while the app is in the foreground, userNotificationCenter(_:willPresent:withCompletionHandler:) in packages/ios/templates/CraftApp.swift shows the banner and returns. Nothing reaches the page. The SDK's pushNotifications has register, onToken and onNotification, and onNotification is taps only (craftNotificationResponse).
So a page that is open when a push lands can't react to it. For example, it can't refresh an inbox, bump a badge in its own UI, or decide the banner isn't needed because the person is already looking at that screen. It only hears about the push if someone taps the banner.
Not covered here: silent / content-available pushes. application(_:didReceiveRemoteNotification:fetchCompletionHandler:) isn't implemented either. That's background delivery, and a separate decision.
Suggested shape: dispatch a craftNotificationReceived event from willPresent with the notification's userInfo, plus its title and body. Add pushNotifications.onReceive(callback) to the SDK. A running page is the only listener that matters here, so no cold-start replay is needed. Whether the page should be able to suppress the banner is an open question, because willPresent has to answer synchronously-ish through its completion handler.
The E2E harness can cover it the way it covers taps: simctl push while the probe app is in front, then judge what the page reports.