Zdůvodnění
Standard UI, který žije v komentářích revize, se vynucuje na stránkách, na které se někdo podíval. Tento web měl 483 stránek a paměť jednoho recenzenta; první strojový audit všech našel 1455 selhání a každá z velkých tříd pocházela z jediného sdíleného zdroje — jedna paleta zvýrazňování způsobila 411 selhání kontrastu na 134 stránkách, jedno typografické pravidlo 491 nedosažitelných rolovacích boxů na 197, jedna idiomatika odkazů 312 odkazů rozlišených jen barvou na 92. Žádné z toho nebyla chyba stránky. Každé bylo rozhodnutím učiněným jednou, aplikovaným všude a nikdy neměřeným.
Pravidlo, které by stránky vyjmenovávalo, by zastaralo v den, kdy se stránka přidá, což je táž vada jako registrace, kterou tento repozitář u webových povrchů už odmítá. Audit se tedy odvozuje z toho, co existuje: stránky ze souborového systému sestaveného webu a z jeho sitemapy, sjednocené, takže i osiřelá stránka je navštívena; šířky z media queries, které CSS build vydal, takže breakpoint přidaný do tématu se audituje, aniž by se měnil test.
Požadované chování
Cílová množina se objevuje. scripts/ui pages a scripts/ui viewports odpovídají, co se bude auditovat a odkud každá hodnota pochází. Ani jedno nečte seznam. Stránka, která se vykreslí, se audituje; šířka, kterou téma deklaruje, se navštíví spolu s pixelem pod ní, kde se skrývá nespojitost rozvržení.
Invarianty jsou spustitelné. scripts/ui audit provozuje vlastní server repozitáře a skutečný prohlížeč nad touto množinou a kontroluje: žádné vodorovné přetečení při žádné šířce, jeden main a jeden h1 na dokument, žádná přeskočená úroveň nadpisu, žádné duplicitní id, každý spouštěč komponenty se rozlišuje na cíl, který jmenuje, a nese přístupný název, žádnou chybu konzole a žádnou nezachycenou výjimku (prohlížeč to hlásí jako chybu stránky, ne zprávu konzole, takže se poslouchá obojí), žádný selhaný požadavek na stejný origin a pravidla WCAG 2.0 A/AA, 2.1 A/AA a 2.2 AA enginu přístupnosti. Verdikt je aritmetika nad nálezy; nic nerozhoduje, že se nález nepočítá.
Markup, který nepíšeme, se normalizuje, neomlouvá. <pre> zvýrazňovače syntaxe, <table> typografického pluginu a checkbox markdown seznamu úkolů přicházejí od třetích stran bez atributu, který bychom mohli nastavit u zdroje. Build normalizuje vykreslený výstup — které prvky se posouvají, se čte ze stylesheetu, který build právě zkompiloval, a paleta se zvedne na práh kontrastu vůči pozadí, které tentýž stylesheet deklaruje, přičemž odstín a sytost zůstanou nedotčeny. Paleta, která už vyhovuje, se přepíše sama na sebe a druhý průchod nic nezmění.
Značkování, které píšeme, se hlídá u zdroje. scripts/ui check trvá milisekundy, nepotřebuje prohlížeč ani sestavený web a odmítne posuvný box, ke kterému se nedá dostat klávesnicí, všude, kde ho tento repozitář píše — v šabloně, generátoru, pohledu v Rustu. Je to ta polovina auditu, která se může postavit mezi člověka a commit.
Nález je sdílený zdroj, dokud se neprokáže opak. Náprava třídy nálezů mění jediné místo, odkud pocházejí. Oprava aplikovaná stránku po stránce na vadu, která má jednu příčinu, je způsob, jak repozitář získá 483 kopií jednoho rozhodnutí.
Chování při selhání
scripts/ui check skončí s kódem 10 při jakémkoli selhání a běží v kontrole ui. scripts/ui audit skončí s kódem 10 při jakémkoli nálezu, zapíše dokument s výsledky a majordomus web report ui jej vykreslí na /tests/ui vedle běhu testů — stránka uvádí každý nález s trasou, šířkou, pravidlem a prvkem a běh zúžený pro lokální iteraci to na vlastní stránce říká, takže částečný běh nelze nikdy číst jako čistý.
Žádný příkaz nerozhoduje, zda stránka má existovat nebo jak má vypadat. To je záměr, formuluje ho člověk, a toto pravidlo jen drží každou existující stránku na stejné úrovni.
Ověření
test/cases/85_ui_conformance.sh to dokazuje mutací: šablona, která zapíše posuvný box bez přístupu z klávesnice, je odmítnuta; stránka přidaná na web se objeví v objevené množině, aniž by se změnil seznam; breakpoint přidaný do motivu se objeví v navštívených šířkách; paleta pod prahem se zvýší a dvojí zvýšení nic nezmění. Jednotkové testy scripts/lib/ui-*.mjs drží objevování, skener, normalizátor a aritmetiku kontrastu. ADR 0022 zaznamenává rozhodnutí a co zamítlo.