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. |
||
|---|---|---|
| .. | ||
| __init__.py | ||
| __main__.py | ||
| expected_units.json | ||
| r1_gold.jsonl | ||
| runner.py | ||
| signature.py | ||