Context

The retagging pass in #140 moved fifteen documents to the topic that names their claim. Reviewed, the objection was: “you’ve replaced a bunch of tags where you just needed to add an additional tag. the old tags still seem applicable in the cases I reviewed.”

That is right, and re-reading them it is right about most of them. LIT-192 (Positional Interpolation) and LIT-193 (YaRN) moved from attention-techniques to representation-and-encoding — but attention-techniques names context length in its own blurb, and both papers are context-extension papers. LIT-208 proposes a hybrid attention strategy; its title says so. LIT-045 and LIT-048 describe components of the architecture as well as schemes for encoding position. In each case the new topic is better and the old one was not wrong.

It could not have been additive. fields.tags.groups.primary_topic required exactly-one of the thirteen, so a second topic is a hard lint violation:

`primary_topic` wants exactly one of … — has model-architecture,
representation-and-encoding

So the pass had one move available, and it took it. That is the same corner luria.yaml already records from #101 — “the only move available under exactly-one — it satisfied the check rather than answering it” — reached from the other side: there the constraint forced an incidental secondary tag in, here it forced a true topic out.

Decision

1. require: exactly-one becomes require: any on the topic group, in all four schemes that declare it — LIT, SOTA, NOTE, THEORY.

2. The primary topic is unchanged in meaning: it is the first topic listed. primary_topic already derives {tags[0]}, so the indexes still file a document under one topic and nothing downstream moves. Relaxing the group on its own changes no finding: with a second topic added and the invariant left where it was, docs/reports/unbound-lineage.md was byte-identical at 24 unbound relations and 10 unbound lines.

3. The chain invariant moves from primary_topic to tags. Asked in review: “the primary topic doesn’t need to be invariant, just the presence of a common tag across the edge.” That is what a relation asserts — its members have something in common, not that the something is the first thing each is about.

It read primary_topic on the argument that “any shared tag is too weak to carry it — two practices bound by an incidental label read as bound when nothing about their subject matter is”. That was right while exactly-one was in force, because a secondary was then necessarily a free-form label rather than one of the thirteen. Under any a secondary can be a real topic, and the objection survives only for the free-form ones.

Measured on the switch: 24 unbound relations become 21, and the three that bind are the argument in miniature.

edgebinds onright?
LIT-211 ↔ LIT-229training-optimizationyes — both are about ES as an optimizer
LIT-211 ↔ LIT-242training-optimizationyes — same
SOTA-085 ↔ SOTA-161flash-attentionno — an incidental label, and the case the old argument was about

4. So the two flash-attention tags go. #101 added them to both ends of that pair to bind it under an invariant that then read tags, and luria.yaml already records the verdict — “it satisfied the check rather than answering it. The edge is real and crosses a fault line in the vocabulary, which is what these findings are for.” With the invariant back on tags they would do it again. Removed, the edge is open again and the count settles at 22 relations, 10 lines.

5. The vocabulary gains tiny-models, and tags is closed on SOTA, LIT and THEORY. Ten documents carried tiny-models as an undeclared string; it now has a label and a blurb. Closing follows from the invariant move: if any tag can bind a relation, a word typed once can quietly assert that two documents share a subject, and a closed vocabulary makes that a decision rather than a typo. Verified — an undeclared tag is now a violation naming the file.

NOTE’s tags: declares no vocabulary at all, so closing does not reach it and a free-form tag there is still accepted. That is a gap, not a decision.

The guard is a turnstile, not a wall, and the lint does not say so. Raised in review: closing a vocabulary mainly discourages people from adding to it. The message a contributor hits is “is not in the topics vocabulary — the values are …”, which sets up “pick the nearest of these fourteen” as the path of least resistance. That is the failure this whole pass has been repairing: eight positional-encoding papers filed under the nearest available word because representation-and-encoding did not exist yet.

Mitigated here in prose — CLAUDE.md now says the closure is an invitation and that adding a word, with a label and a blurb and a decision, is the intended move. Prose helps the contributor who is reading CLAUDE.md, not the one looking at a lint message. LU-#273 asks luria to let a rule carry its own note so the remedy can be printed where the failure is. If that is refused, the honest response is to re-open the vocabulary rather than keep a guard that teaches the wrong lesson — the invariant change is what made closing worth doing, and it survives either way.

