39 lines
2.0 KiB
Markdown
39 lines
2.0 KiB
Markdown
# ADR-0008 — Calendar & Outlook .pst integration
|
|
|
|
- **Status:** Accepted
|
|
- **Date:** 2026-06-30
|
|
- **Context source:** Design doc §"Calendar Integration", §"Outlook .pst Integration"
|
|
|
|
## Context
|
|
|
|
WA enriches meetings with calendar context (title, organizer, attendees) and reads local Outlook
|
|
`.pst` backups to build meeting history and suggest speaker names — all local, no cloud sync
|
|
required.
|
|
|
|
## Decision
|
|
|
|
- **`.pst` reading:** use the Rust **`outlook-pst`** crate (read-only, MS-PST-based) to extract
|
|
calendar appointments and attendees. Fall back to **libpff** (`pffexport`/FFI or a small
|
|
sidecar) for password-protected or edge-case files. PST is **read-only input**; WA never writes
|
|
to it.
|
|
- **Live calendar:** abstract behind a `calendar::CalendarSource` trait. Phase 6 ships the PST
|
|
source. Microsoft Graph (with explicit user consent) and local ICS files are future sources
|
|
behind the same trait; Graph is the *one* allowed remote call and only for calendar metadata,
|
|
never meeting content, and only with consent.
|
|
- **Reminders:** action items become **local OS notifications** (Windows toast); optional
|
|
calendar entry creation is deferred and, where added, stays local/consented.
|
|
- **Participant-aware naming:** attendee names from the selected event populate the speaker-naming
|
|
dropdown (FR-SPK-2), with an "add new name" escape hatch; mappings persist per meeting.
|
|
|
|
## Consequences
|
|
|
|
- **Positive:** delivers Granola-style context fully offline from data the user already has;
|
|
trait keeps Graph/ICS additions non-invasive; read-only PST avoids corrupting user mail stores.
|
|
- **Negative:** PST parsing is fiddly (encryption, large files, format variance) → keep libpff as
|
|
a fallback and treat parse failures as non-fatal; Graph path (future) introduces OAuth + the
|
|
product's only remote dependency, so it must be strictly opt-in and clearly labeled.
|
|
|
|
## Revisit if
|
|
`outlook-pst` proves insufficient in practice (promote libpff to primary), or users need live
|
|
Exchange more than PST (prioritize the Graph source).
|