Clean successor to V3 (forge: lilith/atlilith). Seeded from local Mac working tree at ~/Code/@projects/@cocottetech/. node_modules and build artifacts excluded via .gitignore. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
86 lines
4.9 KiB
Markdown
86 lines
4.9 KiB
Markdown
# 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+).
|