4.7 KiB
ADR-0119.6 — GSM8K Math Depth-Curve Measurement Harness
Status: Accepted Date: 2026-05-23 Author: CORE agents + reviewers Depends on: ADR-0114a, ADR-0119, ADR-0119.2
Context
ADR-0114a (Obligation #6) requires publishing a compositional-depth vs. accuracy curve for any domain promoting to expert. Accuracy as a function of reasoning depth must not decay sharply (a pattern-matcher decays; a reasoning system stays flat within ε).
With the GSM8K-style eval corpus splits authored (ADR-0119.2) and the lane runner developed (ADR-0119.3), we must ship the measurement harness that implements this curve calculation from a lane report and a case set. This fulfills the measurement-side requirement of Obligation #6.
Decision
We introduce a measurement harness and CLI hook to calculate and print the depth-vs-correctness curve.
Implementation Details
- Module: depth_curve.py
- Exposed Function:
Returns:def compute_depth_curve(cases: list[dict], lane_report: LaneReport) -> dict[str, Any]{ "buckets": { "depth_1": {"total": N, "correct": M, "rate": float}, "depth_2-3": {"total": N, "correct": M, "rate": float}, "depth_4-5": {"total": N, "correct": M, "rate": float}, "depth_6-8": {"total": N, "correct": M, "rate": float} }, "max_depth": int, "raw_curve": [ {"depth": 1, "total": N, "correct": M, "rate": float}, ... ] } - Bucket key format:
depth_1for single integers;depth_2-3,depth_4-5,depth_6-8for the documented buckets matching the corpus distribution. - Empty bucket safety: Rate is initialized/defaulted to
0.0if a bucket has zero cases (preventing NaN or division-by-zero exceptions). - CLI hook: Invoking
python3 -m evals.gsm8k_math.scoring.depth_curve --split dev|publicexecutes the lane runner on the chosen split and prints the resulting JSON.
Invariants
- Determinism: Given the same cases and lane report,
compute_depth_curveoutputs byte-identical results. - Completeness: The sum of totals in
bucketsequals the total number of cases. - Correctness: The sum of correct cases in
bucketsequals the overall correct case count in the lane report.
Acceptance Evidence
Accepted when:
- The module depth_curve.py is present and functional.
- The tests in test_adr_0119_6_depth_curve.py pass cleanly, validating:
- Determinism across runs.
- Bucket totals sum to total cases.
- Bucket correct counts sum to total correct.
- Empty bucket safety (no NaN/exceptions, rate defaults to
0.0). - Correct totals when evaluated against the public split (150 cases total, bucket distribution 15/45/45/45).
- Correct totals on combined splits matching the documented 20/60/60/60 distribution.
- Successful execution of the curve flatness ratio calculation.
Consequences
- The GSM8K-math evaluation lane now has a standard, deterministic measurement harness to construct the depth curve required by ADR-0114a.
- The measurement-side of Obligation #6 is fully discharged for GSM8K-math.
Out of Scope
- Setting a specific numeric threshold ε for curve flatness (reserved for the promotion contract ADR-0120).