LearnNewsExamplesServices
Frontmatter
id18292
titleThe dialog exemption records a button-state count that no longer matches the file it describes
stateClosed
labels
bugdocumentationaitestingbuild
assigneesneo-opus-grace
createdAtSep 4, 2026, 4:55 PM
updatedAtSep 4, 2026, 6:06 PM
githubUrlhttps://github.com/neomjs/neo/issues/18292
authorneo-opus-grace
commentsCount1
parentIssuenull
subIssues[]
subIssuesCompleted0
subIssuesTotal0
contentTrust
projected
quarantined0
signals[]
blockedBy[]
blocking[]
closedAtSep 4, 2026, 6:06 PM

The dialog exemption records a button-state count that no longer matches the file it describes

Closed v13.2.0/archive-v13-2-0-chunk-19 bugdocumentationaitestingbuild
neo-opus-grace
neo-opus-grace commented on Sep 4, 2026, 4:55 PM

Context

buildScripts/util/check-theme-value-files-baseline.json exempts the two neo dialog/Base.scss entries from the #18145 sweep. The exemption is correct; the measurement recorded next to it is not.

The defect

The reason asserts "13 of the 16 button background states". Enumerated from the emitted dist/esm/css/src/button/Base.css, keeping only rules whose subject is the button itself — dropping .neo-button-badge, -ripple, -glyph, -text, which paint child elements rather than the button:

recorded measured
button-own background-color states 16 15
decided by specificity 13 12
win on !important 3 3 ✓

The three !important winners are .neo-button.neo-button-{ghost,secondary,tertiary}:active — src/button/Base.scss:205, 258, 317. That half was right.

The conclusion is unaffected: the structural rule :root .neo-theme-neo-light .neo-dialog .neo-header-toolbar .neo-button is (0,5,0), the heaviest competitor is (0,3,0), so it does outweigh all 12. The exemption stands.

Why this is worth its own ticket rather than a silent amend

A bare number in a decision record decays without any signal. The next maintainer who counts 15 cannot tell whether the record is stale or their own sweep is wrong — and that ambiguity has already sent this one entry back for a second pass. The fix is not the arithmetic: it is naming the file the states live in, so the count is re-derivable in one command instead of re-litigable.

Acceptance criteria

  • The recorded count matches a mechanical enumeration of the emitted button CSS, and the reason names the file that enumeration runs against.
  • The three !important states are named, not just counted — a bare "3 win on !important" is the same decaying assertion one level down.
  • The exemption's conclusion and the guard's output are unchanged: 5 file(s) pending sweep, 2 exempt.
  • No re-expansion. The previous reason was ~1200 characters and was cut deliberately after an operator verbosity challenge on #18264; a correction that grows it back has traded one defect for another.

Not in scope

--button-ghost-background-color-disabled is declared in both neo theme value files and consumed by nothing — ghost is the only variant with no disabled background rule while primary, secondary and tertiary all have one. That is a dangling token, not a counting error, and it belongs in its own sweep.

Evidence

  • buildScripts/util/check-theme-value-files-baseline.json — the neo-light dialog entry (neo-dark defers to it)
  • src/button/Base.scss:205, 258, 317 — the three !important declarations
  • resources/scss/theme-neo-light/dialog/Base.scss:10-17 — the exempted block and its real nesting
  • Parent sweep #18145 (stays open — 3 files pending)

Refs #18145