tootsies

a discord bot for the tootsies server. ask, recap, discuss, ship features by typing.


Project maintained by mejasonmejason Hosted on GitHub Pages — Theme by mattgraham

Evals: the per-eval catalog

CLAUDE.md’s Evals section carries the binding rules (two tiers, the GOLDEN mandate, gating-vs-trend); this file is the full catalog – what each eval grades, its judges, its golden, and the history that shaped it. Add an eval -> add its entry here (and its golden) in the same PR.

Two tiers, deliberately separate (see COVERAGE.md for the rule-by-rule matrix and gaps):

ANTHROPIC_API_KEY=... python scripts/run_evals.py            # whole suite
python scripts/run_evals.py --filter constitution --out r.md # one eval + report file
python scripts/eval_ask_premise.py                           # a single eval standalone

Every eval carries a GOLDEN fixture — a known-bad input that MUST come back failing. A judge is itself a model and drifts; a golden that stops failing is declared toothless and counts as a regression (harness.exit_code). When you add an eval, add a golden. The harness’s deterministic core (parse_judge_json, exit-code/regression logic) is unit-tested in tests/test_evals_harness.py; the eval wiring is guarded no-API by tests/test_eval_wiring.py.

Gating vs trend (EvalResult.trend_only). The job (run_evals exit code) goes red only on a gating regression: a leaked golden, a deterministic classifier-accuracy gate breaching its floor (classify_*, preflight_order, chimein_score, discourse_score), or a crash. The model-judge-on-generated-text behavioral evals (constitution, memory_fence, ask_premise, ask_tools, music_post, discourse_post, chimein_post, icebreaker, recap) are marked trend_only=True: their GOLDENS still hard-gate (the judge must keep its teeth), but a single nondeterministic live-case FAIL is reported (tagged [trend-fail], surfaced in the overall line as a “trend finding”) for evals.yml’s judge to file on by trend — it does not red the job. This matches the suite’s “NOT a CI gate, judged by trend, a single live-case FAIL can be noise” contract: the job’s red/green tracks the trustworthy signals, while behavioral fabrication/voice drift still reaches the judge. parse_judge_json also recovers a clean verdict when the judge wraps its explanation in stray unescaped quotes, so a valid pass isn’t scored as a spurious FAIL.