01 / THE PROBLEM
Job search is 90% reading and rejecting.
Alert emails carry a title, a company, a location, and a link — never a description. Most tools either scrape aggressively (and get blocked) or hallucinate a verdict from the title alone. Neither is honest.
I wanted a sieve that refuses to guess: a posting it cannot read is needs_research, not a pass or a rejection.
02 / MY CONTRIBUTION
Design the gate, then test it.
I shaped the problem, the matching rules, the data model, and the release decisions. AI tools performed much of the implementation and review. My role centered on the requirements, the system behavior, the evaluation, and the decisions that should remain human-controlled.
03 / THE ARCHITECTURE
A small local tool, not a hosted platform.
Python 3.10+, SQLite, PyYAML. No LLM in the verdict path — the gate is deterministic rules, each citing the quoted requirement it evaluated. Four account-free sources feed one ledger. Descriptions are fetched politely (one at a time, stops on 429, retries with backoff). Nothing is sent or applied.
There is no auto-apply, no mail transport in the decision path, and no browser automation. Those are intentional boundaries, not missing features.
04 / HOW IT WORKS
Prepare evidence before a decision.
Alert emails and source feeds become ledger rows. Idempotent: re-running adds zero rows.
Fetch each posting page once. A page that cannot be read stays incomplete.
Each posting is evaluated against your profile: stack, location/auth, years, pay. Verdict: strong match, potential match, needs research, or not suitable.
You approve, reject, research, or save — bound to one job. Decided jobs never re-appear.
For installation and reproducible commands, use the maintained Jobsearch source repository or pip install jobsearch-pipeline.
05 / EVIDENCE
Measured checks, bounded claims.
574 tests, all deterministic (no bare assert, runs under python -O). A leak scan, an export gate, a history audit, and a GitHub Actions workflow with Trusted Publishing to PyPI. The PyPI page and v1.0.0 release notes record what was measured and the remaining limitations.
06 / LIMITATIONS & NEXT
Honesty is a process, not a label.
The four sources are tech-leaning; non-tech roles are underrepresented. The gate's strongest signal ("technology held") is software-specific. Compensation is quoted and flagged, never converted at an invented rate. Real-network fetches are tested with injected fetchers, not live endpoints.
Jobsearch is MIT licensed and open to reviewed contributions. Its public issues document unresolved problems.