Files
WhispAssist/docs/adr/0008-pst-calendar.md
T

2.0 KiB

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).