Amends 0086.
Context
0086 made every channel free. The owner’s notification answers N3 to N5, B36 (mem L686–688, L696–697, 2026-10-20) add channels, cascading templates, manual sends and where preferences live.Decision
- Channels (N3). Adds Unifonic and Taqnyat for SMS, the WhatsApp Cloud API, web push with VAPID, voice through Twilio, and chat apps (Slack, Teams and Telegram).
- Single layer (N4). Notifications is the one delivery layer. Every channel goes through it.
- Templates (N5). Templates come from code defaults, then tenant overrides, then a console editor. The cascade follows the scope chain.
- Manual sends. A person can send a notification at any scope, with guardrails. The permission
notifications.message.sendis never granted by default. - Preferences (B36). Notification preferences live in the notifications package, an exception to the settings rule (ADR 0213).
- Spec location. The notifications spec lives at
.agents/specs/sta-35-notifications.
Consequences
- A tenant can change a template without a deploy, and the default is always there.
- A manual send is a permission grant, so it can be audited and revoked.
Enforcement
planned — the cascade test covers code default, tenant override and console edit; the default-deny ofnotifications.message.send is checked by the permission catalogue.
Supersedes and sources
Supersedes: none. Amends: 0086. Sources: owner notification answers N3–N5, B36 (stackra-decisions-2026-10-19.md L686–688, L696–697, 2026-10-20). Closes gap B9 (spec path).