cocottetech/@platform/codebase/@features/ai-copilot/docs/notifications-settings.screen.md

87 lines
4.9 KiB
Markdown
Raw Normal View History

# notifications-settings.screen
S3 settings category — notification channel × stakes × specialist preferences. Implements per [brief S §S3](./S-settings-ia.brief.md) + [brief C](./C-notifications.brief.md) matrix. Reached from settings-root.screen.md "Notifications" card. Voice: working.
## Layout (full-screen sheet)
```
┌─────────────────────────────────────────────────┐
│ ◄ Settings Done │ 56pt
├─────────────────────────────────────────────────┤
│ │
│ ─── Channels ─── │
│ ☑ iOS push │
│ ☑ iMessage self-notify │
│ ☑ Email digest │
│ ☐ Apple Watch │ AB only on if Watch paired
│ │
│ ─── By stakes ─── │
│ Push iMsg Email Watch │ matrix per brief C
│ High ☑ ☑ ☑ ☑ │
│ Med ☑ ☐ ☑ ☐ │
│ Low ☐ ☐ ☑ ☐ │
│ │
│ ─── Quiet hours ─── │
│ From: [ 22:00 ▼ ] To: [ 08:00 ▼ ] │
│ Override for high-stakes: ☑ allow │
│ │
│ ─── Per-specialist ─── │
│ • ai-copilot [ inherits ▼ ] │
│ • triage [ high+med only ▼ ] │
│ • content-x [ inherits ▼ ] │
│ • bookings-tryst [ failure-only ▼ ] │
│ [ See all 11 → ] │
│ │
│ ─── Daily digest ─── │
│ ☑ Show in-app at first chat open │
│ ☑ Send via email at 06:00 local │
│ [ Customize sections → ] │
│ │
└─────────────────────────────────────────────────┘
```
## Components
| Component | Notes |
|---|---|
| Channels | 4 channels Quinn can opt into. Watch greyed when no Watch paired. |
| Stakes matrix | 3×4 grid: high/med/low × channel. Per brief C default-checked pattern. |
| Quiet hours | Time range + high-stakes override flag. |
| Per-specialist | Per-specialist preference: inherits / high+med only / failure-only / off. |
| Daily digest | In-app daily-digest.screen.md surfacing toggle + email cadence. |
## States
1. **Default** — sensible matrix per brief C. Quiet hours empty (no restriction).
2. **No push permission** — top banner: "Cocotte doesn't have push permission. Grant in iOS Settings."
3. **Watch unpaired** — Watch column greyed.
4. **All channels off** — banner: "Cocotte can't reach you. Approvals will queue in-app only. Enable at least one channel."
5. **Quiet hours covering current time** — banner: "It's quiet hours now. Cocotte's holding notifications."
6. **Per-specialist override active** — chip: "{N} specialists overriding defaults."
7. **VoiceOver** — matrix announced as table; channel columns announced as headers.
## Interactions
- **Tap a stakes-matrix cell** → toggle that channel for that stakes tier.
- **Tap quiet hours picker** → time range editor.
- **Tap per-specialist row** → preference picker for that specialist.
- **Tap "Customize sections"** → daily-digest section toggles (which sections appear).
- **Tap "See all 11"** → full per-specialist list.
## Edge cases
- **High-stakes notification during quiet hours, override off** — Cocotte still sends via iMessage as fallback (per brief M fallback hierarchy).
- **Email channel set but Quinn's email unverified** — chip "Email unverified. Add a working address."
- **Daily digest off + chat-home open at 06:00** — Cocotte still shows the pinned card (digest section toggle covers the email, not in-app).
## Related
- [Brief S §S3](./S-settings-ia.brief.md) — parent.
- [Brief C](./C-notifications.brief.md) — channel × stakes matrix design.
- [Brief M §M4](./M-error-degraded-modes.brief.md) — fallback hierarchy.
- [daily-digest.screen.md](./daily-digest.screen.md) — in-app digest target.
- [specialist-drawer.screen.md](./specialist-drawer.screen.md) — per-specialist override entry.
## Out of scope
- Per-channel quiet-hours overrides (defer).
- Notification-action quick replies (P3+).