Local protocol simulator / zero network traffic
Permission is one state.
Try the consent, subscription, expiry, quiet-hours and duplicate-send paths. The in-app inbox retains the work even when a push pointer cannot be sent.
Evidence boundary: This page never requests browser permission, creates a PushSubscription, contacts a push service, or proves display. Every result is a simulated state transition.
Choose a fixture
Current contract
Topic choice
Permission
Endpoint
Inbox items
Push evidence
Transition ledger
“Accepted by push service” is not “displayed.” The display and open rows below are simulated separate observations.
A real implementation also needs authenticated server routing, endpoint protection, service-worker payload validation, device/browser tests, and an actual inbox.