Skip to content

DR-132 — Reference items are evidence, not records: no admission gate, and they do not enter form matching

DR-132 — Reference items are evidence, not records: no admission gate, and they do not enter form matching

Section titled “DR-132 — Reference items are evidence, not records: no admission gate, and they do not enter form matching”

Two questions arrived together in S538 and turn out to have one answer.

First, corpus-reframe-review.html R2 rules that the authoritative gate is knowledge admission — “Authority is earned at sign-off, not inherited from a folder” — and R2 outranks the spec chain under DR-104. But reference_items has no publication_status and no promotion step; its only lifecycle column is superseded_by. Either the table is missing a gate, or R2 does not reach it.

Second, question_match_recompute sources only q_a_pairs (INNER JOIN record_embeddings on owner_kind='q_a_pair'), while the older search_for_form_response searched q_a_pairs + reference_items. A ratified spec line appeared to settle it — specs/id-131-okf-l-records-refactor/PRODUCT.md §I, BI-29 (RATIFIED 28/06/2026, D2): “Forms matching is re-pointed off content_items onto typed records: q_a_pairs (primary) + reference_items (optional).” A design pass therefore proposed a question_matches polymorphic migration to add the missing arm, citing the unreachable reference_item legs already built into the drafting path (fetchMatchedContentForDrafting queries reference_items on every draft with ids that are NOT NULL FK’d to q_a_pairs; draft-stream has a cited_kind: 'reference_item' branch that can never fire) as evidence of unfinished wiring.

The owner ruled otherwise, and named BI-29’s parenthetical as a clause they did not want and do not know how it entered context. An earlier same-session statement apparently endorsing the reference_items arm was confirmed as a transcription error.

A reference item is external evidence, not an admitted record. It is citable and attributable, never authoritative on its own. Two consequences:

  1. No knowledge-admission gate. R2’s sign-off gate governs records — the things that carry authority. superseded_by is the whole of a reference item’s lifecycle, and that is correct rather than incomplete. Nothing is missing from the table.
  2. Reference items are not a form-matching corpus. Form matching draws on q_a_pairs only. question_match_recompute being q_a_pair-only was correct; search_for_form_response searching both was the defect, not the fix. BI-29’s reference_items (optional) clause is retired as unwanted, and the unreachable reference_item legs in the drafting path are deleted rather than wired.
  • Add the reference_item arm (a question_matches polymorphic migration on the citations idiom, plus rank_score, plus a stats-RPC rewrite). Rejected by the owner: it builds on a spec clause they never wanted, and it puts external references into a surface that answers on the organisation’s behalf.
  • Give reference_items a publication_status / promotion step so R2’s gate applies uniformly. Rejected: it invents an admission ceremony for something whose defining property is that it came from outside and was never authored here. DR-125 also binds scope_tag to promotion, so a reference item has nothing to attach it to.
  • Treat the unreachable code as evidence of intent. Rejected — this is the DR-123 trap: built-but-unreachable legs record what someone once planned, never that it was correct. The codebase’s own discriminator points the other way: when {131.20} ruled an arm out it deleted it (find_related_items, filter_by_keywords — “DROPPED ENTIRELY”), so an un-deleted arm is not a positive signal.

Evidence basis — read before citing this

Section titled “Evidence basis — read before citing this”

This ruling rests on owner recollection, not measurement. No probe was run to test whether reference items behave as evidence or as records, and no supersession check was made against BI-29 — a ratified decision — before overturning it. The measured facts on the record actually point the other way: fetchMatchedContentForDrafting queries reference_items on every draft, and draft-stream carries a fully-built cited_kind: 'reference_item' branch. Both are unreachable, and this decision rules them residue rather than unfinished wiring — on the owner’s authority over their own product, which is legitimate grounds, but is not the same as evidence.

The trigger was also a transcription artefact: an earlier same-session statement appearing to endorse the reference_items arm originated as the Coordinator’s own framing, echoed back and then validated by a sub-agent as if it were an independent owner claim. That loop closed without an external check at any hop.

So: honour this ruling, and re-open it cheaply if measurement later contradicts it. It is the weakest-evidenced decision in the register at the time of writing, and it is recorded that way deliberately.

  • No migration. question_matches keeps its q_a_pair_id NOT NULL shape.
  • search_for_form_response retires (zero TS callers) rather than becoming the model.
  • The drafting path loses its reference_item legs: the reference_items query in fetchMatchedContentForDrafting and draft-stream’s cited_kind: 'reference_item' citation branch. The citations enum keeps reference_item — citations from other surfaces are unaffected.
  • A ratified spec now carries a clause its owner disowns. id-131 PRODUCT §I BI-29 should be annotated where it sits, so the next reader does not re-derive the arm from it. This is the second S538 instance of a ratified-looking artefact asserting something never ratified, and it sharpens DR-123: a ratified spec is evidence that someone wrote it down, not that the owner agreed to every clause in it.
  • reference/entity-glossary.md gains the evidence-vs-record distinction so the question stops being re-derived — it was UNDECIDABLE to two independent lanes this session.