one-kit-on-every-surface — Code, charts, controls, embeds and shell blocks are one kit on every surface, declared in the design book and held there by a gate
A reader meets one code block, one chart, one copy control, one tab control and one shell block, whichever surface they are on: the site, /ui, the Cockpit or the docs. Each is declared once in the design book with its tokens, and a gate fails the change that renders one another way, so the kit stays one as the surfaces grow.
PLÁNOVÁNO 0 z 8 úkolů hotovo
- připraveno
- 2
- blokováno
- 6
- aktivní
- 0
- verify
- 0
- hotovo
- 0
- zrušeno
- 0
Problém
A survey of master 91c0b5d5658 on 2026-10-20 found each kind of rendered element made several ways. Code is highlighted only on the site (ayu themes, not design tokens); /ui and the Cockpit render plain pre. Charts are drawn by four mechanisms, and only the site's are held to a table. Copy buttons and tabs exist in two implementations each on the site and in none on /ui and the Cockpit. Shell blocks are three styles on the site and bare code on /ui. docs/DESIGN_SYSTEM.md says nothing about syntax highlighting, and no gate refuses a second way of drawing any of them.
Výsledek
A reader meets one code block, one chart, one copy control, one tab control and one shell block, whichever surface they are on: the site, /ui, the Cockpit or the docs. Each is declared once in the design book with its tokens, and a gate fails the change that renders one another way, so the kit stays one as the surfaces grow.
Aktuální stav
Code: I2747 (PR #1294) gives one engine, giallo, and one token-derived palette with a highlighter-check gate, revived after the owner's decision of 2026-10-20. Charts: site/charts.js draws from the page's table; the kit chart and the /ui donut have no table; I2654 holds the site's charts to their tables. Controls: Alpine and kit.js copy and tabs on the site, none on /ui and the Cockpit, and interaction-probe drives the site only. Embeds: none found; Mermaid on the site only. Shells: terminal-run.html, the kit's term_* and plain fences on the site; code.mj-ui-mono reproduce lines on /ui.
Cílový stav
docs/DESIGN_SYSTEM.md carries one section per element kind, naming its mechanism, its tokens and the gate that holds it. Code goes through I2747 everywhere. Every chart is drawn from a table on its page. One copy control and one tab control, kit.js's dependency-free ones, ship to every surface, and interaction-probe drives them on /ui and the Cockpit as on the site. A surface links to another and never embeds it. One shell primitive (prompt not copied, status in words, long output folded) renders every command and its output.
Rozsah
- docs/DESIGN_SYSTEM.md
- share/design
- share/ui
- share/cockpit
- site/templates
- site/kit.js
- site/charts.js
- apps/majordomus-cli/src/ui
- apps/majordomus-cli/src/cockpit
- scripts/lib/ui-audit.mjs
- scripts/interaction-probe
- scripts/lib/interaction-specs
- scripts/ci/design-check
- test/cases
Mimo rozsah
- Rustdoc's own highlighting and themes, which rustdoc owns; it stays excluded from the audit as it is today
- New chart types or new controls: this milestone makes the existing ones one kit
Kritéria přijetí
- The design book has a section for code, charts, controls, embeds and shell blocks, each naming its mechanism, tokens and gate
- For each element kind a planted second implementation on any surface fails a gate that names it
- The site, /ui and the Cockpit pass every one of those gates on master, and the published site is deployed from that master
Validace
- bin/majordomus plan validate
- scripts/ci/design-check
- node scripts/ui audit
Požadované důkazy
- one_kit_gates_case
Rizika
- giallo builds Oniguruma from C on every release target (I2747): the release matrix must prove it before #1294 lands
Úkoly
Každý z nich je prováděcí kontrakt s vlastními kritérii přijetí, validačním příkazem a požadovanými důkazy. Sloupec wave je vrstva grafu závislostí, v níž úkol leží.
| issue | status | vlna | závisí na | název |
|---|---|---|---|---|
| I3790 | BLOKOVÁNO | 1 | I2747 | The design book declares one mechanism, its tokens and its gate for code, charts, controls, embeds and shell blocks |
| I3791 | BLOKOVÁNO | 1 | I2747 | A code block on /ui and the Cockpit carries the one highlighter's classes, and the audit refuses one that does not |
| I3792 | BLOKOVÁNO | 2 | I2654 | Every chart on every surface is drawn from a table on its page |
| I3793 | PŘIPRAVENO | 0 | — | One copy control and one tab control ship to every surface |
| I3794 | BLOKOVÁNO | 1 | I3793 | The interaction probe drives the controls of /ui and the Cockpit as it drives the site's |
| I3795 | PŘIPRAVENO | 0 | — | A surface links to another surface and never embeds it |
| I3796 | BLOKOVÁNO | 1 | I3793 | Every command and its output is one shell block, on every surface |
| I3797 | BLOKOVÁNO | 2 | I3796 | A command shown outside the shell block is refused by the audit |
Graf
flowchart LR
I3790["I3790<br/>The design book declares one mechanism, its tokens and its gate for code, charts, controls, embeds and shell blocks"]:::blocked
I3791["I3791<br/>A code block on /ui and the Cockpit carries the one highlighter's classes, and the audit refuses one that does not"]:::blocked
I3792["I3792<br/>Every chart on every surface is drawn from a table on its page"]:::blocked
I3793["I3793<br/>One copy control and one tab control ship to every surface"]:::ready
I3794["I3794<br/>The interaction probe drives the controls of /ui and the Cockpit as it drives the site's"]:::blocked
I3795["I3795<br/>A surface links to another surface and never embeds it"]:::ready
I3796["I3796<br/>Every command and its output is one shell block, on every surface"]:::blocked
I3797["I3797<br/>A command shown outside the shell block is refused by the audit"]:::blocked
I3793 --> I3794
I3793 --> I3796
I3796 --> I3797
classDef done stroke:#16a34a,fill:#dcfce7,color:#14532d,stroke-width:2px
classDef active stroke:#2563eb,fill:#eff6ff,color:#1e3a8a,stroke-width:2px
classDef verify stroke:#7c3aed,fill:#f5f3ff,color:#4c1d95,stroke-width:2px
classDef ready stroke:#0891b2,fill:#ecfeff,color:#164e63,stroke-width:2px
classDef planned stroke:#0891b2,fill:#ecfeff,color:#164e63,stroke-width:2px
classDef blocked stroke:#b45309,fill:#fffbeb,color:#78350f,stroke-width:2px
classDef cancelled stroke:#6b7280,fill:#f9fafb,color:#374151,stroke-width:2px
classDef superseded stroke:#6b7280,fill:#f9fafb,color:#374151,stroke-width:2pxOdkazuje z tohoto diagramu (8)
- I3790 The design book declares one mechanism, its tokens and its gate for code, charts, controls, embeds and shell blocks
- I3791 A code block on /ui and the Cockpit carries the one highlighter's classes, and the audit refuses one that does not
- I3792 Every chart on every surface is drawn from a table on its page
- I3793 One copy control and one tab control ship to every surface
- I3794 The interaction probe drives the controls of /ui and the Cockpit as it drives the site's
- I3795 A surface links to another surface and never embeds it
- I3796 Every command and its output is one shell block, on every surface
- I3797 A command shown outside the shell block is refused by the audit
Canonical record: .ai/repo/project/milestones/one-kit-on-every-surface.yaml. Read it back with majordomus plan show one-kit-on-every-surface.