feat(jobs): suppress duplicate postings after skip or apply
CI / Linting (Biome) (push) Failing after 41s
CI / Tests (push) Successful in 5m25s
CI / Type Check (adzuna-extractor) (push) Successful in 1m8s
CI / Type Check (gradcracker-extractor) (push) Successful in 1m12s
CI / Type Check (hiringcafe-extractor) (push) Successful in 1m9s
CI / Type Check (orchestrator) (push) Successful in 1m25s
CI / Type Check (startupjobs-extractor) (push) Successful in 1m9s
CI / Type Check (ukvisajobs-extractor) (push) Successful in 1m9s
CI / Documentation (push) Failing after 1m56s

Dedup by employer+title and description at import; cascade skip on dismiss; hide repeats in the job list. Document product scope and duplicate detection in docs.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-05-16 18:50:11 -04:00
co-authored by Cursor
parent 5401f384c1
commit 17c4d4490a
15 changed files with 471 additions and 19 deletions
+9
View File
@@ -27,6 +27,8 @@ Job states:
- `skipped`: explicitly excluded from active queue
- `expired`: deadline passed
When you **skip** or **mark applied**, JobOps also skips matching open duplicates (same company + title or description) and blocks re-import on future runs. See [Duplicate job detection](/docs/features/duplicate-jobs).
## Why it exists
Orchestrator centralizes the transition from discovered opportunities to application-ready artifacts.
@@ -132,8 +134,15 @@ curl -X POST "http://localhost:3001/api/jobs/<jobId>/generate-pdf"
- Patch `status` back to `discovered` to return the job to the active queue.
### Duplicate postings
- Skipping one listing auto-skips other **Discovered** / **Ready** rows that match the same normalized employer+title (or employer+description when available).
- The Jobs list hides open rows that match a job you already skipped or applied to.
- Details: [Duplicate job detection](/docs/features/duplicate-jobs).
## Related pages
- [Duplicate job detection](/docs/features/duplicate-jobs)
- [Pipeline Run](/docs/next/features/pipeline-run)
- [Ghostwriter](/docs/next/features/ghostwriter)
- [Reactive Resume](/docs/next/features/reactive-resume)