955cae6d4b
- JobTrackerApi/Controllers/GmailController.cs - JobTrackerApi/Services/GmailOAuthService.cs - JobTrackerApi.Tests/GmailControllerTests.cs - .gsd/milestones/M001/slices/S01/S01-PLAN.md - .gsd/KNOWLEDGE.md
2.0 KiB
2.0 KiB
title, status, files, verification
| title | status | files | verification | ||||||
|---|---|---|---|---|---|---|---|---|---|
| T03 summary | done |
|
|
Wired the job-aware Gmail matching contract into the actual job workspace UI.
What changed:
job-tracker-ui/src/types.ts- added frontend contracts for job-aware Gmail matches, match reasons, import results, and enriched correspondence metadata
job-tracker-ui/src/components/JobDetailsDialog.tsx- now passes the loaded
jobintoCorrespondenceso the Gmail tab can stay job-aware without another job fetch
- now passes the loaded
job-tracker-ui/src/components/Correspondence.tsx- replaced client-side Gmail ranking as the primary workflow
- Gmail tab now calls
/gmail/job-candidates - shows confidence, score, match reasons, and already-linked state
- preserves manual query override via the same job-aware endpoint
- refreshes correspondence plus Gmail candidate state after single-message and thread imports
- renders persisted Gmail metadata (
ExternalThreadId,ExternalFrom,ExternalTo) in the correspondence view
job-tracker-ui/src/correspondence-gmail-import.test.tsx- verifies ranked Gmail suggestions render with visible reasons/confidence
- verifies single-message import refreshes the same job’s correspondence view
- verifies manual search override is sent as
queryOverride
Verification:
- frontend dependencies were installed with
npm ciinjob-tracker-ui - focused React test passed:
CI=true npm --prefix job-tracker-ui test -- --watch=false --runTestsByPath src/correspondence-gmail-import.test.tsx
Notes:
- The Gmail tab now treats the backend as the source of truth for ranking while keeping the manual search field as a fallback override.