The pre-pass delivered the right concept and the answer could not name it.
Measured by portfolio-optimiser 2026-09-08 over three paid arms: the gold
concept came back at rank 1 of 8 on 3 of 3 bundles, and the model answered
correctly on 1 of 3, because a delivered excerpt carried `concept_id`, body
text and nothing the document is known by. The previous session measured the
same gap from the other side: the provenance it had just written into every
concept did not reach the payload at all.
`excerpt_for` now carries `title` unconditionally, and `req_number`, the SPEC
5.1 address `sources` and each locator key (`source_pages`, `source_sheet`,
`source_rows`, `source_lines`, `source_offset`) when the concept has them. A key
the producer did not write stays absent: an empty value would assert that they
wrote an empty one, which is the contract's 6.4 failure.
`sources` is read in BOTH YAML forms, on a measurement rather than a taste. K2
writes the flow form on 629 of 629 concepts; the largest N-bundle writes the
block form on 270 of 270 and carries no locator key at all, so a flow-only
reader delivers that bundle with no address whatsoever. Reading the block form
is not a licence to write it - the emission rule is untouched, because the
line-oriented parser still cannot round-trip a block list. A `sources` value
this reader cannot decode is named (`sources_unreadable`), never dropped into
the same silence as an absent one.
Contract 8 gains the requirement and the checker gains its code
(`excerpt_unnamed`, 15 rules now, was 14): an excerpt a reader cannot name is
one an answer cannot cite, whatever its rank. `req_number`, `sources` and the
locators are SHOULD, not MUST - they are conditional on the producer, and a
bundle whose concepts carry no identifier cannot deliver one.
K2 controls, same question and same k, before against a frozen copy of the tool
at
|
||
|---|---|---|
| .. | ||
| example-payload.json | ||
| README.md | ||
References for the consumption-skill template
Two files, and they play different roles.
example-payload.json— a conformant payload in the shapedocs/consumption-contract.md§ 8 fixes. It is the known-positive fortools/okf_contract_check.py: the suite checks that this file passes, so a checker that refuses everything cannot be green. Its three excerpts carry one of eachadjudicationvalue on purpose, so that the closed set is exercised rather than asserted. The digests are real sha256 digests of the paths beside them, not of any real concept file: the example is a shape, not a bundle.SKILL.mdbeside this directory — the template a per-corpus skill copies.
Copying the template
- Copy
skills/okf-consume-template/to wherever the per-corpus skill lives. - Replace every
<PLACEHOLDER>. None has a default; a copy with one left is unfinished, not configured. - Keep every
##heading. The checker reads them by name. - Point
--payloadat your own pre-pass output, not at this example, and run the checker in the corpus repo's test suite rather than by hand.
The checker checks shape. The division of labour (§ 2) and the prohibitions (§ 9) are properties of a run, and no static check can see them.