56 lines
1.9 KiB
Markdown
56 lines
1.9 KiB
Markdown
# Smart Gmail Job Correspondence Integration
|
|
|
|
## Phase split
|
|
|
|
### Phase 1
|
|
Deterministic, high-trust Gmail job correspondence integration:
|
|
- OAuth/account connection
|
|
- token refresh lifecycle
|
|
- sync-state tracking
|
|
- manual sync/backfill
|
|
- dedup by Gmail message id
|
|
- deterministic job-linking + confidence routing
|
|
- review queue for medium-confidence items
|
|
- unmatched thread suggestions
|
|
- global inbox + per-job timeline
|
|
|
|
### Phase 2
|
|
Prepared, not deeply implemented in this slice:
|
|
- semantic Gmail-to-job disambiguation
|
|
- richer recruiter/company/role extraction
|
|
- stage/status hinting
|
|
- interview/rejection/offer extraction
|
|
- follow-up/reply suggestion generation
|
|
|
|
## Foundation decisions
|
|
|
|
- Phase 1 remains useful without AI/Ollama.
|
|
- Deterministic evidence remains the primary truth source.
|
|
- Future AI enrichment attaches reasons/confidence alongside deterministic evidence rather than replacing it.
|
|
- Gmail sync state is now durable on the Gmail connection record:
|
|
- `LastSyncAttemptedAt`
|
|
- `LastSyncSucceededAt`
|
|
- `LastSyncMode`
|
|
- `LastSyncSource`
|
|
- `LastSyncStatus`
|
|
- `LastSyncError`
|
|
|
|
## Current code seams
|
|
|
|
- Gmail OAuth and token lifecycle: `JobTrackerApi/Services/GmailOAuthService.cs`
|
|
- Gmail endpoints: `JobTrackerApi/Controllers/GmailController.cs`
|
|
- Gmail connection persistence: `Models/GmailConnection.cs`
|
|
- Correspondence persistence: `Models/Correspondence.cs`
|
|
- Per-job correspondence UX: `job-tracker-ui/src/components/Correspondence.tsx`
|
|
- Future Phase 2 AI seam: `JobTrackerApi/Services/GmailCorrespondenceEnrichment.cs`
|
|
|
|
## What Phase 2 should plug into later
|
|
|
|
The `IGmailCorrespondenceEnrichmentService` seam is intended to accept normalized Gmail message/thread context and return optional semantic hints:
|
|
- probable job match
|
|
- richer confidence rationale
|
|
- extracted recruiter/company/role entities
|
|
- lightweight stage hints
|
|
|
|
Phase 1 should never require this service to return anything useful. The default runtime implementation remains a no-op.
|