Calendar and meetings¶
Responsibility¶
Calendar aggregates local Vault events with connected Google Calendar and CalDAV accounts. It supports calendar selection, event CRUD, invitations, RSVPs, free/busy queries, geocoding, reminders, hidden-event state, ICS export, meeting recording, transcription, and AI-generated notes.
Event aggregation¶
The route layer resolves workspace context and selected integrations, then normalizes provider events and local Markdown events into a shared response. Provider identifiers remain paired with their account/calendar origin; an ID alone is not globally unique enough for mutation.
Hidden events are local overlay records. Hiding does not delete a provider event. Unhide removes the overlay so the next aggregation includes it again.
Mutation flow¶
sequenceDiagram
participant UI as Calendar UI
participant API as Calendar routes
participant Resolver as Integration resolver
participant Provider as Google or CalDAV
participant Vault as Local event page
UI->>API: Create, patch, delete, RSVP, or invite
API->>Resolver: Resolve account and enforce editor role
alt Remote event
Resolver->>Provider: Provider-specific operation
Provider-->>API: Normalized event or error
else Vault event
Resolver->>Vault: Contained Markdown operation
Vault-->>API: Updated local event
end
API-->>UI: Unified response
Reminders and meeting notes¶
Reminder settings select lead time and behavior. Collection merges upcoming events and deduplicates concurrent requests so duplicate reminders are not created. The frontend watcher displays active reminders and can navigate to the calendar or dismiss them.
Meeting recording uploads bounded audio to a background workflow. Status polling separates recording, transcription, summarization, note creation, completion, and failure. Generated notes are written through Vault-safe operations and retain event/source context.
Invariants¶
- Provider event identity includes account and calendar context.
- Calendar writes require an editor-capable context.
- Path-based local events remain inside the active vault.
- Hiding is local and reversible; deletion uses the authoritative provider.
- Reminders are race-safe and do not duplicate for the same event/window.
- Missing transcription or AI providers fail the meeting job, not the calendar.
- ICS output uses normalized time zones and does not expose private credentials.
Verification focus¶
Test local path containment, event normalization, recurrence, hidden state, reminder races, account selection, time zones, and Playwright create/edit/delete flows. Meeting QA should record or upload a fixture, observe background status, and verify the resulting Vault page.