Skip to contentWolf-Rayet

Decision records

ADR-0072 The retraction is the component, and both defects were found by the machinery rather than by the argument

Accepted2026-09-06Phase 4, reopened

#Context

ADR-0071 kept presence on an axis the identity test did not contain, and said what would settle it: *"the build is what proves the argument: a contract asserting a retraction it does not render is prose, and tokens:verify refuses it in both directions."*

This is the build. The argument survived it. Two things in the implementation did not, and neither was caught by reading — one was caught by the component tier's own check, one by the budget engine.

#The component, as decided

Emitter, [1, 2], interactive: false, vouches: true, one governed part. The thirty-fifth component and the twenty-first Emitter, and the ninth of the thirty-five that vouches.

Three states, of which two are variants. alone and accompanied are the variant axis. The third is vouched: false, and it is not a variant — it is the axis this row was kept on, and keeping the two apart is the whole shape of the component. A reader must tell *three others are watching* from *nobody else is watching* from *nobody can currently say*, because the first lets them look away, the second tells them they are the loop, and the third tells them they do not know which of the two they are in.

alone is a variant rather than an absence, and that is ADR-0055 applied one layer up from where that record found it. A component that drew nothing when nobody else was present would render *"nobody else is watching"* as empty space — which is exactly what a stopped presence feed renders as. Two causes, one rendering. It is also the state that matters most: a roster of faces renders company beautifully and solitude as nothing at all.

The ceiling is ADR-0021's own sentence made checkable. §2's Directed is *"clearly the local focus"*, and if who else is watching has become the local focus then the thing they are watching is not — which inverts the reason to render any of it.

#The first defect: the string was encoding what the mark may not

The withdrawn report first rendered its last known count, with the retraction carried by the dashed perimeter alone: "2 others on the infeed", dashed.

That is the component contradicting itself inside one element. ADR-0048 emits one unvouched token for a whole component rather than one per variant, and the generator's own comment gives the reason: *"a withdrawn claim may not encode what it would have said, because the system cannot support that either — so a withdrawn critical and a withdrawn ok resolve to the same value."* A string still reading "2" encodes precisely that, and encodes it louder than any colour could.

It is also the failure this component exists to prevent. A count a dead source left behind reads as current, and a reader who believes somebody else is watching looks somewhere else. That is the sentence ADR-0071 kept the row on, arriving as a bug in the row's own first draft.

The quantity now withdraws with the mark. The two things a dead presence source cannot tell apart are company and solitude, and the component says so instead of guessing.

#The second defect: the fix inverted §2's ladder, and the engine measured it

The first wording was *"an unknown number of"* — correct English, twenty characters, and enough to make the withdrawn report its Scope's share leader, out-emitting the same component's Marked rung one row above it:

0.00293  L1  #watch-infeed      <- withdrawn, at the floor
0.00291  L2  #watch-press       <- vouched, at Marked

