3 Commits (main)

Author SHA1 Message Date
I Luk Kim 3b6e5cdbd4 proactive: mission-driven employer scope + non-ortho specialty gate
The plan targets PSLF-eligible, mission-driven employers (government,
tribal, nonprofit, FQHC/community health, academic, public hospital).
For-profit DSOs (Smile Doctors, Sonrava, Specialty Dental Brands) had
slipped in through site: queries and auto-discovered boards, and their
pages produced off-scope leads — including Pediatric Dentist titles
that were never orthodontist jobs.

- employer_scope: rule-based employer classifier (.gov/.mil/.edu/
  .nsn.us hosts, configured public domains, government/tribal/
  nonprofit/academic/FQHC terms); private/unknown employers are
  FILTERED at verification (default-deny) and logged to
  workspace/candidates/*.employers.jsonl. Board catalogs declare
  employer_type; auto-discovered boards are written only when the
  SERP evidence classifies as mission-driven.
- roles: new other_specialty class (pediatric dentist, endodontist,
  oral surgeon, general dentist …) filtered before target matching;
  hidden dentist-title lanes at public employers stay.
- verifier: normalize ATS page titles ("Job Application for X at Y"
  -> "X") before storing; apply employer gate.
- discovery: scope filter + out-of-scope reporting; private auto
  catalog cleared (University of Utah Health kept as academic).
- closed markers: drop bare "filled" — federal boilerplate ("until
  the position is filled") marked open USAJOBS postings as CLOSED.
- urls: strip default :443/:80 ports so USAJOBS links dedupe.
4 weeks ago
I Luk Kim 2d98afd062 proactive: give board candidates first verify slots, tighten matching
Board results were appended after every SERP result, so with the fixed
verify budget (60 pages) they were never verified — the summary showed
'thousands of board matches, zero new leads'. Verification now
interleaves board and SERP candidates, boards first, so hidden ATS jobs
(e.g. Smile Doctors, Sonora, Specialty Dental Brands) actually get
classified and persisted.

Also strip employer names before board keyword matching — 'Account
Payable Specialist at Specialty Dental Brands' no longer matches on the
company name ('Dental').
4 weeks ago
I Luk Kim a80bdaf06c proactive: auto-discover ATS boards from site: searches
Weekly deep scan now grows the employer catalog automatically:
site:{ats} SERP queries → parse Workday/ICIMS/Greenhouse/Lever/
SmartRecruiters URLs → probe public APIs → write verified boards
(min 1 dental match) to sites/employers.auto.yaml, which
ProactivePlan.load() merges with the curated employers.yaml.

Also fixes hidden-job coverage on existing boards:
- iCIMS: RSS feeds are retired — parse the iframe search page
- Workday: per-keyword searches (limit 20; tenants reject 50)
- SmartRecruiters: per-keyword API queries instead of newest 100

CLI: proactive discover-boards [--write] [--source] [--limit]
4 weeks ago