Zdůvodnění
Před tímto pravidlem znal repozitář své webové povrchy na tolika místech, kolik měl konzumentů: čtyři prefixy pojmenované jednotlivě v routeru, jeden výstupní adresář v publikačním modelu, třídy cest v modelu kontrol a nic, co by pojmenovalo oba světy. Přicházely dva další povrchy a při přidání postaru by každý stál jednu routu, jednu výstupní cestu, jednu třídu cest, jeden krok kopírování, řádek v tabulce dokumentace a zmínku v nasazovacím workflow. Šest registrací pro jeden adresář HTML je definicí děravé abstrakce a sedmý povrch stojí totéž znovu.
Požadované chování
Statický povrch je adresář pod generovaným kořenem webu s surface.json vedle něj: producent zapíše obojí a tato deklarace je celá registrace. Mount je jediná věc, kterou nelze odvodit — adresář s HTML neříká, zda patří na /tests nebo na /reports/tests — takže jej deklaruje producent a vše ostatní plyne z objevování.
Nic jiného povrch neregistruje. Ne router, který se ptá rozřešené topologie, zda statický povrch vlastní cestu; ne publikace, která skládá podle připojení; ne model kontrol, dokumentace ani seznam kdekoli. Trasa, na kterou odpovídá samotný spustitelný soubor, je popsána v topologii, aby se zachytily kolize, a vyřizuje ji spustitelný soubor, protože tyto trasy se liší chováním, ne daty.
Vlastnictví route se validuje, nikdy se nenechává na pořadí, v němž byly routes přidány. Dva povrchy nesmějí nárokovat jeden mount; povrch nesmí sedět uvnitř podstromu jiného, s výjimkou kořenové aplikace, protože odpovídat na to, co nikdo jiný nenárokuje, je celá její práce; adresář statického povrchu žije pod generovaným kořenem; a požadavek nesmí opustit adresář, z něhož se servíruje.
Generovaný webový kořen je odvozený stav: reprodukovatelný, zahoditelný, nikdy nesledovaný a nikdy nečtený jako zdroj.
Chování při selhání
majordomus web validate hlásí každý nález s povrchem, hodnotou, odkud hodnota pochází, a opravou a při jakékoli chybě skončí kódem 10; kontrola web-topology ji spouští v CI a změna, po níž nelze topologii rozřešit, se nesloučí. Povrch s chybějícím adresářem je nález pod --artifacts, což potřebuje obsluha a publikování, a ne před během producenta, což může validace před sestavením poctivě říci.
Žádný příkaz nerozhoduje, zda povrch má existovat nebo kam patří: to je záměr, člověk jej uvede v producentovi a toto pravidlo jen drží repozitář v tom, aby jej uvedl jednou.
Ověření
test/cases/84_web_surfaces.sh to dokazuje povrchem, pro který nikdo nepsal kód: adresář s deklarací je vypsán, vysvětlen s provenance, validován, volitelný podle deklarovaného id, složen do publikace pod svým mountem a poskytován běžícím spustitelným souborem — a jeho odstranění nezanechá nic. Odmítnutí se dokazují mutací: mount nárokovaný dvakrát, povrch vnořený do podstromu jiného, deklarace s klíčem, který kontrakt nemá. Unit testy apps/majordomus-cli/src/web/ drží model, kompozici a hranici poskytování. ADR 0013 zaznamenává rozhodnutí a co zamítlo.