Eleven of #140’s fifteen get their old topic back as a secondary, plus NOTE-028 following its paper: the eight positional-encoding papers, LIT-211, SOTA-098 and SOTA-099.

7. Four stay replacements, because the old topic was not applicable:

  • SOTA-060 — an initialization rule for stability, filed distributed-optimization because its source is a Megatron paper. The claim is not about distribution.
  • SOTA-092, SOTA-093, SOTA-094 — three claims about batch size, filed model-architecture because their source is a model report. A claim about sample efficiency is not about architecture.

Those four are the cases where the old tag named where the claim was found rather than what it is about, which is the filing error ADR-026’s rule is against. Keeping them would preserve a mistake, not information.

Consequences

Tag order is now load-bearing. Under exactly-one, reordering tags: could not change primary_topic while only one entry was a topic. Under any, moving the second topic to the front silently retags the document — and nothing checks it. The convention was already unguarded (a free-form tag listed first would always have produced a wrong primary_topic) and it holds in all 596 documents today, measured. But the ways to break it just got more plausible, and LU-#229 is the upstream ask for a guard.

Documents will appear under more than one topic in the generated views. That is the point — a reader looking for context extension under attention-techniques will now find YaRN there — and it makes the per-topic pages less of a partition than they were.

exactly-one was load-bearing for one thing and is no longer. ADR-003 introduced it and ADR-026 reaffirmed it while merging the two vocabularies, and in both the argument was about the vocabulary being shared and small, not about a document having only one subject. Nothing in either turns on the cardinality. This decision was filed Proposed because that reading needed checking by someone who was there; it was checked and the decision is Active as of v3.

A shared tag can now bind a relation, which is the point and the risk. Binding on a real topic is the record saying what two documents have in common. Binding on a free-form label is the #101 move. The two flash-attention tags are gone and tiny-models is the only free-form word left — on ten documents, binding nothing today — and the vocabulary is closed on three of the four schemes so a new one has to be declared first.

NOTE is the hole in that. Its tags: names no vocabulary, so closing does not reach it: a free-form tag on a reading is still accepted and would still bind. Nothing exploits it today. It wants either a vocabulary on the field or a reason in writing why notes are different.

Alternatives considered

Leave the replacements as they are. They discard a true statement about eleven documents, and the review objected to exactly that.

Keep exactly-one and record the old topic in keywords:. Keywords are the paper’s own subject words, not the record’s filing, and nothing indexes them as topics. It would hide the fact rather than carry it.

Keep the invariant on primary_topic. The position this decision held until review. It makes the check ask whether two documents are primarily about the same thing, which is stronger than what a relation asserts, and it leaves LIT-211 unbound from the two ES papers either side of it while all three carry training-optimization.

Move the invariant to tags and keep the flash-attention labels. Then three edges bind and one is bound by a word added to bind it — the check satisfied rather than answered, which the record already decided against.

at-most-one. The other available rule, and it permits zero topics, which is worse than what we have — every document should be about something.

What became of this decision’s warning

(Added at v2, after a compression of this decision in CLAUDE.md was read as saying the opposite of what it says.)

The warning in §3 and §4 — that a shared tag binding a relation is “the point and the risk”, the risk being a free-form label invented to satisfy the check — has been narrowed twice since. A reader arriving here should go to those decisions rather than reconstruct the rule from this one.

  • ADR-046 — tag the document’s subject, liberally; the test is whether a tag is justifiably appropriate, and the forbidden case is narrow. It says this decision “stands unchanged” and that a tag true of a document “is not made suspect by a chain that might one day read it”.
  • ADR-049 — an unbound relation has exactly two readings, the invariant is missing or the relation is wrong, “and never a third where the answer is to note that somebody looked”. It took 22 unbound relations and 10 unbound lines to zero by naming what twenty-one documents were already about, and rejected an acknowledgement directive for the purpose.

Together those say what this decision left implicit: the report exists to find documents that are not saying what they are about, and answering one by adding a true topic is the intended response. What stays forbidden is narrow — inventing a label to satisfy the check, which §5’s closed vocabulary has since made structurally unavailable on SOTA, LIT and THEORY.