core/generate/rate_comprehension
Shay 6b1fdbff45 feat(rate): single-rate reader + run_reader lane + answer-choice reuse (R3d)
generate/rate_comprehension/reader.py: read_rate_problem comprehends explicit single-rate prose into a RateProblem via structural recognizers — rate value (<N> <plural> per <singular>), duration (for/in <N> <unit>), standalone quantity (outside those spans), query (how many <unit> by unit-match, or speed in <X> per <Y> -> rate). The compound-unit-consistency check is the wrong=0 gate: a duration whose unit isn't the rate denominator (miles/hour for 30 minutes) REFUSES rate_unit_mismatch, never converts.

Refuses combined_rates (>=2 rate clauses), temporal_state (clock markers), missing_rate/time/quantity (underdetermined). run_reader lane + 'reader' CLI. R3 reader: setup_correct 8 / setup_wrong 0 / refused_correct 4 -> answers 6 correct / 0 wrong / 6 refused (the 6/0/6 target). Reuses R2 verify_answer_choice end-to-end. Off-serving. 6 reader tests + constructed unit-mismatch guard.
2026-06-07 23:07:51 -07:00
..
__init__.py feat(rate): single-rate reader + run_reader lane + answer-choice reuse (R3d) 2026-06-07 23:07:51 -07:00
model.py feat(rate): R3 RateProblem model + rate gold + setup oracle (R3b) 2026-06-07 23:01:25 -07:00
reader.py feat(rate): single-rate reader + run_reader lane + answer-choice reuse (R3d) 2026-06-07 23:07:51 -07:00
solver.py feat(rate): exact integer single-rate solver (R3c) 2026-06-07 23:03:30 -07:00
units.py feat(rate): R3 compound-unit primitive — the dimensional substrate (R3a) 2026-06-07 22:57:13 -07:00