Přeskočit na obsah

Tato stránka byla automaticky přeložena z angličtiny, jediného jazyka, ve kterém se tento web píše. Číst originál.

majordomus.dev je referencí toho, jak produkt vypadá, a každá stránka UI i Cockpitu nosí navigační lištu webu

majordomus.dev je referencí toho, jak produkt vypadá, a každá stránka UI i Cockpitu nosí navigační lištu webu

majordomus://rule/project.the-ui-wears-the-sites-navbar@1aktivní designuinavigaceodvozenoprojectionsweb

odkazuje na něj

Nic ve vrstvě to nejmenuje. Zpětné odkazy se odvozují, takže prázdný seznam je odpověď, ne opomenutí.

Zdůvodnění

Příkaz vlastníka z 2026-10-16: majordomus.dev je referencí pro styl produktu a jeho pravidla rozhraní a Cockpit a UI na /ui z něj vycházejí — stejné rozvržení, pixelově shodný navbar — místo aby se druhý design udržoval ručně.

Měřeno toho dne, web a UI sdílely své tokeny (--mj-design byl na obou týž otisk) a nic jiného v horní části stránky. Lišta webu je při šířce 1440 vysoká 73 pixelů a při 390 65, nese značku a release, čtyři menu, hledání, přepínač motivu, produkt, GitHub a výzvu k akci a je sázena 16pixelovým písmem. Lišta UI byla 67pixelová nástrojová lišta vedle 240pixelového postranního panelu s vlastní značkou — 119 pixelů vysoká při 390 — s jiným hledáním, jiným ovládáním motivu a žádnou z otázek webu, 14pixelovým písmem. Lišta Cockpitu byla třetí: 53 pixelů, 13,5pixelové písmo, značka s příponou „Cockpit“, odkazy na Swagger a OpenAPI a textové tlačítko pro motiv. Tři lišty pro jeden produkt, každá udržovaná ručně, a každá místo, kam by další změna ostatních nedorazila.

Pravidlo, které by říkalo „udržujte je podobné“, by ten stav popisovalo, ne ukončovalo. Navigace je už deklarována jednou (project.navigation-is-declared-once) a design je už jedna deklarace (project.design-tokens-declared-once). Chybělo, že samotná lišta — značkování, do něhož se deklarace vykresluje — měla jeden renderer a každý další povrch musel napodobovat jeho výstup.

Požadované chování

  1. Jeden renderer. Lištu vykresluje partial webu (site/templates/partials/navbar.html) nad deklarací webu (site/data/nav.toml) a nic jiného. scripts/ui navbar --write ji vyřízne z sestaveného webu — z jeho stránky not-found, jediné stránky, na které žádná položka není aktuální — do apps/majordomus-cli/src/ui/navbar.html, které spustitelný soubor zkompiluje do sebe a které vykreslují UI i Cockpit (ui/navbar.rs). Dvě věci z tohoto buildu se mění v to, co doplňuje spustitelný soubor: release, který odznak pojmenovává, se stává slotem, a odkaz na mapu webu v patě každé stránky vede na úvodní stránku webu, protože obrazovka UI takovou patu nemá. Kopii nikdo needituje.
  2. Stejné styly. Stylesheety UI a Cockpitu kompilují přesně ty utility, které texty jmenují, ze stejného Tailwindu, stejného tématu Flowbite a stejných generovaných designových listů, z nichž je kompiluje app.css webu (share/ui/src/ui.css a share/cockpit/src/cockpit.css, každý @source texty). Lišta si nastavuje vlastní velikost písma, takže stránka, která nastaví jinou na svém body, ji nezmění.
  3. Totéž chování. Menu lišty a přepínač motivu běží na skriptech samotného webu, site/nav.js a site/theme.js, servírovaných z share/ui/ a share/cockpit/ jako bajtové kopie, které scripts/cockpit-assets zapisuje a scripts/cockpit-assets --check drží shodné s originály; stránka nese kontrakt motivu na <html>, kde jej čte skript webu. Tlačítko hledání lišty vede k vlastnímu hledání UI a v Cockpitu k jeho paletě.
  4. O čem rozhoduje program. Verze, kterou odznak uvádí, je verze programu; položka, kterou web vede na publikovaný snímek povrchu obsluhovaného tímto procesem (data-nav-primary a data-nav-snapshot značí částečné zápisy), vede na živý povrch a přestane říkat „snímek“. Každý další odkaz vede na web na jeho vlastní adrese.
  5. Nic vedle toho. Žádný z povrchů nekreslí druhou značku, druhý přepínač motivu ani druhý pruh, který zůstává nahoře; vlastní navigace UI — obrazovky — a Cockpit — jeho sekce — jsou postranní panel pod ním a nástrojová lišta každého — vyhledávání UI a další povrchy procesu, jméno, paleta a odkazy API Cockpit — je řádek pod ním, který na obrazovce nezůstává.

Chování při selhání

scripts/ui navbar (a scripts/ui audit, které ji spouští jako první, jako kontrolu ui-audit úlohy ui) selže s kódem 10 a pojmenuje každý rozdíl:

  • kopie není lišta, kterou vykresluje sestavený web — náprava je scripts/site-build && scripts/ui navbar --write, pak scripts/cockpit-assets;
  • prvek lišty, kterou web kreslí na úvodní stránce, a ten kreslený na /ui nebo na /cockpit se liší tagem, třídami, textem, vykresleným boxem (nad jeden pixel) nebo kterýmkoli z vypočtených stylů uvedených v scripts/lib/ui-navbar.mjs, při deklarované šířce (site/data/registry/design.json viewports), v tématu, se zavřenou lištou nebo s otevřenou nabídkou. Text verze se před měřením nastaví na jednu hodnotu na obou stránkách a poznámka o snímku se vynechá; nic jiného se neomlouvá.

Chybějící build webu je kód 12 a běh bez prohlížeče kód 13 — na CI odmítnutý, protože porovnání, které nikdo neprovedl, není porovnání, které platí.

Náprava jde vždy jedním směrem: změňte partial webu nebo deklaraci, přebuildujte a nechte kopii následovat. Nikdy needitujte kopii a nikdy nestylujte lištu ze stylů UI.

Ověření

scripts/site-build && scripts/ui navbar      # the copy, then the browser comparison
scripts/ui test                               # the cut and the comparison, on fixtures
scripts/cockpit-assets --check                # the scripts are the site's bytes
cargo test --manifest-path apps/majordomus-cli/Cargo.toml ui::navbar ui::shell

Odkud to pochází

kanonický soubor
.ai/repo/rules/project/the-ui-wears-the-sites-navbar.v1.md
identity
project.the-ui-wears-the-sites-navbar@1
dostupné také jako
Zdroj MCP majordomus://rule/project.the-ui-wears-the-sites-navbar@1 · majordomus entity show rule/project-the-ui-wears-the-sites-navbar-1 · GET /api/v1/entity?uri=majordomus://rule/project.the-ui-wears-the-sites-navbar@1
v Cockpitu
/cockpit/objects/rule/project-the-ui-wears-the-sites-navbar-1

Tato stránka je generována z výše uvedeného souboru pomocí scripts/generate-site-data; úprava stránky nic nemění, úprava souboru změní všechna rozhraní. Výše uvedené vztahy jsou hrany docs/generated/graph.json, které spustitelný program zapisuje ze stejného indexu.

Prohledává názvy a popisy všech stránek, které tento web publikuje.