feat: Receipts commitment tracker
OP
2mo ago+1784+1784+0123456789012345678901234567890123456789-1-1-0123456789
Summary
Automatically extracts commitments (promises, obligations) from conversation transcripts, tracks them through to fulfillment, and notifies the user about upcoming deadlines and missed commitments.
What's included
Data layer
- CommitmentRecord (GRDB) +
commitmentstable migration inRewindDatabase - CommitmentStorage actor — local CRUD, session dedup, backfill query (mirrors ActionItemStorage pattern)
- Local-only MVP — no backend sync (future work)
Extraction (GeminiClient JSON schema)
- CommitmentExtractor — scans finalized conversation transcripts for explicit commitments
- Uses
sendRequest(prompt:systemPrompt:responseSchema:)— guaranteed JSON output
Follow-through detection
- CommitmentFollowThroughDetector — scans new conversations for evidence that prior pending commitments were fulfilled
Notifications
- CommitmentNotificationScheduler — first use of
UNTimeIntervalNotificationTriggerin the app for scheduled deadline reminders (2h lead time)
Orchestration
- CommitmentService actor — runs the full pipeline: follow-through → extraction → overdue check
- Hooks into 5 conversation completion paths
- Backfill scan on app launch for up to 20 past conversations
UI
- CommitmentsPage in sidebar with Overdue / Pending / Missed / Fulfilled sections
- CommitmentsStore (ObservableObject) for reactive UI
Testing
- Compiles cleanly
- No new test failures — pre-existing Firebase Auth crash is identical on main