Context
#202 found that the check already existed and this record had never
declared it. schemes.SOTA.references.source accepts an invariant:, exactly
as the two chains: do, and asserting it over tags finds every practice
filed under a topic that no paper behind it holds.
Run fresh on 2026-09-22 the query returned 60 rows — 44 on Active
practices, 51 with both sides in force. The issue reported 59 two days
earlier; the record has grown since.
The issue also named the reason not to simply turn it on: there is no
acknowledgement directive for an unbound row. inactive-ok: covers
citations, target-ok: covers link targets, unresolved-ok: covers codes.
Nothing covers “this relation is deliberately unbound.” So declaring the
invariant over a standing backlog would have made
docs/reports/unbound-lineage.md read 60 with no way to retire a row somebody
had looked at and judged fine — and that report’s all-clear is most of its
value.
Decision
Work the rows first, declare the invariant second. Both are in this contribution, in that order.
The pass took 60 rows to 0, across 49 documents. The distribution of readings was not what the issue anticipated:
- 57 of 60 were under-tagging, on one side or the other, and the fix was to
add a topic that was true and missing. Attention Is All You Need did not
carry
attention-techniques. FlashAttention did not carrysystems-optimization. CheckFreq did not carrydistributed-optimization, whose blurb names checkpointing. A dozen diffusion practices did not carrygenerative-modeling. - 1 was a mis-tagged practice.
SOTA-033, “continued pre-training for fine tuning”, wasmodel-architecture; it isadaptation-and-tuning. This is the only row where a primary topic moved. - 0 were the RETRO class — a practice drawn from the wrong part of a paper. That class was real when the issue was written and #201 closed it by filing the missing retrieval practice.
- 0 needed a word the vocabulary does not have. The eighteen topics absorbed every row.
Tags are appended, never reordered. primary_topic derives {tags[0]},
so a prepend silently refiles a document. One primary topic moved in the whole
pass, and it moved on purpose.
Alternatives considered
- Declare it and work the backlog afterwards. The obvious sequencing and
the issue argues against it directly: a report that reads 60 with no way to
retire a row trains the next reader to ignore it. The two
chains:sit at 0 today because they were worked down before being relied on, and this is the same bargain. - Ask upstream for an
unbound-ok:directive first. Would have been necessary had the residue been large. It was zero, so the directive is not needed to make this check permanent here — though its absence is still worth recording, because the next record to declare this will face the same choice with a different residue. - Treat the rows as evidence the vocabulary is short a word.
unbound-lineage.mditself says that is the usual reading, and for the twochains:it has been. Here it was not: every row bound with an existing topic, and reaching for a new one would have been the failureADR-035§4 names. - Add tags mechanically to clear the check. The forbidden move, and the
reason each row was judged against the test in
CLAUDE.md— would someone browsing that topic be right to expect this document? — rather than against whether it made the row go away. The batch is auditable: one topic per row, each with a stated reason. - Status quo. The check stays undeclared and the drift stays invisible.
Nothing in prose was wrong in any of the 60 rows; the divergence lived
entirely in two
tags:fields, which is exactly the class of defect a structured-field detector exists to find (#203).
Consequences
docs/reports/unbound-lineage.md now asserts three invariants —
SOTA.source, practice, lineage — and reads 0 unbound relations. The
one unbound line is the pre-existing SOTA-036/037/038 sequence and is
untouched by this.
The weakest row is named rather than buried. SOTA-060 (layer-norm init
variance 0.02) sources LIT-043 (Megatron-LM 3D parallelism), and
model-stability was added to a parallelism paper. It is defensible — a paper
that trains models at that scale does report stability settings, and this one
is cited for exactly that — and it is the row a future reader is most likely to
disagree with. It is also a symptom: LIT-043’s whole note is the sentence
“3D parallel training strategy”, and a note that thin cannot say what it is
about. The row is as much a reading backlog as a tagging one.
Adding a topic to a paper changes which tag pages it appears on, which is the point and is also a cost: 21 literature notes now appear under a topic they did not before. Each addition is one topic and was justified individually.
This does not make the check free. A new practice whose source shares no topic with it will now show in the report, and the fix will be the same judgement call made 60 times here. What it buys is that the judgement happens when the document is filed, while the context is loaded, instead of two years later in a pass like this one.