Repository navigation
feat(classifier): add recruiting ATS platforms and enrich career interview scheduling shield #661
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -1288,10 +1288,10 @@ const MANUAL_PAYMENT_SNIPPET_TERMS_ = | |
| 'autopay is disabled|autopay is off|autopay is not enabled|auto-pay is off|not enrolled in autopay|please pay|pay by|pay now|payment is due|amount due|balance due|payment due|payment request|money request|sent you an invoice|sent you a money request|to avoid interruption|to avoid a late fee|to avoid late fees|manual payment' | ||
|
|
||
| const CAREER_SUBJECT_TERMS_ = | ||
| 'employment agreement|employment contract|offer letter|job offer|employment offer|terms of employment|independent contractor agreement|restrictive covenant|confidentiality agreement|interview confirmation|interview invitation|invitation to interview|interview with |schedule an interview|recruiter screen|phone screen' | ||
| 'employment agreement|employment contract|offer letter|job offer|employment offer|terms of employment|independent contractor agreement|restrictive covenant|confidentiality agreement|interview confirmation|interview invitation|invitation to interview|interview with |schedule an interview|recruiter screen|phone screen|interview schedule|schedule your interview|interview availability|next round of interview|next round of interviews|round 2 interview|interview debrief|next steps in the interview|update on your candidacy|update on your application|your application for|application status:' | ||
|
|
||
| const CAREER_SNIPPET_TERMS_ = | ||
| 'employment agreement|offer of employment|terms of employment|pleased to offer you the position|pleased to offer you|pleased to confirm our offer|congratulations on your offer|employment document|restrictive covenants agreement' | ||
| 'employment agreement|offer of employment|terms of employment|pleased to offer you the position|pleased to offer you|pleased to confirm our offer|congratulations on your offer|employment document|restrictive covenants agreement|interview schedule|schedule your interview|schedule an interview|interview availability|next round of interview|next round of interviews|next steps in the interview|interview with our team|speak with our team|discuss the role|candidacy for the position|your application for the position|invitation to interview' | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Require career context for “speak with our team.” A vendor email with subject “Exclusive offer” and snippet “Speak with our team about our new product” matches
|
||
|
|
||
| const DOCUMENT_SIGNATURE_COMPLETED_TERMS_ = | ||
| 'completed: docusign|docusign: completed|has completed signing|all parties have signed|document is completed|signed copy' | ||
|
|
@@ -1719,10 +1719,19 @@ function deterministicRuleClassify_(sender, subject, snippet, thread, config) { | |
| } | ||
|
|
||
| // 06_Work_Career: Employment Agreements, Offer Letters, Employment Contracts, Recruiter Screens & Interviews | ||
| if ( | ||
| const isAtsPlatformSender = matchesSenderDomain_( | ||
| sender, | ||
| 'greenhouse.io|lever.co|myworkday.com|workday.com|avature.net|icims.com|smartrecruiters.com|ashbyhq.com|taleo.net' | ||
| ) | ||
| const isCareerContent = | ||
| containsAny_(subLower, CAREER_SUBJECT_TERMS_) || | ||
| containsAny_(snipLower, CAREER_SNIPPET_TERMS_) | ||
| ) { | ||
| const isJobAlertSpam = containsAny_( | ||
| subLower, | ||
| 'job alert|job recommendations|recommended jobs|new jobs matching|jobs you might like' | ||
| ) | ||
|
|
||
| if (isCareerContent || (isAtsPlatformSender && !isJobAlertSpam)) { | ||
|
Comment on lines
+1729
to
+1734
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. The job-alert exclusion only guards the ATS-sender branch. Fix: apply the exclusion to the whole condition. if (!isJobAlertSpam && (isCareerContent || isAtsPlatformSender)) {Spotted by Graphite There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
|
||
| return applyUserSentShield_( | ||
| makeDeterministicResult_( | ||
| '06_Work_Career', | ||
|
|
||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Make the ATS job-alert exclusion take precedence over career terms.
For an ATS message with subject “Job Alert: Interview Schedule Tips,”
isCareerContentis true. The condition keeps the alert in Primary even thoughisJobAlertSpamis also true. The new exclusion only protects the sender-based arm. If an ATS subject identifies a job alert, let the message continue to broadcast or semantic classification rather than applying the career shield. Fix the matching condition insrc/index.jsLine 1734 as well.