core/teaching/proposals/comprehension_failures
Shay b6d422834b
reconcile: restore eval proxy and remove unauthorized teaching proposal from #846 (#847)
- 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.
2026-06-20 19:40:12 -07:00
..
README.md feat(teaching): proposal-only failure-artifact emitter (N5) 2026-06-07 08:48:45 -07:00

Comprehension failure proposals (proposal-only)

This directory is the write-only sink for the contemplation pass (N5/N6). When the loop meets a growth-surface failure family (proposal_allowed = True in the N4 registry), it may emit one content-addressed artifact here:

<sha256(failure_family : sha256(problem_text))>.json

Every artifact is deliberately toothless:

{
  "status": "proposal_only",
  "mounted": false,
  "requires_review": true,
  "suggested_next_fixture": null,
  ...
}

Hard rules (enforced by tests)

  • status is always proposal_only; mounted is always false; requires_review is always true.
  • Serving never reads these files. No generate/derivation, core/reliability_gate, generate/stream.py, field/propagate.py, or vault/store.py references this path.
  • The raw problem text is hashed, never stored (problem_text_sha256).
  • The emitter never proposes against a correct wrong=0 boundary (must_remain_refused families produce no artifact).
  • Filenames are content-addressed and deterministic — the same failure writes the same path.

What happens next

A proposal is an input to human review, not a change. The aligned flow is

failure -> classification -> proposal -> review -> ratification

never failure -> self-patch. Ratification (authoring the gold fixture / reader rule) happens only via a human-reviewed PR through the existing teaching flywheel (ADR-0055/0056/0057). The engine cannot mount, ratify, or apply anything written here.

Generated artifacts are not committed; this README is the only tracked file in the directory.