core/teaching/proposals/comprehension_failures
Shay 5903cba08a feat(teaching): proposal-only failure-artifact emitter (N5)
core/comprehension_attempt/proposal.py: emit_proposal writes a content-addressed teaching/proposals/comprehension_failures/<hash>.json ONLY for growth-surface families (proposal_allowed). Deliberately toothless: status always proposal_only, mounted always false, requires_review always true (enforced in __post_init__); the problem text is hashed (sha256), never stored; filename = sha256(family:text_sha) so the same failure is idempotent.

No proposal for a correct wrong=0 boundary. Serving never reads the sink (scanned: generate/stream, field/propagate, vault/store, generate/derivation, core/reliability_gate). Routes through the existing proposal-only flywheel (ADR-0055/0056/0057), never a parallel correction path. README pins the contract. 6 tests.
2026-06-07 08:48:45 -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.