Expand description
Retrieval attribution: closing the loop from a served frame to what it did
(SPEC.md §14; issue #31).
The Context Frame spec’s sixth question is “why was each item included, and
can its effect be evaluated later?” Provenance answers the first half —
where an item came from, and (§6.2) whether its bytes are still what they
claim. Nothing answered the second. A host could tell you a frame cost 42
tokens and came from retry-policy.md, and nothing at all about whether
including it helped.
That gap is not theoretical: a host in this ecosystem already A/B-suppresses recall on a fraction of turns to measure whether retrieval earns its budget, entirely outside the protocol, because the protocol gave it no vocabulary to say so.
§What this is, and what it deliberately is not
This is a host-produced record, exactly like UsageReport
— not a wire method. There is no context/feedback envelope, no
Capabilities.feedback, and no host API that transmits any of this to a
provider.
That restraint is the point. ADR 0004
purged upsert, subscribe, and filters from the 1.0 surface for being
capabilities no host could exercise, and §Q1 had to be written because
kinds shipped as a request field that every implementation ignored. Adding
a negotiated feedback method days before a freeze — with no provider
consuming it and no conformance check able to witness it — would recreate
precisely the defect that work removed.
So the attribution vocabulary is specified now, because it is the half
that has to be shared for scores to be comparable across implementations,
and the wire hop that ships it back to a provider is deferred to a 1.x
additive minor (docs/sketches/attribution-feedback.md). Hosts can score
retrieval locally today; when a provider exists that consumes the signal,
the shape it consumes is already agreed.
§The identity is not new
Attribution needs a stable per-item handle, and the protocol already has
one: FrameId, the (provider id, frame id, content digest) triple that composition, dedup, usage reports, and verify all
key on. Minting a second id for attribution would let the two disagree —
and a disagreement between “the frame that was billed” and “the frame that
was cited” is exactly the confusion this record exists to prevent.
Structs§
- Attribution
Report - Every
ContextUsefor one request, alongside theUsageReportthat says what those frames cost. - Context
Use - What actually became of one served frame, as three independent observations
(the
context_usevocabulary of ADR 0007).