- Restore evals/gsm8k_math/train_sample/v1/report.json to pre-#846 pin (6/44/0) The 30/20/0 committed in #846 was generated eval output, not a ratified rebaseline. Historical pin is required until a dedicated rebaseline PR is explicitly authorized. - Delete teaching/proposals/comprehension_failures/34ce9254...json Newly added in #846 without authorization. File did not exist in first parent. HANDOFF claimed teaching paths were untouched — contradicted by the actual diff. Proposal must go through the reviewed teaching lifecycle, not committed PRs. - Add docs/sessions/pr846-reconciliation-audit-2026-06-20.md Full audit note: what #846 was expected vs. what merged, authorization analysis, restoration rationale, what was preserved, remaining risk, next correct step. Tests kept from #846: - tests/test_problem_frame_builder.py (lint fix: _frame_names -> direct accessor) - tests/test_problem_frame_skeleton.py (unused ProblemFrame import removed) Both are valid narrow fixes unrelated to the unauthorized artifacts. Forbidden paths not touched: algebra, field, vault, recall, identity, policy, packs, generate/derivation, generate/math_candidate_graph.py, runtime/serving.
10 KiB
PR #846 Reconciliation Audit — 2026-06-20
Reconciliation PR: reconcile/audit-pr846-artifact-merge
Audit date: 2026-06-20 (merged 2026-06-21T02:19:07Z; reconciliation opened same session)
Auditor: Sonnet 4.6 (reconciliation/audit role)
1. What #846 Was Expected to Be
According to the task brief, PR #846 was expected to be:
feat(kernel): introduce diagnostic quantity-entity proposal seam
This is a diagnostic/seam-only PR for quantity-entity capability work, not a proportional-change closure or eval report rebaseline.
2. What #846 Actually Merged
PR #846 title: feat(kernel): implement ProblemFrame proportional-change closure
Merge commit: a145b7c3d62ab97726f87c4a711b4b4dafe9f2b6
Merged at: 2026-06-21T02:19:07Z (Sat Jun 20 19:19:07 -0700)
Author: Shay assetoverflow@icloud.com
The PR body is the full HANDOFF-gpt55-2026-06-20.md content describing:
BoundQuestionTargettyped validation ingenerate/problem_frame.pydecrease_to_fractionbinding ingenerate/problem_frame_builder.pyassess_fraction_decrease+ tightenedpercent_partitioningenerate/problem_frame_contracts.py- Scripts, tests, and adequacy coverage
Note: The substantive kernel code changes above arrived through squash commits within the
PR's feature branch (feat/problem-frame-proportional-change-closure). The only delta
exposed by git show --name-status a145b7c3 vs its first parent is the 4 files listed below.
3. Exact Changed Files in Merge Commit vs First Parent
| File | Status | Category |
|---|---|---|
evals/gsm8k_math/train_sample/v1/report.json |
MODIFIED | Generated eval report |
teaching/proposals/comprehension_failures/34ce9254657be27b95c6330c8fe2dd731b762d8b4af9e075de838fa0c6b36750.json |
ADDED | Generated teaching proposal |
tests/test_problem_frame_builder.py |
MODIFIED | Test code |
tests/test_problem_frame_skeleton.py |
MODIFIED | Test code |
4. Which Files Were Unauthorized Artifact/Report/Proposal Paths
evals/gsm8k_math/train_sample/v1/report.json — UNAUTHORIZED REBASELINE
Before merge (first parent ad0bae29):
{"correct": 6, "refused": 44, "wrong": 0}
"exit_criterion": {"correct_min": 10, "passed": false, "wrong_max": 0}
After merge (a145b7c3):
{"correct": 30, "refused": 20, "wrong": 0}
"exit_criterion": {"correct_min": 10, "passed": true, "wrong_max": 0}
Why unauthorized:
- Governance doctrine:
report.jsonis the committed proxy baseline. Rebaseline requires a dedicated, explicitly ratified PR. Multiple prior analysis docs state this explicitly: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"
- The PR body mentions "serving unchanged: train
{'correct': 30, 'wrong': 0, 'refused': 20}" — this describes ephemeral live runner output observed during the session, not an authorized committed rebaseline. - No ADR, session note, or explicit PR section authorizes committing the new counts.
- ADR-0224: "GSM8K is diagnostic pressure only, not a benchmark-shaped substrate."
teaching/proposals/comprehension_failures/34ce9254657be27b95c6330c8fe2dd731b762d8b4af9e075de838fa0c6b36750.json — UNAUTHORIZED NEW FILE
Before merge (first parent): File did not exist.
After merge: 42-line JSON proposal with failure_family: missing_total_count,
mounted: false, requires_review: true, status: proposal_only.
Why unauthorized:
- File did not exist in any prior commit reachable from first parent.
- Committed via
chore(kernel): update adequacy report, fix lint warnings, and record failure proposal— a chore commit message does not constitute explicit authorization under governance doctrine. - No ADR, session note, or explicit PR section authorizes adding this proposal artifact.
- The HANDOFF/PR body explicitly claims "Claim status transitions via review gates only | Preserved | Teaching/review/proposal paths untouched" — this claim is directly contradicted by the actual diff and constitutes a reporting error.
- Governance: teaching proposals must go through the reviewed teaching lifecycle; committed proposal artifacts without review-gate passage violate the teaching/memory safety rules (AGENTS.md: "Reviewed memory must go through the teaching loop. Pack mutation is proposal-only until reviewed.").
5. What Was Restored/Deleted and Why
Restored: evals/gsm8k_math/train_sample/v1/report.json
Action: git show a145b7c3^1:evals/gsm8k_math/train_sample/v1/report.json > evals/gsm8k_math/train_sample/v1/report.json
Result: Counts return to {correct: 6, refused: 44, wrong: 0}, passed: false.
Rationale:
- The historical 6/44/0 pin is the committed proxy baseline used by downstream analysis docs.
- Live runner output (30/20/0) is correct and the kernel code that produces it is preserved — only the committed artifact is restored to the governed pin.
- A dedicated rebaseline PR should be opened by Josh or the next agent session, explicitly citing which sprint/PR ratification authorizes the 30/20/0 commit.
Deleted: teaching/proposals/comprehension_failures/34ce9254657be27b95c6330c8fe2dd731b762d8b4af9e075de838fa0c6b36750.json
Action: git rm teaching/proposals/comprehension_failures/34ce9254...json
Rationale:
- Newly added without authorization.
mounted: false/status: proposal_only— the proposal has never passed review.- The
missing_total_countfailure family it describes may be real, but the path for capturing it is through the teaching review loop, not via committed proposal artifacts in PRs not authorized to touch teaching paths. - Deletion does not lose the underlying diagnostic insight — it only removes the unauthorized persisted artifact.
6. Test Changes Preserved and Why
tests/test_problem_frame_builder.py — KEPT
Change: Line 49: assert "travel" in _frame_names(text) →
assert "travel" in tuple(f.name for f in frame.process_frames)
Why kept: This is a narrow correctness/lint fix that replaces a private test helper
(_frame_names()) with a direct accessor on the canonical ProblemFrame.process_frames
attribute. The assertion logic is identical; only the access path is improved.
This change is valid regardless of the authorized scope of #846.
tests/test_problem_frame_skeleton.py — KEPT
Change: Import line: removes ProblemFrame from the import (it was unused after the
BoundQuestionTarget validation work moved frame construction into the builder).
Why kept: Removing an unused import is a correctness fix. The change does not alter
test semantics, add assertions about artifact state, or encode any assumption about
report.json or teaching proposal content.
7. Validation Results
Scope verification
git diff --name-only origin/main...HEAD
evals/gsm8k_math/train_sample/v1/report.json
docs/sessions/pr846-reconciliation-audit-2026-06-20.md
teaching/proposals/comprehension_failures/34ce9254657be27b95c6330c8fe2dd731b762d8b4af9e075de838fa0c6b36750.json
Exactly the 3 authorized files (2 repairs + 1 audit note). No test files modified. No runtime/serving/algebra/field/vault/recall paths touched.
Automated test results
Run from the fresh worktree core-pr846-reconcile at HEAD after repairs:
uv run python -m pytest -q \
tests/test_problem_frame_builder.py \
tests/test_problem_frame_skeleton.py \
tests/test_kernel_no_new_legacy_derivation_surfaces.py
# [results recorded in PR body]
uv run python -m core.cli test --suite smoke -q
# [results recorded in PR body]
8. Remaining Risk
-
Live runner vs committed pin divergence: After this reconciliation, the committed
report.jsonshows{correct: 6, refused: 44, wrong: 0}while the live runner produces{correct: 30, wrong: 0, refused: 20}. Any CI or test that reads the committedreport.jsonand expectscorrect == 30will fail. This is the correct governance state — the divergence should be resolved by a dedicated rebaseline PR, not by re-committing the live output. -
Teaching proposal insight lost: The
missing_total_countfailure family documented in the deleted proposal is real diagnostic pressure. It should be re-captured through the proper teaching review lifecycle if it is to be persisted. -
PR #846 substantive changes are preserved: The kernel code changes (ProblemFrame builder, contracts, BoundQuestionTarget validation, scripts, tests) remain in
mainand are not reverted by this reconciliation. Only the two unauthorized artifacts are removed. -
HANDOFF consistency:
HANDOFF-gpt55-2026-06-20.mdcontains the claim "Teaching/ review/proposal paths untouched" which is now historically inaccurate. A future handoff should document the correction. This reconciliation PR does not modify the handoff file (onlydocs/sessions/and the two artifact paths are in scope).
9. Next Correct Step After Reconciliation
- Merge this reconciliation PR after review by Josh.
- Open a dedicated rebaseline PR for
evals/gsm8k_math/train_sample/v1/report.json— explicitly referencing which sprint/PR series authorized the 30/20/0 counts and satisfying the ratified-rebaseline governance requirement. - Proceed with quantity-entity implementation only after this reconciliation is merged or explicitly waived by Josh (per task brief).
- Re-capture the
missing_total_countdiagnostic through the proper teaching review lifecycle if it is considered important enough to persist.
Appendix: Forbidden-Path Audit
This reconciliation PR does not touch:
| Path | Status |
|---|---|
generate/derivation/* |
Not touched |
generate/math_candidate_graph.py |
Not touched |
packs/* |
Not touched |
policy/* |
Not touched |
identity/* |
Not touched |
recall/* |
Not touched |
vault/* |
Not touched |
field/* |
Not touched |
algebra/* |
Not touched |
| Any new eval artifact | Not created |
| Any new teaching proposal artifact | Not created (one deleted) |
| Runtime/serving paths | Not touched |