Jevaluate System
Jevaluate rates whether open-source projects use TypeSafe's Jev model well. The ratings are public, so every LLM rater has to read the rubric the same way. Code checks every rule a script can check. The rater reports only what it observes, and code derives the rest. An eval with blinded labels tests the rubric before any version is frozen.
Five design rules
- Code enforces, text explainsEvery rubric rule has a row in
enforcement.mdnaming the function that refuses a wrong answer, or why the rule stays judgment. A lint fails on a rule with no row or a function that doesn't exist. - Ask for what is observedThe rater records type, the call line, each decision with its stakes as read, and the verdict. Code derives kind and every n.a. People and models both miss exception lists. Code doesn't.
- Evidence over claims"Calls Jev: yes" must cite the file and line of the call, and
checkconfirms it is a call. A README, a docs page or a project name never counts. - Stakes change the rowsRules whose test depends on stakes (confidence gating, option order, templated data, untrusted text) get one row per stakes level. The rater sees only the rows its project's decisions need.
- Refuse, don't warnScripts stop the workflow: a rating over 200k tokens without approval, a missing step log, routing changed after the facts were served, an eval run on uncommitted rubric changes.
Components and workflows
The harness runs three workflows. A rubric change passes the eval before a git tag freezes it. A rating round sends each project to one rater per model and takes their verdict-changing disagreements to the owner. Publishing exports reviewed ratings in one pull request.
Rates one project
Does this project use Jev well?
The rater follows SKILL.md and read.md. A rating costs about 100-300k tokens, by repo size. Run as /jevaluate-private, the same rating stays in a private library that export refuses, so it is never published.
Tests the rubric
Do graders apply the rubric correctly?
Materials check, quiz, judgment eval, and rater agreement for a second rater. Proposes wording fixes. Never edits the rubric or a rating.
Runs the process
How do I run a round, change the rubric or publish?
harness_status.py reruns the materials lint and the release check and names the next step.
The owner's own rules
Which extra gates apply here?
A private note of extra gates and presentation rules. $JEVALUATE_OVERLAY points to it; the harness and the eval read it first, and its rules override their defaults. The public skills stay generic.
rubric-change.md- rules written
- jevaluate-eval
- materials check
- quiz
- judgment eval
- owner approves
- frozen by git tag
rating-round.md- picked
- sized
- costs approved
- jevaluate, one rater per model
- rater reads the code
- step.py
- library.py check
- scan_transcripts.py
- library.py add
- adjudicated
- dispute_packet.py
- owner rules on verdict-changing splits
- library.py review
- final gate
publish.md- reviewed ratings
- library.py export
- page review
- check_release.py
- one pull request
Routing and code enforcement
Routing decides which facts apply and how a failure counts, so code checks it hardest. Each script window on the chart refuses a wrong answer or fills in a value the rater never enters. The rubric doesn't rate guides or jev-replacements yet: they get verdict 1, not yet rated, and their facts, scores and stakes are n.a.
Scroll sideways to see the whole chart.
The eval that gates every rubric version
A rubric change runs the first three instruments in order, each passing before the next. The fourth checks a second rater. Pass bars are set before the run. Each rule is scored on its own, never just an average of all scores.
-
1 Materials check
Is what the grader reads consistent?
- lint_materials.pyAllowed values agree across files. No eval-case names in rubric examples. Every rule has an enforcement row.
- Fresh reviewerBriefed as a grader, reads the materials cold.
- Grader viewThe owner reviews exactly what a grader receives, step by step, after any change that moves instructions into code.
-
2 Comprehension quiz
Does a grader understand the rules on invented projects?
- blind writerInvented projects11 from a model that never saw the rubric, and 5 lookalikes a Claude session wrote for a rubric change. Some mislead on the surface. Any overlap with rubric wording is rewritten.
- Owner's key, 16 projectsAnswered first, observable fields only. A script derives the rest and refuses contradictory answers.
- 8 tuning, 8 held outThree drawn at random (seed 29) after the key was final, plus the five lookalikes. Two of those no longer count as held out on stakes: their key changed after a run.
Negative control: A grader given only the allowed values must score under 80%, or the scenarios give their answers away. Its three misses are the three rules the vocabulary can't supply.
Pass bar: Every tuning case right in 3 of 3 runs, held-out in 2 of 3.
Result, 2026-09-30: Every rule tag passed, held-out 3 of 3, and no wording fix was needed.
-
3 Judgment eval
Does a grader route real projects the way the owner does?
- Golden dataset19 real open-source projects, keyed. 6 of them cover the gaps: one claims Jev and never calls it, one is an honest stub named after Jev, two are high stakes, two very high.
- pick_files.pyFixed file ruleRoot README, every file with a hosted call, then Jev or decision hits up to 4 files. Code before docs and tests, data last. 3,000 characters each.
- Provable labelsEvery gold answer must be backed by the packet the grader sees. 13 checked: 12 provable, 1 weak, 0 changed.
- blind labelersLabel provenanceNew cases: labels sealed until the owner answers from evidence cards. check_labels.py refuses a label that cites a doc as a call; build_cards.py refuses any verdict word on a card.
Graders under test: Claude Sonnet and GPT-6 Sol in Codex, on identical inputs.
The call detector is tested too: every miss or false call found on real repos is now a regression test.
-
4 Rater agreement
Do two raters agree, and which is accurate?
- Tuning sample named firstProjects whose disagreements fed wording are reported apart, and second.
- rater_agreement.pyRaw agreement and Cohen's kappa per field, held-out projects first.
- blind ownerAnswer keyA seeded draw of agreed and split facts. The owner answers before seeing either rater.
- Reliability and accuracyAgreement and kappa measure inter-rater reliability. Accuracy needs the key: two raters can agree and both be wrong. Wording is tuned for both, never for agreement over accuracy.
-
FOR STAGES 2-3 Reproducibility
Can a score be traced to the exact rubric and key?
- run_eval.pyPre-flight refuses uncommitted rubric changes or a branch behind main.
- StampEvery quiz and eval run records the commit. Eval runs also fingerprint the answer key.
- score.pyJudgment eval only: refuses to score if the key changed after the run.
-
FOR STAGES 2-3 Report
What does the rubric get wrong?
- Per ruleEach rule tag scored alone. An average hides the rule that fails.
- One fix per missed ruleWording fixes come only from tuning misses and never name a held-out case.
- StopThe owner sees each fix as a before-and-after. The eval never edits the rubric.
Who is blind to what
Each blind guards against one risk: leakage, contamination, anchoring or skimming ahead. Two roles can't be blind, so rules fence in what each can touch.
| Who | Blind to | Why | Guards against |
|---|---|---|---|
| Scenario writer, 11 of 16 quiz projects | The rubric and the answer keys | Scenarios that echo rubric wording test string matching, not understanding. | leakage |
| The owner, setting the key | Every model answer and the controller's reading, until the key is set | Golden labels can't anchor on a model. | anchoring |
| The owner, ruling on a disagreement | Which rater gave which answer: two answers, A and B, in seeded order, with the rule and the code | A ruling can't lean toward one model. | anchoring |
| Blind labelers | The rubric's accept lists and each other's labels. Labels stay sealed until the owner answers. | An independent second opinion that can't touch the key. | leakageanchoring |
| Graders under test | The answer key, eval-case names (a lint keeps them out of rubric examples), the held-out set during tuning | A grader that has seen the answers is scored on memory. | contaminationoverfitting |
| Raters in a round | The rubric past the current phase, and the project's previous rating until its facts and scores are written | Stops skimming ahead and keeps facts and scores from leaning toward an old rating. The verdict comes after, so it can still lean. | skimming ahead |
| Reviewer of a big verdict move | The scores and verdicts: it gets only the facts | It judges the move from the evidence, not from either number. | anchoring |
| Final gate reviewer | Any summary of the work | Judges the artifact, not the story told about it. | anchoring |
| Eval controller | Nothing: it knows the key | It runs the eval. It may fix wording only from tuning misses, draws the held-out set after wording is final, and names any held-out item that fed wording (q09). | not blind |
| The owner | Nothing: knows the rubric and rules on it | The domain expert the graders are tuned to match. The quiz measures agreement with that reading. | not blind |