Phase 2's first lane: every articulated claim must back-point to one of
{pack axiom, vault entry, teaching event}, and replay must reproduce the
trace bit-for-bit.
Components:
- core/cognition/provenance.py: Provenance dataclass + compute_provenance()
deriving sources from a CognitiveTurnResult. Pack source = non-UNKNOWN
intent.tag (pack-defined intent rule matched); vault source = vault_hits
count; teaching source = pack_mutation_proposal.proposal_id.
- evals/provenance/{contract.md, runner.py, dev/, public/v1/, holdouts/v1/}:
45 cases across pack_axiom / vault_recall / teaching / mixed categories.
- tests/test_provenance.py: 6 unit tests covering all source-kind profiles.
Sub-metrics (all four must pass):
- replay_determinism: same input + fresh runtime -> same trace_hash
- input_sensitivity: distinct prompts -> distinct trace_hashes
- source_attribution: every expected source kind present in Provenance
- source_validity: every cited source resolves to a real artefact
Results:
- dev: 10/10 (all sub-metrics 1.0)
- public/v1: 20/20 (all sub-metrics 1.0)
- holdouts/v1: 15/15 (all sub-metrics 1.0)
PROGRESS.md updated to mark Phase 2 in progress with provenance v1 complete.
3.5 KiB
provenance eval lane
What it measures
Whether every articulated claim back-points to a concrete source (vault entry, teaching event, or pack axiom / intent rule), and whether replaying the same input on the same field state reproduces the trace bit-for-bit.
This tests the architectural claim that CORE's outputs are grounded: every surface assertion is traceable to memory, teaching, or pack vocabulary, and the pipeline is deterministic so traces are reproducible.
Why it matters (structural win)
Frontier LLMs cannot produce per-claim provenance — their outputs are synthesized from opaque weight activations with no back-pointer to source data. CORE, by construction, produces:
- Vault provenance —
vault_hits > 0indicates exact-recall sources consulted during the turn. Each hit can be resolved to a stored versor and its metadata. - Teaching provenance —
reviewed_teaching_exampleandpack_mutation_proposalcarry stable IDs that survive replay. - Pack provenance —
intent.tagis grounded in pack-defined intent rules (a non-UNKNOWNtag means the input mapped onto an axiom in the active language pack). - Trace hash — SHA-256 over a stable subset of the turn output is deterministic across hardware (floats rounded to 9 decimals).
A model that articulates without sources fails this lane. A model that articulates correctly but cannot replay fails this lane. A model that passes is demonstrating something frontier models cannot.
Sub-metrics
M1. Replay determinism
For every case, run the pipeline twice with two freshly-constructed runtimes on the same prompt sequence. The trace hashes of corresponding turns must be identical.
Pass threshold: 100% (any mismatch is a structural failure).
M2. Input sensitivity
Pairs of cases with different prompts must produce different trace hashes. A collision would mean the hash is not actually sensitive to its inputs.
Pass threshold: > 0.95.
M3. Source attribution
For each case, the expected source kinds (pack, vault, teaching) must
appear in the computed Provenance for the final turn.
Pass threshold: > 0.95.
M4. Source validity
Every source referenced in the Provenance must be valid:
packsource:intent.tagis a knownIntentTagenum value (not the empty string).vaultsource: every vault hit index is in[0, len(vault)).teachingsource: every teaching proposal id is present in theTeachingStore.
Pass threshold: 100%.
Case format
Each case is a JSONL row with the following fields:
{
"id": "PROV-V1-NNN",
"category": "pack_axiom" | "vault_recall" | "teaching" | "mixed",
"prime": ["optional", "list", "of", "prompts", "to", "run", "before"],
"prompt": "the final prompt whose provenance is scored",
"expected_sources": ["pack", "vault", "teaching"]
}
prime(optional): zero or more prompts run before the scored prompt to seed the vault, the teaching store, or both.expected_sources: a non-empty subset of{"pack", "vault", "teaching"}— the kinds of source the final turn must back-point to.
Pass thresholds (v1)
| Metric | Threshold |
|---|---|
| replay_determinism | 1.00 |
| input_sensitivity | > 0.95 |
| source_attribution | > 0.95 |
| source_validity | 1.00 |
| Overall | all four pass |
Data layout
evals/provenance/
contract.md
runner.py
dev/cases.jsonl
public/v1/cases.jsonl
holdouts/v1/cases.jsonl
baselines/
results/