# ADR-0131.5 — GSM8K Coverage Probe: Retirement After G.x Axis Completion **Status:** Accepted **Date:** 2026-05-23 **Parent:** [ADR-0131.G — GSM8K Coverage Probe](ADR-0131.G-gsm8k-coverage-probe.md) **Amends:** ADR-0131.G iteration discipline section --- ## Context ADR-0131.G introduced the GSM8K coverage probe as a diff-able baseline (`admitted_wrong == 0`, `admission_rate` tracked across G.x iterations) and pinned capability-first iteration discipline for the G.x capability axes. Five axes shipped and merged to `main`: | Axis | ADR | PR | Axis cases | Wrong | |------|-----|----|-----------|-------| | G.1 — verb classes for initial-state | ADR-0131.G.1 | #187 | curated lane | 0 | | G.2 — comparative operations | ADR-0131.G.2 | #196 | 31 cases | 0 | | G.3 — numeric literals | ADR-0131.G.3 | #183 | curated lane | 0 | | G.3.1 — numerics extensions | ADR-0131.G.3.1 | #186 | curated lane | 0 | | G.4 — multi-clause composition | ADR-0131.G.4 | #185 | curated lane | 0 | | G.5 — aggregate answer composition | ADR-0131.G.5 | #197 | 20 cases | 0 | **GSM8K admission after all five axes: 0/50 (unchanged from baseline).** This was expected and documented in each G.x PR. The bottleneck for all 50 sample cases is statement-layer parsing — rate verbs, compound sentences, implicit entities, multi-step operations. The G.x axes targeted the *question layer* (aggregate cues, comparative structure, numeric literals, multi-clause subjects) and the *initial-state verb layer*. None of the 50 GSM8K sample cases fail at those layers; they fail earlier. The safety rail (`admitted_wrong == 0`) never wavered. --- ## Decision ### 1. Retire the GSM8K probe from the per-iteration gate Effective immediately, `train_sample_coverage_report.json` is a **frozen evidence artifact**, not a live gate for future iterations. The reasons: - Admission is still 0/50. A gate that never moves does not gate. - The G.x axes demonstrated that architecture-aligned capability growth does not necessarily lift GSM8K admission — and that is correct behavior, not a failure. The 50 sample cases are hard precisely because of statement-layer features (rate verbs, implicit entities) that are deliberately out of scope for the closed bounded-grammar model. - Keeping the probe as a per-iteration required re-run creates process overhead whose signal-to-noise ratio is now close to zero. ### 2. Preserve the `admitted_wrong == 0` invariant permanently The safety rail is not retired. It becomes a **standing architectural invariant** rather than a per-iteration gate: > Any future change to the parser, solver, or verifier must preserve > `admitted_wrong == 0` on the GSM8K train sample. The existing test `tests/test_adr_0131_G_gsm8k_coverage_probe.py` already CI-pins this; it is not removed. Each per-axis test file (G.2, G.5, etc.) also asserts `admitted_wrong == 0` as a regression guard. This coverage is sufficient; no per-iteration re-report is needed. ### 3. Conditions for re-activating the probe as a live gate If a future ADR targets **statement-layer** expansion (rate verbs, multi-step implicit operations, compound sentence parsing), re-run the probe and include the delta. The probe infrastructure remains in-repo for this purpose. The re-activation criterion is: - The new capability plausibly changes the admission count on ≥1 of the 50 sample cases. - The PR diff includes evidence that it does (pre/post `admission_rate` delta ≥ 0.02, i.e. ≥1 additional admission). ### 4. Archive note in ADR-0131.G ADR-0131.G iteration discipline section 4 ("Reject any expansion that only moves GSM8K admission") remains valid. This ADR adds a symmetric note: expansions that do not move GSM8K admission are not defects — they are working as intended when the bottleneck is orthogonal to the capability axis being extended. --- ## Evidence - `evals/gsm8k_math/train_sample/v1/train_sample_coverage_report.json` — frozen at `admission_rate: 0.0`, `admitted_wrong: 0`, `refused: 50` after all G.x axes. - `tests/test_adr_0131_G_gsm8k_coverage_probe.py` — CI-pins `admitted_wrong == 0` as a standing regression guard. - Per-axis tests (G.2, G.5) each include a `test_gsm8k_*_admitted_wrong_zero` assertion as belt-and-suspenders. --- ## Consequences - Future capability-axis PRs do not need to re-run or delta the GSM8K probe unless their scope touches statement-layer parsing. - The probe file and runner remain in-repo as infrastructure for the eventual statement-layer push. - The ADR-0131.G "capability-first, not coverage-first" discipline is unchanged. GSM8K admission is still a *symptom*, never a target. This ADR merely removes the requirement to measure the symptom on every iteration when the symptom cannot move. --- ## Out of scope - Statement-layer expansion (rate verbs, multi-step implicit operations) — that is a separate ADR when the time comes. - Promotion-gate amendment — ADR-0131.4 is the gate; it does not reference the GSM8K probe, and this ADR does not change it. - Removal of the probe runner or report file — both stay in-repo.