docs(contract): the generic consumption contract, stated normatively

The plan document decided what the contract is and who owns it, and said of
itself that nothing in it was implemented. This states the same six elements as
numbered paragraphs with MUST and SHOULD, in the form a checker can read, and
adds the three things the plan layer had no way to carry: concept identity as
the (bundle_id, concept_id) tuple with a content digest per excerpt, the closed
adjudication state set with unknown written explicitly rather than collapsed,
and the prohibition on reaching the verdict layer with a query-time retrieval
tool.

The plan document is not rewritten to match. It records why; this binds. Two
copies of the same rules drift, so the plan carries a pointer instead.
This commit is contained in:
Kjell Tore Guttormsen 2026-09-02 16:05:11 +02:00
commit f9513cdcb4
2 changed files with 205 additions and 2 deletions

View file

@ -1,7 +1,13 @@
# The generic OKF bundle consumption contract
**Status: plan. Nothing here is implemented, and nothing here asks to be.**
No module, no profile field, no version bump follows from this document. It
**Status: plan, and now implemented elsewhere.** When this was written, nothing
here was implemented and nothing here asked to be. That changed: the decisions
below are stated normatively, with MUST and SHOULD and numbered paragraphs, in
[`docs/consumption-contract.md`](consumption-contract.md), and checked by
`tools/okf_contract_check.py`. **That document binds; this one records why.**
Nothing here has been rewritten to match it -- the reasoning is the artifact,
and two copies of the same rules would drift.
No profile field and no version bump follow from this document. It
fixes what the contract *is* and who owns it, so that the first bundle-specific
consumption skill — written later, in whichever repo needs it — has something
to be conformant to.