A retraction that draws more than a live claim is the wrong allocation whatever the grammar, and this system's whole premise is that emission is a budget. The cause was isolated by measurement rather than by reasoning: the word was shortened to two characters, the scene re-rendered, and the leader flipped back to the Marked report — which is what identified the string rather than the outline as the driver, and left the dashed perimeter's own added pixels correctly untouched (ADR-0043's |Lc| 0.00 is what a retraction nobody can find measures).

The word became a suffix, and the position carries meaning the prefix did not. The vouched states quantify the subject; the withdrawn one says something about the report itself.

3 others on the seal press
no others on sorter-21
others on the infeed not reported
0.00502  L4  #alarm-press
0.00291  L2  #watch-press
0.00267  L1  #watch-infeed

No check would have failed on either defect. The share margin was inside tolerance both times, and no rule compares two instances of one component across rungs. The engine reported it; reading the report is what caught it.

#The third thing, which was a check rather than a component

packages/react/test/discipline.test.js derives the vouching set from the component tier now. It used to be eight names typed out by hand, and presence is what exposed the cost: a component may declare vouches: true in the tier and simply be absent from that list, at which point every assertion in the block reports ok about a set that does not contain it.

That is the failure the block's own header warns about — *"a set that quietly emptied would pass a 'none of them demands' check by having none of them"* — written as a guard against drift and then left standing on a list that could drift. ADR-0064's rule reached a list nobody had noticed was one. The set is now joined from vouches to each row's contract, in both directions, and the derivation was observed following the tier: flipping this component's declaration to false moved the set from nine back to eight and removed it by name.

And the tier's own vouching check was observed red before being trusted green, in the manner ADR-0041 requires: renaming .wr-presence--unvouched produced the exact refusal it exists to produce, and restoring it produced VERIFY OK.

#Rejected options

Keep the count on a withdrawn report and let the dashed perimeter carry the retraction. The first draft, and defensible on the reading that a stale number is better than no number. Rejected because it is the one component where that trade goes the wrong way: a stale total misinforms about a set, and a stale watcher count misinforms about whether anybody is looking. It also contradicts the mark it sits inside, which is a component disagreeing with itself in one element.

Draw the watchers rather than counting them. Section G carries avatar as *"the mark presence has no way to draw"*, and a roster of marks is the obvious implementation. Rejected on the layer before it was rejected on anything else: emitter: never means this component accepts nothing, so avatars could never have been inside it. What the build then found is that the words are not a placeholder — a set that states its own cardinality says the alone case, and a row of portraits cannot.

Separate the two variants by light. Rejected, and this is the repository's fourth $stateEncodingExemption and the first that is a *refusal* rather than an accounting. pagination's says the difference is not in light; this one says it may not be. Light in this system means how much attention a thing is owed, and being alone is not owed more attention than being accompanied at the same rung — it is a different fact at the same rung. Encoding it in light would say something the component does not mean.

Give the withdrawn state its own rung rather than pinning it to the floor. It would have made the retraction easier to find. Rejected because it is the half of ADR-0048 that guards the ration: a claim that cannot be supported may not spend the View's budget, and a rung of its own is spending.

#Consequences

Roster 50, built 34 → 35. Fifteen rows remain: §C form 6, §D navigation 3, §E surfaces 2, §F 2, §G 2.

The vouching set is nine and is derived. status-indicator, alert, meter, queue-item, table-row, tag, inline-loading, loading, presence. Eight withdraw to Ambient and alert to Marked, which is its floor.

avatar's question is now sharper and is still open. Section G justifies it as the mark this component could not draw. This component states its cardinality in words, says the alone case that a roster of faces cannot, and accepts nothing — so if avatar is built it will be beside this rather than inside it, and the argument for it will have to be something other than *presence needs it*. Named here and not answered, in ADR-0061's manner.

One check moved and no check kind was added. The battery stands at 23; §10 stands at 27. What changed is that one of the battery's own subjects stopped reading from a typed list.

A scene, seven receipts and two baselines. Scene 61 and its three themed siblings, recorded on darwin-arm64; linux-x64 is owed and standing item 12 opens with this commit.

#Measured

  • COMPONENT_LAYERS — 35 components, 21 Emitters, Presence the twenty-first. Derived this pass, after the contract had been written claiming the nineteenth *(disk, this pass)*.
  • component.config.json — 35 entries, 9 declaring vouches; the ten $interactiveNote entries that count non-interactive components moved twenty-four → twenty-five.
  • tokens:verify — presence: 16 tokens, 4 themes / 2 densities; 32 non-text APCA checks, worst alone/1 on surface-raised in field-night at |Lc| 20.00 against a floor of 15. VERIFY OK.
  • tokens:verify, observed red — .wr-presence--unvouched renamed: *"declares vouches: true but presence.css has no .wr-presence--unvouched rule"*, then green on restore *(darwin-arm64, this pass)*.
  • react:test — the vouching set at 9, and at 8 with this component's tier declaration flipped, which is the derivation observed following its source.
  • Scene 61 — #scope-alarms at 0.05537 / 0.129, 1 demand of cap 1, leader #watch-press L2 at 0.00291 with the withdrawn #watch-infeed L1 at 0.00267 beneath it. Reproducibility exact over 2 renders.
  • Themed siblings — field-day 0.06624 / 0.14320, interior-dark 0.08145 / 0.15292, interior-light 0.06714 / 0.15134.
  • pnpm battery — the verdict this pass is measured by.