core/evals/setup_oracle
Shay 5b193280a5 feat(setup-oracle): independent R1 gold + the reader refuses, never misreads (PR-5b)
Pure-gold. Defines what "correct" means for the R1 (comparative / derived-symbol /
multi-step) shapes the reader cannot read yet, and verifies the current reader REFUSES
them rather than misreading them. NO frame extraction, no parser change, no serving.

- evals/setup_oracle/r1_gold.jsonl — 10 INDEPENDENT, self-contained fixtures (id, text,
  relations, expected_units, query, notes) covering: twice/half-as-many (multiplicative),
  more/fewer-than -> total, a multi-step derived chain (jon=3*ivy; kim=jon+2), a derived
  subtotal reused downstream (total=lee+mae; per_box=total/3), an inverse target, and the
  hard negatives (ambiguous referent, missing base quantity, distractor quantity). The
  gold is the authority — each fixture is reviewable without joining files.
- run_r1() scores the CURRENT reader against this gold.

Investigative result (the deliverable): **10/10 setup_refused, setup_wrong=0, setup_correct=0.**
The reader refuses every R1 shape with a TYPED reason (non_digit_quantity /
no_quantity_template / unreadable_quantity_clause / admissibility_refused) — it NEVER
misreads an R1 case as a simpler form. So the wrong=0 posture holds all the way down, and
PR-5c (the R1 frame) starts from a clean foundation: every R1 case is currently a safe
refusal, and the frame's job is refusal -> correct, with the oracle ensuring no
setup_wrong is ever introduced.

`python -m evals.setup_oracle r1` prints the auditable R1 report (exit 0 iff
setup_wrong==0). The 15-case setup gate + relational_metric answer lane are untouched.
2026-06-06 17:18:45 -07:00
..
__init__.py feat(setup-oracle): independent R1 gold + the reader refuses, never misreads (PR-5b) 2026-06-06 17:18:45 -07:00
__main__.py feat(setup-oracle): independent R1 gold + the reader refuses, never misreads (PR-5b) 2026-06-06 17:18:45 -07:00
expected_units.json feat(setup-oracle): make the ruler UNIT-AWARE (setup-oracle v2, PR-5a) 2026-06-06 17:09:45 -07:00
r1_gold.jsonl feat(setup-oracle): independent R1 gold + the reader refuses, never misreads (PR-5b) 2026-06-06 17:18:45 -07:00
runner.py feat(setup-oracle): independent R1 gold + the reader refuses, never misreads (PR-5b) 2026-06-06 17:18:45 -07:00
signature.py feat(setup-oracle): make the ruler UNIT-AWARE (setup-oracle v2, PR-5a) 2026-06-06 17:09:45 -07:00