What problem does it solve? Deciding whether and how an Android app should notify users about business events is error-prone: over-notifying burns the revocable, app-wide notification permission, while under-notifying loses critical events. This Skill classifies each event on six axes, walks an ordered gate chain so the cheapest sufficient channel wins, records a justified ledger row, and writes the device-side notification code per spec. ## Core Features & Use Cases - Channel derivation: Classifies events on six axes (origination, presence, time sensitivity, actionability, consequence, continuity) and runs the ordered gate chain, recording both the matched gate and the rejected cheaper gate in project/notification-ledger.md. - Read-only audit: Scans every notify() call site, channel creation, and foreground-service start, reconciles them against the ledger, and reports severity-classified findings with file, line, and spec section. - Code application: Writes channel creation with permanent importance, NotificationCompat builds, grouping with summaries, conversation/call styles, foreground-service and Live Update contracts, plus SDK guards for canUseFullScreenIntent() and canPostPromotedNotifications(). - Use Case: When a product owner asks whether the app should notify users that an order shipped, the Skill classifies the event, matches the Await gate, records the ledger row, hands POST_NOTIFICATIONS to the permissions skill, and writes the shipping channel and notification code. ## Quick Start Ask the assistant to derive the notification channel for a business event in your Android project, for example whether the app should notify the user when their order ships.