core/teaching/__init__.py
Shay ef95d3e609 feat(adr-0021): epistemic_status surface wired across teaching + trace
ADR-0021 v1 schema land. epistemic_status is a position in the revision
graph, not a source-trust tier — coherence is the only admission signal.

Surfaces:
- teaching/epistemic.py: EpistemicStatus enum (COHERENT, CONTESTED,
  SPECULATIVE, FALSIFIED); ADMISSIBLE_AS_EVIDENCE = {COHERENT}.
- PackMutationProposal.epistemic_status (default SPECULATIVE) + immutable
  with_status() updater.
- ReviewedTeachingExample.epistemic_status (default SPECULATIVE);
  orthogonal to acceptance per ADR §Schema impact.
- LexicalEntry.epistemic_status (default "coherent" for seed; absent in
  JSONL is treated as the seed default — no retroactive tagging).
- compute_trace_hash + trace_hash_from_result + pipeline.py fold the
  load-bearing proposal's epistemic_status into the trace hash so
  replay detects different epistemic frames.

Non-hardening invariant (ADR-0021 §2): tests/test_epistemic_invariants.py
asserts no final/frozen/axiom/permanent flag on PackMutationProposal or
ReviewedTeachingExample, and EpistemicStatus contains no source-trust
tier names.

Docs: docs/runtime_contracts.md gains an Epistemic surface section.

Lanes green: smoke 27/27, teaching 10/10, packs 6/6, runtime 19/19,
cognition eval 100%.
2026-05-16 20:20:35 -07:00

31 lines
1.2 KiB
Python

"""teaching — correction capture, review, and proposal-only pack mutation.
The teaching loop allows CORE to learn from corrections in a controlled,
auditable way. Corrections flow through three stages:
1. Capture — extract a CorrectionCandidate from a correction intent
2. Review — validate the candidate (identity-safe, bounded, deterministic)
3. Store — persist reviewed examples; propose pack mutations without applying
Identity overrides are rejected at the review stage. Pack mutations are
emitted as proposals (PackMutationProposal) that require explicit external
approval before they touch the vocabulary manifold.
"""
from teaching.correction import CorrectionCandidate, extract_correction
from teaching.epistemic import ADMISSIBLE_AS_EVIDENCE, EpistemicStatus, parse_status
from teaching.review import ReviewedTeachingExample, ReviewOutcome, review_correction
from teaching.store import TeachingStore, PackMutationProposal
__all__ = [
"ADMISSIBLE_AS_EVIDENCE",
"CorrectionCandidate",
"EpistemicStatus",
"PackMutationProposal",
"ReviewedTeachingExample",
"ReviewOutcome",
"TeachingStore",
"extract_correction",
"parse_status",
"review_correction",
]