Skip to content

feat(classifier): add recruiter outreach fast-path and Eventbrite ticketing and promos - #664

Merged
don-petry merged 1 commit into
mainfrom
feat/career-recruiter-eventbrite-shields
Nov 3, 2026
Merged

don-petry merged 1 commit into
mainfrom
feat/career-recruiter-eventbrite-shields

Conversation

@don-petry

@don-petry don-petry commented Nov 3, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

  • Recruiter Outreach Fast-Path: Extends CAREER_SUBJECT_TERMS_ and CAREER_SNIPPET_TERMS_ to catch direct executive recruiter and talent acquisition outreach (Connecting on [Company] Opportunities, Introductory phone call, Leadership interview, Panel interview, Interview follow-up, talent acquisition reaching out regarding resumes and applications). Routes to 06_Work_Career/Work/Career (Primary/keep, 0.99 confidence) in 0ms without Gemini quota consumption.
  • Eventbrite Platform Integration:
    • Adds eventbrite.com to the Event Platform & RSVP Shield (01_Household/Household/General, Primary/keep, 1.0 confidence) for personal invitations and RSVPs.
    • Adds deterministic fast path for Eventbrite order and ticket confirmations (01_Household/Household/General, Updates/archive, 0.99 confidence).
    • Routes Eventbrite promotional recommendations and trending events to Promotions/archive (0.98 confidence).
  • Parity & Tests: Maintains exact character parity between code.gs and src/index.js. All 22 test suites (1,090 tests) passing; strict No-PII scan passing.

View guided diff Turn on auto-fix

Problem

See the linked issue.

Risk

Low — 3 file(s) changed; no CI- or runtime-critical paths touched.

Test plan

Tests added/updated: src/gmail-ai-classifier/tests/code.test.js. Verification: bash scripts/dev-lead-lint.sh (shellcheck --severity=warning) ran pre-commit; the bats suite runs in CI.

Rollback

Revert this PR. No non-revertible side effects (no tags, migrations, or external state).

Monitoring

This PR's CI checks (Lint + bats) are the success/regression signal.

@don-petry
don-petry requested a review from a team as a code owner November 3, 2026 22:04
@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ⚠️ Failed 2026-11-03T22:04:42.736733Z
We couldn’t complete this review. Comment @codex review to try again.
2eb0c07 PR opened
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, you can upgrade your account or add credits to your account and enable them for code reviews in your settings.

@rachel-petry rachel-petry left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Approved: Recruiter outreach and Eventbrite ticketing and promos fast paths verified with full parity and clean tests.

@coderabbitai

coderabbitai Bot commented Nov 3, 2026 •

Copy link
Copy Markdown

Review in Change Stack →

Caution

Review failed

The pull request is closed.

  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Warning

Some tools did not complete. Review the errors below.

ast-grep (0.51.1)
src/gmail-ai-classifier/tests/code.test.js

ast-grep timed out on this file

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

Share

CodeRabbit Verify

  • Run CodeRabbit Verify to test the changes in this pull request.

@don-petry

Copy link
Copy Markdown
Collaborator Author

Dev-Lead — waiting on PR blockers (intent: review-changes)

PR: #664
No changes were committed, but the PR still can't be marked done: required checks SonarCloud, coverage are still pending. The retry cron will re-attempt automatically. Next attempt after: 2026-11-03T22:36:30Z

@don-petry

Copy link
Copy Markdown
Collaborator Author

Note

@don-petry I reviewed this PR and no code changes were needed, but I can't mark it done yet: required checks SonarCloud, coverage are still pending. I'll re-check automatically.
Next attempt after: 2026-11-03T22:36:30Z

@don-petry
don-petry enabled auto-merge (squash) November 3, 2026 22:06
@sonarqubecloud

sonarqubecloud Bot commented Nov 3, 2026

Copy link
Copy Markdown

@don-petry
don-petry merged commit 5eba36f into main Nov 3, 2026
31 of 37 checks passed
@don-petry
don-petry deleted the feat/career-recruiter-eventbrite-shields branch November 3, 2026 22:07
@don-petry

Copy link
Copy Markdown
Collaborator Author

QA Lead — test-risk advisory

Risk tier: LOW. The worst case is mail landing under the wrong label or tab, which is easy to undo. Most mistakes push mail toward Primary/keep, so nothing gets hidden. Even so, the new terms are broad, run at 0.99 confidence without a Gemini call, and every new test covers only the case where a rule should match.

What I'd shore up (highest leverage first):

  • Add tests where the career rule should not fire. The career rule checks every sender and runs before the social/newsletter rules. The job-alert exclusion only applies to ATS senders. So a LinkedIn digest titled "New opportunities at Acme", a sales email asking for an "introductory call" or saying "Connecting on Q3 pipeline", and an HR-tech newsletter that mentions "talent acquisition" would now all be filed as 06_Work_Career. Write a table-driven test.each with those cases and narrow opportunities at / connecting on / discuss the opportunity until it passes.
  • Test how the Eventbrite rules interact. The invitation shield runs before the rule specs, and its snippet terms include attending. A real ticket email ("You're attending…") would therefore go to Primary/keep instead of Updates/archive. The shield's inline isEventPromo list also doesn't include the new promo terms, so a marketing email with "Join us for…" in the subject is kept at 1.0. Add one test per conflict.
  • Pin the rule order. The promo rule comes before the ticket rule, and events in will match a subject like "Your tickets for Jazz events in Austin". Add that case and decide which result is correct.
  • Check parity between files. If no test already compares code.gs with src/index.js, add one rather than relying on the PR description.

Escalate? No.

Advisory only — I comment, I do not change code. Ground: BMAD Test Architecture
(bmad-tea v1.19.0). Opt out on this item with the qa-lead:hands-off label.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants