Code computes facts. Jev judges meaning.
Anything a regex can get right stays in code: pay ranges, the remote flag, and whether a role can be done from Toronto or elsewhere in Canada. Jev, TypeSafe's decision model, answers only the questions that need judgment: what kind of role it is, whether the product is AI, the seniority, and whether ML, hands-on AI skills or an engineering background is a must-have.
Each answer comes with a probability. Code combines them into buckets, and anything under 0.6 confidence goes to review instead of a guess.
An early version asked the model for location. It labeled Vancouver roles as US-only, so location moved to code.
- Labeling time
- —
- Model cost
- —
- Median call
- —
- Manual steps
- 0
Source: data.json run stats · README, How it works
Every run, on the record
The page is rebuilt from a fresh run each week, and every run stays in the ledger, including the weeks it didn't run.
| Run | Scanned | Kept | AI roles | ML req. | Toronto | Time | Cost |
|---|
Source: data.json history, one row per run
The ledger starts at the first scheduled run. October 12 and 19 were missed because the Monday run was scheduled on my own PC, and the PC wasn't on when it was due. Since October 24 it runs in GitHub Actions. A Monday within six days of a manual run is skipped on purpose and isn't counted as missed.
How far to trust the labels
I labeled 40 postings by hand and compared them with Jev. The question that matters most for this page is whether a role belongs in an AI bucket at all.
Source: eval/RESULTS.md, 40 postings, stratified by bucket
Seniority was within one level on all 40. "AI or not" merges AI-native and AI-platform, which is how the buckets use it; the three-way answer matched 18 of 40. Because the set is stratified by bucket, these numbers describe each bucket, not a random posting. The hands-on AI skills wording was written after my labels, so that row is not a held-out score.