# GSM8K Train Proxy Rebaseline — 2026-06-20 **PR:** `chore/evals-ratify-gsm8k-train-proxy-rebaseline` **Title:** `chore(evals): ratify GSM8K train proxy rebaseline` **Date:** 2026-06-20 **Author:** Sonnet 4.6 (governance/rebaseline role) --- ## 1. Background: What Happened in #846 and #847 ### PR #846 — Unauthorized Rebaseline PR #846 (`feat(kernel): implement ProblemFrame proportional-change closure`) merged at `a145b7c3d62ab97726f87c4a711b4b4dafe9f2b6` on 2026-06-21T02:19:07Z. The PR was a legitimate capability PR delivering proportional-change closure work in `generate/problem_frame.py`, `generate/problem_frame_builder.py`, and `generate/problem_frame_contracts.py`. Its kernel and test changes were valid and authorized. However, the merge commit also included **two unauthorized artifact-class changes**: 1. **`evals/gsm8k_math/train_sample/v1/report.json`** — rebaselined from `6/44/0` to `30/20/0`. The live runner output was correct, but committing an updated `report.json` inside a capability PR violates governance doctrine: the committed proxy baseline is a sealed artifact that requires a dedicated, explicitly ratified rebaseline PR. No ADR, session note, or explicit PR section in #846 authorized committing the new counts. 2. **`teaching/proposals/comprehension_failures/34ce9254…json`** — a new teaching proposal file added without authorization. Committed via a `chore(kernel)` message; no review-gate passage; contradicted the HANDOFF claim that "teaching/review/proposal paths [were] untouched". ### PR #847 — Reconciliation PR #847 (`reconcile: restore eval proxy and remove unauthorized teaching proposal from #846`) merged at `b6d422834b243073fc748754ad78b1a956774065`. #847 performed the following narrow reversions: - Restored `evals/gsm8k_math/train_sample/v1/report.json` to the governed 6/44/0 pin. - Deleted the unauthorized teaching proposal artifact. - **Preserved** the valid kernel and test changes from #846. The rationale: the live runner output (30/20/0) was already correct; only the committed artifact was wrong. Reverting the artifact does not revert the underlying capability. --- ## 2. Why This PR Is the Explicit Authorization Boundary The governance doctrine for `report.json` has been enforced consistently across prior sessions: - `gsm8k-workstream-a-gate-a1-comparative-multiplicative-lookback-2026-06-17.md`: "No report.json rebaseline" / "report.json rebaseline only via separate ratified PR" - `gsm8k-workstream-a-increment-3-rate-followup-ratification-2026-06-17.md`: "No write of updated report.json in this increment" - `gsm8k-capability-paradigm-sprint11-lookback-2026-06-17.md`: "report.json untouched" - `gsm8k-capability-paradigm-sprint12-lookback-2026-06-17.md`: "report.json untouched" This PR is the **explicit authorization** for the single `report.json` update. It: - Is opened **after** #847 is merged to main (required base integrity). - Is based on a **fresh worktree from `origin/main`** at the #847 merge commit (`b6d422834b243073fc748754ad78b1a956774065`). - Changes **only** `evals/gsm8k_math/train_sample/v1/report.json` and this session note. - Does **not** touch any kernel code, tests, packs, policy, identity, recall, vault, field, algebra, teaching proposals, or serving runtime paths. --- ## 3. Before/After Counts ### Before (governed 6/44/0 pin, restored by #847) ```json "counts": { "correct": 6, "refused": 44, "wrong": 0 }, "exit_criterion": { "correct_min": 10, "passed": false, "wrong_max": 0 } ``` ### After (ratified 30/20/0 rebaseline, this PR) ```json "counts": { "correct": 30, "refused": 20, "wrong": 0 }, "exit_criterion": { "correct_min": 10, "passed": true, "wrong_max": 0 } ``` **`wrong_ids == []` (sacred invariant: no wrong answers committed)** --- ## 4. Live Runner Verification The report.json was generated by running the canonical train-sample runner from the fresh worktree at HEAD (`b6d42283`) immediately before this PR: ```bash # Verification command (run in core-gsm8k-train-rebaseline worktree): uv run python - <<'PY' from evals.gsm8k_math.train_sample.v1.runner import _CASES_PATH, _load_cases, build_report r = build_report(_load_cases(_CASES_PATH)) print("counts:", r["counts"]) print("wrong_ids:", [x["case_id"] for x in r["per_case"] if x["verdict"] == "wrong"]) print("exit_criterion:", r["exit_criterion"]) PY # Output: # counts: {'correct': 30, 'wrong': 0, 'refused': 20} # wrong_ids: [] # exit_criterion: {'correct_min': 10, 'wrong_max': 0, 'passed': True} ``` The report was then written deterministically using the runner's own `write_report()`: ```bash uv run python - <<'PY' from evals.gsm8k_math.train_sample.v1.runner import _CASES_PATH, _load_cases, build_report, write_report, _REPORT_PATH r = build_report(_load_cases(_CASES_PATH)) write_report(r) print("Written to:", _REPORT_PATH) PY ``` The runner uses `json.dumps(report, indent=2, sort_keys=True)`, so the output is deterministic and key-order is alphabetical throughout. --- ## 5. Scope **Changed files in this PR:** | File | Change | |---|---| | `evals/gsm8k_math/train_sample/v1/report.json` | Rebaselined from 6/44/0 to 30/20/0 | | `docs/sessions/gsm8k-train-proxy-rebaseline-2026-06-20.md` | This audit note (new) | **No other files changed.** --- ## 6. Non-Goals This PR explicitly does **not**: - Change any runtime code, serving path, or derivation organ. - Add or modify any test. - Touch packs, policy, identity, recall, vault, field, or algebra. - Create any teaching proposal or teaching artifact. - Start or advance quantity-entity implementation work. - Rebaseline any other eval artifact (holdout, composition validation, etc.). - Add any new eval artifact. The quantity-entity foundational slice implementation is authorized separately by `docs/sessions/quantity-entity-foundational-slice-authorization-2026-06-20.md` and must not begin until that document's own gating conditions are met. --- ## 7. Remaining Risk The primary systemic risk exposed by this sequence is: > **Report pins must not be casually updated inside implementation or capability PRs.** The `report.json` proxy baseline is a sealed artifact. Even when the live runner output is correct and the capability work is authorized, committing the updated report inside a capability PR: - Conflates two authorization domains (capability work ≠ rebaseline authorization). - Makes the committed artifact hard to audit (which PR actually authorized it?). - Undermines the governed rebaseline PR discipline that has protected wrong-zero invariance across all prior sessions. **All future PRs must leave `evals/gsm8k_math/train_sample/v1/report.json` (and all other `report.json` proxy baselines) untouched unless the PR is explicitly and solely dedicated to a governed rebaseline.** --- ## 8. Authorization Chain This rebaseline is authorized by the following chain: 1. **ADR-0126** — establishes the train-sample exit criterion (`correct >= 10`, `wrong == 0`). 2. **#846 kernel changes** — the capability work that produced the 30/20/0 live runner output (proportional-change closure in ProblemFrame). These changes are valid and merged. 3. **#847 reconciliation** — restored the committed artifact to 6/44/0, explicitly delegating authorization to a dedicated rebaseline PR (this PR). 4. **This PR** — the explicit, governed authorization to commit the 30/20/0 counts. The `wrong_ids == []` invariant is preserved: no wrong answer is committed, and the `wrong_max: 0` gate remains active. --- ## 9. Fresh-Base Verification (Pre-Edit) ```bash # In /Users/kaizenpro/Projects/core: git fetch origin --prune # -> b6d42283 reconcile: restore eval proxy and remove unauthorized teaching proposal from #846 (#847) git worktree add ../core-gsm8k-train-rebaseline origin/main \ -b chore/evals-ratify-gsm8k-train-proxy-rebaseline # In new worktree: echo "HEAD=$(git rev-parse HEAD)" # HEAD=b6d422834b243073fc748754ad78b1a956774065 echo "ORIGIN_MAIN=$(git rev-parse origin/main)" # ORIGIN_MAIN=b6d422834b243073fc748754ad78b1a956774065 git status --porcelain # (empty — clean) git log --oneline -n 3 # b6d42283 reconcile: restore eval proxy and remove unauthorized teaching proposal from #846 (#847) # a145b7c3 feat(kernel): implement ProblemFrame proportional-change closure (#846) # ad0bae29 docs(kernel): authorize quantity-entity foundational implementation slice (#845) ``` HEAD == ORIGIN_MAIN == the #847 merge commit. Pre-edit state verified clean.