Skip to contentWolf-Rayet

Decision records

ADR-0136 The field reads at arm's length, and its raises reach the components

Accepted2026-09-25Phase 7

#Context

Scene 77, the helm display ADR-0135 built, was read with a real font and its alarm labels, key labels and range lines were 14px. That is text-caption, the reference's control label, chosen for a reader at a desk. The helm is read at arm's length, in sun or at night, often with gloves. The type floor used to be 1rem everywhere and was lowered to 0.875rem so indoor controls could match the reference; nothing put the old floor back where it was always right.

Measuring the fix found a larger fault. The field themes already raise two things over the interior values under ADR-0112: interactive targets to 3.5rem, and borders to the 2px no-hairline minimum. Both are emitted on [data-wr-theme="field-…"]. Custom properties inherit from the nearest declaration, and every Scope re-declares these tokens through its density block, one element below the theme. So the raise was declared on the root and replaced at the first Scope. The generator's own comment says the theme-only selector was chosen to reach fixtures that put the theme on <body> and the density on a Scope; it did not. In scene 77 the captions resolved to 0.875rem and the keys to the interior target. tokens:verify passed throughout, because it read the theme block and never asked whether anything under a Scope inherited it.

#Decision

The field class has a reading minimum of 1rem. type.fieldMinimum in generator.config.json. A text size below it is raised on the field theme selectors to the first type step that clears it, by ADR-0112's mechanism. In comfortable that raises text-caption from 0.875rem to 1rem; in compact it raises text-caption and text-body. The interior themes keep what the reference draws. 1rem and not higher, because a larger caption would read bigger than body text.

Every field raise is emitted on the theme and on each density-carrying element under it. The selector is [data-wr-theme="X"], [data-wr-theme="X"] [data-wr-density], and the compact clamp gains the same descendant form. The descendant half has higher specificity than the density block, so it wins on the Scope where the density block used to win. Every surface in this repository sets its theme once, on the root, so the descendant form reaches no other theme's subtree.

tokens:verify reads the grouped selector and no other. A raise block that names only the theme is read as no raise, so the fault that shipped cannot ship again silently. It also gains 20 checks that every type token a field theme resolves reaches the reading minimum.

#Rejected options

Raise the label sizes in the helm scene's stylesheet. One file and no baseline would move. It lost because a scene stylesheet may not restyle a component, and because the labels are small in every field scene, not only this one.

Give status-indicator and button a field size in their own tier records. It would reach the two components the helm uses. It lost because the reading distance is a property of the theme class, not of two components, and ADR-0112 already put the target and line minimums there for the same reason.

A 1.143rem field minimum, the next step up. Closer to what marine display guidance asks of a label. It lost because it would raise the caption above body text in comfortable, inverting the ladder; raising both is a larger decision than this one.

Fix only the reading floor and leave the selector. The new raise would have joined two others that never arrived. A fix that works only for the value that prompted it is a second copy of the same fault.

#Consequences

54 unthemed and 54 themed scenes moved on darwin-arm64 and no verdict changed. Every scene composed in field-night and every field-day sibling now draws the targets, the lines and the captions its theme has claimed since ADR-0112. The records are rewritten on darwin-arm64; linux-x64 is re-recorded from CI, as every move before it was.

ADR-0112 is corrected, not superseded. Its rule stands. What changes is the emission that was meant to carry it.

Touches the Theme capability and Contrast rows of the enforcement table through tokens:verify, and the budget fixtures through every field scene. Adds one check.