77 lines
3.4 KiB
Markdown
77 lines
3.4 KiB
Markdown
# Smart Gmail Job Correspondence Integration Progress
|
||
|
||
## Branch
|
||
- main
|
||
|
||
## Status
|
||
- Core Phase 1 Gmail correspondence feature is now implemented in code.
|
||
- Remaining gap is deployment/runtime rollout on the live host, not missing product logic in this repo.
|
||
|
||
## Completed
|
||
|
||
### Foundation
|
||
- Gmail OAuth connect/disconnect/status flow preserved.
|
||
- Durable Gmail sync-state fields added and surfaced from `GET /api/gmail/status`.
|
||
- Per-job correspondence UI shows Gmail sync diagnostics.
|
||
|
||
### Ingestion and storage
|
||
- Imported Gmail correspondence stores:
|
||
- direction
|
||
- Gmail labels JSON
|
||
- attachment metadata JSON
|
||
- Gmail payload parsing extracts labels and attachment metadata.
|
||
- Message-level deduplication remains in place.
|
||
- Linked-thread refresh continues to import only new thread messages.
|
||
|
||
### Matching and routing
|
||
- Deterministic scoring extracted to `JobTrackerApi/Services/GmailJobMatchingService.cs`.
|
||
- Review queue backend exists at `GET /api/gmail/review-candidates`.
|
||
- Review decisions persist through `POST /api/gmail/review-decision`.
|
||
- Manual sync now exists at `POST /api/gmail/manual-sync`.
|
||
- Manual sync applies a bounded historical window and excludes spam/trash by default.
|
||
- High-confidence matches now auto-link during manual sync.
|
||
- Medium-confidence matches remain in review.
|
||
- Low-confidence job-like threads can be marked as suggested jobs.
|
||
- Suggested-job surfaces now exist via:
|
||
- `GET /api/gmail/suggested-jobs`
|
||
- `POST /api/gmail/create-suggested-job`
|
||
|
||
### Correspondence UX
|
||
- Global inbox exists at `/correspondence`.
|
||
- Gmail review page exists at `/correspondence/review`.
|
||
- Review page now supports:
|
||
- manual sync
|
||
- routing filters
|
||
- review notes
|
||
- link/review/reject/suggested actions
|
||
- create-job flow from suggested Gmail threads
|
||
- Per-job correspondence workspace now supports:
|
||
- linked-thread refresh
|
||
- unlink thread from current job
|
||
- move/relink thread to another existing job
|
||
- Backend relink/unlink endpoints now exist:
|
||
- `POST /api/gmail/relink-thread`
|
||
- `POST /api/gmail/unlink-thread`
|
||
|
||
### Phase 2 prep
|
||
- Future seam remains in place at `JobTrackerApi/Services/GmailCorrespondenceEnrichment.cs`.
|
||
- Design doc remains in place at `docs/gmail-correspondence-phase1.md`.
|
||
|
||
### Deployment hardening
|
||
- Added deploy smoke-check logic to `deploy/deploy.sh`.
|
||
- Deploy now fails if `${APP_PUBLIC_BASE_URL}/api/auth/config` returns HTML or non-JSON instead of backend auth config JSON.
|
||
|
||
## Verification completed
|
||
- `dotnet test JobTrackerApi.Tests/JobTrackerApi.Tests.csproj --filter GmailControllerTests /p:DisableSourceControlManagerQueries=true`
|
||
- `cd job-tracker-ui && CI=true ./node_modules/.bin/react-scripts test --runInBand --watch=false src/correspondence-gmail-import.test.tsx src/gmail-review-page.test.tsx src/correspondence-inbox-page.test.tsx`
|
||
- `dotnet build './Job tracker.sln' -c Release`
|
||
|
||
## Runtime note
|
||
- Live host check shows `https://jobs.cesnimda.uk/api/auth/config` currently returns the frontend HTML shell (`x-powered-by: Express`) instead of backend JSON.
|
||
- That is a deployment/proxy mismatch outside the app code in this checkout.
|
||
- The new deploy smoke-check was added so future deploys fail fast on that condition.
|
||
|
||
## Resume notes
|
||
- If the live site still shows 404s for `/api/...`, the running service is not the repo’s Dockerized frontend+backend path.
|
||
- The CRA/Express-style live response and websocket attempts to `:3000/ws` suggest an old dev-style frontend process or wrong reverse-proxy target is still serving the domain.
|