Skip to contentWolf-Rayet

Decision records

ADR-0038 An overlay is charged for what it covers, and its sheet fills the view

Accepted2026-09-02Phase 4

#Context

ADR-0013 has said since Phase 2 that an overlay's scrim "is chrome, counted against the overlay's Scope per ADR-009". Nothing implemented it, and nothing needed to: the only committed overlays are 05-overlay and 06-overlay-violation, whose overlay Scope is a sibling column overlapping no other Scope. No scrim in this repository had ever covered a Scope, so nothing had ever asked whose budget the covered pixels belong to.

The modal asks, because a modal covers everything. Measured on the first composed scene, in a view whose own Scopes are all calm and carry zero demands:

Scopefield-nightinterior-darkinterior-lightfield-day
#scope-fleet0.041960.044910.561750.62312
#scope-operations0.045480.051670.455670.50350
#scope-telemetry0.044380.049410.562260.62391
#scope-modal0.041950.046980.519700.57316
ceiling0.128640.152920.151340.14320

Two separate faults are in that table, and the second is not the one it looks like.

The first is attribution. #scope-fleet and #scope-telemetry draw nothing unusual and are four times over ceiling, because measure.js composites any full-bleed layer into every Scope box it overlaps and charges each of them for a scrim they did not draw. That contradicts ADR-0013's own sentence and is a defect rather than a decision.

The second is the modal itself, and it is a design finding wearing a metric's clothes. Emission is a mean over a Scope's governed pixels, so an overlay's load is set by the ratio of scrim to sheet and by nothing else about it. The first implementation was a conventional centred dialog — a 420px sheet under a full-viewport scrim — which is almost entirely scrim, and in a light theme a near-black scrim over a near-white substrate is close to the largest deviation the metric can record. The system was not failing to describe a modal. It was declining to pay for one built that way.

#Decision

A pixel covered by an occluding Scope belongs to that Scope's budget and to no other. It leaves the governed set of every Scope beneath it, and the overlay is charged for the composite — the scrim and everything showing through it. This is ADR-0013's ratified sentence implemented, not a new rule. A Scope left with no governed pixels is reported as unmeasured rather than as a load of zero, because "nothing of it is on screen" and "it emitted nothing" are different claims and only one of them is a measurement.

Nothing is laundered by this. Emission hidden under a scrim is not deleted, it is moved: the overlay pays for the change its scrim makes to those pixels, which is ADR-0014's rule for what a scrim costs, applied to the region it costs it over.

A modal's sheet fills the view inside a scrim margin. Not a small dialog floating in a dimmed expanse. The emission origin is untouched — ADR-0016's "the theme substrate in every stacking context, without exception" stands — and so are the per-theme ceilings; what changes is the component, because the budget was right and the shape was wrong. 05-overlay has encoded this since Phase 2 without anyone stating it: its legal overlay insets the sheet by 4px, its must-fail sibling insets by 96px, and the only difference between them is how much scrim is left showing. This is that pair's rule stated once and applied at viewport scale.

#Rejected options

Three of these were built and measured this pass before being refused. The measurements are the argument.

Derive the scrim's alpha per theme so occlusion costs the same everywhere. Merit: it attacks the asymmetry at its source, keeps ADR-0014's "one mechanism, one economy" requirement, and is derived rather than tuned — the move ADR-0030 made for the ceiling. Refuted by measurement. Solving alpha so the scrim's cost equals each theme's own raised-surface step gives 0.0597 in interior-light and 0.0418 in field-day — no occlusion at all — against 0.9375 in interior-dark and 1.0000 in field-night, which is the total content erasure ADR-0014 rejected, arriving from the other end; field-night cannot reach the target at full opacity. The scrim role is near-black in all four themes, so it sits 0.03 from its own substrate in field-night and 0.79 away in interior-light. Equal cost and equal occlusion cannot both hold while one colour serves four themes.

Give overlay Scopes a derived ceiling of their own — the ordinary per-theme ceiling plus the occlusion the stacking context mandates. Merit: it makes the non-discretionary half of an overlay's pixels explicit, and every term is a function of the theme rather than of a scene, which is the shape ADR-0030 requires. Refuted by measurement, and quickly: a theme-wide allowance is an upper bound, because it is a per-pixel deviation while emission is a mean, so any overlay whose sheet covers area spends less than it is allowed. 06-overlay-violation measured 0.31317 against an allowance of 0.71336 and passed — the option defused ADR-0013's own proof that a scrim can blow a ceiling, and handed every overlay 0.40 of free discretionary budget against the 0.15 an ordinary Scope gets. Making the allowance the scrim's *measured* cost closes the hole and makes the ceiling a function of the scene it judges, which ADR-0030 and ADR-0031 exist to forbid.

Re-ground an overlay's emission on its own scrim composite. Merit: the strongest argument of the three, and it nearly landed. A scrim does not emit — its whole function is to withdraw attention from what it covers — and GROUND_OF has called the overlay's ground the scrim composite since ADR-0015; ADR-0016 refused it only because it could not tell a scrim that is a ground from a scrim that is free elevation, and the attribution map above is exactly the evidence it lacked. Refuted by measurement anyway, on a fault neither record anticipated: measuring from the composite makes a bright sheet on a dark ground enormous, so 05-overlay — a legal overlay, passing since Phase 2 — went to 0.86298 in field-day and 0.91412 in interior-light. Worse, it hands overlays a dilution lever. Scrim pixels deviate zero from their own ground, so enlarging the scrim lowers the mean, and an overlay could buy budget by covering more. That is the exploit probes p2a-dilution-tight and p2b-dilution-padded exist to catch, arriving through the stacking context.

Leave the modal a centred dialog and mark it unavailable in the light themes. Merit: honest about the number, and §4 has a mechanism for a component that cannot express itself in a theme. Rejected because that mechanism is for a component that cannot work *without hue*, and §4 calls reaching for it a design smell to be interrogated. Nothing about this component's meaning fails in a light theme; a shape chosen out of habit was expensive there, and the answer to an expensive shape is a different shape.

Make the overlay Scope panel-scale, like 05-overlay. Merit: every ADR survives untouched, the numbers pass today, and it needs no engine change at all. Rejected because role="dialog" with aria-modal="true" over a region that leaves the rest of the page interactive is an accessibility claim the pixels do not back. The decision above gets the same numbers without the lie.

#Consequences

What this makes easier. An overlay is now priced by the one ratio that governs it, and that ratio is legible in the component rather than buried in a scene's inset. The modal measures 0.047 to 0.094 across the four themes against ceilings of 0.129 to 0.153 — inside every one of them, with no ceiling changed and no tolerance widened.

What is verified rather than assumed. The attribution map moved no committed number: 29 unthemed and 95 themed scenes were re-measured on darwin-arm64 and every pre-existing one is identical to six decimals, because no existing overlay overlaps another Scope. 05-overlay still passes in all four themes and 06-overlay-violation still fails on emission at 0.31317 against 0.15134 — ADR-0013's proof keeps its teeth, which three of the options above cost it.

What this makes harder. A product that wants a small dialog cannot have one at full-viewport scrim, and the reason is a number rather than a preference. That is the system working, and it is the first time the budget has changed a component's shape rather than its palette.

Enforcement table. Touches Emission load — the governed set now excludes pixels an overlay is charged for instead — and adds no new check kind. Substrate floor is untouched and is what still stops an overlay misdeclaring the ground it sits on. ADR-0016 is cited, not amended: the emission origin is the theme substrate in every stacking context, as it was.