2 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.
3 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]
3 weeks ago