Skip to contentWolf-Rayet

Decision records

ADR-0092 A removal does not renumber the past, and a set is counted once

Accepted2026-09-16Phase 4, reopened

#Context

ADR-0091 removed the first two built components. self-description:check (ADR-0047) then failed on thirty claims, and none of them was a new defect:

  • Twenty-six were ordinals. Every component built after text-area and

select describes itself by build position — *"the twentieth component"*, *"the fourth Arbiter"* — and the check computed the expected ordinal from the config's current order. With two entries gone, every later component was told it had been built two places earlier than it was.

  • Four were counts. *"The eleven that do accept input"* is restated in the

notes of four components, and the set now has nine.

Reading the counts found a third thing. Standing item 22 has said since it was opened that one counted fact restated in five notes costs five edits per component. There were in fact sixteen restatements, and three of them — *"One of the eighteen…"*, *"One of the nineteen…"*, *"one of the ten that do accept input"* — were already wrong and had been wrong for several components, because the check's patterns matched one capitalisation and these used another. The coverage item 22 was reluctant to give up was partly coverage the check did not have.

#Decision

An ordinal is build order, and a removal is recorded rather than renumbered. component.config.json gains removed, a register of each built component that left the set with the build position it held. The check splices those entries back into the order before it computes an ordinal, overall and within a layer. *"The twentieth component"* was true when that component was built and stays true; rewriting twenty-six descriptions to match a later set would make the file claim that history happened differently.

The interactive set is counted once. The count lives in the config's top-level $interactiveNote — *nine accept input and twenty-seven do not* — and nowhere else. Each component's own $interactiveNote states only whether that component accepts input. The check is two-sided, per ADR-0041:

  • the note must state both figures and both must match the set;
  • no component's block may count the set at all, in any capitalisation.

Both halves were seen failing before the check was trusted: a wrong figure in the note and a planted *"One of the Twelve That Do Not"* in tag's block, each reported by name. tokens:verify still derives the first figure on every run.

This answers item 22 in the direction its own text leaned away from, and the reason is the finding above. The argument for five copies was that a reader meets the count where they look. What a reader met in three of those places was a wrong count, and an extra position a check does not reliably read is not coverage. One stated count, checked strictly, beats sixteen restated loosely.

#Rejected

  • Renumber the twenty-six ordinals. It is the edit the check asked for, and

it would rewrite a record of when things were built every time the set shrinks.

  • Remove ordinals from descriptions entirely. Build order is how this

repository's history reads, and ADR-0047's argument that identity lives where a reader looks still holds for a component's own position.

  • Widen the count patterns to every capitalisation and keep sixteen copies.

It fixes the reading and keeps the churn: every future addition or removal would still edit every copy.

  • Derive the ordinal from git history. A shallow CI checkout has none, and

a check that needs the network to know what a file says is the wrong shape.