feat: add visa sponsorship module for international job seekers in the US #182
Open
minwoo-data wants to merge 3 commits intosantifer:mainfrom
Open
feat: add visa sponsorship module for international job seekers in the US #182minwoo-data wants to merge 3 commits intosantifer:mainfrom
minwoo-data wants to merge 3 commits intosantifer:mainfrom
Conversation
Add three standalone scripts that integrate into the evaluation pipeline: - sponsorship-detect.mjs: JD keyword classifier (WILL/WONT/UNKNOWN) - h1b-lookup.mjs: USCIS employer H-1B history with caching - visa-score.mjs: composite 1-5 visa-friendliness score Pipeline integration: - Block G (Visa Analysis) added to oferta.md evaluation mode - Batch pre-filter skips WONT_SPONSOR in hard_filter mode - Scanner shows [SPONSOR]/[NO-SPNS]/[?] indicators - Three sponsorship modes: hard_filter, score_penalty, info_only Includes 40 built-in tests, sample USCIS data, and docs/VISA.md guide. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
deepthinkss
approved these changes
Apr 11, 2026
Phase 2 fixes: - CR-01: Path traversal guard in visa-cache.mjs cacheGet - CR-02: Local alias override file support in h1b-lookup.mjs - WR-01: CSV content validation before writing in download-uscis.mjs - WR-02: Cache key source sanitization in visa-cache.mjs - WR-03: Prototype pollution guard in alias loader - WR-04: Visa health checks in doctor.mjs - WR-05: Renamed file handling in update-system.mjs git status parsing Phase 3 fixes: - CR-01: Prototype pollution guard in sponsorship-detect.mjs YAML parser - CR-02: Quote-aware CSV parser in h1b-lookup.mjs (handles commas in fields) - WR-01..04: visa-score.mjs consistency, clamping, validation, regex fixes Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why this matters
Over half of U.S. tech job seekers are international students or workers who need visa
sponsorship. For them, "will this company sponsor?" is the #1 filter before anything else -
yet most job boards don't surface this signal. This module makes career-ops immediately
useful to that majority by answering the sponsorship question upfront, before wasting time
on dead-end applications.
Summary
scorer
hard_filter(auto-SKIP),score_penalty(A-F penalty),info_only(display only)
indicator column
What's included
sponsorship-detect.mjs,h1b-lookup.mjs,visa-score.mjs,visa-cache.mjs,download-uscis.mjsconfig/sponsorship-keywords.yml,config/employer-aliases.ymlmodes/oferta.md,modes/_shared.md,modes/scan.md,batch/batch-prompt.mddocs/VISA.md(usage guide), README feature tables (all 6 languages)test-visa-cache.mjsDesign decisions
inserted before Draft Answers
config/visa.yml(user layer), keywords insystem layer
Test plan
node sponsorship-detect.mjs --test(8 tests)node h1b-lookup.mjs --test(17 tests)node visa-score.mjs --test(15 tests)node test-all.mjspasses