Skip to content

I2852 — every class a UI screen gives an element is one the UI's stylesheet defines

A unit test reads every literal `.class(...)` of the UI's screen sources and the UI's stylesheet source, and refuses a class that the stylesheet neither defines nor defines parts of. The classes it found undefined move to the kit's own: the search labels to mj-sr-only, the lists to mj-ui-prose-list, the mesh's counts to mj-ui-mono.

DONE wave 0 · p1 · implementation profile · parallel safe

Part of truthful-plan-surfaces — The plan's surfaces are inferred from delivery, and nothing they show is typed beside the repository.

Objective

A unit test reads every literal `.class(...)` of the UI's screen sources and the UI's stylesheet source, and refuses a class that the stylesheet neither defines nor defines parts of. The classes it found undefined move to the kit's own: the search labels to mj-sr-only, the lists to mj-ui-prose-list, the mesh's counts to mj-ui-mono.

Why

Found on 2026-10-18 at master 707a04c7ce8. The landing seat's review of /ui/prs found mj-ui-list styled by nothing. A sweep of the UI's sources then found five classes the stylesheet does not define: mj-ui-sr-only on the Issues and PR Drain search labels, which were therefore visible though they were meant for screen readers only; mj-ui-list in the claim, intent and IDD screens; mj-ui-num in the mesh's tables. The rest are block roots whose parts are styled. Nothing compared the two, so each was a promise the page did not keep. 2b had claimed the gate as I2905 and released it to 3e.

Current state

Screens emit classes no stylesheet rule matches, and nothing reports it.

Desired state

ui::tests::every_class_a_screen_emits_is_one_the_stylesheet_defines holds every screen, including one added later, and the screens use only classes the kit defines.

Scope

  • apps/majordomus-cli/src/ui/mod.rs
  • apps/majordomus-cli/src/ui/issues.rs
  • apps/majordomus-cli/src/ui/prs.rs
  • apps/majordomus-cli/src/ui/claim.rs
  • apps/majordomus-cli/src/ui/intent.rs
  • apps/majordomus-cli/src/ui/idd.rs
  • apps/majordomus-cli/src/ui/mesh.rs

Out of scope

  • Classes built with format! (a tone, a state): their stems are the kit's, and the test reads literals.
  • The Cockpit's stylesheet and pages: a separate kit with its own assets.

Dependencies

None. This issue is a root of the graph.

Acceptance criteria

  • A screen class the stylesheet does not define fails the UI's unit tests, naming the file, the line and the class
  • The Issues and PR Drain search labels are hidden by mj-sr-only

Validation

  • bin/majordomus plan validate
  • cargo test --lib -- ui::

Evidence required

  • every_class_is_defined_test

Evidence

coverstypecommandresultat commit
every_class_is_defined_testcivalidate run 39438896504 at master 9a5a9b77520: rust (1-3) jobs 118683336143 118683336062 118683336401 run cargo test, incl. ui::every_class_a_screen_emits_is_one_the_stylesheet_defines (500f0d48b34)success (the run's only red job is pages, which runs no test)a81b1e3

Timeline

started
2026-10-20T16:16:11Z
verified
—
completed
2026-10-20T16:30:10Z

Those three fields, the evidence above and the state of the dependencies are all the status is made of. There is no status field to disagree with them.

Canonical record: .ai/repo/project/issues/I2852.yaml. Read it back with majordomus plan show I2852.

Searches the titles and descriptions of every page this site publishes.